http://git-wip-us.apache.org/repos/asf/impala/blob/a7ea86b7/testdata/workloads/functional-planner/queries/PlannerTest/union.test
----------------------------------------------------------------------
diff --git 
a/testdata/workloads/functional-planner/queries/PlannerTest/union.test 
b/testdata/workloads/functional-planner/queries/PlannerTest/union.test
index 72eb346..fa557b6 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/union.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/union.test
@@ -13,20 +13,28 @@ PLAN-ROOT SINK
 04:HASH JOIN [INNER JOIN]
 |  hash predicates: month = b.month
 |  runtime filters: RF000 <- b.month
+|  row-size=97B cardinality=1.24K
 |
 |--03:SCAN HDFS [functional.alltypessmall b]
+|     partition predicates: b.month = 1
 |     partitions=1/4 files=1 size=1.57KB
+|     row-size=89B cardinality=25
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=8B cardinality=1.24K
 |
 |--02:SCAN HDFS [functional.alltypes]
+|     partition predicates: functional.alltypes.month = 1
 |     partitions=2/24 files=2 size=40.32KB
 |     runtime filters: RF000 -> functional.alltypes.month
+|     row-size=8B cardinality=620
 |
 01:SCAN HDFS [functional.alltypes]
+   partition predicates: functional.alltypes.month = 1
    partitions=2/24 files=2 size=40.32KB
    runtime filters: RF000 -> functional.alltypes.month
+   row-size=8B cardinality=620
 ---- DISTRIBUTEDPLAN
 PLAN-ROOT SINK
 |
@@ -35,22 +43,30 @@ PLAN-ROOT SINK
 04:HASH JOIN [INNER JOIN, BROADCAST]
 |  hash predicates: month = b.month
 |  runtime filters: RF000 <- b.month
+|  row-size=97B cardinality=1.24K
 |
 |--05:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [functional.alltypessmall b]
+|     partition predicates: b.month = 1
 |     partitions=1/4 files=1 size=1.57KB
+|     row-size=89B cardinality=25
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=8B cardinality=1.24K
 |
 |--02:SCAN HDFS [functional.alltypes]
+|     partition predicates: functional.alltypes.month = 1
 |     partitions=2/24 files=2 size=40.32KB
 |     runtime filters: RF000 -> functional.alltypes.month
+|     row-size=8B cardinality=620
 |
 01:SCAN HDFS [functional.alltypes]
+   partition predicates: functional.alltypes.month = 1
    partitions=2/24 files=2 size=40.32KB
    runtime filters: RF000 -> functional.alltypes.month
+   row-size=8B cardinality=620
 ====
 // Only UNION ALL, no nested unions
 select * from functional.alltypestiny where year=2009 and month=1
@@ -63,15 +79,22 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -86,15 +109,22 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Only UNION ALL with limit inside operands. One of the operands also has an 
order by.
 select * from functional.alltypestiny where year=2009 and month=1 limit 1
@@ -107,20 +137,28 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=3
 |
 |--04:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
 |     limit: 1
+|     row-size=89B cardinality=1
 |
 |--03:TOP-N [LIMIT=1]
 |  |  order by: int_col ASC
+|  |  row-size=89B cardinality=1
 |  |
 |  02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
    limit: 1
+   row-size=89B cardinality=1
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -133,13 +171,16 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=3
 |
 |--07:EXCHANGE [UNPARTITIONED]
 |  |  limit: 1
 |  |
 |  04:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
 |     limit: 1
+|     row-size=89B cardinality=1
 |
 |--06:MERGING-EXCHANGE [UNPARTITIONED]
 |  |  order by: int_col ASC
@@ -147,16 +188,21 @@ PLAN-ROOT SINK
 |  |
 |  03:TOP-N [LIMIT=1]
 |  |  order by: int_col ASC
+|  |  row-size=89B cardinality=1
 |  |
 |  02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 05:EXCHANGE [UNPARTITIONED]
 |  limit: 1
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
    limit: 1
+   row-size=89B cardinality=1
 ====
 // Only UNION DISTINCT, no nested unions
 select * from functional.alltypestiny where year=2009 and month=1
@@ -169,18 +215,26 @@ PLAN-ROOT SINK
 |
 04:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -195,23 +249,32 @@ PLAN-ROOT SINK
 |
 06:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 05:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 04:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Only UNION ALL, mixed selects with and without from clauses, no nested 
