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:
jasonmfehr
2024-03-25 17:03:33 -07:00
committed by Impala Public Jenkins
parent c8d56425f8
commit 3e4fdeece1
9 changed files with 2 additions and 272 deletions

View File

@@ -556,7 +556,6 @@ 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
@@ -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;
}

View File

@@ -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");

View File

@@ -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);

View File

@@ -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);

View File

@@ -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'],

View File

@@ -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=

View File

@@ -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>

View File

@@ -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'
====

View File

@@ -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)