http://git-wip-us.apache.org/repos/asf/impala/blob/a7ea86b7/testdata/workloads/functional-planner/queries/PlannerTest/analytic-fns.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/analytic-fns.test b/testdata/workloads/functional-planner/queries/PlannerTest/analytic-fns.test index 5084d2a..9a70f6a 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/analytic-fns.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/analytic-fns.test @@ -12,20 +12,25 @@ PLAN-ROOT SINK 03:ANALYTIC | functions: max(tinyint_col) | partition by: int_col +| row-size=6B cardinality=100 | 02:SORT | order by: int_col ASC NULLS FIRST +| row-size=5B cardinality=100 | 05:AGGREGATE [FINALIZE] | group by: int_col, tinyint_col +| row-size=5B cardinality=100 | 04:EXCHANGE [HASH(int_col)] | 01:AGGREGATE [STREAMING] | group by: int_col, tinyint_col +| row-size=5B cardinality=100 | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=5B cardinality=7.30K ==== # partition groups are coalesced if the intersection of their partition exprs # has a high enough cardinality to allow distribution across all nodes @@ -41,21 +46,26 @@ PLAN-ROOT SINK 04:ANALYTIC | functions: max(int_col) | partition by: int_col, tinyint_col +| row-size=14B cardinality=7.30K | 03:SORT | order by: int_col ASC NULLS FIRST, tinyint_col ASC NULLS FIRST +| row-size=10B cardinality=7.30K | 02:ANALYTIC | functions: max(int_col) | partition by: int_col, bool_col +| row-size=10B cardinality=7.30K | 01:SORT | order by: int_col ASC NULLS FIRST, bool_col ASC NULLS FIRST +| row-size=6B cardinality=7.30K | 05:EXCHANGE [HASH(int_col)] | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=6B cardinality=7.30K ==== # unpartitioned analytics are executed with distributed sorts # TODO: avoid resorting on the same exprs @@ -70,19 +80,24 @@ PLAN-ROOT SINK | functions: min(int_col) | order by: int_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=12B cardinality=7.30K | 03:SORT | order by: int_col ASC +| row-size=8B cardinality=7.30K | 02:ANALYTIC | functions: max(int_col) | partition by: int_col +| row-size=8B cardinality=7.30K | 01:SORT | order by: int_col ASC NULLS FIRST +| row-size=4B cardinality=7.30K | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=4B cardinality=7.30K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | @@ -90,24 +105,29 @@ PLAN-ROOT SINK | functions: min(int_col) | order by: int_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=12B cardinality=7.30K | 06:MERGING-EXCHANGE [UNPARTITIONED] | order by: int_col ASC | 03:SORT | order by: int_col ASC +| row-size=8B cardinality=7.30K | 02:ANALYTIC | functions: max(int_col) | partition by: int_col +| row-size=8B cardinality=7.30K | 01:SORT | order by: int_col ASC NULLS FIRST +| row-size=4B cardinality=7.30K | 05:EXCHANGE [HASH(int_col)] | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=4B cardinality=7.30K ==== # coalesce sort groups select @@ -128,42 +148,51 @@ PLAN-ROOT SINK 08:ANALYTIC | functions: max(int_col) | partition by: bool_col +| row-size=34B cardinality=7.30K | 07:ANALYTIC | functions: max(int_col) | partition by: bool_col | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=30B cardinality=7.30K | 06:ANALYTIC | functions: max(int_col) | partition by: bool_col | order by: bigint_col ASC, tinyint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=26B cardinality=7.30K | 05:SORT | order by: bool_col ASC NULLS FIRST, bigint_col ASC, tinyint_col ASC +| row-size=22B cardinality=7.30K | 04:ANALYTIC | functions: max(int_col) | partition by: int_col | order by: bigint_col DESC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=22B cardinality=7.30K | 03:SORT | order by: int_col ASC NULLS FIRST, bigint_col DESC +| row-size=18B cardinality=7.30K | 02:ANALYTIC | functions: max(int_col) | partition by: int_col | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=18B cardinality=7.30K | 01:SORT | order by: int_col ASC NULLS FIRST, bigint_col ASC +| row-size=14B cardinality=7.30K | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=14B cardinality=7.30K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | @@ -172,21 +201,25 @@ PLAN-ROOT SINK 08:ANALYTIC | functions: max(int_col) | partition by: bool_col +| row-size=34B cardinality=7.30K | 07:ANALYTIC | functions: max(int_col) | partition by: bool_col | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=30B cardinality=7.30K | 06:ANALYTIC | functions: max(int_col) | partition by: bool_col | order by: bigint_col ASC, tinyint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=26B cardinality=7.30K | 05:SORT | order by: bool_col ASC NULLS FIRST, bigint_col ASC, tinyint_col ASC +| row-size=22B cardinality=7.30K | 10:EXCHANGE [HASH(bool_col)] | @@ -195,23 +228,28 @@ PLAN-ROOT SINK | partition by: int_col | order by: bigint_col DESC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=22B cardinality=7.30K | 03:SORT | order by: int_col ASC NULLS FIRST, bigint_col DESC +| row-size=18B cardinality=7.30K | 02:ANALYTIC | functions: max(int_col) | partition by: int_col | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=18B cardinality=7.30K | 01:SORT | order by: int_col ASC NULLS FIRST, bigint_col ASC +| row-size=14B cardinality=7.30K | 09:EXCHANGE [HASH(int_col)] | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=14B cardinality=7.30K ==== # check ordering of partition, sort and window groups select @@ -244,51 +282,63 @@ PLAN-ROOT SINK | functions: min(int_col), max(int_col) | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=59B cardinality=7.30K | 10:ANALYTIC | functions: min(int_col) +| row-size=51B cardinality=7.30K | 09:SORT | order by: bigint_col ASC +| row-size=47B cardinality=7.30K | 08:ANALYTIC | functions: max(int_col), min(int_col), count(int_col) | partition by: bool_col | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=47B cardinality=7.30K | 07:SORT | order by: bool_col ASC NULLS FIRST, bigint_col ASC +| row-size=31B cardinality=7.30K | 06:ANALYTIC | functions: max(int_col) | partition by: bool_col | order by: int_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=31B cardinality=7.30K | 05:SORT | order by: bool_col ASC NULLS FIRST, int_col ASC +| row-size=27B cardinality=7.30K | 04:ANALYTIC | functions: max(int_col), min(int_col) | partition by: int_col, smallint_col | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=27B cardinality=7.30K | 03:SORT | order by: int_col ASC NULLS FIRST, smallint_col ASC NULLS FIRST, bigint_col ASC +| row-size=19B cardinality=7.30K | 02:ANALYTIC | functions: max(int_col) | partition by: int_col, smallint_col | order by: int_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=19B cardinality=7.30K | 01:SORT | order by: int_col ASC NULLS FIRST, smallint_col ASC NULLS FIRST +| row-size=15B cardinality=7.30K | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=15B cardinality=7.30K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | @@ -296,33 +346,40 @@ PLAN-ROOT SINK | functions: min(int_col), max(int_col) | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=59B cardinality=7.30K | 10:ANALYTIC | functions: min(int_col) +| row-size=51B cardinality=7.30K | 14:MERGING-EXCHANGE [UNPARTITIONED] | order by: bigint_col ASC | 09:SORT | order by: bigint_col ASC +| row-size=47B cardinality=7.30K | 08:ANALYTIC | functions: max(int_col), min(int_col), count(int_col) | partition by: bool_col | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=47B cardinality=7.30K | 07:SORT | order by: bool_col ASC NULLS FIRST, bigint_col ASC +| row-size=31B cardinality=7.30K | 06:ANALYTIC | functions: max(int_col) | partition by: bool_col | order by: int_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=31B cardinality=7.30K | 05:SORT | order by: bool_col ASC NULLS FIRST, int_col ASC +| row-size=27B cardinality=7.30K | 13:EXCHANGE [HASH(bool_col)] | @@ -331,23 +388,28 @@ PLAN-ROOT SINK | partition by: int_col, smallint_col | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=27B cardinality=7.30K | 03:SORT | order by: int_col ASC NULLS FIRST, smallint_col ASC NULLS FIRST, bigint_col ASC +| row-size=19B cardinality=7.30K | 02:ANALYTIC | functions: max(int_col) | partition by: int_col, smallint_col | order by: int_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=19B cardinality=7.30K | 01:SORT | order by: int_col ASC NULLS FIRST, smallint_col ASC NULLS FIRST +| row-size=15B cardinality=7.30K | 12:EXCHANGE [HASH(int_col,smallint_col)] | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=15B cardinality=7.30K ==== # basic analytic with default window and no partition/ordering select count(*) over() from functional.alltypesagg @@ -356,19 +418,23 @@ PLAN-ROOT SINK | 01:ANALYTIC | functions: count(*) +| row-size=8B cardinality=11.00K | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=0B cardinality=11.00K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | 01:ANALYTIC | functions: count(*) +| row-size=8B cardinality=11.00K | 02:EXCHANGE [UNPARTITIONED] | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=0B cardinality=11.00K ==== # basic analytic with default window and partition select tinyint_col, sum(bigint_col) over(partition by tinyint_col) sum_of_bigints @@ -379,12 +445,15 @@ PLAN-ROOT SINK 02:ANALYTIC | functions: sum(bigint_col) | partition by: tinyint_col +| row-size=17B cardinality=11.00K | 01:SORT | order by: tinyint_col ASC NULLS FIRST +| row-size=9B cardinality=11.00K | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=9B cardinality=11.00K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | @@ -393,14 +462,17 @@ PLAN-ROOT SINK 02:ANALYTIC | functions: sum(bigint_col) | partition by: tinyint_col +| row-size=17B cardinality=11.00K | 01:SORT | order by: tinyint_col ASC NULLS FIRST +| row-size=9B cardinality=11.00K | 03:EXCHANGE [HASH(tinyint_col)] | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=9B cardinality=11.00K ==== # basic analytic with default window and ordering select int_col, rank() over(order by int_col) from functional.alltypesagg @@ -411,12 +483,15 @@ PLAN-ROOT SINK | functions: rank() | order by: int_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=12B cardinality=11.00K | 01:SORT | order by: int_col ASC +| row-size=4B cardinality=11.00K | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=4B cardinality=11.00K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | @@ -424,15 +499,18 @@ PLAN-ROOT SINK | functions: rank() | order by: int_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=12B cardinality=11.00K | 03:MERGING-EXCHANGE [UNPARTITIONED] | order by: int_col ASC | 01:SORT | order by: int_col ASC +| row-size=4B cardinality=11.00K | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=4B cardinality=11.00K ==== # analytic rows window, partition and ordering using complex expressions, with limit select bigint_col, count(double_col) @@ -449,12 +527,15 @@ PLAN-ROOT SINK | order by: 4 - int_col ASC, 4 * smallint_col ASC | window: ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING | limit: 10 +| row-size=31B cardinality=10 | 01:SORT | order by: tinyint_col + 1 ASC NULLS FIRST, double_col / 2 ASC NULLS FIRST, 4 - int_col ASC, 4 * smallint_col ASC +| row-size=23B cardinality=11.00K | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=23B cardinality=11.00K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | @@ -467,14 +548,17 @@ PLAN-ROOT SINK | order by: 4 - int_col ASC, 4 * smallint_col ASC | window: ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING | limit: 10 +| row-size=31B cardinality=10 | 01:SORT | order by: tinyint_col + 1 ASC NULLS FIRST, double_col / 2 ASC NULLS FIRST, 4 - int_col ASC, 4 * smallint_col ASC +| row-size=23B cardinality=11.00K | 03:EXCHANGE [HASH(tinyint_col + 1,double_col / 2)] | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=23B cardinality=11.00K ==== # test de-duplication of analytic exprs select @@ -502,27 +586,33 @@ PLAN-ROOT SINK | order by: int_col DESC | window: ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING | limit: 10 +| row-size=53B cardinality=10 | 04:SORT | order by: int_col DESC +| row-size=45B cardinality=7.30K | 03:ANALYTIC | functions: count(bigint_col), sum(double_col) | partition by: bool_col | order by: int_col DESC | window: ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING +| row-size=45B cardinality=7.30K | 02:ANALYTIC | functions: avg(double_col) | partition by: bool_col | order by: int_col DESC | window: ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING +| row-size=29B cardinality=7.30K | 01:SORT | order by: bool_col ASC NULLS FIRST, int_col DESC +| row-size=21B cardinality=7.30K | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=21B cardinality=7.30K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | @@ -531,32 +621,38 @@ PLAN-ROOT SINK | order by: int_col DESC | window: ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING | limit: 10 +| row-size=53B cardinality=10 | 07:MERGING-EXCHANGE [UNPARTITIONED] | order by: int_col DESC | 04:SORT | order by: int_col DESC +| row-size=45B cardinality=7.30K | 03:ANALYTIC | functions: count(bigint_col), sum(double_col) | partition by: bool_col | order by: int_col DESC | window: ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING +| row-size=45B cardinality=7.30K | 02:ANALYTIC | functions: avg(double_col) | partition by: bool_col | order by: int_col DESC | window: ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING +| row-size=29B cardinality=7.30K | 01:SORT | order by: bool_col ASC NULLS FIRST, int_col DESC +| row-size=21B cardinality=7.30K | 06:EXCHANGE [HASH(bool_col)] | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=21B cardinality=7.30K ==== # analytic on the output of a join with a final order by select a.tinyint_col, a.int_col, count(a.double_col) @@ -568,26 +664,32 @@ PLAN-ROOT SINK | 05:SORT | order by: tinyint_col ASC, int_col ASC +| row-size=13B cardinality=99 | 04:ANALYTIC | functions: count(double_col) | partition by: a.tinyint_col | order by: int_col DESC | window: ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING +| row-size=29B cardinality=99 | 03:SORT | order by: tinyint_col ASC NULLS FIRST, int_col DESC +| row-size=21B cardinality=99 | 02:HASH JOIN [INNER JOIN] | hash predicates: a.id = b.id | runtime filters: RF000 <- b.id +| row-size=21B cardinality=99 | |--01:SCAN HDFS [functional.alltypessmall b] | partitions=4/4 files=4 size=6.32KB +| row-size=4B cardinality=100 | 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB runtime filters: RF000 -> a.id + row-size=17B cardinality=7.30K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | @@ -596,30 +698,36 @@ PLAN-ROOT SINK | 05:SORT | order by: tinyint_col ASC, int_col ASC +| row-size=13B cardinality=99 | 04:ANALYTIC | functions: count(double_col) | partition by: a.tinyint_col | order by: int_col DESC | window: ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING +| row-size=29B cardinality=99 | 03:SORT | order by: tinyint_col ASC NULLS FIRST, int_col DESC +| row-size=21B cardinality=99 | 07:EXCHANGE [HASH(a.tinyint_col)] | 02:HASH JOIN [INNER JOIN, BROADCAST] | hash predicates: a.id = b.id | runtime filters: RF000 <- b.id +| row-size=21B cardinality=99 | |--06:EXCHANGE [BROADCAST] | | | 01:SCAN HDFS [functional.alltypessmall b] | partitions=4/4 files=4 size=6.32KB +| row-size=4B cardinality=100 | 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB runtime filters: RF000 -> a.id + row-size=17B cardinality=7.30K ==== # analytics on a grouped aggregation with a final order by select bool_col, @@ -640,31 +748,38 @@ PLAN-ROOT SINK | 06:SORT | order by: bool_col ASC, sum(min(int_col)) ASC, max(sum(bigint_col)) ASC +| row-size=25B cardinality=2 | 05:ANALYTIC | functions: sum(min(int_col)), max(sum(bigint_col)) | partition by: min(tinyint_col) | order by: max(int_col) ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING +| row-size=50B cardinality=2 | 04:SORT | order by: min(tinyint_col) ASC NULLS FIRST, max(int_col) ASC +| row-size=34B cardinality=2 | 03:ANALYTIC | functions: min(sum(bigint_col)) | partition by: min(tinyint_col) | order by: sum(int_col) ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING +| row-size=34B cardinality=2 | 02:SORT | order by: min(tinyint_col) ASC NULLS FIRST, sum(int_col) ASC +| row-size=26B cardinality=2 | 01:AGGREGATE [FINALIZE] | output: min(int_col), min(tinyint_col), max(int_col), sum(bigint_col), sum(int_col) | group by: bool_col +| row-size=26B cardinality=2 | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=14B cardinality=7.30K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | @@ -673,39 +788,47 @@ PLAN-ROOT SINK | 06:SORT | order by: bool_col ASC, sum(min(int_col)) ASC, max(sum(bigint_col)) ASC +| row-size=25B cardinality=2 | 05:ANALYTIC | functions: sum(min(int_col)), max(sum(bigint_col)) | partition by: min(tinyint_col) | order by: max(int_col) ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING +| row-size=50B cardinality=2 | 04:SORT | order by: min(tinyint_col) ASC NULLS FIRST, max(int_col) ASC +| row-size=34B cardinality=2 | 03:ANALYTIC | functions: min(sum(bigint_col)) | partition by: min(tinyint_col) | order by: sum(int_col) ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING +| row-size=34B cardinality=2 | 02:SORT | order by: min(tinyint_col) ASC NULLS FIRST, sum(int_col) ASC +| row-size=26B cardinality=2 | 09:EXCHANGE [HASH(min(tinyint_col))] | 08:AGGREGATE [FINALIZE] | output: min:merge(int_col), min:merge(tinyint_col), max:merge(int_col), sum:merge(bigint_col), sum:merge(int_col) | group by: bool_col +| row-size=26B cardinality=2 | 07:EXCHANGE [HASH(bool_col)] | 01:AGGREGATE [STREAMING] | output: min(int_col), min(tinyint_col), max(int_col), sum(bigint_col), sum(int_col) | group by: bool_col +| row-size=26B cardinality=2 | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=14B cardinality=7.30K ==== # grouping of multiple analytic exprs by compatible window/partition/order; # the distributed plan repartitions only once on tinyint_col @@ -751,54 +874,65 @@ PLAN-ROOT SINK | partition by: tinyint_col, double_col | order by: int_col DESC | window: ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING +| row-size=63B cardinality=11.00K | 09:ANALYTIC | functions: sum(smallint_col) | partition by: double_col, tinyint_col | order by: int_col DESC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING +| row-size=47B cardinality=11.00K | 08:ANALYTIC | functions: sum(tinyint_col) | partition by: tinyint_col, double_col | order by: int_col DESC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=39B cardinality=11.00K | 07:ANALYTIC | functions: first_value_rewrite(int_col, -1) | partition by: double_col, tinyint_col | order by: int_col DESC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING +| row-size=31B cardinality=11.00K | 06:SORT | order by: tinyint_col ASC NULLS FIRST, double_col ASC NULLS FIRST, int_col DESC +| row-size=27B cardinality=11.00K | 05:ANALYTIC | functions: first_value_rewrite(int_col, -1) | partition by: double_col, tinyint_col | order by: int_col ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING +| row-size=27B cardinality=11.00K | 04:ANALYTIC | functions: last_value_ignore_nulls(int_col) | partition by: double_col, tinyint_col | order by: int_col ASC | window: ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING +| row-size=23B cardinality=11.00K | 03:SORT | order by: double_col ASC NULLS FIRST, tinyint_col ASC NULLS FIRST, int_col ASC +| row-size=19B cardinality=11.00K | 02:ANALYTIC | functions: min(int_col) | partition by: tinyint_col | order by: int_col DESC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING +| row-size=19B cardinality=11.00K | 01:SORT | order by: tinyint_col ASC NULLS FIRST, int_col DESC +| row-size=15B cardinality=11.00K | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=15B cardinality=11.00K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | @@ -809,56 +943,67 @@ PLAN-ROOT SINK | partition by: tinyint_col, double_col | order by: int_col DESC | window: ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING +| row-size=63B cardinality=11.00K | 09:ANALYTIC | functions: sum(smallint_col) | partition by: double_col, tinyint_col | order by: int_col DESC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING +| row-size=47B cardinality=11.00K | 08:ANALYTIC | functions: sum(tinyint_col) | partition by: tinyint_col, double_col | order by: int_col DESC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=39B cardinality=11.00K | 07:ANALYTIC | functions: first_value_rewrite(int_col, -1) | partition by: double_col, tinyint_col | order by: int_col DESC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING +| row-size=31B cardinality=11.00K | 06:SORT | order by: tinyint_col ASC NULLS FIRST, double_col ASC NULLS FIRST, int_col DESC +| row-size=27B cardinality=11.00K | 05:ANALYTIC | functions: first_value_rewrite(int_col, -1) | partition by: double_col, tinyint_col | order by: int_col ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING +| row-size=27B cardinality=11.00K | 04:ANALYTIC | functions: last_value_ignore_nulls(int_col) | partition by: double_col, tinyint_col | order by: int_col ASC | window: ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING +| row-size=23B cardinality=11.00K | 03:SORT | order by: double_col ASC NULLS FIRST, tinyint_col ASC NULLS FIRST, int_col ASC +| row-size=19B cardinality=11.00K | 02:ANALYTIC | functions: min(int_col) | partition by: tinyint_col | order by: int_col DESC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING +| row-size=19B cardinality=11.00K | 01:SORT | order by: tinyint_col ASC NULLS FIRST, int_col DESC +| row-size=15B cardinality=11.00K | 11:EXCHANGE [HASH(tinyint_col)] | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=15B cardinality=11.00K ==== # grouping of multiple analytic exprs by compatible window/partition/order select @@ -883,34 +1028,42 @@ PLAN-ROOT SINK | functions: sum(tinyint_col) | order by: int_col DESC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=55B cardinality=11.00K | 06:SORT | order by: int_col DESC +| row-size=47B cardinality=11.00K | 05:ANALYTIC | functions: sum(smallint_col) | partition by: double_col, tinyint_col +| row-size=47B cardinality=11.00K | 04:ANALYTIC | functions: count(double_col) | partition by: tinyint_col, double_col | order by: int_col DESC | window: ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING +| row-size=39B cardinality=11.00K | 03:SORT | order by: tinyint_col ASC NULLS FIRST, double_col ASC NULLS FIRST, int_col DESC +| row-size=31B cardinality=11.00K | 02:ANALYTIC | functions: sum(smallint_col) | partition by: bigint_col | order by: tinyint_col ASC | window: ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING +| row-size=31B cardinality=11.00K | 01:SORT | order by: bigint_col ASC NULLS FIRST, tinyint_col ASC +| row-size=23B cardinality=11.00K | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=23B cardinality=11.00K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | @@ -918,25 +1071,30 @@ PLAN-ROOT SINK | functions: sum(tinyint_col) | order by: int_col DESC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=55B cardinality=11.00K | 10:MERGING-EXCHANGE [UNPARTITIONED] | order by: int_col DESC | 06:SORT | order by: int_col DESC +| row-size=47B cardinality=11.00K | 05:ANALYTIC | functions: sum(smallint_col) | partition by: double_col, tinyint_col +| row-size=47B cardinality=11.00K | 04:ANALYTIC | functions: count(double_col) | partition by: tinyint_col, double_col | order by: int_col DESC | window: ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING +| row-size=39B cardinality=11.00K | 03:SORT | order by: tinyint_col ASC NULLS FIRST, double_col ASC NULLS FIRST, int_col DESC +| row-size=31B cardinality=11.00K | 09:EXCHANGE [HASH(tinyint_col,double_col)] | @@ -945,14 +1103,17 @@ PLAN-ROOT SINK | partition by: bigint_col | order by: tinyint_col ASC | window: ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING +| row-size=31B cardinality=11.00K | 01:SORT | order by: bigint_col ASC NULLS FIRST, tinyint_col ASC +| row-size=23B cardinality=11.00K | 08:EXCHANGE [HASH(bigint_col)] | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=23B cardinality=11.00K ==== # basic test for analytics and inline views select double_col, a, b, a + b, double_col + a from @@ -968,41 +1129,51 @@ PLAN-ROOT SINK | 04:SORT | order by: a ASC, b ASC, a + b ASC +| row-size=24B cardinality=7.30K | 03:ANALYTIC | functions: count(int_col) +| row-size=37B cardinality=7.30K | 02:ANALYTIC | functions: sum(int_col + bigint_col) | partition by: bool_col +| row-size=29B cardinality=7.30K | 01:SORT | order by: bool_col ASC NULLS FIRST +| row-size=21B cardinality=7.30K | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=21B cardinality=7.30K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | 04:SORT | order by: a ASC, b ASC, a + b ASC +| row-size=24B cardinality=7.30K | 03:ANALYTIC | functions: count(int_col) +| row-size=37B cardinality=7.30K | 06:EXCHANGE [UNPARTITIONED] | 02:ANALYTIC | functions: sum(int_col + bigint_col) | partition by: bool_col +| row-size=29B cardinality=7.30K | 01:SORT | order by: bool_col ASC NULLS FIRST +| row-size=21B cardinality=7.30K | 05:EXCHANGE [HASH(functional.alltypes.bool_col)] | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=21B cardinality=7.30K ==== # same as above but using a WITH-clause view with v2 as @@ -1019,41 +1190,51 @@ PLAN-ROOT SINK | 04:SORT | order by: a ASC, b ASC, a + b ASC +| row-size=24B cardinality=7.30K | 03:ANALYTIC | functions: count(int_col) +| row-size=37B cardinality=7.30K | 02:ANALYTIC | functions: sum(int_col + bigint_col) | partition by: bool_col +| row-size=29B cardinality=7.30K | 01:SORT | order by: bool_col ASC NULLS FIRST +| row-size=21B cardinality=7.30K | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=21B cardinality=7.30K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | 04:SORT | order by: a ASC, b ASC, a + b ASC +| row-size=24B cardinality=7.30K | 03:ANALYTIC | functions: count(int_col) +| row-size=37B cardinality=7.30K | 06:EXCHANGE [UNPARTITIONED] | 02:ANALYTIC | functions: sum(int_col + bigint_col) | partition by: bool_col +| row-size=29B cardinality=7.30K | 01:SORT | order by: bool_col ASC NULLS FIRST +| row-size=21B cardinality=7.30K | 05:EXCHANGE [HASH(functional.alltypes.bool_col)] | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=21B cardinality=7.30K ==== # test ignoring of non-materialized analytic exprs select b from @@ -1071,25 +1252,31 @@ PLAN-ROOT SINK | 05:SELECT | predicates: count(1) < 10 +| row-size=42B cardinality=730 | 04:ANALYTIC | functions: count(1) | partition by: bool_col | order by: string_col ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING +| row-size=42B cardinality=7.30K | 03:SORT | order by: bool_col ASC NULLS FIRST, string_col ASC +| row-size=34B cardinality=7.30K | 02:ANALYTIC | functions: sum(int_col) | partition by: bigint_col +| row-size=34B cardinality=7.30K | 01:SORT | order by: bigint_col ASC NULLS FIRST +| row-size=26B cardinality=7.30K | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=26B cardinality=7.30K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | @@ -1097,29 +1284,35 @@ PLAN-ROOT SINK | 05:SELECT | predicates: count(1) < 10 +| row-size=42B cardinality=730 | 04:ANALYTIC | functions: count(1) | partition by: bool_col | order by: string_col ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING +| row-size=42B cardinality=7.30K | 03:SORT | order by: bool_col ASC NULLS FIRST, string_col ASC +| row-size=34B cardinality=7.30K | 07:EXCHANGE [HASH(bool_col)] | 02:ANALYTIC | functions: sum(int_col) | partition by: bigint_col +| row-size=34B cardinality=7.30K | 01:SORT | order by: bigint_col ASC NULLS FIRST +| row-size=26B cardinality=7.30K | 06:EXCHANGE [HASH(bigint_col)] | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=26B cardinality=7.30K ==== # basic test for analytics and unions select min(id) over (partition by int_col) @@ -1136,46 +1329,59 @@ PLAN-ROOT SINK | 12:SORT | order by: min(id) OVER(...) DESC NULLS FIRST +| row-size=4B cardinality=7.41K | 08:UNION | pass-through-operands: 07 +| row-size=4B cardinality=7.41K | |--11:ANALYTIC | | functions: sum(bigint_col) | | partition by: int_col | | order by: id ASC | | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| | row-size=24B cardinality=8 | | | 10:SORT | | order by: int_col ASC NULLS FIRST, id ASC +| | row-size=16B cardinality=8 | | | 09:SCAN HDFS [functional.alltypestiny] | partitions=4/4 files=4 size=460B +| row-size=16B cardinality=8 | 07:AGGREGATE [FINALIZE] | group by: min(id) OVER(...) +| row-size=4B cardinality=7.40K | 00:UNION +| row-size=4B cardinality=7.40K | |--06:ANALYTIC | | functions: max(id) | | partition by: bool_col +| | row-size=9B cardinality=100 | | | 05:SORT | | order by: bool_col ASC NULLS FIRST +| | row-size=5B cardinality=100 | | | 04:SCAN HDFS [functional.alltypessmall] | partitions=4/4 files=4 size=6.32KB +| row-size=5B cardinality=100 | 03:ANALYTIC | functions: min(id) | partition by: int_col +| row-size=12B cardinality=7.30K | 02:SORT | order by: int_col ASC NULLS FIRST +| row-size=8B cardinality=7.30K | 01:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=8B cardinality=7.30K ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | @@ -1184,57 +1390,71 @@ PLAN-ROOT SINK | 12:SORT | order by: min(id) OVER(...) DESC NULLS FIRST +| row-size=4B cardinality=7.41K | 08:UNION | pass-through-operands: 16 +| row-size=4B cardinality=7.41K | |--11:ANALYTIC | | functions: sum(bigint_col) | | partition by: int_col | | order by: id ASC | | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| | row-size=24B cardinality=8 | | | 10:SORT | | order by: int_col ASC NULLS FIRST, id ASC +| | row-size=16B cardinality=8 | | | 17:EXCHANGE [HASH(int_col)] | | | 09:SCAN HDFS [functional.alltypestiny] | partitions=4/4 files=4 size=460B +| row-size=16B cardinality=8 | 16:AGGREGATE [FINALIZE] | group by: min(id) OVER(...) +| row-size=4B cardinality=7.40K | 15:EXCHANGE [HASH(min(id) OVER(...))] | 07:AGGREGATE [STREAMING] | group by: min(id) OVER(...) +| row-size=4B cardinality=7.40K | 00:UNION +| row-size=4B cardinality=7.40K | |--06:ANALYTIC | | functions: max(id) | | partition by: bool_col +| | row-size=9B cardinality=100 | | | 05:SORT | | order by: bool_col ASC NULLS FIRST +| | row-size=5B cardinality=100 | | | 14:EXCHANGE [HASH(bool_col)] | | | 04:SCAN HDFS [functional.alltypessmall] | partitions=4/4 files=4 size=6.32KB +| row-size=5B cardinality=100 | 03:ANALYTIC | functions: min(id) | partition by: int_col +| row-size=12B cardinality=7.30K | 02:SORT | order by: int_col ASC NULLS FIRST +| row-size=8B cardinality=7.30K | 13:EXCHANGE [HASH(int_col)] | 01:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=8B cardinality=7.30K ==== # analytics in an uncorrelated subquery select id, int_col, bool_col from functional.alltypessmall t1 @@ -1247,21 +1467,26 @@ PLAN-ROOT SINK 04:HASH JOIN [LEFT SEMI JOIN] | hash predicates: int_col = min(bigint_col) | runtime filters: RF000 <- min(bigint_col) +| row-size=9B cardinality=10 | |--03:ANALYTIC | | functions: min(bigint_col) | | partition by: bool_col +| | row-size=21B cardinality=1 | | | 02:SORT | | order by: bool_col ASC NULLS FIRST +| | row-size=13B cardinality=1 | | | 01:SCAN HDFS [functional.alltypestiny t2] | partitions=4/4 files=4 size=460B | predicates: t2.id < 10 +| row-size=13B cardinality=1 | 00:SCAN HDFS [functional.alltypessmall t1] partitions=4/4 files=4 size=6.32KB runtime filters: RF000 -> int_col + row-size=9B cardinality=100 ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | @@ -1270,25 +1495,30 @@ PLAN-ROOT SINK 04:HASH JOIN [LEFT SEMI JOIN, BROADCAST] | hash predicates: int_col = min(bigint_col) | runtime filters: RF000 <- min(bigint_col) +| row-size=9B cardinality=10 | |--06:EXCHANGE [BROADCAST] | | | 03:ANALYTIC | | functions: min(bigint_col) | | partition by: bool_col +| | row-size=21B cardinality=1 | | | 02:SORT | | order by: bool_col ASC NULLS FIRST +| | row-size=13B cardinality=1 | | | 05:EXCHANGE [HASH(bool_col)] | | | 01:SCAN HDFS [functional.alltypestiny t2] | partitions=4/4 files=4 size=460B | predicates: t2.id < 10 +| row-size=13B cardinality=1 | 00:SCAN HDFS [functional.alltypessmall t1] partitions=4/4 files=4 size=6.32KB runtime filters: RF000 -> int_col + row-size=9B cardinality=100 ==== # test conjunct assignment and slot materialization due to conjuncts # (see IMPALA-1243) @@ -1325,43 +1555,53 @@ PLAN-ROOT SINK | 07:SELECT | predicates: min(int_col) < 1, max(int_col) < 2, bigint_col > 10, count(int_col) < 3, sum(int_col) < 4, avg(int_col) < 5, min(int_col) != count(int_col), min(int_col) != avg(int_col), max(int_col) != count(int_col), count(int_col) < bigint_col + 3, sum(int_col) < bigint_col + 4, min(int_col) < bigint_col + 1, max(int_col) < bigint_col + 2, avg(int_col) < bigint_col + 5 +| row-size=49B cardinality=73 | 06:ANALYTIC | functions: min(int_col) +| row-size=49B cardinality=730 | 05:ANALYTIC | functions: avg(int_col) | partition by: bigint_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING +| row-size=45B cardinality=730 | 04:ANALYTIC | functions: sum(int_col) | partition by: bigint_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING +| row-size=37B cardinality=730 | 03:SORT | order by: bigint_col ASC NULLS FIRST, id ASC +| row-size=29B cardinality=730 | 02:ANALYTIC | functions: max(int_col), count(int_col) | partition by: bool_col +| row-size=29B cardinality=730 | 01:SORT | order by: bool_col ASC NULLS FIRST +| row-size=17B cardinality=730 | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB predicates: int_col <= 10, int_col >= 5 + row-size=17B cardinality=730 ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | 07:SELECT | predicates: min(int_col) < 1, max(int_col) < 2, bigint_col > 10, count(int_col) < 3, sum(int_col) < 4, avg(int_col) < 5, min(int_col) != count(int_col), min(int_col) != avg(int_col), max(int_col) != count(int_col), count(int_col) < bigint_col + 3, sum(int_col) < bigint_col + 4, min(int_col) < bigint_col + 1, max(int_col) < bigint_col + 2, avg(int_col) < bigint_col + 5 +| row-size=49B cardinality=73 | 06:ANALYTIC | functions: min(int_col) +| row-size=49B cardinality=730 | 10:EXCHANGE [UNPARTITIONED] | @@ -1370,30 +1610,36 @@ PLAN-ROOT SINK | partition by: bigint_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING +| row-size=45B cardinality=730 | 04:ANALYTIC | functions: sum(int_col) | partition by: bigint_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING +| row-size=37B cardinality=730 | 03:SORT | order by: bigint_col ASC NULLS FIRST, id ASC +| row-size=29B cardinality=730 | 09:EXCHANGE [HASH(bigint_col)] | 02:ANALYTIC | functions: max(int_col), count(int_col) | partition by: bool_col +| row-size=29B cardinality=730 | 01:SORT | order by: bool_col ASC NULLS FIRST +| row-size=17B cardinality=730 | 08:EXCHANGE [HASH(bool_col)] | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB predicates: int_col <= 10, int_col >= 5 + row-size=17B cardinality=730 ==== # test predicate propagation onto and through analytic nodes # TODO: allow AnalyticEvalNode to apply a < 20 @@ -1412,22 +1658,27 @@ PLAN-ROOT SINK | 04:HASH JOIN [INNER JOIN] | hash predicates: id = t2.id, sum(int_col) = t2.int_col +| row-size=32B cardinality=730 | |--03:SCAN HDFS [functional.alltypes t2] | partitions=24/24 files=24 size=478.45KB | predicates: t2.id < 10, t2.int_col < 20 +| row-size=8B cardinality=730 | 02:ANALYTIC | functions: sum(int_col) | partition by: bigint_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING +| row-size=24B cardinality=7.30K | 01:SORT | order by: bigint_col ASC NULLS FIRST, id ASC +| row-size=16B cardinality=7.30K | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=16B cardinality=7.30K ==== # test that predicates are correctly propagated in the presence of outer joins # (i.e., no predicates should be propagated in this query) @@ -1447,22 +1698,27 @@ PLAN-ROOT SINK 04:HASH JOIN [LEFT OUTER JOIN] | hash predicates: id = t2.id, sum(int_col) = t2.int_col | other predicates: t2.id < 10, t2.int_col < 20 +| row-size=32B cardinality=7.30K | |--03:SCAN HDFS [functional.alltypes t2] | partitions=24/24 files=24 size=478.45KB | predicates: t2.id < 10, t2.int_col < 20 +| row-size=8B cardinality=730 | 02:ANALYTIC | functions: sum(int_col) | partition by: bigint_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING +| row-size=24B cardinality=7.30K | 01:SORT | order by: bigint_col ASC NULLS FIRST, id ASC +| row-size=16B cardinality=7.30K | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=16B cardinality=7.30K ==== # test canonical function/window/order: row_number() gets a ROWS window select @@ -1476,12 +1732,15 @@ PLAN-ROOT SINK | partition by: tinyint_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=13B cardinality=11.00K | 01:SORT | order by: tinyint_col ASC NULLS FIRST, id ASC +| row-size=5B cardinality=11.00K | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=5B cardinality=11.00K ==== # test canonical function/window/order: lead() and lag() have default # arguments explicitly set @@ -1501,48 +1760,58 @@ PLAN-ROOT SINK | partition by: int_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 8 PRECEDING +| row-size=35B cardinality=11.00K | 08:ANALYTIC | functions: lead(int_col, 8, 20) | partition by: int_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 8 FOLLOWING +| row-size=31B cardinality=11.00K | 07:SORT | order by: int_col ASC NULLS FIRST, id ASC +| row-size=27B cardinality=11.00K | 06:ANALYTIC | functions: lag(int_col, 4, NULL) | partition by: smallint_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 4 PRECEDING +| row-size=27B cardinality=11.00K | 05:ANALYTIC | functions: lead(int_col, 4, NULL) | partition by: smallint_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 4 FOLLOWING +| row-size=23B cardinality=11.00K | 04:SORT | order by: smallint_col ASC NULLS FIRST, id ASC +| row-size=19B cardinality=11.00K | 03:ANALYTIC | functions: lag(int_col, 1, NULL) | partition by: tinyint_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING +| row-size=19B cardinality=11.00K | 02:ANALYTIC | functions: lead(int_col, 1, NULL) | partition by: tinyint_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING +| row-size=15B cardinality=11.00K | 01:SORT | order by: tinyint_col ASC NULLS FIRST, id ASC +| row-size=11B cardinality=11.00K | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=11B cardinality=11.00K ==== # Test canonical function/window/order: Reverse windows ending in UNBOUNDED FOLLOWING # and not starting with UNBOUNDED PRECEDING. @@ -1571,42 +1840,51 @@ PLAN-ROOT SINK | partition by: tinyint_col | order by: id ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING +| row-size=58B cardinality=11.00K | 07:ANALYTIC | functions: count(bigint_col) | partition by: tinyint_col | order by: id ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=50B cardinality=11.00K | 06:ANALYTIC | functions: sum(int_col) | partition by: tinyint_col | order by: id ASC, bool_col DESC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING +| row-size=42B cardinality=11.00K | 05:SORT | order by: tinyint_col ASC NULLS FIRST, id ASC NULLS LAST, bool_col DESC NULLS FIRST +| row-size=34B cardinality=11.00K | 04:ANALYTIC | functions: count(bigint_col) | partition by: tinyint_col | order by: id ASC, int_col ASC | window: ROWS BETWEEN 6 PRECEDING AND 8 FOLLOWING +| row-size=34B cardinality=11.00K | 03:SORT | order by: tinyint_col ASC NULLS FIRST, id ASC, int_col ASC +| row-size=26B cardinality=11.00K | 02:ANALYTIC | functions: sum(int_col) | partition by: tinyint_col | order by: id DESC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=26B cardinality=11.00K | 01:SORT | order by: tinyint_col ASC NULLS FIRST, id DESC NULLS FIRST +| row-size=18B cardinality=11.00K | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=18B cardinality=11.00K ==== # Test canonical function/window/order: Reverse windows ending in UNBOUNDED FOLLOWING # and either not starting with UNBOUNDED PRECEDING or first_value(... IGNORE NULLS), and @@ -1638,45 +1916,55 @@ PLAN-ROOT SINK | functions: last_value_ignore_nulls(tinyint_col) | order by: id DESC | window: ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING +| row-size=51B cardinality=11.00K | 08:SORT | order by: id DESC NULLS FIRST +| row-size=50B cardinality=11.00K | 07:ANALYTIC | functions: first_value_ignore_nulls(bigint_col), first_value(bigint_col) | partition by: tinyint_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=50B cardinality=11.00K | 06:ANALYTIC | functions: first_value(int_col) | partition by: tinyint_col | order by: id ASC, bool_col DESC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=34B cardinality=11.00K | 05:SORT | order by: tinyint_col ASC NULLS FIRST, id ASC NULLS LAST, bool_col DESC NULLS FIRST +| row-size=30B cardinality=11.00K | 04:ANALYTIC | functions: first_value_rewrite(bigint_col, -1) | partition by: tinyint_col | order by: id ASC, int_col ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 6 PRECEDING +| row-size=30B cardinality=11.00K | 03:SORT | order by: tinyint_col ASC NULLS FIRST, id ASC, int_col ASC +| row-size=22B cardinality=11.00K | 02:ANALYTIC | functions: first_value(int_col) | partition by: tinyint_col | order by: id DESC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=22B cardinality=11.00K | 01:SORT | order by: tinyint_col ASC NULLS FIRST, id DESC NULLS FIRST +| row-size=18B cardinality=11.00K | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=18B cardinality=11.00K ==== # Test canonical function/window/order: Reverse windows ending in UNBOUNDED FOLLOWING # and not starting with UNBOUNDED PRECEDING, and change last_value() to first_value() @@ -1704,42 +1992,51 @@ PLAN-ROOT SINK | partition by: tinyint_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING +| row-size=50B cardinality=11.00K | 07:ANALYTIC | functions: last_value(bigint_col) | partition by: tinyint_col | order by: id ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=42B cardinality=11.00K | 06:ANALYTIC | functions: first_value(int_col) | partition by: tinyint_col | order by: id ASC, bool_col DESC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=34B cardinality=11.00K | 05:SORT | order by: tinyint_col ASC NULLS FIRST, id ASC NULLS LAST, bool_col DESC NULLS FIRST +| row-size=30B cardinality=11.00K | 04:ANALYTIC | functions: last_value(bigint_col) | partition by: tinyint_col | order by: id ASC, int_col ASC | window: ROWS BETWEEN 6 PRECEDING AND 8 FOLLOWING +| row-size=30B cardinality=11.00K | 03:SORT | order by: tinyint_col ASC NULLS FIRST, id ASC, int_col ASC +| row-size=22B cardinality=11.00K | 02:ANALYTIC | functions: first_value(int_col) | partition by: tinyint_col | order by: id DESC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=22B cardinality=11.00K | 01:SORT | order by: tinyint_col ASC NULLS FIRST, id DESC NULLS FIRST +| row-size=18B cardinality=11.00K | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=18B cardinality=11.00K ==== # IMPALA-1229 select DENSE_RANK() OVER (ORDER BY t1.day ASC) @@ -1752,18 +2049,23 @@ PLAN-ROOT SINK | functions: dense_rank() | order by: day ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=12B cardinality=11.00K | 03:SORT | order by: day ASC +| row-size=4B cardinality=11.00K | 02:NESTED LOOP JOIN [LEFT SEMI JOIN] +| row-size=4B cardinality=11.00K | |--01:SCAN HDFS [functional.alltypesagg t1] | partitions=11/11 files=11 size=814.73KB | limit: 1 +| row-size=0B cardinality=1 | 00:SCAN HDFS [functional.alltypesagg t1] partitions=11/11 files=11 size=814.73KB + row-size=4B cardinality=11.00K ==== # IMPALA-1243: the Where clause predicate needs to be evaluated in a Select node # not as a scan predicate of alltypes @@ -1780,41 +2082,52 @@ PLAN-ROOT SINK | 06:AGGREGATE [FINALIZE] | output: count(*) +| row-size=8B cardinality=1 | 05:SELECT | predicates: id IS NULL, tinyint_col != 5 +| row-size=5B cardinality=730 | 00:UNION +| row-size=5B cardinality=7.30K | |--04:ANALYTIC | | functions: dense_rank() | | order by: id ASC | | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| | row-size=13B cardinality=7.30K | | | 03:SORT | | order by: id ASC +| | row-size=5B cardinality=7.30K | | | 02:SCAN HDFS [functional.alltypes t1] | partitions=24/24 files=24 size=478.45KB +| row-size=5B cardinality=7.30K | 01:SCAN HDFS [functional.alltypestiny t1] partitions=4/4 files=4 size=460B predicates: t1.id IS NULL, t1.tinyint_col != 5 + row-size=5B cardinality=1 ---- DISTRIBUTEDPLAN PLAN-ROOT SINK | 10:AGGREGATE [FINALIZE] | output: count:merge(*) +| row-size=8B cardinality=1 | 09:EXCHANGE [UNPARTITIONED] | 06:AGGREGATE | output: count(*) +| row-size=8B cardinality=1 | 05:SELECT | predicates: id IS NULL, tinyint_col != 5 +| row-size=5B cardinality=730 | 00:UNION +| row-size=5B cardinality=7.30K | |--08:EXCHANGE [RANDOM] | | @@ -1822,19 +2135,23 @@ PLAN-ROOT SINK | | functions: dense_rank() | | order by: id ASC | | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| | row-size=13B cardinality=7.30K | | | 07:MERGING-EXCHANGE [UNPARTITIONED] | | order by: id ASC | | | 03:SORT | | order by: id ASC +| | row-size=5B cardinality=7.30K | | | 02:SCAN HDFS [functional.alltypes t1] | partitions=24/24 files=24 size=478.45KB +| row-size=5B cardinality=7.30K | 01:SCAN HDFS [functional.alltypestiny t1] partitions=4/4 files=4 size=460B predicates: t1.id IS NULL, t1.tinyint_col != 5 + row-size=5B cardinality=1 ==== # Propagate a predicate on a partition key through an inline view that has an analytic # function. Predicates that are not compatible with analytic function's partition by @@ -1849,18 +2166,23 @@ PLAN-ROOT SINK | 03:SELECT | predicates: id = 1, int_col < 10, sum(int_col) = 4 +| row-size=20B cardinality=0 | 02:ANALYTIC | functions: sum(int_col) | partition by: year | order by: id ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=20B cardinality=3.65K | 01:SORT | order by: year ASC NULLS FIRST, id ASC +| row-size=12B cardinality=3.65K | 00:SCAN HDFS [functional.alltypes] + partition predicates: functional.alltypes.year = 2009 partitions=12/24 files=12 size=238.68KB + row-size=12B cardinality=3.65K ==== # Propagate predicates through an inline view that computes multiple analytic functions # (IMPALA-1900) @@ -1879,43 +2201,54 @@ PLAN-ROOT SINK | 09:SELECT | predicates: tinyint_col + 1 = 1 +| row-size=42B cardinality=365 | 08:ANALYTIC | functions: sum(int_col) | partition by: year, tinyint_col +| row-size=42B cardinality=3.65K | 07:SORT | order by: year ASC NULLS FIRST, tinyint_col ASC NULLS FIRST +| row-size=34B cardinality=3.65K | 06:ANALYTIC | functions: last_value(int_col) | partition by: int_col, year | order by: id ASC | window: ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING +| row-size=34B cardinality=3.65K | 05:SORT | order by: int_col ASC NULLS FIRST, year ASC NULLS FIRST, id ASC +| row-size=30B cardinality=3.65K | 04:ANALYTIC | functions: avg(int_col) | partition by: tinyint_col, id, year | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=30B cardinality=3.65K | 03:SORT | order by: tinyint_col ASC NULLS FIRST, id ASC NULLS FIRST, year ASC NULLS FIRST, bigint_col ASC +| row-size=22B cardinality=3.65K | 02:ANALYTIC | functions: last_value(tinyint_col) | partition by: id, year | order by: int_col ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING +| row-size=22B cardinality=3.65K | 01:SORT | order by: id ASC NULLS FIRST, year ASC NULLS FIRST, int_col ASC +| row-size=21B cardinality=3.65K | 00:SCAN HDFS [functional.alltypes] + partition predicates: functional.alltypes.year = 2009 partitions=12/24 files=12 size=238.68KB + row-size=21B cardinality=3.65K ==== # Don't propagate predicates through an inline view with multiple analytic functions # if the predicates are not compatible with every analytic function's partition by @@ -1932,35 +2265,43 @@ PLAN-ROOT SINK | 07:SELECT | predicates: tinyint_col = 1, year = 2009 +| row-size=37B cardinality=516 | 06:ANALYTIC | functions: lead(int_col, 1, NULL) | order by: tinyint_col ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING +| row-size=37B cardinality=7.30K | 05:SORT | order by: tinyint_col ASC +| row-size=33B cardinality=7.30K | 04:ANALYTIC | functions: avg(int_col) | partition by: year | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=33B cardinality=7.30K | 03:SORT | order by: year ASC NULLS FIRST, bigint_col ASC +| row-size=25B cardinality=7.30K | 02:ANALYTIC | functions: sum(int_col) | partition by: year, tinyint_col | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=25B cardinality=7.30K | 01:SORT | order by: year ASC NULLS FIRST, tinyint_col ASC NULLS FIRST, bigint_col ASC +| row-size=17B cardinality=7.30K | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=17B cardinality=7.30K ==== # Propagate a predicate generated from equivalence classes # through an inline with an analytic function (IMPALA-1900) @@ -1974,19 +2315,24 @@ PLAN-ROOT SINK | 03:SELECT | predicates: month = int_col +| row-size=29B cardinality=0 | 02:ANALYTIC | functions: sum(id) | partition by: month, tinyint_col | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=29B cardinality=1 | 01:SORT | order by: month ASC NULLS FIRST, tinyint_col ASC NULLS FIRST, bigint_col ASC +| row-size=21B cardinality=1 | 00:SCAN HDFS [functional.alltypestiny] + partition predicates: functional.alltypestiny.month = 1 partitions=1/4 files=1 size=115B predicates: functional.alltypestiny.id = 1, functional.alltypestiny.tinyint_col = 1 + row-size=21B cardinality=1 ==== # Don't propagate predicates through an inline view with an analytic # function that has a complex (non SlotRef) partition by clause for consistency with @@ -2004,26 +2350,32 @@ PLAN-ROOT SINK | 05:SELECT | predicates: tinyint_col + int_col < 10 +| row-size=29B cardinality=781 | 04:ANALYTIC | functions: sum(id) | partition by: t1.tinyint_col + 1, t2.int_col - 1 | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=29B cardinality=7.81K | 03:SORT | order by: tinyint_col + 1 ASC NULLS FIRST, int_col - 1 ASC NULLS FIRST, bigint_col ASC +| row-size=21B cardinality=7.81K | 02:HASH JOIN [INNER JOIN] | hash predicates: t1.id = t2.id | runtime filters: RF000 <- t2.id +| row-size=21B cardinality=7.81K | |--01:SCAN HDFS [functional.alltypesagg t2] | partitions=11/11 files=11 size=814.73KB +| row-size=8B cardinality=11.00K | 00:SCAN HDFS [functional.alltypes t1] partitions=24/24 files=24 size=478.45KB runtime filters: RF000 -> t1.id + row-size=13B cardinality=7.30K ==== # Don't propagate a predicate through an inline view with an analytic function # when the select list items contain a complex (non SlotRef) expr on a partition by @@ -2040,18 +2392,22 @@ PLAN-ROOT SINK | 03:SELECT | predicates: int_col + 1 = 1 +| row-size=24B cardinality=4 | 02:ANALYTIC | functions: sum(id) | partition by: int_col | order by: bigint_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=24B cardinality=8 | 01:SORT | order by: int_col ASC NULLS FIRST, bigint_col ASC +| row-size=16B cardinality=8 | 00:SCAN HDFS [functional.alltypestiny] partitions=4/4 files=4 size=460B + row-size=16B cardinality=8 ==== # IMPALA-1519: Check that the first analytic sort of a select block # materializes TupleIsNullPredicates to be substituted in ancestor nodes. @@ -2080,35 +2436,44 @@ PLAN-ROOT SINK | functions: avg(if(TupleIsNull(), NULL, coalesce(id + bigint_col, 40))) | order by: if(TupleIsNull(), NULL, coalesce(bigint_col, 30)) ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=58B cardinality=8 | 07:SORT | order by: if(TupleIsNull(), NULL, coalesce(bigint_col, 30)) ASC +| row-size=50B cardinality=8 | 06:ANALYTIC | functions: count(1) | order by: int_col ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=42B cardinality=8 | 05:SORT | order by: int_col ASC +| row-size=34B cardinality=8 | 04:ANALYTIC | functions: sum(id) | partition by: t1.bool_col +| row-size=34B cardinality=8 | 03:SORT | order by: bool_col ASC NULLS FIRST +| row-size=26B cardinality=8 | 02:HASH JOIN [RIGHT OUTER JOIN] | hash predicates: id + 100 = t1.id | runtime filters: RF000 <- t1.id +| row-size=25B cardinality=8 | |--00:SCAN HDFS [functional.alltypestiny t1] | partitions=4/4 files=4 size=460B +| row-size=9B cardinality=8 | 01:SCAN HDFS [functional.alltypestiny] partitions=4/4 files=4 size=460B runtime filters: RF000 -> id + 100 + row-size=16B cardinality=8 ==== # IMPALA-1519: Check that the first analytic sort of a select block # materializes TupleIsNullPredicates to be substituted in ancestor nodes. @@ -2140,32 +2505,40 @@ PLAN-ROOT SINK 07:AGGREGATE [FINALIZE] | output: avg(sum(t1.id)), sum(avg(g)), count(id) | group by: if(TupleIsNull(), NULL, coalesce(int_col, 20)) +| row-size=28B cardinality=3 | 06:ANALYTIC | functions: avg(if(TupleIsNull(), NULL, coalesce(id + bigint_col, 40))) | order by: if(TupleIsNull(), NULL, coalesce(bigint_col, 30)) ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=46B cardinality=8 | 05:SORT | order by: if(TupleIsNull(), NULL, coalesce(bigint_col, 30)) ASC +| row-size=38B cardinality=8 | 04:ANALYTIC | functions: sum(id) | partition by: t1.bool_col +| row-size=30B cardinality=8 | 03:SORT | order by: bool_col ASC NULLS FIRST +| row-size=22B cardinality=8 | 02:HASH JOIN [RIGHT OUTER JOIN] | hash predicates: id + 100 = t1.id | runtime filters: RF000 <- t1.id +| row-size=21B cardinality=8 | |--00:SCAN HDFS [functional.alltypestiny t1] | partitions=4/4 files=4 size=460B +| row-size=5B cardinality=8 | 01:SCAN HDFS [functional.alltypestiny] partitions=4/4 files=4 size=460B runtime filters: RF000 -> id + 100 + row-size=16B cardinality=8 ==== # IMPALA-1519: Check that expr wrapping with a TupleIsNullPredicate # is performed correctly with analytics and multiple nesting levels. @@ -2208,54 +2581,69 @@ PLAN-ROOT SINK | 14:HASH JOIN [FULL OUTER JOIN] | hash predicates: id = id +| row-size=100B cardinality=16 | |--13:ANALYTIC | | functions: sum(if(TupleIsNull(), NULL, ifnull(int_col, 1))) | | order by: id ASC | | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| | row-size=50B cardinality=8 | | | 12:SORT | | order by: id ASC +| | row-size=42B cardinality=8 | | | 11:HASH JOIN [RIGHT OUTER JOIN] | | hash predicates: id = c.id +| | row-size=41B cardinality=8 | | | |--07:SCAN HDFS [functional.alltypestiny c] | | partitions=4/4 files=4 size=460B +| | row-size=4B cardinality=8 | | | 10:ANALYTIC | | functions: count(bigint_col) | | order by: id ASC | | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| | row-size=37B cardinality=8 | | | 09:SORT | | order by: id ASC +| | row-size=29B cardinality=8 | | | 08:SCAN HDFS [functional.alltypestiny d] | partitions=4/4 files=4 size=460B +| row-size=29B cardinality=8 | 06:ANALYTIC | functions: sum(if(TupleIsNull(), NULL, ifnull(int_col, 1))) | partition by: a.id +| row-size=50B cardinality=8 | 05:SORT | order by: id ASC NULLS FIRST +| row-size=42B cardinality=8 | 04:HASH JOIN [RIGHT OUTER JOIN] | hash predicates: id = a.id +| row-size=41B cardinality=8 | |--00:SCAN HDFS [functional.alltypestiny a] | partitions=4/4 files=4 size=460B +| row-size=4B cardinality=8 | 03:ANALYTIC | functions: count(bigint_col) | partition by: id +| row-size=37B cardinality=8 | 02:SORT | order by: id ASC NULLS FIRST +| row-size=29B cardinality=8 | 01:SCAN HDFS [functional.alltypestiny b] partitions=4/4 files=4 size=460B + row-size=29B cardinality=8 ==== # IMPALA-1946: Check that On-clause predicates of an outer join assigned in a scan # are not wrapped in TupleIsNullPredicates. @@ -2272,21 +2660,26 @@ PLAN-ROOT SINK | 04:HASH JOIN [LEFT OUTER JOIN] | hash predicates: a.id = t1.id +| row-size=16B cardinality=8 | |--03:HASH JOIN [INNER JOIN] | | hash predicates: t2.id = t1.id | | runtime filters: RF000 <- t1.id +| | row-size=12B cardinality=1 | | | |--01:SCAN HDFS [functional.alltypestiny t1] | | partitions=4/4 files=4 size=460B | | predicates: ifnull(t1.int_col, 10) < 10 +| | row-size=8B cardinality=1 | | | 02:SCAN HDFS [functional.alltypestiny t2] | partitions=4/4 files=4 size=460B | runtime filters: RF000 -> t2.id +| row-size=4B cardinality=8 | 00:SCAN HDFS [functional.alltypestiny a] partitions=4/4 files=4 size=460B + row-size=4B cardinality=8 ==== # IMPALA-2832: Test proper cloning of analytic function call exprs in a CTAS. create table impala_2832 as select @@ -2301,12 +2694,15 @@ WRITE TO HDFS [default.impala_2832, OVERWRITE=false] | functions: last_value(int_col), last_value(bigint_col) | order by: int_col ASC | window: ROWS BETWEEN CURRENT ROW AND CURRENT ROW +| row-size=24B cardinality=7.30K | 01:SORT | order by: int_col ASC +| row-size=12B cardinality=7.30K | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=12B cardinality=7.30K ==== # For first/last_value(), ranges windows get rewritten as rows windows, # so these should be grouped. @@ -2322,12 +2718,15 @@ PLAN-ROOT SINK | functions: last_value(int_col), first_value(int_col) | order by: bigint_col ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=20B cardinality=7.30K | 01:SORT | order by: bigint_col ASC +| row-size=12B cardinality=7.30K | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB + row-size=12B cardinality=7.30K ==== # IMPALA-4263: Analytic function needs a hash exchange because the partition exprs # reference a tuple that is made nullable in the join fragment. @@ -2343,26 +2742,31 @@ PLAN-ROOT SINK 04:ANALYTIC | functions: count(*) | partition by: t1.id +| row-size=16B cardinality=100 | 03:SORT | order by: id ASC NULLS FIRST +| row-size=8B cardinality=100 | 07:EXCHANGE [HASH(t1.id)] | 02:HASH JOIN [RIGHT OUTER JOIN, PARTITIONED] | hash predicates: t1.id = t2.id | runtime filters: RF000 <- t2.id +| row-size=8B cardinality=100 | |--06:EXCHANGE [HASH(t2.id)] | | | 01:SCAN HDFS [functional.alltypessmall t2] | partitions=4/4 files=4 size=6.32KB +| row-size=4B cardinality=100 | 05:EXCHANGE [HASH(t1.id)] | 00:SCAN HDFS [functional.alltypes t1] partitions=24/24 files=24 size=478.45KB runtime filters: RF000 -> t1.id + row-size=4B cardinality=7.30K ==== # IMPALA-1882: Confirm that first_value function used without a partition by and order # by clause does not need a sort node @@ -2372,11 +2776,13 @@ PLAN-ROOT SINK | 01:ANALYTIC | functions: first_value_ignore_nulls(tinyint_col) +| row-size=2B cardinality=11.00K | 02:EXCHANGE [UNPARTITIONED] | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=1B cardinality=11.00K ==== # IMPALA-1882: Confirm that last_value function used without a partition by and order # by clause does not need a sort node @@ -2386,11 +2792,13 @@ PLAN-ROOT SINK | 01:ANALYTIC | functions: last_value_ignore_nulls(tinyint_col) +| row-size=2B cardinality=11.00K | 02:EXCHANGE [UNPARTITIONED] | 00:SCAN HDFS [functional.alltypesagg] partitions=11/11 files=11 size=814.73KB + row-size=1B cardinality=11.00K ==== # IMPALA-1882: Confirm that first_value function using only a partition by clause # sorts over partition column @@ -2404,14 +2812,17 @@ PLAN-ROOT SINK 02:ANALYTIC | functions: first_value(id) | partition by: bool_col +| row-size=93B cardinality=100 | 01:SORT | order by: bool_col ASC NULLS FIRST +| row-size=89B cardinality=100 | 03:EXCHANGE [HASH(bool_col)] | 00:SCAN HDFS [functional.alltypessmall] partitions=4/4 files=4 size=6.32KB + row-size=89B cardinality=100 ==== # IMPALA-1882: Confirm that last_value function using only a partition by clause # sorts over partition column @@ -2425,14 +2836,17 @@ PLAN-ROOT SINK 02:ANALYTIC | functions: last_value(id) | partition by: bool_col +| row-size=93B cardinality=100 | 01:SORT | order by: bool_col ASC NULLS FIRST +| row-size=89B cardinality=100 | 03:EXCHANGE [HASH(bool_col)] | 00:SCAN HDFS [functional.alltypessmall] partitions=4/4 files=4 size=6.32KB + row-size=89B cardinality=100 ==== # IMPALA-6473: analytic fn where the same expr is in the 'partition by' and the 'order by' select last_value(int_col) @@ -2448,14 +2862,17 @@ PLAN-ROOT SINK | partition by: abs(int_col), string_col | order by: id ASC, abs(int_col) ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=33B cardinality=8 | 01:SORT | order by: abs(int_col) ASC NULLS FIRST, string_col ASC NULLS FIRST, id ASC +| row-size=29B cardinality=8 | 03:EXCHANGE [HASH(abs(int_col),string_col)] | 00:SCAN HDFS [functional.alltypestiny] partitions=4/4 files=4 size=460B + row-size=21B cardinality=8 ==== # IMPALA-6323 Partition by a constant is equivalent to no partitioning. select x, count() over(partition by 1) from (VALUES((1 x), (2), (3))) T; @@ -2465,9 +2882,11 @@ PLAN-ROOT SINK 01:ANALYTIC | functions: count() | partition by: 1 +| row-size=9B cardinality=3 | 00:UNION constant-operands=3 + row-size=1B cardinality=3 ==== # IMPALA-6323 Order by a constant is equivalent to no ordering. select x, count() over(order by 1) from (VALUES((1 x), (2), (3))) T; @@ -2478,11 +2897,13 @@ PLAN-ROOT SINK | functions: count() | order by: 1 ASC | window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +| row-size=9B cardinality=3 | 01:SORT | order by: 1 ASC +| row-size=1B cardinality=3 | 00:UNION constant-operands=3 + row-size=1B cardinality=3 ==== -
http://git-wip-us.apache.org/repos/asf/impala/blob/a7ea86b7/testdata/workloads/functional-planner/queries/PlannerTest/complex-types-file-formats.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/complex-types-file-formats.test b/testdata/workloads/functional-planner/queries/PlannerTest/complex-types-file-formats.test index b902f26..01a6fcf 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/complex-types-file-formats.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/complex-types-file-formats.test @@ -4,16 +4,21 @@ select s.f1 from functional_parquet.complextypes_fileformat t, t.a PLAN-ROOT SINK | 01:SUBPLAN +| row-size=24B cardinality=unavailable | |--04:NESTED LOOP JOIN [CROSS JOIN] +| | row-size=24B cardinality=10 | | | |--02:SINGULAR ROW SRC +| | row-size=24B cardinality=1 | | | 03:UNNEST [t.a] +| row-size=0B cardinality=10 | 00:SCAN HDFS [functional_parquet.complextypes_fileformat t] - partitions=1/1 files=1 size=227B + partitions=1/1 files=1 size=1.22KB predicates: !empty(t.a) + row-size=24B cardinality=unavailable ==== # Complex types are not supported on ORC. select 1 from functional_orc_def.complextypes_fileformat t, t.a @@ -33,7 +38,8 @@ select id from functional_orc_def.complextypes_fileformat PLAN-ROOT SINK | 00:SCAN HDFS [functional_orc_def.complextypes_fileformat] - partitions=1/1 files=1 size=624B + partitions=1/1 files=1 size=621B + row-size=4B cardinality=unavailable ==== # Complex types are not supported on ORC but count(*) and similar # queries should work. @@ -43,9 +49,11 @@ PLAN-ROOT SINK | 01:AGGREGATE [FINALIZE] | output: count(*) +| row-size=8B cardinality=1 | 00:SCAN HDFS [functional_orc_def.complextypes_fileformat] - partitions=1/1 files=1 size=624B + partitions=1/1 files=1 size=621B + row-size=0B cardinality=unavailable ==== # Complex types are not supported on Avro. select s.f1 from functional_avro_snap.complextypes_fileformat t, t.a @@ -84,7 +92,8 @@ select id from functional_rc_snap.complextypes_fileformat PLAN-ROOT SINK | 00:SCAN HDFS [functional_rc_snap.complextypes_fileformat] - partitions=1/1 files=1 size=56B + partitions=1/1 files=1 size=212B + row-size=4B cardinality=unavailable ==== # Complex types are not supported on RC files but count(*) and similar # queries should work. @@ -94,9 +103,11 @@ PLAN-ROOT SINK | 01:AGGREGATE [FINALIZE] | output: count(*) +| row-size=8B cardinality=1 | 00:SCAN HDFS [functional_rc_snap.complextypes_fileformat] - partitions=1/1 files=1 size=56B + partitions=1/1 files=1 size=212B + row-size=0B cardinality=unavailable ==== # Complex types are not supported on sequence files. select s.f1 from functional_seq_snap.complextypes_fileformat t, t.a @@ -111,7 +122,8 @@ select id from functional_seq_snap.complextypes_fileformat PLAN-ROOT SINK | 00:SCAN HDFS [functional_seq_snap.complextypes_fileformat] - partitions=1/1 files=1 size=87B + partitions=1/1 files=1 size=281B + row-size=4B cardinality=unavailable ==== # Scanning all partitions fails because there are partitions with a file format for which # complex types are not supported. The error message is abbreviated because it is @@ -128,6 +140,7 @@ select id from functional_hbase.allcomplextypes PLAN-ROOT SINK | 00:SCAN HBASE [functional_hbase.allcomplextypes] + row-size=4B cardinality=1 ==== # Scanning an HBase table with complex-types columns fails if a complex-typed # column is selected. @@ -161,16 +174,22 @@ select s.f1 from functional.complextypes_multifileformat t, t.a where p = 2 PLAN-ROOT SINK | 01:SUBPLAN +| row-size=24B cardinality=unavailable | |--04:NESTED LOOP JOIN [CROSS JOIN] +| | row-size=24B cardinality=10 | | | |--02:SINGULAR ROW SRC +| | row-size=24B cardinality=1 | | | 03:UNNEST [t.a] +| row-size=0B cardinality=10 | 00:SCAN HDFS [functional.complextypes_multifileformat t] + partition predicates: p = 2 partitions=1/5 files=1 size=128B predicates: !empty(t.a) + row-size=24B cardinality=unavailable ==== # Scanning an Avro partition of a multi-format table with complex types fails. select s.f1 from functional.complextypes_multifileformat t, t.a where p = 3 @@ -192,9 +211,12 @@ PLAN-ROOT SINK | 01:AGGREGATE [FINALIZE] | output: count(*) +| row-size=8B cardinality=1 | 00:SCAN HDFS [functional.complextypes_multifileformat] + partition predicates: p = 4 partitions=1/5 files=1 size=128B + row-size=0B cardinality=unavailable ==== # Scanning an ORC file partition of a multi-format table with complex types fails. select id from functional.complextypes_multifileformat t, t.a where p = 5 @@ -210,7 +232,10 @@ PLAN-ROOT SINK | 01:AGGREGATE [FINALIZE] | output: count(*) +| row-size=8B cardinality=1 | 00:SCAN HDFS [functional.complextypes_multifileformat] + partition predicates: p = 5 partitions=1/5 files=1 size=128B + row-size=0B cardinality=unavailable ==== http://git-wip-us.apache.org/repos/asf/impala/blob/a7ea86b7/testdata/workloads/functional-planner/queries/PlannerTest/conjunct-ordering.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/conjunct-ordering.test b/testdata/workloads/functional-planner/queries/PlannerTest/conjunct-ordering.test index 7084b26..c94b04c 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/conjunct-ordering.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/conjunct-ordering.test @@ -9,6 +9,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.bool_col, a.int_col = a.tinyint_col + row-size=89B cardinality=730 ==== # Check that numeric comparison costs less than LIKE. select * @@ -21,6 +22,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.int_col = a.tinyint_col, a.string_col LIKE '%a%' + row-size=89B cardinality=730 ==== # Check that single numeric comparison costs less than compound numeric comparison. select * @@ -33,6 +35,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.int_col = a.bigint_col, (a.int_col = a.tinyint_col OR a.int_col = a.smallint_col) + row-size=89B cardinality=730 ==== # Check that a simple numeric comparison costs less than one with arithmetic. select * @@ -44,6 +47,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.int_col = a.tinyint_col, a.int_col + 5 = a.bigint_col - 10 + row-size=89B cardinality=730 ==== # Check that large CASE costs more than numeric comparison. select * @@ -56,6 +60,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.int_col = a.tinyint_col, (CASE a.int_col WHEN 0 THEN TRUE WHEN 1 THEN TRUE WHEN 2 THEN TRUE ELSE FALSE END), (CASE a.tinyint_col WHEN 0 THEN TRUE WHEN 1 THEN TRUE WHEN 2 THEN TRUE ELSE FALSE END) + row-size=89B cardinality=730 ==== # Check that a LIKE with only leading/trailing wildcards costs less then LIKE with # non-leading/trailing wildcards. @@ -68,6 +73,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.date_string_col LIKE '%a%', a.date_string_col LIKE 'a%a' + row-size=89B cardinality=730 ==== # Check that an IN predicate costs more than a single numeric comparison. select * @@ -79,6 +85,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.id = 1, a.int_col IN (1, 2, 3, 4, 5, 6, 7, 8, 9) + row-size=89B cardinality=1 ==== # Check that a timestamp comparison costs more than a numeric comparison. select * @@ -90,6 +97,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.int_col = 0, a.timestamp_col > TIMESTAMP '2000-01-01 00:00:00' + row-size=89B cardinality=231 ==== # Check that string comparisons are ordered by string length. select * @@ -102,6 +110,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.string_col = 'a', a.date_string_col = 'looooooooooooooooong string' + row-size=89B cardinality=3 ==== # Check that timestamp arithmetic adds cost. select * @@ -114,6 +123,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.timestamp_col < TIMESTAMP '2020-01-01 00:00:00', a.timestamp_col - INTERVAL 1 day > TIMESTAMP '2000-01-01 00:00:00' + row-size=89B cardinality=730 ==== # Check that a function call adds cost. select * @@ -125,6 +135,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.double_col > 0, ceil(a.double_col) > 0 + row-size=89B cardinality=730 ==== # Check that a cast adds cost. select * @@ -136,6 +147,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.int_col > 0, CAST(a.int_col AS DOUBLE) > 0 + row-size=89B cardinality=730 ==== # Check that is null costs less than string comparison. select * @@ -147,6 +159,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.int_col IS NULL, a.string_col = 'string' + row-size=89B cardinality=231 ==== # Check that long list of predicates is sorted correctly. select * @@ -161,6 +174,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.bool_col, a.int_col = a.bigint_col, (a.int_col = a.tinyint_col OR a.int_col = a.smallint_col), a.string_col LIKE '%a%' + row-size=89B cardinality=730 ==== # Check that for two equal cost conjuncts, the one with the higher selectivity goes first. # There are more distinct id values, so it is more selective. @@ -173,6 +187,7 @@ PLAN-ROOT SINK 00:SCAN HDFS [functional.alltypes a] partitions=24/24 files=24 size=478.45KB predicates: a.id = 0, a.int_col = 0 + row-size=89B cardinality=1 ==== # IMPALA-4614: Tests that the eval cost of timestamp literals is set. # The HAVING predicate is assigned to the scan and tests that it has @@ -189,8 +204,10 @@ PLAN-ROOT SINK 01:AGGREGATE [FINALIZE] | output: count(*) | group by: timestamp_col +| row-size=24B cardinality=730 | 00:SCAN HDFS [functional.alltypes] partitions=24/24 files=24 size=478.45KB predicates: functional.alltypes.timestamp_col < TIMESTAMP '2010-01-01 01:05:20', int_col < 10, timestamp_col < TIMESTAMP '2010-01-02 01:05:20', timestamp_col != CAST(date_string_col AS TIMESTAMP) + row-size=40B cardinality=730 ==== http://git-wip-us.apache.org/repos/asf/impala/blob/a7ea86b7/testdata/workloads/functional-planner/queries/PlannerTest/constant-folding.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/constant-folding.test b/testdata/workloads/functional-planner/queries/PlannerTest/constant-folding.test index 5b1cbe4..752ccf3 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/constant-folding.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/constant-folding.test @@ -15,7 +15,7 @@ PLAN-ROOT SINK | 01:SUBPLAN | mem-estimate=0B mem-reservation=0B thread-reservation=0 -| tuple-ids=2,1,0 row-size=44B cardinality=1500000 +| tuple-ids=2,1,0 row-size=44B cardinality=1.50M | in pipelines: 00(GETNEXT) | |--08:NESTED LOOP JOIN [CROSS JOIN] @@ -58,21 +58,21 @@ PLAN-ROOT SINK | in pipelines: 00(GETNEXT) | 00:SCAN HDFS [tpch_nested_parquet.customer c] - partitions=1/1 files=4 size=289.00MB + partitions=1/1 files=4 size=288.99MB predicates: c_custkey > CAST(10 AS BIGINT), !empty(c.c_orders) predicates on o: !empty(o.o_lineitems), o_orderkey = CAST(4 AS BIGINT) predicates on o_lineitems: CAST(20 AS BIGINT) + CAST(l_linenumber AS BIGINT) < CAST(0 AS BIGINT) stored statistics: - table: rows=150000 size=288.96MB + table: rows=150000 size=288.99MB columns missing stats: c_orders - extrapolated-rows=disabled max-scan-range-rows=44227 + extrapolated-rows=disabled max-scan-range-rows=44225 parquet statistics predicates: c_custkey > CAST(10 AS BIGINT) parquet statistics predicates on o: o_orderkey = CAST(4 AS BIGINT) parquet dictionary predicates: c_custkey > CAST(10 AS BIGINT) parquet dictionary predicates on o: o_orderkey = CAST(4 AS BIGINT) parquet dictionary predicates on o_lineitems: CAST(20 AS BIGINT) + CAST(l_linenumber AS BIGINT) < CAST(0 AS BIGINT) mem-estimate=264.00MB mem-reservation=16.00MB thread-reservation=1 - tuple-ids=0 row-size=20B cardinality=15000 + tuple-ids=0 row-size=20B cardinality=15.00K in pipelines: 00(GETNEXT) ==== # Test HBase scan node. @@ -153,7 +153,7 @@ PLAN-ROOT SINK columns: all extrapolated-rows=disabled max-scan-range-rows=310 mem-estimate=128.00MB mem-reservation=32.00KB thread-reservation=1 - tuple-ids=0 row-size=20B cardinality=7300 + tuple-ids=0 row-size=20B cardinality=7.30K in pipelines: 00(GETNEXT) ==== # Test hash join. @@ -180,7 +180,7 @@ PLAN-ROOT SINK | other join predicates: CAST(a.int_col AS BIGINT) <= b.bigint_col + CAST(97 AS BIGINT), CAST(a.int_col AS BIGINT) >= CAST(0 AS BIGINT) + b.bigint_col | other predicates: CAST(b.double_col AS DECIMAL(3,2)) > CAST(11.1 AS DECIMAL(6,1)) | mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0 -| tuple-ids=0,1N row-size=28B cardinality=7300 +| tuple-ids=0,1N row-size=28B cardinality=7.30K | in pipelines: 00(GETNEXT), 01(OPEN) | |--01:SCAN HDFS [functional.alltypes b] @@ -203,7 +203,7 @@ PLAN-ROOT SINK columns: all extrapolated-rows=disabled max-scan-range-rows=310 mem-estimate=128.00MB mem-reservation=32.00KB thread-reservation=1 - tuple-ids=0 row-size=8B cardinality=7300 + tuple-ids=0 row-size=8B cardinality=7.30K in pipelines: 00(GETNEXT) ==== # Test nested-loop join. Same as above but and with a disjunction in the On clause. @@ -229,7 +229,7 @@ PLAN-ROOT SINK | join predicates: (CAST(2 AS BIGINT) + CAST(a.id AS BIGINT) = CAST(b.id AS BIGINT) - CAST(2 AS BIGINT) OR CAST(a.int_col AS BIGINT) >= CAST(0 AS BIGINT) + b.bigint_col AND CAST(a.int_col AS BIGINT) <= b.bigint_col + CAST(97 AS BIGINT)) | predicates: CAST(b.double_col AS DECIMAL(3,2)) > CAST(11.1 AS DECIMAL(6,1)) | mem-estimate=14.26KB mem-reservation=0B thread-reservation=0 -| tuple-ids=0,1N row-size=28B cardinality=7300 +| tuple-ids=0,1N row-size=28B cardinality=7.30K | in pipelines: 00(GETNEXT), 01(OPEN) | |--01:SCAN HDFS [functional.alltypes b] @@ -252,7 +252,7 @@ PLAN-ROOT SINK columns: all extrapolated-rows=disabled max-scan-range-rows=310 mem-estimate=128.00MB mem-reservation=32.00KB thread-reservation=1 - tuple-ids=0 row-size=8B cardinality=7300 + tuple-ids=0 row-size=8B cardinality=7.30K in pipelines: 00(GETNEXT) ==== # Test distinct aggregation with grouping. @@ -282,7 +282,7 @@ PLAN-ROOT SINK | output: count(*) | group by: timestamp_col = TIMESTAMP '2016-11-15 00:00:00', CAST(2 AS BIGINT) + CAST(id AS BIGINT) | mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0 -| tuple-ids=1 row-size=17B cardinality=7300 +| tuple-ids=1 row-size=17B cardinality=7.30K | in pipelines: 01(GETNEXT), 00(OPEN) | 00:SCAN HDFS [functional.alltypes] @@ -293,7 +293,7 @@ PLAN-ROOT SINK columns: all extrapolated-rows=disabled max-scan-range-rows=310 mem-estimate=128.00MB mem-reservation=32.00KB thread-reservation=1 - tuple-ids=0 row-size=20B cardinality=7300 + tuple-ids=0 row-size=20B cardinality=7.30K in pipelines: 00(GETNEXT) ==== # Test non-grouping distinct aggregation. @@ -320,7 +320,7 @@ PLAN-ROOT SINK | output: count(*) | group by: CAST(2 AS BIGINT) + CAST(id AS BIGINT) | mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0 -| tuple-ids=1 row-size=16B cardinality=7300 +| tuple-ids=1 row-size=16B cardinality=7.30K | in pipelines: 01(GETNEXT), 00(OPEN) | 00:SCAN HDFS [functional.alltypes] @@ -331,7 +331,7 @@ PLAN-ROOT SINK columns: all extrapolated-rows=disabled max-scan-range-rows=310 mem-estimate=128.00MB mem-reservation=32.00KB thread-reservation=1 - tuple-ids=0 row-size=4B cardinality=7300 + tuple-ids=0 row-size=4B cardinality=7.30K in pipelines: 00(GETNEXT) ==== # Test analytic eval node. @@ -354,14 +354,14 @@ PLAN-ROOT SINK | order by: greatest(20, bigint_col) ASC | window: ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW | mem-estimate=4.00MB mem-reservation=4.00MB spill-buffer=2.00MB thread-reservation=0 -| tuple-ids=3,2 row-size=53B cardinality=7300 +| tuple-ids=3,2 row-size=53B cardinality=7.30K | in pipelines: 01(GETNEXT) | 01:SORT | order by: concat('ab', string_col) ASC NULLS FIRST, greatest(20, bigint_col) ASC | materialized: concat('ab', string_col), greatest(20, bigint_col) | mem-estimate=12.00MB mem-reservation=12.00MB spill-buffer=2.00MB thread-reservation=0 -| tuple-ids=3 row-size=45B cardinality=7300 +| tuple-ids=3 row-size=45B cardinality=7.30K | in pipelines: 01(GETNEXT), 00(OPEN) | 00:SCAN HDFS [functional.alltypes] @@ -372,7 +372,7 @@ PLAN-ROOT SINK columns: all extrapolated-rows=disabled max-scan-range-rows=310 mem-estimate=128.00MB mem-reservation=32.00KB thread-reservation=1 - tuple-ids=0 row-size=25B cardinality=7300 + tuple-ids=0 row-size=25B cardinality=7.30K in pipelines: 00(GETNEXT) ==== # Test sort node. @@ -389,7 +389,7 @@ PLAN-ROOT SINK 01:SORT | order by: id * 7.5 ASC | mem-estimate=6.00MB mem-reservation=6.00MB spill-buffer=2.00MB thread-reservation=0 -| tuple-ids=1 row-size=8B cardinality=7300 +| tuple-ids=1 row-size=8B cardinality=7.30K | in pipelines: 01(GETNEXT), 00(OPEN) | 00:SCAN HDFS [functional.alltypes] @@ -400,7 +400,7 @@ PLAN-ROOT SINK columns: all extrapolated-rows=disabled max-scan-range-rows=310 mem-estimate=128.00MB mem-reservation=32.00KB thread-reservation=1 - tuple-ids=0 row-size=8B cardinality=7300 + tuple-ids=0 row-size=8B cardinality=7.30K in pipelines: 00(GETNEXT) ==== # Test HDFS table sink.