This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new e7303c12c7 [Enhancement](array-type) Support Floating/Decimal type for
array aggregation functions (#12271)
e7303c12c7 is described below
commit e7303c12c7494fc585f8ece3abe8ead3033dd759
Author: xy720 <[email protected]>
AuthorDate: Sat Sep 3 09:55:56 2022 +0800
[Enhancement](array-type) Support Floating/Decimal type for array
aggregation functions (#12271)
---
.../functions/array/function_array_aggregation.cpp | 2 +-
gensrc/script/doris_builtins_functions.py | 15 ++++++
.../test_array_aggregation_functions.out | 30 ++++++++++++
.../test_array_aggregation_functions.groovy | 57 ++++++++++++++++++++++
4 files changed, 103 insertions(+), 1 deletion(-)
diff --git a/be/src/vec/functions/array/function_array_aggregation.cpp
b/be/src/vec/functions/array/function_array_aggregation.cpp
index 171e9098a4..42351fd7eb 100644
--- a/be/src/vec/functions/array/function_array_aggregation.cpp
+++ b/be/src/vec/functions/array/function_array_aggregation.cpp
@@ -106,7 +106,7 @@ struct AggregateFunctionImpl<AggregateOperation::PRODUCT> {
template <typename Element>
struct TypeTraits {
using ResultType = ArrayAggregateResult<Element,
AggregateOperation::PRODUCT>;
- using AggregateDataType = AggregateFunctionProductData<Element>;
+ using AggregateDataType = AggregateFunctionProductData<ResultType>;
using Function = AggregateFunctionProduct<Element, ResultType,
AggregateDataType>;
};
};
diff --git a/gensrc/script/doris_builtins_functions.py
b/gensrc/script/doris_builtins_functions.py
index 0ecde878c1..a0660f87f0 100755
--- a/gensrc/script/doris_builtins_functions.py
+++ b/gensrc/script/doris_builtins_functions.py
@@ -253,26 +253,41 @@ visible_functions = [
[['array_min'], 'INT', ['ARRAY_INT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_min'], 'BIGINT', ['ARRAY_BIGINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_min'], 'LARGEINT', ['ARRAY_LARGEINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
+ [['array_min'], 'FLOAT', ['ARRAY_FLOAT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
+ [['array_min'], 'DOUBLE', ['ARRAY_DOUBLE'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
+ [['array_min'], 'DECIMALV2',['ARRAY_DECIMALV2'],'', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_max'], 'TINYINT', ['ARRAY_TINYINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_max'], 'SMALLINT', ['ARRAY_SMALLINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_max'], 'INT', ['ARRAY_INT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_max'], 'BIGINT', ['ARRAY_BIGINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_max'], 'LARGEINT', ['ARRAY_LARGEINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
+ [['array_max'], 'FLOAT', ['ARRAY_FLOAT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
+ [['array_max'], 'DOUBLE', ['ARRAY_DOUBLE'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
+ [['array_max'], 'DECIMALV2',['ARRAY_DECIMALV2'],'', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_sum'], 'BIGINT', ['ARRAY_TINYINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_sum'], 'BIGINT', ['ARRAY_SMALLINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_sum'], 'BIGINT', ['ARRAY_INT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_sum'], 'BIGINT', ['ARRAY_BIGINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_sum'], 'LARGEINT', ['ARRAY_LARGEINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
+ [['array_sum'], 'DOUBLE', ['ARRAY_FLOAT'], '', '', '','vec',
'ALWAYS_NULLABLE'],
+ [['array_sum'], 'DOUBLE', ['ARRAY_DOUBLE'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
+ [['array_sum'], 'DECIMALV2',['ARRAY_DECIMALV2'],'', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_avg'], 'DOUBLE', ['ARRAY_TINYINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_avg'], 'DOUBLE', ['ARRAY_SMALLINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_avg'], 'DOUBLE', ['ARRAY_INT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_avg'], 'DOUBLE', ['ARRAY_BIGINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_avg'], 'DOUBLE', ['ARRAY_LARGEINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
+ [['array_avg'], 'DOUBLE', ['ARRAY_FLOAT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
+ [['array_avg'], 'DOUBLE', ['ARRAY_DOUBLE'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
+ [['array_avg'], 'DECIMALV2',['ARRAY_DECIMALV2'],'', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_product'], 'DOUBLE', ['ARRAY_TINYINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_product'], 'DOUBLE', ['ARRAY_SMALLINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_product'], 'DOUBLE', ['ARRAY_INT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_product'], 'DOUBLE', ['ARRAY_BIGINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_product'], 'DOUBLE', ['ARRAY_LARGEINT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
+ [['array_product'], 'DOUBLE', ['ARRAY_FLOAT'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
+ [['array_product'], 'DOUBLE', ['ARRAY_DOUBLE'], '', '', '', 'vec',
'ALWAYS_NULLABLE'],
+ [['array_product'], 'DECIMALV2',['ARRAY_DECIMALV2'],'', '', '', 'vec',
'ALWAYS_NULLABLE'],
[['array_remove'], 'ARRAY_BOOLEAN', ['ARRAY_BOOLEAN', 'BOOLEAN'], '',
'', '', 'vec', ''],
[['array_remove'], 'ARRAY_TINYINT', ['ARRAY_TINYINT', 'TINYINT'], '',
'', '', 'vec', ''],
diff --git
a/regression-test/data/query_p0/sql_functions/array_functions/test_array_aggregation_functions.out
b/regression-test/data/query_p0/sql_functions/array_functions/test_array_aggregation_functions.out
new file mode 100644
index 0000000000..3564d7eb6e
--- /dev/null
+++
b/regression-test/data/query_p0/sql_functions/array_functions/test_array_aggregation_functions.out
@@ -0,0 +1,30 @@
+-- This file is automatically generated. You should know what you did if you
want to edit this
+-- !select --
+1 1 100 1000 2147483648 9223372036854775808 0
1 100.0001
+2 1 \N \N \N \N \N 127 4.023
+3 -1 -32768 -2147483647 -9223372036854775808
-117341182548128045443221445 -9.999999 -1 -128.0001
+4 \N \N \N \N \N \N \N \N
+
+-- !select --
+1 3 101 1001 2147483649 9223372036854775808
9.999999 1.5 100.0005
+2 3 \N \N \N \N \N 128.1 4.023
+3 1 -32767 -50000 0 170141183460469231731687303715884105727
9.999999 1 127.0001
+4 \N \N \N \N \N \N \N \N
+
+-- !select --
+1 2 100.5 1000.5 2147483648.5 9.2233720368547758e+18
4.9999995 1.25 100.00030000000001
+2 2 \N \N \N \N \N 127.55000305175781
4.023
+3 0 -32767.5 -1073766823.5 -4.6116860184273879e+18
8.5070591730175945e+37 0 0 -0.5
+4 \N \N \N \N \N \N \N \N
+
+-- !select --
+1 6 201 2001 4294967297 9223372036854775808
9.999999 2.5 200.00060000000002
+2 12 \N \N \N \N \N 255.10000610351562
4.023
+3 0 -65535 -2147533647 -9223372036854775808
170141183460351890549139175670440884282 0 0 -1
+4 \N \N \N \N \N \N \N \N
+
+-- !select --
+1 6 10100 1001000 4.6116860205748716e+18 9.2233720368547758e+18
0 1.5 10000.06000005
+2 36 \N \N \N \N \N 16268.700775146484
4.023
+3 -0 1073709056 107374182350000 -0 -1.9964567667389465e+64
-7766259631453241920 -0 -16256.02550001
+4 \N \N \N \N \N \N \N \N
diff --git
a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_aggregation_functions.groovy
b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_aggregation_functions.groovy
new file mode 100644
index 0000000000..2a58e1be49
--- /dev/null
+++
b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_aggregation_functions.groovy
@@ -0,0 +1,57 @@
+// 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.
+
+suite("test_array_aggregation_functions") {
+ def tableName = "tbl_test_array_aggregation_functions"
+ // open enable_array_type
+ sql "ADMIN SET FRONTEND CONFIG ('enable_array_type' = 'true')"
+ // array functions only supported in vectorized engine
+ sql """ set enable_vectorized_engine = true """
+
+ sql """DROP TABLE IF EXISTS ${tableName}"""
+ sql """
+ CREATE TABLE IF NOT EXISTS ${tableName} (
+ `k1` int(11) NULL COMMENT "",
+ `a1` array<tinyint(4)> NULL COMMENT "",
+ `a2` array<smallint(6)> NULL COMMENT "",
+ `a3` array<int(11)> NULL COMMENT "",
+ `a4` array<bigint(20)> NULL COMMENT "",
+ `a5` array<largeint(40)> NULL COMMENT "",
+ `a6` array<decimal(27, 7)> NULL COMMENT "",
+ `a7` array<float> NULL COMMENT "",
+ `a8` array<double> NULL COMMENT "",
+ `a9` array<date> NULL COMMENT "",
+ `a10` array<datetime> NULL COMMENT ""
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`k1`)
+ DISTRIBUTED BY HASH(`k1`) BUCKETS 1
+ PROPERTIES (
+ "replication_allocation" = "tag.location.default: 1",
+ "storage_format" = "V2"
+ )
+ """
+ sql """ INSERT INTO ${tableName} VALUES(1, [1, 2, 3], [100, 101], [1000,
1001], [2147483648, 2147483649], [9223372036854775808], [0.0, 9.999999], [1.0,
1.5], [100.0001, 100.0005], ['2022-08-31', '2022-09-01'], ['2022-08-31',
'2022-09-01']) """
+ sql """ INSERT INTO ${tableName} VALUES(2, [1, 2, 3, NULL, 3, 2, 1], NULL,
NULL, NULL, NULL, NULL, [127, 128.1], [NULL, 4.023], NULL, NULL) """
+ sql """ INSERT INTO ${tableName} VALUES(3, [-1, 0, 1], [-32767, -32768],
[-50000, -2147483647], [-9223372036854775808, 0],
[-117341182548128045443221445, 170141183460469231731687303715884105727],
[-9.999999, 9.999999], [-1.0, 0.0, 1.0], [-128.0001, 127.0001], NULL, NULL) """
+ sql """ INSERT INTO ${tableName} VALUES(4, [], [], [], [], [], [], [], [],
[], NULL) """
+
+ qt_select "SELECT k1, array_min(a1), array_min(a2), array_min(a3),
array_min(a4), array_min(a5), array_min(a6), array_min(a7), array_min(a8) from
${tableName} order by k1"
+ qt_select "SELECT k1, array_max(a1), array_max(a2), array_max(a3),
array_max(a4), array_max(a5), array_max(a6), array_max(a7), array_max(a8) from
${tableName} order by k1"
+ qt_select "SELECT k1, array_avg(a1), array_avg(a2), array_avg(a3),
array_avg(a4), array_avg(a5), array_avg(a6), array_avg(a7), array_avg(a8) from
${tableName} order by k1"
+ qt_select "SELECT k1, array_sum(a1), array_sum(a2), array_sum(a3),
array_sum(a4), array_sum(a5), array_sum(a6), array_sum(a7), array_sum(a8) from
${tableName} order by k1"
+ qt_select "SELECT k1, array_product(a1), array_product(a2),
array_product(a3), array_product(a4), array_product(a5), array_product(a6),
array_product(a7), array_product(a8) from ${tableName} order by k1"
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]