unions
 select * from functional.alltypestiny where year=2009 and month=1
@@ -227,12 +290,17 @@ PLAN-ROOT SINK
 00:UNION
 |  constant-operands=2
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -246,12 +314,17 @@ PLAN-ROOT SINK
 00:UNION
 |  constant-operands=2
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Only UNION DISTINCT, mixed selects with and without from clauses, no nested 
unions
 select * from functional.alltypestiny where year=2009 and month=1
@@ -266,16 +339,22 @@ PLAN-ROOT SINK
 |
 03:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 00:UNION
 |  constant-operands=2
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -288,21 +367,28 @@ PLAN-ROOT SINK
 |
 05:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 04:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 03:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 00:UNION
 |  constant-operands=2
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Mixed UNION ALL/DISTINCT but effectively only UNION DISTINCT, no nested 
unions,
 // with order by and limit
@@ -319,24 +405,35 @@ PLAN-ROOT SINK
 |
 06:TOP-N [LIMIT=3]
 |  order by: tinyint_col ASC
+|  row-size=89B cardinality=3
 |
 05:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=8
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--04:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -355,29 +452,41 @@ PLAN-ROOT SINK
 |
 06:TOP-N [LIMIT=3]
 |  order by: tinyint_col ASC
+|  row-size=89B cardinality=3
 |
 08:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=8
 |
 07:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 05:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=8
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--04:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Mixed UNION ALL/DISTINCT, no nested unions, with order by and limit
 select * from functional.alltypestiny where year=2009 and month=1
@@ -393,27 +502,39 @@ PLAN-ROOT SINK
 |
 07:TOP-N [LIMIT=3]
 |  order by: tinyint_col ASC, smallint_col ASC
+|  row-size=89B cardinality=3
 |
 04:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--03:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  00:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--02:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 1
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  01:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--06:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 05:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 2
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -432,32 +553,45 @@ PLAN-ROOT SINK
 |
 07:TOP-N [LIMIT=3]
 |  order by: tinyint_col ASC, smallint_col ASC
+|  row-size=89B cardinality=3
 |
 04:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--09:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  08:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |  |
 |  03:AGGREGATE [STREAMING]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  00:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--02:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 1
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  01:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--06:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 05:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 2
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Mixed UNION ALL/DISTINCT, no nested unions, with order by and limit
 select * from functional.alltypestiny where year=2009 and month=1
@@ -473,27 +607,39 @@ PLAN-ROOT SINK
 |
 07:TOP-N [LIMIT=4]
 |  order by: tinyint_col ASC, smallint_col ASC
+|  row-size=89B cardinality=4
 |
 05:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--04:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=6
 |  |
 |  00:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=6
 |  |
 |  |--03:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  |--02:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 1
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  01:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 06:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 2
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -512,32 +658,45 @@ PLAN-ROOT SINK
 |
 07:TOP-N [LIMIT=4]
 |  order by: tinyint_col ASC, smallint_col ASC
