mirror of
https://github.com/apache/impala.git
synced 2025-12-19 18:12:08 -05:00
IMPALA-12824: Removes the prettyprint_duration Built-in Function
The prettyprint_duration function was originally implemented in IMPALA-12824 to work with the workload management tables which stored durations in integer nanoseconds. These tables have changed to store decimal seconds. The prettyprint_duration function would have required a large investment of time to make it work with decimal values, and since the new format is more human readable anyways, this function has been removed. Change-Id: If2154c2ed9a7217ed4b7587adeae87df55ff03dc Reviewed-on: http://gerrit.cloudera.org:8080/21208 Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com> Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
This commit is contained in:
committed by
Impala Public Jenkins
parent
c8d56425f8
commit
3e4fdeece1
@@ -556,9 +556,8 @@ Benchmark* BenchmarkConditionalFunctions(bool codegen) {
|
||||
// find_in_set 321 323 325 0.765X 0.761X 0.76X
|
||||
// regexp_extract 42 42.8 43 0.1X 0.101X 0.101X
|
||||
// regexp_replace 2.94 2.96 3 0.00701X 0.00698X 0.00702X
|
||||
// prettyprint_duration 18.3 18.6 18.7 0.0437X 0.0439X 0.0438X
|
||||
// prettyprint_bytes 9.54 9.72 9.75 0.0227X 0.0229X 0.0228X
|
||||
//
|
||||
//
|
||||
// StringFnCodegen: Function iters/ms 10%ile 50%ile 90%ile 10%ile 50%ile 90%ile
|
||||
// (relative) (relative) (relative)
|
||||
// ---------------------------------------------------------------------------------------------------------
|
||||
@@ -588,7 +587,6 @@ Benchmark* BenchmarkConditionalFunctions(bool codegen) {
|
||||
// find_in_set 320 323 325 0.694X 0.693X 0.691X
|
||||
// regexp_extract 42.2 43 43.2 0.0915X 0.0922X 0.0918X
|
||||
// regexp_replace 2.89 2.94 3 0.00626X 0.00631X 0.00637X
|
||||
// prettyprint_duration 18.3 18.6 18.7 0.0398X 0.04X 0.0397X
|
||||
// prettyprint_bytes 9.55 9.72 9.74 0.0207X 0.0208X 0.0207X
|
||||
Benchmark* BenchmarkStringFunctions(bool codegen) {
|
||||
Benchmark* suite = new Benchmark(BenchmarkName("StringFn", codegen));
|
||||
@@ -618,7 +616,6 @@ Benchmark* BenchmarkStringFunctions(bool codegen) {
|
||||
BENCHMARK("find_in_set", "find_in_set('ab', 'abc,ad,ab,ade,cde')");
|
||||
BENCHMARK("regexp_extract", "regexp_extract('abxcy1234a', 'a.x.y.*a', 0)");
|
||||
BENCHMARK("regexp_replace", "regexp_replace('axcaycazc', '', 'r')");
|
||||
BENCHMARK("prettyprint_duration", "prettyprint_duration(123456789)");
|
||||
BENCHMARK("prettyprint_bytes", "prettyprint_bytes(987654321)");
|
||||
return suite;
|
||||
}
|
||||
|
||||
@@ -4347,37 +4347,6 @@ TEST_P(ExprTest, StringFunctions) {
|
||||
"jaro-winkler boost threshold values can range between 0.0 and 1.0\n");
|
||||
}
|
||||
|
||||
// Test prettyprint_duration
|
||||
TestStringValue("prettyprint_duration(-1)", "-1.000ns");
|
||||
TestStringValue("prettyprint_duration(0)", "0.000ns");
|
||||
TestStringValue("prettyprint_duration(1234)", "1.234us");
|
||||
TestStringValue("prettyprint_duration(123456789012)", "2m3s");
|
||||
TestStringValue("prettyprint_duration(12345678901292)", "3h25m");
|
||||
TestIsNull("prettyprint_duration(NULL)", TYPE_STRING);
|
||||
|
||||
// Test at the type boundaries for tinyint.
|
||||
TestStringValue("prettyprint_duration(127)", "127.000ns");
|
||||
TestStringValue("prettyprint_duration(128)", "128.000ns");
|
||||
TestStringValue("prettyprint_duration(-128)", "-128.000ns");
|
||||
TestStringValue("prettyprint_duration(-129)", "-129.000ns");
|
||||
|
||||
// Test at the type boundaries for smallint.
|
||||
TestStringValue("prettyprint_duration(32767)", "32.767us");
|
||||
TestStringValue("prettyprint_duration(32768)", "32.768us");
|
||||
TestStringValue("prettyprint_duration(-32768)", "-32768.000ns");
|
||||
TestStringValue("prettyprint_duration(-32769)", "-32769.000ns");
|
||||
|
||||
// Test at the type boundaries for int.
|
||||
TestStringValue("prettyprint_duration(2147483647)", "2s147ms");
|
||||
TestStringValue("prettyprint_duration(2147483648)", "2s147ms");
|
||||
TestStringValue("prettyprint_duration(-2147483648)", "-2147483648.000ns");
|
||||
TestStringValue("prettyprint_duration(-2147483649)", "-2147483649.000ns");
|
||||
|
||||
// Test at the type boundaries for bigint.
|
||||
TestStringValue("prettyprint_duration(9223372036854775807)", "2562047h47m");
|
||||
TestStringValue("prettyprint_duration(-9223372036854775808)",
|
||||
"-9223372036854775808.000ns");
|
||||
|
||||
// Test prettyprint_bytes
|
||||
TestStringValue("prettyprint_bytes(-1234)", "-1.21 KB");
|
||||
TestStringValue("prettyprint_bytes(0)", "0");
|
||||
|
||||
@@ -1907,26 +1907,6 @@ static StringVal prettyPrint(FunctionContext* context, const T& int_val,
|
||||
return result;
|
||||
}
|
||||
|
||||
StringVal StringFunctions::PrettyPrintDuration(FunctionContext* context,
|
||||
const BigIntVal& duration_us) {
|
||||
return prettyPrint(context, duration_us, TUnit::TIME_NS);
|
||||
}
|
||||
|
||||
StringVal StringFunctions::PrettyPrintDuration(FunctionContext* context,
|
||||
const IntVal& duration_us) {
|
||||
return prettyPrint(context, duration_us, TUnit::TIME_NS);
|
||||
}
|
||||
|
||||
StringVal StringFunctions::PrettyPrintDuration(FunctionContext* context,
|
||||
const SmallIntVal& duration_us) {
|
||||
return prettyPrint(context, duration_us, TUnit::TIME_NS);
|
||||
}
|
||||
|
||||
StringVal StringFunctions::PrettyPrintDuration(FunctionContext* context,
|
||||
const TinyIntVal& duration_us) {
|
||||
return prettyPrint(context, duration_us, TUnit::TIME_NS);
|
||||
}
|
||||
|
||||
StringVal StringFunctions::PrettyPrintMemory(FunctionContext* context,
|
||||
const BigIntVal& bytes) {
|
||||
return prettyPrint(context, bytes, TUnit::BYTES);
|
||||
@@ -1947,4 +1927,4 @@ StringVal StringFunctions::PrettyPrintMemory(FunctionContext* context,
|
||||
return prettyPrint(context, bytes, TUnit::BYTES);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -236,13 +236,6 @@ class StringFunctions {
|
||||
const StringVal& s2, const DoubleVal& scaling_factor,
|
||||
const DoubleVal& boost_threshold);
|
||||
|
||||
/// Converts nanoseconds stored as an integer value into human readable time durations.
|
||||
/// For example, 2147483647 nanoseconds is converted to "2s147ms".
|
||||
static StringVal PrettyPrintDuration(FunctionContext*, const BigIntVal& duration_us);
|
||||
static StringVal PrettyPrintDuration(FunctionContext*, const IntVal& duration_us);
|
||||
static StringVal PrettyPrintDuration(FunctionContext*, const SmallIntVal& duration_us);
|
||||
static StringVal PrettyPrintDuration(FunctionContext*, const TinyIntVal& duration_us);
|
||||
|
||||
/// Converts bytes stored as an integer value into human readable memory measurements.
|
||||
/// For example, 123456789012 bytes is converted to "114.98 GB".
|
||||
static StringVal PrettyPrintMemory(FunctionContext*, const BigIntVal& bytes);
|
||||
|
||||
@@ -610,10 +610,6 @@ visible_functions = [
|
||||
[['parse_url'], 'STRING', ['STRING', 'STRING', 'STRING'], 'impala::StringFunctions::ParseUrlKey',
|
||||
'_ZN6impala15StringFunctions15ParseUrlPrepareEPN10impala_udf15FunctionContextENS2_18FunctionStateScopeE',
|
||||
'_ZN6impala15StringFunctions13ParseUrlCloseEPN10impala_udf15FunctionContextENS2_18FunctionStateScopeE'],
|
||||
[['prettyprint_duration'], 'STRING', ['BIGINT'], 'impala::StringFunctions::PrettyPrintDuration'],
|
||||
[['prettyprint_duration'], 'STRING', ['INT'], 'impala::StringFunctions::PrettyPrintDuration'],
|
||||
[['prettyprint_duration'], 'STRING', ['SMALLINT'], 'impala::StringFunctions::PrettyPrintDuration'],
|
||||
[['prettyprint_duration'], 'STRING', ['TINYINT'], 'impala::StringFunctions::PrettyPrintDuration'],
|
||||
[['prettyprint_bytes'], 'STRING', ['BIGINT'], 'impala::StringFunctions::PrettyPrintMemory'],
|
||||
[['prettyprint_bytes'], 'STRING', ['INT'], 'impala::StringFunctions::PrettyPrintMemory'],
|
||||
[['prettyprint_bytes'], 'STRING', ['SMALLINT'], 'impala::StringFunctions::PrettyPrintMemory'],
|
||||
|
||||
@@ -1036,13 +1036,6 @@ under the License.
|
||||
>PRECISION</xref>
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
<xref href=
|
||||
"impala_string_functions.xml#string_functions/prettyprint_duration">
|
||||
PRETTYPRINT_DURATION</xref>
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
<xref href=
|
||||
|
||||
@@ -182,10 +182,6 @@ under the License.
|
||||
<xref href="#string_functions/parse_url">PARSE_URL</xref>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<xref href="#string_functions/prettyprint_duration">PRETTYPRINT_DURATION</xref>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<xref href="#string_functions/prettyprint_bytes">PRETTYPRINT_BYTES</xref>
|
||||
</li>
|
||||
@@ -1138,45 +1134,6 @@ select instr('foo bar bletch', 'b', 1, 2);
|
||||
|
||||
</dlentry>
|
||||
|
||||
<dlentry id="prettyprint_duration">
|
||||
|
||||
<dt>
|
||||
PRETTYPRINT_DURATION(TINYINT / SMALLINT / INT / BIGINT nanoseconds)
|
||||
</dt>
|
||||
|
||||
<dd>
|
||||
<b>Purpose:</b> Formats numeric nanoseconds in a human readable manner.
|
||||
<p>
|
||||
<b>Return type:</b> <codeph>STRING</codeph>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b>Usage notes:</b>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Negative durations are not fully supported. No conversion to milliseconds/seconds/minutes/hours
|
||||
is performed. The input value is directly returned with the <codeph>ns</codeph> suffix added.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b>Examples:</b>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<codeblock>
|
||||
select prettyprint_duration(1), prettyprint_duration(12345678), prettyprint_duration(1234567890123), prettyprint_duration(98765432141451), prettyprint_duration(-436512);
|
||||
|
||||
+-------------------------+--------------------------------+-------------------------------------+--------------------------------------+-------------------------------+
|
||||
| prettyprint_duration(1) | prettyprint_duration(12345678) | prettyprint_duration(1234567890123) | prettyprint_duration(98765432141451) | prettyprint_duration(-436512) |
|
||||
+-------------------------+--------------------------------+-------------------------------------+--------------------------------------+-------------------------------+
|
||||
| 1.000ns | 12.345ms | 20m34s | 27h26m | -436512.000ns |
|
||||
+-------------------------+--------------------------------+-------------------------------------+--------------------------------------+-------------------------------+
|
||||
</codeblock>
|
||||
</p>
|
||||
</dd>
|
||||
</dlentry>
|
||||
|
||||
<dlentry id="prettyprint_bytes">
|
||||
|
||||
<dt>
|
||||
|
||||
@@ -1,120 +0,0 @@
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(-1);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'-1.000ns'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(0);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'0.000ns'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(127);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'127.000ns'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(128);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'128.000ns'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(-128);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'-128.000ns'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(-129);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'-129.000ns'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(32767);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'32.767us'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(32768);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'32.768us'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(-32768);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'-32768.000ns'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(-32769);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'-32769.000ns'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(2147483647);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'2s147ms'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(2147483648);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'2s147ms'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(-2147483648);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'-2147483648.000ns'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(-2147483649);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'-2147483649.000ns'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(9223372036854775807);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'2562047h47m'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(-9223372036854775808);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'-9223372036854775808.000ns'
|
||||
====
|
||||
---- QUERY
|
||||
SELECT PRETTYPRINT_DURATION(NULL);
|
||||
---- TYPES
|
||||
string
|
||||
---- RESULTS
|
||||
'NULL'
|
||||
====
|
||||
@@ -1,35 +0,0 @@
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from __future__ import absolute_import, division, print_function
|
||||
from tests.common.impala_test_suite import ImpalaTestSuite
|
||||
import pytest
|
||||
|
||||
|
||||
class TestPrettyPrintDuration(ImpalaTestSuite):
|
||||
"""Tests the built-in function prettyprint_duration."""
|
||||
|
||||
@classmethod
|
||||
def get_workload(self):
|
||||
return 'functional-query'
|
||||
|
||||
def test_prettyprint_duration(self, vector):
|
||||
if (vector.get_value('table_format').file_format != 'text'
|
||||
or vector.get_value('table_format').compression_codec != 'none'):
|
||||
# No need to run this test on all file formats
|
||||
pytest.skip()
|
||||
self.run_test_case('QueryTest/prettyprint-duration', vector)
|
||||
Reference in New Issue
Block a user