mirror of
https://github.com/apache/impala.git
synced 2025-12-25 02:03:09 -05:00
Before this patch, the Calcite planner in Impala only supported inline
views like 'temp' in the following query.
select id from (
select * from functional.alltypes
) as temp;
Regular views, on the other hand, were not supported. For instance, the
Calcite planner in Impala did not support regular views like
'functional.alltypes_view' created via the following statement and
hence queries against such regular views like
"select id from functional.alltypes_view" were not supported.
CREATE VIEW functional.alltypes_view
AS SELECT * FROM functional.alltypes;
This patch adds the support for regular views to the Calcite planner
via adding a ViewTable for each regular view in the given query
when populating the Calcite schema. This is similar to how regular
views are supported in PlannerTest#testView() at
https://github.com/apache/calcite/blob/main/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
where the regular view to be tested is added in
https://github.com/apache/calcite/blob/main/testkit/src/main/java/org/apache/calcite/test/CalciteAssert.java.
We do not have to use or extend ViewTableMacro in
Apache Calcite because the information about the data types
returned from a regular view is already available in its respective
FeTable. Therefore, there is no need to parse the SQL statement
representing the regular view and collect the metadata of tables
referenced by the regular view as done by ViewTableMacro.
The patch supports the following cases, where
'functional.alltypes_view' is a regular view defined as
"SELECT * FROM functional.alltypes".
1. select id from functional.alltypes_view.
2. select alltypes_view.id from functional.alltypes_view.
3. select functional.alltypes_view.id from functional.alltypes_view.
Joining a regular view with an HDFS table like the following is also
supported.
select alltypestiny.id
from functional.alltypes_view, functional.alltypestiny
Note that after this patch, queries against regular views are supported
only in the legacy catalog mode but not the local catalog mode. In
fact, queries against HDFS tables in the local catalog mode are not
supported yet by the Calcite planner either. We will deal with this in
IMPALA-14080.
Testing:
- Added test cases mentioned above to calcite.test. This makes sure
the test cases are supported when we start the Impala server with
the flag of '--use_calcite_planner=true'.
- Manually verified the test cases above are supported if we start
the Impala server with the environment variable USE_CALCITE_PLANNER
set to true and the query option use_calcite_planner set to 1.
Change-Id: I600aae816727ae942fb221fae84c2aac63ae1893
Reviewed-on: http://gerrit.cloudera.org:8080/22883
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
1063 lines
26 KiB
Plaintext
1063 lines
26 KiB
Plaintext
====
|
|
---- QUERY
|
|
-- this is a test for a comment line above a blank line
|
|
-- we do not care about the results, just the comment
|
|
|
|
select * from functional.alltypestiny;
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
create table calcite_alltypes as select * from functional.alltypes order by id limit 5;
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: OriginalPlanner.*
|
|
====
|
|
---- QUERY
|
|
select * from calcite_alltypes;
|
|
---- RESULTS
|
|
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
|
|
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
|
|
2,true,2,2,2,20,2.200000047683716,20.2,'01/01/09','2',2009-01-01 00:02:00.100000000,2009,1
|
|
3,false,3,3,3,30,3.299999952316284,30.3,'01/01/09','3',2009-01-01 00:03:00.300000000,2009,1
|
|
4,true,4,4,4,40,4.400000095367432,40.4,'01/01/09','4',2009-01-01 00:04:00.600000000,2009,1
|
|
---- TYPES
|
|
int,boolean,tinyint,smallint,int,bigint,float,double,string,string,timestamp,int,int
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
select string_col, tinyint_col from calcite_alltypes;
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
---- RESULTS
|
|
'0',0
|
|
'1',1
|
|
'2',2
|
|
'3',3
|
|
'4',4
|
|
---- TYPES
|
|
string,tinyint
|
|
====
|
|
---- QUERY
|
|
select d1,d2,d3,d4,d5,d6 from functional.decimal_tbl;
|
|
---- RESULTS
|
|
1234,2222,1.2345678900,0.12345678900000000000000000000000000000,12345.78900,1
|
|
12345,333,123.4567890000,0.12345678900000000000000000000000000000,11.22000,1
|
|
12345,333,1234.5678900000,0.12345678900000000000000000000000000000,0.10000,1
|
|
132842,333,12345.6789000000,0.12345678900000000000000000000000000000,0.77889,1
|
|
2345,111,12.3456789000,0.12345678900000000000000000000000000000,3.14100,1
|
|
---- TYPES
|
|
decimal,decimal,decimal,decimal,decimal,decimal
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
select * from functional.chars_tiny;
|
|
---- RESULTS
|
|
'1aaaa','1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb','1cccc'
|
|
'2aaaa','2bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb','2cccccc'
|
|
'3aaa ','3bbbbb ','3ccc'
|
|
'4aa ','4bbbb ','4cc'
|
|
'5a ','5bbb ','5c'
|
|
'6a ','6b ','6c'
|
|
'6a ','6b ','6c'
|
|
'NULL','NULL','NULL'
|
|
'a ','b ','c'
|
|
---- TYPES
|
|
# varchar shows up as string, just as it does in the chars.test file
|
|
char,char,string
|
|
---- HS2_TYPES
|
|
char,char,varchar
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
select * from functional.date_tbl;
|
|
---- RESULTS
|
|
0,0001-01-01,0001-01-01
|
|
1,0001-12-31,0001-01-01
|
|
10,2017-11-28,1399-06-27
|
|
11,NULL,1399-06-27
|
|
12,2018-12-31,1399-06-27
|
|
2,0002-01-01,0001-01-01
|
|
20,0001-06-21,2017-11-27
|
|
21,0001-06-22,2017-11-27
|
|
22,0001-06-23,2017-11-27
|
|
23,0001-06-24,2017-11-27
|
|
24,0001-06-25,2017-11-27
|
|
25,0001-06-26,2017-11-27
|
|
26,0001-06-27,2017-11-27
|
|
27,0001-06-28,2017-11-27
|
|
28,0001-06-29,2017-11-27
|
|
29,2017-11-28,2017-11-27
|
|
3,1399-12-31,0001-01-01
|
|
30,9999-12-01,9999-12-31
|
|
31,9999-12-31,9999-12-31
|
|
4,2017-11-28,0001-01-01
|
|
5,9999-12-31,0001-01-01
|
|
6,NULL,0001-01-01
|
|
---- TYPES
|
|
int,date,date
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# creating a new table. We cannot use any functions at this point to
|
|
# manipulate the binary data (as the binary test currently does), so
|
|
# this just grabs the rows that can be checked.
|
|
create table ascii_binary as select * from functional.binary_tbl where id <= 4;
|
|
select * from ascii_binary;
|
|
---- RESULTS
|
|
1,'ascii','binary1'
|
|
2,'ascii','binary2'
|
|
3,'null','NULL'
|
|
4,'empty',''
|
|
---- TYPES
|
|
int,string,binary
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# Tiny test for Calcite. At the point of this commit, very few functions work. This
|
|
# is a test that includes one of the functions that does.
|
|
# The ultimate goal is to include all tests in the testing framework, so there is
|
|
# no need to be extensive about testing in this file.
|
|
select bigint_col, abs(cast(-3 as bigint)), abs(-3000000000) from functional.alltypestiny;
|
|
---- RESULTS
|
|
0,3,3000000000
|
|
10,3,3000000000
|
|
0,3,3000000000
|
|
10,3,3000000000
|
|
0,3,3000000000
|
|
10,3,3000000000
|
|
0,3,3000000000
|
|
10,3,3000000000
|
|
---- TYPES
|
|
bigint,bigint,bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# Tiny test for Calcite. At the point of this commit, very few functions work. This
|
|
# is a test that includes one of the functions that does.
|
|
# The ultimate goal is to include all tests in the testing framework, so there is
|
|
# no need to be extensive about testing in this file.
|
|
select cast(cast('2005-12-13 08:00:00' as string) AS TIMESTAMP) from functional.alltypestiny;
|
|
---- RESULTS
|
|
2005-12-13 08:00:00
|
|
2005-12-13 08:00:00
|
|
2005-12-13 08:00:00
|
|
2005-12-13 08:00:00
|
|
2005-12-13 08:00:00
|
|
2005-12-13 08:00:00
|
|
2005-12-13 08:00:00
|
|
2005-12-13 08:00:00
|
|
---- TYPES
|
|
timestamp
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
select * from calcite_alltypes where bigint_col = 20;
|
|
---- RESULTS
|
|
2,true,2,2,2,20,2.200000047683716,20.2,'01/01/09','2',2009-01-01 00:02:00.100000000,2009,1
|
|
---- TYPES
|
|
int,boolean,tinyint,smallint,int,bigint,float,double,string,string,timestamp,int,int
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
select tinyint_col from calcite_alltypes where bigint_col = 20;
|
|
---- RESULTS
|
|
2
|
|
---- TYPES
|
|
tinyint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# Values test
|
|
select abs(cast(-8 as bigint));
|
|
---- RESULTS
|
|
8
|
|
---- TYPES
|
|
bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
select 'hello'
|
|
---- RESULTS
|
|
'hello'
|
|
---- TYPES
|
|
string
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# Union test
|
|
select 3 union select 4;
|
|
---- RESULTS
|
|
3
|
|
4
|
|
---- TYPES
|
|
tinyint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
select * from (values (1)) union (values (2), (3));
|
|
---- RESULTS
|
|
1
|
|
2
|
|
3
|
|
---- TYPES
|
|
tinyint
|
|
====
|
|
---- QUERY
|
|
# sort test
|
|
select id, abs(bigint_col) from functional.alltypestiny where id > 3 order by abs(bigint_col), id;
|
|
---- RESULTS
|
|
4,0
|
|
6,0
|
|
5,10
|
|
7,10
|
|
---- TYPES
|
|
int, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# sort test
|
|
select id, abs(bigint_col) from functional.alltypestiny where id >= 3 order by abs(bigint_col), id;
|
|
---- RESULTS
|
|
4,0
|
|
6,0
|
|
3,10
|
|
5,10
|
|
7,10
|
|
---- TYPES
|
|
int, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# sort test
|
|
select id, abs(bigint_col) from functional.alltypestiny where id < 3 order by abs(bigint_col), id;
|
|
---- RESULTS
|
|
0,0
|
|
2,0
|
|
1,10
|
|
---- TYPES
|
|
int, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# sort test
|
|
select id, abs(bigint_col) from functional.alltypestiny where id <= 3 order by abs(bigint_col), id;
|
|
---- RESULTS
|
|
0,0
|
|
2,0
|
|
1,10
|
|
3,10
|
|
---- TYPES
|
|
int, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# sort test
|
|
select id, abs(bigint_col) from functional.alltypestiny where id != 3 order by abs(bigint_col), id;
|
|
---- RESULTS
|
|
0,0
|
|
2,0
|
|
4,0
|
|
6,0
|
|
1,10
|
|
5,10
|
|
7,10
|
|
---- TYPES
|
|
int, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# sort test
|
|
select id, abs(bigint_col) from functional.alltypestiny where id != 3 order by abs(bigint_col) desc, id;
|
|
---- RESULTS
|
|
1,10
|
|
5,10
|
|
7,10
|
|
0,0
|
|
2,0
|
|
4,0
|
|
6,0
|
|
---- TYPES
|
|
int, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# sort test
|
|
select group_str, some_nulls from functional.nullrows where group_str = 'a' order by some_nulls nulls first;
|
|
---- RESULTS
|
|
'a','NULL'
|
|
'a','NULL'
|
|
'a','NULL'
|
|
'a','NULL'
|
|
'a','a'
|
|
---- TYPES
|
|
string, string
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# sort test
|
|
select group_str, some_nulls from functional.nullrows where group_str = 'a' order by some_nulls nulls last;
|
|
---- RESULTS
|
|
'a','a'
|
|
'a','NULL'
|
|
'a','NULL'
|
|
'a','NULL'
|
|
'a','NULL'
|
|
---- TYPES
|
|
string, string
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# limit test
|
|
select bigint_col from functional.alltypestiny where bigint_col = 0 limit 2;
|
|
---- RESULTS
|
|
0
|
|
0
|
|
---- TYPES
|
|
bigint
|
|
====
|
|
---- QUERY
|
|
# limit test
|
|
select id, abs(bigint_col) from functional.alltypestiny where id > 2 order by abs(bigint_col), id limit 3;
|
|
---- RESULTS
|
|
4,0
|
|
6,0
|
|
3,10
|
|
---- TYPES
|
|
int, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# aggregation test
|
|
select sum(bigint_col) from functional.alltypestiny;
|
|
---- RESULTS
|
|
40
|
|
---- TYPES
|
|
bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# aggregation test
|
|
select id, sum(bigint_col) from functional.alltypestiny group by id order by id;
|
|
---- RESULTS
|
|
0,0
|
|
1,10
|
|
2,0
|
|
3,10
|
|
4,0
|
|
5,10
|
|
6,0
|
|
7,10
|
|
---- TYPES
|
|
int, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# aggregation test
|
|
select id, sum(bigint_col) from functional.alltypestiny group by id
|
|
having sum(bigint_col) > cast(5 as bigint) order by id;
|
|
---- RESULTS
|
|
1,10
|
|
3,10
|
|
5,10
|
|
7,10
|
|
---- TYPES
|
|
int, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# aggregation test
|
|
select id, bigint_col, sum(bigint_col)
|
|
from functional.alltypestiny
|
|
group by grouping sets((id, bigint_col), (id), (bigint_col))
|
|
order by id, bigint_col;
|
|
---- RESULTS
|
|
0,0,0
|
|
0,NULL,0
|
|
1,10,10
|
|
1,NULL,10
|
|
2,0,0
|
|
2,NULL,0
|
|
3,10,10
|
|
3,NULL,10
|
|
4,0,0
|
|
4,NULL,0
|
|
5,10,10
|
|
5,NULL,10
|
|
6,0,0
|
|
6,NULL,0
|
|
7,10,10
|
|
7,NULL,10
|
|
NULL,0,0
|
|
NULL,10,40
|
|
---- TYPES
|
|
int, bigint, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# having test
|
|
select id, sum(bigint_col) from functional.alltypestiny group by id having sum(bigint_col) > cast(5 as bigint) order by id;
|
|
---- RESULTS
|
|
1,10
|
|
3,10
|
|
5,10
|
|
7,10
|
|
---- TYPES
|
|
int, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# join test
|
|
select a.id, a.bigint_col, b.bigint_col
|
|
from functional.alltypestiny a
|
|
join functional.alltypessmall b
|
|
on (a.id = b.id) order by a.id;
|
|
---- RESULTS
|
|
0,0,0
|
|
1,10,10
|
|
2,0,20
|
|
3,10,30
|
|
4,0,40
|
|
5,10,50
|
|
6,0,60
|
|
7,10,70
|
|
---- TYPES
|
|
int, bigint, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# join inequality test
|
|
select a.id, b.id, a.bigint_col, b.bigint_col
|
|
from functional.alltypestiny a
|
|
join functional.alltypessmall b
|
|
on (b.id < a.id)
|
|
where b.id = 0
|
|
order by a.id;
|
|
---- RESULTS
|
|
1,0,10,0
|
|
2,0,0,0
|
|
3,0,10,0
|
|
4,0,0,0
|
|
5,0,10,0
|
|
6,0,0,0
|
|
7,0,10,0
|
|
---- TYPES
|
|
int, int, bigint, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# cross join test
|
|
select a.id, b.id, a.bigint_col, b.bigint_col
|
|
from functional.alltypestiny a, functional.alltypessmall b
|
|
where b.id < 2
|
|
order by a.id, b.id;
|
|
---- RESULTS
|
|
0,0,0,0
|
|
0,1,0,10
|
|
1,0,10,0
|
|
1,1,10,10
|
|
2,0,0,0
|
|
2,1,0,10
|
|
3,0,10,0
|
|
3,1,10,10
|
|
4,0,0,0
|
|
4,1,0,10
|
|
5,0,10,0
|
|
5,1,10,10
|
|
6,0,0,0
|
|
6,1,0,10
|
|
7,0,10,0
|
|
7,1,10,10
|
|
---- TYPES
|
|
int, int, bigint, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# left outer join test
|
|
select a.id, a.bigint_col, b.bigint_col
|
|
from functional.alltypessmall a
|
|
left outer join functional.alltypestiny b
|
|
on (a.id = b.id)
|
|
where a.id < 20
|
|
order by a.id
|
|
---- RESULTS
|
|
0,0,0
|
|
1,10,10
|
|
2,20,0
|
|
3,30,10
|
|
4,40,0
|
|
5,50,10
|
|
6,60,0
|
|
7,70,10
|
|
8,80,NULL
|
|
9,90,NULL
|
|
10,0,NULL
|
|
11,10,NULL
|
|
12,20,NULL
|
|
13,30,NULL
|
|
14,40,NULL
|
|
15,50,NULL
|
|
16,60,NULL
|
|
17,70,NULL
|
|
18,80,NULL
|
|
19,90,NULL
|
|
---- TYPES
|
|
int, bigint, bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
select bigint_col + bigint_col, int_col + int_col, smallint_col + smallint_col,
|
|
tinyint_col + tinyint_col, smallint_col + tinyint_col
|
|
from functional.alltypestiny;
|
|
---- RESULTS
|
|
0,0,0,0,0
|
|
0,0,0,0,0
|
|
0,0,0,0,0
|
|
0,0,0,0,0
|
|
20,2,2,2,2
|
|
20,2,2,2,2
|
|
20,2,2,2,2
|
|
20,2,2,2,2
|
|
---- TYPES
|
|
bigint, bigint, int, smallint, int
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
select float_col + int_col, float_col + 3.0, 3.0 + 3.0
|
|
from functional.alltypestiny;
|
|
---- RESULTS
|
|
0.0,3.00000000,6.0
|
|
2.10000002384,4.10000002,6.0
|
|
0.0,3.00000000,6.0
|
|
2.10000002384,4.10000002,6.0
|
|
0.0,3.00000000,6.0
|
|
2.10000002384,4.10000002,6.0
|
|
0.0,3.00000000,6.0
|
|
2.10000002384,4.10000002,6.0
|
|
---- TYPES
|
|
double, decimal, decimal
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
select bigint_col - bigint_col, int_col - int_col, smallint_col - smallint_col,
|
|
tinyint_col - tinyint_col, smallint_col - tinyint_col
|
|
from functional.alltypestiny;
|
|
---- RESULTS
|
|
0,0,0,0,0
|
|
0,0,0,0,0
|
|
0,0,0,0,0
|
|
0,0,0,0,0
|
|
0,0,0,0,0
|
|
0,0,0,0,0
|
|
0,0,0,0,0
|
|
0,0,0,0,0
|
|
---- TYPES
|
|
bigint, bigint, int, smallint, int
|
|
====
|
|
---- QUERY
|
|
select float_col - int_col, float_col - 3.0, 3.0 - 1.8
|
|
from functional.alltypestiny;
|
|
---- RESULTS
|
|
0.0,-3.00000000,1.2
|
|
0.1000000238418579,-1.89999998,1.2
|
|
0.0,-3.00000000,1.2
|
|
0.1000000238418579,-1.89999998,1.2
|
|
0.0,-3.00000000,1.2
|
|
0.1000000238418579,-1.89999998,1.2
|
|
0.0,-3.00000000,1.2
|
|
0.1000000238418579,-1.89999998,1.2
|
|
---- TYPES
|
|
double, decimal, decimal
|
|
====
|
|
---- QUERY
|
|
select bigint_col * bigint_col, int_col * int_col, smallint_col * smallint_col,
|
|
tinyint_col * tinyint_col, smallint_col * tinyint_col
|
|
from functional.alltypestiny;
|
|
---- RESULTS
|
|
0,0,0,0,0
|
|
100,1,1,1,1
|
|
0,0,0,0,0
|
|
100,1,1,1,1
|
|
0,0,0,0,0
|
|
100,1,1,1,1
|
|
0,0,0,0,0
|
|
100,1,1,1,1
|
|
---- TYPES
|
|
bigint, bigint, int, smallint, int
|
|
====
|
|
---- QUERY
|
|
select float_col * int_col, float_col * 3.0, 3.0 * 2.0
|
|
from functional.alltypestiny;
|
|
---- RESULTS
|
|
0,0,6.00
|
|
1.100000023841858,3.300000071525574,6.00
|
|
0,0,6.00
|
|
1.100000023841858,3.300000071525574,6.00
|
|
0,0,6.00
|
|
1.100000023841858,3.300000071525574,6.00
|
|
0,0,6.00
|
|
1.100000023841858,3.300000071525574,6.00
|
|
---- TYPES
|
|
double, double, decimal
|
|
====
|
|
---- QUERY
|
|
select bigint_col / bigint_col, int_col / int_col, smallint_col / smallint_col,
|
|
tinyint_col / tinyint_col
|
|
from functional.alltypestiny;
|
|
---- RESULTS
|
|
1,1,1,1
|
|
NaN,NaN,NaN,NaN
|
|
1,1,1,1
|
|
NaN,NaN,NaN,NaN
|
|
1,1,1,1
|
|
NaN,NaN,NaN,NaN
|
|
1,1,1,1
|
|
NaN,NaN,NaN,NaN
|
|
---- TYPES
|
|
double, double, double, double
|
|
====
|
|
---- QUERY
|
|
select float_col / int_col, float_col / 3.0, 3.0 / 2.0
|
|
from functional.alltypestiny;
|
|
---- RESULTS
|
|
1.100000023841858,0.36666667,1.500000
|
|
NaN,0.00000000,1.500000
|
|
1.100000023841858,0.36666667,1.500000
|
|
NaN,0.00000000,1.500000
|
|
1.100000023841858,0.36666667,1.500000
|
|
NaN,0.00000000,1.500000
|
|
1.100000023841858,0.36666667,1.500000
|
|
NaN,0.00000000,1.500000
|
|
---- TYPES
|
|
double, decimal, decimal
|
|
====
|
|
---- QUERY
|
|
select bigint_col % bigint_col, int_col % int_col, smallint_col % smallint_col,
|
|
tinyint_col % tinyint_col, smallint_col % tinyint_col
|
|
from functional.alltypestiny;
|
|
---- RESULTS
|
|
0,0,0,0,0
|
|
NULL,NULL,NULL,NULL,NULL
|
|
0,0,0,0,0
|
|
NULL,NULL,NULL,NULL,NULL
|
|
0,0,0,0,0
|
|
NULL,NULL,NULL,NULL,NULL
|
|
0,0,0,0,0
|
|
NULL,NULL,NULL,NULL,NULL
|
|
---- TYPES
|
|
bigint, int, smallint, tinyint, smallint
|
|
====
|
|
---- QUERY
|
|
select float_col % 3.0, 3.0 % 2.0
|
|
from functional.alltypestiny;
|
|
---- RESULTS
|
|
0.000000000,1.0
|
|
1.100000024,1.0
|
|
0.000000000,1.0
|
|
1.100000024,1.0
|
|
0.000000000,1.0
|
|
1.100000024,1.0
|
|
0.000000000,1.0
|
|
1.100000024,1.0
|
|
---- TYPES
|
|
decimal, decimal
|
|
====
|
|
---- QUERY
|
|
# Union test
|
|
select 3 union select 458;
|
|
---- RESULTS
|
|
3
|
|
458
|
|
---- TYPES
|
|
smallint
|
|
====
|
|
---- QUERY
|
|
# Union test
|
|
select 3 union select 458;
|
|
---- RESULTS
|
|
3
|
|
458
|
|
---- TYPES
|
|
smallint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# case test
|
|
select tinyint_col, case tinyint_col when 1 then 5 else 458 end from functional.alltypestiny;
|
|
---- RESULTS
|
|
0,458
|
|
0,458
|
|
0,458
|
|
0,458
|
|
1,5
|
|
1,5
|
|
1,5
|
|
1,5
|
|
---- TYPES
|
|
tinyint,smallint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# case test
|
|
select tinyint_col, case tinyint_col when 1 then 5 when 2 then 7 else 458 end from functional.alltypestiny;
|
|
---- RESULTS
|
|
0,458
|
|
0,458
|
|
0,458
|
|
0,458
|
|
1,5
|
|
1,5
|
|
1,5
|
|
1,5
|
|
---- TYPES
|
|
tinyint,smallint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# case test
|
|
select tinyint_col, case tinyint_col when 0 then 458 else 5 end from functional.alltypestiny;
|
|
---- RESULTS
|
|
0,458
|
|
0,458
|
|
0,458
|
|
0,458
|
|
1,5
|
|
1,5
|
|
1,5
|
|
1,5
|
|
---- TYPES
|
|
tinyint,smallint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# case test
|
|
select tinyint_col, case tinyint_col when 0 then 458 end from functional.alltypestiny;
|
|
---- RESULTS
|
|
0,458
|
|
0,458
|
|
0,458
|
|
0,458
|
|
1,NULL
|
|
1,NULL
|
|
1,NULL
|
|
1,NULL
|
|
---- TYPES
|
|
tinyint,smallint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# case test other format (the calcite rexnode should be the same)
|
|
select tinyint_col, case when tinyint_col=00 then 458 else 5 end from functional.alltypestiny;
|
|
---- RESULTS
|
|
0,458
|
|
0,458
|
|
0,458
|
|
0,458
|
|
1,5
|
|
1,5
|
|
1,5
|
|
1,5
|
|
---- TYPES
|
|
tinyint,smallint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# or test
|
|
select (tinyint_col = 459) or (tinyint_col = 458) or (tinyint_col = 1) from functional.alltypestiny;
|
|
---- RESULTS
|
|
false
|
|
false
|
|
false
|
|
false
|
|
true
|
|
true
|
|
true
|
|
true
|
|
---- TYPES
|
|
boolean
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# and test
|
|
select (tinyint_col != 459) and (tinyint_col != 458) and (tinyint_col = 1) from functional.alltypestiny;
|
|
---- RESULTS
|
|
false
|
|
false
|
|
false
|
|
false
|
|
true
|
|
true
|
|
true
|
|
true
|
|
---- TYPES
|
|
boolean
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# sum cast tinyint agg test
|
|
select sum(tinyint_col) from functional.alltypestiny;
|
|
---- RESULTS
|
|
4
|
|
---- TYPES
|
|
bigint
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# duplicate test from analytics-fn.test, delete when it is activated.
|
|
select date_part,
|
|
count(date_col) over (partition by date_part),
|
|
min(date_col) over (partition by date_part),
|
|
max(date_col) over (partition by date_part)
|
|
from functional.date_tbl
|
|
order by date_part;
|
|
---- RESULTS: VERIFY_IS_EQUAL_SORTED
|
|
0001-01-01,6,0001-01-01,9999-12-31
|
|
0001-01-01,6,0001-01-01,9999-12-31
|
|
0001-01-01,6,0001-01-01,9999-12-31
|
|
0001-01-01,6,0001-01-01,9999-12-31
|
|
0001-01-01,6,0001-01-01,9999-12-31
|
|
0001-01-01,6,0001-01-01,9999-12-31
|
|
0001-01-01,6,0001-01-01,9999-12-31
|
|
1399-06-27,2,2017-11-28,2018-12-31
|
|
1399-06-27,2,2017-11-28,2018-12-31
|
|
1399-06-27,2,2017-11-28,2018-12-31
|
|
2017-11-27,10,0001-06-21,2017-11-28
|
|
2017-11-27,10,0001-06-21,2017-11-28
|
|
2017-11-27,10,0001-06-21,2017-11-28
|
|
2017-11-27,10,0001-06-21,2017-11-28
|
|
2017-11-27,10,0001-06-21,2017-11-28
|
|
2017-11-27,10,0001-06-21,2017-11-28
|
|
2017-11-27,10,0001-06-21,2017-11-28
|
|
2017-11-27,10,0001-06-21,2017-11-28
|
|
2017-11-27,10,0001-06-21,2017-11-28
|
|
2017-11-27,10,0001-06-21,2017-11-28
|
|
9999-12-31,2,9999-12-01,9999-12-31
|
|
9999-12-31,2,9999-12-01,9999-12-31
|
|
---- TYPES
|
|
DATE, BIGINT, DATE, DATE
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
# Test ROWS windows with start boundaries
|
|
select id,
|
|
count(id) over (order by id rows between 3 preceding and 3 preceding) c1,
|
|
count(id) over (order by id rows between 3 preceding and 2 preceding) c2,
|
|
count(id) over (order by id rows between 3 preceding and 1 preceding) c3,
|
|
count(id) over (order by id rows between 3 preceding and current row) c4,
|
|
count(id) over (order by id rows between 3 preceding and 1 following) c5,
|
|
count(id) over (order by id rows between 3 preceding and 2 following) c6,
|
|
count(id) over (order by id rows between 3 preceding and 3 following) c7,
|
|
count(id) over (order by id rows between 2 preceding and 3 following) c8,
|
|
count(id) over (order by id rows between 1 preceding and 3 following) c9,
|
|
count(id) over (order by id rows between current row and 3 following) c10,
|
|
count(id) over (order by id rows between 1 following and 3 following) c11,
|
|
count(id) over (order by id rows between 2 following and 3 following) c12,
|
|
count(id) over (order by id rows between 3 following and 3 following) c13
|
|
from functional.alltypes where id < 8
|
|
---- RESULTS: VERIFY_IS_EQUAL_SORTED
|
|
0,0,0,0,1,2,3,4,4,4,4,3,2,1
|
|
1,0,0,1,2,3,4,5,5,5,4,3,2,1
|
|
2,0,1,2,3,4,5,6,6,5,4,3,2,1
|
|
3,1,2,3,4,5,6,7,6,5,4,3,2,1
|
|
4,1,2,3,4,5,6,7,6,5,4,3,2,1
|
|
5,1,2,3,4,5,6,6,5,4,3,2,1,0
|
|
6,1,2,3,4,5,5,5,4,3,2,1,0,0
|
|
7,1,2,3,4,4,4,4,3,2,1,0,0,0
|
|
---- TYPES
|
|
INT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT
|
|
====
|
|
---- QUERY
|
|
# make sure this parses
|
|
select '1' as 'hello';
|
|
---- RESULTS
|
|
'1'
|
|
---- TYPES
|
|
string
|
|
====
|
|
---- QUERY
|
|
# make sure this parses
|
|
select "1" as "hello";
|
|
---- RESULTS
|
|
'1'
|
|
---- TYPES
|
|
string
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
explain select * from functional.alltypestiny;
|
|
---- RESULTS: VERIFY_IS_SUBSET
|
|
row_regex:.*01:EXCHANGE.*
|
|
row_regex:.*00:SCAN.*
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
set explain_level=3;
|
|
explain select * from functional.alltypestiny;
|
|
---- RESULTS: VERIFY_IS_SUBSET
|
|
row_regex:.*01:EXCHANGE.*
|
|
row_regex:.*00:SCAN.*
|
|
row_regex:.*partitions=4/4.*
|
|
---- RUNTIME_PROFILE
|
|
row_regex: .*PlannerType: CalcitePlanner.*
|
|
====
|
|
---- QUERY
|
|
select count(*) from functional.alltypes_view;
|
|
---- RESULTS
|
|
7300
|
|
---- TYPES
|
|
BIGINT
|
|
====
|
|
---- QUERY
|
|
select * from functional.alltypes_view order by id limit 10;
|
|
---- RESULTS
|
|
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
|
|
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
|
|
2,true,2,2,2,20,2.200000047683716,20.2,'01/01/09','2',2009-01-01 00:02:00.100000000,2009,1
|
|
3,false,3,3,3,30,3.299999952316284,30.3,'01/01/09','3',2009-01-01 00:03:00.300000000,2009,1
|
|
4,true,4,4,4,40,4.400000095367432,40.4,'01/01/09','4',2009-01-01 00:04:00.600000000,2009,1
|
|
5,false,5,5,5,50,5.5,50.5,'01/01/09','5',2009-01-01 00:05:00.100000000,2009,1
|
|
6,true,6,6,6,60,6.599999904632568,60.59999999999999,'01/01/09','6',2009-01-01 00:06:00.150000000,2009,1
|
|
7,false,7,7,7,70,7.699999809265137,70.7,'01/01/09','7',2009-01-01 00:07:00.210000000,2009,1
|
|
8,true,8,8,8,80,8.800000190734863,80.8,'01/01/09','8',2009-01-01 00:08:00.280000000,2009,1
|
|
9,false,9,9,9,90,9.899999618530273,90.89999999999999,'01/01/09','9',2009-01-01 00:09:00.360000000,2009,1
|
|
---- TYPES
|
|
INT, BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, STRING, STRING, TIMESTAMP, INT, INT
|
|
====
|
|
---- QUERY
|
|
select id from functional.alltypes_view order by id limit 1;
|
|
---- RESULTS
|
|
0
|
|
---- TYPES
|
|
INT
|
|
====
|
|
---- QUERY
|
|
select alltypes_view.id from functional.alltypes_view order by id limit 1;
|
|
---- RESULTS
|
|
0
|
|
---- TYPES
|
|
INT
|
|
====
|
|
---- QUERY
|
|
select functional.alltypes_view.id from functional.alltypes_view order by id limit 1;
|
|
---- RESULTS
|
|
0
|
|
---- TYPES
|
|
INT
|
|
====
|
|
---- QUERY
|
|
select count(*) from functional.alltypes_view, functional.alltypestiny
|
|
where functional.alltypes_view.id = functional.alltypestiny.id;
|
|
---- RESULTS
|
|
8
|
|
---- TYPES
|
|
BIGINT
|
|
====
|
|
---- QUERY
|
|
select * from functional.alltypes_view, functional.alltypestiny
|
|
where functional.alltypes_view.id = functional.alltypestiny.id
|
|
order by functional.alltypes_view.id;
|
|
---- RESULTS
|
|
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1,0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
|
|
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1,1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
|
|
2,true,2,2,2,20,2.200000047683716,20.2,'01/01/09','2',2009-01-01 00:02:00.100000000,2009,1,2,true,0,0,0,0,0,0,'02/01/09','0',2009-02-01 00:00:00,2009,2
|
|
3,false,3,3,3,30,3.299999952316284,30.3,'01/01/09','3',2009-01-01 00:03:00.300000000,2009,1,3,false,1,1,1,10,1.100000023841858,10.1,'02/01/09','1',2009-02-01 00:01:00,2009,2
|
|
4,true,4,4,4,40,4.400000095367432,40.4,'01/01/09','4',2009-01-01 00:04:00.600000000,2009,1,4,true,0,0,0,0,0,0,'03/01/09','0',2009-03-01 00:00:00,2009,3
|
|
5,false,5,5,5,50,5.5,50.5,'01/01/09','5',2009-01-01 00:05:00.100000000,2009,1,5,false,1,1,1,10,1.100000023841858,10.1,'03/01/09','1',2009-03-01 00:01:00,2009,3
|
|
6,true,6,6,6,60,6.599999904632568,60.59999999999999,'01/01/09','6',2009-01-01 00:06:00.150000000,2009,1,6,true,0,0,0,0,0,0,'04/01/09','0',2009-04-01 00:00:00,2009,4
|
|
7,false,7,7,7,70,7.699999809265137,70.7,'01/01/09','7',2009-01-01 00:07:00.210000000,2009,1,7,false,1,1,1,10,1.100000023841858,10.1,'04/01/09','1',2009-04-01 00:01:00,2009,4
|
|
---- TYPES
|
|
INT, BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, STRING, STRING, TIMESTAMP, INT, INT, INT, BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, STRING, STRING, TIMESTAMP, INT, INT
|
|
====
|
|
---- QUERY
|
|
select id from functional.alltypes_view, functional.alltypestiny
|
|
where functional.alltypes_view.id = functional.alltypestiny.id
|
|
order by functional.alltypes_view.id;
|
|
---- CATCH
|
|
SqlValidatorException: Column 'ID' is ambiguous
|
|
====
|
|
---- QUERY
|
|
select alltypestiny.id from functional.alltypes_view, functional.alltypestiny
|
|
where functional.alltypes_view.id = functional.alltypestiny.id
|
|
order by functional.alltypes_view.id;
|
|
---- RESULTS
|
|
0
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
---- TYPES
|
|
INT
|
|
====
|
|
---- QUERY
|
|
select functional.alltypestiny.id from functional.alltypes_view, functional.alltypestiny
|
|
where functional.alltypes_view.id = functional.alltypestiny.id
|
|
order by id;
|
|
---- RESULTS
|
|
0
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
---- TYPES
|
|
INT
|
|
====
|
|
---- QUERY
|
|
# This test case makes sure that the definition of a regular view could be correctly
|
|
# parsed during view expansion even if database, table, and column names are enclosed in
|
|
# backticks.
|
|
select * from functional.alltypes_hive_view where id = 0;
|
|
---- RESULTS
|
|
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
|
|
---- TYPES
|
|
INT, BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, STRING, STRING, TIMESTAMP, INT, INT
|
|
====
|