[regression-test] add grouping sets test case (#18194)

This commit is contained in:
zhangy5
2023-03-31 11:00:38 +08:00
committed by GitHub
parent 35bae25568
commit 1938899aa3
3 changed files with 351 additions and 3 deletions

View File

@ -52,3 +52,154 @@
-- !select8 --
test 2
-- !select9 --
\N 5970
1001 3978
1002 1992
-- !select10 --
\N 1986
\N 1989
1 \N
2 \N
3 \N
-- !select11 --
\N \N 3654.0
1901-12-31 \N 789.25
1901-12-31 1989-03-21T13:00 789.25
1989-03-21 \N 6.333
1989-03-21 1989-03-21T13:00 6.333
2012-03-14 \N 3654.0
2012-03-14 2000-01-01T00:00 3654.0
-- !select12 --
\N \N \N 0.1
\N \N 1901-12-31 20.268
\N \N 1989-03-21 0.1
\N \N 2012-03-14 78945.0
\N false \N 20.268
\N false 1901-12-31 20.268
\N false 2012-03-14 78945.0
\N true \N 0.1
\N true 1989-03-21 0.1
123.123 \N \N 0.1
123.123 \N 1989-03-21 0.1
123.123 true \N 0.1
123.123 true 1989-03-21 0.1
1243.500 \N \N 20.268
1243.500 \N 1901-12-31 20.268
1243.500 false \N 20.268
1243.500 false 1901-12-31 20.268
24453.325 \N \N 78945.0
24453.325 \N 2012-03-14 78945.0
24453.325 false \N 78945.0
24453.325 false 2012-03-14 78945.0
-- !select13 --
\N \N 1002
\N 1986 1001
\N 1989 1002
\N 11011902 1001
\N 11011903 1001
\N 11011905 1002
1 \N 1001
1 1989 1001
1 11011902 1001
2 \N 1001
2 1986 1001
2 11011903 1001
3 \N 1002
3 1989 1002
3 11011905 1002
-- !select14 --
\N \N 1 1 3 3004
\N 1986 1 0 2 1001
\N 1989 1 0 2 2003
1 \N 0 1 1 1001
1 1989 0 0 0 1001
2 \N 0 1 1 1001
2 1986 0 0 0 1001
3 \N 0 1 1 1002
3 1989 0 0 0 1002
-- !select15 --
\N \N 1 1 3654.0
1901-12-31 \N 0 1 789.25
1901-12-31 1989-03-21T13:00 0 0 789.25
1989-03-21 \N 0 1 6.333
1989-03-21 1989-03-21T13:00 0 0 6.333
2012-03-14 \N 0 1 3654.0
2012-03-14 2000-01-01T00:00 0 0 3654.0
-- !select16 --
\N \N \N 1 3 7 0.1
\N \N 1901-12-31 1 3 6 20.268
\N \N 1989-03-21 1 3 6 0.1
\N \N 2012-03-14 1 3 6 78945.0
\N false \N 1 2 3 20.268
\N false 1901-12-31 1 2 2 20.268
\N false 2012-03-14 1 2 2 78945.0
\N true \N 1 2 3 0.1
\N true 1989-03-21 1 2 2 0.1
123.123 \N \N 0 1 5 0.1
123.123 \N 1989-03-21 0 1 4 0.1
123.123 true \N 0 0 1 0.1
123.123 true 1989-03-21 0 0 0 0.1
1243.500 \N \N 0 1 5 20.268
1243.500 \N 1901-12-31 0 1 4 20.268
1243.500 false \N 0 0 1 20.268
1243.500 false 1901-12-31 0 0 0 20.268
24453.325 \N \N 0 1 5 78945.0
24453.325 \N 2012-03-14 0 1 4 78945.0
24453.325 false \N 0 0 1 78945.0
24453.325 false 2012-03-14 0 0 0 78945.0
-- !select17 --
1 0
2 0
3 0
-- !select18 --
\N 1
1 0
2 0
3 0
-- !select19 --
\N 1
1 0
2 0
3 0
-- !select20 --
\N 1
1 0
2 0
3 0
-- !select21 --
\N \N 3004 1 0 2
\N 1986 1001 1 0 2
\N 1989 2003 1 0 2
1 \N 2002 0 1 1
2 \N 2002 0 1 1
3 \N 2004 0 1 1
-- !select22 --
\N \N 1001 1 0 2
\N false 1001 1 0 2
\N true 1001 1 0 2
123.123 \N 1001 0 1 1
1243.500 \N 1001 0 1 1
24453.325 \N 1002 0 1 1
-- !select23 --
\N \N 1002 0 1 1
\N 1989-03-21T13:00 1001 1 0 2
\N 2000-01-01T00:00 1002 1 0 2
1901-12-31 \N 1001 0 1 1
1989-03-21 \N 1001 0 1 1
2012-03-14 \N 1002 0 1 1

View File

@ -0,0 +1,41 @@
// 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.
import org.apache.doris.regression.suite.Suite
// check sql1 & sql2's results are same
Suite.metaClass.check_sql_equal = { String sql1, String sql2 /* param */ ->
Suite suite = delegate as Suite
def res1 = suite.order_sql(sql1)
def res2 = suite.order_sql(sql2)
// suite.getLogger().info("res1: ${res1}".toString())
// suite.getLogger().info("res2: ${res2}".toString())
// suite.getLogger().info("Test plugin: suiteName: ${suite.name}".toString())
if (res1 != res2) {
assert res1.size() == res2.size(): "res1 length: ${res1.size()}, res2 length: ${res2.size()}".toString()
int maxSize = res1.size()
for(i in java.util.stream.LongStream.range(0, maxSize)) {
assert res1[i].size() != res2[i].size(): "result[${i}] size mismatch"
assert res1[i] == res2[i]: "result[${i}] data mismatch"
}
}
suite.getLogger().info("${suite.name}: check these two sql equal".toString())
return true
}
logger.info("Added 'check_sql_equal' function to Suite")

View File

@ -15,7 +15,8 @@
// specific language governing permissions and limitations
// under the License.
suite("test_grouping_sets") {
// Test grouping sets()/cube()/rollup()/grouping_id()/grouping()
suite("test_grouping_sets", "p0") {
qt_select """
SELECT k1, k2, SUM(k3) FROM test_query_db.test
GROUP BY GROUPING SETS ((k1, k2), (k1), (k2), ( ) ) order by k1, k2
@ -59,9 +60,9 @@ suite("test_grouping_sets") {
exception "errCode = 2, detailMessage = column: `k3` cannot both in select list and aggregate functions"
}
qt_select7 """ select k1,k2,sum(k3) from test_query_db.test where 1 = 2 group by grouping sets((k1), (k1,k2)) """
qt_select7 """ select k1,k2,sum(k3) from test_query_db.test where 1 = 2 group by grouping sets((k1), (k1,k2)) """
qt_select8 """ WITH dt AS
qt_select8 """ WITH dt AS
(select 'test' as name,1 as score
UNION
all
@ -78,4 +79,159 @@ suite("test_grouping_sets") {
FROM result_data
WHERE name = 'test';
"""
// test grouping sets
qt_select9 """
SELECT k3, SUM( k1+k2 ) FROM test_query_db.test
GROUP BY GROUPING SETS ( (k3), ( ) ) order by k3
"""
qt_select10 """
SELECT k1, k2 FROM test_query_db.test
GROUP BY GROUPING SETS ( (k1), (k2) ) order by k1, k2
"""
def sql1_1 = """
SELECT k10, k11, MAX( k9 ) FROM test_query_db.test GROUP BY ROLLUP(k10, k11) ORDER BY k10, k11
"""
qt_select11 sql1_1
def sql1_2 = """
SELECT k10, k11, MAX( k9 ) FROM test_query_db.test
GROUP BY GROUPING SETS (( k10, k11 ), ( k10 ), ( )) ORDER BY k10, k11;
"""
check_sql_equal(sql1_1, sql1_2)
def sql2_1 = """
SELECT k5, k6, k10, MIN( k8 ) FROM test_query_db.test
GROUP BY CUBE( k5, k6, k10 ) ORDER BY k5, k6, k10
"""
qt_select12 sql2_1
def sql2_2 = """
SELECT k5, k6, k10, MIN( k8 ) FROM test_query_db.test GROUP BY
GROUPING SETS (( k5, k6, k10 ), ( k5, k6 ), ( k5, k10 ), ( k5 ), ( k6, k10 ), ( k6 ), ( k10 ), ( ))
ORDER BY k5, k6, k10;
"""
check_sql_equal(sql2_1, sql2_2)
test {
sql """
SELECT k1, k3, MAX( k8 ) FROM test_query_db.test
GROUP BY k1, GROUPING SETS ( (k1, k3), (k1), ( ) ), ROLLUP(k1, k3)
"""
exception "Syntax error"
}
qt_select13"""
SELECT * FROM
(SELECT k1,k4,MAX(k3) FROM test_query_db.test GROUP BY GROUPING sets ((k1,k4),(k1),(k4),())
UNION SELECT k1,k2,MAX(k3) FROM test_query_db.test GROUP BY GROUPING sets ((k1,k2),(k1),(k2),())
) t ORDER BY k1, k4
"""
// test grouping sets id
qt_select14 """
SELECT k1, k2, GROUPING(k1), GROUPING(k2), GROUPING_ID(k1, k2), SUM( k3 )
FROM test_query_db.test
GROUP BY GROUPING SETS ( (k1, k2), (k1), (k2), ( ) )
ORDER BY k1, k2
"""
def sql3_1 = """
SELECT k10, k11, GROUPING(k10), GROUPING(k11), MAX( k9 )
FROM test_query_db.test
GROUP BY ROLLUP(k10, k11) ORDER BY k10, k11
"""
qt_select15 sql3_1
def sql3_2 = """
SELECT k10, k11, GROUPING(k10), GROUPING(k11), MAX( k9 )
FROM test_query_db.test GROUP BY
GROUPING SETS (( k10, k11 ), ( k10 ), ( )) ORDER BY k10, k11;
"""
check_sql_equal(sql3_1, sql3_2)
def sql4_1 = """
SELECT k5, k6, k10, GROUPING_ID(k5), GROUPING_ID(k5, k6), GROUPING_ID(k6, k5, k10), MIN( k8 )
FROM test_query_db.test
GROUP BY CUBE( k5, k6, k10 )
ORDER BY k5, k6, k10
"""
qt_select16 sql4_1
def sql4_2 = """
SELECT k5, k6, k10, GROUPING_ID(k5), GROUPING_ID(k5, k6), GROUPING_ID(k6, k5, k10), MIN( k8 )
FROM test_query_db.test
GROUP BY
GROUPING SETS ((k5, k6, k10), (k5, k6), (k5, k10), (k5), (k6, k10), (k6), (k10), ())
ORDER BY k5, k6, k10
"""
check_sql_equal(sql4_1, sql4_2)
qt_select17 """SELECT k1 ,GROUPING(k1) FROM test_query_db.test GROUP BY GROUPING sets ((k1)) ORDER BY k1"""
qt_select18 """SELECT k1 ,GROUPING(k1) FROM test_query_db.test GROUP BY GROUPING sets ((k1), ()) ORDER BY k1"""
qt_select19 """SELECT k1 ,GROUPING(k1) FROM test_query_db.test GROUP BY ROLLUP (k1) ORDER BY k1"""
qt_select20 """SELECT k1 ,GROUPING(k1) FROM test_query_db.test GROUP BY CUBE (k1) ORDER BY k1"""
test {
sql "SELECT k1 ,GROUPING(k2) FROM test_query_db.test GROUP BY CUBE (k1) ORDER BY k1"
exception "Column `k2` in GROUP_ID() does not exist in GROUP BY clause"
}
// test grouping sets id contain null data
sql """drop table if exists test_query_db.test_grouping_sets_id_null"""
sql """create table if not exists test_query_db.test_grouping_sets_id_null like test_query_db.test"""
sql """insert into test_query_db.test_grouping_sets_id_null SELECT * FROM test_query_db.test"""
sql """
insert into test_query_db.test_grouping_sets_id_null
SELECT k0,k1,null,k3,k4,k5,null,null,k11,k7,k8,k9,k12,k13 FROM test_query_db.test
"""
qt_select21 """
SELECT k1,k2,SUM(k3),GROUPING(k1),GROUPING(k2),GROUPING_id(k1,k2)
FROM test_query_db.test_grouping_sets_id_null
GROUP BY GROUPING sets ((k1),(k2)) order by k1,k2
"""
qt_select22 """
SELECT k5,k6,MIN(k3),GROUPING(k5),GROUPING(k6),GROUPING_id(k5,k6)
FROM test_query_db.test_grouping_sets_id_null
GROUP BY GROUPING sets ((k5),(k6)) order by k5,k6
"""
qt_select23 """
SELECT k10,k11,MAX(k3) as a,GROUPING(k10) as b,GROUPING(k11) as c,GROUPING_id(k10,k11) as d
FROM test_query_db.test_grouping_sets_id_null
GROUP BY GROUPING sets ((k10),(k11)) order by k10,k11,a,b,c,d
"""
sql """drop table if exists test_query_db.test_grouping_sets_id_null"""
// test grouping sets shoot rollup
sql "drop table if exists test_query_db.test_grouping_sets_rollup"
sql """
create table if not exists test_query_db.test_grouping_sets_rollup(
k1 tinyint, k2 smallint, k3 int, k4 bigint, k5 decimal(9,3),
k6 char(5), k10 date, k11 datetime, k7 varchar(20), k8 double max, k9 float SUM)
engine=olap distributed by hash(k1) buckets 5
ROLLUP(idx(k1, k2, k3), idx1(k1, k2, k3, k8))
properties("replication_num"="1")
"""
sql """insert into test_query_db.test_grouping_sets_rollup
select k1, k2, k3, k4, k5, k6, k10, k11, k7, k8, k9 from test_query_db.test
"""
explain {
sql("SELECT k1, MAX( k8 ) FROM test_query_db.test_grouping_sets_rollup GROUP BY GROUPING SETS( (k1), ())")
contains "(idx1)"
}
explain {
sql("""SELECT k1, k2, MAX( k8 )
FROM test_query_db.test_grouping_sets_rollup
GROUP BY GROUPING SETS ( (k1, k2), (k1), (k2), ( ) )
""")
contains "(idx1)"
}
explain {
sql("""SELECT k1, k2, MAX( k8 ) FROM test_query_db.test_grouping_sets_rollup GROUP BY ROLLUP(k1, k2)""")
contains "(idx1)"
}
explain {
sql("""SELECT k1, k2, MAX( k8 ) FROM test_query_db.test_grouping_sets_rollup GROUP BY ROLLUP(k1, k2)""")
contains "(idx1)"
}
explain {
sql("SELECT k1, k2, MAX( k8 ) FROM test_query_db.test_grouping_sets_rollup GROUP BY CUBE(k1, k2)")
contains "(idx1)"
}
sql "drop table if exists test_query_db.test_grouping_sets_rollup"
// test_grouping_select
test {
sql "select k1, if(grouping(k1)=1, count(k1), 0) from test_query_db.test group by grouping sets((k1))"
exception "`k1` cannot both in select list and aggregate functions " +
"when using GROUPING SETS/CUBE/ROLLUP, please use union instead."
}
}