mirror of
https://github.com/apache/impala.git
synced 2026-01-01 09:00:42 -05:00
Before: Constant conjuncts used to be registered in the analyzer together with non-constant conjuncts. Since constant conjuncts are not bound by any slot or tuple they were incorrectly placed into whatever plan node called init() first and then were incorrectly marked as assigned. For handling queries with a limit 0 we had special code in the BE. After: Since constant conjuncts do not fit well into the existing slot/tuple based assignment logic this patch treats them specially as follows. Constant that do not originate from the ON clause of an outer join are evaluated directly. Depending on which clause the conjunct came from either the entire query block is marked as returning an empty set (HAVING clause) or the block is marked as having an empty select-project-join portion (ON and WHERE clause). In the latter case, aggregations (if any) must still be performed. The plan sub-trees that are guaranteed to return an empty result set are implemented by an EmptySetNode. Constant conjuncts from the ON clause of an outer are assigned to the node implementing the join. Similarly, query blocks with a limit 0 are marked as returning an empty result, and planned as an EmptySetNode. As a side effect, this patch also fixes: IMPALA-89: Make our behavior of INSERT OVERWRITE ... LIMIT 0 consistent with Hive's. The target table is left empty after such an operation. Change-Id: Ia35679ac0b3a9d94edae7f310efc4d934c1bfb0d Reviewed-on: http://gerrit.sjc.cloudera.com:8080/3653 Reviewed-by: Alex Behm <alex.behm@cloudera.com> Tested-by: jenkins Reviewed-on: http://gerrit.sjc.cloudera.com:8080/3800
704 lines
26 KiB
Plaintext
704 lines
26 KiB
Plaintext
====
|
|
---- QUERY
|
|
# insert overwrite unpartitioned table
|
|
insert overwrite table alltypesnopart_insert
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col,
|
|
float_col, double_col, date_string_col, string_col, timestamp_col
|
|
from alltypessmall
|
|
where year=2009 and month=04
|
|
---- SETUP
|
|
RESET alltypesnopart_insert
|
|
---- RESULTS
|
|
: 25
|
|
====
|
|
---- QUERY
|
|
# search the overwritten table to verify the results
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col,
|
|
double_col, date_string_col, string_col
|
|
from alltypesnopart_insert
|
|
---- TYPES
|
|
int, boolean, tinyint, smallint, int, bigint, float, double, string, string
|
|
---- RESULTS
|
|
75,false,0,0,0,0,0,0,'04/01/09','0'
|
|
76,true,1,1,1,10,1.100000023841858,10.1,'04/01/09','1'
|
|
77,false,2,2,2,20,2.200000047683716,20.2,'04/01/09','2'
|
|
78,true,3,3,3,30,3.299999952316284,30.3,'04/01/09','3'
|
|
79,false,4,4,4,40,4.400000095367432,40.4,'04/01/09','4'
|
|
80,true,5,5,5,50,5.5,50.5,'04/01/09','5'
|
|
81,false,6,6,6,60,6.599999904632568,60.6,'04/01/09','6'
|
|
82,true,7,7,7,70,7.699999809265137,70.7,'04/01/09','7'
|
|
83,false,8,8,8,80,8.800000190734863,80.8,'04/01/09','8'
|
|
84,true,9,9,9,90,9.899999618530273,90.90000000000001,'04/01/09','9'
|
|
85,false,0,0,0,0,0,0,'04/02/09','0'
|
|
86,true,1,1,1,10,1.100000023841858,10.1,'04/02/09','1'
|
|
87,false,2,2,2,20,2.200000047683716,20.2,'04/02/09','2'
|
|
88,true,3,3,3,30,3.299999952316284,30.3,'04/02/09','3'
|
|
89,false,4,4,4,40,4.400000095367432,40.4,'04/02/09','4'
|
|
90,true,5,5,5,50,5.5,50.5,'04/02/09','5'
|
|
91,false,6,6,6,60,6.599999904632568,60.6,'04/02/09','6'
|
|
92,true,7,7,7,70,7.699999809265137,70.7,'04/02/09','7'
|
|
93,false,8,8,8,80,8.800000190734863,80.8,'04/02/09','8'
|
|
94,true,9,9,9,90,9.899999618530273,90.90000000000001,'04/02/09','9'
|
|
95,false,0,0,0,0,0,0,'04/03/09','0'
|
|
96,true,1,1,1,10,1.100000023841858,10.1,'04/03/09','1'
|
|
97,false,2,2,2,20,2.200000047683716,20.2,'04/03/09','2'
|
|
98,true,3,3,3,30,3.299999952316284,30.3,'04/03/09','3'
|
|
99,false,4,4,4,40,4.400000095367432,40.4,'04/03/09','4'
|
|
====
|
|
---- QUERY
|
|
# insert into unpartitioned table
|
|
insert into table alltypesnopart_insert
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col,
|
|
float_col, double_col, date_string_col, string_col, timestamp_col
|
|
from alltypessmall
|
|
where year=2009 and month=04
|
|
---- SETUP
|
|
RESET alltypesnopart_insert
|
|
---- RESULTS
|
|
: 25
|
|
====
|
|
---- QUERY
|
|
# search the table to verify it contains 25 rows
|
|
select count(*) from alltypesnopart_insert
|
|
---- TYPES
|
|
bigint
|
|
---- RESULTS
|
|
25
|
|
====
|
|
---- QUERY
|
|
# static partition overwrite
|
|
insert overwrite table alltypesinsert
|
|
partition (year=2009, month=4)
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col,
|
|
float_col, double_col, date_string_col, string_col, timestamp_col
|
|
from alltypessmall
|
|
where year=2009 and month=4
|
|
---- SETUP
|
|
DROP PARTITIONS alltypesinsert
|
|
RESET alltypesinsert
|
|
---- RESULTS
|
|
year=2009/month=4/: 25
|
|
====
|
|
---- QUERY
|
|
# search the overwritten partition to verify the results
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col,
|
|
double_col, date_string_col, string_col
|
|
from alltypesinsert
|
|
where year=2009 and month=4
|
|
---- TYPES
|
|
int, boolean, tinyint, smallint, int, bigint, float, double, string, string
|
|
---- RESULTS
|
|
75,false,0,0,0,0,0,0,'04/01/09','0'
|
|
76,true,1,1,1,10,1.100000023841858,10.1,'04/01/09','1'
|
|
77,false,2,2,2,20,2.200000047683716,20.2,'04/01/09','2'
|
|
78,true,3,3,3,30,3.299999952316284,30.3,'04/01/09','3'
|
|
79,false,4,4,4,40,4.400000095367432,40.4,'04/01/09','4'
|
|
80,true,5,5,5,50,5.5,50.5,'04/01/09','5'
|
|
81,false,6,6,6,60,6.599999904632568,60.6,'04/01/09','6'
|
|
82,true,7,7,7,70,7.699999809265137,70.7,'04/01/09','7'
|
|
83,false,8,8,8,80,8.800000190734863,80.8,'04/01/09','8'
|
|
84,true,9,9,9,90,9.899999618530273,90.90000000000001,'04/01/09','9'
|
|
85,false,0,0,0,0,0,0,'04/02/09','0'
|
|
86,true,1,1,1,10,1.100000023841858,10.1,'04/02/09','1'
|
|
87,false,2,2,2,20,2.200000047683716,20.2,'04/02/09','2'
|
|
88,true,3,3,3,30,3.299999952316284,30.3,'04/02/09','3'
|
|
89,false,4,4,4,40,4.400000095367432,40.4,'04/02/09','4'
|
|
90,true,5,5,5,50,5.5,50.5,'04/02/09','5'
|
|
91,false,6,6,6,60,6.599999904632568,60.6,'04/02/09','6'
|
|
92,true,7,7,7,70,7.699999809265137,70.7,'04/02/09','7'
|
|
93,false,8,8,8,80,8.800000190734863,80.8,'04/02/09','8'
|
|
94,true,9,9,9,90,9.899999618530273,90.90000000000001,'04/02/09','9'
|
|
95,false,0,0,0,0,0,0,'04/03/09','0'
|
|
96,true,1,1,1,10,1.100000023841858,10.1,'04/03/09','1'
|
|
97,false,2,2,2,20,2.200000047683716,20.2,'04/03/09','2'
|
|
98,true,3,3,3,30,3.299999952316284,30.3,'04/03/09','3'
|
|
99,false,4,4,4,40,4.400000095367432,40.4,'04/03/09','4'
|
|
====
|
|
---- QUERY
|
|
# static partition insert$TABLE, test creation of partitions
|
|
insert into table alltypesinsert
|
|
partition (year=2009, month=4)
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col,
|
|
float_col, double_col, date_string_col, string_col, timestamp_col
|
|
from alltypessmall
|
|
where year=2009 and month=4
|
|
---- SETUP
|
|
DROP PARTITIONS alltypesinsert
|
|
---- RESULTS
|
|
year=2009/month=4/: 25
|
|
====
|
|
---- QUERY
|
|
# search the partition to verify it contains all 25 rows
|
|
select count(*) from alltypesinsert
|
|
where year=2009 and month=4
|
|
---- TYPES
|
|
bigint
|
|
---- RESULTS
|
|
25
|
|
====
|
|
---- QUERY
|
|
# partially dynamic partition overwrite
|
|
insert overwrite table alltypesinsert
|
|
partition (year=2009, month)
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col,
|
|
float_col, double_col, date_string_col, string_col, timestamp_col, month
|
|
from alltypessmall
|
|
where year=2009 and month>1 and month<=4
|
|
---- SETUP
|
|
DROP PARTITIONS alltypesinsert
|
|
---- RESULTS
|
|
year=2009/month=2/: 25
|
|
year=2009/month=3/: 25
|
|
year=2009/month=4/: 25
|
|
====
|
|
---- QUERY
|
|
# search the overwritten partition to verify the results
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col,
|
|
double_col, date_string_col, string_col
|
|
from alltypesinsert
|
|
where year=2009 and month>1 and month<=4
|
|
---- TYPES
|
|
int, boolean, tinyint, smallint, int, bigint, float, double, string, string
|
|
---- RESULTS
|
|
25,false,0,0,0,0,0,0,'02/01/09','0'
|
|
26,true,1,1,1,10,1.100000023841858,10.1,'02/01/09','1'
|
|
27,false,2,2,2,20,2.200000047683716,20.2,'02/01/09','2'
|
|
28,true,3,3,3,30,3.299999952316284,30.3,'02/01/09','3'
|
|
29,false,4,4,4,40,4.400000095367432,40.4,'02/01/09','4'
|
|
30,true,5,5,5,50,5.5,50.5,'02/01/09','5'
|
|
31,false,6,6,6,60,6.599999904632568,60.6,'02/01/09','6'
|
|
32,true,7,7,7,70,7.699999809265137,70.7,'02/01/09','7'
|
|
33,false,8,8,8,80,8.800000190734863,80.8,'02/01/09','8'
|
|
34,true,9,9,9,90,9.899999618530273,90.90000000000001,'02/01/09','9'
|
|
35,false,0,0,0,0,0,0,'02/02/09','0'
|
|
36,true,1,1,1,10,1.100000023841858,10.1,'02/02/09','1'
|
|
37,false,2,2,2,20,2.200000047683716,20.2,'02/02/09','2'
|
|
38,true,3,3,3,30,3.299999952316284,30.3,'02/02/09','3'
|
|
39,false,4,4,4,40,4.400000095367432,40.4,'02/02/09','4'
|
|
40,true,5,5,5,50,5.5,50.5,'02/02/09','5'
|
|
41,false,6,6,6,60,6.599999904632568,60.6,'02/02/09','6'
|
|
42,true,7,7,7,70,7.699999809265137,70.7,'02/02/09','7'
|
|
43,false,8,8,8,80,8.800000190734863,80.8,'02/02/09','8'
|
|
44,true,9,9,9,90,9.899999618530273,90.90000000000001,'02/02/09','9'
|
|
45,false,0,0,0,0,0,0,'02/03/09','0'
|
|
46,true,1,1,1,10,1.100000023841858,10.1,'02/03/09','1'
|
|
47,false,2,2,2,20,2.200000047683716,20.2,'02/03/09','2'
|
|
48,true,3,3,3,30,3.299999952316284,30.3,'02/03/09','3'
|
|
49,false,4,4,4,40,4.400000095367432,40.4,'02/03/09','4'
|
|
50,true,0,0,0,0,0,0,'03/01/09','0'
|
|
51,false,1,1,1,10,1.100000023841858,10.1,'03/01/09','1'
|
|
52,true,2,2,2,20,2.200000047683716,20.2,'03/01/09','2'
|
|
53,false,3,3,3,30,3.299999952316284,30.3,'03/01/09','3'
|
|
54,true,4,4,4,40,4.400000095367432,40.4,'03/01/09','4'
|
|
55,false,5,5,5,50,5.5,50.5,'03/01/09','5'
|
|
56,true,6,6,6,60,6.599999904632568,60.6,'03/01/09','6'
|
|
57,false,7,7,7,70,7.699999809265137,70.7,'03/01/09','7'
|
|
58,true,8,8,8,80,8.800000190734863,80.8,'03/01/09','8'
|
|
59,false,9,9,9,90,9.899999618530273,90.90000000000001,'03/01/09','9'
|
|
60,true,0,0,0,0,0,0,'03/02/09','0'
|
|
61,false,1,1,1,10,1.100000023841858,10.1,'03/02/09','1'
|
|
62,true,2,2,2,20,2.200000047683716,20.2,'03/02/09','2'
|
|
63,false,3,3,3,30,3.299999952316284,30.3,'03/02/09','3'
|
|
64,true,4,4,4,40,4.400000095367432,40.4,'03/02/09','4'
|
|
65,false,5,5,5,50,5.5,50.5,'03/02/09','5'
|
|
66,true,6,6,6,60,6.599999904632568,60.6,'03/02/09','6'
|
|
67,false,7,7,7,70,7.699999809265137,70.7,'03/02/09','7'
|
|
68,true,8,8,8,80,8.800000190734863,80.8,'03/02/09','8'
|
|
69,false,9,9,9,90,9.899999618530273,90.90000000000001,'03/02/09','9'
|
|
70,true,0,0,0,0,0,0,'03/03/09','0'
|
|
71,false,1,1,1,10,1.100000023841858,10.1,'03/03/09','1'
|
|
72,true,2,2,2,20,2.200000047683716,20.2,'03/03/09','2'
|
|
73,false,3,3,3,30,3.299999952316284,30.3,'03/03/09','3'
|
|
74,true,4,4,4,40,4.400000095367432,40.4,'03/03/09','4'
|
|
75,false,0,0,0,0,0,0,'04/01/09','0'
|
|
76,true,1,1,1,10,1.100000023841858,10.1,'04/01/09','1'
|
|
77,false,2,2,2,20,2.200000047683716,20.2,'04/01/09','2'
|
|
78,true,3,3,3,30,3.299999952316284,30.3,'04/01/09','3'
|
|
79,false,4,4,4,40,4.400000095367432,40.4,'04/01/09','4'
|
|
80,true,5,5,5,50,5.5,50.5,'04/01/09','5'
|
|
81,false,6,6,6,60,6.599999904632568,60.6,'04/01/09','6'
|
|
82,true,7,7,7,70,7.699999809265137,70.7,'04/01/09','7'
|
|
83,false,8,8,8,80,8.800000190734863,80.8,'04/01/09','8'
|
|
84,true,9,9,9,90,9.899999618530273,90.90000000000001,'04/01/09','9'
|
|
85,false,0,0,0,0,0,0,'04/02/09','0'
|
|
86,true,1,1,1,10,1.100000023841858,10.1,'04/02/09','1'
|
|
87,false,2,2,2,20,2.200000047683716,20.2,'04/02/09','2'
|
|
88,true,3,3,3,30,3.299999952316284,30.3,'04/02/09','3'
|
|
89,false,4,4,4,40,4.400000095367432,40.4,'04/02/09','4'
|
|
90,true,5,5,5,50,5.5,50.5,'04/02/09','5'
|
|
91,false,6,6,6,60,6.599999904632568,60.6,'04/02/09','6'
|
|
92,true,7,7,7,70,7.699999809265137,70.7,'04/02/09','7'
|
|
93,false,8,8,8,80,8.800000190734863,80.8,'04/02/09','8'
|
|
94,true,9,9,9,90,9.899999618530273,90.90000000000001,'04/02/09','9'
|
|
95,false,0,0,0,0,0,0,'04/03/09','0'
|
|
96,true,1,1,1,10,1.100000023841858,10.1,'04/03/09','1'
|
|
97,false,2,2,2,20,2.200000047683716,20.2,'04/03/09','2'
|
|
98,true,3,3,3,30,3.299999952316284,30.3,'04/03/09','3'
|
|
99,false,4,4,4,40,4.400000095367432,40.4,'04/03/09','4'
|
|
====
|
|
---- QUERY
|
|
# partially dynamic partition insert$TABLE, check partition creation
|
|
insert into table alltypesinsert
|
|
partition (year=2009, month)
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col,
|
|
float_col, double_col, date_string_col, string_col, timestamp_col, month
|
|
from alltypessmall
|
|
where year=2009 and month>=1 and month<4
|
|
---- SETUP
|
|
DROP PARTITIONS alltypesinsert
|
|
---- RESULTS
|
|
year=2009/month=1/: 25
|
|
year=2009/month=2/: 25
|
|
year=2009/month=3/: 25
|
|
====
|
|
---- QUERY
|
|
# search the partitions to verify they contain all 75 rows
|
|
select count(id) from alltypesinsert
|
|
where year=2009 and month>=1 and month<4
|
|
---- TYPES
|
|
bigint
|
|
---- RESULTS
|
|
75
|
|
====
|
|
---- QUERY
|
|
# fully dynamic partition overwrite
|
|
insert overwrite table alltypesinsert
|
|
partition (year, month)
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col,
|
|
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
|
|
from alltypessmall
|
|
---- SETUP
|
|
DROP PARTITIONS alltypesinsert
|
|
---- RESULTS
|
|
year=2009/month=1/: 25
|
|
year=2009/month=2/: 25
|
|
year=2009/month=3/: 25
|
|
year=2009/month=4/: 25
|
|
====
|
|
---- QUERY
|
|
# search the overwritten partition to verify the results
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col,
|
|
double_col, date_string_col, string_col
|
|
from alltypesinsert
|
|
where year=2009 and month>=1 and month<=4
|
|
---- TYPES
|
|
int, boolean, tinyint, smallint, int, bigint, float, double, string, string
|
|
---- RESULTS
|
|
0,true,0,0,0,0,0,0,'01/01/09','0'
|
|
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1'
|
|
10,true,0,0,0,0,0,0,'01/02/09','0'
|
|
11,false,1,1,1,10,1.100000023841858,10.1,'01/02/09','1'
|
|
12,true,2,2,2,20,2.200000047683716,20.2,'01/02/09','2'
|
|
13,false,3,3,3,30,3.299999952316284,30.3,'01/02/09','3'
|
|
14,true,4,4,4,40,4.400000095367432,40.4,'01/02/09','4'
|
|
15,false,5,5,5,50,5.5,50.5,'01/02/09','5'
|
|
16,true,6,6,6,60,6.599999904632568,60.6,'01/02/09','6'
|
|
17,false,7,7,7,70,7.699999809265137,70.7,'01/02/09','7'
|
|
18,true,8,8,8,80,8.800000190734863,80.8,'01/02/09','8'
|
|
19,false,9,9,9,90,9.899999618530273,90.90000000000001,'01/02/09','9'
|
|
2,true,2,2,2,20,2.200000047683716,20.2,'01/01/09','2'
|
|
20,true,0,0,0,0,0,0,'01/03/09','0'
|
|
21,false,1,1,1,10,1.100000023841858,10.1,'01/03/09','1'
|
|
22,true,2,2,2,20,2.200000047683716,20.2,'01/03/09','2'
|
|
23,false,3,3,3,30,3.299999952316284,30.3,'01/03/09','3'
|
|
24,true,4,4,4,40,4.400000095367432,40.4,'01/03/09','4'
|
|
25,false,0,0,0,0,0,0,'02/01/09','0'
|
|
26,true,1,1,1,10,1.100000023841858,10.1,'02/01/09','1'
|
|
27,false,2,2,2,20,2.200000047683716,20.2,'02/01/09','2'
|
|
28,true,3,3,3,30,3.299999952316284,30.3,'02/01/09','3'
|
|
29,false,4,4,4,40,4.400000095367432,40.4,'02/01/09','4'
|
|
3,false,3,3,3,30,3.299999952316284,30.3,'01/01/09','3'
|
|
30,true,5,5,5,50,5.5,50.5,'02/01/09','5'
|
|
31,false,6,6,6,60,6.599999904632568,60.6,'02/01/09','6'
|
|
32,true,7,7,7,70,7.699999809265137,70.7,'02/01/09','7'
|
|
33,false,8,8,8,80,8.800000190734863,80.8,'02/01/09','8'
|
|
34,true,9,9,9,90,9.899999618530273,90.90000000000001,'02/01/09','9'
|
|
35,false,0,0,0,0,0,0,'02/02/09','0'
|
|
36,true,1,1,1,10,1.100000023841858,10.1,'02/02/09','1'
|
|
37,false,2,2,2,20,2.200000047683716,20.2,'02/02/09','2'
|
|
38,true,3,3,3,30,3.299999952316284,30.3,'02/02/09','3'
|
|
39,false,4,4,4,40,4.400000095367432,40.4,'02/02/09','4'
|
|
4,true,4,4,4,40,4.400000095367432,40.4,'01/01/09','4'
|
|
40,true,5,5,5,50,5.5,50.5,'02/02/09','5'
|
|
41,false,6,6,6,60,6.599999904632568,60.6,'02/02/09','6'
|
|
42,true,7,7,7,70,7.699999809265137,70.7,'02/02/09','7'
|
|
43,false,8,8,8,80,8.800000190734863,80.8,'02/02/09','8'
|
|
44,true,9,9,9,90,9.899999618530273,90.90000000000001,'02/02/09','9'
|
|
45,false,0,0,0,0,0,0,'02/03/09','0'
|
|
46,true,1,1,1,10,1.100000023841858,10.1,'02/03/09','1'
|
|
47,false,2,2,2,20,2.200000047683716,20.2,'02/03/09','2'
|
|
48,true,3,3,3,30,3.299999952316284,30.3,'02/03/09','3'
|
|
49,false,4,4,4,40,4.400000095367432,40.4,'02/03/09','4'
|
|
5,false,5,5,5,50,5.5,50.5,'01/01/09','5'
|
|
50,true,0,0,0,0,0,0,'03/01/09','0'
|
|
51,false,1,1,1,10,1.100000023841858,10.1,'03/01/09','1'
|
|
52,true,2,2,2,20,2.200000047683716,20.2,'03/01/09','2'
|
|
53,false,3,3,3,30,3.299999952316284,30.3,'03/01/09','3'
|
|
54,true,4,4,4,40,4.400000095367432,40.4,'03/01/09','4'
|
|
55,false,5,5,5,50,5.5,50.5,'03/01/09','5'
|
|
56,true,6,6,6,60,6.599999904632568,60.6,'03/01/09','6'
|
|
57,false,7,7,7,70,7.699999809265137,70.7,'03/01/09','7'
|
|
58,true,8,8,8,80,8.800000190734863,80.8,'03/01/09','8'
|
|
59,false,9,9,9,90,9.899999618530273,90.90000000000001,'03/01/09','9'
|
|
6,true,6,6,6,60,6.599999904632568,60.6,'01/01/09','6'
|
|
60,true,0,0,0,0,0,0,'03/02/09','0'
|
|
61,false,1,1,1,10,1.100000023841858,10.1,'03/02/09','1'
|
|
62,true,2,2,2,20,2.200000047683716,20.2,'03/02/09','2'
|
|
63,false,3,3,3,30,3.299999952316284,30.3,'03/02/09','3'
|
|
64,true,4,4,4,40,4.400000095367432,40.4,'03/02/09','4'
|
|
65,false,5,5,5,50,5.5,50.5,'03/02/09','5'
|
|
66,true,6,6,6,60,6.599999904632568,60.6,'03/02/09','6'
|
|
67,false,7,7,7,70,7.699999809265137,70.7,'03/02/09','7'
|
|
68,true,8,8,8,80,8.800000190734863,80.8,'03/02/09','8'
|
|
69,false,9,9,9,90,9.899999618530273,90.90000000000001,'03/02/09','9'
|
|
7,false,7,7,7,70,7.699999809265137,70.7,'01/01/09','7'
|
|
70,true,0,0,0,0,0,0,'03/03/09','0'
|
|
71,false,1,1,1,10,1.100000023841858,10.1,'03/03/09','1'
|
|
72,true,2,2,2,20,2.200000047683716,20.2,'03/03/09','2'
|
|
73,false,3,3,3,30,3.299999952316284,30.3,'03/03/09','3'
|
|
74,true,4,4,4,40,4.400000095367432,40.4,'03/03/09','4'
|
|
75,false,0,0,0,0,0,0,'04/01/09','0'
|
|
76,true,1,1,1,10,1.100000023841858,10.1,'04/01/09','1'
|
|
77,false,2,2,2,20,2.200000047683716,20.2,'04/01/09','2'
|
|
78,true,3,3,3,30,3.299999952316284,30.3,'04/01/09','3'
|
|
79,false,4,4,4,40,4.400000095367432,40.4,'04/01/09','4'
|
|
8,true,8,8,8,80,8.800000190734863,80.8,'01/01/09','8'
|
|
80,true,5,5,5,50,5.5,50.5,'04/01/09','5'
|
|
81,false,6,6,6,60,6.599999904632568,60.6,'04/01/09','6'
|
|
82,true,7,7,7,70,7.699999809265137,70.7,'04/01/09','7'
|
|
83,false,8,8,8,80,8.800000190734863,80.8,'04/01/09','8'
|
|
84,true,9,9,9,90,9.899999618530273,90.90000000000001,'04/01/09','9'
|
|
85,false,0,0,0,0,0,0,'04/02/09','0'
|
|
86,true,1,1,1,10,1.100000023841858,10.1,'04/02/09','1'
|
|
87,false,2,2,2,20,2.200000047683716,20.2,'04/02/09','2'
|
|
88,true,3,3,3,30,3.299999952316284,30.3,'04/02/09','3'
|
|
89,false,4,4,4,40,4.400000095367432,40.4,'04/02/09','4'
|
|
9,false,9,9,9,90,9.899999618530273,90.90000000000001,'01/01/09','9'
|
|
90,true,5,5,5,50,5.5,50.5,'04/02/09','5'
|
|
91,false,6,6,6,60,6.599999904632568,60.6,'04/02/09','6'
|
|
92,true,7,7,7,70,7.699999809265137,70.7,'04/02/09','7'
|
|
93,false,8,8,8,80,8.800000190734863,80.8,'04/02/09','8'
|
|
94,true,9,9,9,90,9.899999618530273,90.90000000000001,'04/02/09','9'
|
|
95,false,0,0,0,0,0,0,'04/03/09','0'
|
|
96,true,1,1,1,10,1.100000023841858,10.1,'04/03/09','1'
|
|
97,false,2,2,2,20,2.200000047683716,20.2,'04/03/09','2'
|
|
98,true,3,3,3,30,3.299999952316284,30.3,'04/03/09','3'
|
|
99,false,4,4,4,40,4.400000095367432,40.4,'04/03/09','4'
|
|
====
|
|
---- QUERY
|
|
# fully dynamic partition insert$TABLE, check partition creation
|
|
insert into table alltypesinsert
|
|
partition (year, month)
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col,
|
|
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
|
|
from alltypessmall
|
|
---- SETUP
|
|
DROP PARTITIONS alltypesinsert
|
|
---- RESULTS
|
|
year=2009/month=1/: 25
|
|
year=2009/month=2/: 25
|
|
year=2009/month=3/: 25
|
|
year=2009/month=4/: 25
|
|
====
|
|
---- QUERY
|
|
# search the partitions to verify they contain all 100 rows
|
|
select count(timestamp_col) from alltypesinsert
|
|
where year=2009 and month>=1 and month<=4
|
|
---- TYPES
|
|
bigint
|
|
---- RESULTS
|
|
100
|
|
====
|
|
---- QUERY
|
|
# test insert into ... select *
|
|
insert into alltypesinsert partition(year, month) select * from alltypessmall
|
|
---- SETUP
|
|
RESET alltypesinsert
|
|
---- RESULTS
|
|
year=2009/month=1/: 25
|
|
year=2009/month=2/: 25
|
|
year=2009/month=3/: 25
|
|
year=2009/month=4/: 25
|
|
====
|
|
---- QUERY
|
|
# check size of alltypesinsert to ensure previous insert worked
|
|
select count(*) from alltypesinsert
|
|
---- TYPES
|
|
bigint
|
|
---- RESULTS
|
|
100
|
|
====
|
|
---- QUERY
|
|
# static partition insert into string-partitioned table with special characters in partition key
|
|
INSERT INTO TABLE insert_string_partitioned PARTITION(s2="/\%.") SELECT "value" FROM alltypessmall LIMIT 1;
|
|
---- SETUP
|
|
RESET insert_string_partitioned
|
|
DROP PARTITIONS insert_string_partitioned
|
|
---- RESULTS
|
|
s2=%2F%5C%25./: 1
|
|
====
|
|
---- QUERY
|
|
# select with unencoded partition key
|
|
SELECT * FROM insert_string_partitioned;
|
|
---- TYPES
|
|
string, string
|
|
---- RESULTS
|
|
'value','/\%.'
|
|
====
|
|
---- QUERY
|
|
# select with unencoded partition key as column predicate
|
|
SELECT * FROM insert_string_partitioned WHERE s2 = "/\%.";
|
|
---- TYPES
|
|
string, string
|
|
---- RESULTS
|
|
'value','/\%.'
|
|
====
|
|
---- QUERY
|
|
# static partition insert into string-partitioned table with non-escaped special characters
|
|
# (Hive chooses not to escape + and ' ')
|
|
INSERT INTO TABLE insert_string_partitioned PARTITION(s2="_.~ +")
|
|
SELECT "value" FROM alltypessmall LIMIT 1;
|
|
---- SETUP
|
|
DROP PARTITIONS insert_string_partitioned
|
|
---- RESULTS
|
|
s2=_.~ +/: 1
|
|
====
|
|
---- QUERY
|
|
# select with unencoded partition key
|
|
SELECT * FROM insert_string_partitioned;
|
|
---- TYPES
|
|
string, string
|
|
---- RESULTS
|
|
'value','_.~ +'
|
|
====
|
|
---- QUERY
|
|
# static partition insert into string-partitioned table with empty partition key
|
|
INSERT INTO TABLE insert_string_partitioned PARTITION(s2='')
|
|
SELECT "value1" FROM alltypessmall LIMIT 1;
|
|
---- SETUP
|
|
DROP PARTITIONS insert_string_partitioned
|
|
---- RESULTS
|
|
s2=__HIVE_DEFAULT_PARTITION__/: 1
|
|
====
|
|
---- QUERY
|
|
# dynamic partition insert into string-partitioned table with empty partition key
|
|
INSERT INTO TABLE insert_string_partitioned PARTITION(s2)
|
|
SELECT "value2","" FROM alltypessmall LIMIT 1;
|
|
---- RESULTS
|
|
s2=__HIVE_DEFAULT_PARTITION__/: 1
|
|
====
|
|
---- QUERY
|
|
# static partition insert into string-partitioned table with NULL partition key
|
|
INSERT INTO TABLE insert_string_partitioned PARTITION(s2=NULL)
|
|
SELECT "value3" FROM alltypessmall LIMIT 1;
|
|
---- RESULTS
|
|
s2=__HIVE_DEFAULT_PARTITION__/: 1
|
|
====
|
|
---- QUERY
|
|
# dynamic partition insert into string-partitioned table with NULL partition key
|
|
INSERT INTO TABLE insert_string_partitioned PARTITION(s2)
|
|
SELECT "value4",NULL FROM alltypessmall LIMIT 1;
|
|
---- RESULTS
|
|
s2=__HIVE_DEFAULT_PARTITION__/: 1
|
|
====
|
|
---- QUERY
|
|
# select with empty partition key as predicate should return nothing, because "" is
|
|
# mapped to NULL
|
|
SELECT * FROM insert_string_partitioned WHERE s2 = "";
|
|
---- TYPES
|
|
string, string
|
|
---- RESULTS
|
|
====
|
|
---- QUERY
|
|
# select with NULL partition key as predicate should return rows
|
|
SELECT s1, s2 FROM insert_string_partitioned where s2 is NULL
|
|
order by s1 limit 10
|
|
---- TYPES
|
|
string, string
|
|
---- RESULTS
|
|
'value1','NULL'
|
|
'value2','NULL'
|
|
'value3','NULL'
|
|
'value4','NULL'
|
|
====
|
|
---- QUERY
|
|
# static partition insert with constant exprs as partition-key values
|
|
insert into alltypesinsert partition(year=cast(100*20+10 as int), month=cast(2*2 as int))
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col,
|
|
double_col, date_string_col, string_col, timestamp_col from alltypessmall where month = 4
|
|
---- SETUP
|
|
RESET alltypesinsert
|
|
---- RESULTS
|
|
year=2010/month=4/: 25
|
|
====
|
|
---- QUERY
|
|
# static partition insert from a constant select
|
|
insert into alltypesinsert
|
|
partition(year=2010, month=4)
|
|
select 100, false, 1, 1, 1, 10,
|
|
10.0, 10.0, "02/01/09", "1", cast("2009-02-01 00:01:00" as timestamp)
|
|
---- SETUP
|
|
RESET alltypesinsert
|
|
---- RESULTS
|
|
year=2010/month=4/: 1
|
|
====
|
|
---- QUERY
|
|
# dynamic partition insert from a constant select
|
|
insert into table alltypesinsert
|
|
partition (year, month)
|
|
select 200, true, 2, 2, 2, 20,
|
|
20.0, 20.0, "02/01/09", "1", cast("2009-02-01 00:02:00" as timestamp), 2010, 4
|
|
---- RESULTS
|
|
year=2010/month=4/: 1
|
|
====
|
|
---- QUERY
|
|
# verify contents of alltypesinsert
|
|
select * from alltypesinsert order by id limit 2
|
|
---- TYPES
|
|
int, boolean, tinyint, smallint, int, bigint, float, double, string, string, timestamp, int, int
|
|
---- RESULTS
|
|
100,false,1,1,1,10,10,10,'02/01/09','1',2009-02-01 00:01:00,2010,4
|
|
200,true,2,2,2,20,20,20,'02/01/09','1',2009-02-01 00:02:00,2010,4
|
|
====
|
|
---- QUERY
|
|
# static partition insert from values statement
|
|
insert into alltypesinsert
|
|
partition(year=2010, month=4) values
|
|
(1, false, 1, 1, 1, 10, NULL, 10.0, "02/01/09", "1", cast("2009-02-01 00:01:00" as timestamp)),
|
|
(2, true, 2, NULL, 2, 20, 20.0, 20.0, "02/02/09", "2", NULL),
|
|
(3, false, 3, 3, 3, 30, 30.0, 30.0, "02/03/09", NULL, cast("2009-02-03 00:01:00" as timestamp))
|
|
---- SETUP
|
|
RESET alltypesinsert
|
|
---- RESULTS
|
|
year=2010/month=4/: 3
|
|
====
|
|
---- QUERY
|
|
# dynamic partition insert from values statement
|
|
insert into table alltypesinsert
|
|
partition (year, month) values
|
|
(4, true, 4, 4, 4, 40, NULL, 40.0, "02/04/09", "4", cast("2009-02-04 00:01:00" as timestamp), 2010, 4),
|
|
(5, false, 5, NULL, 5, 50, 50.0, 50.0, "02/05/09", "5", NULL, 2010, 8),
|
|
(6, true, 6, 6, 6, 60, 60.0, 60.0, "02/06/09", NULL, cast("2009-02-06 00:01:00" as timestamp), 2010, 8)
|
|
---- RESULTS
|
|
year=2010/month=4/: 1
|
|
year=2010/month=8/: 2
|
|
====
|
|
---- QUERY
|
|
# verify contents of alltypesinsert
|
|
select * from alltypesinsert order by id limit 10
|
|
---- RESULTS
|
|
1,false,1,1,1,10,NULL,10,'02/01/09','1',2009-02-01 00:01:00,2010,4
|
|
2,true,2,NULL,2,20,20,20,'02/02/09','2',NULL,2010,4
|
|
3,false,3,3,3,30,30,30,'02/03/09','NULL',2009-02-03 00:01:00,2010,4
|
|
4,true,4,4,4,40,NULL,40,'02/04/09','4',2009-02-04 00:01:00,2010,4
|
|
5,false,5,NULL,5,50,50,50,'02/05/09','5',NULL,2010,8
|
|
6,true,6,6,6,60,60,60,'02/06/09','NULL',2009-02-06 00:01:00,2010,8
|
|
---- TYPES
|
|
INT, BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, STRING, STRING, TIMESTAMP, INT, INT
|
|
====
|
|
---- QUERY
|
|
# Test with clause in an insert statement.
|
|
with t1 as (select * from alltypestiny)
|
|
insert into alltypesinsert partition(year, month) select * from t1
|
|
---- SETUP
|
|
RESET alltypesinsert
|
|
---- RESULTS
|
|
year=2009/month=1/: 2
|
|
year=2009/month=2/: 2
|
|
year=2009/month=3/: 2
|
|
year=2009/month=4/: 2
|
|
====
|
|
---- QUERY
|
|
# Test with clause in an insert statement and in its query statement.
|
|
with t1 as (select * from alltypestiny)
|
|
insert into alltypesinsert partition(year, month)
|
|
with t2 as (select * from alltypestiny)
|
|
select * from t1 union all select * from t2
|
|
---- SETUP
|
|
RESET alltypesinsert
|
|
---- RESULTS
|
|
year=2009/month=1/: 4
|
|
year=2009/month=2/: 4
|
|
year=2009/month=3/: 4
|
|
year=2009/month=4/: 4
|
|
====
|
|
---- QUERY
|
|
# Test inserting NULLs for all types
|
|
insert overwrite table alltypesnopart_insert
|
|
select NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|
from alltypessmall limit 10
|
|
---- RESULTS
|
|
: 10
|
|
====
|
|
---- QUERY
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col,
|
|
float_col, double_col, date_string_col, string_col, timestamp_col
|
|
from alltypesnopart_insert
|
|
---- TYPES
|
|
int, boolean, tinyint, smallint, int, bigint, float, double, string, string, timestamp
|
|
---- RESULTS
|
|
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL','NULL',NULL
|
|
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL','NULL',NULL
|
|
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL','NULL',NULL
|
|
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL','NULL',NULL
|
|
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL','NULL',NULL
|
|
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL','NULL',NULL
|
|
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL','NULL',NULL
|
|
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL','NULL',NULL
|
|
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL','NULL',NULL
|
|
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL','NULL',NULL
|
|
====
|
|
---- QUERY
|
|
insert overwrite alltypesnopart_insert(float_col, double_col)
|
|
values(CAST(1/0 AS FLOAT), 1/0), (CAST(-1/0 AS FLOAT), -1/0),
|
|
(CAST(0/0 AS FLOAT), 0/0), (CAST(-sqrt(-1) AS FLOAT), -sqrt(-1))
|
|
---- SETUP
|
|
RESET alltypesinsert
|
|
---- RESULTS
|
|
: 4
|
|
====
|
|
---- QUERY
|
|
# Results have to be cast to strings, because nan == f is always false for all f
|
|
# (even nan), so the results check would otherwise always fail.
|
|
select CAST(float_col AS string), CAST(double_col AS string) from alltypesnopart_insert
|
|
order by float_col, double_col limit 10;
|
|
---- TYPES
|
|
STRING, STRING
|
|
---- RESULTS
|
|
'nan','nan'
|
|
'nan','nan'
|
|
'-inf','-inf'
|
|
'inf','inf'
|
|
====
|
|
---- QUERY
|
|
# Test that insert overwrite with a limit 0 clears the table.
|
|
insert overwrite table alltypesinsert
|
|
partition (year, month)
|
|
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col,
|
|
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
|
|
from alltypessmall limit 0
|
|
---- RESULTS
|
|
====
|
|
---- QUERY
|
|
select count(*) from alltypesinsert
|
|
---- TYPES
|
|
BIGINT
|
|
---- RESULTS
|
|
0
|
|
====
|
|
---- QUERY
|
|
# Test that insert overwrite with a limit 0 clears the table.
|
|
insert overwrite table alltypesnopart_insert
|
|
select 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|
from alltypessmall limit 0
|
|
---- RESULTS
|
|
: 0
|
|
====
|
|
---- QUERY
|
|
select count(*) from alltypesnopart_insert
|
|
---- TYPES
|
|
BIGINT
|
|
---- RESULTS
|
|
0
|
|
====
|