+|  row-size=89B cardinality=4
 |
 05:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--09:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=6
 |  |
 |  08:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |  |
 |  04:AGGREGATE [STREAMING]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=6
 |  |
 |  00:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=6
 |  |
 |  |--03:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  |--02:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 1
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  01:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 06:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 2
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: Only UNION ALL, first operand is nested
 (select * from functional.alltypestiny where year=2009 and month=1
@@ -550,15 +709,22 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -573,15 +739,22 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: Only UNION ALL, second operand is nested
 select * from functional.alltypestiny where year=2009 and month=1
@@ -594,15 +767,22 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -617,15 +797,22 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: Only UNION DISTINCT, first operand is nested
 (select * from functional.alltypestiny where year=2009 and month=1
@@ -638,18 +825,26 @@ PLAN-ROOT SINK
 |
 04:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -664,23 +859,32 @@ PLAN-ROOT SINK
 |
 06:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 05:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 04:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: Only UNION DISTINCT, second operand is nested
 select * from functional.alltypestiny where year=2009 and month=1
@@ -693,18 +897,26 @@ PLAN-ROOT SINK
 |
 04:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -719,23 +931,32 @@ PLAN-ROOT SINK
 |
 06:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 05:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 04:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: UNION ALL doesn't absorb nested union with DISTINCT,
 // first operand is nested
@@ -749,21 +970,30 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--05:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 04:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=4
 |
 01:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=4
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 02:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 2:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -778,26 +1008,36 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--05:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 07:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=4
 |
 06:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 04:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=4
 |
 01:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=4
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 02:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: UNION ALL doesn't absorb nested union with DISTINCT,
 // second operand is nested
@@ -811,21 +1051,30 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--05:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  02:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--04:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -840,26 +1089,36 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--07:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  06:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |  |
 |  05:AGGREGATE [STREAMING]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  02:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--04:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: UNION ALL absorbs the children but not directly the 
operands
 // of a nested union with mixed ALL/DISTINCT, first operand is nested
@@ -875,24 +1134,35 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--06:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--05:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  02:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--04:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 2
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=2/090201.txt 
0:115
@@ -909,29 +1179,41 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--06:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--08:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  07:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |  |
 |  05:AGGREGATE [STREAMING]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  02:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--04:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 2
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: UNION ALL absorbs the children but not directly the 
operands
 // of a nested union with mixed ALL/DISTINCT, second operand is nested
@@ -947,24 +1229,35 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--06:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  03:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--05:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  04:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -981,29 +1274,41 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--08:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  07:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |  |
 |  06:AGGREGATE [STREAMING]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  03:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--05:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  04:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: UNION ALL doesn't absorb the children of a nested union
 // with mixed ALL/DISTINCT and limit, second operand is nested
@@ -1020,28 +1325,40 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--06:UNION
 |  |  pass-through-operands: all
 |  |  limit: 10
+|  |  row-size=89B cardinality=6
 |  |
 |  |--05:AGGREGATE [FINALIZE]
 |  |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, 
bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, 
year, month
+|  |  |  row-size=89B cardinality=4
 |  |  |
 |  |  02:UNION
 |  |  |  pass-through-operands: all
+|  |  |  row-size=89B cardinality=4
 |  |  |
 |  |  |--04:SCAN HDFS [functional.alltypestiny]
+|  |  |     partition predicates: year = 2009, month = 2
 |  |  |     partitions=1/4 files=1 size=115B
+|  |  |     row-size=89B cardinality=2
 |  |  |
 |  |  03:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 1
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  07:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -1058,6 +1375,7 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--11:EXCHANGE [RANDOM]
 |  |
@@ -1067,29 +1385,41 @@ PLAN-ROOT SINK
 |  06:UNION
 |  |  pass-through-operands: all
 |  |  limit: 10
+|  |  row-size=89B cardinality=6
 |  |
 |  |--09:AGGREGATE [FINALIZE]
 |  |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, 
bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, 
year, month
+|  |  |  row-size=89B cardinality=4
 |  |  |
 |  |  08:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |  |  |
 |  |  05:AGGREGATE [STREAMING]
 |  |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, 
bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, 
year, month
+|  |  |  row-size=89B cardinality=4
 |  |  |
 |  |  02:UNION
 |  |  |  pass-through-operands: all
+|  |  |  row-size=89B cardinality=4
 |  |  |
 |  |  |--04:SCAN HDFS [functional.alltypestiny]
+|  |  |     partition predicates: year = 2009, month = 2
 |  |  |     partitions=1/4 files=1 size=115B
+|  |  |     row-size=89B cardinality=2
 |  |  |
 |  |  03:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 1
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  07:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: UNION ALL doesn't absorb nested union with order by and 
limit,
 // first operand is nested
@@ -1104,21 +1434,30 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=5
 |
 |--05:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 04:TOP-N [LIMIT=3]
 |  order by: tinyint_col ASC
+|  row-size=89B cardinality=3
 |
 01:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=4
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 02:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 2:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -1133,9 +1472,12 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=5
 |
 |--05:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 07:EXCHANGE [RANDOM]
 |
@@ -1145,15 +1487,21 @@ PLAN-ROOT SINK
 |
 04:TOP-N [LIMIT=3]
 |  order by: tinyint_col ASC
+|  row-size=89B cardinality=3
 |
 01:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=4
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 02:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: UNION ALL doesn't absorb nested union with order by and 
limit,
 // second operand is nested
@@ -1168,21 +1516,30 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=5
 |
 |--05:TOP-N [LIMIT=3]
 |  |  order by: tinyint_col ASC
+|  |  row-size=89B cardinality=3
 |  |
 |  02:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--04:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -1197,6 +1554,7 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=5
 |
 |--07:EXCHANGE [RANDOM]
 |  |
@@ -1206,18 +1564,26 @@ PLAN-ROOT SINK
 |  |
 |  05:TOP-N [LIMIT=3]
 |  |  order by: tinyint_col ASC
+|  |  row-size=89B cardinality=3
 |  |
 |  02:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--04:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: UNION DISTINCT absorbs nested union with ALL
 // first operand is nested
@@ -1231,18 +1597,26 @@ PLAN-ROOT SINK
 |
 04:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -1257,23 +1631,32 @@ PLAN-ROOT SINK
 |
 06:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 05:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 04:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: UNION DISTINCT absorbs nested union with ALL,
 // second operand is nested
@@ -1287,18 +1670,26 @@ PLAN-ROOT SINK
 |
 04:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -1313,23 +1704,32 @@ PLAN-ROOT SINK
 |
 06:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 05:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 04:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=6
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: UNION DISTINCT absorbs nested union with mixed 
ALL/DISTINCT,
 // first operand is nested
@@ -1345,21 +1745,31 @@ PLAN-ROOT SINK
 |
 05:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=8
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--04:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -1376,26 +1786,37 @@ PLAN-ROOT SINK
 |
 07:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=8
 |
 06:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 05:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=8
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--04:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: UNION DISTINCT absorbs nested union with mixed 
ALL/DISTINCT,
 // second operand is nested
@@ -1411,21 +1832,31 @@ PLAN-ROOT SINK
 |
 05:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=8
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--04:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -1442,26 +1873,37 @@ PLAN-ROOT SINK
 |
 07:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=8
 |
 06:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 05:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=8
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=8
 |
 |--04:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: UNION DISTINCT doesn't absorb nested union with order by 
and limit,
 // first operand is nested
@@ -1476,24 +1918,34 @@ PLAN-ROOT SINK
 |
 06:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=5
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=5
 |
 |--05:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 04:TOP-N [LIMIT=3]
 |  order by: tinyint_col ASC
+|  row-size=89B cardinality=3
 |
 01:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=4
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 02:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 2:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -1508,17 +1960,22 @@ PLAN-ROOT SINK
 |
 10:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=5
 |
 09:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 06:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=5
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=5
 |
 |--05:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 08:EXCHANGE [RANDOM]
 |
@@ -1528,15 +1985,21 @@ PLAN-ROOT SINK
 |
 04:TOP-N [LIMIT=3]
 |  order by: tinyint_col ASC
+|  row-size=89B cardinality=3
 |
 01:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=4
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 02:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Union unnesting: UNION DISTINCT doesn't absorb nested union with order by 
and limit
 // second operand is nested
@@ -1551,24 +2014,34 @@ PLAN-ROOT SINK
 |
 06:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=5
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=5
 |
 |--05:TOP-N [LIMIT=3]
 |  |  order by: tinyint_col ASC
+|  |  row-size=89B cardinality=3
 |  |
 |  02:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--04:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -1583,14 +2056,17 @@ PLAN-ROOT SINK
 |
 10:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=5
 |
 09:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 06:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=5
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=5
 |
 |--08:EXCHANGE [RANDOM]
 |  |
@@ -1600,18 +2076,26 @@ PLAN-ROOT SINK
 |  |
 |  05:TOP-N [LIMIT=3]
 |  |  order by: tinyint_col ASC
+|  |  row-size=89B cardinality=3
 |  |
 |  02:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--04:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Complex union unnesting: Multiple levels of UNION ALL, fully unnestable
 select * from functional.alltypestiny where year=2009 and month=1
@@ -1628,21 +2112,32 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=10
 |
 |--05:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 3
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--04:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -1661,21 +2156,32 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=10
 |
 |--05:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 3
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--04:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Complex union unnesting: Multiple levels of UNION DISTINCT, fully unnestable
 select * from functional.alltypestiny where year=2009 and month=1
@@ -1692,24 +2198,36 @@ PLAN-ROOT SINK
 |
 06:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=10
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=10
 |
 |--05:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 3
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--04:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -1728,29 +2246,42 @@ PLAN-ROOT SINK
 |
 08:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=10
 |
 07:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 06:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=10
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=10
 |
 |--05:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 3
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--04:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Complex union unnesting: Partially unnestable up to 2nd level
 select * from functional.alltypestiny where year=2009 and month=1
@@ -1768,36 +2299,52 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=9
 |
 |--10:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=7
 |  |
 |  02:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=7
 |  |
 |  |--09:TOP-N [LIMIT=3]
 |  |  |  order by: tinyint_col ASC
+|  |  |  row-size=89B cardinality=3
 |  |  |
 |  |  08:AGGREGATE [FINALIZE]
 |  |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, 
bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, 
year, month
+|  |  |  row-size=89B cardinality=4
 |  |  |
 |  |  05:UNION
 |  |  |  pass-through-operands: all
+|  |  |  row-size=89B cardinality=4
 |  |  |
 |  |  |--07:SCAN HDFS [functional.alltypestiny]
+|  |  |     partition predicates: year = 2009, month = 3
 |  |  |     partitions=1/4 files=1 size=115B
+|  |  |     row-size=89B cardinality=2
 |  |  |
 |  |  06:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  |--04:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -1816,17 +2363,21 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=9
 |
 |--16:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=7
 |  |
 |  15:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |  |
 |  10:AGGREGATE [STREAMING]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=7
 |  |
 |  02:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=7
 |  |
 |  |--14:EXCHANGE [RANDOM]
 |  |  |
@@ -1836,32 +2387,46 @@ PLAN-ROOT SINK
 |  |  |
 |  |  09:TOP-N [LIMIT=3]
 |  |  |  order by: tinyint_col ASC
+|  |  |  row-size=89B cardinality=3
 |  |  |
 |  |  12:AGGREGATE [FINALIZE]
 |  |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, 
bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, 
year, month
+|  |  |  row-size=89B cardinality=4
 |  |  |
 |  |  11:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |  |  |
 |  |  08:AGGREGATE [STREAMING]
 |  |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, 
bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, 
year, month
+|  |  |  row-size=89B cardinality=4
 |  |  |
 |  |  05:UNION
 |  |  |  pass-through-operands: all
+|  |  |  row-size=89B cardinality=4
 |  |  |
 |  |  |--07:SCAN HDFS [functional.alltypestiny]
+|  |  |     partition predicates: year = 2009, month = 3
 |  |  |     partitions=1/4 files=1 size=115B
+|  |  |     row-size=89B cardinality=2
 |  |  |
 |  |  06:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  |--04:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Complex union unnesting: Partially unnestable up to 1st level
 select * from functional.alltypestiny where year=2009 and month=1
@@ -1879,33 +2444,48 @@ PLAN-ROOT SINK
 |
 09:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=9
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=9
 |
 |--08:TOP-N [LIMIT=3]
 |  |  order by: tinyint_col ASC
+|  |  row-size=89B cardinality=3
 |  |
 |  07:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  04:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--06:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 3
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  05:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -1924,14 +2504,17 @@ PLAN-ROOT SINK
 |
 15:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=9
 |
 14:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 09:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=9
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=9
 |
 |--13:EXCHANGE [RANDOM]
 |  |
@@ -1941,32 +2524,46 @@ PLAN-ROOT SINK
 |  |
 |  08:TOP-N [LIMIT=3]
 |  |  order by: tinyint_col ASC
+|  |  row-size=89B cardinality=3
 |  |
 |  11:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  10:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |  |
 |  07:AGGREGATE [STREAMING]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  04:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--06:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 3
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  05:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 2
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // Complex union unnesting: Multiple nested unions to test all rules in a 
single query
 select * from functional.alltypestiny where year=2009 and month=1
@@ -1993,51 +2590,76 @@ PLAN-ROOT SINK
 |
 09:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=15
 |
 |--08:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=9
 |  |
 |  00:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=9
 |  |
 |  |--07:TOP-N [LIMIT=3]
 |  |  |  order by: tinyint_col ASC
+|  |  |  row-size=89B cardinality=3
 |  |  |
 |  |  04:UNION
 |  |  |  pass-through-operands: all
+|  |  |  row-size=89B cardinality=4
 |  |  |
 |  |  |--06:SCAN HDFS [functional.alltypestiny]
+|  |  |     partition predicates: year = 2009, month = 3
 |  |  |     partitions=1/4 files=1 size=115B
+|  |  |     row-size=89B cardinality=2
 |  |  |
 |  |  05:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  |--03:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  |--02:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 1
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  01:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--15:TOP-N [LIMIT=3]
 |  |  order by: tinyint_col ASC
+|  |  row-size=89B cardinality=2
 |  |
 |  12:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=2
 |  |
 |  |--14:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 5
 |  |     partitions=0/4 files=0 size=0B
+|  |     row-size=89B cardinality=0
 |  |
 |  13:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 4
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--11:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 4
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 10:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 3
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -2063,17 +2685,21 @@ PLAN-ROOT SINK
 |
 09:UNION
 |  pass-through-operands: all
+|  row-size=89B cardinality=15
 |
 |--20:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=9
 |  |
 |  19:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |  |
 |  08:AGGREGATE [STREAMING]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=9
 |  |
 |  00:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=9
 |  |
 |  |--18:EXCHANGE [RANDOM]
 |  |  |
@@ -2083,24 +2709,36 @@ PLAN-ROOT SINK
 |  |  |
 |  |  07:TOP-N [LIMIT=3]
 |  |  |  order by: tinyint_col ASC
+|  |  |  row-size=89B cardinality=3
 |  |  |
 |  |  04:UNION
 |  |  |  pass-through-operands: all
+|  |  |  row-size=89B cardinality=4
 |  |  |
 |  |  |--06:SCAN HDFS [functional.alltypestiny]
+|  |  |     partition predicates: year = 2009, month = 3
 |  |  |     partitions=1/4 files=1 size=115B
+|  |  |     row-size=89B cardinality=2
 |  |  |
 |  |  05:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  |--03:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 2
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  |--02:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 1
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  01:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--21:EXCHANGE [RANDOM]
 |  |
@@ -2110,21 +2748,31 @@ PLAN-ROOT SINK
 |  |
 |  15:TOP-N [LIMIT=3]
 |  |  order by: tinyint_col ASC
+|  |  row-size=89B cardinality=2
 |  |
 |  12:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=2
 |  |
 |  |--14:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 5
 |  |     partitions=0/4 files=0 size=0B
+|  |     row-size=89B cardinality=0
 |  |
 |  13:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 4
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 |--11:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 4
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 10:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 3
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // UNION ALL in subquery
 select x.* from
@@ -2139,21 +2787,30 @@ PLAN-ROOT SINK
 |
 05:TOP-N [LIMIT=5]
 |  order by: tinyint_col ASC
+|  row-size=89B cardinality=5
 |
 00:UNION
 |  pass-through-operands: 04
+|  row-size=89B cardinality=6
 |
 |--01:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--03:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 1
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 04:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 2
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 2:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -2170,21 +2827,30 @@ PLAN-ROOT SINK
 |
 05:TOP-N [LIMIT=5]
 |  order by: tinyint_col ASC
+|  row-size=89B cardinality=5
 |
 00:UNION
 |  pass-through-operands: 04
+|  row-size=89B cardinality=6
 |
 |--01:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--03:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 1
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 04:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 2
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // UNION DISTINCT in subquery
 select x.* from
@@ -2199,27 +2865,38 @@ PLAN-ROOT SINK
 |
 07:TOP-N [LIMIT=3]
 |  order by: tinyint_col ASC
+|  row-size=89B cardinality=3
 |
 06:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 00:UNION
 |  pass-through-operands: 05
+|  row-size=89B cardinality=6
 |
 |--04:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  01:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--03:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 1
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 05:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 2
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ---- SCANRANGELOCATIONS
 NODE 2:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -2236,37 +2913,50 @@ PLAN-ROOT SINK
 |
 07:TOP-N [LIMIT=3]
 |  order by: tinyint_col ASC
+|  row-size=89B cardinality=3
 |
 11:AGGREGATE [FINALIZE]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 10:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |
 06:AGGREGATE [STREAMING]
 |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  row-size=89B cardinality=6
 |
 00:UNION
 |  pass-through-operands: 05
+|  row-size=89B cardinality=6
 |
 |--09:AGGREGATE [FINALIZE]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  08:EXCHANGE 
[HASH(id,bool_col,tinyint_col,smallint_col,int_col,bigint_col,float_col,double_col,date_string_col,string_col,timestamp_col,year,month)]
 |  |
 |  04:AGGREGATE [STREAMING]
 |  |  group by: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, 
float_col, double_col, date_string_col, string_col, timestamp_col, year, month
+|  |  row-size=89B cardinality=4
 |  |
 |  01:UNION
 |  |  pass-through-operands: all
+|  |  row-size=89B cardinality=4
 |  |
 |  |--03:SCAN HDFS [functional.alltypestiny]
+|  |     partition predicates: year = 2009, month = 1
 |  |     partitions=1/4 files=1 size=115B
+|  |     row-size=89B cardinality=2
 |  |
 |  02:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
+|     row-size=89B cardinality=2
 |
 05:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 2
    partitions=1/4 files=1 size=115B
+   row-size=89B cardinality=2
 ====
 // UNION ALL in subquery with a WHERE condition in the outer select.
 select x.* from
@@ -2281,22 +2971,29 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=13B cardinality=2
 |
 |--04:AGGREGATE [FINALIZE]
 |  |  output: count(*)
 |  |  group by: int_col, bool_col
+|  |  row-size=13B cardinality=1
 |  |
 |  03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
 |     predicates: functional.alltypestiny.int_col < 5, 
functional.alltypestiny.bool_col = FALSE
+|     row-size=5B cardinality=1
 |
 02:AGGREGATE [FINALIZE]
 |  output: count(*)
 |  group by: int_col, bool_col
+|  row-size=13B cardinality=1
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
    predicates: functional.alltypestiny.int_col < 5, 
functional.alltypestiny.bool_col = FALSE
+   row-size=5B cardinality=1
 ---- SCANRANGELOCATIONS
 NODE 1:
   HDFS SPLIT 
hdfs://localhost:20500/test-warehouse/alltypestiny/year=2009/month=1/090101.txt 
0:115
@@ -2309,34 +3006,43 @@ PLAN-ROOT SINK
 |
 00:UNION
 |  pass-through-operands: all
+|  row-size=13B cardinality=2
 |
 |--08:AGGREGATE [FINALIZE]
 |  |  output: count:merge(*)
 |  |  group by: int_col, bool_col
+|  |  row-size=13B cardinality=1
 |  |
 |  07:EXCHANGE [HASH(int_col,bool_col)]
 |  |
 |  04:AGGREGATE [STREAMING]
 |  |  output: count(*)
 |  |  group by: int_col, bool_col
+|  |  row-size=13B cardinality=1
 |  |
 |  03:SCAN HDFS [functional.alltypestiny]
+|     partition predicates: year = 2009, month = 1
 |     partitions=1/4 files=1 size=115B
 |     predicates: functional.alltypestiny.int_col < 5, 
functional.alltypestiny.bool_col = FALSE
+|     row-size=5B cardinality=1
 |
 06:AGGREGATE [FINALIZE]
 |  output: count:merge(*)
 |  group by: int_col, bool_col
+|  row-size=13B cardinality=1
 |
 05:EXCHANGE [HASH(int_col,bool_col)]
 |
 02:AGGREGATE [STREAMING]
 |  output: count(*)
 |  group by: int_col, bool_col
+|  row-size=13B cardinality=1
 |
 01:SCAN HDFS [functional.alltypestiny]
+   partition predicates: year = 2009, month = 1
    partitions=1/4 files=1 size=115B
    predicates: functional.alltypestiny.int_col < 5, 
functional.alltypestiny.bool_col = FALSE
+   row-size=5B cardinality=1
 ====
 // UNION ALL with only constant selects
 select 1, 'a', NULL, 10.f
@@ -2349,11 +3055,13 @@ PLAN-ROOT SINK
 |
 00:UNION
    constant-operands=3
+   row-size=15B cardinality=3
 ---- DISTRIBUTEDPLAN
 PLAN-ROOT SINK
 |
 00:UNION
    constant-operands=3
+   row-size=15B cardinality=3
 ====
 // UNION DISTINCT with only constant selects
 select 1, 'a', NULL, 10.0f
@@ -2366,17 +3074,21 @@ PLAN-ROOT SINK
 |
 01:AGGREGATE [FINALIZE]
 |  group by: 1, 'a', null, f
+|  row-size=18B cardinality=3
 |
 00:UNION
    constant-operands=3
+   row-size=18B cardinality=3
 ---- DISTRIBUTEDPLAN
 PLAN-ROOT SINK
 |
 01:AGGREGATE [FINALIZE]
 |  group by: 1, 'a', null, f
+|  row-size=18B cardinality=3
 |
 00:UNION
    constant-operands=3
+   row-size=18B cardinality=3
 ====
 // UNION ALL/DISTINCT with mixed constant selects and non-constant selects
 select 1, 'a', NULL, 10.f
@@ -2391,19

<TRUNCATED>

Reply via email to