mirror of
https://github.com/apache/impala.git
synced 2026-01-02 03:00:32 -05:00
- this adds a SelectNode that evaluates conjuncts and enforces the limit - all limits are now distributed: enforced both by the child plan fragment and by the merging ExchangeNode - all limits w/ Order By are now distributed: enforced both by the child plan fragment and by the merging TopN node
673 lines
10 KiB
Plaintext
673 lines
10 KiB
Plaintext
====
|
|
---- QUERY
|
|
# Based on Aggregation Queries
|
|
select int_col, sum(float_col)
|
|
from functional.hbasealltypessmall
|
|
where id < 5
|
|
group by 1
|
|
order by 2
|
|
limit 3
|
|
---- RESULTS
|
|
0,0
|
|
1,1.100000023841858
|
|
2,2.200000047683716
|
|
---- TYPES
|
|
INT, DOUBLE
|
|
====
|
|
---- QUERY
|
|
# Run query without order by
|
|
select tinyint_col, count(*)
|
|
from alltypesagg
|
|
group by 1
|
|
limit 10
|
|
---- RESULTS
|
|
5,1000
|
|
8,1000
|
|
7,1000
|
|
2,1000
|
|
NULL,1000
|
|
1,1000
|
|
4,1000
|
|
9,1000
|
|
6,1000
|
|
3,1000
|
|
---- TYPES
|
|
TINYINT, BIGINT
|
|
====
|
|
---- QUERY
|
|
# Same query order by asc first col
|
|
select tinyint_col, count(*)
|
|
from alltypesagg
|
|
group by 1
|
|
order by 1
|
|
limit 10
|
|
---- RESULTS
|
|
1,1000
|
|
2,1000
|
|
3,1000
|
|
4,1000
|
|
5,1000
|
|
6,1000
|
|
7,1000
|
|
8,1000
|
|
9,1000
|
|
NULL,1000
|
|
---- TYPES
|
|
TINYINT, BIGINT
|
|
====
|
|
---- QUERY
|
|
# Same query order by asc first desc
|
|
select tinyint_col, count(*)
|
|
from alltypesagg
|
|
group by 1
|
|
order by 1 desc
|
|
limit 20
|
|
---- RESULTS
|
|
9,1000
|
|
8,1000
|
|
7,1000
|
|
6,1000
|
|
5,1000
|
|
4,1000
|
|
3,1000
|
|
2,1000
|
|
1,1000
|
|
NULL,1000
|
|
---- TYPES
|
|
TINYINT, BIGINT
|
|
====
|
|
---- QUERY
|
|
select date_string_col,int_col
|
|
from alltypesagg
|
|
order by date_string_col, int_col desc
|
|
limit 10
|
|
---- RESULTS
|
|
'01/01/10',999
|
|
'01/01/10',998
|
|
'01/01/10',997
|
|
'01/01/10',996
|
|
'01/01/10',995
|
|
'01/01/10',994
|
|
'01/01/10',993
|
|
'01/01/10',992
|
|
'01/01/10',991
|
|
'01/01/10',990
|
|
---- TYPES
|
|
STRING, INT
|
|
====
|
|
---- QUERY
|
|
# order by with null tuples in tuple row
|
|
select j.*, d.* from JoinTbl j full outer join DimTbl d
|
|
on (j.test_id = d.id)
|
|
order by j.test_id, j.test_name, d.name
|
|
limit 100
|
|
---- RESULTS
|
|
1001,'Name1',94611,5000,1001,'Name1',94611
|
|
1002,'Name2',94611,5000,1002,'Name2',94611
|
|
1003,'Name3',94611,5000,1003,'Name3',94612
|
|
1004,'Name4',94611,5000,1004,'Name4',94612
|
|
1005,'Name5',94611,5000,1005,'Name5',94613
|
|
1006,'Name16',94612,5000,1006,'Name6',94613
|
|
1006,'Name16',94616,15000,1006,'Name6',94613
|
|
1006,'Name16',94612,15000,1006,'Name6',94613
|
|
1006,'Name16',94616,5000,1006,'Name6',94613
|
|
1006,'Name6',94616,5000,1006,'Name6',94613
|
|
1006,'Name6',94616,15000,1006,'Name6',94613
|
|
1106,'Name16',94612,5000,NULL,'NULL',NULL
|
|
1106,'Name16',94616,15000,NULL,'NULL',NULL
|
|
1106,'Name16',94616,5000,NULL,'NULL',NULL
|
|
1106,'Name16',94612,15000,NULL,'NULL',NULL
|
|
1106,'Name6',94612,5000,NULL,'NULL',NULL
|
|
1106,'Name6',94612,15000,NULL,'NULL',NULL
|
|
1106,'Name6',94616,5000,NULL,'NULL',NULL
|
|
1106,'Name6',94616,15000,NULL,'NULL',NULL
|
|
NULL,'NULL',NULL,NULL,1010,'Name10',94615
|
|
NULL,'NULL',NULL,NULL,1007,'Name7',94614
|
|
NULL,'NULL',NULL,NULL,1008,'Name8',94614
|
|
NULL,'NULL',NULL,NULL,1009,'Name9',94615
|
|
---- TYPES
|
|
BIGINT, STRING, INT, INT, BIGINT, STRING, INT
|
|
====
|
|
---- QUERY
|
|
# order by multiple cols with nulls
|
|
select tinyint_col % 3, smallint_col % 3, count(*)
|
|
from alltypesagg
|
|
where day = 1
|
|
group by 1, 2
|
|
order by 1, 2
|
|
limit 20
|
|
---- RESULTS
|
|
0,0,120
|
|
0,1,90
|
|
0,2,90
|
|
1,0,90
|
|
1,1,120
|
|
1,2,90
|
|
2,0,90
|
|
2,1,90
|
|
2,2,120
|
|
NULL,0,30
|
|
NULL,1,30
|
|
NULL,2,30
|
|
NULL,NULL,10
|
|
---- TYPES
|
|
TINYINT, SMALLINT, BIGINT
|
|
====
|
|
---- QUERY
|
|
select tinyint_col % 3, smallint_col % 3, count(*)
|
|
from alltypesagg
|
|
where day = 1
|
|
group by 1, 2
|
|
order by 1, 2 desc
|
|
limit 20
|
|
---- RESULTS
|
|
0,2,90
|
|
0,1,90
|
|
0,0,120
|
|
1,2,90
|
|
1,1,120
|
|
1,0,90
|
|
2,2,120
|
|
2,1,90
|
|
2,0,90
|
|
NULL,2,30
|
|
NULL,1,30
|
|
NULL,0,30
|
|
NULL,NULL,10
|
|
---- TYPES
|
|
TINYINT, SMALLINT, BIGINT
|
|
====
|
|
---- QUERY
|
|
select tinyint_col % 3, smallint_col % 3, count(*)
|
|
from alltypesagg
|
|
where day = 1
|
|
group by 1, 2
|
|
order by 1 desc, 2
|
|
limit 20
|
|
---- RESULTS
|
|
2,0,90
|
|
2,1,90
|
|
2,2,120
|
|
1,0,90
|
|
1,1,120
|
|
1,2,90
|
|
0,0,120
|
|
0,1,90
|
|
0,2,90
|
|
NULL,0,30
|
|
NULL,1,30
|
|
NULL,2,30
|
|
NULL,NULL,10
|
|
---- TYPES
|
|
TINYINT, SMALLINT, BIGINT
|
|
====
|
|
---- QUERY
|
|
select tinyint_col % 3, smallint_col % 3, count(*)
|
|
from alltypesagg
|
|
where day = 1
|
|
group by 1, 2
|
|
order by 1 desc, 2 desc
|
|
limit 20
|
|
---- RESULTS
|
|
2,2,120
|
|
2,1,90
|
|
2,0,90
|
|
1,2,90
|
|
1,1,120
|
|
1,0,90
|
|
0,2,90
|
|
0,1,90
|
|
0,0,120
|
|
NULL,2,30
|
|
NULL,1,30
|
|
NULL,0,30
|
|
NULL,NULL,10
|
|
---- TYPES
|
|
TINYINT, SMALLINT, BIGINT
|
|
====
|
|
---- QUERY
|
|
select date_string_col
|
|
from alltypessmall
|
|
order by date_string_col desc
|
|
limit 50
|
|
---- RESULTS
|
|
'04/03/09'
|
|
'04/03/09'
|
|
'04/03/09'
|
|
'04/03/09'
|
|
'04/03/09'
|
|
'04/02/09'
|
|
'04/02/09'
|
|
'04/02/09'
|
|
'04/02/09'
|
|
'04/02/09'
|
|
'04/02/09'
|
|
'04/02/09'
|
|
'04/02/09'
|
|
'04/02/09'
|
|
'04/02/09'
|
|
'04/01/09'
|
|
'04/01/09'
|
|
'04/01/09'
|
|
'04/01/09'
|
|
'04/01/09'
|
|
'04/01/09'
|
|
'04/01/09'
|
|
'04/01/09'
|
|
'04/01/09'
|
|
'04/01/09'
|
|
'03/03/09'
|
|
'03/03/09'
|
|
'03/03/09'
|
|
'03/03/09'
|
|
'03/03/09'
|
|
'03/02/09'
|
|
'03/02/09'
|
|
'03/02/09'
|
|
'03/02/09'
|
|
'03/02/09'
|
|
'03/02/09'
|
|
'03/02/09'
|
|
'03/02/09'
|
|
'03/02/09'
|
|
'03/02/09'
|
|
'03/01/09'
|
|
'03/01/09'
|
|
'03/01/09'
|
|
'03/01/09'
|
|
'03/01/09'
|
|
'03/01/09'
|
|
'03/01/09'
|
|
'03/01/09'
|
|
'03/01/09'
|
|
'03/01/09'
|
|
---- TYPES
|
|
STRING
|
|
====
|
|
---- QUERY
|
|
# Based on join queries
|
|
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
|
|
order by a.string_col
|
|
limit 5
|
|
---- RESULTS
|
|
1,1,'881'
|
|
1,1,'891'
|
|
1,1,'901'
|
|
1,1,'91'
|
|
1,1,'911'
|
|
---- TYPES
|
|
TINYINT, INT, STRING
|
|
====
|
|
---- QUERY
|
|
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
|
|
order by a.string_col desc
|
|
limit 5
|
|
---- RESULTS
|
|
1,1,'991'
|
|
1,1,'981'
|
|
1,1,'971'
|
|
1,1,'961'
|
|
1,1,'951'
|
|
---- TYPES
|
|
TINYINT, INT, STRING
|
|
====
|
|
---- QUERY
|
|
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
|
|
order by c.string_col desc, a.smallint_col
|
|
limit 10
|
|
---- RESULTS
|
|
6,6,6,6,906,6.599999904632568,'6'
|
|
16,16,6,6,916,6.599999904632568,'6'
|
|
56,56,6,6,956,6.599999904632568,'6'
|
|
66,66,6,6,966,6.599999904632568,'6'
|
|
5,5,5,5,905,5.5,'5'
|
|
15,15,5,5,915,5.5,'5'
|
|
55,55,5,5,955,5.5,'5'
|
|
65,65,5,5,965,5.5,'5'
|
|
34,34,4,4,934,9.899999618530273,'4'
|
|
44,44,4,4,944,9.899999618530273,'4'
|
|
---- TYPES
|
|
SMALLINT, INT, TINYINT, INT, INT, FLOAT, STRING
|
|
====
|
|
---- QUERY
|
|
# Order by a column that is not in the select list
|
|
# Query with ordering column in select list
|
|
# Don't include date_string_col, it comes back in random order.
|
|
select int_col, tinyint_col
|
|
from alltypessmall
|
|
order by int_col desc
|
|
limit 20
|
|
---- RESULTS
|
|
9,9
|
|
9,9
|
|
9,9
|
|
9,9
|
|
9,9
|
|
9,9
|
|
9,9
|
|
9,9
|
|
8,8
|
|
8,8
|
|
8,8
|
|
8,8
|
|
8,8
|
|
8,8
|
|
8,8
|
|
8,8
|
|
7,7
|
|
7,7
|
|
7,7
|
|
7,7
|
|
---- TYPES
|
|
INT, TINYINT
|
|
====
|
|
---- QUERY
|
|
# Same query with ordering col not in select list
|
|
select tinyint_col
|
|
from alltypessmall
|
|
order by int_col desc
|
|
limit 20
|
|
---- RESULTS
|
|
9
|
|
9
|
|
9
|
|
9
|
|
9
|
|
9
|
|
9
|
|
9
|
|
8
|
|
8
|
|
8
|
|
8
|
|
8
|
|
8
|
|
8
|
|
8
|
|
7
|
|
7
|
|
7
|
|
7
|
|
---- TYPES
|
|
TINYINT
|
|
====
|
|
---- QUERY
|
|
# Order by many exprs
|
|
select year, month, count(*)
|
|
from alltypes
|
|
group by 1, 2
|
|
order by 1, 2
|
|
limit 100
|
|
---- RESULTS
|
|
2009,1,310
|
|
2009,2,280
|
|
2009,3,310
|
|
2009,4,300
|
|
2009,5,310
|
|
2009,6,300
|
|
2009,7,310
|
|
2009,8,310
|
|
2009,9,300
|
|
2009,10,310
|
|
2009,11,300
|
|
2009,12,310
|
|
2010,1,310
|
|
2010,2,280
|
|
2010,3,310
|
|
2010,4,300
|
|
2010,5,310
|
|
2010,6,300
|
|
2010,7,310
|
|
2010,8,310
|
|
2010,9,300
|
|
2010,10,310
|
|
2010,11,300
|
|
2010,12,310
|
|
---- TYPES
|
|
INT, INT, BIGINT
|
|
====
|
|
---- QUERY
|
|
# More Complex Ordering Exprs
|
|
select int_col % 7, count(*), avg(tinyint_col)
|
|
from alltypesagg
|
|
group by 1
|
|
order by avg(tinyint_col)
|
|
limit 10
|
|
---- RESULTS
|
|
4,1430,4.984496124031008
|
|
6,1420,4.9921875
|
|
1,1430,4.992248062015504
|
|
3,1430,5
|
|
5,1430,5.007751937984496
|
|
0,1420,5.0078125
|
|
2,1430,5.015503875968992
|
|
NULL,10,NULL
|
|
---- TYPES
|
|
INT, BIGINT, DOUBLE
|
|
====
|
|
---- QUERY
|
|
select int_col % 7, count(*), max(int_col)
|
|
from alltypesagg
|
|
group by 1
|
|
order by max(int_col)
|
|
limit 10
|
|
---- RESULTS
|
|
6,1420,993
|
|
0,1420,994
|
|
1,1430,995
|
|
2,1430,996
|
|
3,1430,997
|
|
4,1430,998
|
|
5,1430,999
|
|
NULL,10,NULL
|
|
---- TYPES
|
|
INT, BIGINT, INT
|
|
====
|
|
---- QUERY
|
|
select int_col % 5, count(*), avg(tinyint_col) - avg(float_col)
|
|
from alltypesagg
|
|
group by 1
|
|
order by avg(tinyint_col) - avg(float_col) desc
|
|
limit 10
|
|
---- RESULTS
|
|
1,2000,-544.8499889141322
|
|
2,2000,-544.9500045645237
|
|
0,1990,-545
|
|
3,2000,-545.0499953591824
|
|
4,2000,-545.1500110459327
|
|
NULL,10,NULL
|
|
---- TYPES
|
|
INT, BIGINT, DOUBLE
|
|
====
|
|
---- QUERY
|
|
select int_col
|
|
from alltypessmall
|
|
order by int_col % 5, int_col
|
|
limit 100
|
|
---- RESULTS
|
|
0
|
|
0
|
|
0
|
|
0
|
|
0
|
|
0
|
|
0
|
|
0
|
|
0
|
|
0
|
|
0
|
|
0
|
|
5
|
|
5
|
|
5
|
|
5
|
|
5
|
|
5
|
|
5
|
|
5
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
1
|
|
6
|
|
6
|
|
6
|
|
6
|
|
6
|
|
6
|
|
6
|
|
6
|
|
2
|
|
2
|
|
2
|
|
2
|
|
2
|
|
2
|
|
2
|
|
2
|
|
2
|
|
2
|
|
2
|
|
2
|
|
7
|
|
7
|
|
7
|
|
7
|
|
7
|
|
7
|
|
7
|
|
7
|
|
3
|
|
3
|
|
3
|
|
3
|
|
3
|
|
3
|
|
3
|
|
3
|
|
3
|
|
3
|
|
3
|
|
3
|
|
8
|
|
8
|
|
8
|
|
8
|
|
8
|
|
8
|
|
8
|
|
8
|
|
4
|
|
4
|
|
4
|
|
4
|
|
4
|
|
4
|
|
4
|
|
4
|
|
4
|
|
4
|
|
4
|
|
4
|
|
9
|
|
9
|
|
9
|
|
9
|
|
9
|
|
9
|
|
9
|
|
9
|
|
---- TYPES
|
|
INT
|
|
====
|
|
---- QUERY
|
|
# All select list items have an implicit alias. Test that the order by column ref
|
|
# "int_col" is correctly aliased to t1.int_col, and therefore it is not an
|
|
# ambiguous reference.
|
|
select t1.int_col from alltypessmall t1, alltypessmall t2 where t1.id = t2.id
|
|
order by int_col
|
|
limit 2
|
|
---- RESULTS
|
|
0
|
|
0
|
|
---- TYPES
|
|
INT
|
|
====
|
|
---- QUERY
|
|
select date_sub(timestamp_col, id), timestamp_col, id
|
|
from alltypessmall order by 1 limit 20
|
|
---- RESULTS
|
|
2008-12-10 00:24:00.960000000,2009-01-03 00:24:00.960000000,24
|
|
2008-12-11 00:23:00.930000000,2009-01-03 00:23:00.930000000,23
|
|
2008-12-12 00:22:00.910000000,2009-01-03 00:22:00.910000000,22
|
|
2008-12-13 00:21:00.900000000,2009-01-03 00:21:00.900000000,21
|
|
2008-12-14 00:19:00.810000000,2009-01-02 00:19:00.810000000,19
|
|
2008-12-14 00:20:00.900000000,2009-01-03 00:20:00.900000000,20
|
|
2008-12-15 00:18:00.730000000,2009-01-02 00:18:00.730000000,18
|
|
2008-12-16 00:17:00.660000000,2009-01-02 00:17:00.660000000,17
|
|
2008-12-16 00:24:00.960000000,2009-02-03 00:24:00.960000000,49
|
|
2008-12-17 00:16:00.600000000,2009-01-02 00:16:00.600000000,16
|
|
2008-12-17 00:23:00.930000000,2009-02-03 00:23:00.930000000,48
|
|
2008-12-18 00:15:00.550000000,2009-01-02 00:15:00.550000000,15
|
|
2008-12-18 00:22:00.910000000,2009-02-03 00:22:00.910000000,47
|
|
2008-12-19 00:14:00.510000000,2009-01-02 00:14:00.510000000,14
|
|
2008-12-19 00:21:00.900000000,2009-02-03 00:21:00.900000000,46
|
|
2008-12-19 00:24:00.960000000,2009-03-03 00:24:00.960000000,74
|
|
2008-12-20 00:13:00.480000000,2009-01-02 00:13:00.480000000,13
|
|
2008-12-20 00:19:00.810000000,2009-02-02 00:19:00.810000000,44
|
|
2008-12-20 00:20:00.900000000,2009-02-03 00:20:00.900000000,45
|
|
2008-12-20 00:23:00.930000000,2009-03-03 00:23:00.930000000,73
|
|
---- TYPES
|
|
TIMESTAMP, TIMESTAMP, INT
|
|
====
|
|
---- QUERY
|
|
# Test of order by with NULL tuple rows (from an outer join)
|
|
select t1.id, t1.int_col, t2.id, t2.int_col
|
|
from alltypesagg t1
|
|
left outer join alltypessmall t2
|
|
on (t1.int_col = t2.int_col)
|
|
order by t1.id,t2.id limit 10
|
|
---- TYPES
|
|
int,int,int,int
|
|
---- RESULTS
|
|
0,NULL,NULL,NULL
|
|
1,1,1,1
|
|
1,1,11,1
|
|
1,1,21,1
|
|
1,1,26,1
|
|
1,1,36,1
|
|
1,1,46,1
|
|
1,1,51,1
|
|
1,1,61,1
|
|
1,1,71,1
|
|
====
|