Files
impala/testdata/workloads/functional-query/queries/QueryTest/joins.test
Dimitris Tsirogiannis 5a6f53db16 Add partition pruning tests
The following changes are included in this commit:
1. Modified the alltypesagg table to include an additional partition key
that has nulls.
2. Added a number of tests in hdfs.test that exercise the partition
pruning logic (see IMPALA-887).
3. Modified all the tests that are affected by the change in alltypesagg.

Change-Id: I1a769375aaa71273341522eb94490ba5e4c6f00d
Reviewed-on: http://gerrit.ent.cloudera.com:8080/2874
Reviewed-by: Dimitris Tsirogiannis <dtsirogiannis@cloudera.com>
Tested-by: jenkins
Reviewed-on: http://gerrit.ent.cloudera.com:8080/3236
2014-06-24 02:14:27 -07:00

519 lines
13 KiB
Plaintext

====
---- QUERY
# Test join on timestamp, hashing was not working properly
select a.timestamp_col from alltypessmall a inner join alltypessmall b on
(a.timestamp_col = b.timestamp_col)
where a.year=2009 and a.month=1 and b.year=2009 and b.month=1
---- RESULTS
2009-01-01 00:00:00
2009-01-01 00:01:00
2009-01-01 00:02:00.100000000
2009-01-01 00:03:00.300000000
2009-01-01 00:04:00.600000000
2009-01-01 00:05:00.100000000
2009-01-01 00:06:00.150000000
2009-01-01 00:07:00.210000000
2009-01-01 00:08:00.280000000
2009-01-01 00:09:00.360000000
2009-01-02 00:10:00.450000000
2009-01-02 00:11:00.450000000
2009-01-02 00:12:00.460000000
2009-01-02 00:13:00.480000000
2009-01-02 00:14:00.510000000
2009-01-02 00:15:00.550000000
2009-01-02 00:16:00.600000000
2009-01-02 00:17:00.660000000
2009-01-02 00:18:00.730000000
2009-01-02 00:19:00.810000000
2009-01-03 00:20:00.900000000
2009-01-03 00:21:00.900000000
2009-01-03 00:22:00.910000000
2009-01-03 00:23:00.930000000
2009-01-03 00:24:00.960000000
---- TYPES
timestamp
====
---- QUERY
# Joins with multiple exprs
select j.*, d.* from JoinTbl j inner join DimTbl d on
(j.test_name = d.name AND j.test_zip = d.zip)
---- RESULTS
1001,'Name1',94611,5000,1001,'Name1',94611
1002,'Name2',94611,5000,1002,'Name2',94611
---- TYPES
bigint, string, int, int, bigint, string, int
====
---- QUERY
select j.*, d.* from JoinTbl j inner join DimTbl d on
(j.test_zip = d.zip AND j.test_name = d.name)
---- RESULTS
1001,'Name1',94611,5000,1001,'Name1',94611
1002,'Name2',94611,5000,1002,'Name2',94611
---- TYPES
bigint, string, int, int, bigint, string, int
====
---- QUERY
# join between hdfs and hbase, extra join predicate, extra scan predicates, nulls in
# joins cols and non-equality join predicate
# (alltypesagg.tinyint_col contains nulls instead of 0s)
# Should be same result as the test below
select a.tinyint_col, b.id, a.string_col, a.tinyint_col + b.tinyint_col
from alltypesagg a join functional_hbase.alltypessmall b
on (a.tinyint_col = b.id and a.tinyint_col + b.tinyint_col < 5)
where a.month=1
and a.day=1
and a.string_col > '88'
and b.bool_col = false
---- RESULTS
1,1,'881',2
1,1,'891',2
1,1,'901',2
1,1,'91',2
1,1,'911',2
1,1,'921',2
1,1,'931',2
1,1,'941',2
1,1,'951',2
1,1,'961',2
1,1,'971',2
1,1,'981',2
1,1,'991',2
---- TYPES
tinyint, int, string, smallint
====
---- QUERY
# join between hdfs and hbase, extra join predicate, extra scan predicates, nulls in joins cols
# (alltypesagg.tinyint_col contains nulls instead of 0s)
# Should be same result as the test below
select a.tinyint_col, b.id, a.string_col
from alltypesagg a join functional_hbase.alltypessmall b on (a.tinyint_col = b.id)
where a.month=1
and a.day=1
and a.tinyint_col + b.tinyint_col < 5
and a.string_col > '88'
and b.bool_col = false
---- RESULTS
1,1,'881'
1,1,'891'
1,1,'901'
1,1,'91'
1,1,'911'
1,1,'921'
1,1,'931'
1,1,'941'
1,1,'951'
1,1,'961'
1,1,'971'
1,1,'981'
1,1,'991'
---- TYPES
tinyint, int, string
====
---- QUERY
# join between two tables, extra join predicate, extra scan predicates, nulls in joins cols
# (alltypesagg.tinyint_col contains nulls instead of 0s)
select a.tinyint_col, b.id, a.string_col
from alltypesagg a join alltypessmall b on (a.tinyint_col = b.id)
where a.month=1
and a.day=1
and a.tinyint_col + b.tinyint_col < 5
and a.string_col > '88'
and b.bool_col = false
---- RESULTS
1,1,'881'
1,1,'891'
1,1,'901'
1,1,'91'
1,1,'911'
1,1,'921'
1,1,'931'
1,1,'941'
1,1,'951'
1,1,'961'
1,1,'971'
1,1,'981'
1,1,'991'
---- TYPES
tinyint, int, string
====
---- QUERY
# reversing the order of the tables produces the same result
select a.tinyint_col, b.id, a.string_col
from alltypessmall b join alltypesagg a on (a.tinyint_col = b.id)
where a.month=1
and a.day=1
and a.tinyint_col + b.tinyint_col < 5
and a.string_col > '88'
and b.bool_col = false
---- RESULTS
1,1,'881'
1,1,'891'
1,1,'901'
1,1,'91'
1,1,'911'
1,1,'921'
1,1,'931'
1,1,'941'
1,1,'951'
1,1,'961'
1,1,'971'
1,1,'981'
1,1,'991'
---- TYPES
tinyint, int, string
====
---- QUERY
# join between three tables, extra join predicates, extra scan predicates, nulls in joins cols
# (alltypesagg.tinyint_col contains nulls instead of 0s)
select a.smallint_col, b.id, a.tinyint_col, c.id, a.int_col, b.float_col, c.string_col
from alltypesagg a
join alltypessmall b on (a.smallint_col = b.id)
join alltypessmall c on (a.tinyint_col = c.id)
where a.month=1
and a.day=1
and a.int_col > 899
and b.float_col > 4.5
and c.string_col < '7'
and a.int_col + b.float_col + cast(c.string_col as float) < 1000
---- RESULTS
15,15,5,5,915,5.5,'5'
16,16,6,6,916,6.599999904632568,'6'
31,31,1,1,931,6.599999904632568,'1'
32,32,2,2,932,7.699999809265137,'2'
33,33,3,3,933,8.800000190734863,'3'
34,34,4,4,934,9.899999618530273,'4'
41,41,1,1,941,6.599999904632568,'1'
42,42,2,2,942,7.699999809265137,'2'
43,43,3,3,943,8.800000190734863,'3'
44,44,4,4,944,9.899999618530273,'4'
5,5,5,5,905,5.5,'5'
55,55,5,5,955,5.5,'5'
56,56,6,6,956,6.599999904632568,'6'
6,6,6,6,906,6.599999904632568,'6'
65,65,5,5,965,5.5,'5'
66,66,6,6,966,6.599999904632568,'6'
81,81,1,1,981,6.599999904632568,'1'
82,82,2,2,982,7.699999809265137,'2'
83,83,3,3,983,8.800000190734863,'3'
84,84,4,4,984,9.899999618530273,'4'
91,91,1,1,991,6.599999904632568,'1'
---- TYPES
smallint, int, tinyint, int, int, float, string
====
---- QUERY
# reversing the order produces the same results
select a.smallint_col, b.id, a.tinyint_col, c.id, a.int_col, b.float_col, c.string_col
from alltypessmall b
join alltypesagg a on (a.smallint_col = b.id)
join alltypessmall c on (a.tinyint_col = c.id)
where a.month=1
and a.day=1
and a.int_col > 899
and b.float_col > 4.5
and c.string_col < '7'
and a.int_col + b.float_col + cast(c.string_col as float) < 1000
---- RESULTS
15,15,5,5,915,5.5,'5'
16,16,6,6,916,6.599999904632568,'6'
31,31,1,1,931,6.599999904632568,'1'
32,32,2,2,932,7.699999809265137,'2'
33,33,3,3,933,8.800000190734863,'3'
34,34,4,4,934,9.899999618530273,'4'
41,41,1,1,941,6.599999904632568,'1'
42,42,2,2,942,7.699999809265137,'2'
43,43,3,3,943,8.800000190734863,'3'
44,44,4,4,944,9.899999618530273,'4'
5,5,5,5,905,5.5,'5'
55,55,5,5,955,5.5,'5'
56,56,6,6,956,6.599999904632568,'6'
6,6,6,6,906,6.599999904632568,'6'
65,65,5,5,965,5.5,'5'
66,66,6,6,966,6.599999904632568,'6'
81,81,1,1,981,6.599999904632568,'1'
82,82,2,2,982,7.699999809265137,'2'
83,83,3,3,983,8.800000190734863,'3'
84,84,4,4,984,9.899999618530273,'4'
91,91,1,1,991,6.599999904632568,'1'
---- TYPES
smallint, int, tinyint, int, int, float, string
====
---- QUERY
# joins on empty tables
select * from emptytable t1 join emptytable t2 on (t1.field=t2.field)
---- RESULTS
---- TYPES
string, int, string, int
====
---- QUERY
select * from emptytable t1 join greptiny t2 on (t1.field=t2.field)
---- RESULTS
---- TYPES
string, int, string
====
---- QUERY
select * from greptiny t1 join emptytable t2 on (t1.field=t2.field)
---- RESULTS
---- TYPES
string, string, int
====
---- QUERY
# cross join
select t1.id, t2.id from alltypestiny t1 cross join alltypestiny t2
where (t1.id < 3 and t2.id < 3)
order by t1.id, t2.id limit 100
---- RESULTS
0,0
0,1
0,2
1,0
1,1
1,2
2,0
2,1
2,2
---- TYPES
int, int
====
---- QUERY
# cross join with an empty table
select t1.id, e.field from alltypestiny t1 cross join emptytable e
---- RESULTS
---- TYPES
int, string
====
---- QUERY
# check a larger cross join produces the expected number of rows
select count(*) from functional.AllTypesSmall t1 cross join functional.AllTypesSmall t2
---- RESULTS
10000
---- TYPES
bigint
====
---- QUERY
# cross join with nulls and constant table
select id, tinyint_col, t1.c from functional.alltypesagg
cross join (values(NULL c, 1, 2)) as t1
order by tinyint_col nulls first, id, t1.c
limit 6
---- RESULTS
0,NULL,NULL
0,NULL,NULL
10,NULL,NULL
10,NULL,NULL
20,NULL,NULL
20,NULL,NULL
---- TYPES
int, tinyint, null
====
---- QUERY
# check cross joins within a subquery
select t1.id as t1_id, t2_id, t3_id from alltypestiny t1
cross join (select t2.id as t2_id, t3.id as t3_id from alltypestiny t2
cross join alltypestiny t3) t4
where t1.id < 2 and t2_id < 2 and t3_id < 2
order by t1.id, t2_id, t3_id
limit 10
---- RESULTS
0,0,0
0,0,1
0,1,0
0,1,1
1,0,0
1,0,1
1,1,0
1,1,1
---- TYPES
int, int, int
====
---- QUERY
# cross join between two tables, extra where predicates, extra scan predicates, nulls in
# joins cols (alltypesagg.tinyint_col contains nulls instead of 0s)
select a.tinyint_col, b.id, a.string_col
from alltypesagg a cross join alltypessmall b
where a.tinyint_col = b.id
and a.month=1
and a.day=1
and a.tinyint_col + b.tinyint_col < 5
and a.string_col > '88'
and b.bool_col = false
---- RESULTS
1,1,'91'
1,1,'881'
1,1,'891'
1,1,'901'
1,1,'911'
1,1,'921'
1,1,'931'
1,1,'941'
1,1,'951'
1,1,'961'
1,1,'971'
1,1,'981'
1,1,'991'
---- TYPES
tinyint, int, string
====
---- QUERY
# join with three tables and then a cross join, extra where predicates, extra scan
# predicates, nulls in joins cols (alltypesagg.tinyint_col contains nulls instead of
# 0s)
select a.smallint_col, b.id, a.tinyint_col, c.id, a.int_col, b.float_col, c.string_col, d.id
from alltypesagg a
join alltypessmall b on (a.smallint_col = b.id)
join alltypessmall c on (a.tinyint_col = c.id)
cross join alltypestiny d
where a.month=1
and a.day=1
and a.int_col > 899
and b.float_col > 4.5
and c.string_col < '4'
and a.int_col + b.float_col + cast(c.string_col as float) < 1000
and d.id < 2
order by a.id, b.id, c.id, d.id
limit 100
---- RESULTS
31,31,1,1,931,6.599999904632568,'1',0
31,31,1,1,931,6.599999904632568,'1',1
32,32,2,2,932,7.699999809265137,'2',0
32,32,2,2,932,7.699999809265137,'2',1
33,33,3,3,933,8.800000190734863,'3',0
33,33,3,3,933,8.800000190734863,'3',1
41,41,1,1,941,6.599999904632568,'1',0
41,41,1,1,941,6.599999904632568,'1',1
42,42,2,2,942,7.699999809265137,'2',0
42,42,2,2,942,7.699999809265137,'2',1
43,43,3,3,943,8.800000190734863,'3',0
43,43,3,3,943,8.800000190734863,'3',1
81,81,1,1,981,6.599999904632568,'1',0
81,81,1,1,981,6.599999904632568,'1',1
82,82,2,2,982,7.699999809265137,'2',0
82,82,2,2,982,7.699999809265137,'2',1
83,83,3,3,983,8.800000190734863,'3',0
83,83,3,3,983,8.800000190734863,'3',1
91,91,1,1,991,6.599999904632568,'1',0
91,91,1,1,991,6.599999904632568,'1',1
---- TYPES
SMALLINT, INT, TINYINT, INT, INT, FLOAT, STRING, INT
====
---- QUERY
# cross join between hdfs and hbase, where predicate, extra scan predicates, nulls
# in joins cols and non-equality join predicate
# (alltypesagg.tinyint_col contains nulls instead of 0s)
select a.tinyint_col, b.id, a.string_col, a.tinyint_col + b.tinyint_col
from alltypesagg a cross join functional_hbase.alltypessmall b
where a.tinyint_col = b.id
and a.tinyint_col + b.tinyint_col < 5
and a.month=1
and a.day=1
and a.string_col > '88'
and b.bool_col = false
---- RESULTS
1,1,'91',2
1,1,'881',2
1,1,'891',2
1,1,'901',2
1,1,'911',2
1,1,'921',2
1,1,'931',2
1,1,'941',2
1,1,'951',2
1,1,'961',2
1,1,'971',2
1,1,'981',2
1,1,'991',2
---- TYPES
tinyint, int, string, smallint
====
---- QUERY
# FULL OUTER JOIN between two inline views followed by a GROUP BY (IMPALA-964)
select 1 FROM (VALUES(1 x, 1 y)) a RIGHT OUTER JOIN (VALUES(1 x, 1 y)) b
ON (a.x = b.y) GROUP BY a.x
---- RESULTS
1
---- TYPES
TINYINT
====
---- QUERY
# Test joins with union inputs. One input is a union.
select a.id, b.id, a.string_col, b.string_col
from
(select id, string_col from functional.alltypessmall
where year = 2009 and month = 1
union all
select id, string_col from functional.alltypessmall
where year = 2009 and month = 2
union all
select 0, '1234') a
inner join
functional.alltypestiny b
on a.id = b.id
where b.id < 5
---- RESULTS
0,0,'0','0'
0,0,'1234','0'
1,1,'1','1'
2,2,'2','0'
3,3,'3','1'
4,4,'4','0'
---- TYPES
INT, INT, STRING, STRING
====
---- QUERY
# Test joins with union inputs. One input is a union.
select a.id, b.id, a.string_col, b.string_col
from
functional.alltypestiny b
left outer join
(select id, string_col from functional.alltypessmall
where year = 2009 and month = 1
union all
select id, string_col from functional.alltypessmall
where year = 2009 and month = 2
union all
select 0, '1234') a
on a.id = b.id
where b.id < 5
---- RESULTS
0,0,'0','0'
0,0,'1234','0'
1,1,'1','1'
2,2,'2','0'
3,3,'3','1'
4,4,'4','0'
---- TYPES
INT, INT, STRING, STRING
====
---- QUERY
# Test joins with union inputs. Both inputs are a union.
select a.id, b.id, a.string_col, b.string_col
from
(select id, string_col from functional.alltypessmall
where year = 2009 and month = 1
union all
select id, string_col from functional.alltypessmall
where year = 2009 and month = 2
union all
select 0, '1234') a
full outer join
(select id, string_col from functional.alltypessmall
where year = 2009 and month = 1
union all
select id, string_col from functional.alltypessmall
where year = 2009 and month = 2
union all
select 0, '5678') b
on a.id = b.id
where b.id < 5
---- RESULTS
0,0,'0','0'
0,0,'0','5678'
0,0,'1234','0'
0,0,'1234','5678'
1,1,'1','1'
2,2,'2','2'
3,3,'3','3'
4,4,'4','4'
---- TYPES
INT, INT, STRING, STRING
====