You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by bo...@apache.org on 2019/08/29 12:44:07 UTC

[impala] branch master updated (0df613f -> 026c534)

This is an automated email from the ASF dual-hosted git repository.

boroknagyz pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git.


    from 0df613f  IMPALA-8895: Expose daemon health endpoint
     new 20dec47  [DOCS] CONCAT function returns NULL if any argument is NULL
     new 08ecb6d  IMPALA-8579: Ignore trivial alter table/partition events.
     new 152a764  IMPALA-8901: Fix # links on /catalog page.
     new a5cf105  IMPALA-7604: part 1: tests for agg cardinality
     new 94f7d12  IMPALA-7604: part 2: fixes for AggregationNode cardinality
     new 4e23a52  IMPALA-8902: Bump timeout in test_result_spooling:::test_spilling
     new 026c534  IMPALA-8851: Do not throw authorization exception in drop if exists queries

The 7 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 docs/topics/impala_string_functions.xml            |   11 +-
 .../java/org/apache/impala/analysis/Analyzer.java  |   17 +
 .../org/apache/impala/analysis/DropDbStmt.java     |   17 +-
 .../apache/impala/analysis/DropFunctionStmt.java   |   31 +-
 .../impala/analysis/DropTableOrViewStmt.java       |   17 +-
 .../main/java/org/apache/impala/analysis/Expr.java |    7 +-
 .../impala/catalog/events/MetastoreEvents.java     |   91 ++
 .../org/apache/impala/planner/AggregationNode.java |  103 +-
 .../apache/impala/service/CatalogOpExecutor.java   |   19 +-
 .../authorization/AuthorizationStmtTest.java       |   61 +-
 .../authorization/AuthorizationTestBase.java       |    4 +
 .../events/MetastoreEventsProcessorTest.java       |   59 ++
 .../org/apache/impala/planner/CardinalityTest.java |   74 +-
 .../org/apache/impala/planner/PlannerTest.java     |    9 +
 .../impala/testutil/TestSentryGroupMapper.java     |    1 +
 .../queries/PlannerTest/card-agg.test              |  657 +++++++++++++
 .../queries/PlannerTest/empty.test                 |   20 +-
 .../queries/PlannerTest/insert-sort-by.test        |  114 ++-
 .../queries/PlannerTest/joins.test                 |  436 ++++-----
 .../queries/PlannerTest/tpcds-all.test             | 1008 ++++++++++----------
 .../queries/QueryTest/create-database.test         |    2 +-
 tests/authorization/test_owner_privileges.py       |  143 +++
 tests/common/sentry_cache_test_suite.py            |    6 +
 tests/query_test/test_result_spooling.py           |    2 +-
 www/catalog.tmpl                                   |    4 +-
 25 files changed, 2046 insertions(+), 867 deletions(-)
 create mode 100644 testdata/workloads/functional-planner/queries/PlannerTest/card-agg.test


[impala] 04/07: IMPALA-7604: part 1: tests for agg cardinality

Posted by bo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

boroknagyz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git

commit a5cf105d95e9c15ce8065279f26366e021b5a432
Author: Tim Armstrong <ta...@cloudera.com>
AuthorDate: Fri Aug 23 15:50:13 2019 -0700

    IMPALA-7604: part 1: tests for agg cardinality
    
    Add tests that demonstrate bugs with overflow and
    multiple aggregation classes and provide a baseline
    to demonstrate the effects of the bugfixes.
    
    Testing:
    Added planner tests:
    * Cardinality estimates with multiple groups (both grouping and
      non-grouping aggs).
    * Overflow case from multiplication of grouping expr cardinality.
    * Overflow handling of addition of multiple groups.
    
    Change-Id: I59eaddbc5be253793293af064bb2d28a425564e1
    Reviewed-on: http://gerrit.cloudera.org:8080/14131
    Reviewed-by: Bikramjeet Vig <bi...@cloudera.com>
    Tested-by: Tim Armstrong <ta...@cloudera.com>
---
 .../org/apache/impala/planner/PlannerTest.java     |   9 +
 .../queries/PlannerTest/card-agg.test              | 660 +++++++++++++++++++++
 2 files changed, 669 insertions(+)

diff --git a/fe/src/test/java/org/apache/impala/planner/PlannerTest.java b/fe/src/test/java/org/apache/impala/planner/PlannerTest.java
index 606dbbe..3d7782a 100644
--- a/fe/src/test/java/org/apache/impala/planner/PlannerTest.java
+++ b/fe/src/test/java/org/apache/impala/planner/PlannerTest.java
@@ -85,6 +85,15 @@ public class PlannerTest extends PlannerTestBase {
         ImmutableSet.of(PlannerTestOption.VALIDATE_CARDINALITY));
   }
 
+  /**
+   * Cardinality for aggregations.
+   */
+  @Test
+  public void testAggCardinality() {
+    runPlannerTestFile("card-agg",
+        ImmutableSet.of(PlannerTestOption.VALIDATE_CARDINALITY));
+  }
+
   @Test
   public void testPredicatePropagation() {
     runPlannerTestFile("predicate-propagation");
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/card-agg.test b/testdata/workloads/functional-planner/queries/PlannerTest/card-agg.test
new file mode 100644
index 0000000..5fe9265
--- /dev/null
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/card-agg.test
@@ -0,0 +1,660 @@
+# Cardinality tests for aggregations.
+#
+# Non-grouping aggregation.
+select count(*), min(c_name) from tpch.customer
+---- PLAN
+PLAN-ROOT SINK
+|
+01:AGGREGATE [FINALIZE]
+|  output: count(*), min(c_name)
+|  row-size=20B cardinality=1
+|
+00:SCAN HDFS [tpch.customer]
+   HDFS partitions=1/1 files=1 size=23.08MB
+   row-size=30B cardinality=150.00K
+---- DISTRIBUTEDPLAN
+PLAN-ROOT SINK
+|
+03:AGGREGATE [FINALIZE]
+|  output: count:merge(*), min:merge(c_name)
+|  row-size=20B cardinality=1
+|
+02:EXCHANGE [UNPARTITIONED]
+|
+01:AGGREGATE
+|  output: count(*), min(c_name)
+|  row-size=20B cardinality=1
+|
+00:SCAN HDFS [tpch.customer]
+   HDFS partitions=1/1 files=1 size=23.08MB
+   row-size=30B cardinality=150.00K
+====
+# Simple grouping aggregation.
+select c_nationkey, count(*), min(c_phone)
+from tpch.customer c
+group by 1
+---- PLAN
+PLAN-ROOT SINK
+|
+01:AGGREGATE [FINALIZE]
+|  output: count(*), min(c_phone)
+|  group by: c_nationkey
+|  row-size=22B cardinality=25
+|
+00:SCAN HDFS [tpch.customer c]
+   HDFS partitions=1/1 files=1 size=23.08MB
+   row-size=29B cardinality=150.00K
+---- DISTRIBUTEDPLAN
+PLAN-ROOT SINK
+|
+04:EXCHANGE [UNPARTITIONED]
+|
+03:AGGREGATE [FINALIZE]
+|  output: count:merge(*), min:merge(c_phone)
+|  group by: c_nationkey
+|  row-size=22B cardinality=25
+|
+02:EXCHANGE [HASH(c_nationkey)]
+|
+01:AGGREGATE [STREAMING]
+|  output: count(*), min(c_phone)
+|  group by: c_nationkey
+|  row-size=22B cardinality=25
+|
+00:SCAN HDFS [tpch.customer c]
+   HDFS partitions=1/1 files=1 size=23.08MB
+   row-size=29B cardinality=150.00K
+====
+# Grouping aggregation with multiple keys where product of keys is greater than input
+# cardinality.
+select l_partkey, l_suppkey, count(*)
+from tpch.lineitem
+group by 1, 2
+---- PLAN
+PLAN-ROOT SINK
+|
+01:AGGREGATE [FINALIZE]
+|  output: count(*)
+|  group by: l_partkey, l_suppkey
+|  row-size=24B cardinality=6.00M
+|
+00:SCAN HDFS [tpch.lineitem]
+   HDFS partitions=1/1 files=1 size=718.94MB
+   row-size=16B cardinality=6.00M
+---- DISTRIBUTEDPLAN
+PLAN-ROOT SINK
+|
+04:EXCHANGE [UNPARTITIONED]
+|
+03:AGGREGATE [FINALIZE]
+|  output: count:merge(*)
+|  group by: l_partkey, l_suppkey
+|  row-size=24B cardinality=6.00M
+|
+02:EXCHANGE [HASH(l_partkey,l_suppkey)]
+|
+01:AGGREGATE [STREAMING]
+|  output: count(*)
+|  group by: l_partkey, l_suppkey
+|  row-size=24B cardinality=6.00M
+|
+00:SCAN HDFS [tpch.lineitem]
+   HDFS partitions=1/1 files=1 size=718.94MB
+   row-size=16B cardinality=6.00M
+====
+# Grouping aggregation with multiple keys where product of keys is less than
+# input cardinality.
+select l_partkey, l_linenumber, count(*)
+from tpch.lineitem
+group by 1, 2
+---- PLAN
+PLAN-ROOT SINK
+|
+01:AGGREGATE [FINALIZE]
+|  output: count(*)
+|  group by: l_partkey, l_linenumber
+|  row-size=20B cardinality=1.40M
+|
+00:SCAN HDFS [tpch.lineitem]
+   HDFS partitions=1/1 files=1 size=718.94MB
+   row-size=12B cardinality=6.00M
+---- DISTRIBUTEDPLAN
+PLAN-ROOT SINK
+|
+04:EXCHANGE [UNPARTITIONED]
+|
+03:AGGREGATE [FINALIZE]
+|  output: count:merge(*)
+|  group by: l_partkey, l_linenumber
+|  row-size=20B cardinality=1.40M
+|
+02:EXCHANGE [HASH(l_partkey,l_linenumber)]
+|
+01:AGGREGATE [STREAMING]
+|  output: count(*)
+|  group by: l_partkey, l_linenumber
+|  row-size=20B cardinality=1.40M
+|
+00:SCAN HDFS [tpch.lineitem]
+   HDFS partitions=1/1 files=1 size=718.94MB
+   row-size=12B cardinality=6.00M
+====
+# Grouping aggregation with multiple aggregation classes (multiple count distinct).
+# Cardinality for the first aggregation is the sum of cardinalities from the
+# aggregation classes.
+# BUG: some aggregation classes are double counted in the cardinality.
+select count(distinct l_orderkey), count(distinct l_partkey)
+from tpch.lineitem
+---- PLAN
+PLAN-ROOT SINK
+|
+03:AGGREGATE [FINALIZE]
+|  output: aggif(valid_tid() = 2, count(l_orderkey)), aggif(valid_tid() = 4, count(l_partkey))
+|  row-size=16B cardinality=1
+|
+02:AGGREGATE [FINALIZE]
+|  Class 0
+|    output: count(l_orderkey)
+|  Class 1
+|    output: count(l_partkey)
+|  row-size=16B cardinality=2
+|
+01:AGGREGATE
+|  Class 0
+|    group by: l_orderkey
+|  Class 1
+|    group by: l_partkey
+|  row-size=16B cardinality=3.33M
+|
+00:SCAN HDFS [tpch.lineitem]
+   HDFS partitions=1/1 files=1 size=718.94MB
+   row-size=16B cardinality=6.00M
+---- DISTRIBUTEDPLAN
+PLAN-ROOT SINK
+|
+03:AGGREGATE [FINALIZE]
+|  output: aggif(valid_tid() = 2, count(l_orderkey)), aggif(valid_tid() = 4, count(l_partkey))
+|  row-size=16B cardinality=1
+|
+07:AGGREGATE [FINALIZE]
+|  Class 0
+|    output: count:merge(l_orderkey)
+|  Class 1
+|    output: count:merge(l_partkey)
+|  row-size=16B cardinality=2
+|
+06:EXCHANGE [UNPARTITIONED]
+|
+02:AGGREGATE
+|  Class 0
+|    output: count(l_orderkey)
+|  Class 1
+|    output: count(l_partkey)
+|  row-size=16B cardinality=2
+|
+05:AGGREGATE
+|  Class 0
+|    group by: l_orderkey
+|  Class 1
+|    group by: l_partkey
+|  row-size=16B cardinality=3.33M
+|
+04:EXCHANGE [HASH(CASE valid_tid() WHEN 1 THEN murmur_hash(l_orderkey) WHEN 3 THEN murmur_hash(l_partkey) END)]
+|
+01:AGGREGATE [STREAMING]
+|  Class 0
+|    group by: l_orderkey
+|  Class 1
+|    group by: l_partkey
+|  row-size=16B cardinality=3.33M
+|
+00:SCAN HDFS [tpch.lineitem]
+   HDFS partitions=1/1 files=1 size=718.94MB
+   row-size=16B cardinality=6.00M
+====
+# Grouping aggregation with multiple aggregation classes (multiple count distinct).
+# In this case the sum of output cardinalities is greater than the sum of the
+# input cardinality.
+# BUG: output cardinality is capped at input cardinality.
+select l_partkey, count(distinct l_orderkey), count(distinct l_comment), count(distinct l_suppkey)
+from tpch.lineitem
+group by l_partkey
+---- PLAN
+PLAN-ROOT SINK
+|
+03:AGGREGATE [FINALIZE]
+|  output: aggif(valid_tid() = 2, count(l_orderkey)), aggif(valid_tid() = 4, count(l_comment)), aggif(valid_tid() = 6, count(l_suppkey))
+|  group by: CASE valid_tid() WHEN 2 THEN l_partkey WHEN 4 THEN l_partkey WHEN 6 THEN l_partkey END
+|  row-size=32B cardinality=200.52K
+|
+02:AGGREGATE [FINALIZE]
+|  Class 0
+|    output: count(l_orderkey)
+|    group by: l_partkey
+|  Class 1
+|    output: count(l_comment)
+|    group by: l_partkey
+|  Class 2
+|    output: count(l_suppkey)
+|    group by: l_partkey
+|  row-size=48B cardinality=1.40M
+|
+01:AGGREGATE
+|  Class 0
+|    group by: l_partkey, l_orderkey
+|  Class 1
+|    group by: l_partkey, l_comment
+|  Class 2
+|    group by: l_partkey, l_suppkey
+|  row-size=78B cardinality=6.00M
+|
+00:SCAN HDFS [tpch.lineitem]
+   HDFS partitions=1/1 files=1 size=718.94MB
+   row-size=62B cardinality=6.00M
+---- DISTRIBUTEDPLAN
+PLAN-ROOT SINK
+|
+08:EXCHANGE [UNPARTITIONED]
+|
+03:AGGREGATE [FINALIZE]
+|  output: aggif(valid_tid() = 2, count(l_orderkey)), aggif(valid_tid() = 4, count(l_comment)), aggif(valid_tid() = 6, count(l_suppkey))
+|  group by: CASE valid_tid() WHEN 2 THEN l_partkey WHEN 4 THEN l_partkey WHEN 6 THEN l_partkey END
+|  row-size=32B cardinality=200.52K
+|
+07:AGGREGATE [FINALIZE]
+|  Class 0
+|    output: count:merge(l_orderkey)
+|    group by: l_partkey
+|  Class 1
+|    output: count:merge(l_comment)
+|    group by: l_partkey
+|  Class 2
+|    output: count:merge(l_suppkey)
+|    group by: l_partkey
+|  row-size=48B cardinality=1.40M
+|
+06:EXCHANGE [HASH(CASE valid_tid() WHEN 2 THEN murmur_hash(l_partkey) WHEN 4 THEN murmur_hash(l_partkey) WHEN 6 THEN murmur_hash(l_partkey) END)]
+|
+02:AGGREGATE [STREAMING]
+|  Class 0
+|    output: count(l_orderkey)
+|    group by: l_partkey
+|  Class 1
+|    output: count(l_comment)
+|    group by: l_partkey
+|  Class 2
+|    output: count(l_suppkey)
+|    group by: l_partkey
+|  row-size=48B cardinality=1.40M
+|
+05:AGGREGATE
+|  Class 0
+|    group by: l_partkey, l_orderkey
+|  Class 1
+|    group by: l_partkey, l_comment
+|  Class 2
+|    group by: l_partkey, l_suppkey
+|  row-size=78B cardinality=6.00M
+|
+04:EXCHANGE [HASH(CASE valid_tid() WHEN 1 THEN murmur_hash(l_partkey) WHEN 3 THEN murmur_hash(l_partkey) WHEN 5 THEN murmur_hash(l_partkey) END,CASE valid_tid() WHEN 1 THEN murmur_hash(l_orderkey) WHEN 3 THEN murmur_hash(l_comment) WHEN 5 THEN murmur_hash(l_suppkey) END)]
+|
+01:AGGREGATE [STREAMING]
+|  Class 0
+|    group by: l_partkey, l_orderkey
+|  Class 1
+|    group by: l_partkey, l_comment
+|  Class 2
+|    group by: l_partkey, l_suppkey
+|  row-size=78B cardinality=6.00M
+|
+00:SCAN HDFS [tpch.lineitem]
+   HDFS partitions=1/1 files=1 size=718.94MB
+   row-size=62B cardinality=6.00M
+====
+# Mixed grouping and non-grouping aggregations.
+# BUG: output cardinality is capped at input cardinality.
+select count(distinct id), count(distinct int_col), count(*)
+from functional.alltypes
+---- PLAN
+PLAN-ROOT SINK
+|
+03:AGGREGATE [FINALIZE]
+|  output: aggif(valid_tid() = 2, count(id)), aggif(valid_tid() = 4, count(int_col)), aggif(valid_tid() = 5, count(*))
+|  row-size=24B cardinality=1
+|
+02:AGGREGATE [FINALIZE]
+|  Class 0
+|    output: count(id)
+|  Class 1
+|    output: count(int_col)
+|  Class 2
+|    output: count:merge(*)
+|  row-size=24B cardinality=3
+|
+01:AGGREGATE
+|  Class 0
+|    group by: id
+|  Class 1
+|    group by: int_col
+|  Class 2
+|    output: count(*)
+|  row-size=16B cardinality=7.30K
+|
+00:SCAN HDFS [functional.alltypes]
+   HDFS partitions=24/24 files=24 size=478.45KB
+   row-size=8B cardinality=7.30K
+---- DISTRIBUTEDPLAN
+PLAN-ROOT SINK
+|
+03:AGGREGATE [FINALIZE]
+|  output: aggif(valid_tid() = 2, count(id)), aggif(valid_tid() = 4, count(int_col)), aggif(valid_tid() = 5, count(*))
+|  row-size=24B cardinality=1
+|
+07:AGGREGATE [FINALIZE]
+|  Class 0
+|    output: count:merge(id)
+|  Class 1
+|    output: count:merge(int_col)
+|  Class 2
+|    output: count:merge(*)
+|  row-size=24B cardinality=3
+|
+06:EXCHANGE [UNPARTITIONED]
+|
+02:AGGREGATE
+|  Class 0
+|    output: count(id)
+|  Class 1
+|    output: count(int_col)
+|  Class 2
+|    output: count:merge(*)
+|  row-size=24B cardinality=3
+|
+05:AGGREGATE
+|  Class 0
+|    group by: id
+|  Class 1
+|    group by: int_col
+|  Class 2
+|    output: count:merge(*)
+|  row-size=16B cardinality=7.30K
+|
+04:EXCHANGE [HASH(CASE valid_tid() WHEN 1 THEN murmur_hash(id) WHEN 3 THEN murmur_hash(int_col) WHEN 5 THEN 0 END)]
+|
+01:AGGREGATE [STREAMING]
+|  Class 0
+|    group by: id
+|  Class 1
+|    group by: int_col
+|  Class 2
+|    output: count(*)
+|  row-size=16B cardinality=7.30K
+|
+00:SCAN HDFS [functional.alltypes]
+   HDFS partitions=24/24 files=24 size=478.45KB
+   row-size=8B cardinality=7.30K
+====
+# Test overflow handling for single aggregation class.
+# BUG: output cardinality overflows and is set to 0
+select distinct *
+from tpcds.store_sales s1, tpcds.store_sales s2, tpcds.store_sales s3,
+  tpcds.store_sales s4
+---- PLAN
+PLAN-ROOT SINK
+|
+07:AGGREGATE [FINALIZE]
+|  group by: s1.ss_sold_time_sk, s1.ss_item_sk, s1.ss_customer_sk, s1.ss_cdemo_sk, s1.ss_hdemo_sk, s1.ss_addr_sk, s1.ss_store_sk, s1.ss_promo_sk, s1.ss_ticket_number, s1.ss_quantity, s1.ss_wholesale_cost, s1.ss_list_price, s1.ss_sales_price, s1.ss_ext_discount_amt, s1.ss_ext_sales_price, s1.ss_ext_wholesale_cost, s1.ss_ext_list_price, s1.ss_ext_tax, s1.ss_coupon_amt, s1.ss_net_paid, s1.ss_net_paid_inc_tax, s1.ss_net_profit, s1.ss_sold_date_sk, s2.ss_sold_time_sk, s2.ss_item_sk, s2.ss_cus [...]
+|  row-size=400B cardinality=0
+|
+06:NESTED LOOP JOIN [CROSS JOIN]
+|  row-size=400B cardinality=9223372.04T
+|
+|--03:SCAN HDFS [tpcds.store_sales s4]
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
+|     row-size=100B cardinality=2.88M
+|
+05:NESTED LOOP JOIN [CROSS JOIN]
+|  row-size=300B cardinality=9223372.04T
+|
+|--02:SCAN HDFS [tpcds.store_sales s3]
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
+|     row-size=100B cardinality=2.88M
+|
+04:NESTED LOOP JOIN [CROSS JOIN]
+|  row-size=200B cardinality=8.30T
+|
+|--01:SCAN HDFS [tpcds.store_sales s2]
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
+|     row-size=100B cardinality=2.88M
+|
+00:SCAN HDFS [tpcds.store_sales s1]
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
+   row-size=100B cardinality=2.88M
+---- DISTRIBUTEDPLAN
+PLAN-ROOT SINK
+|
+13:EXCHANGE [UNPARTITIONED]
+|
+12:AGGREGATE [FINALIZE]
+|  group by: s1.ss_sold_time_sk, s1.ss_item_sk, s1.ss_customer_sk, s1.ss_cdemo_sk, s1.ss_hdemo_sk, s1.ss_addr_sk, s1.ss_store_sk, s1.ss_promo_sk, s1.ss_ticket_number, s1.ss_quantity, s1.ss_wholesale_cost, s1.ss_list_price, s1.ss_sales_price, s1.ss_ext_discount_amt, s1.ss_ext_sales_price, s1.ss_ext_wholesale_cost, s1.ss_ext_list_price, s1.ss_ext_tax, s1.ss_coupon_amt, s1.ss_net_paid, s1.ss_net_paid_inc_tax, s1.ss_net_profit, s1.ss_sold_date_sk, s2.ss_sold_time_sk, s2.ss_item_sk, s2.ss_cus [...]
+|  row-size=400B cardinality=0
+|
+11:EXCHANGE [HASH(s1.ss_sold_time_sk,s1.ss_item_sk,s1.ss_customer_sk,s1.ss_cdemo_sk,s1.ss_hdemo_sk,s1.ss_addr_sk,s1.ss_store_sk,s1.ss_promo_sk,s1.ss_ticket_number,s1.ss_quantity,s1.ss_wholesale_cost,s1.ss_list_price,s1.ss_sales_price,s1.ss_ext_discount_amt,s1.ss_ext_sales_price,s1.ss_ext_wholesale_cost,s1.ss_ext_list_price,s1.ss_ext_tax,s1.ss_coupon_amt,s1.ss_net_paid,s1.ss_net_paid_inc_tax,s1.ss_net_profit,s1.ss_sold_date_sk,s2.ss_sold_time_sk,s2.ss_item_sk,s2.ss_customer_sk,s2.ss_cdemo [...]
+|
+07:AGGREGATE [STREAMING]
+|  group by: s1.ss_sold_time_sk, s1.ss_item_sk, s1.ss_customer_sk, s1.ss_cdemo_sk, s1.ss_hdemo_sk, s1.ss_addr_sk, s1.ss_store_sk, s1.ss_promo_sk, s1.ss_ticket_number, s1.ss_quantity, s1.ss_wholesale_cost, s1.ss_list_price, s1.ss_sales_price, s1.ss_ext_discount_amt, s1.ss_ext_sales_price, s1.ss_ext_wholesale_cost, s1.ss_ext_list_price, s1.ss_ext_tax, s1.ss_coupon_amt, s1.ss_net_paid, s1.ss_net_paid_inc_tax, s1.ss_net_profit, s1.ss_sold_date_sk, s2.ss_sold_time_sk, s2.ss_item_sk, s2.ss_cus [...]
+|  row-size=400B cardinality=0
+|
+06:NESTED LOOP JOIN [CROSS JOIN, BROADCAST]
+|  row-size=400B cardinality=9223372.04T
+|
+|--10:EXCHANGE [BROADCAST]
+|  |
+|  03:SCAN HDFS [tpcds.store_sales s4]
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
+|     row-size=100B cardinality=2.88M
+|
+05:NESTED LOOP JOIN [CROSS JOIN, BROADCAST]
+|  row-size=300B cardinality=9223372.04T
+|
+|--09:EXCHANGE [BROADCAST]
+|  |
+|  02:SCAN HDFS [tpcds.store_sales s3]
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
+|     row-size=100B cardinality=2.88M
+|
+04:NESTED LOOP JOIN [CROSS JOIN, BROADCAST]
+|  row-size=200B cardinality=8.30T
+|
+|--08:EXCHANGE [BROADCAST]
+|  |
+|  01:SCAN HDFS [tpcds.store_sales s2]
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
+|     row-size=100B cardinality=2.88M
+|
+00:SCAN HDFS [tpcds.store_sales s1]
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
+   row-size=100B cardinality=2.88M
+====
+# Test overflow handling for summing multiple aggregation classes.
+# BUG: output cardinality overflows and is set to 0
+select t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk,
+    t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk,
+    t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity,
+    t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price,
+    t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost,
+    t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid,
+    t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk,
+    t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_customer_sk, t2.ss_cdemo_sk,
+    t2.ss_hdemo_sk, t2.ss_addr_sk, t2.ss_store_sk, t2.ss_promo_sk,
+    t2.ss_ticket_number, t2.ss_quantity, t2.ss_wholesale_cost,
+    t2.ss_list_price, t2.ss_sales_price, t2.ss_ext_discount_amt,
+    t2.ss_ext_sales_price, t2.ss_ext_wholesale_cost, t2.ss_ext_list_price,
+    t2.ss_ext_tax, t2.ss_coupon_amt, t2.ss_net_paid, t2.ss_net_paid_inc_tax,
+    t2.ss_net_profit, t2.ss_sold_date_sk, t3.ss_sold_time_sk, t3.ss_item_sk,
+    t3.ss_customer_sk, t3.ss_cdemo_sk, t3.ss_hdemo_sk, t3.ss_addr_sk,
+    t3.ss_store_sk, t3.ss_promo_sk, t3.ss_ticket_number, t3.ss_quantity,
+    t3.ss_wholesale_cost, t3.ss_list_price, t3.ss_sales_price,
+    t3.ss_ext_discount_amt, t3.ss_ext_sales_price, t3.ss_ext_wholesale_cost,
+    t3.ss_ext_list_price, t3.ss_ext_tax, t3.ss_coupon_amt, t3.ss_net_paid,
+    t3.ss_net_paid_inc_tax, t3.ss_net_profit, t3.ss_sold_date_sk,
+    t4.ss_sold_time_sk, t4.ss_item_sk, t4.ss_customer_sk, t4.ss_cdemo_sk,
+    t4.ss_hdemo_sk, t4.ss_addr_sk, t4.ss_store_sk, t4.ss_promo_sk,
+    t4.ss_ticket_number, t4.ss_quantity, t4.ss_wholesale_cost,
+    t4.ss_list_price, t4.ss_sales_price, t4.ss_ext_discount_amt,
+    t4.ss_ext_sales_price, t4.ss_ext_wholesale_cost, t4.ss_ext_list_price,
+    t4.ss_ext_tax, t4.ss_coupon_amt, t4.ss_net_paid, t4.ss_net_paid_inc_tax,
+    count(distinct t4.ss_net_profit), count(distinct t4.ss_sold_date_sk)
+from tpcds.store_sales t1, tpcds.store_sales t2, tpcds.store_sales t3,
+    tpcds.store_sales t4
+group by t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk,
+    t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk,
+    t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity,
+    t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price,
+    t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost,
+    t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid,
+    t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk,
+    t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_customer_sk, t2.ss_cdemo_sk,
+    t2.ss_hdemo_sk, t2.ss_addr_sk, t2.ss_store_sk, t2.ss_promo_sk,
+    t2.ss_ticket_number, t2.ss_quantity, t2.ss_wholesale_cost,
+    t2.ss_list_price, t2.ss_sales_price, t2.ss_ext_discount_amt,
+    t2.ss_ext_sales_price, t2.ss_ext_wholesale_cost, t2.ss_ext_list_price,
+    t2.ss_ext_tax, t2.ss_coupon_amt, t2.ss_net_paid, t2.ss_net_paid_inc_tax,
+    t2.ss_net_profit, t2.ss_sold_date_sk, t3.ss_sold_time_sk, t3.ss_item_sk,
+    t3.ss_customer_sk, t3.ss_cdemo_sk, t3.ss_hdemo_sk, t3.ss_addr_sk,
+    t3.ss_store_sk, t3.ss_promo_sk, t3.ss_ticket_number, t3.ss_quantity,
+    t3.ss_wholesale_cost, t3.ss_list_price, t3.ss_sales_price,
+    t3.ss_ext_discount_amt, t3.ss_ext_sales_price, t3.ss_ext_wholesale_cost,
+    t3.ss_ext_list_price, t3.ss_ext_tax, t3.ss_coupon_amt, t3.ss_net_paid,
+    t3.ss_net_paid_inc_tax, t3.ss_net_profit, t3.ss_sold_date_sk,
+    t4.ss_sold_time_sk, t4.ss_item_sk, t4.ss_customer_sk, t4.ss_cdemo_sk,
+    t4.ss_hdemo_sk, t4.ss_addr_sk, t4.ss_store_sk, t4.ss_promo_sk,
+    t4.ss_ticket_number, t4.ss_quantity, t4.ss_wholesale_cost,
+    t4.ss_list_price, t4.ss_sales_price, t4.ss_ext_discount_amt,
+    t4.ss_ext_sales_price, t4.ss_ext_wholesale_cost, t4.ss_ext_list_price,
+    t4.ss_ext_tax, t4.ss_coupon_amt, t4.ss_net_paid, t4.ss_net_paid_inc_tax
+---- PLAN
+PLAN-ROOT SINK
+|
+09:AGGREGATE [FINALIZE]
+|  output: aggif(valid_tid() = 5, count(t4.ss_net_profit)), aggif(valid_tid() = 7, count(t4.ss_sold_date_sk))
+|  group by: CASE valid_tid() WHEN 5 THEN t1.ss_sold_time_sk WHEN 7 THEN t1.ss_sold_time_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_item_sk WHEN 7 THEN t1.ss_item_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_customer_sk WHEN 7 THEN t1.ss_customer_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_cdemo_sk WHEN 7 THEN t1.ss_cdemo_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_hdemo_sk WHEN 7 THEN t1.ss_hdemo_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_addr_sk WHEN 7 THEN t1.ss_addr_sk END, CASE valid_ti [...]
+|  row-size=408B cardinality=0
+|
+08:AGGREGATE [FINALIZE]
+|  Class 0
+|    output: count(t4.ss_net_profit)
+|    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
+|  Class 1
+|    output: count(t4.ss_sold_date_sk)
+|    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
+|  row-size=800B cardinality=0
+|
+07:AGGREGATE
+|  Class 0
+|    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
+|  Class 1
+|    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
+|  row-size=792B cardinality=0
+|
+06:NESTED LOOP JOIN [CROSS JOIN]
+|  row-size=400B cardinality=9223372.04T
+|
+|--03:SCAN HDFS [tpcds.store_sales t4]
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
+|     row-size=100B cardinality=2.88M
+|
+05:NESTED LOOP JOIN [CROSS JOIN]
+|  row-size=300B cardinality=9223372.04T
+|
+|--02:SCAN HDFS [tpcds.store_sales t3]
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
+|     row-size=100B cardinality=2.88M
+|
+04:NESTED LOOP JOIN [CROSS JOIN]
+|  row-size=200B cardinality=8.30T
+|
+|--01:SCAN HDFS [tpcds.store_sales t2]
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
+|     row-size=100B cardinality=2.88M
+|
+00:SCAN HDFS [tpcds.store_sales t1]
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
+   row-size=100B cardinality=2.88M
+---- DISTRIBUTEDPLAN
+PLAN-ROOT SINK
+|
+17:EXCHANGE [UNPARTITIONED]
+|
+09:AGGREGATE [FINALIZE]
+|  output: aggif(valid_tid() = 5, count(t4.ss_net_profit)), aggif(valid_tid() = 7, count(t4.ss_sold_date_sk))
+|  group by: CASE valid_tid() WHEN 5 THEN t1.ss_sold_time_sk WHEN 7 THEN t1.ss_sold_time_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_item_sk WHEN 7 THEN t1.ss_item_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_customer_sk WHEN 7 THEN t1.ss_customer_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_cdemo_sk WHEN 7 THEN t1.ss_cdemo_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_hdemo_sk WHEN 7 THEN t1.ss_hdemo_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_addr_sk WHEN 7 THEN t1.ss_addr_sk END, CASE valid_ti [...]
+|  row-size=408B cardinality=0
+|
+16:AGGREGATE [FINALIZE]
+|  Class 0
+|    output: count:merge(t4.ss_net_profit)
+|    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
+|  Class 1
+|    output: count:merge(t4.ss_sold_date_sk)
+|    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
+|  row-size=800B cardinality=0
+|
+15:EXCHANGE [HASH(CASE valid_tid() WHEN 5 THEN murmur_hash(t1.ss_sold_time_sk) WHEN 7 THEN murmur_hash(t1.ss_sold_time_sk) END,CASE valid_tid() WHEN 5 THEN murmur_hash(t1.ss_item_sk) WHEN 7 THEN murmur_hash(t1.ss_item_sk) END,CASE valid_tid() WHEN 5 THEN murmur_hash(t1.ss_customer_sk) WHEN 7 THEN murmur_hash(t1.ss_customer_sk) END,CASE valid_tid() WHEN 5 THEN murmur_hash(t1.ss_cdemo_sk) WHEN 7 THEN murmur_hash(t1.ss_cdemo_sk) END,CASE valid_tid() WHEN 5 THEN murmur_hash(t1.ss_hdemo_sk) W [...]
+|
+08:AGGREGATE [STREAMING]
+|  Class 0
+|    output: count(t4.ss_net_profit)
+|    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
+|  Class 1
+|    output: count(t4.ss_sold_date_sk)
+|    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
+|  row-size=800B cardinality=0
+|
+14:AGGREGATE
+|  Class 0
+|    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
+|  Class 1
+|    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
+|  row-size=792B cardinality=0
+|
+13:EXCHANGE [HASH(CASE valid_tid() WHEN 4 THEN murmur_hash(t1.ss_sold_time_sk) WHEN 6 THEN murmur_hash(t1.ss_sold_time_sk) END,CASE valid_tid() WHEN 4 THEN murmur_hash(t1.ss_item_sk) WHEN 6 THEN murmur_hash(t1.ss_item_sk) END,CASE valid_tid() WHEN 4 THEN murmur_hash(t1.ss_customer_sk) WHEN 6 THEN murmur_hash(t1.ss_customer_sk) END,CASE valid_tid() WHEN 4 THEN murmur_hash(t1.ss_cdemo_sk) WHEN 6 THEN murmur_hash(t1.ss_cdemo_sk) END,CASE valid_tid() WHEN 4 THEN murmur_hash(t1.ss_hdemo_sk) W [...]
+|
+07:AGGREGATE [STREAMING]
+|  Class 0
+|    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
+|  Class 1
+|    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
+|  row-size=792B cardinality=0
+|
+06:NESTED LOOP JOIN [CROSS JOIN, BROADCAST]
+|  row-size=400B cardinality=9223372.04T
+|
+|--12:EXCHANGE [BROADCAST]
+|  |
+|  03:SCAN HDFS [tpcds.store_sales t4]
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
+|     row-size=100B cardinality=2.88M
+|
+05:NESTED LOOP JOIN [CROSS JOIN, BROADCAST]
+|  row-size=300B cardinality=9223372.04T
+|
+|--11:EXCHANGE [BROADCAST]
+|  |
+|  02:SCAN HDFS [tpcds.store_sales t3]
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
+|     row-size=100B cardinality=2.88M
+|
+04:NESTED LOOP JOIN [CROSS JOIN, BROADCAST]
+|  row-size=200B cardinality=8.30T
+|
+|--10:EXCHANGE [BROADCAST]
+|  |
+|  01:SCAN HDFS [tpcds.store_sales t2]
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
+|     row-size=100B cardinality=2.88M
+|
+00:SCAN HDFS [tpcds.store_sales t1]
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
+   row-size=100B cardinality=2.88M
+====


[impala] 07/07: IMPALA-8851: Do not throw authorization exception in drop if exists queries

Posted by bo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

boroknagyz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git

commit 026c5345e0e27383244d757660856e8a157aac20
Author: Vihang Karajgaonkar <vi...@cloudera.com>
AuthorDate: Tue Aug 13 11:54:42 2019 -0700

    IMPALA-8851: Do not throw authorization exception in drop if exists queries
    
    Note that this is the continuation of work in
    https://github.com/vihangk1/impala/commits/IMPALA-8851
    
    This patch's goal is to change Impala's behavior in the following case:
    - the query is a DROP TABLE/VIEW/DATABASE/FUNCTIONS IF EXISTS statement
    - the given object does not exist
    - the user has some kind of privilege on the object, which imples the
      privilege to know whether object exists, but does not have DROP
      privilege on the object
    
    Until now this lead to an authorization exception, while it will be
    allowed with this change.
    
    An example where this is useful is a user who has CREATE privilege on
    a database, and creates table t_owned, and gets ownership of the
    table. In this case DROP TABLE IF EXISTS was non idempotent:
    DROP TABLE IF EXISTS t_owned;
    -> success
    DROP TABLE IF EXISTS t_owned;
    -> authorization error, as the privileges for the table were
       deleted when the table was successfully dropped
    
    After this change the second statement will be also successful.
    
    The authorization logic has to avoid leaking information that the
    user has no right to know. For this reason DROP IF EXISTS has to
    return the same error message regardless whether the object exists
    or not if the user has no right to know it's existence. This is
    achieved with the following pattern:
    - in the IF EXISTS case first an ANY privilege is registered, then
      the existence of the object is checked and if it doesn't exist,
      the analysis returns successfully
    - if the object exists, the DROP privilege is registered (if there is
      no IF EXISTS in the query, this always happens)
    - as the authorization logic checks privileges in the order of
      registration, first the ANY will be checked, and DROP will be only
      checked if the user has ANY privileges
    
    Testing:
    - Added a new test case in the sentry tests which confirms that the
    authorization exception is not thrown when a drop if exists query is
    issued on a object which does not exist.
    - Changed several tests affected by the new behavior.
    - Ran core tests.
    
    Change-Id: Iba068935e5da92d71e16e2321afdb8e7b781086a
    Reviewed-on: http://gerrit.cloudera.org:8080/14121
    Reviewed-by: Impala Public Jenkins <im...@cloudera.com>
    Tested-by: Impala Public Jenkins <im...@cloudera.com>
---
 .../java/org/apache/impala/analysis/Analyzer.java  |  17 +++
 .../org/apache/impala/analysis/DropDbStmt.java     |  17 ++-
 .../apache/impala/analysis/DropFunctionStmt.java   |  31 +++--
 .../impala/analysis/DropTableOrViewStmt.java       |  17 ++-
 .../apache/impala/service/CatalogOpExecutor.java   |  19 ++-
 .../authorization/AuthorizationStmtTest.java       |  61 ++++++---
 .../authorization/AuthorizationTestBase.java       |   4 +
 .../impala/testutil/TestSentryGroupMapper.java     |   1 +
 .../queries/QueryTest/create-database.test         |   2 +-
 tests/authorization/test_owner_privileges.py       | 143 +++++++++++++++++++++
 tests/common/sentry_cache_test_suite.py            |   6 +
 11 files changed, 280 insertions(+), 38 deletions(-)

diff --git a/fe/src/main/java/org/apache/impala/analysis/Analyzer.java b/fe/src/main/java/org/apache/impala/analysis/Analyzer.java
index 3936722..4f23fa0 100644
--- a/fe/src/main/java/org/apache/impala/analysis/Analyzer.java
+++ b/fe/src/main/java/org/apache/impala/analysis/Analyzer.java
@@ -2651,6 +2651,23 @@ public class Analyzer {
   }
 
   /**
+   * Checks if a table exists without registering privileges.
+   */
+  public boolean tableExists(TableName tblName) {
+    Preconditions.checkNotNull(tblName);
+    TableName fqTableName = getFqTableName(tblName);
+    return globalState_.stmtTableCache.tables.containsKey(fqTableName);
+  }
+
+  /**
+   * Checks if a database exists without registering privileges.
+   */
+  public boolean dbExists(String dbName) {
+    Preconditions.checkNotNull(dbName);
+    return getCatalog().getDb(dbName) != null;
+  }
+
+  /**
    * Returns the Table with the given name from the 'loadedTables' map in the global
    * analysis state. Throws an AnalysisException if the table or the db does not exist.
    * Throws a TableLoadingException if the registered table failed to load.
diff --git a/fe/src/main/java/org/apache/impala/analysis/DropDbStmt.java b/fe/src/main/java/org/apache/impala/analysis/DropDbStmt.java
index 68aa5ba..386579f 100644
--- a/fe/src/main/java/org/apache/impala/analysis/DropDbStmt.java
+++ b/fe/src/main/java/org/apache/impala/analysis/DropDbStmt.java
@@ -68,7 +68,19 @@ public class DropDbStmt extends StatementBase {
 
   @Override
   public void analyze(Analyzer analyzer) throws AnalysisException {
-    FeDb db = analyzer.getDb(dbName_, Privilege.DROP, false);
+    // Set the servername here if authorization is enabled because analyzer_ is not
+    // available in the toThrift() method.
+    serverName_ = analyzer.getServerName();
+    if (ifExists_) {
+      // Start with ANY privilege in case of IF EXISTS, and register DROP privilege
+      // later only if the database exists. See IMPALA-8851 for more explanation.
+      analyzer.registerPrivReq(builder ->
+          builder.allOf(Privilege.ANY)
+              .onDb(dbName_)
+              .build());
+      if (!analyzer.dbExists(dbName_)) return;
+    }
+    FeDb db = analyzer.getDb(dbName_, Privilege.DROP, false, false);
     if (db == null && !ifExists_) {
       throw new AnalysisException(Analyzer.DB_DOES_NOT_EXIST_ERROR_MSG + dbName_);
     }
@@ -79,8 +91,5 @@ public class DropDbStmt extends StatementBase {
     if (db != null && db.numFunctions() > 0 && !cascade_) {
       throw new AnalysisException("Cannot drop non-empty database: " + dbName_);
     }
-    // Set the servername here if authorization is enabled because analyzer_ is not
-    // available in the toThrift() method.
-    serverName_ = analyzer.getServerName();
   }
 }
diff --git a/fe/src/main/java/org/apache/impala/analysis/DropFunctionStmt.java b/fe/src/main/java/org/apache/impala/analysis/DropFunctionStmt.java
index b05c286..b87b9f6 100644
--- a/fe/src/main/java/org/apache/impala/analysis/DropFunctionStmt.java
+++ b/fe/src/main/java/org/apache/impala/analysis/DropFunctionStmt.java
@@ -83,26 +83,37 @@ public class DropFunctionStmt extends StatementBase {
           false);
     }
 
-    analyzer.registerPrivReq(builder ->
-        builder.onFunction(desc_.dbName(), desc_.signatureString())
-            .allOf(Privilege.DROP)
-            .build());
+    // Start with ANY privilege in case of IF EXISTS, and register DROP privilege later
+    // only if the function exists. See IMPALA-8851 for more explanation.
+    registerFnPriv(analyzer, ifExists_ ? Privilege.ANY : Privilege.DROP);
 
     FeDb db =  analyzer.getDb(desc_.dbName(), false);
-    if (db == null && !ifExists_) {
+    if (db == null) {
+      if (ifExists_) return;
+      // db does not exist and if exists clause is not provided
       throw new AnalysisException(Analyzer.DB_DOES_NOT_EXIST_ERROR_MSG + desc_.dbName());
     }
-
-    if (!hasSignature() && db != null && db.getFunctions(
-        desc_.functionName()).isEmpty() && !ifExists_) {
+    if (!hasSignature() && db.getFunctions(desc_.functionName()).isEmpty()) {
+      if (ifExists_) return;
       throw new AnalysisException(
           Analyzer.FN_DOES_NOT_EXIST_ERROR_MSG + desc_.functionName());
     }
-
     if (hasSignature() && analyzer.getCatalog().getFunction(
-        desc_, Function.CompareMode.IS_IDENTICAL) == null && !ifExists_) {
+        desc_, Function.CompareMode.IS_IDENTICAL) == null) {
+      if (ifExists_) return;
       throw new AnalysisException(
           Analyzer.FN_DOES_NOT_EXIST_ERROR_MSG + desc_.signatureString());
     }
+
+    // Register the "stronger" DROP privilege if only ANY was registered due to
+    // IF EXISTS.
+    if (ifExists_) registerFnPriv(analyzer, Privilege.DROP);
+  }
+
+  private void registerFnPriv(Analyzer analyzer, Privilege priv) {
+    analyzer.registerPrivReq(builder ->
+          builder.onFunction(desc_.dbName(), desc_.signatureString())
+              .allOf(priv)
+              .build());
   }
 }
diff --git a/fe/src/main/java/org/apache/impala/analysis/DropTableOrViewStmt.java b/fe/src/main/java/org/apache/impala/analysis/DropTableOrViewStmt.java
index 86da283..cf80569 100644
--- a/fe/src/main/java/org/apache/impala/analysis/DropTableOrViewStmt.java
+++ b/fe/src/main/java/org/apache/impala/analysis/DropTableOrViewStmt.java
@@ -107,14 +107,27 @@ public class DropTableOrViewStmt extends StatementBase {
     // available in the toThrift() method.
     serverName_ = analyzer.getServerName();
     try {
+      if (ifExists_) {
+        // Start with ANY privilege in case of IF EXISTS, and register DROP privilege
+        // later only if the table exists. See IMPALA-8851 for more explanation.
+        analyzer.registerPrivReq(builder ->
+            builder.allOf(Privilege.ANY)
+                .onTable(dbName_, getTbl())
+                .build());
+        if (!analyzer.tableExists(tableName_)) return;
+      }
       FeTable table = analyzer.getTable(tableName_, /* add access event */ true,
           /* add column-level privilege */ false, Privilege.DROP);
       Preconditions.checkNotNull(table);
       if (table instanceof FeView && dropTable_) {
+        // DROP VIEW IF EXISTS 'table' succeeds, similarly to Hive, but unlike postgres.
+        if (ifExists_) return;
         throw new AnalysisException(String.format(
             "DROP TABLE not allowed on a view: %s.%s", dbName_, getTbl()));
       }
       if (!(table instanceof FeView) && !dropTable_) {
+        // DROP TABLE IF EXISTS 'view' succeeds, similarly to Hive, but unlike postgres.
+        if (ifExists_) return;
         throw new AnalysisException(String.format(
             "DROP VIEW not allowed on a table: %s.%s", dbName_, getTbl()));
       }
@@ -123,7 +136,6 @@ public class DropTableOrViewStmt extends StatementBase {
         analyzer.checkTableCapability(table, Analyzer.OperationType.WRITE);
         analyzer.ensureTableNotFullAcid(table);
       }
-
     } catch (TableLoadingException e) {
       // We should still try to DROP tables that failed to load, so that tables that are
       // in a bad state, eg. deleted externally from Kudu, can be dropped.
@@ -134,9 +146,6 @@ public class DropTableOrViewStmt extends StatementBase {
           analyzer.getFqTableName(tableName_).toString(), TCatalogObjectType.TABLE,
           Privilege.DROP.toString()));
       LOG.info("Ignoring TableLoadingException for {}", tableName_);
-    } catch (AnalysisException e) {
-      if (!ifExists_) throw e;
-      LOG.info("Ignoring AnalysisException for {}", tableName_);
     }
   }
 
diff --git a/fe/src/main/java/org/apache/impala/service/CatalogOpExecutor.java b/fe/src/main/java/org/apache/impala/service/CatalogOpExecutor.java
index 64b1ae1..ed301b0 100644
--- a/fe/src/main/java/org/apache/impala/service/CatalogOpExecutor.java
+++ b/fe/src/main/java/org/apache/impala/service/CatalogOpExecutor.java
@@ -1509,12 +1509,22 @@ public class CatalogOpExecutor {
       // The Kudu tables in the HMS should have been dropped at this point
       // with the Hive Metastore integration enabled.
       try (MetaStoreClient msClient = catalog_.getMetaStoreClient()) {
+        // HMS client does not have a way to identify if the database was dropped or
+        // not if the ignoreIfUnknown flag is true. Hence we always pass the
+        // ignoreIfUnknown as false and catch the NoSuchObjectFoundException and
+        // determine if we should throw or not
         msClient.getHiveClient().dropDatabase(
-            params.getDb(), true, params.if_exists, params.cascade);
+            params.getDb(), /* deleteData */true, /* ignoreIfUnknown */false,
+            params.cascade);
         addSummary(resp, "Database has been dropped.");
       } catch (TException e) {
-        throw new ImpalaRuntimeException(
-            String.format(HMS_RPC_ERROR_FORMAT_STR, "dropDatabase"), e);
+        if (e instanceof NoSuchObjectException && params.if_exists) {
+          // if_exists param was set; we ignore the NoSuchObjectFoundException
+          addSummary(resp, "Database does not exist.");
+        } else {
+          throw new ImpalaRuntimeException(
+              String.format(HMS_RPC_ERROR_FORMAT_STR, "dropDatabase"), e);
+        }
       }
       Db removedDb = catalog_.removeDb(params.getDb());
 
@@ -1538,6 +1548,9 @@ public class CatalogOpExecutor {
     Preconditions.checkNotNull(removedObject);
     resp.result.setVersion(removedObject.getCatalog_version());
     resp.result.addToRemoved_catalog_objects(removedObject);
+    // it is possible that HMS database has been removed out of band externally. In
+    // such a case we still would want to add the summary of the operation as database
+    // has been dropped since we cleaned up state from CatalogServer
     addSummary(resp, "Database has been dropped.");
   }
 
diff --git a/fe/src/test/java/org/apache/impala/authorization/AuthorizationStmtTest.java b/fe/src/test/java/org/apache/impala/authorization/AuthorizationStmtTest.java
index ec957e1..f839138 100644
--- a/fe/src/test/java/org/apache/impala/authorization/AuthorizationStmtTest.java
+++ b/fe/src/test/java/org/apache/impala/authorization/AuthorizationStmtTest.java
@@ -1904,9 +1904,12 @@ public class AuthorizationStmtTest extends AuthorizationTestBase {
       test.ok(onServer(TPrivilegeLevel.ALL))
           .ok(onServer(TPrivilegeLevel.OWNER))
           .ok(onServer(TPrivilegeLevel.DROP))
-          .error(dropError("nodb"))
-          .error(dropError("nodb"), onServer(allExcept(
-              TPrivilegeLevel.ALL, TPrivilegeLevel.OWNER, TPrivilegeLevel.DROP)));
+          .ok(onServer(TPrivilegeLevel.CREATE))
+          .ok(onServer(TPrivilegeLevel.SELECT))
+          .ok(onServer(TPrivilegeLevel.INSERT))
+          .ok(onServer(TPrivilegeLevel.ALTER))
+          .ok(onServer(TPrivilegeLevel.REFRESH))
+          .error(accessError("nodb"));
     }
 
     // Dropping system database is not allowed even if with ALL/OWNER privilege on server.
@@ -1956,14 +1959,20 @@ public class AuthorizationStmtTest extends AuthorizationTestBase {
         .ok(onServer(TPrivilegeLevel.ALL))
         .ok(onServer(TPrivilegeLevel.OWNER))
         .ok(onServer(TPrivilegeLevel.DROP))
+        .ok(onServer(TPrivilegeLevel.CREATE))
+        .ok(onServer(TPrivilegeLevel.SELECT))
+        .ok(onServer(TPrivilegeLevel.INSERT))
+        .ok(onServer(TPrivilegeLevel.ALTER))
+        .ok(onServer(TPrivilegeLevel.REFRESH))
         .ok(onDatabase("functional", TPrivilegeLevel.ALL))
         .ok(onDatabase("functional", TPrivilegeLevel.OWNER))
         .ok(onDatabase("functional", TPrivilegeLevel.DROP))
-        .error(dropError("functional.notbl"))
-        .error(dropError("functional.notbl"), onServer(allExcept(
-            TPrivilegeLevel.ALL, TPrivilegeLevel.OWNER, TPrivilegeLevel.DROP)))
-        .error(dropError("functional.notbl"), onDatabase("functional",
-            allExcept(TPrivilegeLevel.ALL, TPrivilegeLevel.OWNER, TPrivilegeLevel.DROP)));
+        .ok(onDatabase("functional", TPrivilegeLevel.CREATE))
+        .ok(onDatabase("functional", TPrivilegeLevel.SELECT))
+        .ok(onDatabase("functional", TPrivilegeLevel.INSERT))
+        .ok(onDatabase("functional", TPrivilegeLevel.ALTER))
+        .ok(onDatabase("functional", TPrivilegeLevel.REFRESH))
+        .error(accessError("functional.notbl"));
 
     // Dropping any tables in the system database is not allowed even with ALL/OWNER
     // privilege on server.
@@ -2014,14 +2023,20 @@ public class AuthorizationStmtTest extends AuthorizationTestBase {
         .ok(onServer(TPrivilegeLevel.ALL))
         .ok(onServer(TPrivilegeLevel.OWNER))
         .ok(onServer(TPrivilegeLevel.DROP))
+        .ok(onServer(TPrivilegeLevel.CREATE))
+        .ok(onServer(TPrivilegeLevel.SELECT))
+        .ok(onServer(TPrivilegeLevel.INSERT))
+        .ok(onServer(TPrivilegeLevel.ALTER))
+        .ok(onServer(TPrivilegeLevel.REFRESH))
         .ok(onDatabase("functional", TPrivilegeLevel.ALL))
         .ok(onDatabase("functional", TPrivilegeLevel.OWNER))
         .ok(onDatabase("functional", TPrivilegeLevel.DROP))
-        .error(dropError("functional.noview"))
-        .error(dropError("functional.noview"), onServer(allExcept(
-            TPrivilegeLevel.ALL, TPrivilegeLevel.OWNER, TPrivilegeLevel.DROP)))
-        .error(dropError("functional.noview"), onDatabase("functional",
-            allExcept(TPrivilegeLevel.ALL, TPrivilegeLevel.OWNER, TPrivilegeLevel.DROP)));
+        .ok(onDatabase("functional", TPrivilegeLevel.CREATE))
+        .ok(onDatabase("functional", TPrivilegeLevel.SELECT))
+        .ok(onDatabase("functional", TPrivilegeLevel.INSERT))
+        .ok(onDatabase("functional", TPrivilegeLevel.ALTER))
+        .ok(onDatabase("functional", TPrivilegeLevel.REFRESH))
+        .error(accessError("functional.noview"));
 
     // Dropping any views in the system database is not allowed even with ALL/OWNER
     // privilege on server.
@@ -2742,9 +2757,23 @@ public class AuthorizationStmtTest extends AuthorizationTestBase {
 
       // Function does not exist but with if exists clause.
       authorize("drop function if exists functional.g()")
-          .error(dropFunctionError("functional.g()"))
-          .error(dropFunctionError("functional.g()"), onServer(allExcept(
-              TPrivilegeLevel.ALL, TPrivilegeLevel.OWNER, TPrivilegeLevel.DROP)));
+          .ok(onServer(TPrivilegeLevel.ALL))
+          .ok(onServer(TPrivilegeLevel.OWNER))
+          .ok(onServer(TPrivilegeLevel.DROP))
+          .ok(onServer(TPrivilegeLevel.CREATE))
+          .ok(onServer(TPrivilegeLevel.SELECT))
+          .ok(onServer(TPrivilegeLevel.INSERT))
+          .ok(onServer(TPrivilegeLevel.ALTER))
+          .ok(onServer(TPrivilegeLevel.REFRESH))
+          .ok(onDatabase("functional", TPrivilegeLevel.ALL))
+          .ok(onDatabase("functional", TPrivilegeLevel.OWNER))
+          .ok(onDatabase("functional", TPrivilegeLevel.DROP))
+          .ok(onDatabase("functional", TPrivilegeLevel.CREATE))
+          .ok(onDatabase("functional", TPrivilegeLevel.SELECT))
+          .ok(onDatabase("functional", TPrivilegeLevel.INSERT))
+          .ok(onDatabase("functional", TPrivilegeLevel.ALTER))
+          .ok(onDatabase("functional", TPrivilegeLevel.REFRESH))
+          .error(accessFunctionError("functional.g()"));
     } finally {
       removeFunction(fn);
     }
diff --git a/fe/src/test/java/org/apache/impala/authorization/AuthorizationTestBase.java b/fe/src/test/java/org/apache/impala/authorization/AuthorizationTestBase.java
index a4787f3..6b968db 100644
--- a/fe/src/test/java/org/apache/impala/authorization/AuthorizationTestBase.java
+++ b/fe/src/test/java/org/apache/impala/authorization/AuthorizationTestBase.java
@@ -672,6 +672,10 @@ public abstract class AuthorizationTestBase extends FrontendTestBase {
     return "User '%s' does not have privileges to DROP functions in: " + object;
   }
 
+  protected static String accessFunctionError(String object) {
+    return "User '%s' does not have privileges to ANY functions in: " + object;
+  }
+
   protected static String columnMaskError(String object) {
     return "Impala does not support column masking yet. Column masking is enabled on " +
         "column: " + object;
diff --git a/fe/src/test/java/org/apache/impala/testutil/TestSentryGroupMapper.java b/fe/src/test/java/org/apache/impala/testutil/TestSentryGroupMapper.java
index 8ed8a7e..3237bde 100644
--- a/fe/src/test/java/org/apache/impala/testutil/TestSentryGroupMapper.java
+++ b/fe/src/test/java/org/apache/impala/testutil/TestSentryGroupMapper.java
@@ -58,6 +58,7 @@ public class TestSentryGroupMapper implements GroupMappingService {
     // User to groups for test_owner_privilege tests.
     groupsMap_.put("oo_user1", Sets.newHashSet("oo_group1"));
     groupsMap_.put("oo_user2", Sets.newHashSet("oo_group2"));
+    groupsMap_.put("oo_user3", Sets.newHashSet("oo_group3"));
 
     groupsMap_.put("foobar", Sets.newHashSet("foobar"));
     groupsMap_.put("FOOBAR", Sets.newHashSet("FOOBAR"));
diff --git a/testdata/workloads/functional-query/queries/QueryTest/create-database.test b/testdata/workloads/functional-query/queries/QueryTest/create-database.test
index 433c50f..50765de 100644
--- a/testdata/workloads/functional-query/queries/QueryTest/create-database.test
+++ b/testdata/workloads/functional-query/queries/QueryTest/create-database.test
@@ -53,7 +53,7 @@ STRING, STRING
 # Dropping a non-existent databases is ok with IF EXISTS
 drop database if exists $DATABASE_2
 ---- RESULTS
-'Database has been dropped.'
+'Database does not exist.'
 ====
 ---- QUERY
 # Test DROP DATABASE ... CASCADE
diff --git a/tests/authorization/test_owner_privileges.py b/tests/authorization/test_owner_privileges.py
index 4a183e9..0c3fd44 100644
--- a/tests/authorization/test_owner_privileges.py
+++ b/tests/authorization/test_owner_privileges.py
@@ -127,6 +127,149 @@ class TestOwnerPrivileges(SentryCacheTestSuite):
                     "org.apache.impala.testutil.TestSentryResourceAuthorizationProvider"
                     .format(SENTRY_CONFIG_FILE_OO, SENTRY_LONG_POLLING_FREQUENCY_S),
       sentry_config=SENTRY_CONFIG_FILE_OO,
+      sentry_log_dir="{0}/test_drop_table_if_exists".format(SENTRY_BASE_LOG_DIR))
+  def test_drop_if_exists(self, vector, unique_database):
+    try:
+      # we need to use a separate db for testing the drop database if exists case
+      # For others we can rely on using unique_database which gets cleaned up
+      # automatically
+      test_db = "test_drop_if_exists_db"
+      self._setup_drop_if_exist_test(unique_database, test_db)
+      self._execute_drop_if_exists(TestObject(TestObject.DATABASE, test_db))
+      self._execute_drop_if_exists(TestObject(TestObject.TABLE, unique_database +
+          ".test_table"))
+      self._execute_drop_if_exists(TestObject(TestObject.VIEW, unique_database +
+          ".test_view"))
+      self._execute_drop_if_exists(TestObject(TestObject.FUNCTION, unique_database +
+          ".test_func()"))
+    finally:
+      self._cleanup_drop_if_exist_test(test_db)
+
+  def _setup_drop_if_exist_test(self, unique_database, test_db):
+    # Cleanup test_db, as the previous test run may have not been able to clean it up
+    self.execute_query("drop database if exists %s" % test_db)
+
+    # create a role which can create objects on this server
+    # for the purposes of this test oo_user1 will have privileges
+    # to create (and drop) objects while oo_user_2 will not have drop privileges
+    # oo_user_3 will have privileges to select on the server but not to drop
+    for role_name in self.execute_query("show roles").data:
+      if role_name in ['oo_user1_role', 'oo_user2_role', 'oo_user3_role']:
+        self.execute_query("drop role {0}".format(role_name))
+
+    self.execute_query("create role oo_user1_role")
+    self.execute_query("create role oo_user2_role")
+    self.execute_query("create role oo_user3_role")
+    # grant create permissions to oo_user_1 so that they can create database/table
+    # or functions
+    self.execute_query("grant create on server to oo_user1_role")
+    # grant select permissions to oo_user_3 so that they can use database/table
+    # or functions, but cannot drop them
+    self.execute_query("grant select on server to oo_user3_role")
+    # oo_user1 needs permissions to create a view based of functional.alltypes
+    self.execute_query("grant select on database functional to oo_user1_role")
+    # oo_user1 needs permissions to create a function based of libTestUdfs.so
+    self.execute_query("grant all on uri 'hdfs:///test-warehouse/libTestUdfs.so' to"
+        " oo_user1_role")
+    # We need to provide explicit privileges to drop functions
+    self.execute_query("grant drop on database {0} to "
+        "oo_user1_role".format(unique_database))
+    self.execute_query("grant role oo_user1_role to group oo_group1")
+    self.execute_query("grant role oo_user2_role to group oo_group2")
+    self.execute_query("grant role oo_user3_role to group oo_group3")
+    self.execute_query("refresh authorization")
+
+  def _cleanup_drop_if_exist_test(self, test_db):
+    self.execute_query("revoke role oo_user1_role from group oo_group1")
+    self.execute_query("revoke role oo_user2_role from group oo_group2")
+    self.execute_query("revoke role oo_user3_role from group oo_group3")
+    self.execute_query("drop role oo_user1_role")
+    self.execute_query("drop role oo_user2_role")
+    self.execute_query("drop role oo_user3_role")
+    self.execute_query("refresh authorization")
+    self.execute_query("drop database if exists {0}".format(test_db))
+
+  def _execute_drop_if_exists(self, test_obj):
+    self._execute_drop_if_exists_inner(test_obj, True)
+    if test_obj.obj_type != TestObject.DATABASE:
+      self._execute_drop_if_exists_inner(test_obj, False)
+
+  def _execute_drop_if_exists_inner(self, test_obj, use_qualified_name):
+    """
+    Executes a drop table if exists on a given object type and makes sure that
+    there is no authorization exception when the user has enough privileges. If the user
+    does not have correct privileges the test confirms that error is thrown
+    """
+    self.oo_user1_impalad_client = self.create_impala_client()
+    self.oo_user2_impalad_client = self.create_impala_client()
+    self.oo_user3_impalad_client = self.create_impala_client()
+
+    fq_obj_name = test_obj.obj_name
+    obj_name = fq_obj_name if use_qualified_name else test_obj.table_name
+    if not use_qualified_name:
+       # Call "use db" and omit "db." in the queries of oo_user1 and oo_user3
+       # oo_user2 has no privileges for the database so it will always use qualified name
+       self.user_query(self.oo_user1_impalad_client, "use %s" % test_obj.db_name,
+                       user="oo_user1")
+       self.user_query(self.oo_user3_impalad_client, "use %s" % test_obj.db_name,
+                       user="oo_user3")
+
+    self.user_query(self.oo_user1_impalad_client, "create %s %s %s %s %s" %
+                    (test_obj.obj_type, test_obj.obj_name, test_obj.table_def,
+                     test_obj.view_select, test_obj.func_def), user="oo_user1")
+
+    access_error_msg = \
+        "does not have privileges to ANY" if test_obj.obj_type == TestObject.FUNCTION \
+        else "does not have privileges to access"
+    drop_error_msg = \
+        "does not have privileges to DROP" if test_obj.obj_type == TestObject.FUNCTION \
+        else "does not have privileges to execute 'DROP'"
+
+    # Try to DROP IF EXISTS an existing object without DROP privileges
+    self.user_query(self.oo_user2_impalad_client, "drop %s if exists %s" %
+                    (test_obj.obj_type, fq_obj_name), user="oo_user2,",
+                    error_msg=access_error_msg)
+    self.user_query(self.oo_user3_impalad_client, "drop %s if exists %s" %
+                    (test_obj.obj_type, obj_name), user="oo_user3",
+                    error_msg=drop_error_msg)
+
+    # Try to DROP (without IF EXISTS) an existing object
+    self.user_query(self.oo_user2_impalad_client, "drop %s %s" %
+                    (test_obj.obj_type, fq_obj_name), user="oo_user2",
+                    error_msg=drop_error_msg)
+    self.user_query(self.oo_user3_impalad_client, "drop %s %s" %
+                    (test_obj.obj_type, obj_name), user="oo_user3",
+                    error_msg=drop_error_msg)
+    # oo_user1 has the privileges to drop the object, so the next query drops it
+    self.user_query(self.oo_user1_impalad_client, "drop %s %s" %
+                    (test_obj.obj_type, obj_name), user="oo_user1")
+
+    # a drop if exists on a non-existing object should not error out if the user has
+    # minimum set of privileges required to list those object types
+    self.user_query(self.oo_user1_impalad_client, "drop %s if exists %s" %
+                    (test_obj.obj_type, obj_name), user="oo_user1")
+    self.user_query(self.oo_user3_impalad_client, "drop %s if exists %s" %
+                    (test_obj.obj_type, obj_name), user="oo_user3")
+    # oo_user2 does not have privileges on this object and hence should receive a
+    # authorization error.
+    error_msg = \
+        "does not have privileges to ANY" if test_obj.obj_type == TestObject.FUNCTION \
+        else "does not have privileges to access"
+    self.user_query(self.oo_user2_impalad_client, "drop %s if exists %s" %
+                    (test_obj.obj_type, fq_obj_name), user="oo_user2",
+                    error_msg=error_msg)
+
+  @pytest.mark.execute_serially
+  @SentryCacheTestSuite.with_args(
+      impalad_args="--server_name=server1 --sentry_config={0} "
+                   "--authorization_policy_provider_class="
+                   "org.apache.impala.testutil.TestSentryResourceAuthorizationProvider"
+                   .format(SENTRY_CONFIG_FILE_OO),
+      catalogd_args="--sentry_config={0} --sentry_catalog_polling_frequency_s={1} "
+                    "--authorization_policy_provider_class="
+                    "org.apache.impala.testutil.TestSentryResourceAuthorizationProvider"
+                    .format(SENTRY_CONFIG_FILE_OO, SENTRY_LONG_POLLING_FREQUENCY_S),
+      sentry_config=SENTRY_CONFIG_FILE_OO,
       sentry_log_dir="{0}/test_owner_privileges_with_grant".format(SENTRY_BASE_LOG_DIR))
   def test_owner_privileges_with_grant(self, vector, unique_database):
     """Tests owner privileges with grant on database, table, and view.
diff --git a/tests/common/sentry_cache_test_suite.py b/tests/common/sentry_cache_test_suite.py
index 2890911..2f0096a 100644
--- a/tests/common/sentry_cache_test_suite.py
+++ b/tests/common/sentry_cache_test_suite.py
@@ -99,6 +99,7 @@ class TestObject(object):
   DATABASE = "database"
   TABLE = "table"
   VIEW = "view"
+  FUNCTION = "function"
 
   def __init__(self, obj_type, obj_name="", grant=False):
     self.obj_name = obj_name
@@ -108,6 +109,7 @@ class TestObject(object):
     self.table_name = None
     self.table_def = ""
     self.view_select = ""
+    self.func_def = ""
     if len(parts) > 1:
       self.table_name = parts[1]
     if obj_type == TestObject.VIEW:
@@ -116,6 +118,10 @@ class TestObject(object):
     elif obj_type == TestObject.TABLE:
       self.grant_name = TestObject.TABLE
       self.table_def = "(col1 int)"
+    elif obj_type == TestObject.FUNCTION:
+      self.grant_name = TestObject.FUNCTION
+      self.func_def = "RETURNS INT LOCATION 'hdfs:///test-warehouse/libTestUdfs.so'\
+       SYMBOL='Fn'"
     else:
       self.grant_name = obj_type
     self.grant = grant


[impala] 01/07: [DOCS] CONCAT function returns NULL if any argument is NULL

Posted by bo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

boroknagyz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git

commit 20dec47ae6c377cf8281c32787b003e5e6f3c07a
Author: Alex Rodoni <ar...@cloudera.com>
AuthorDate: Wed Aug 28 10:51:56 2019 -0700

    [DOCS] CONCAT function returns NULL if any argument is NULL
    
    Change-Id: Ieadd249881b45944a870a616abf75ff4386615ea
    Reviewed-on: http://gerrit.cloudera.org:8080/14156
    Reviewed-by: Greg Rahn <gr...@cloudera.com>
    Tested-by: Impala Public Jenkins <im...@cloudera.com>
---
 docs/topics/impala_string_functions.xml | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/docs/topics/impala_string_functions.xml b/docs/topics/impala_string_functions.xml
index 2d2c760..c21fbd0 100644
--- a/docs/topics/impala_string_functions.xml
+++ b/docs/topics/impala_string_functions.xml
@@ -454,7 +454,9 @@ SELECT chr(97);
 
         <dd>
           <b>Purpose:</b> Returns a single string representing all the argument values joined
-          together.
+          together. If any argument is <codeph>NULL</codeph>, it returns <codeph>NULL</codeph>.
+          <p></p>
+
           <p>
             <b>Return type:</b> <codeph>STRING</codeph>
           </p>
@@ -1423,26 +1425,33 @@ select replace('hello world','xyz','abc');
             The <varname>delimiter</varname> can consist of multiple characters, not just a
             single character.
           </p>
+
           <p>
             All matching of the delimiter is done exactly, not using any regular expression
             patterns.
           </p>
+
           <p>
             <b>Return type:</b> <codeph>STRING</codeph>
           </p>
+
           <p conref="../shared/impala_common.xml#common/example_blurb"
               />
+
           <p>
             <codeph>SPLIT_PART('x,y,z',',',2)</codeph> returns <codeph>'y'</codeph>.
           </p>
+
           <p>
             <codeph>SPLIT_PART('one***two***three','***',2)</codeph> returns
             <codeph>'two'</codeph>.
           </p>
+
           <p>
             <codeph>SPLIT_PART('abc@@def@@ghi', '@@', 3)</codeph> returns
             <codeph>'ghi'</codeph>.
           </p>
+
           <p>
             <codeph>SPLIT_PART('abc@@def@@ghi', '@@', -3)</codeph> returns
             <codeph>'abc'</codeph>.


[impala] 06/07: IMPALA-8902: Bump timeout in test_result_spooling:::test_spilling

Posted by bo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

boroknagyz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git

commit 4e23a529cbfee753298ca5437e9ed511554faedb
Author: Sahil Takiar <ta...@gmail.com>
AuthorDate: Wed Aug 28 08:04:19 2019 -0700

    IMPALA-8902: Bump timeout in test_result_spooling:::test_spilling
    
    De-flake test_result_spooling.py::TestResultSpooling::test_spilling.
    Bump up the timeout that controls how long the test waits for result
    spooling to start spilling to disk (detected by the presence of
    PeakUnpinnedBytes in the PLAN_ROOT_SINK section of the runtime profile).
    
    Testing:
    * Looped TestResultSpooling::test_spilling on an ASAN build for an hour
    without any failure.
    
    Change-Id: Iabac8d7273735079dca48a1e0ecd4f341ea690a0
    Reviewed-on: http://gerrit.cloudera.org:8080/14155
    Reviewed-by: Impala Public Jenkins <im...@cloudera.com>
    Tested-by: Impala Public Jenkins <im...@cloudera.com>
---
 tests/query_test/test_result_spooling.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/query_test/test_result_spooling.py b/tests/query_test/test_result_spooling.py
index 8022bab..e06ec96 100644
--- a/tests/query_test/test_result_spooling.py
+++ b/tests/query_test/test_result_spooling.py
@@ -81,7 +81,7 @@ class TestResultSpooling(ImpalaTestSuite):
 
     # Amount of time to wait for the PeakUnpinnedBytes counter in the PLAN_ROOT_SINK
     # section of the profile to reach a non-zero value.
-    timeout = 10
+    timeout = 30
 
     # Regexes to look for in the runtime profiles.
     # PeakUnpinnedBytes can show up in exec nodes as well, so we only look for the


[impala] 05/07: IMPALA-7604: part 2: fixes for AggregationNode cardinality

Posted by bo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

boroknagyz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git

commit 94f7d12f87f61cef6b341a5a1141b9bbe701de0b
Author: Tim Armstrong <ta...@cloudera.com>
AuthorDate: Mon Aug 19 18:34:19 2019 -0700

    IMPALA-7604: part 2: fixes for AggregationNode cardinality
    
    * Use saturating arithmetic in Expr.getNumDistinctValues() to
      avoid overflows.
    * Avoid double-adding with checkedAdd()
    * Fix incorrect logic with multiple groups - each group cannot
      return more than the input rows, but with multiple groups
      it can add up to more than the input rows.
    
    Testing:
    Updated planner tests from part 1 to reflect bugfixes.
    
    Added targeted cardinality tests to verify behaviour
    with and without stats.
    
    Updated other planner tests that changed as a result of
    this fixed.
    
    Ran exhaustive tests.
    
    Change-Id: Ieed41d60c0e0dfeca64035e919cb8c28a054a9ab
    Reviewed-on: http://gerrit.cloudera.org:8080/14132
    Reviewed-by: Impala Public Jenkins <im...@cloudera.com>
    Tested-by: Impala Public Jenkins <im...@cloudera.com>
---
 .../main/java/org/apache/impala/analysis/Expr.java |    7 +-
 .../org/apache/impala/planner/AggregationNode.java |  103 +-
 .../org/apache/impala/planner/CardinalityTest.java |   74 +-
 .../queries/PlannerTest/card-agg.test              |   55 +-
 .../queries/PlannerTest/empty.test                 |   20 +-
 .../queries/PlannerTest/insert-sort-by.test        |  114 ++-
 .../queries/PlannerTest/joins.test                 |  436 ++++-----
 .../queries/PlannerTest/tpcds-all.test             | 1008 ++++++++++----------
 8 files changed, 963 insertions(+), 854 deletions(-)

diff --git a/fe/src/main/java/org/apache/impala/analysis/Expr.java b/fe/src/main/java/org/apache/impala/analysis/Expr.java
index 1cfa938..76e62d6 100644
--- a/fe/src/main/java/org/apache/impala/analysis/Expr.java
+++ b/fe/src/main/java/org/apache/impala/analysis/Expr.java
@@ -44,6 +44,7 @@ import org.apache.impala.thrift.TColumnValue;
 import org.apache.impala.thrift.TExpr;
 import org.apache.impala.thrift.TExprNode;
 import org.apache.impala.thrift.TFunction;
+import org.apache.impala.util.MathUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -785,7 +786,8 @@ abstract public class Expr extends TreeNode<Expr> implements ParseNode, Cloneabl
 
   /**
    * Returns the product of the given exprs' number of distinct values or -1 if any of
-   * the exprs have an invalid number of distinct values.
+   * the exprs have an invalid number of distinct values. Uses saturating arithmetic,
+   * so that if the product would overflow, return Long.MAX_VALUE.
    */
   public static long getNumDistinctValues(List<Expr> exprs) {
     if (exprs == null || exprs.isEmpty()) return 0;
@@ -795,7 +797,8 @@ abstract public class Expr extends TreeNode<Expr> implements ParseNode, Cloneabl
         numDistinctValues = -1;
         break;
       }
-      numDistinctValues *= expr.getNumDistinctValues();
+      numDistinctValues = MathUtil.saturatingMultiply(
+          numDistinctValues, expr.getNumDistinctValues());
     }
     return numDistinctValues;
   }
diff --git a/fe/src/main/java/org/apache/impala/planner/AggregationNode.java b/fe/src/main/java/org/apache/impala/planner/AggregationNode.java
index 2a91a06..f48b2de 100644
--- a/fe/src/main/java/org/apache/impala/planner/AggregationNode.java
+++ b/fe/src/main/java/org/apache/impala/planner/AggregationNode.java
@@ -41,6 +41,8 @@ import org.apache.impala.thrift.TPlanNode;
 import org.apache.impala.thrift.TPlanNodeType;
 import org.apache.impala.thrift.TQueryOptions;
 import org.apache.impala.util.BitUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
@@ -50,6 +52,8 @@ import com.google.common.collect.Lists;
  *
  */
 public class AggregationNode extends PlanNode {
+  private static final Logger LOG = LoggerFactory.getLogger(AggregationNode.class);
+
   // Default per-instance memory requirement used if no valid stats are available.
   // TODO: Come up with a more useful heuristic.
   private final static long DEFAULT_PER_INSTANCE_MEM = 128L * 1024L * 1024L;
@@ -207,49 +211,84 @@ public class AggregationNode extends PlanNode {
   @Override
   public void computeStats(Analyzer analyzer) {
     super.computeStats(analyzer);
-    // This is prone to overflow, because we keep multiplying cardinalities,
-    // even if the grouping exprs are functionally dependent (example:
-    // group by the primary key of a table plus a number of other columns from that
-    // same table)
-    // TODO: try to recognize functional dependencies
-    // TODO: as a shortcut, instead of recognizing functional dependencies,
-    // limit the contribution of a single table to the number of rows
-    // of that table (so that when we're grouping by the primary key col plus
-    // some others, the estimate doesn't overshoot dramatically)
-    // cardinality: product of # of distinct values produced by grouping exprs
-
+    // TODO: IMPALA-2945: this doesn't correctly take into account duplicate keys on
+    // multiple nodes in a pre-aggregation.
     cardinality_ = 0;
     for (AggregateInfo aggInfo : aggInfos_) {
-      List<Expr> groupingExprs = aggInfo.getGroupingExprs();
-      if (groupingExprs.isEmpty()) {
-        // Non-grouping aggregation class.
-        cardinality_ += 1;
-      } else {
-        long ndvs = Expr.getNumDistinctValues(groupingExprs);
-        // if we ended up with an overflow, the estimate is certain to be wrong
-        if (ndvs < 0) {
-          cardinality_ = -1;
-          break;
-        }
-        cardinality_ += checkedAdd(cardinality_, ndvs);
+      // Compute the cardinality for this set of grouping exprs.
+      long numGroups = estimateNumGroups(aggInfo);
+      Preconditions.checkState(numGroups >= -1, numGroups);
+      if (numGroups == -1) {
+        // No estimate of the number of groups is possible, can't even make a
+        // conservative estimate.
+        cardinality_ = -1;
+        break;
       }
+      cardinality_ = checkedAdd(cardinality_, numGroups);
     }
 
     // Take conjuncts into account.
     if (cardinality_ > 0) {
       cardinality_ = (long) Math.round((double) cardinality_ * computeSelectivity());
     }
+    cardinality_ = capCardinalityAtLimit(cardinality_);
+  }
+
+  /**
+   * Estimate the number of groups that will be present for the aggregation class
+   * described by 'aggInfo'.
+   * Returns -1 if a reasonable cardinality estimate cannot be produced.
+   */
+  private long estimateNumGroups(AggregateInfo aggInfo) {
+    // This is prone to overestimation, because we keep multiplying cardinalities,
+    // even if the grouping exprs are functionally dependent (example:
+    // group by the primary key of a table plus a number of other columns from that
+    // same table). We limit the estimate to the estimated number of input row to
+    // limit the potential overestimation. We could, in future, improve this further
+    // by recognizing functional dependencies.
+    List<Expr> groupingExprs = aggInfo.getGroupingExprs();
+    if (groupingExprs.isEmpty()) {
+      // Non-grouping aggregation class - always results in one group even if there are
+      // zero input rows.
+      return 1;
+    }
+    long numGroups = Expr.getNumDistinctValues(groupingExprs);
     // Sanity check the cardinality_ based on the input cardinality_.
-    if (getChild(0).getCardinality() != -1) {
-      if (cardinality_ == -1) {
-        // A worst-case cardinality_ is better than an unknown cardinality_.
-        cardinality_ = getChild(0).getCardinality();
-      } else {
-        // An AggregationNode cannot increase the cardinality_.
-        cardinality_ = Math.min(getChild(0).getCardinality(), cardinality_);
-      }
+    long aggInputCardinality = getAggInputCardinality();
+    if (LOG.isTraceEnabled()) {
+      LOG.trace("Node " + id_ + " numGroups= " + numGroups + " aggInputCardinality=" +
+          aggInputCardinality + " for agg class " + aggInfo.debugString());
     }
-    cardinality_ = capCardinalityAtLimit(cardinality_);
+    if (numGroups == -1) {
+      // A worst-case cardinality_ is better than an unknown cardinality_.
+      // Note that this will still be -1 if the child's cardinality is unknown.
+      return aggInputCardinality;
+    }
+    // We have a valid estimate of the number of groups. Cap it at number of input
+    // rows because an aggregation cannot increase the cardinality_.
+    if (aggInputCardinality >= 0) {
+      numGroups = Math.min(aggInputCardinality, numGroups);
+    }
+    return numGroups;
+  }
+
+  /**
+   * Compute the input cardinality to the distributed aggregation. If this is a
+   * merge aggregation, we need to find the cardinality of the input to the
+   * preaggregation.
+   * Return -1 if unknown.
+   */
+  private long getAggInputCardinality() {
+    PlanNode child = getChild(0);
+    if (!aggPhase_.isMerge()) return child.getCardinality();
+    PlanNode preAgg;
+    if (child instanceof ExchangeNode) {
+      preAgg = child.getChild(0);
+    } else {
+      preAgg = child;
+    }
+    Preconditions.checkState(preAgg instanceof AggregationNode);
+    return preAgg.getChild(0).getCardinality();
   }
 
   /**
diff --git a/fe/src/test/java/org/apache/impala/planner/CardinalityTest.java b/fe/src/test/java/org/apache/impala/planner/CardinalityTest.java
index 2b71ee3..4cba270 100644
--- a/fe/src/test/java/org/apache/impala/planner/CardinalityTest.java
+++ b/fe/src/test/java/org/apache/impala/planner/CardinalityTest.java
@@ -20,7 +20,6 @@ package org.apache.impala.planner;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
@@ -343,6 +342,47 @@ public class CardinalityTest extends PlannerTestBase {
         pathToSecondAggregationNode, AggregationNode.class);
   }
 
+  /**
+   * Test that agg nodes correctly gap output cardinality based on input
+   * cardinality with and without stats.
+   */
+  @Test
+  public void testAggregationNodeGroupByCardinalityCapping() {
+    // Create the paths to the AggregationNode's of interest
+    // in a distributed plan involving GROUP BY.
+    // Since there are two resulting AggregationNode's, we create two paths.
+    List<Integer> pathToFirstAggregationNode = Arrays.asList(0);
+    List<Integer> pathToSecondAggregationNode = Arrays.asList(0, 0, 0);
+
+    // With table and column stats available.
+    verifyCardinality("select distinct id, int_col from functional.alltypes",
+        7300, true, ImmutableSet.of(),
+        pathToFirstAggregationNode, AggregationNode.class);
+    verifyCardinality("select distinct id, int_col from functional.alltypes",
+        7300, true, ImmutableSet.of(),
+        pathToSecondAggregationNode, AggregationNode.class);
+
+    // No column stats available but number of rows inferred from file size.
+    // The estimated number of rows caps the output cardinality.
+    verifyApproxCardinality(
+        "select distinct id, int_col from functional_parquet.alltypes",
+        12760, true, ImmutableSet.of(),
+        pathToFirstAggregationNode, AggregationNode.class);
+    verifyApproxCardinality(
+        "select distinct id, int_col from functional_parquet.alltypes",
+        12760, true, ImmutableSet.of(),
+        pathToSecondAggregationNode, AggregationNode.class);
+    // No column stats available and row estimation disabled - no estimate is possible.
+    verifyCardinality(
+        "select distinct id, int_col from functional_parquet.alltypes",
+        -1, true, ImmutableSet.of(PlannerTestOption.DISABLE_HDFS_NUM_ROWS_ESTIMATE),
+        pathToFirstAggregationNode, AggregationNode.class);
+    verifyCardinality(
+        "select distinct id, int_col from functional_parquet.alltypes",
+        -1, true, ImmutableSet.of(PlannerTestOption.DISABLE_HDFS_NUM_ROWS_ESTIMATE),
+        pathToSecondAggregationNode, AggregationNode.class);
+  }
+
   @Test
   public void testAnalyticEvalNode() {
     // Since the root node of the generated distributed plan is
@@ -778,6 +818,38 @@ public class CardinalityTest extends PlannerTestBase {
         planRoot.getCardinality());
   }
 
+
+  /* This method allows us to inspect the cardinality of a PlanNode located by
+  * path with respect to the root of the retrieved query plan. The class of
+  * the located PlanNode by path will also be checked against cl, the class of
+  * the PlanNode of interest.
+  *
+  * @param query query to test
+  * @param expected expected cardinality at the PlanNode of interest
+  * @param isDistributedPlan set to true if we would like to generate
+  * a distributed plan
+  * @param testOptions specified test options
+  * @param path path to the PlanNode of interest
+  * @param cl class of the PlanNode of interest
+  */
+  protected void verifyCardinality(String query, long expected,
+      boolean isDistributedPlan, Set<PlannerTestOption> testOptions,
+      List<Integer> path, Class<?> cl) {
+    List<PlanFragment> plan = getPlan(query, isDistributedPlan, testOptions);
+    // We use the last element on the List of PlanFragment
+    // because this PlanFragment encloses all the PlanNode's
+    // in the query plan (either the single node plan or
+    // the distributed plan).
+    PlanNode currentNode = plan.get(plan.size() - 1).getPlanRoot();
+    for (Integer currentChildIndex: path) {
+      currentNode = currentNode.getChild(currentChildIndex);
+    }
+    assertEquals("PlanNode class not matched: ", cl.getName(),
+        currentNode.getClass().getName());
+    assertEquals("Cardinality error for: " + query,
+        expected, currentNode.getCardinality());
+  }
+
   /**
    * The cardinality check performed by this method allows for a margin of
    * error. Specifically, two cardinalities are considered equal as long as
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/card-agg.test b/testdata/workloads/functional-planner/queries/PlannerTest/card-agg.test
index 5fe9265..69254da 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/card-agg.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/card-agg.test
@@ -142,7 +142,6 @@ PLAN-ROOT SINK
 # Grouping aggregation with multiple aggregation classes (multiple count distinct).
 # Cardinality for the first aggregation is the sum of cardinalities from the
 # aggregation classes.
-# BUG: some aggregation classes are double counted in the cardinality.
 select count(distinct l_orderkey), count(distinct l_partkey)
 from tpch.lineitem
 ---- PLAN
@@ -164,7 +163,7 @@ PLAN-ROOT SINK
 |    group by: l_orderkey
 |  Class 1
 |    group by: l_partkey
-|  row-size=16B cardinality=3.33M
+|  row-size=16B cardinality=1.76M
 |
 00:SCAN HDFS [tpch.lineitem]
    HDFS partitions=1/1 files=1 size=718.94MB
@@ -197,7 +196,7 @@ PLAN-ROOT SINK
 |    group by: l_orderkey
 |  Class 1
 |    group by: l_partkey
-|  row-size=16B cardinality=3.33M
+|  row-size=16B cardinality=1.76M
 |
 04:EXCHANGE [HASH(CASE valid_tid() WHEN 1 THEN murmur_hash(l_orderkey) WHEN 3 THEN murmur_hash(l_partkey) END)]
 |
@@ -206,7 +205,7 @@ PLAN-ROOT SINK
 |    group by: l_orderkey
 |  Class 1
 |    group by: l_partkey
-|  row-size=16B cardinality=3.33M
+|  row-size=16B cardinality=1.76M
 |
 00:SCAN HDFS [tpch.lineitem]
    HDFS partitions=1/1 files=1 size=718.94MB
@@ -214,8 +213,9 @@ PLAN-ROOT SINK
 ====
 # Grouping aggregation with multiple aggregation classes (multiple count distinct).
 # In this case the sum of output cardinalities is greater than the sum of the
-# input cardinality.
-# BUG: output cardinality is capped at input cardinality.
+# input cardinality. Note that the merge aggregation should cap cardinality based
+# on the input cardinality to the preaggregation in the distributed plan so that
+# the estimates for the single node and distributed plans are the same.
 select l_partkey, count(distinct l_orderkey), count(distinct l_comment), count(distinct l_suppkey)
 from tpch.lineitem
 group by l_partkey
@@ -237,7 +237,7 @@ PLAN-ROOT SINK
 |  Class 2
 |    output: count(l_suppkey)
 |    group by: l_partkey
-|  row-size=48B cardinality=1.40M
+|  row-size=48B cardinality=601.55K
 |
 01:AGGREGATE
 |  Class 0
@@ -246,7 +246,7 @@ PLAN-ROOT SINK
 |    group by: l_partkey, l_comment
 |  Class 2
 |    group by: l_partkey, l_suppkey
-|  row-size=78B cardinality=6.00M
+|  row-size=78B cardinality=18.00M
 |
 00:SCAN HDFS [tpch.lineitem]
    HDFS partitions=1/1 files=1 size=718.94MB
@@ -271,7 +271,7 @@ PLAN-ROOT SINK
 |  Class 2
 |    output: count:merge(l_suppkey)
 |    group by: l_partkey
-|  row-size=48B cardinality=1.40M
+|  row-size=48B cardinality=601.55K
 |
 06:EXCHANGE [HASH(CASE valid_tid() WHEN 2 THEN murmur_hash(l_partkey) WHEN 4 THEN murmur_hash(l_partkey) WHEN 6 THEN murmur_hash(l_partkey) END)]
 |
@@ -285,7 +285,7 @@ PLAN-ROOT SINK
 |  Class 2
 |    output: count(l_suppkey)
 |    group by: l_partkey
-|  row-size=48B cardinality=1.40M
+|  row-size=48B cardinality=601.55K
 |
 05:AGGREGATE
 |  Class 0
@@ -294,7 +294,7 @@ PLAN-ROOT SINK
 |    group by: l_partkey, l_comment
 |  Class 2
 |    group by: l_partkey, l_suppkey
-|  row-size=78B cardinality=6.00M
+|  row-size=78B cardinality=18.00M
 |
 04:EXCHANGE [HASH(CASE valid_tid() WHEN 1 THEN murmur_hash(l_partkey) WHEN 3 THEN murmur_hash(l_partkey) WHEN 5 THEN murmur_hash(l_partkey) END,CASE valid_tid() WHEN 1 THEN murmur_hash(l_orderkey) WHEN 3 THEN murmur_hash(l_comment) WHEN 5 THEN murmur_hash(l_suppkey) END)]
 |
@@ -305,14 +305,13 @@ PLAN-ROOT SINK
 |    group by: l_partkey, l_comment
 |  Class 2
 |    group by: l_partkey, l_suppkey
-|  row-size=78B cardinality=6.00M
+|  row-size=78B cardinality=18.00M
 |
 00:SCAN HDFS [tpch.lineitem]
    HDFS partitions=1/1 files=1 size=718.94MB
    row-size=62B cardinality=6.00M
 ====
 # Mixed grouping and non-grouping aggregations.
-# BUG: output cardinality is capped at input cardinality.
 select count(distinct id), count(distinct int_col), count(*)
 from functional.alltypes
 ---- PLAN
@@ -338,7 +337,7 @@ PLAN-ROOT SINK
 |    group by: int_col
 |  Class 2
 |    output: count(*)
-|  row-size=16B cardinality=7.30K
+|  row-size=16B cardinality=7.31K
 |
 00:SCAN HDFS [functional.alltypes]
    HDFS partitions=24/24 files=24 size=478.45KB
@@ -377,7 +376,7 @@ PLAN-ROOT SINK
 |    group by: int_col
 |  Class 2
 |    output: count:merge(*)
-|  row-size=16B cardinality=7.30K
+|  row-size=16B cardinality=7.31K
 |
 04:EXCHANGE [HASH(CASE valid_tid() WHEN 1 THEN murmur_hash(id) WHEN 3 THEN murmur_hash(int_col) WHEN 5 THEN 0 END)]
 |
@@ -388,14 +387,13 @@ PLAN-ROOT SINK
 |    group by: int_col
 |  Class 2
 |    output: count(*)
-|  row-size=16B cardinality=7.30K
+|  row-size=16B cardinality=7.31K
 |
 00:SCAN HDFS [functional.alltypes]
    HDFS partitions=24/24 files=24 size=478.45KB
    row-size=8B cardinality=7.30K
 ====
 # Test overflow handling for single aggregation class.
-# BUG: output cardinality overflows and is set to 0
 select distinct *
 from tpcds.store_sales s1, tpcds.store_sales s2, tpcds.store_sales s3,
   tpcds.store_sales s4
@@ -404,7 +402,7 @@ PLAN-ROOT SINK
 |
 07:AGGREGATE [FINALIZE]
 |  group by: s1.ss_sold_time_sk, s1.ss_item_sk, s1.ss_customer_sk, s1.ss_cdemo_sk, s1.ss_hdemo_sk, s1.ss_addr_sk, s1.ss_store_sk, s1.ss_promo_sk, s1.ss_ticket_number, s1.ss_quantity, s1.ss_wholesale_cost, s1.ss_list_price, s1.ss_sales_price, s1.ss_ext_discount_amt, s1.ss_ext_sales_price, s1.ss_ext_wholesale_cost, s1.ss_ext_list_price, s1.ss_ext_tax, s1.ss_coupon_amt, s1.ss_net_paid, s1.ss_net_paid_inc_tax, s1.ss_net_profit, s1.ss_sold_date_sk, s2.ss_sold_time_sk, s2.ss_item_sk, s2.ss_cus [...]
-|  row-size=400B cardinality=0
+|  row-size=400B cardinality=9223372.04T
 |
 06:NESTED LOOP JOIN [CROSS JOIN]
 |  row-size=400B cardinality=9223372.04T
@@ -437,13 +435,13 @@ PLAN-ROOT SINK
 |
 12:AGGREGATE [FINALIZE]
 |  group by: s1.ss_sold_time_sk, s1.ss_item_sk, s1.ss_customer_sk, s1.ss_cdemo_sk, s1.ss_hdemo_sk, s1.ss_addr_sk, s1.ss_store_sk, s1.ss_promo_sk, s1.ss_ticket_number, s1.ss_quantity, s1.ss_wholesale_cost, s1.ss_list_price, s1.ss_sales_price, s1.ss_ext_discount_amt, s1.ss_ext_sales_price, s1.ss_ext_wholesale_cost, s1.ss_ext_list_price, s1.ss_ext_tax, s1.ss_coupon_amt, s1.ss_net_paid, s1.ss_net_paid_inc_tax, s1.ss_net_profit, s1.ss_sold_date_sk, s2.ss_sold_time_sk, s2.ss_item_sk, s2.ss_cus [...]
-|  row-size=400B cardinality=0
+|  row-size=400B cardinality=9223372.04T
 |
 11:EXCHANGE [HASH(s1.ss_sold_time_sk,s1.ss_item_sk,s1.ss_customer_sk,s1.ss_cdemo_sk,s1.ss_hdemo_sk,s1.ss_addr_sk,s1.ss_store_sk,s1.ss_promo_sk,s1.ss_ticket_number,s1.ss_quantity,s1.ss_wholesale_cost,s1.ss_list_price,s1.ss_sales_price,s1.ss_ext_discount_amt,s1.ss_ext_sales_price,s1.ss_ext_wholesale_cost,s1.ss_ext_list_price,s1.ss_ext_tax,s1.ss_coupon_amt,s1.ss_net_paid,s1.ss_net_paid_inc_tax,s1.ss_net_profit,s1.ss_sold_date_sk,s2.ss_sold_time_sk,s2.ss_item_sk,s2.ss_customer_sk,s2.ss_cdemo [...]
 |
 07:AGGREGATE [STREAMING]
 |  group by: s1.ss_sold_time_sk, s1.ss_item_sk, s1.ss_customer_sk, s1.ss_cdemo_sk, s1.ss_hdemo_sk, s1.ss_addr_sk, s1.ss_store_sk, s1.ss_promo_sk, s1.ss_ticket_number, s1.ss_quantity, s1.ss_wholesale_cost, s1.ss_list_price, s1.ss_sales_price, s1.ss_ext_discount_amt, s1.ss_ext_sales_price, s1.ss_ext_wholesale_cost, s1.ss_ext_list_price, s1.ss_ext_tax, s1.ss_coupon_amt, s1.ss_net_paid, s1.ss_net_paid_inc_tax, s1.ss_net_profit, s1.ss_sold_date_sk, s2.ss_sold_time_sk, s2.ss_item_sk, s2.ss_cus [...]
-|  row-size=400B cardinality=0
+|  row-size=400B cardinality=9223372.04T
 |
 06:NESTED LOOP JOIN [CROSS JOIN, BROADCAST]
 |  row-size=400B cardinality=9223372.04T
@@ -477,7 +475,6 @@ PLAN-ROOT SINK
    row-size=100B cardinality=2.88M
 ====
 # Test overflow handling for summing multiple aggregation classes.
-# BUG: output cardinality overflows and is set to 0
 select t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk,
     t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk,
     t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity,
@@ -539,7 +536,7 @@ PLAN-ROOT SINK
 09:AGGREGATE [FINALIZE]
 |  output: aggif(valid_tid() = 5, count(t4.ss_net_profit)), aggif(valid_tid() = 7, count(t4.ss_sold_date_sk))
 |  group by: CASE valid_tid() WHEN 5 THEN t1.ss_sold_time_sk WHEN 7 THEN t1.ss_sold_time_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_item_sk WHEN 7 THEN t1.ss_item_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_customer_sk WHEN 7 THEN t1.ss_customer_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_cdemo_sk WHEN 7 THEN t1.ss_cdemo_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_hdemo_sk WHEN 7 THEN t1.ss_hdemo_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_addr_sk WHEN 7 THEN t1.ss_addr_sk END, CASE valid_ti [...]
-|  row-size=408B cardinality=0
+|  row-size=408B cardinality=9223372.04T
 |
 08:AGGREGATE [FINALIZE]
 |  Class 0
@@ -548,14 +545,14 @@ PLAN-ROOT SINK
 |  Class 1
 |    output: count(t4.ss_sold_date_sk)
 |    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
-|  row-size=800B cardinality=0
+|  row-size=800B cardinality=9223372.04T
 |
 07:AGGREGATE
 |  Class 0
 |    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
 |  Class 1
 |    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
-|  row-size=792B cardinality=0
+|  row-size=792B cardinality=9223372.04T
 |
 06:NESTED LOOP JOIN [CROSS JOIN]
 |  row-size=400B cardinality=9223372.04T
@@ -589,7 +586,7 @@ PLAN-ROOT SINK
 09:AGGREGATE [FINALIZE]
 |  output: aggif(valid_tid() = 5, count(t4.ss_net_profit)), aggif(valid_tid() = 7, count(t4.ss_sold_date_sk))
 |  group by: CASE valid_tid() WHEN 5 THEN t1.ss_sold_time_sk WHEN 7 THEN t1.ss_sold_time_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_item_sk WHEN 7 THEN t1.ss_item_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_customer_sk WHEN 7 THEN t1.ss_customer_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_cdemo_sk WHEN 7 THEN t1.ss_cdemo_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_hdemo_sk WHEN 7 THEN t1.ss_hdemo_sk END, CASE valid_tid() WHEN 5 THEN t1.ss_addr_sk WHEN 7 THEN t1.ss_addr_sk END, CASE valid_ti [...]
-|  row-size=408B cardinality=0
+|  row-size=408B cardinality=9223372.04T
 |
 16:AGGREGATE [FINALIZE]
 |  Class 0
@@ -598,7 +595,7 @@ PLAN-ROOT SINK
 |  Class 1
 |    output: count:merge(t4.ss_sold_date_sk)
 |    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
-|  row-size=800B cardinality=0
+|  row-size=800B cardinality=9223372.04T
 |
 15:EXCHANGE [HASH(CASE valid_tid() WHEN 5 THEN murmur_hash(t1.ss_sold_time_sk) WHEN 7 THEN murmur_hash(t1.ss_sold_time_sk) END,CASE valid_tid() WHEN 5 THEN murmur_hash(t1.ss_item_sk) WHEN 7 THEN murmur_hash(t1.ss_item_sk) END,CASE valid_tid() WHEN 5 THEN murmur_hash(t1.ss_customer_sk) WHEN 7 THEN murmur_hash(t1.ss_customer_sk) END,CASE valid_tid() WHEN 5 THEN murmur_hash(t1.ss_cdemo_sk) WHEN 7 THEN murmur_hash(t1.ss_cdemo_sk) END,CASE valid_tid() WHEN 5 THEN murmur_hash(t1.ss_hdemo_sk) W [...]
 |
@@ -609,14 +606,14 @@ PLAN-ROOT SINK
 |  Class 1
 |    output: count(t4.ss_sold_date_sk)
 |    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
-|  row-size=800B cardinality=0
+|  row-size=800B cardinality=9223372.04T
 |
 14:AGGREGATE
 |  Class 0
 |    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
 |  Class 1
 |    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
-|  row-size=792B cardinality=0
+|  row-size=792B cardinality=9223372.04T
 |
 13:EXCHANGE [HASH(CASE valid_tid() WHEN 4 THEN murmur_hash(t1.ss_sold_time_sk) WHEN 6 THEN murmur_hash(t1.ss_sold_time_sk) END,CASE valid_tid() WHEN 4 THEN murmur_hash(t1.ss_item_sk) WHEN 6 THEN murmur_hash(t1.ss_item_sk) END,CASE valid_tid() WHEN 4 THEN murmur_hash(t1.ss_customer_sk) WHEN 6 THEN murmur_hash(t1.ss_customer_sk) END,CASE valid_tid() WHEN 4 THEN murmur_hash(t1.ss_cdemo_sk) WHEN 6 THEN murmur_hash(t1.ss_cdemo_sk) END,CASE valid_tid() WHEN 4 THEN murmur_hash(t1.ss_hdemo_sk) W [...]
 |
@@ -625,7 +622,7 @@ PLAN-ROOT SINK
 |    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
 |  Class 1
 |    group by: t1.ss_sold_time_sk, t1.ss_item_sk, t1.ss_customer_sk, t1.ss_cdemo_sk, t1.ss_hdemo_sk, t1.ss_addr_sk, t1.ss_store_sk, t1.ss_promo_sk, t1.ss_ticket_number, t1.ss_quantity, t1.ss_wholesale_cost, t1.ss_list_price, t1.ss_sales_price, t1.ss_ext_discount_amt, t1.ss_ext_sales_price, t1.ss_ext_wholesale_cost, t1.ss_ext_list_price, t1.ss_ext_tax, t1.ss_coupon_amt, t1.ss_net_paid, t1.ss_net_paid_inc_tax, t1.ss_net_profit, t1.ss_sold_date_sk, t2.ss_sold_time_sk, t2.ss_item_sk, t2.ss_c [...]
-|  row-size=792B cardinality=0
+|  row-size=792B cardinality=9223372.04T
 |
 06:NESTED LOOP JOIN [CROSS JOIN, BROADCAST]
 |  row-size=400B cardinality=9223372.04T
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/empty.test b/testdata/workloads/functional-planner/queries/PlannerTest/empty.test
index cfb9843..d8fb57c 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/empty.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/empty.test
@@ -47,7 +47,7 @@ PLAN-ROOT SINK
 |
 01:AGGREGATE [FINALIZE]
 |  output: count(int_col), avg(double_col), count(*)
-|  row-size=24B cardinality=0
+|  row-size=24B cardinality=1
 |
 00:EMPTYSET
 ====
@@ -62,7 +62,7 @@ PLAN-ROOT SINK
 |
 01:AGGREGATE [FINALIZE]
 |  output: count(*)
-|  row-size=8B cardinality=0
+|  row-size=8B cardinality=1
 |
 00:EMPTYSET
 ====
@@ -313,7 +313,7 @@ PLAN-ROOT SINK
 |
 02:AGGREGATE [FINALIZE]
 |  output: count(1)
-|  row-size=8B cardinality=0
+|  row-size=8B cardinality=1
 |
 01:EMPTYSET
 ====
@@ -371,7 +371,7 @@ PLAN-ROOT SINK
 |
 01:AGGREGATE [FINALIZE]
 |  output: sum(id), count(int_col)
-|  row-size=16B cardinality=0
+|  row-size=16B cardinality=1
 |
 00:EMPTYSET
 ====
@@ -387,7 +387,7 @@ PLAN-ROOT SINK
 |
 01:AGGREGATE [FINALIZE]
 |  output: sum(id + int_col)
-|  row-size=8B cardinality=0
+|  row-size=8B cardinality=1
 |
 00:EMPTYSET
 ====
@@ -403,7 +403,7 @@ PLAN-ROOT SINK
 |
 02:AGGREGATE [FINALIZE]
 |  output: count(T1.int_col)
-|  row-size=8B cardinality=0
+|  row-size=8B cardinality=1
 |
 01:AGGREGATE
 |  group by: int_col
@@ -551,12 +551,12 @@ PLAN-ROOT SINK
 |  |
 |  04:AGGREGATE [FINALIZE]
 |  |  output: count(*)
-|  |  row-size=8B cardinality=0
+|  |  row-size=8B cardinality=1
 |  |
 |  03:EMPTYSET
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=288.98MB
+   HDFS partitions=1/1 files=4 size=289.01MB
    predicates: c_custkey < 10
    row-size=56B cardinality=15.00K
 ====
@@ -598,7 +598,7 @@ PLAN-ROOT SINK
 |     row-size=8B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=288.98MB
+   HDFS partitions=1/1 files=4 size=289.01MB
    predicates: c_custkey = 1
    row-size=44B cardinality=1
 ====
@@ -624,7 +624,7 @@ PLAN-ROOT SINK
 |
 03:AGGREGATE [FINALIZE]
 |  output: count(*)
-|  row-size=8B cardinality=0
+|  row-size=8B cardinality=1
 |
 02:NESTED LOOP JOIN [CROSS JOIN]
 |  row-size=1B cardinality=0
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/insert-sort-by.test b/testdata/workloads/functional-planner/queries/PlannerTest/insert-sort-by.test
index d6416cb..525ce97 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/insert-sort-by.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/insert-sort-by.test
@@ -11,7 +11,7 @@ WRITE TO HDFS [test_sort_by.t, OVERWRITE=false, PARTITION-KEYS=(year,month)]
 |  row-size=17B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=17B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
 WRITE TO HDFS [test_sort_by.t, OVERWRITE=false, PARTITION-KEYS=(year,month)]
@@ -24,7 +24,7 @@ WRITE TO HDFS [test_sort_by.t, OVERWRITE=false, PARTITION-KEYS=(year,month)]
 01:EXCHANGE [HASH(`year`,`month`)]
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=17B cardinality=7.30K
 ====
 # IMPALA-4166: insert with noshuffle hint into tables with sort.columns property adds
@@ -40,7 +40,7 @@ WRITE TO HDFS [test_sort_by.t, OVERWRITE=false, PARTITION-KEYS=(year,month)]
 |  row-size=17B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=17B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
 WRITE TO HDFS [test_sort_by.t, OVERWRITE=false, PARTITION-KEYS=(year,month)]
@@ -51,7 +51,7 @@ WRITE TO HDFS [test_sort_by.t, OVERWRITE=false, PARTITION-KEYS=(year,month)]
 |  row-size=17B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=17B cardinality=7.30K
 ====
 # IMPALA-4166: insert into tables with sort.columns property adds sort node. Clustering
@@ -68,7 +68,7 @@ WRITE TO HDFS [test_sort_by.t, OVERWRITE=false, PARTITION-KEYS=(year,month)]
 |  row-size=17B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=17B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
 WRITE TO HDFS [test_sort_by.t, OVERWRITE=false, PARTITION-KEYS=(year,month)]
@@ -81,7 +81,7 @@ WRITE TO HDFS [test_sort_by.t, OVERWRITE=false, PARTITION-KEYS=(year,month)]
 01:EXCHANGE [HASH(`year`,`month`)]
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=17B cardinality=7.30K
 ====
 # IMPALA-4166: insert into tables with sort.columns property adds sort node.
@@ -96,7 +96,7 @@ WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
 |  row-size=9B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=9B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
 WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
@@ -109,7 +109,7 @@ WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
 01:EXCHANGE [UNPARTITIONED]
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=9B cardinality=7.30K
 ====
 # IMPALA-4166: insert with noshuffle hint into tables with sort.columns property adds
@@ -125,7 +125,7 @@ WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
 |  row-size=9B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=9B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
 WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
@@ -136,7 +136,7 @@ WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
 |  row-size=9B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=9B cardinality=7.30K
 ====
 # IMPALA-4166: sort columns are correct when using an identity column permutation.
@@ -151,7 +151,7 @@ WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
 |  row-size=9B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=9B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
 WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
@@ -164,7 +164,7 @@ WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
 01:EXCHANGE [UNPARTITIONED]
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=9B cardinality=7.30K
 ====
 # IMPALA-4166: sort columns are correct when using a non-trivial column permutation.
@@ -179,7 +179,7 @@ WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
 |  row-size=9B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=9B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
 WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
@@ -192,7 +192,7 @@ WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
 01:EXCHANGE [UNPARTITIONED]
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=9B cardinality=7.30K
 ====
 # IMPALA-4166: sort columns are correct when using a partial column permutation.
@@ -207,7 +207,7 @@ WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
 |  row-size=5B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=5B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
 WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
@@ -220,7 +220,7 @@ WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
 01:EXCHANGE [UNPARTITIONED]
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=5B cardinality=7.30K
 ====
 # IMPALA-4166: no sort node is added when using a partial column permutation and none of
@@ -232,7 +232,7 @@ WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
 |  partitions=1
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=4B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
 WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
@@ -241,7 +241,7 @@ WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
 01:EXCHANGE [UNPARTITIONED]
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=4B cardinality=7.30K
 ====
 # IMPALA-4166: sort columns with a join
@@ -267,11 +267,11 @@ WRITE TO HDFS [test_sort_by.t, OVERWRITE=false, PARTITION-KEYS=(year,month)]
 |  row-size=34B cardinality=7.30K
 |
 |--00:SCAN HDFS [functional.alltypes a]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=9B cardinality=7.30K
 |
 01:SCAN HDFS [functional.alltypes b]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> b.id
    row-size=25B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
@@ -298,13 +298,13 @@ WRITE TO HDFS [test_sort_by.t, OVERWRITE=false, PARTITION-KEYS=(year,month)]
 |--05:EXCHANGE [HASH(a.id)]
 |  |
 |  00:SCAN HDFS [functional.alltypes a]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=9B cardinality=7.30K
 |
 04:EXCHANGE [HASH(b.id)]
 |
 01:SCAN HDFS [functional.alltypes b]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> b.id
    row-size=25B cardinality=7.30K
 ====
@@ -332,11 +332,11 @@ WRITE TO HDFS [test_sort_by.t, OVERWRITE=false, PARTITION-KEYS=(b.`year`,a.`mont
 |  row-size=21B cardinality=7.30K
 |
 |--00:SCAN HDFS [functional.alltypes a]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=9B cardinality=7.30K
 |
 01:SCAN HDFS [functional.alltypes b]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> b.id
    row-size=12B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
@@ -369,13 +369,13 @@ WRITE TO HDFS [test_sort_by.t, OVERWRITE=false, PARTITION-KEYS=(b.`year`,a.`mont
 |--05:EXCHANGE [HASH(a.id)]
 |  |
 |  00:SCAN HDFS [functional.alltypes a]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=9B cardinality=7.30K
 |
 04:EXCHANGE [HASH(b.id)]
 |
 01:SCAN HDFS [functional.alltypes b]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> b.id
    row-size=12B cardinality=7.30K
 ====
@@ -424,54 +424,52 @@ WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
 |  order by: id ASC NULLS LAST
 |  row-size=4B cardinality=0
 |
-03:HASH JOIN [LEFT SEMI JOIN]
-|  hash predicates: id = min(id)
-|  runtime filters: RF000 <- min(id)
+03:HASH JOIN [RIGHT SEMI JOIN]
+|  hash predicates: min(id) = id
 |  row-size=4B cardinality=0
 |
-|--02:AGGREGATE [FINALIZE]
-|  |  output: min(id)
-|  |  row-size=4B cardinality=0
-|  |
-|  01:SCAN HDFS [test_sort_by.t]
-|     partitions=0/0 files=0 size=0B
+|--00:SCAN HDFS [test_sort_by.t_nopart]
+|     HDFS partitions=1/0 files=0 size=0B
 |     row-size=4B cardinality=0
 |
-00:SCAN HDFS [test_sort_by.t_nopart]
-   partitions=1/0 files=0 size=0B
-   runtime filters: RF000 -> id
+02:AGGREGATE [FINALIZE]
+|  output: min(id)
+|  row-size=4B cardinality=1
+|
+01:SCAN HDFS [test_sort_by.t]
+   partitions=0/0 files=0 size=0B
    row-size=4B cardinality=0
 ---- DISTRIBUTEDPLAN
 WRITE TO HDFS [test_sort_by.t_nopart, OVERWRITE=false]
 |  partitions=1
 |
-07:SORT
+08:SORT
 |  order by: id ASC NULLS LAST
 |  row-size=4B cardinality=0
 |
-03:HASH JOIN [LEFT SEMI JOIN, BROADCAST]
-|  hash predicates: id = min(id)
-|  runtime filters: RF000 <- min(id)
+03:HASH JOIN [RIGHT SEMI JOIN, PARTITIONED]
+|  hash predicates: min(id) = id
 |  row-size=4B cardinality=0
 |
-|--06:EXCHANGE [BROADCAST]
-|  |
-|  05:AGGREGATE [FINALIZE]
-|  |  output: min:merge(id)
-|  |  row-size=4B cardinality=0
-|  |
-|  04:EXCHANGE [UNPARTITIONED]
+|--07:EXCHANGE [HASH(id)]
 |  |
-|  02:AGGREGATE
-|  |  output: min(id)
-|  |  row-size=4B cardinality=0
-|  |
-|  01:SCAN HDFS [test_sort_by.t]
-|     partitions=0/0 files=0 size=0B
+|  00:SCAN HDFS [test_sort_by.t_nopart]
+|     HDFS partitions=1/0 files=0 size=0B
 |     row-size=4B cardinality=0
 |
-00:SCAN HDFS [test_sort_by.t_nopart]
-   partitions=1/0 files=0 size=0B
-   runtime filters: RF000 -> id
+06:EXCHANGE [HASH(min(id))]
+|
+05:AGGREGATE [FINALIZE]
+|  output: min:merge(id)
+|  row-size=4B cardinality=1
+|
+04:EXCHANGE [UNPARTITIONED]
+|
+02:AGGREGATE
+|  output: min(id)
+|  row-size=4B cardinality=1
+|
+01:SCAN HDFS [test_sort_by.t]
+   partitions=0/0 files=0 size=0B
    row-size=4B cardinality=0
 ====
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/joins.test b/testdata/workloads/functional-planner/queries/PlannerTest/joins.test
index 944ddf0..ac21f45 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/joins.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/joins.test
@@ -10,11 +10,11 @@ PLAN-ROOT SINK
 |  row-size=48B cardinality=0
 |
 |--01:SCAN HDFS [functional.testtbl t2]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     row-size=24B cardinality=0
 |
 00:SCAN HDFS [functional.testtbl t1]
-   partitions=1/1 files=0 size=0B
+   HDFS partitions=1/1 files=0 size=0B
    predicates: t1.zip = 94611
    runtime filters: RF000 -> t1.id
    row-size=24B cardinality=0
@@ -31,11 +31,11 @@ PLAN-ROOT SINK
 |--03:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [functional.testtbl t2]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     row-size=24B cardinality=0
 |
 00:SCAN HDFS [functional.testtbl t1]
-   partitions=1/1 files=0 size=0B
+   HDFS partitions=1/1 files=0 size=0B
    predicates: t1.zip = 94611
    runtime filters: RF000 -> t1.id
    row-size=24B cardinality=0
@@ -53,11 +53,11 @@ PLAN-ROOT SINK
 |  row-size=48B cardinality=0
 |
 |--01:SCAN HDFS [functional.testtbl t2]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     row-size=24B cardinality=0
 |
 00:SCAN HDFS [functional.testtbl t1]
-   partitions=1/1 files=0 size=0B
+   HDFS partitions=1/1 files=0 size=0B
    predicates: t1.zip = 94611
    row-size=24B cardinality=0
 ---- DISTRIBUTEDPLAN
@@ -72,11 +72,11 @@ PLAN-ROOT SINK
 |--03:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [functional.testtbl t2]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     row-size=24B cardinality=0
 |
 00:SCAN HDFS [functional.testtbl t1]
-   partitions=1/1 files=0 size=0B
+   HDFS partitions=1/1 files=0 size=0B
    predicates: t1.zip = 94611
    row-size=24B cardinality=0
 ====
@@ -95,7 +95,7 @@ PLAN-ROOT SINK
 |  row-size=97B cardinality=8
 |
 |--02:SCAN HDFS [functional.alltypestiny t3]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     row-size=4B cardinality=8
 |
 03:HASH JOIN [INNER JOIN]
@@ -104,12 +104,12 @@ PLAN-ROOT SINK
 |  row-size=93B cardinality=8
 |
 |--01:SCAN HDFS [functional.alltypestiny]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     runtime filters: RF000 -> coalesce(functional.alltypestiny.id, functional.alltypestiny.id)
 |     row-size=4B cardinality=8
 |
 00:SCAN HDFS [functional.alltypestiny]
-   partitions=4/4 files=4 size=460B
+   HDFS partitions=4/4 files=4 size=460B
    runtime filters: RF000 -> coalesce(functional.alltypestiny.id, functional.alltypestiny.id), RF002 -> functional.alltypestiny.id
    row-size=89B cardinality=8
 ---- DISTRIBUTEDPLAN
@@ -125,7 +125,7 @@ PLAN-ROOT SINK
 |--06:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [functional.alltypestiny t3]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     row-size=4B cardinality=8
 |
 03:HASH JOIN [INNER JOIN, BROADCAST]
@@ -136,12 +136,12 @@ PLAN-ROOT SINK
 |--05:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [functional.alltypestiny]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     runtime filters: RF000 -> coalesce(functional.alltypestiny.id, functional.alltypestiny.id)
 |     row-size=4B cardinality=8
 |
 00:SCAN HDFS [functional.alltypestiny]
-   partitions=4/4 files=4 size=460B
+   HDFS partitions=4/4 files=4 size=460B
    runtime filters: RF000 -> coalesce(functional.alltypestiny.id, functional.alltypestiny.id), RF002 -> functional.alltypestiny.id
    row-size=89B cardinality=8
 ====
@@ -166,13 +166,13 @@ PLAN-ROOT SINK
 |
 |--01:SCAN HDFS [functional.alltypessmall b]
 |     partition predicates: b.`month` > 2
-|     partitions=2/4 files=2 size=3.17KB
+|     HDFS partitions=2/4 files=2 size=3.17KB
 |     predicates: b.string_col = '15'
 |     row-size=89B cardinality=5
 |
 00:SCAN HDFS [functional.alltypesagg a]
    partition predicates: a.`day` >= 6
-   partitions=5/11 files=5 size=372.38KB
+   HDFS partitions=5/11 files=5 size=372.38KB
    predicates: a.tinyint_col = 15
    runtime filters: RF000 -> a.id, RF001 -> a.int_col
    row-size=95B cardinality=556
@@ -191,7 +191,7 @@ PLAN-ROOT SINK
 |  |
 |  01:SCAN HDFS [functional.alltypessmall b]
 |     partition predicates: b.`month` > 2
-|     partitions=2/4 files=2 size=3.17KB
+|     HDFS partitions=2/4 files=2 size=3.17KB
 |     predicates: b.string_col = '15'
 |     row-size=89B cardinality=5
 |
@@ -199,7 +199,7 @@ PLAN-ROOT SINK
 |
 00:SCAN HDFS [functional.alltypesagg a]
    partition predicates: a.`day` >= 6
-   partitions=5/11 files=5 size=372.38KB
+   HDFS partitions=5/11 files=5 size=372.38KB
    predicates: a.tinyint_col = 15
    runtime filters: RF000 -> a.id, RF001 -> a.int_col
    row-size=95B cardinality=556
@@ -232,19 +232,19 @@ PLAN-ROOT SINK
 |  |
 |  |--01:SCAN HDFS [functional.alltypessmall b]
 |  |     partition predicates: b.`month` > 2
-|  |     partitions=2/4 files=2 size=3.17KB
+|  |     HDFS partitions=2/4 files=2 size=3.17KB
 |  |     predicates: b.string_col = '15'
 |  |     row-size=89B cardinality=5
 |  |
 |  00:SCAN HDFS [functional.alltypesagg a]
 |     partition predicates: a.`day` >= 6
-|     partitions=5/11 files=5 size=372.38KB
+|     HDFS partitions=5/11 files=5 size=372.38KB
 |     predicates: a.tinyint_col = 15
 |     row-size=95B cardinality=556
 |
 02:SCAN HDFS [functional.alltypesaggnonulls c]
    partition predicates: c.`day` < 3
-   partitions=2/10 files=2 size=148.10KB
+   HDFS partitions=2/10 files=2 size=148.10KB
    row-size=95B cardinality=2.00K
 ---- DISTRIBUTEDPLAN
 PLAN-ROOT SINK
@@ -261,7 +261,7 @@ PLAN-ROOT SINK
 |  |
 |  02:SCAN HDFS [functional.alltypesaggnonulls c]
 |     partition predicates: c.`day` < 3
-|     partitions=2/10 files=2 size=148.10KB
+|     HDFS partitions=2/10 files=2 size=148.10KB
 |     row-size=95B cardinality=2.00K
 |
 07:EXCHANGE [HASH(a.id,b.string_col)]
@@ -274,7 +274,7 @@ PLAN-ROOT SINK
 |  |
 |  01:SCAN HDFS [functional.alltypessmall b]
 |     partition predicates: b.`month` > 2
-|     partitions=2/4 files=2 size=3.17KB
+|     HDFS partitions=2/4 files=2 size=3.17KB
 |     predicates: b.string_col = '15'
 |     runtime filters: RF001 -> b.string_col
 |     row-size=89B cardinality=5
@@ -283,7 +283,7 @@ PLAN-ROOT SINK
 |
 00:SCAN HDFS [functional.alltypesagg a]
    partition predicates: a.`day` >= 6
-   partitions=5/11 files=5 size=372.38KB
+   HDFS partitions=5/11 files=5 size=372.38KB
    predicates: a.tinyint_col = 15
    runtime filters: RF000 -> a.id
    row-size=95B cardinality=556
@@ -302,11 +302,11 @@ PLAN-ROOT SINK
 |  row-size=8B cardinality=100
 |
 |--01:SCAN HDFS [functional.alltypessmall]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     row-size=4B cardinality=100
 |
 00:SCAN HDFS [functional.alltypessmall]
-   partitions=4/4 files=4 size=6.32KB
+   HDFS partitions=4/4 files=4 size=6.32KB
    row-size=4B cardinality=100
 ====
 # join using values() in a subquery
@@ -325,7 +325,7 @@ PLAN-ROOT SINK
 |     row-size=13B cardinality=3
 |
 00:SCAN HDFS [functional.alltypessmall a]
-   partitions=4/4 files=4 size=6.32KB
+   HDFS partitions=4/4 files=4 size=6.32KB
    runtime filters: RF000 -> a.int_col
    row-size=4B cardinality=100
 ---- DISTRIBUTEDPLAN
@@ -345,7 +345,7 @@ PLAN-ROOT SINK
 |     row-size=13B cardinality=3
 |
 00:SCAN HDFS [functional.alltypessmall a]
-   partitions=4/4 files=4 size=6.32KB
+   HDFS partitions=4/4 files=4 size=6.32KB
    runtime filters: RF000 -> a.int_col
    row-size=4B cardinality=100
 ====
@@ -364,7 +364,7 @@ PLAN-ROOT SINK
 |     row-size=89B cardinality=50
 |
 00:SCAN HDFS [functional.alltypesagg]
-   partitions=11/11 files=11 size=814.73KB
+   HDFS partitions=11/11 files=11 size=814.73KB
    runtime filters: RF000 -> functional.alltypesagg.id, RF001 -> functional.alltypesagg.int_col
    row-size=95B cardinality=11.00K
 ---- DISTRIBUTEDPLAN
@@ -383,7 +383,7 @@ PLAN-ROOT SINK
 |     row-size=89B cardinality=50
 |
 00:SCAN HDFS [functional.alltypesagg]
-   partitions=11/11 files=11 size=814.73KB
+   HDFS partitions=11/11 files=11 size=814.73KB
    runtime filters: RF000 -> functional.alltypesagg.id, RF001 -> functional.alltypesagg.int_col
    row-size=95B cardinality=11.00K
 ====
@@ -414,7 +414,7 @@ PLAN-ROOT SINK
 |
 00:SCAN HDFS [functional.alltypesagg a]
    partition predicates: a.`day` >= 6
-   partitions=5/11 files=5 size=372.38KB
+   HDFS partitions=5/11 files=5 size=372.38KB
    predicates: a.tinyint_col = 15
    runtime filters: RF000 -> a.int_col, RF001 -> a.id
    row-size=95B cardinality=556
@@ -449,7 +449,7 @@ PLAN-ROOT SINK
 |
 00:SCAN HDFS [functional.alltypesagg a]
    partition predicates: a.`day` >= 6
-   partitions=5/11 files=5 size=372.38KB
+   HDFS partitions=5/11 files=5 size=372.38KB
    predicates: a.tinyint_col = 15
    runtime filters: RF000 -> a.int_col, RF001 -> a.id
    row-size=95B cardinality=556
@@ -477,7 +477,7 @@ PLAN-ROOT SINK
 |
 00:SCAN HDFS [functional.alltypesagg a]
    partition predicates: a.`day` >= 6
-   partitions=5/11 files=5 size=372.38KB
+   HDFS partitions=5/11 files=5 size=372.38KB
    predicates: a.tinyint_col = 15
    runtime filters: RF000 -> a.int_col, RF001 -> a.id
    row-size=95B cardinality=556
@@ -535,7 +535,7 @@ PLAN-ROOT SINK
 |  |  row-size=25B cardinality=106
 |  |
 |  |--02:SCAN HDFS [functional.alltypesnopart c]
-|  |     partitions=1/1 files=0 size=0B
+|  |     HDFS partitions=1/1 files=0 size=0B
 |  |     row-size=5B cardinality=0
 |  |
 |  04:HASH JOIN [INNER JOIN]
@@ -544,17 +544,17 @@ PLAN-ROOT SINK
 |  |  row-size=20B cardinality=106
 |  |
 |  |--01:SCAN HDFS [functional.alltypessmall b]
-|  |     partitions=4/4 files=4 size=6.32KB
+|  |     HDFS partitions=4/4 files=4 size=6.32KB
 |  |     runtime filters: RF002 -> b.id
 |  |     row-size=8B cardinality=100
 |  |
 |  00:SCAN HDFS [functional.alltypesagg a]
-|     partitions=11/11 files=11 size=814.73KB
+|     HDFS partitions=11/11 files=11 size=814.73KB
 |     runtime filters: RF002 -> a.id, RF004 -> a.id, RF005 -> a.int_col
 |     row-size=12B cardinality=11.00K
 |
 03:SCAN HDFS [functional.alltypesagg d]
-   partitions=11/11 files=11 size=814.73KB
+   HDFS partitions=11/11 files=11 size=814.73KB
    runtime filters: RF000 -> d.id
    row-size=4B cardinality=11.00K
 ---- DISTRIBUTEDPLAN
@@ -596,7 +596,7 @@ PLAN-ROOT SINK
 |  |--13:EXCHANGE [HASH(c.id)]
 |  |  |
 |  |  02:SCAN HDFS [functional.alltypesnopart c]
-|  |     partitions=1/1 files=0 size=0B
+|  |     HDFS partitions=1/1 files=0 size=0B
 |  |     row-size=5B cardinality=0
 |  |
 |  12:EXCHANGE [HASH(b.id)]
@@ -609,17 +609,17 @@ PLAN-ROOT SINK
 |  |--11:EXCHANGE [BROADCAST]
 |  |  |
 |  |  01:SCAN HDFS [functional.alltypessmall b]
-|  |     partitions=4/4 files=4 size=6.32KB
+|  |     HDFS partitions=4/4 files=4 size=6.32KB
 |  |     runtime filters: RF002 -> b.id
 |  |     row-size=8B cardinality=100
 |  |
 |  00:SCAN HDFS [functional.alltypesagg a]
-|     partitions=11/11 files=11 size=814.73KB
+|     HDFS partitions=11/11 files=11 size=814.73KB
 |     runtime filters: RF002 -> a.id, RF004 -> a.id, RF005 -> a.int_col
 |     row-size=12B cardinality=11.00K
 |
 03:SCAN HDFS [functional.alltypesagg d]
-   partitions=11/11 files=11 size=814.73KB
+   HDFS partitions=11/11 files=11 size=814.73KB
    runtime filters: RF000 -> d.id
    row-size=4B cardinality=11.00K
 ====
@@ -635,11 +635,11 @@ PLAN-ROOT SINK
 |  row-size=178B cardinality=1
 |
 |--01:SCAN HDFS [functional.alltypessmall b]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     row-size=89B cardinality=100
 |
 00:SCAN HDFS [functional.alltypessmall a]
-   partitions=4/4 files=4 size=6.32KB
+   HDFS partitions=4/4 files=4 size=6.32KB
    runtime filters: RF000 -> a.id
    row-size=89B cardinality=100
 ---- DISTRIBUTEDPLAN
@@ -657,13 +657,13 @@ PLAN-ROOT SINK
 |--04:EXCHANGE [HASH(b.id)]
 |  |
 |  01:SCAN HDFS [functional.alltypessmall b]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     row-size=89B cardinality=100
 |
 03:EXCHANGE [HASH(a.id)]
 |
 00:SCAN HDFS [functional.alltypessmall a]
-   partitions=4/4 files=4 size=6.32KB
+   HDFS partitions=4/4 files=4 size=6.32KB
    runtime filters: RF000 -> a.id
    row-size=89B cardinality=100
 ====
@@ -681,7 +681,7 @@ PLAN-ROOT SINK
 |  row-size=72B cardinality=0
 |
 |--02:SCAN HDFS [functional.testtbl t3]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     row-size=24B cardinality=0
 |
 03:HASH JOIN [INNER JOIN]
@@ -690,12 +690,12 @@ PLAN-ROOT SINK
 |  row-size=48B cardinality=0
 |
 |--01:SCAN HDFS [functional.testtbl t2]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     runtime filters: RF000 -> t2.id
 |     row-size=24B cardinality=0
 |
 00:SCAN HDFS [functional.testtbl t1]
-   partitions=1/1 files=0 size=0B
+   HDFS partitions=1/1 files=0 size=0B
    runtime filters: RF000 -> t1.id, RF002 -> t1.id
    row-size=24B cardinality=0
 ---- DISTRIBUTEDPLAN
@@ -711,7 +711,7 @@ PLAN-ROOT SINK
 |--06:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [functional.testtbl t3]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     row-size=24B cardinality=0
 |
 03:HASH JOIN [INNER JOIN, BROADCAST]
@@ -722,12 +722,12 @@ PLAN-ROOT SINK
 |--05:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [functional.testtbl t2]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     runtime filters: RF000 -> t2.id
 |     row-size=24B cardinality=0
 |
 00:SCAN HDFS [functional.testtbl t1]
-   partitions=1/1 files=0 size=0B
+   HDFS partitions=1/1 files=0 size=0B
    runtime filters: RF000 -> t1.id, RF002 -> t1.id
    row-size=24B cardinality=0
 ====
@@ -748,7 +748,7 @@ PLAN-ROOT SINK
 |     row-size=16B cardinality=0
 |
 01:SCAN HDFS [functional.alltypes b]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> b.int_col
    row-size=89B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
@@ -768,7 +768,7 @@ PLAN-ROOT SINK
 |     row-size=16B cardinality=0
 |
 01:SCAN HDFS [functional.alltypes b]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> b.int_col
    row-size=89B cardinality=7.30K
 ====
@@ -782,11 +782,11 @@ PLAN-ROOT SINK
 |  row-size=48B cardinality=0
 |
 |--01:SCAN HDFS [functional.testtbl]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     row-size=24B cardinality=0
 |
 00:SCAN HDFS [functional.testtbl t1]
-   partitions=1/1 files=0 size=0B
+   HDFS partitions=1/1 files=0 size=0B
    row-size=24B cardinality=0
 ---- DISTRIBUTEDPLAN
 PLAN-ROOT SINK
@@ -799,11 +799,11 @@ PLAN-ROOT SINK
 |--03:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [functional.testtbl]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     row-size=24B cardinality=0
 |
 00:SCAN HDFS [functional.testtbl t1]
-   partitions=1/1 files=0 size=0B
+   HDFS partitions=1/1 files=0 size=0B
    row-size=24B cardinality=0
 ====
 # cross join with where clause
@@ -817,11 +817,11 @@ PLAN-ROOT SINK
 |  row-size=48B cardinality=0
 |
 |--01:SCAN HDFS [functional.testtbl t2]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     row-size=24B cardinality=0
 |
 00:SCAN HDFS [functional.testtbl t1]
-   partitions=1/1 files=0 size=0B
+   HDFS partitions=1/1 files=0 size=0B
    row-size=24B cardinality=0
 ---- DISTRIBUTEDPLAN
 PLAN-ROOT SINK
@@ -835,11 +835,11 @@ PLAN-ROOT SINK
 |--03:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [functional.testtbl t2]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     row-size=24B cardinality=0
 |
 00:SCAN HDFS [functional.testtbl t1]
-   partitions=1/1 files=0 size=0B
+   HDFS partitions=1/1 files=0 size=0B
    row-size=24B cardinality=0
 ====
 # Tests that the partitioned join between b and c exploits the existing
@@ -858,7 +858,7 @@ PLAN-ROOT SINK
 |  row-size=267B cardinality=7.30K
 |
 |--02:SCAN HDFS [functional.alltypes c]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=89B cardinality=7.30K
 |
 03:HASH JOIN [INNER JOIN]
@@ -867,12 +867,12 @@ PLAN-ROOT SINK
 |  row-size=178B cardinality=7.30K
 |
 |--01:SCAN HDFS [functional.alltypes b]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     runtime filters: RF000 -> b.id, RF001 -> b.int_col
 |     row-size=89B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypes a]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> a.id, RF001 -> a.int_col, RF004 -> a.id, RF005 -> a.int_col
    row-size=89B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
@@ -888,7 +888,7 @@ PLAN-ROOT SINK
 |--07:EXCHANGE [HASH(c.id,c.int_col)]
 |  |
 |  02:SCAN HDFS [functional.alltypes c]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=89B cardinality=7.30K
 |
 03:HASH JOIN [INNER JOIN, PARTITIONED]
@@ -899,14 +899,14 @@ PLAN-ROOT SINK
 |--06:EXCHANGE [HASH(b.id,b.int_col)]
 |  |
 |  01:SCAN HDFS [functional.alltypes b]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     runtime filters: RF000 -> b.id, RF001 -> b.int_col
 |     row-size=89B cardinality=7.30K
 |
 05:EXCHANGE [HASH(a.id,a.int_col)]
 |
 00:SCAN HDFS [functional.alltypes a]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> a.id, RF001 -> a.int_col, RF004 -> a.id, RF005 -> a.int_col
    row-size=89B cardinality=7.30K
 ====
@@ -931,11 +931,11 @@ PLAN-ROOT SINK
 |  |  row-size=13B cardinality=20
 |  |
 |  01:SCAN HDFS [functional.alltypes]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=5B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypes a]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> a.bool_col, RF001 -> a.int_col
    row-size=89B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
@@ -961,13 +961,13 @@ PLAN-ROOT SINK
 |  |  row-size=13B cardinality=20
 |  |
 |  01:SCAN HDFS [functional.alltypes]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=5B cardinality=7.30K
 |
 06:EXCHANGE [HASH(a.int_col,a.bool_col)]
 |
 00:SCAN HDFS [functional.alltypes a]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> a.bool_col, RF001 -> a.int_col
    row-size=89B cardinality=7.30K
 ====
@@ -989,7 +989,7 @@ PLAN-ROOT SINK
 |  row-size=191B cardinality=10.66M
 |
 |--01:SCAN HDFS [functional.alltypes b]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=89B cardinality=7.30K
 |
 04:HASH JOIN [INNER JOIN]
@@ -1003,12 +1003,12 @@ PLAN-ROOT SINK
 |  |  row-size=13B cardinality=20
 |  |
 |  02:SCAN HDFS [functional.alltypes]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     runtime filters: RF000 -> functional.alltypes.bool_col, RF001 -> functional.alltypes.int_col
 |     row-size=5B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypes a]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> a.bool_col, RF001 -> a.int_col, RF004 -> a.bool_col, RF005 -> a.int_col
    row-size=89B cardinality=7.30K
 ---- DISTRIBUTEDPLAN
@@ -1024,7 +1024,7 @@ PLAN-ROOT SINK
 |--09:EXCHANGE [HASH(b.int_col,b.bool_col)]
 |  |
 |  01:SCAN HDFS [functional.alltypes b]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=89B cardinality=7.30K
 |
 04:HASH JOIN [INNER JOIN, PARTITIONED]
@@ -1045,14 +1045,14 @@ PLAN-ROOT SINK
 |  |  row-size=13B cardinality=20
 |  |
 |  02:SCAN HDFS [functional.alltypes]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     runtime filters: RF000 -> functional.alltypes.bool_col, RF001 -> functional.alltypes.int_col
 |     row-size=5B cardinality=7.30K
 |
 08:EXCHANGE [HASH(a.int_col,a.bool_col)]
 |
 00:SCAN HDFS [functional.alltypes a]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> a.bool_col, RF001 -> a.int_col, RF004 -> a.bool_col, RF005 -> a.int_col
    row-size=89B cardinality=7.30K
 ====
@@ -1077,12 +1077,12 @@ PLAN-ROOT SINK
 |  row-size=81B cardinality=73
 |
 |--00:SCAN HDFS [functional.alltypes a]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     predicates: a.id = a.int_col, a.id = a.tinyint_col, a.int_col = a.bigint_col, a.tinyint_col = a.smallint_col
 |     row-size=32B cardinality=730
 |
 01:SCAN HDFS [functional.alltypes b]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    predicates: b.id = b.int_col, b.id = b.bigint_col, b.string_col = b.date_string_col
    runtime filters: RF000 -> b.id, RF001 -> b.string_col
    row-size=49B cardinality=730
@@ -1107,12 +1107,12 @@ PLAN-ROOT SINK
 |  row-size=81B cardinality=730
 |
 |--00:SCAN HDFS [functional.alltypes a]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     predicates: a.int_col = a.bigint_col, a.tinyint_col = a.smallint_col
 |     row-size=32B cardinality=730
 |
 01:SCAN HDFS [functional.alltypes b]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> b.id, RF001 -> b.int_col, RF002 -> b.id, RF003 -> b.id, RF004 -> b.bigint_col, RF005 -> b.id, RF006 -> b.string_col, RF007 -> b.id, RF008 -> b.date_string_col
    row-size=49B cardinality=7.30K
 ====
@@ -1139,16 +1139,16 @@ PLAN-ROOT SINK
 |  |  row-size=178B cardinality=8
 |  |
 |  |--01:SCAN HDFS [functional.alltypestiny b]
-|  |     partitions=4/4 files=4 size=460B
+|  |     HDFS partitions=4/4 files=4 size=460B
 |  |     row-size=89B cardinality=8
 |  |
 |  00:SCAN HDFS [functional.alltypes a]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     runtime filters: RF004 -> a.id, RF005 -> a.int_col
 |     row-size=89B cardinality=7.30K
 |
 02:SCAN HDFS [functional.alltypessmall c]
-   partitions=4/4 files=4 size=6.32KB
+   HDFS partitions=4/4 files=4 size=6.32KB
    runtime filters: RF000 -> c.id, RF001 -> c.int_col
    row-size=89B cardinality=100
 ====
@@ -1170,7 +1170,7 @@ PLAN-ROOT SINK
 |  row-size=267B cardinality=5.84K
 |
 |--02:SCAN HDFS [functional.alltypessmall c]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     predicates: c.id = c.int_col
 |     row-size=89B cardinality=10
 |
@@ -1180,12 +1180,12 @@ PLAN-ROOT SINK
 |  row-size=178B cardinality=5.84K
 |
 |--00:SCAN HDFS [functional.alltypestiny a]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     runtime filters: RF000 -> a.id
 |     row-size=89B cardinality=8
 |
 01:SCAN HDFS [functional.alltypes b]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> b.int_col, RF002 -> b.int_col
    row-size=89B cardinality=7.30K
 ====
@@ -1204,16 +1204,16 @@ PLAN-ROOT SINK
 04:HASH JOIN [INNER JOIN]
 |  hash predicates: int_col = int_col
 |  runtime filters: RF000 <- int_col
-|  row-size=28B cardinality=1.00K
+|  row-size=28B cardinality=100
 |
 |--03:AGGREGATE [FINALIZE]
 |  |  output: count(*)
 |  |  group by: int_col, smallint_col
 |  |  having: int_col = count(*)
-|  |  row-size=14B cardinality=10
+|  |  row-size=14B cardinality=1
 |  |
 |  02:SCAN HDFS [functional.alltypessmall]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     predicates: functional.alltypessmall.int_col = functional.alltypessmall.smallint_col
 |     row-size=6B cardinality=10
 |
@@ -1223,7 +1223,7 @@ PLAN-ROOT SINK
 |  row-size=14B cardinality=100
 |
 00:SCAN HDFS [functional.alltypes]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> functional.alltypes.int_col
    row-size=6B cardinality=7.30K
 ====
@@ -1253,7 +1253,7 @@ PLAN-ROOT SINK
 |  row-size=24B cardinality=821
 |
 |--02:SCAN HDFS [functional.alltypestiny t3]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     predicates: t3.int_col = t3.bigint_col
 |     row-size=12B cardinality=1
 |
@@ -1263,12 +1263,12 @@ PLAN-ROOT SINK
 |  row-size=12B cardinality=827.84K
 |
 |--00:SCAN HDFS [functional.alltypes t1]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     runtime filters: RF000 -> t1.smallint_col, RF001 -> t1.smallint_col
 |     row-size=2B cardinality=7.30K
 |
 01:SCAN HDFS [functional.alltypesagg t2]
-   partitions=11/11 files=11 size=814.73KB
+   HDFS partitions=11/11 files=11 size=814.73KB
    runtime filters: RF000 -> t2.smallint_col, RF001 -> t2.bigint_col, RF004 -> t2.smallint_col
    row-size=10B cardinality=11.00K
 ---- DISTRIBUTEDPLAN
@@ -1284,7 +1284,7 @@ PLAN-ROOT SINK
 |--07:EXCHANGE [HASH(t3.int_col)]
 |  |
 |  02:SCAN HDFS [functional.alltypestiny t3]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     predicates: t3.int_col = t3.bigint_col
 |     row-size=12B cardinality=1
 |
@@ -1296,14 +1296,14 @@ PLAN-ROOT SINK
 |--06:EXCHANGE [HASH(t1.smallint_col)]
 |  |
 |  00:SCAN HDFS [functional.alltypes t1]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     runtime filters: RF000 -> t1.smallint_col, RF001 -> t1.smallint_col
 |     row-size=2B cardinality=7.30K
 |
 05:EXCHANGE [HASH(t2.smallint_col)]
 |
 01:SCAN HDFS [functional.alltypesagg t2]
-   partitions=11/11 files=11 size=814.73KB
+   HDFS partitions=11/11 files=11 size=814.73KB
    runtime filters: RF000 -> t2.smallint_col, RF001 -> t2.bigint_col, RF004 -> t2.smallint_col
    row-size=10B cardinality=11.00K
 ====
@@ -1327,12 +1327,12 @@ PLAN-ROOT SINK
 |  row-size=25B cardinality=7.30K
 |
 |--01:SCAN HDFS [functional.alltypessmall]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     predicates: int_col * int_col = bigint_col, id + id = tinyint_col
 |     row-size=17B cardinality=10
 |
 00:SCAN HDFS [functional.alltypes a]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> a.id, RF001 -> a.int_col
    row-size=8B cardinality=7.30K
 ====
@@ -1365,11 +1365,11 @@ PLAN-ROOT SINK
 |  |  row-size=17B cardinality=20
 |  |
 |  01:SCAN HDFS [functional.alltypessmall]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     row-size=17B cardinality=100
 |
 00:SCAN HDFS [functional.alltypes a]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> a.id, RF001 -> a.int_col
    row-size=8B cardinality=7.30K
 ====
@@ -1406,11 +1406,11 @@ PLAN-ROOT SINK
 |  |  row-size=33B cardinality=100
 |  |
 |  01:SCAN HDFS [functional.alltypessmall]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     row-size=17B cardinality=100
 |
 00:SCAN HDFS [functional.alltypes a]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> a.id, RF001 -> a.int_col
    row-size=8B cardinality=7.30K
 ====
@@ -1437,17 +1437,17 @@ PLAN-ROOT SINK
 |  |  row-size=25B cardinality=11
 |  |
 |  |--03:SCAN HDFS [functional.alltypestiny]
-|  |     partitions=4/4 files=4 size=460B
+|  |     HDFS partitions=4/4 files=4 size=460B
 |  |     predicates: id - id = tinyint_col, int_col / int_col = bigint_col
 |  |     row-size=17B cardinality=1
 |  |
 |  02:SCAN HDFS [functional.alltypessmall]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     predicates: int_col * int_col = bigint_col, id + id = tinyint_col
 |     row-size=17B cardinality=10
 |
 00:SCAN HDFS [functional.alltypes a]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> a.id, RF001 -> a.int_col
    row-size=8B cardinality=7.30K
 ====
@@ -1468,7 +1468,7 @@ PLAN-ROOT SINK
 |  row-size=53B cardinality=33.58K
 |
 |--02:SCAN HDFS [functional.alltypes t2]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=13B cardinality=7.30K
 |
 03:HASH JOIN [INNER JOIN]
@@ -1477,12 +1477,12 @@ PLAN-ROOT SINK
 |  row-size=40B cardinality=46
 |
 |--01:SCAN HDFS [functional.alltypestiny t3]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     runtime filters: RF000 -> t3.date_string_col
 |     row-size=22B cardinality=8
 |
 00:SCAN HDFS [functional.alltypesagg t1]
-   partitions=11/11 files=11 size=814.73KB
+   HDFS partitions=11/11 files=11 size=814.73KB
    runtime filters: RF000 -> t1.string_col, RF002 -> t1.tinyint_col, RF003 -> t1.string_col
    row-size=18B cardinality=11.00K
 ====
@@ -1504,7 +1504,7 @@ PLAN-ROOT SINK
 |  |  row-size=8B cardinality=2
 |  |
 |  02:SCAN HDFS [functional.alltypestiny]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     row-size=8B cardinality=8
 |
 01:AGGREGATE [FINALIZE]
@@ -1512,7 +1512,7 @@ PLAN-ROOT SINK
 |  row-size=4B cardinality=10
 |
 00:SCAN HDFS [functional.alltypessmall]
-   partitions=4/4 files=4 size=6.32KB
+   HDFS partitions=4/4 files=4 size=6.32KB
    row-size=4B cardinality=100
 ---- DISTRIBUTEDPLAN
 PLAN-ROOT SINK
@@ -1534,7 +1534,7 @@ PLAN-ROOT SINK
 |  |  row-size=8B cardinality=2
 |  |
 |  02:SCAN HDFS [functional.alltypestiny]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     row-size=8B cardinality=8
 |
 06:AGGREGATE [FINALIZE]
@@ -1548,7 +1548,7 @@ PLAN-ROOT SINK
 |  row-size=4B cardinality=10
 |
 00:SCAN HDFS [functional.alltypessmall]
-   partitions=4/4 files=4 size=6.32KB
+   HDFS partitions=4/4 files=4 size=6.32KB
    row-size=4B cardinality=100
 ====
 # Test joins with union inputs. One side of the join is a union.
@@ -1583,20 +1583,20 @@ PLAN-ROOT SINK
 |  |
 |  |--02:SCAN HDFS [functional.alltypessmall]
 |  |     partition predicates: `year` = 2009, `month` = 2
-|  |     partitions=1/4 files=1 size=1.58KB
+|  |     HDFS partitions=1/4 files=1 size=1.58KB
 |  |     predicates: functional.alltypessmall.id < 5
 |  |     row-size=17B cardinality=3
 |  |
 |  01:SCAN HDFS [functional.alltypessmall]
 |     partition predicates: `year` = 2009, `month` = 1
-|     partitions=1/4 files=1 size=1.57KB
+|     HDFS partitions=1/4 files=1 size=1.57KB
 |     predicates: functional.alltypessmall.id < 5
 |     row-size=17B cardinality=3
 |
 05:EXCHANGE [HASH(b.id)]
 |
 03:SCAN HDFS [functional.alltypestiny b]
-   partitions=4/4 files=4 size=460B
+   HDFS partitions=4/4 files=4 size=460B
    predicates: b.id < 5
    runtime filters: RF000 -> b.id
    row-size=17B cardinality=1
@@ -1632,20 +1632,20 @@ PLAN-ROOT SINK
 |  |
 |  |--03:SCAN HDFS [functional.alltypessmall]
 |  |     partition predicates: `year` = 2009, `month` = 2
-|  |     partitions=1/4 files=1 size=1.58KB
+|  |     HDFS partitions=1/4 files=1 size=1.58KB
 |  |     predicates: functional.alltypessmall.id < 5
 |  |     row-size=17B cardinality=3
 |  |
 |  02:SCAN HDFS [functional.alltypessmall]
 |     partition predicates: `year` = 2009, `month` = 1
-|     partitions=1/4 files=1 size=1.57KB
+|     HDFS partitions=1/4 files=1 size=1.57KB
 |     predicates: functional.alltypessmall.id < 5
 |     row-size=17B cardinality=3
 |
 05:EXCHANGE [HASH(b.id)]
 |
 00:SCAN HDFS [functional.alltypestiny b]
-   partitions=4/4 files=4 size=460B
+   HDFS partitions=4/4 files=4 size=460B
    predicates: b.id < 5
    row-size=17B cardinality=1
 ====
@@ -1687,13 +1687,13 @@ PLAN-ROOT SINK
 |  |
 |  |--05:SCAN HDFS [functional.alltypessmall]
 |  |     partition predicates: `year` = 2009, `month` = 2
-|  |     partitions=1/4 files=1 size=1.58KB
+|  |     HDFS partitions=1/4 files=1 size=1.58KB
 |  |     predicates: functional.alltypessmall.id < 5
 |  |     row-size=17B cardinality=3
 |  |
 |  04:SCAN HDFS [functional.alltypessmall]
 |     partition predicates: `year` = 2009, `month` = 1
-|     partitions=1/4 files=1 size=1.57KB
+|     HDFS partitions=1/4 files=1 size=1.57KB
 |     predicates: functional.alltypessmall.id < 5
 |     row-size=17B cardinality=3
 |
@@ -1705,12 +1705,12 @@ PLAN-ROOT SINK
 |
 |--02:SCAN HDFS [functional.alltypessmall]
 |     partition predicates: `year` = 2009, `month` = 2
-|     partitions=1/4 files=1 size=1.58KB
+|     HDFS partitions=1/4 files=1 size=1.58KB
 |     row-size=17B cardinality=25
 |
 01:SCAN HDFS [functional.alltypessmall]
    partition predicates: `year` = 2009, `month` = 1
-   partitions=1/4 files=1 size=1.57KB
+   HDFS partitions=1/4 files=1 size=1.57KB
    row-size=17B cardinality=25
 ====
 # Test joins with decimals with different precision and scale
@@ -1730,11 +1730,11 @@ PLAN-ROOT SINK
 |  row-size=12B cardinality=unavailable
 |
 |--01:SCAN HDFS [functional.decimal_tbl b]
-|     partitions=1/1 files=1 size=195B
+|     HDFS partitions=1/1 files=1 size=195B
 |     row-size=8B cardinality=unavailable
 |
 00:SCAN HDFS [functional.decimal_tbl a]
-   partitions=1/1 files=1 size=195B
+   HDFS partitions=1/1 files=1 size=195B
    runtime filters: RF000 -> a.d1
    row-size=4B cardinality=unavailable
 ====
@@ -1752,12 +1752,12 @@ PLAN-ROOT SINK
 |  row-size=33B cardinality=1
 |
 |--01:SCAN HDFS [functional.dimtbl d]
-|     partitions=1/1 files=1 size=171B
+|     HDFS partitions=1/1 files=1 size=171B
 |     predicates: d.id < 10, d.name = 'Name2'
 |     row-size=29B cardinality=1
 |
 00:SCAN HDFS [functional.jointbl j]
-   partitions=1/1 files=1 size=433B
+   HDFS partitions=1/1 files=1 size=433B
    predicates: j.test_id < 10
    runtime filters: RF000 -> j.test_id
    row-size=33B cardinality=2
@@ -1776,12 +1776,12 @@ PLAN-ROOT SINK
 |  row-size=89B cardinality=1
 |
 |--01:SCAN HDFS [functional.alltypestiny b]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     predicates: b.id < 10
 |     row-size=89B cardinality=1
 |
 00:SCAN HDFS [functional.alltypes a]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    predicates: a.id < 10, a.bool_col = FALSE
    runtime filters: RF000 -> a.id
    row-size=9B cardinality=516
@@ -1799,12 +1799,12 @@ PLAN-ROOT SINK
 |  row-size=33B cardinality=2
 |
 |--01:SCAN HDFS [functional.dimtbl d]
-|     partitions=1/1 files=1 size=171B
+|     HDFS partitions=1/1 files=1 size=171B
 |     predicates: d.id < 10, d.name = 'Name2'
 |     row-size=29B cardinality=1
 |
 00:SCAN HDFS [functional.jointbl j]
-   partitions=1/1 files=1 size=433B
+   HDFS partitions=1/1 files=1 size=433B
    predicates: j.test_id < 10
    row-size=33B cardinality=2
 ====
@@ -1829,16 +1829,16 @@ PLAN-ROOT SINK
 |  |  row-size=12B cardinality=10
 |  |
 |  |--01:SCAN HDFS [functional.dimtbl d]
-|  |     partitions=1/1 files=1 size=171B
+|  |     HDFS partitions=1/1 files=1 size=171B
 |  |     row-size=8B cardinality=10
 |  |
 |  00:SCAN HDFS [functional.jointbl j]
-|     partitions=1/1 files=1 size=433B
+|     HDFS partitions=1/1 files=1 size=433B
 |     predicates: j.alltypes_id = 5000
 |     row-size=12B cardinality=10
 |
 02:SCAN HDFS [functional.jointbl k]
-   partitions=1/1 files=1 size=433B
+   HDFS partitions=1/1 files=1 size=433B
    runtime filters: RF000 -> k.test_id
    row-size=8B cardinality=19
 ====
@@ -1859,7 +1859,7 @@ PLAN-ROOT SINK
 |--07:EXCHANGE [HASH(c.id)]
 |  |
 |  02:SCAN HDFS [functional.alltypessmall c]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     row-size=89B cardinality=100
 |
 06:EXCHANGE [HASH(b.id)]
@@ -1872,12 +1872,12 @@ PLAN-ROOT SINK
 |--05:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [functional.alltypes b]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     runtime filters: RF000 -> b.id
 |     row-size=89B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypestiny a]
-   partitions=4/4 files=4 size=460B
+   HDFS partitions=4/4 files=4 size=460B
    runtime filters: RF000 -> a.id, RF002 -> a.id
    row-size=89B cardinality=8
 ====
@@ -1898,7 +1898,7 @@ PLAN-ROOT SINK
 |--07:EXCHANGE [HASH(c.id)]
 |  |
 |  02:SCAN HDFS [functional.alltypessmall c]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     row-size=89B cardinality=100
 |
 06:EXCHANGE [HASH(b.id)]
@@ -1911,12 +1911,12 @@ PLAN-ROOT SINK
 |--05:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [functional.alltypes b]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     runtime filters: RF000 -> b.id
 |     row-size=89B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypestiny a]
-   partitions=4/4 files=4 size=460B
+   HDFS partitions=4/4 files=4 size=460B
    runtime filters: RF000 -> a.id, RF002 -> a.id
    row-size=89B cardinality=8
 ====
@@ -1943,7 +1943,7 @@ PLAN-ROOT SINK
 |--07:EXCHANGE [HASH(c.id)]
 |  |
 |  02:SCAN HDFS [functional.alltypessmall c]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     row-size=89B cardinality=100
 |
 06:EXCHANGE [HASH(b.id)]
@@ -1956,12 +1956,12 @@ PLAN-ROOT SINK
 |--05:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [functional.alltypes b]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     runtime filters: RF000 -> b.id
 |     row-size=89B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypestiny a]
-   partitions=4/4 files=4 size=460B
+   HDFS partitions=4/4 files=4 size=460B
    runtime filters: RF000 -> a.id, RF002 -> a.id
    row-size=89B cardinality=8
 ====
@@ -1987,16 +1987,16 @@ PLAN-ROOT SINK
 |  |  row-size=178B cardinality=8
 |  |
 |  |--01:SCAN HDFS [functional.alltypestiny b]
-|  |     partitions=4/4 files=4 size=460B
+|  |     HDFS partitions=4/4 files=4 size=460B
 |  |     row-size=89B cardinality=8
 |  |
 |  00:SCAN HDFS [functional.alltypestiny a]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     runtime filters: RF000 -> a.id
 |     row-size=89B cardinality=8
 |
 02:SCAN HDFS [functional.alltypes c]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    row-size=89B cardinality=7.30K
 ====
 # Tests the generation of a distributed plan in which the input fragments
@@ -2038,7 +2038,7 @@ PLAN-ROOT SINK
 |  |  row-size=5B cardinality=4
 |  |
 |  00:SCAN HDFS [functional.alltypestiny]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     row-size=5B cardinality=8
 |
 06:AGGREGATE [FINALIZE]
@@ -2052,7 +2052,7 @@ PLAN-ROOT SINK
 |  row-size=13B cardinality=10
 |
 02:SCAN HDFS [functional.alltypessmall]
-   partitions=4/4 files=4 size=6.32KB
+   HDFS partitions=4/4 files=4 size=6.32KB
    predicates: functional.alltypessmall.tinyint_col = functional.alltypessmall.bigint_col, functional.alltypessmall.tinyint_col = functional.alltypessmall.int_col
    runtime filters: RF000 -> functional.alltypessmall.tinyint_col
    row-size=13B cardinality=10
@@ -2096,7 +2096,7 @@ PLAN-ROOT SINK
 |  |  row-size=5B cardinality=4
 |  |
 |  00:SCAN HDFS [functional.alltypestiny]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     row-size=5B cardinality=8
 |
 06:AGGREGATE [FINALIZE]
@@ -2110,7 +2110,7 @@ PLAN-ROOT SINK
 |  row-size=13B cardinality=100
 |
 02:SCAN HDFS [functional.alltypessmall]
-   partitions=4/4 files=4 size=6.32KB
+   HDFS partitions=4/4 files=4 size=6.32KB
    row-size=13B cardinality=100
 ====
 # Test conservative treatment of partition-compatible input fragments
@@ -2152,7 +2152,7 @@ PLAN-ROOT SINK
 |  |  row-size=21B cardinality=100
 |  |
 |  02:SCAN HDFS [functional.alltypessmall]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     row-size=21B cardinality=100
 |
 06:AGGREGATE [FINALIZE]
@@ -2166,7 +2166,7 @@ PLAN-ROOT SINK
 |  row-size=21B cardinality=4
 |
 00:SCAN HDFS [functional.alltypestiny]
-   partitions=4/4 files=4 size=460B
+   HDFS partitions=4/4 files=4 size=460B
    runtime filters: RF000 -> functional.alltypestiny.bigint_col, RF001 -> functional.alltypestiny.string_col
    row-size=21B cardinality=8
 ====
@@ -2191,7 +2191,7 @@ PLAN-ROOT SINK
 |--06:EXCHANGE [HASH(b.int_col,b.string_col)]
 |  |
 |  02:SCAN HDFS [functional.alltypes b]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=17B cardinality=7.30K
 |
 05:AGGREGATE [FINALIZE]
@@ -2205,7 +2205,7 @@ PLAN-ROOT SINK
 |  row-size=17B cardinality=4
 |
 00:SCAN HDFS [functional.alltypestiny]
-   partitions=4/4 files=4 size=460B
+   HDFS partitions=4/4 files=4 size=460B
    runtime filters: RF000 -> functional.alltypestiny.int_col, RF001 -> functional.alltypestiny.string_col
    row-size=17B cardinality=8
 ====
@@ -2238,13 +2238,13 @@ PLAN-ROOT SINK
 |  |  row-size=17B cardinality=4
 |  |
 |  01:SCAN HDFS [functional.alltypestiny]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     row-size=17B cardinality=8
 |
 06:EXCHANGE [HASH(a.int_col,a.string_col)]
 |
 00:SCAN HDFS [functional.alltypes a]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> a.int_col, RF001 -> a.string_col
    row-size=17B cardinality=7.30K
 ====
@@ -2286,7 +2286,7 @@ PLAN-ROOT SINK
 |  |  row-size=28B cardinality=730
 |  |
 |  04:SCAN HDFS [functional.alltypes]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     predicates: bigint_col = smallint_col, smallint_col = tinyint_col
 |     row-size=28B cardinality=730
 |
@@ -2308,7 +2308,7 @@ PLAN-ROOT SINK
 |  |  row-size=20B cardinality=1
 |  |
 |  02:SCAN HDFS [functional.alltypestiny]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     predicates: functional.alltypestiny.int_col = functional.alltypestiny.smallint_col
 |     runtime filters: RF000 -> functional.alltypestiny.smallint_col, RF001 -> functional.alltypestiny.string_col
 |     row-size=20B cardinality=1
@@ -2324,7 +2324,7 @@ PLAN-ROOT SINK
 |  row-size=19B cardinality=10
 |
 00:SCAN HDFS [functional.alltypessmall]
-   partitions=4/4 files=4 size=6.32KB
+   HDFS partitions=4/4 files=4 size=6.32KB
    predicates: functional.alltypessmall.smallint_col = functional.alltypessmall.int_col
    runtime filters: RF000 -> functional.alltypessmall.int_col, RF001 -> functional.alltypessmall.string_col, RF004 -> functional.alltypessmall.int_col, RF005 -> functional.alltypessmall.string_col
    row-size=19B cardinality=10
@@ -2350,7 +2350,7 @@ PLAN-ROOT SINK
 |  row-size=97B cardinality=7.30K
 |
 |--02:SCAN HDFS [functional.alltypes c]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     predicates: c.int_col < 10
 |     row-size=8B cardinality=730
 |
@@ -2360,11 +2360,11 @@ PLAN-ROOT SINK
 |  row-size=97B cardinality=7.30K
 |
 |--01:SCAN HDFS [functional.alltypes b]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=8B cardinality=7.30K
 |
 00:SCAN HDFS [functional.alltypes a]
-   partitions=24/24 files=24 size=478.45KB
+   HDFS partitions=24/24 files=24 size=478.45KB
    runtime filters: RF000 -> a.id
    row-size=89B cardinality=7.30K
 ====
@@ -2395,7 +2395,7 @@ PLAN-ROOT SINK
 |  |  row-size=178B cardinality=730
 |  |
 |  |--02:SCAN HDFS [functional.alltypestiny c]
-|  |     partitions=4/4 files=4 size=460B
+|  |     HDFS partitions=4/4 files=4 size=460B
 |  |     predicates: c.int_col < 10, c.bool_col = FALSE
 |  |     row-size=5B cardinality=1
 |  |
@@ -2406,17 +2406,17 @@ PLAN-ROOT SINK
 |  |  row-size=178B cardinality=730
 |  |
 |  |--00:SCAN HDFS [functional.alltypes a]
-|  |     partitions=24/24 files=24 size=478.45KB
+|  |     HDFS partitions=24/24 files=24 size=478.45KB
 |  |     predicates: a.int_col < 10
 |  |     row-size=89B cardinality=730
 |  |
 |  01:SCAN HDFS [functional.alltypes b]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     runtime filters: RF002 -> b.id
 |     row-size=89B cardinality=7.30K
 |
 03:SCAN HDFS [functional.alltypesagg d]
-   partitions=11/11 files=11 size=814.73KB
+   HDFS partitions=11/11 files=11 size=814.73KB
    runtime filters: RF000 -> d.tinyint_col
    row-size=95B cardinality=11.00K
 ====
@@ -2437,7 +2437,7 @@ PLAN-ROOT SINK
 |  row-size=362B cardinality=79.66K
 |
 |--01:SCAN HDFS [functional.alltypessmall b]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     row-size=89B cardinality=100
 |
 05:NESTED LOOP JOIN [INNER JOIN]
@@ -2445,7 +2445,7 @@ PLAN-ROOT SINK
 |  row-size=273B cardinality=79.66K
 |
 |--00:SCAN HDFS [functional.alltypestiny a]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     predicates: a.int_col = 10
 |     row-size=89B cardinality=4
 |
@@ -2455,11 +2455,11 @@ PLAN-ROOT SINK
 |  row-size=184B cardinality=79.66K
 |
 |--02:SCAN HDFS [functional.alltypes c]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=89B cardinality=7.30K
 |
 03:SCAN HDFS [functional.alltypesagg d]
-   partitions=11/11 files=11 size=814.73KB
+   HDFS partitions=11/11 files=11 size=814.73KB
    runtime filters: RF000 -> d.bigint_col
    row-size=95B cardinality=11.00K
 ---- DISTRIBUTEDPLAN
@@ -2474,7 +2474,7 @@ PLAN-ROOT SINK
 |--10:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [functional.alltypessmall b]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     row-size=89B cardinality=100
 |
 05:NESTED LOOP JOIN [INNER JOIN, BROADCAST]
@@ -2484,7 +2484,7 @@ PLAN-ROOT SINK
 |--09:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [functional.alltypestiny a]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     predicates: a.int_col = 10
 |     row-size=89B cardinality=4
 |
@@ -2496,13 +2496,13 @@ PLAN-ROOT SINK
 |--08:EXCHANGE [HASH(c.bigint_col)]
 |  |
 |  02:SCAN HDFS [functional.alltypes c]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=89B cardinality=7.30K
 |
 07:EXCHANGE [HASH(d.bigint_col)]
 |
 03:SCAN HDFS [functional.alltypesagg d]
-   partitions=11/11 files=11 size=814.73KB
+   HDFS partitions=11/11 files=11 size=814.73KB
    runtime filters: RF000 -> d.bigint_col
    row-size=95B cardinality=11.00K
 ====
@@ -2530,12 +2530,12 @@ PLAN-ROOT SINK
 |  |  row-size=93B cardinality=100
 |  |
 |  |--00:SCAN HDFS [functional.alltypestiny a]
-|  |     partitions=4/4 files=4 size=460B
+|  |     HDFS partitions=4/4 files=4 size=460B
 |  |     predicates: a.tinyint_col < 10
 |  |     row-size=89B cardinality=1
 |  |
 |  01:SCAN HDFS [functional.alltypessmall b]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     row-size=4B cardinality=100
 |
 05:NESTED LOOP JOIN [INNER JOIN]
@@ -2543,11 +2543,11 @@ PLAN-ROOT SINK
 |  row-size=99B cardinality=1.22K
 |
 |--04:SCAN HDFS [functional.alltypes d]
-|     partitions=24/24 files=24 size=478.45KB
+|     HDFS partitions=24/24 files=24 size=478.45KB
 |     row-size=4B cardinality=7.30K
 |
 03:SCAN HDFS [functional.alltypesagg c]
-   partitions=11/11 files=11 size=814.73KB
+   HDFS partitions=11/11 files=11 size=814.73KB
    predicates: c.tinyint_col = 10
    row-size=95B cardinality=1.22K
 ====
@@ -2583,24 +2583,24 @@ PLAN-ROOT SINK
 |  |  |  |  row-size=178B cardinality=100
 |  |  |  |
 |  |  |  |--00:SCAN HDFS [functional.alltypestiny a]
-|  |  |  |     partitions=4/4 files=4 size=460B
+|  |  |  |     HDFS partitions=4/4 files=4 size=460B
 |  |  |  |     predicates: a.id < 10
 |  |  |  |     row-size=89B cardinality=1
 |  |  |  |
 |  |  |  01:SCAN HDFS [functional.alltypessmall b]
-|  |  |     partitions=4/4 files=4 size=6.32KB
+|  |  |     HDFS partitions=4/4 files=4 size=6.32KB
 |  |  |     row-size=89B cardinality=100
 |  |  |
 |  |  02:SCAN HDFS [functional.alltypes c]
-|  |     partitions=24/24 files=24 size=478.45KB
+|  |     HDFS partitions=24/24 files=24 size=478.45KB
 |  |     row-size=89B cardinality=7.30K
 |  |
 |  03:SCAN HDFS [functional.alltypesagg d]
-|     partitions=11/11 files=11 size=814.73KB
+|     HDFS partitions=11/11 files=11 size=814.73KB
 |     row-size=8B cardinality=11.00K
 |
 04:SCAN HDFS [functional.alltypesagg e]
-   partitions=11/11 files=11 size=814.73KB
+   HDFS partitions=11/11 files=11 size=814.73KB
    row-size=15B cardinality=11.00K
 ====
 # Regression test for IMPALA-2495: Crash: impala::InPredicate::SetLookupPrepare
@@ -2621,11 +2621,11 @@ PLAN-ROOT SINK
 |  row-size=4B cardinality=8
 |
 |--01:SCAN HDFS [functional.alltypessmall]
-|     partitions=4/4 files=4 size=6.32KB
+|     HDFS partitions=4/4 files=4 size=6.32KB
 |     row-size=0B cardinality=100
 |
 00:SCAN HDFS [functional.alltypestiny t1]
-   partitions=4/4 files=4 size=460B
+   HDFS partitions=4/4 files=4 size=460B
    row-size=4B cardinality=8
 ====
 # Test queries that appear earlier in this file, but substitute "<=>" or "IS DISTINCT
@@ -2642,11 +2642,11 @@ PLAN-ROOT SINK
 |  row-size=48B cardinality=0
 |
 |--01:SCAN HDFS [functional.testtbl t2]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     row-size=24B cardinality=0
 |
 00:SCAN HDFS [functional.testtbl t1]
-   partitions=1/1 files=0 size=0B
+   HDFS partitions=1/1 files=0 size=0B
    predicates: t1.zip = 94611
    runtime filters: RF000 -> t1.id
    row-size=24B cardinality=0
@@ -2663,11 +2663,11 @@ PLAN-ROOT SINK
 |  row-size=48B cardinality=0
 |
 |--01:SCAN HDFS [functional.testtbl t2]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     row-size=24B cardinality=0
 |
 00:SCAN HDFS [functional.testtbl t1]
-   partitions=1/1 files=0 size=0B
+   HDFS partitions=1/1 files=0 size=0B
    predicates: t1.zip = 94611
    runtime filters: RF000 -> t1.id
    row-size=24B cardinality=0
@@ -2683,11 +2683,11 @@ PLAN-ROOT SINK
 |  row-size=48B cardinality=0
 |
 |--01:SCAN HDFS [functional.testtbl t2]
-|     partitions=1/1 files=0 size=0B
+|     HDFS partitions=1/1 files=0 size=0B
 |     row-size=24B cardinality=0
 |
 00:SCAN HDFS [functional.testtbl t1]
-   partitions=1/1 files=0 size=0B
+   HDFS partitions=1/1 files=0 size=0B
    predicates: t1.zip = 94611
    row-size=24B cardinality=0
 ====
@@ -2704,7 +2704,7 @@ PLAN-ROOT SINK
 |  row-size=97B cardinality=8
 |
 |--02:SCAN HDFS [functional.alltypestiny t3]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     row-size=4B cardinality=8
 |
 03:HASH JOIN [INNER JOIN]
@@ -2713,11 +2713,11 @@ PLAN-ROOT SINK
 |  row-size=93B cardinality=8
 |
 |--01:SCAN HDFS [functional.alltypestiny]
-|     partitions=4/4 files=4 size=460B
+|     HDFS partitions=4/4 files=4 size=460B
 |     row-size=4B cardinality=8
 |
 00:SCAN HDFS [functional.alltypestiny]
-   partitions=4/4 files=4 size=460B
+   HDFS partitions=4/4 files=4 size=460B
    runtime filters: RF000 -> functional.alltypestiny.id
    row-size=89B cardinality=8
 ====
@@ -2747,19 +2747,19 @@ PLAN-ROOT SINK
 |  |
 |  |--01:SCAN HDFS [functional.alltypessmall b]
 |  |     partition predicates: b.`month` > 2
-|  |     partitions=2/4 files=2 size=3.17KB
+|  |     HDFS partitions=2/4 files=2 size=3.17KB
 |  |     predicates: b.string_col = '15'
 |  |     row-size=89B cardinality=5
 |  |
 |  00:SCAN HDFS [functional.alltypesagg a]
 |     partition predicates: a.`day` >= 6
-|     partitions=5/11 files=5 size=372.38KB
+|     HDFS partitions=5/11 files=5 size=372.38KB
 |     predicates: a.tinyint_col = 15
 |     row-size=95B cardinality=556
 |
 02:SCAN HDFS [functional.alltypesaggnonulls c]
    partition predicates: c.`day` < 3
-   partitions=2/10 files=2 size=148.10KB
+   HDFS partitions=2/10 files=2 size=148.10KB
    row-size=95B cardinality=2.00K
 ====
 select t1.d, t2.d from functional.nulltable t1, functional.nulltable t2
@@ -2772,11 +2772,11 @@ PLAN-ROOT SINK
 |  row-size=8B cardinality=1
 |
 |--01:SCAN HDFS [functional.nulltable t2]
-|     partitions=1/1 files=1 size=18B
+|     HDFS partitions=1/1 files=1 size=18B
 |     row-size=4B cardinality=1
 |
 00:SCAN HDFS [functional.nulltable t1]
-   partitions=1/1 files=1 size=18B
+   HDFS partitions=1/1 files=1 size=18B
    row-size=4B cardinality=1
 ====
 select t1.d, t2.d
@@ -2791,7 +2791,7 @@ PLAN-ROOT SINK
 |  row-size=34B cardinality=1
 |
 |--02:SCAN HDFS [functional.nulltable t3]
-|     partitions=1/1 files=1 size=18B
+|     HDFS partitions=1/1 files=1 size=18B
 |     row-size=13B cardinality=1
 |
 03:NESTED LOOP JOIN [INNER JOIN]
@@ -2799,11 +2799,11 @@ PLAN-ROOT SINK
 |  row-size=21B cardinality=1
 |
 |--00:SCAN HDFS [functional.nulltable t1]
-|     partitions=1/1 files=1 size=18B
+|     HDFS partitions=1/1 files=1 size=18B
 |     row-size=4B cardinality=1
 |
 01:SCAN HDFS [functional.nulltable t2]
-   partitions=1/1 files=1 size=18B
+   HDFS partitions=1/1 files=1 size=18B
    row-size=17B cardinality=1
 ====
 # IMPALA-3450: limits on join nodes are reflected in cardinality estimates. The test for
@@ -2818,11 +2818,11 @@ PLAN-ROOT SINK
 |  row-size=8B cardinality=1
 |
 |--01:SCAN HDFS [tpch.customer b]
-|     partitions=1/1 files=1 size=23.08MB
+|     HDFS partitions=1/1 files=1 size=23.08MB
 |     row-size=0B cardinality=150.00K
 |
 00:SCAN HDFS [tpch.customer a]
-   partitions=1/1 files=1 size=23.08MB
+   HDFS partitions=1/1 files=1 size=23.08MB
    row-size=8B cardinality=150.00K
 ====
 select a.c_custkey as c_custkey from tpch.customer a left semi join tpch.customer b
@@ -2837,11 +2837,11 @@ PLAN-ROOT SINK
 |  row-size=8B cardinality=1
 |
 |--01:SCAN HDFS [tpch.customer b]
-|     partitions=1/1 files=1 size=23.08MB
+|     HDFS partitions=1/1 files=1 size=23.08MB
 |     row-size=8B cardinality=150.00K
 |
 00:SCAN HDFS [tpch.customer a]
-   partitions=1/1 files=1 size=23.08MB
+   HDFS partitions=1/1 files=1 size=23.08MB
    runtime filters: RF000 -> a.c_custkey
    row-size=8B cardinality=150.00K
 ====
@@ -2857,11 +2857,11 @@ PLAN-ROOT SINK
 |  row-size=8B cardinality=1
 |
 |--01:SCAN HDFS [tpch.customer b]
-|     partitions=1/1 files=1 size=23.08MB
+|     HDFS partitions=1/1 files=1 size=23.08MB
 |     row-size=8B cardinality=150.00K
 |
 00:SCAN HDFS [tpch.customer a]
-   partitions=1/1 files=1 size=23.08MB
+   HDFS partitions=1/1 files=1 size=23.08MB
    runtime filters: RF000 -> a.c_custkey
    row-size=8B cardinality=150.00K
 ====
@@ -2876,11 +2876,11 @@ PLAN-ROOT SINK
 |  row-size=16B cardinality=1
 |
 |--01:SCAN HDFS [tpch.customer b]
-|     partitions=1/1 files=1 size=23.08MB
+|     HDFS partitions=1/1 files=1 size=23.08MB
 |     row-size=8B cardinality=150.00K
 |
 00:SCAN HDFS [tpch.customer a]
-   partitions=1/1 files=1 size=23.08MB
+   HDFS partitions=1/1 files=1 size=23.08MB
    row-size=8B cardinality=150.00K
 ====
 select b.c_custkey as c_custkey from tpch.customer a right outer join tpch.customer b
@@ -2895,11 +2895,11 @@ PLAN-ROOT SINK
 |  row-size=16B cardinality=1
 |
 |--01:SCAN HDFS [tpch.customer b]
-|     partitions=1/1 files=1 size=23.08MB
+|     HDFS partitions=1/1 files=1 size=23.08MB
 |     row-size=8B cardinality=150.00K
 |
 00:SCAN HDFS [tpch.customer a]
-   partitions=1/1 files=1 size=23.08MB
+   HDFS partitions=1/1 files=1 size=23.08MB
    runtime filters: RF000 -> a.c_custkey
    row-size=8B cardinality=150.00K
 ====
@@ -2914,11 +2914,11 @@ PLAN-ROOT SINK
 |  row-size=16B cardinality=1
 |
 |--01:SCAN HDFS [tpch.customer b]
-|     partitions=1/1 files=1 size=23.08MB
+|     HDFS partitions=1/1 files=1 size=23.08MB
 |     row-size=8B cardinality=150.00K
 |
 00:SCAN HDFS [tpch.customer a]
-   partitions=1/1 files=1 size=23.08MB
+   HDFS partitions=1/1 files=1 size=23.08MB
    row-size=8B cardinality=150.00K
 ====
 select a.c_custkey as c_custkey from tpch.customer a left anti join tpch.customer b
@@ -2932,11 +2932,11 @@ PLAN-ROOT SINK
 |  row-size=8B cardinality=1
 |
 |--01:SCAN HDFS [tpch.customer b]
-|     partitions=1/1 files=1 size=23.08MB
+|     HDFS partitions=1/1 files=1 size=23.08MB
 |     row-size=8B cardinality=150.00K
 |
 00:SCAN HDFS [tpch.customer a]
-   partitions=1/1 files=1 size=23.08MB
+   HDFS partitions=1/1 files=1 size=23.08MB
    row-size=8B cardinality=150.00K
 ====
 select b.c_custkey as c_custkey from tpch.customer a right anti join tpch.customer b
@@ -2950,11 +2950,11 @@ PLAN-ROOT SINK
 |  row-size=8B cardinality=1
 |
 |--01:SCAN HDFS [tpch.customer b]
-|     partitions=1/1 files=1 size=23.08MB
+|     HDFS partitions=1/1 files=1 size=23.08MB
 |     row-size=8B cardinality=150.00K
 |
 00:SCAN HDFS [tpch.customer a]
-   partitions=1/1 files=1 size=23.08MB
+   HDFS partitions=1/1 files=1 size=23.08MB
    row-size=8B cardinality=150.00K
 ====
 with
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds-all.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds-all.test
index d0b103d..41158f3 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds-all.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds-all.test
@@ -42,7 +42,7 @@ PLAN-ROOT SINK
 |  row-size=72B cardinality=3.04K
 |
 |--00:SCAN HDFS [tpcds.date_dim dt]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: dt.d_moy = 12
 |     row-size=12B cardinality=6.09K
 |
@@ -52,12 +52,12 @@ PLAN-ROOT SINK
 |  row-size=60B cardinality=3.04K
 |
 |--02:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: item.i_manufact_id = 436
 |     row-size=44B cardinality=19
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> store_sales.ss_sold_date_sk, RF002 -> store_sales.ss_item_sk
    row-size=16B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -93,7 +93,7 @@ PLAN-ROOT SINK
 |--09:EXCHANGE [HASH(dt.d_date_sk)]
 |  |
 |  00:SCAN HDFS [tpcds.date_dim dt]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: dt.d_moy = 12
 |     row-size=12B cardinality=6.09K
 |
@@ -107,12 +107,12 @@ PLAN-ROOT SINK
 |--07:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: item.i_manufact_id = 436
 |     row-size=44B cardinality=19
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> store_sales.ss_sold_date_sk, RF002 -> store_sales.ss_item_sk
    row-size=16B cardinality=2.88M
 ---- PARALLELPLANS
@@ -152,7 +152,7 @@ PLAN-ROOT SINK
 |  09:EXCHANGE [HASH(dt.d_date_sk)]
 |  |
 |  00:SCAN HDFS [tpcds.date_dim dt]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: dt.d_moy = 12
 |     row-size=12B cardinality=6.09K
 |
@@ -170,12 +170,12 @@ PLAN-ROOT SINK
 |  07:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: item.i_manufact_id = 436
 |     row-size=44B cardinality=19
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> store_sales.ss_sold_date_sk, RF002 -> store_sales.ss_item_sk
    row-size=16B cardinality=2.88M
 ====
@@ -228,7 +228,7 @@ PLAN-ROOT SINK
 |  row-size=162B cardinality=261.60K
 |
 |--03:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=36B cardinality=18.00K
 |
 07:HASH JOIN [INNER JOIN]
@@ -237,7 +237,7 @@ PLAN-ROOT SINK
 |  row-size=126B cardinality=261.60K
 |
 |--04:SCAN HDFS [tpcds.promotion]
-|     partitions=1/1 files=1 size=36.36KB
+|     HDFS partitions=1/1 files=1 size=36.36KB
 |     predicates: (p_channel_email = 'N' OR p_channel_event = 'N')
 |     row-size=30B cardinality=300
 |
@@ -247,7 +247,7 @@ PLAN-ROOT SINK
 |  row-size=96B cardinality=263.34K
 |
 |--01:SCAN HDFS [tpcds.customer_demographics]
-|     partitions=1/1 files=1 size=76.92MB
+|     HDFS partitions=1/1 files=1 size=76.92MB
 |     predicates: cd_marital_status = 'W', cd_gender = 'F', cd_education_status = 'Primary'
 |     row-size=52B cardinality=97.40K
 |
@@ -257,12 +257,12 @@ PLAN-ROOT SINK
 |  row-size=44B cardinality=589.03K
 |
 |--02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 1998
 |     row-size=8B cardinality=373
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_item_sk, RF002 -> ss_promo_sk, RF004 -> ss_cdemo_sk, RF006 -> ss_sold_date_sk
    row-size=36B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -298,7 +298,7 @@ PLAN-ROOT SINK
 |--14:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=36B cardinality=18.00K
 |
 07:HASH JOIN [INNER JOIN, BROADCAST]
@@ -309,7 +309,7 @@ PLAN-ROOT SINK
 |--13:EXCHANGE [BROADCAST]
 |  |
 |  04:SCAN HDFS [tpcds.promotion]
-|     partitions=1/1 files=1 size=36.36KB
+|     HDFS partitions=1/1 files=1 size=36.36KB
 |     predicates: (p_channel_email = 'N' OR p_channel_event = 'N')
 |     row-size=30B cardinality=300
 |
@@ -321,7 +321,7 @@ PLAN-ROOT SINK
 |--12:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.customer_demographics]
-|     partitions=1/1 files=1 size=76.92MB
+|     HDFS partitions=1/1 files=1 size=76.92MB
 |     predicates: cd_marital_status = 'W', cd_gender = 'F', cd_education_status = 'Primary'
 |     row-size=52B cardinality=97.40K
 |
@@ -333,12 +333,12 @@ PLAN-ROOT SINK
 |--11:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 1998
 |     row-size=8B cardinality=373
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_item_sk, RF002 -> ss_promo_sk, RF004 -> ss_cdemo_sk, RF006 -> ss_sold_date_sk
    row-size=36B cardinality=2.88M
 ---- PARALLELPLANS
@@ -378,7 +378,7 @@ PLAN-ROOT SINK
 |  14:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=36B cardinality=18.00K
 |
 07:HASH JOIN [INNER JOIN, BROADCAST]
@@ -393,7 +393,7 @@ PLAN-ROOT SINK
 |  13:EXCHANGE [BROADCAST]
 |  |
 |  04:SCAN HDFS [tpcds.promotion]
-|     partitions=1/1 files=1 size=36.36KB
+|     HDFS partitions=1/1 files=1 size=36.36KB
 |     predicates: (p_channel_email = 'N' OR p_channel_event = 'N')
 |     row-size=30B cardinality=300
 |
@@ -409,7 +409,7 @@ PLAN-ROOT SINK
 |  12:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.customer_demographics]
-|     partitions=1/1 files=1 size=76.92MB
+|     HDFS partitions=1/1 files=1 size=76.92MB
 |     predicates: cd_marital_status = 'W', cd_gender = 'F', cd_education_status = 'Primary'
 |     row-size=52B cardinality=97.40K
 |
@@ -425,12 +425,12 @@ PLAN-ROOT SINK
 |  11:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 1998
 |     row-size=8B cardinality=373
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_item_sk, RF002 -> ss_promo_sk, RF004 -> ss_cdemo_sk, RF006 -> ss_sold_date_sk
    row-size=36B cardinality=2.88M
 ====
@@ -539,17 +539,17 @@ PLAN-ROOT SINK
 |  |  |  row-size=38B cardinality=51.30K
 |  |  |
 |  |  |--03:SCAN HDFS [tpcds.customer]
-|  |  |     partitions=1/1 files=1 size=12.60MB
+|  |  |     HDFS partitions=1/1 files=1 size=12.60MB
 |  |  |     predicates: c_preferred_cust_flag = 'Y'
 |  |  |     row-size=17B cardinality=50.00K
 |  |  |
 |  |  02:SCAN HDFS [tpcds.customer_address]
-|  |     partitions=1/1 files=1 size=5.25MB
+|  |     HDFS partitions=1/1 files=1 size=5.25MB
 |  |     runtime filters: RF006 -> customer_address.ca_address_sk
 |  |     row-size=21B cardinality=50.00K
 |  |
 |  06:SCAN HDFS [tpcds.customer_address]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     predicates: substr(ca_zip, 1, 5) IN ('89436', '30868', '65085', '22977', '83927', '77557', '58429', '40697', '80614', '10502', '32779', '91137', '61265', '98294', '17921', '18427', '21203', '59362', '87291', '84093', '21505', '17184', '10866', '67898', '25797', '28055', '18377', '80332', '74535', '21757', '29742', '90885', '29898', '17819', '40811', '25990', '47513', '89531', '91068', '10391', '18846', '99223', '82637', '41368', '83658', '86199', '81625', '26696', '89338', '88425', [...]
 |     runtime filters: RF004 -> substr(ca_zip, 1, 5)
 |     row-size=17B cardinality=5.00K
@@ -560,13 +560,13 @@ PLAN-ROOT SINK
 |  row-size=45B cardinality=84.40K
 |
 |--01:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     runtime filters: RF000 -> substr(store.s_zip, 1, 2)
 |     row-size=37B cardinality=12
 |
 00:SCAN HDFS [tpcds.store_sales]
    partition predicates: ss_sold_date_sk >= 2452276, ss_sold_date_sk <= 2452366
-   partitions=90/1824 files=90 size=10.32MB
+   HDFS partitions=90/1824 files=90 size=10.32MB
    runtime filters: RF002 -> store_sales.ss_store_sk
    row-size=8B cardinality=84.40K
 ---- DISTRIBUTEDPLAN
@@ -627,19 +627,19 @@ PLAN-ROOT SINK
 |  |  |--13:EXCHANGE [BROADCAST]
 |  |  |  |
 |  |  |  03:SCAN HDFS [tpcds.customer]
-|  |  |     partitions=1/1 files=1 size=12.60MB
+|  |  |     HDFS partitions=1/1 files=1 size=12.60MB
 |  |  |     predicates: c_preferred_cust_flag = 'Y'
 |  |  |     row-size=17B cardinality=50.00K
 |  |  |
 |  |  02:SCAN HDFS [tpcds.customer_address]
-|  |     partitions=1/1 files=1 size=5.25MB
+|  |     HDFS partitions=1/1 files=1 size=5.25MB
 |  |     runtime filters: RF006 -> customer_address.ca_address_sk
 |  |     row-size=21B cardinality=50.00K
 |  |
 |  16:EXCHANGE [HASH(substr(ca_zip, 1, 5))]
 |  |
 |  06:SCAN HDFS [tpcds.customer_address]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     predicates: substr(ca_zip, 1, 5) IN ('89436', '30868', '65085', '22977', '83927', '77557', '58429', '40697', '80614', '10502', '32779', '91137', '61265', '98294', '17921', '18427', '21203', '59362', '87291', '84093', '21505', '17184', '10866', '67898', '25797', '28055', '18377', '80332', '74535', '21757', '29742', '90885', '29898', '17819', '40811', '25990', '47513', '89531', '91068', '10391', '18846', '99223', '82637', '41368', '83658', '86199', '81625', '26696', '89338', '88425', [...]
 |     runtime filters: RF004 -> substr(ca_zip, 1, 5)
 |     row-size=17B cardinality=5.00K
@@ -652,13 +652,13 @@ PLAN-ROOT SINK
 |--12:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     runtime filters: RF000 -> substr(store.s_zip, 1, 2)
 |     row-size=37B cardinality=12
 |
 00:SCAN HDFS [tpcds.store_sales]
    partition predicates: ss_sold_date_sk >= 2452276, ss_sold_date_sk <= 2452366
-   partitions=90/1824 files=90 size=10.32MB
+   HDFS partitions=90/1824 files=90 size=10.32MB
    runtime filters: RF002 -> store_sales.ss_store_sk
    row-size=8B cardinality=84.40K
 ---- PARALLELPLANS
@@ -731,19 +731,19 @@ PLAN-ROOT SINK
 |  |  |  13:EXCHANGE [BROADCAST]
 |  |  |  |
 |  |  |  03:SCAN HDFS [tpcds.customer]
-|  |  |     partitions=1/1 files=1 size=12.60MB
+|  |  |     HDFS partitions=1/1 files=1 size=12.60MB
 |  |  |     predicates: c_preferred_cust_flag = 'Y'
 |  |  |     row-size=17B cardinality=50.00K
 |  |  |
 |  |  02:SCAN HDFS [tpcds.customer_address]
-|  |     partitions=1/1 files=1 size=5.25MB
+|  |     HDFS partitions=1/1 files=1 size=5.25MB
 |  |     runtime filters: RF006 -> customer_address.ca_address_sk
 |  |     row-size=21B cardinality=50.00K
 |  |
 |  16:EXCHANGE [HASH(substr(ca_zip, 1, 5))]
 |  |
 |  06:SCAN HDFS [tpcds.customer_address]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     predicates: substr(ca_zip, 1, 5) IN ('89436', '30868', '65085', '22977', '83927', '77557', '58429', '40697', '80614', '10502', '32779', '91137', '61265', '98294', '17921', '18427', '21203', '59362', '87291', '84093', '21505', '17184', '10866', '67898', '25797', '28055', '18377', '80332', '74535', '21757', '29742', '90885', '29898', '17819', '40811', '25990', '47513', '89531', '91068', '10391', '18846', '99223', '82637', '41368', '83658', '86199', '81625', '26696', '89338', '88425', [...]
 |     runtime filters: RF004 -> substr(ca_zip, 1, 5)
 |     row-size=17B cardinality=5.00K
@@ -760,13 +760,13 @@ PLAN-ROOT SINK
 |  12:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     runtime filters: RF000 -> substr(store.s_zip, 1, 2)
 |     row-size=37B cardinality=12
 |
 00:SCAN HDFS [tpcds.store_sales]
    partition predicates: ss_sold_date_sk >= 2452276, ss_sold_date_sk <= 2452366
-   partitions=90/1824 files=90 size=10.32MB
+   HDFS partitions=90/1824 files=90 size=10.32MB
    runtime filters: RF002 -> store_sales.ss_store_sk
    row-size=8B cardinality=84.40K
 ====
@@ -828,7 +828,7 @@ PLAN-ROOT SINK
 |  row-size=158B cardinality=24
 |
 |--05:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=21B cardinality=12
 |
 09:HASH JOIN [INNER JOIN]
@@ -847,7 +847,7 @@ PLAN-ROOT SINK
 |  |  |  row-size=108B cardinality=24
 |  |  |
 |  |  |--00:SCAN HDFS [tpcds.date_dim]
-|  |  |     partitions=1/1 files=1 size=9.84MB
+|  |  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |  |     predicates: d_year = 1999, d_moy = 11, tpcds.date_dim.d_date_sk <= 2451513, tpcds.date_dim.d_date_sk >= 2451484
 |  |  |     row-size=12B cardinality=50
 |  |  |
@@ -857,23 +857,23 @@ PLAN-ROOT SINK
 |  |  |  row-size=96B cardinality=873
 |  |  |
 |  |  |--02:SCAN HDFS [tpcds.item]
-|  |  |     partitions=1/1 files=1 size=4.82MB
+|  |  |     HDFS partitions=1/1 files=1 size=4.82MB
 |  |  |     predicates: i_manager_id = 7
 |  |  |     row-size=72B cardinality=182
 |  |  |
 |  |  01:SCAN HDFS [tpcds.store_sales]
 |  |     partition predicates: ss_sold_date_sk >= 2451484, ss_sold_date_sk <= 2451513
-|  |     partitions=30/1824 files=30 size=10.55MB
+|  |     HDFS partitions=30/1824 files=30 size=10.55MB
 |  |     runtime filters: RF000 -> ss_store_sk, RF006 -> ss_sold_date_sk, RF008 -> ss_item_sk
 |  |     row-size=24B cardinality=86.28K
 |  |
 |  03:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF004 -> c_customer_sk
 |     row-size=8B cardinality=100.00K
 |
 04:SCAN HDFS [tpcds.customer_address]
-   partitions=1/1 files=1 size=5.25MB
+   HDFS partitions=1/1 files=1 size=5.25MB
    runtime filters: RF002 -> ca_address_sk
    row-size=21B cardinality=50.00K
 ---- DISTRIBUTEDPLAN
@@ -910,7 +910,7 @@ PLAN-ROOT SINK
 |--19:EXCHANGE [BROADCAST]
 |  |
 |  05:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=21B cardinality=12
 |
 09:HASH JOIN [INNER JOIN, PARTITIONED]
@@ -921,7 +921,7 @@ PLAN-ROOT SINK
 |--18:EXCHANGE [HASH(ca_address_sk)]
 |  |
 |  04:SCAN HDFS [tpcds.customer_address]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=21B cardinality=50.00K
 |
 17:EXCHANGE [HASH(c_current_addr_sk)]
@@ -934,7 +934,7 @@ PLAN-ROOT SINK
 |--16:EXCHANGE [HASH(c_customer_sk)]
 |  |
 |  03:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF002 -> c_current_addr_sk
 |     row-size=8B cardinality=100.00K
 |
@@ -948,7 +948,7 @@ PLAN-ROOT SINK
 |--14:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 1999, d_moy = 11, tpcds.date_dim.d_date_sk <= 2451513, tpcds.date_dim.d_date_sk >= 2451484
 |     row-size=12B cardinality=50
 |
@@ -960,13 +960,13 @@ PLAN-ROOT SINK
 |--13:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: i_manager_id = 7
 |     row-size=72B cardinality=182
 |
 01:SCAN HDFS [tpcds.store_sales]
    partition predicates: ss_sold_date_sk >= 2451484, ss_sold_date_sk <= 2451513
-   partitions=30/1824 files=30 size=10.55MB
+   HDFS partitions=30/1824 files=30 size=10.55MB
    runtime filters: RF000 -> ss_store_sk, RF004 -> ss_customer_sk, RF006 -> ss_sold_date_sk, RF008 -> ss_item_sk
    row-size=24B cardinality=86.28K
 ---- PARALLELPLANS
@@ -1007,7 +1007,7 @@ PLAN-ROOT SINK
 |  19:EXCHANGE [BROADCAST]
 |  |
 |  05:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=21B cardinality=12
 |
 09:HASH JOIN [INNER JOIN, PARTITIONED]
@@ -1022,7 +1022,7 @@ PLAN-ROOT SINK
 |  18:EXCHANGE [HASH(ca_address_sk)]
 |  |
 |  04:SCAN HDFS [tpcds.customer_address]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=21B cardinality=50.00K
 |
 17:EXCHANGE [HASH(c_current_addr_sk)]
@@ -1039,7 +1039,7 @@ PLAN-ROOT SINK
 |  16:EXCHANGE [HASH(c_customer_sk)]
 |  |
 |  03:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF002 -> c_current_addr_sk
 |     row-size=8B cardinality=100.00K
 |
@@ -1057,7 +1057,7 @@ PLAN-ROOT SINK
 |  14:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 1999, d_moy = 11, tpcds.date_dim.d_date_sk <= 2451513, tpcds.date_dim.d_date_sk >= 2451484
 |     row-size=12B cardinality=50
 |
@@ -1073,13 +1073,13 @@ PLAN-ROOT SINK
 |  13:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: i_manager_id = 7
 |     row-size=72B cardinality=182
 |
 01:SCAN HDFS [tpcds.store_sales]
    partition predicates: ss_sold_date_sk >= 2451484, ss_sold_date_sk <= 2451513
-   partitions=30/1824 files=30 size=10.55MB
+   HDFS partitions=30/1824 files=30 size=10.55MB
    runtime filters: RF000 -> ss_store_sk, RF004 -> ss_customer_sk, RF006 -> ss_sold_date_sk, RF008 -> ss_item_sk
    row-size=24B cardinality=86.28K
 ====
@@ -1134,7 +1134,7 @@ PLAN-ROOT SINK
 |  row-size=150B cardinality=263.34K
 |
 |--04:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=36B cardinality=18.00K
 |
 07:HASH JOIN [INNER JOIN]
@@ -1143,7 +1143,7 @@ PLAN-ROOT SINK
 |  row-size=114B cardinality=263.34K
 |
 |--03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: s_state IN ('WI', 'CA', 'TX', 'FL', 'WA', 'TN')
 |     row-size=18B cardinality=12
 |
@@ -1153,7 +1153,7 @@ PLAN-ROOT SINK
 |  row-size=96B cardinality=263.34K
 |
 |--01:SCAN HDFS [tpcds.customer_demographics]
-|     partitions=1/1 files=1 size=76.92MB
+|     HDFS partitions=1/1 files=1 size=76.92MB
 |     predicates: cd_marital_status = 'W', cd_gender = 'F', cd_education_status = 'Primary'
 |     row-size=52B cardinality=97.40K
 |
@@ -1163,12 +1163,12 @@ PLAN-ROOT SINK
 |  row-size=44B cardinality=589.03K
 |
 |--02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 1998
 |     row-size=8B cardinality=373
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_item_sk, RF002 -> ss_store_sk, RF004 -> ss_cdemo_sk, RF006 -> ss_sold_date_sk
    row-size=36B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -1204,7 +1204,7 @@ PLAN-ROOT SINK
 |--14:EXCHANGE [BROADCAST]
 |  |
 |  04:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=36B cardinality=18.00K
 |
 07:HASH JOIN [INNER JOIN, BROADCAST]
@@ -1215,7 +1215,7 @@ PLAN-ROOT SINK
 |--13:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: s_state IN ('WI', 'CA', 'TX', 'FL', 'WA', 'TN')
 |     row-size=18B cardinality=12
 |
@@ -1227,7 +1227,7 @@ PLAN-ROOT SINK
 |--12:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.customer_demographics]
-|     partitions=1/1 files=1 size=76.92MB
+|     HDFS partitions=1/1 files=1 size=76.92MB
 |     predicates: cd_marital_status = 'W', cd_gender = 'F', cd_education_status = 'Primary'
 |     row-size=52B cardinality=97.40K
 |
@@ -1239,12 +1239,12 @@ PLAN-ROOT SINK
 |--11:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 1998
 |     row-size=8B cardinality=373
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_item_sk, RF002 -> ss_store_sk, RF004 -> ss_cdemo_sk, RF006 -> ss_sold_date_sk
    row-size=36B cardinality=2.88M
 ---- PARALLELPLANS
@@ -1284,7 +1284,7 @@ PLAN-ROOT SINK
 |  14:EXCHANGE [BROADCAST]
 |  |
 |  04:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=36B cardinality=18.00K
 |
 07:HASH JOIN [INNER JOIN, BROADCAST]
@@ -1299,7 +1299,7 @@ PLAN-ROOT SINK
 |  13:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: s_state IN ('WI', 'CA', 'TX', 'FL', 'WA', 'TN')
 |     row-size=18B cardinality=12
 |
@@ -1315,7 +1315,7 @@ PLAN-ROOT SINK
 |  12:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.customer_demographics]
-|     partitions=1/1 files=1 size=76.92MB
+|     HDFS partitions=1/1 files=1 size=76.92MB
 |     predicates: cd_marital_status = 'W', cd_gender = 'F', cd_education_status = 'Primary'
 |     row-size=52B cardinality=97.40K
 |
@@ -1331,12 +1331,12 @@ PLAN-ROOT SINK
 |  11:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 1998
 |     row-size=8B cardinality=373
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_item_sk, RF002 -> ss_store_sk, RF004 -> ss_cdemo_sk, RF006 -> ss_sold_date_sk
    row-size=36B cardinality=2.88M
 ====
@@ -1391,18 +1391,18 @@ PLAN-ROOT SINK
 |
 10:TOP-N [LIMIT=100000]
 |  order by: c_last_name ASC, c_first_name ASC, c_salutation ASC, c_preferred_cust_flag DESC
-|  row-size=80B cardinality=31.53K
+|  row-size=80B cardinality=3.15K
 |
 09:HASH JOIN [INNER JOIN]
 |  hash predicates: c_customer_sk = ss_customer_sk
 |  runtime filters: RF000 <- ss_customer_sk
-|  row-size=88B cardinality=31.53K
+|  row-size=88B cardinality=3.15K
 |
 |--07:AGGREGATE [FINALIZE]
 |  |  output: count(*)
 |  |  group by: ss_ticket_number, ss_customer_sk
 |  |  having: count(*) <= 20, count(*) >= 15
-|  |  row-size=20B cardinality=31.53K
+|  |  row-size=20B cardinality=3.15K
 |  |
 |  06:HASH JOIN [INNER JOIN]
 |  |  hash predicates: store_sales.ss_store_sk = store.s_store_sk
@@ -1410,7 +1410,7 @@ PLAN-ROOT SINK
 |  |  row-size=101B cardinality=31.53K
 |  |
 |  |--02:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_county IN ('Saginaw County', 'Sumner County', 'Appanoose County', 'Daviess County', 'Fairfield County', 'Raleigh County', 'Ziebach County', 'Williamson County')
 |  |     row-size=33B cardinality=12
 |  |
@@ -1420,7 +1420,7 @@ PLAN-ROOT SINK
 |  |  row-size=68B cardinality=31.53K
 |  |
 |  |--01:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: date_dim.d_year IN (1998, 1999, 2000), (date_dim.d_dom >= 1 AND date_dim.d_dom <= 3 OR date_dim.d_dom >= 25 AND date_dim.d_dom <= 28)
 |  |     row-size=12B cardinality=354
 |  |
@@ -1430,22 +1430,22 @@ PLAN-ROOT SINK
 |  |  row-size=56B cardinality=162.45K
 |  |
 |  |--03:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: household_demographics.hd_vehicle_count > 0, household_demographics.hd_buy_potential IN ('>10000', 'unknown'), (CASE WHEN household_demographics.hd_vehicle_count > 0 THEN household_demographics.hd_dep_count / household_demographics.hd_vehicle_count ELSE NULL END) > 1.2
 |  |     row-size=32B cardinality=416
 |  |
 |  00:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF002 -> store_sales.ss_store_sk, RF004 -> store_sales.ss_sold_date_sk, RF006 -> store_sales.ss_hdemo_sk
 |     row-size=24B cardinality=2.88M
 |
 08:SCAN HDFS [tpcds.customer]
-   partitions=1/1 files=1 size=12.60MB
+   HDFS partitions=1/1 files=1 size=12.60MB
    runtime filters: RF000 -> c_customer_sk
    row-size=68B cardinality=100.00K
 ---- DISTRIBUTEDPLAN
 Max Per-Host Resource Reservation: Memory=47.51MB Threads=13
-Per-Host Resource Estimates: Memory=337MB
+Per-Host Resource Estimates: Memory=335MB
 PLAN-ROOT SINK
 |
 18:MERGING-EXCHANGE [UNPARTITIONED]
@@ -1454,17 +1454,17 @@ PLAN-ROOT SINK
 |
 10:TOP-N [LIMIT=100000]
 |  order by: c_last_name ASC, c_first_name ASC, c_salutation ASC, c_preferred_cust_flag DESC
-|  row-size=80B cardinality=31.53K
+|  row-size=80B cardinality=3.15K
 |
 09:HASH JOIN [INNER JOIN, PARTITIONED]
 |  hash predicates: ss_customer_sk = c_customer_sk
 |  runtime filters: RF000 <- c_customer_sk
-|  row-size=88B cardinality=31.53K
+|  row-size=88B cardinality=3.15K
 |
 |--17:EXCHANGE [HASH(c_customer_sk)]
 |  |
 |  08:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     row-size=68B cardinality=100.00K
 |
 16:EXCHANGE [HASH(ss_customer_sk)]
@@ -1473,7 +1473,7 @@ PLAN-ROOT SINK
 |  output: count:merge(*)
 |  group by: ss_ticket_number, ss_customer_sk
 |  having: count(*) <= 20, count(*) >= 15
-|  row-size=20B cardinality=31.53K
+|  row-size=20B cardinality=3.15K
 |
 14:EXCHANGE [HASH(ss_ticket_number,ss_customer_sk)]
 |
@@ -1490,7 +1490,7 @@ PLAN-ROOT SINK
 |--13:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_county IN ('Saginaw County', 'Sumner County', 'Appanoose County', 'Daviess County', 'Fairfield County', 'Raleigh County', 'Ziebach County', 'Williamson County')
 |     row-size=33B cardinality=12
 |
@@ -1502,7 +1502,7 @@ PLAN-ROOT SINK
 |--12:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: date_dim.d_year IN (1998, 1999, 2000), (date_dim.d_dom >= 1 AND date_dim.d_dom <= 3 OR date_dim.d_dom >= 25 AND date_dim.d_dom <= 28)
 |     row-size=12B cardinality=354
 |
@@ -1514,17 +1514,17 @@ PLAN-ROOT SINK
 |--11:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: household_demographics.hd_vehicle_count > 0, household_demographics.hd_buy_potential IN ('>10000', 'unknown'), (CASE WHEN household_demographics.hd_vehicle_count > 0 THEN household_demographics.hd_dep_count / household_demographics.hd_vehicle_count ELSE NULL END) > 1.2
 |     row-size=32B cardinality=416
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> tpcds.store_sales.ss_customer_sk, RF002 -> store_sales.ss_store_sk, RF004 -> store_sales.ss_sold_date_sk, RF006 -> store_sales.ss_hdemo_sk
    row-size=24B cardinality=2.88M
 ---- PARALLELPLANS
 Max Per-Host Resource Reservation: Memory=87.52MB Threads=15
-Per-Host Resource Estimates: Memory=280MB
+Per-Host Resource Estimates: Memory=278MB
 PLAN-ROOT SINK
 |
 18:MERGING-EXCHANGE [UNPARTITIONED]
@@ -1533,12 +1533,12 @@ PLAN-ROOT SINK
 |
 10:TOP-N [LIMIT=100000]
 |  order by: c_last_name ASC, c_first_name ASC, c_salutation ASC, c_preferred_cust_flag DESC
-|  row-size=80B cardinality=31.53K
+|  row-size=80B cardinality=3.15K
 |
 09:HASH JOIN [INNER JOIN, PARTITIONED]
 |  hash predicates: ss_customer_sk = c_customer_sk
 |  runtime filters: RF000 <- c_customer_sk
-|  row-size=88B cardinality=31.53K
+|  row-size=88B cardinality=3.15K
 |
 |--JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
@@ -1547,7 +1547,7 @@ PLAN-ROOT SINK
 |  17:EXCHANGE [HASH(c_customer_sk)]
 |  |
 |  08:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     row-size=68B cardinality=100.00K
 |
 16:EXCHANGE [HASH(ss_customer_sk)]
@@ -1556,7 +1556,7 @@ PLAN-ROOT SINK
 |  output: count:merge(*)
 |  group by: ss_ticket_number, ss_customer_sk
 |  having: count(*) <= 20, count(*) >= 15
-|  row-size=20B cardinality=31.53K
+|  row-size=20B cardinality=3.15K
 |
 14:EXCHANGE [HASH(ss_ticket_number,ss_customer_sk)]
 |
@@ -1577,7 +1577,7 @@ PLAN-ROOT SINK
 |  13:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_county IN ('Saginaw County', 'Sumner County', 'Appanoose County', 'Daviess County', 'Fairfield County', 'Raleigh County', 'Ziebach County', 'Williamson County')
 |     row-size=33B cardinality=12
 |
@@ -1593,7 +1593,7 @@ PLAN-ROOT SINK
 |  12:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: date_dim.d_year IN (1998, 1999, 2000), (date_dim.d_dom >= 1 AND date_dim.d_dom <= 3 OR date_dim.d_dom >= 25 AND date_dim.d_dom <= 28)
 |     row-size=12B cardinality=354
 |
@@ -1609,12 +1609,12 @@ PLAN-ROOT SINK
 |  11:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: household_demographics.hd_vehicle_count > 0, household_demographics.hd_buy_potential IN ('>10000', 'unknown'), (CASE WHEN household_demographics.hd_vehicle_count > 0 THEN household_demographics.hd_dep_count / household_demographics.hd_vehicle_count ELSE NULL END) > 1.2
 |     row-size=32B cardinality=416
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> tpcds.store_sales.ss_customer_sk, RF002 -> store_sales.ss_store_sk, RF004 -> store_sales.ss_sold_date_sk, RF006 -> store_sales.ss_hdemo_sk
    row-size=24B cardinality=2.88M
 ====
@@ -1664,7 +1664,7 @@ PLAN-ROOT SINK
 |  row-size=62B cardinality=1.73K
 |
 |--00:SCAN HDFS [tpcds.date_dim dt]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: dt.d_year = 1998, dt.d_moy = 12
 |     row-size=12B cardinality=108
 |
@@ -1674,12 +1674,12 @@ PLAN-ROOT SINK
 |  row-size=50B cardinality=29.12K
 |
 |--02:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: item.i_manager_id = 1
 |     row-size=34B cardinality=182
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> store_sales.ss_sold_date_sk, RF002 -> store_sales.ss_item_sk
    row-size=16B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -1715,7 +1715,7 @@ PLAN-ROOT SINK
 |--08:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.date_dim dt]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: dt.d_year = 1998, dt.d_moy = 12
 |     row-size=12B cardinality=108
 |
@@ -1727,12 +1727,12 @@ PLAN-ROOT SINK
 |--07:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: item.i_manager_id = 1
 |     row-size=34B cardinality=182
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> store_sales.ss_sold_date_sk, RF002 -> store_sales.ss_item_sk
    row-size=16B cardinality=2.88M
 ---- PARALLELPLANS
@@ -1772,7 +1772,7 @@ PLAN-ROOT SINK
 |  08:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.date_dim dt]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: dt.d_year = 1998, dt.d_moy = 12
 |     row-size=12B cardinality=108
 |
@@ -1788,12 +1788,12 @@ PLAN-ROOT SINK
 |  07:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: item.i_manager_id = 1
 |     row-size=34B cardinality=182
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> store_sales.ss_sold_date_sk, RF002 -> store_sales.ss_item_sk
    row-size=16B cardinality=2.88M
 ====
@@ -1851,7 +1851,7 @@ PLAN-ROOT SINK
 |  row-size=91B cardinality=589.03K
 |
 |--02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: s_gmt_offset = -5
 |     row-size=52B cardinality=12
 |
@@ -1861,12 +1861,12 @@ PLAN-ROOT SINK
 |  row-size=39B cardinality=589.03K
 |
 |--00:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 1998
 |     row-size=27B cardinality=373
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_sold_date_sk
    row-size=12B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -1902,7 +1902,7 @@ PLAN-ROOT SINK
 |--08:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: s_gmt_offset = -5
 |     row-size=52B cardinality=12
 |
@@ -1914,12 +1914,12 @@ PLAN-ROOT SINK
 |--07:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 1998
 |     row-size=27B cardinality=373
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_sold_date_sk
    row-size=12B cardinality=2.88M
 ---- PARALLELPLANS
@@ -1959,7 +1959,7 @@ PLAN-ROOT SINK
 |  08:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: s_gmt_offset = -5
 |     row-size=52B cardinality=12
 |
@@ -1975,12 +1975,12 @@ PLAN-ROOT SINK
 |  07:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 1998
 |     row-size=27B cardinality=373
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_sold_date_sk
    row-size=12B cardinality=2.88M
 ====
@@ -2051,7 +2051,7 @@ PLAN-ROOT SINK
 |  row-size=138B cardinality=230.45K
 |
 |--11:SCAN HDFS [tpcds.customer_address current_addr]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=25B cardinality=50.00K
 |
 12:HASH JOIN [INNER JOIN]
@@ -2060,7 +2060,7 @@ PLAN-ROOT SINK
 |  row-size=113B cardinality=230.45K
 |
 |--10:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF000 -> customer.c_current_addr_sk
 |     row-size=44B cardinality=100.00K
 |
@@ -2075,7 +2075,7 @@ PLAN-ROOT SINK
 |  row-size=107B cardinality=230.45K
 |
 |--04:SCAN HDFS [tpcds.customer_address]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=25B cardinality=50.00K
 |
 07:HASH JOIN [INNER JOIN]
@@ -2084,7 +2084,7 @@ PLAN-ROOT SINK
 |  row-size=83B cardinality=230.45K
 |
 |--02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_city IN ('Midway', 'Concord', 'Spring Hill', 'Brownsville', 'Greenville')
 |     row-size=23B cardinality=12
 |
@@ -2094,7 +2094,7 @@ PLAN-ROOT SINK
 |  row-size=60B cardinality=230.45K
 |
 |--01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: date_dim.d_dow IN (6, 0), date_dim.d_year IN (1999, 2000, 2001)
 |     row-size=12B cardinality=598
 |
@@ -2104,12 +2104,12 @@ PLAN-ROOT SINK
 |  row-size=48B cardinality=702.92K
 |
 |--03:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: (household_demographics.hd_dep_count = 5 OR household_demographics.hd_vehicle_count = 3)
 |     row-size=12B cardinality=1.80K
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF002 -> tpcds.store_sales.ss_customer_sk, RF004 -> store_sales.ss_addr_sk, RF006 -> store_sales.ss_store_sk, RF008 -> store_sales.ss_sold_date_sk, RF010 -> store_sales.ss_hdemo_sk
    row-size=36B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -2134,7 +2134,7 @@ PLAN-ROOT SINK
 |--23:EXCHANGE [BROADCAST]
 |  |
 |  11:SCAN HDFS [tpcds.customer_address current_addr]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=25B cardinality=50.00K
 |
 12:HASH JOIN [INNER JOIN, PARTITIONED]
@@ -2145,7 +2145,7 @@ PLAN-ROOT SINK
 |--22:EXCHANGE [HASH(c_customer_sk)]
 |  |
 |  10:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF000 -> customer.c_current_addr_sk
 |     row-size=44B cardinality=100.00K
 |
@@ -2171,7 +2171,7 @@ PLAN-ROOT SINK
 |--18:EXCHANGE [BROADCAST]
 |  |
 |  04:SCAN HDFS [tpcds.customer_address]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=25B cardinality=50.00K
 |
 07:HASH JOIN [INNER JOIN, BROADCAST]
@@ -2182,7 +2182,7 @@ PLAN-ROOT SINK
 |--17:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_city IN ('Midway', 'Concord', 'Spring Hill', 'Brownsville', 'Greenville')
 |     row-size=23B cardinality=12
 |
@@ -2194,7 +2194,7 @@ PLAN-ROOT SINK
 |--16:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: date_dim.d_dow IN (6, 0), date_dim.d_year IN (1999, 2000, 2001)
 |     row-size=12B cardinality=598
 |
@@ -2206,12 +2206,12 @@ PLAN-ROOT SINK
 |--15:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: (household_demographics.hd_dep_count = 5 OR household_demographics.hd_vehicle_count = 3)
 |     row-size=12B cardinality=1.80K
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF002 -> tpcds.store_sales.ss_customer_sk, RF004 -> store_sales.ss_addr_sk, RF006 -> store_sales.ss_store_sk, RF008 -> store_sales.ss_sold_date_sk, RF010 -> store_sales.ss_hdemo_sk
    row-size=36B cardinality=2.88M
 ---- PARALLELPLANS
@@ -2240,7 +2240,7 @@ PLAN-ROOT SINK
 |  23:EXCHANGE [BROADCAST]
 |  |
 |  11:SCAN HDFS [tpcds.customer_address current_addr]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=25B cardinality=50.00K
 |
 12:HASH JOIN [INNER JOIN, PARTITIONED]
@@ -2255,7 +2255,7 @@ PLAN-ROOT SINK
 |  22:EXCHANGE [HASH(c_customer_sk)]
 |  |
 |  10:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF000 -> customer.c_current_addr_sk
 |     row-size=44B cardinality=100.00K
 |
@@ -2285,7 +2285,7 @@ PLAN-ROOT SINK
 |  18:EXCHANGE [BROADCAST]
 |  |
 |  04:SCAN HDFS [tpcds.customer_address]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=25B cardinality=50.00K
 |
 07:HASH JOIN [INNER JOIN, BROADCAST]
@@ -2300,7 +2300,7 @@ PLAN-ROOT SINK
 |  17:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_city IN ('Midway', 'Concord', 'Spring Hill', 'Brownsville', 'Greenville')
 |     row-size=23B cardinality=12
 |
@@ -2316,7 +2316,7 @@ PLAN-ROOT SINK
 |  16:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: date_dim.d_dow IN (6, 0), date_dim.d_year IN (1999, 2000, 2001)
 |     row-size=12B cardinality=598
 |
@@ -2332,12 +2332,12 @@ PLAN-ROOT SINK
 |  15:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: (household_demographics.hd_dep_count = 5 OR household_demographics.hd_vehicle_count = 3)
 |     row-size=12B cardinality=1.80K
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF002 -> tpcds.store_sales.ss_customer_sk, RF004 -> store_sales.ss_addr_sk, RF006 -> store_sales.ss_store_sk, RF008 -> store_sales.ss_sold_date_sk, RF010 -> store_sales.ss_hdemo_sk
    row-size=36B cardinality=2.88M
 ====
@@ -2386,7 +2386,7 @@ PLAN-ROOT SINK
 |  row-size=72B cardinality=1.73K
 |
 |--00:SCAN HDFS [tpcds.date_dim dt]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: dt.d_year = 1998, dt.d_moy = 12
 |     row-size=12B cardinality=108
 |
@@ -2396,12 +2396,12 @@ PLAN-ROOT SINK
 |  row-size=60B cardinality=29.12K
 |
 |--02:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: item.i_manager_id = 1
 |     row-size=44B cardinality=182
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> store_sales.ss_sold_date_sk, RF002 -> store_sales.ss_item_sk
    row-size=16B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -2437,7 +2437,7 @@ PLAN-ROOT SINK
 |--08:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.date_dim dt]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: dt.d_year = 1998, dt.d_moy = 12
 |     row-size=12B cardinality=108
 |
@@ -2449,12 +2449,12 @@ PLAN-ROOT SINK
 |--07:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: item.i_manager_id = 1
 |     row-size=44B cardinality=182
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> store_sales.ss_sold_date_sk, RF002 -> store_sales.ss_item_sk
    row-size=16B cardinality=2.88M
 ---- PARALLELPLANS
@@ -2494,7 +2494,7 @@ PLAN-ROOT SINK
 |  08:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.date_dim dt]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: dt.d_year = 1998, dt.d_moy = 12
 |     row-size=12B cardinality=108
 |
@@ -2510,12 +2510,12 @@ PLAN-ROOT SINK
 |  07:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: item.i_manager_id = 1
 |     row-size=44B cardinality=182
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> store_sales.ss_sold_date_sk, RF002 -> store_sales.ss_item_sk
    row-size=16B cardinality=2.88M
 ====
@@ -2570,7 +2570,7 @@ PLAN-ROOT SINK
 |  row-size=114B cardinality=96
 |
 |--03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=4B cardinality=12
 |
 05:HASH JOIN [INNER JOIN]
@@ -2579,7 +2579,7 @@ PLAN-ROOT SINK
 |  row-size=110B cardinality=96
 |
 |--02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_month_seq IN (1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223)
 |     row-size=12B cardinality=362
 |
@@ -2589,12 +2589,12 @@ PLAN-ROOT SINK
 |  row-size=98B cardinality=481
 |
 |--00:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: ((i_category IN ('Books', 'Children', 'Electronics') AND i_class IN ('personal', 'portable', 'reference', 'self-help') AND i_brand IN ('scholaramalgamalg #14', 'scholaramalgamalg #7', 'exportiunivamalg #9', 'scholaramalgamalg #9')) OR (i_category IN ('Women', 'Music', 'Men') AND i_class IN ('accessories', 'classical', 'fragrances', 'pants') AND i_brand IN ('amalgimporto #1', 'edu packscholar #1', 'exportiimporto #1', 'importoamalg #1')))
 |     row-size=78B cardinality=3
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_sold_date_sk, RF004 -> ss_item_sk
    row-size=20B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -2630,7 +2630,7 @@ PLAN-ROOT SINK
 |--11:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=4B cardinality=12
 |
 05:HASH JOIN [INNER JOIN, BROADCAST]
@@ -2641,7 +2641,7 @@ PLAN-ROOT SINK
 |--10:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_month_seq IN (1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223)
 |     row-size=12B cardinality=362
 |
@@ -2653,12 +2653,12 @@ PLAN-ROOT SINK
 |--09:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: ((i_category IN ('Books', 'Children', 'Electronics') AND i_class IN ('personal', 'portable', 'reference', 'self-help') AND i_brand IN ('scholaramalgamalg #14', 'scholaramalgamalg #7', 'exportiunivamalg #9', 'scholaramalgamalg #9')) OR (i_category IN ('Women', 'Music', 'Men') AND i_class IN ('accessories', 'classical', 'fragrances', 'pants') AND i_brand IN ('amalgimporto #1', 'edu packscholar #1', 'exportiimporto #1', 'importoamalg #1')))
 |     row-size=78B cardinality=3
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_sold_date_sk, RF004 -> ss_item_sk
    row-size=20B cardinality=2.88M
 ---- PARALLELPLANS
@@ -2698,7 +2698,7 @@ PLAN-ROOT SINK
 |  11:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=4B cardinality=12
 |
 05:HASH JOIN [INNER JOIN, BROADCAST]
@@ -2713,7 +2713,7 @@ PLAN-ROOT SINK
 |  10:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_month_seq IN (1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223)
 |     row-size=12B cardinality=362
 |
@@ -2729,12 +2729,12 @@ PLAN-ROOT SINK
 |  09:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: ((i_category IN ('Books', 'Children', 'Electronics') AND i_class IN ('personal', 'portable', 'reference', 'self-help') AND i_brand IN ('scholaramalgamalg #14', 'scholaramalgamalg #7', 'exportiunivamalg #9', 'scholaramalgamalg #9')) OR (i_category IN ('Women', 'Music', 'Men') AND i_class IN ('accessories', 'classical', 'fragrances', 'pants') AND i_brand IN ('amalgimporto #1', 'edu packscholar #1', 'exportiimporto #1', 'importoamalg #1')))
 |     row-size=78B cardinality=3
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_sold_date_sk, RF004 -> ss_item_sk
    row-size=20B cardinality=2.88M
 ====
@@ -2780,7 +2780,7 @@ PLAN-ROOT SINK
 |  row-size=72B cardinality=1.73K
 |
 |--00:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 2001, d_moy = 12
 |     row-size=12B cardinality=108
 |
@@ -2790,12 +2790,12 @@ PLAN-ROOT SINK
 |  row-size=60B cardinality=29.12K
 |
 |--02:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: i_manager_id = 36
 |     row-size=44B cardinality=182
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_sold_date_sk, RF002 -> ss_item_sk
    row-size=16B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -2831,7 +2831,7 @@ PLAN-ROOT SINK
 |--08:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 2001, d_moy = 12
 |     row-size=12B cardinality=108
 |
@@ -2843,12 +2843,12 @@ PLAN-ROOT SINK
 |--07:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: i_manager_id = 36
 |     row-size=44B cardinality=182
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_sold_date_sk, RF002 -> ss_item_sk
    row-size=16B cardinality=2.88M
 ---- PARALLELPLANS
@@ -2888,7 +2888,7 @@ PLAN-ROOT SINK
 |  08:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 2001, d_moy = 12
 |     row-size=12B cardinality=108
 |
@@ -2904,12 +2904,12 @@ PLAN-ROOT SINK
 |  07:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: i_manager_id = 36
 |     row-size=44B cardinality=182
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_sold_date_sk, RF002 -> ss_item_sk
    row-size=16B cardinality=2.88M
 ====
@@ -3015,7 +3015,7 @@ PLAN-ROOT SINK
 |  |  row-size=160B cardinality=50.14K
 |  |
 |  |--12:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     row-size=32B cardinality=12
 |  |
 |  14:HASH JOIN [INNER JOIN]
@@ -3024,7 +3024,7 @@ PLAN-ROOT SINK
 |  |  row-size=128B cardinality=50.14K
 |  |
 |  |--13:SCAN HDFS [tpcds.date_dim d]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: d_month_seq <= 1208, d_month_seq >= 1197
 |  |     row-size=8B cardinality=7.30K
 |  |
@@ -3039,12 +3039,12 @@ PLAN-ROOT SINK
 |  |  row-size=39B cardinality=2.88M
 |  |
 |  |--09:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     runtime filters: RF012 -> tpcds.date_dim.d_week_seq
 |  |     row-size=27B cardinality=73.05K
 |  |
 |  08:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF010 -> tpcds.store_sales.ss_store_sk, RF014 -> ss_sold_date_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -3054,7 +3054,7 @@ PLAN-ROOT SINK
 |  row-size=176B cardinality=50.14K
 |
 |--04:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     runtime filters: RF001 -> s_store_id
 |     row-size=48B cardinality=12
 |
@@ -3064,7 +3064,7 @@ PLAN-ROOT SINK
 |  row-size=128B cardinality=50.14K
 |
 |--05:SCAN HDFS [tpcds.date_dim d]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_month_seq <= 1196, d_month_seq >= 1185
 |     runtime filters: RF000 -> d.d_week_seq
 |     row-size=8B cardinality=7.30K
@@ -3080,12 +3080,12 @@ PLAN-ROOT SINK
 |  row-size=39B cardinality=2.88M
 |
 |--01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     runtime filters: RF000 -> tpcds.date_dim.d_week_seq, RF006 -> tpcds.date_dim.d_week_seq
 |     row-size=27B cardinality=73.05K
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF004 -> tpcds.store_sales.ss_store_sk, RF008 -> ss_sold_date_sk
    row-size=12B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -3116,7 +3116,7 @@ PLAN-ROOT SINK
 |  |--27:EXCHANGE [BROADCAST]
 |  |  |
 |  |  12:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     row-size=32B cardinality=12
 |  |
 |  14:HASH JOIN [INNER JOIN, BROADCAST]
@@ -3127,7 +3127,7 @@ PLAN-ROOT SINK
 |  |--26:EXCHANGE [BROADCAST]
 |  |  |
 |  |  13:SCAN HDFS [tpcds.date_dim d]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: d_month_seq <= 1208, d_month_seq >= 1197
 |  |     row-size=8B cardinality=7.30K
 |  |
@@ -3151,12 +3151,12 @@ PLAN-ROOT SINK
 |  |--23:EXCHANGE [BROADCAST]
 |  |  |
 |  |  09:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     runtime filters: RF012 -> tpcds.date_dim.d_week_seq
 |  |     row-size=27B cardinality=73.05K
 |  |
 |  08:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF010 -> tpcds.store_sales.ss_store_sk, RF014 -> ss_sold_date_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -3170,7 +3170,7 @@ PLAN-ROOT SINK
 |--22:EXCHANGE [BROADCAST]
 |  |
 |  04:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     runtime filters: RF001 -> s_store_id
 |     row-size=48B cardinality=12
 |
@@ -3182,7 +3182,7 @@ PLAN-ROOT SINK
 |--21:EXCHANGE [BROADCAST]
 |  |
 |  05:SCAN HDFS [tpcds.date_dim d]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_month_seq <= 1196, d_month_seq >= 1185
 |     runtime filters: RF000 -> d.d_week_seq
 |     row-size=8B cardinality=7.30K
@@ -3207,12 +3207,12 @@ PLAN-ROOT SINK
 |--18:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     runtime filters: RF000 -> tpcds.date_dim.d_week_seq, RF006 -> tpcds.date_dim.d_week_seq
 |     row-size=27B cardinality=73.05K
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF004 -> tpcds.store_sales.ss_store_sk, RF008 -> ss_sold_date_sk
    row-size=12B cardinality=2.88M
 ---- PARALLELPLANS
@@ -3251,7 +3251,7 @@ PLAN-ROOT SINK
 |  |  27:EXCHANGE [BROADCAST]
 |  |  |
 |  |  12:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     row-size=32B cardinality=12
 |  |
 |  14:HASH JOIN [INNER JOIN, BROADCAST]
@@ -3266,7 +3266,7 @@ PLAN-ROOT SINK
 |  |  26:EXCHANGE [BROADCAST]
 |  |  |
 |  |  13:SCAN HDFS [tpcds.date_dim d]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: d_month_seq <= 1208, d_month_seq >= 1197
 |  |     row-size=8B cardinality=7.30K
 |  |
@@ -3294,12 +3294,12 @@ PLAN-ROOT SINK
 |  |  23:EXCHANGE [BROADCAST]
 |  |  |
 |  |  09:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     runtime filters: RF012 -> tpcds.date_dim.d_week_seq
 |  |     row-size=27B cardinality=73.05K
 |  |
 |  08:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF010 -> tpcds.store_sales.ss_store_sk, RF014 -> ss_sold_date_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -3317,7 +3317,7 @@ PLAN-ROOT SINK
 |  22:EXCHANGE [BROADCAST]
 |  |
 |  04:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     runtime filters: RF001 -> s_store_id
 |     row-size=48B cardinality=12
 |
@@ -3333,7 +3333,7 @@ PLAN-ROOT SINK
 |  21:EXCHANGE [BROADCAST]
 |  |
 |  05:SCAN HDFS [tpcds.date_dim d]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_month_seq <= 1196, d_month_seq >= 1185
 |     runtime filters: RF000 -> d.d_week_seq
 |     row-size=8B cardinality=7.30K
@@ -3362,12 +3362,12 @@ PLAN-ROOT SINK
 |  18:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     runtime filters: RF000 -> tpcds.date_dim.d_week_seq, RF006 -> tpcds.date_dim.d_week_seq
 |     row-size=27B cardinality=73.05K
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF004 -> tpcds.store_sales.ss_store_sk, RF008 -> ss_sold_date_sk
    row-size=12B cardinality=2.88M
 ====
@@ -3440,7 +3440,7 @@ PLAN-ROOT SINK
 |  row-size=114B cardinality=6
 |
 |--03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=4B cardinality=12
 |
 05:HASH JOIN [INNER JOIN]
@@ -3449,7 +3449,7 @@ PLAN-ROOT SINK
 |  row-size=110B cardinality=6
 |
 |--02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: tpcds.date_dim.d_date_sk <= 2452275, tpcds.date_dim.d_date_sk >= 2451911, d_month_seq IN (1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223)
 |     row-size=12B cardinality=114
 |
@@ -3459,13 +3459,13 @@ PLAN-ROOT SINK
 |  row-size=98B cardinality=92
 |
 |--00:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: ((i_category IN ('Books', 'Children', 'Electronics') AND i_class IN ('personal', 'portable', 'refernece', 'self-help') AND i_brand IN ('scholaramalgamalg #14', 'scholaramalgamalg #7', 'exportiunivamalg #9', 'scholaramalgamalg #9')) OR (i_category IN ('Women', 'Music', 'Men') AND i_class IN ('accessories', 'classical', 'fragrances', 'pants') AND i_brand IN ('amalgimporto #1', 'edu packscholar #1', 'exportiimporto #1', 'importoamalg #1')))
 |     row-size=78B cardinality=3
 |
 01:SCAN HDFS [tpcds.store_sales]
    partition predicates: ss_sold_date_sk >= 2451911, ss_sold_date_sk <= 2452275
-   partitions=364/1824 files=364 size=66.85MB
+   HDFS partitions=364/1824 files=364 size=66.85MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_sold_date_sk, RF004 -> ss_item_sk
    row-size=20B cardinality=546.31K
 ---- DISTRIBUTEDPLAN
@@ -3514,7 +3514,7 @@ PLAN-ROOT SINK
 |--14:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=4B cardinality=12
 |
 05:HASH JOIN [INNER JOIN, BROADCAST]
@@ -3525,7 +3525,7 @@ PLAN-ROOT SINK
 |--13:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: tpcds.date_dim.d_date_sk <= 2452275, tpcds.date_dim.d_date_sk >= 2451911, d_month_seq IN (1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223)
 |     row-size=12B cardinality=114
 |
@@ -3537,13 +3537,13 @@ PLAN-ROOT SINK
 |--12:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: ((i_category IN ('Books', 'Children', 'Electronics') AND i_class IN ('personal', 'portable', 'refernece', 'self-help') AND i_brand IN ('scholaramalgamalg #14', 'scholaramalgamalg #7', 'exportiunivamalg #9', 'scholaramalgamalg #9')) OR (i_category IN ('Women', 'Music', 'Men') AND i_class IN ('accessories', 'classical', 'fragrances', 'pants') AND i_brand IN ('amalgimporto #1', 'edu packscholar #1', 'exportiimporto #1', 'importoamalg #1')))
 |     row-size=78B cardinality=3
 |
 01:SCAN HDFS [tpcds.store_sales]
    partition predicates: ss_sold_date_sk >= 2451911, ss_sold_date_sk <= 2452275
-   partitions=364/1824 files=364 size=66.85MB
+   HDFS partitions=364/1824 files=364 size=66.85MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_sold_date_sk, RF004 -> ss_item_sk
    row-size=20B cardinality=546.31K
 ---- PARALLELPLANS
@@ -3596,7 +3596,7 @@ PLAN-ROOT SINK
 |  14:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=4B cardinality=12
 |
 05:HASH JOIN [INNER JOIN, BROADCAST]
@@ -3611,7 +3611,7 @@ PLAN-ROOT SINK
 |  13:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: tpcds.date_dim.d_date_sk <= 2452275, tpcds.date_dim.d_date_sk >= 2451911, d_month_seq IN (1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223)
 |     row-size=12B cardinality=114
 |
@@ -3627,13 +3627,13 @@ PLAN-ROOT SINK
 |  12:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: ((i_category IN ('Books', 'Children', 'Electronics') AND i_class IN ('personal', 'portable', 'refernece', 'self-help') AND i_brand IN ('scholaramalgamalg #14', 'scholaramalgamalg #7', 'exportiunivamalg #9', 'scholaramalgamalg #9')) OR (i_category IN ('Women', 'Music', 'Men') AND i_class IN ('accessories', 'classical', 'fragrances', 'pants') AND i_brand IN ('amalgimporto #1', 'edu packscholar #1', 'exportiimporto #1', 'importoamalg #1')))
 |     row-size=78B cardinality=3
 |
 01:SCAN HDFS [tpcds.store_sales]
    partition predicates: ss_sold_date_sk >= 2451911, ss_sold_date_sk <= 2452275
-   partitions=364/1824 files=364 size=66.85MB
+   HDFS partitions=364/1824 files=364 size=66.85MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_sold_date_sk, RF004 -> ss_item_sk
    row-size=20B cardinality=546.31K
 ====
@@ -3723,12 +3723,12 @@ PLAN-ROOT SINK
 |  |  row-size=28B cardinality=2.88M
 |  |
 |  |--03:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: d_month_seq <= 1223, d_month_seq >= 1212
 |  |     row-size=8B cardinality=7.30K
 |  |
 |  02:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF008 -> ss_sold_date_sk
 |     row-size=20B cardinality=2.88M
 |
@@ -3738,7 +3738,7 @@ PLAN-ROOT SINK
 |  row-size=205B cardinality=107.85K
 |
 |--01:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=157B cardinality=18.00K
 |
 11:HASH JOIN [INNER JOIN]
@@ -3747,7 +3747,7 @@ PLAN-ROOT SINK
 |  row-size=48B cardinality=107.85K
 |
 |--00:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     runtime filters: RF000 -> tpcds.store.s_store_sk
 |     row-size=20B cardinality=12
 |
@@ -3762,12 +3762,12 @@ PLAN-ROOT SINK
 |  row-size=28B cardinality=2.88M
 |
 |--08:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_month_seq <= 1223, d_month_seq >= 1212
 |     row-size=8B cardinality=7.30K
 |
 07:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> tpcds.store_sales.ss_store_sk, RF002 -> tpcds.store_sales.ss_item_sk, RF004 -> tpcds.store_sales.ss_store_sk, RF006 -> ss_sold_date_sk
    row-size=20B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -3823,12 +3823,12 @@ PLAN-ROOT SINK
 |  |--21:EXCHANGE [BROADCAST]
 |  |  |
 |  |  03:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: d_month_seq <= 1223, d_month_seq >= 1212
 |  |     row-size=8B cardinality=7.30K
 |  |
 |  02:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF008 -> ss_sold_date_sk
 |     row-size=20B cardinality=2.88M
 |
@@ -3840,7 +3840,7 @@ PLAN-ROOT SINK
 |--20:EXCHANGE [HASH(i_item_sk)]
 |  |
 |  01:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=157B cardinality=18.00K
 |
 19:EXCHANGE [HASH(ss_item_sk)]
@@ -3853,7 +3853,7 @@ PLAN-ROOT SINK
 |--18:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     runtime filters: RF000 -> tpcds.store.s_store_sk
 |     row-size=20B cardinality=12
 |
@@ -3877,12 +3877,12 @@ PLAN-ROOT SINK
 |--15:EXCHANGE [BROADCAST]
 |  |
 |  08:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_month_seq <= 1223, d_month_seq >= 1212
 |     row-size=8B cardinality=7.30K
 |
 07:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> tpcds.store_sales.ss_store_sk, RF002 -> tpcds.store_sales.ss_item_sk, RF004 -> tpcds.store_sales.ss_store_sk, RF006 -> ss_sold_date_sk
    row-size=20B cardinality=2.88M
 ---- PARALLELPLANS
@@ -3946,12 +3946,12 @@ PLAN-ROOT SINK
 |  |  21:EXCHANGE [BROADCAST]
 |  |  |
 |  |  03:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: d_month_seq <= 1223, d_month_seq >= 1212
 |  |     row-size=8B cardinality=7.30K
 |  |
 |  02:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF008 -> ss_sold_date_sk
 |     row-size=20B cardinality=2.88M
 |
@@ -3967,7 +3967,7 @@ PLAN-ROOT SINK
 |  20:EXCHANGE [HASH(i_item_sk)]
 |  |
 |  01:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=157B cardinality=18.00K
 |
 19:EXCHANGE [HASH(ss_item_sk)]
@@ -3984,7 +3984,7 @@ PLAN-ROOT SINK
 |  18:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     runtime filters: RF000 -> tpcds.store.s_store_sk
 |     row-size=20B cardinality=12
 |
@@ -4012,12 +4012,12 @@ PLAN-ROOT SINK
 |  15:EXCHANGE [BROADCAST]
 |  |
 |  08:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_month_seq <= 1223, d_month_seq >= 1212
 |     row-size=8B cardinality=7.30K
 |
 07:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> tpcds.store_sales.ss_store_sk, RF002 -> tpcds.store_sales.ss_item_sk, RF004 -> tpcds.store_sales.ss_store_sk, RF006 -> ss_sold_date_sk
    row-size=20B cardinality=2.88M
 ====
@@ -4086,7 +4086,7 @@ PLAN-ROOT SINK
 |  row-size=154B cardinality=702.92K
 |
 |--11:SCAN HDFS [tpcds.customer_address current_addr]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=25B cardinality=50.00K
 |
 12:HASH JOIN [INNER JOIN]
@@ -4095,7 +4095,7 @@ PLAN-ROOT SINK
 |  row-size=129B cardinality=702.92K
 |
 |--10:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF000 -> customer.c_current_addr_sk
 |     row-size=44B cardinality=100.00K
 |
@@ -4110,7 +4110,7 @@ PLAN-ROOT SINK
 |  row-size=125B cardinality=702.92K
 |
 |--04:SCAN HDFS [tpcds.customer_address]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=25B cardinality=50.00K
 |
 07:HASH JOIN [INNER JOIN]
@@ -4119,7 +4119,7 @@ PLAN-ROOT SINK
 |  row-size=101B cardinality=702.92K
 |
 |--02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_city IN ('Midway', 'Fairview')
 |     row-size=23B cardinality=12
 |
@@ -4129,7 +4129,7 @@ PLAN-ROOT SINK
 |  row-size=78B cardinality=702.92K
 |
 |--01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_date <= '1999-03-31', d_date >= '1999-01-01'
 |     row-size=26B cardinality=7.30K
 |
@@ -4139,12 +4139,12 @@ PLAN-ROOT SINK
 |  row-size=52B cardinality=702.92K
 |
 |--03:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: (household_demographics.hd_dep_count = 5 OR household_demographics.hd_vehicle_count = 3)
 |     row-size=12B cardinality=1.80K
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF002 -> tpcds.store_sales.ss_customer_sk, RF004 -> store_sales.ss_addr_sk, RF006 -> store_sales.ss_store_sk, RF008 -> store_sales.ss_sold_date_sk, RF010 -> store_sales.ss_hdemo_sk
    row-size=40B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -4169,7 +4169,7 @@ PLAN-ROOT SINK
 |--22:EXCHANGE [BROADCAST]
 |  |
 |  11:SCAN HDFS [tpcds.customer_address current_addr]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=25B cardinality=50.00K
 |
 12:HASH JOIN [INNER JOIN, BROADCAST]
@@ -4180,7 +4180,7 @@ PLAN-ROOT SINK
 |--21:EXCHANGE [BROADCAST]
 |  |
 |  10:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF000 -> customer.c_current_addr_sk
 |     row-size=44B cardinality=100.00K
 |
@@ -4204,7 +4204,7 @@ PLAN-ROOT SINK
 |--18:EXCHANGE [BROADCAST]
 |  |
 |  04:SCAN HDFS [tpcds.customer_address]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=25B cardinality=50.00K
 |
 07:HASH JOIN [INNER JOIN, BROADCAST]
@@ -4215,7 +4215,7 @@ PLAN-ROOT SINK
 |--17:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_city IN ('Midway', 'Fairview')
 |     row-size=23B cardinality=12
 |
@@ -4227,7 +4227,7 @@ PLAN-ROOT SINK
 |--16:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_date <= '1999-03-31', d_date >= '1999-01-01'
 |     row-size=26B cardinality=7.30K
 |
@@ -4239,12 +4239,12 @@ PLAN-ROOT SINK
 |--15:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: (household_demographics.hd_dep_count = 5 OR household_demographics.hd_vehicle_count = 3)
 |     row-size=12B cardinality=1.80K
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF002 -> tpcds.store_sales.ss_customer_sk, RF004 -> store_sales.ss_addr_sk, RF006 -> store_sales.ss_store_sk, RF008 -> store_sales.ss_sold_date_sk, RF010 -> store_sales.ss_hdemo_sk
    row-size=40B cardinality=2.88M
 ---- PARALLELPLANS
@@ -4273,7 +4273,7 @@ PLAN-ROOT SINK
 |  22:EXCHANGE [BROADCAST]
 |  |
 |  11:SCAN HDFS [tpcds.customer_address current_addr]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=25B cardinality=50.00K
 |
 12:HASH JOIN [INNER JOIN, BROADCAST]
@@ -4288,7 +4288,7 @@ PLAN-ROOT SINK
 |  21:EXCHANGE [BROADCAST]
 |  |
 |  10:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF000 -> customer.c_current_addr_sk
 |     row-size=44B cardinality=100.00K
 |
@@ -4316,7 +4316,7 @@ PLAN-ROOT SINK
 |  18:EXCHANGE [BROADCAST]
 |  |
 |  04:SCAN HDFS [tpcds.customer_address]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=25B cardinality=50.00K
 |
 07:HASH JOIN [INNER JOIN, BROADCAST]
@@ -4331,7 +4331,7 @@ PLAN-ROOT SINK
 |  17:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_city IN ('Midway', 'Fairview')
 |     row-size=23B cardinality=12
 |
@@ -4347,7 +4347,7 @@ PLAN-ROOT SINK
 |  16:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_date <= '1999-03-31', d_date >= '1999-01-01'
 |     row-size=26B cardinality=7.30K
 |
@@ -4363,12 +4363,12 @@ PLAN-ROOT SINK
 |  15:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: (household_demographics.hd_dep_count = 5 OR household_demographics.hd_vehicle_count = 3)
 |     row-size=12B cardinality=1.80K
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF002 -> tpcds.store_sales.ss_customer_sk, RF004 -> store_sales.ss_addr_sk, RF006 -> store_sales.ss_store_sk, RF008 -> store_sales.ss_sold_date_sk, RF010 -> store_sales.ss_hdemo_sk
    row-size=40B cardinality=2.88M
 ====
@@ -4422,13 +4422,13 @@ PLAN-ROOT SINK
 09:HASH JOIN [INNER JOIN]
 |  hash predicates: c_customer_sk = ss_customer_sk
 |  runtime filters: RF000 <- ss_customer_sk
-|  row-size=88B cardinality=162.45K
+|  row-size=88B cardinality=16.25K
 |
 |--07:AGGREGATE [FINALIZE]
 |  |  output: count(*)
 |  |  group by: ss_ticket_number, ss_customer_sk
 |  |  having: count(*) <= 5, count(*) >= 1
-|  |  row-size=20B cardinality=162.45K
+|  |  row-size=20B cardinality=16.25K
 |  |
 |  06:HASH JOIN [INNER JOIN]
 |  |  hash predicates: store_sales.ss_store_sk = store.s_store_sk
@@ -4436,7 +4436,7 @@ PLAN-ROOT SINK
 |  |  row-size=93B cardinality=162.45K
 |  |
 |  |--02:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_county IN ('Saginaw County', 'Sumner County', 'Appanoose County', 'Daviess County')
 |  |     row-size=33B cardinality=12
 |  |
@@ -4446,7 +4446,7 @@ PLAN-ROOT SINK
 |  |  row-size=60B cardinality=162.45K
 |  |
 |  |--01:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     row-size=4B cardinality=73.05K
 |  |
 |  04:HASH JOIN [INNER JOIN]
@@ -4455,22 +4455,22 @@ PLAN-ROOT SINK
 |  |  row-size=56B cardinality=162.45K
 |  |
 |  |--03:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: household_demographics.hd_vehicle_count > 0, household_demographics.hd_buy_potential IN ('>10000', 'unknown'), CASE WHEN household_demographics.hd_vehicle_count > 0 THEN household_demographics.hd_dep_count / household_demographics.hd_vehicle_count ELSE NULL END > 1
 |  |     row-size=32B cardinality=416
 |  |
 |  00:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF002 -> store_sales.ss_store_sk, RF004 -> store_sales.ss_sold_date_sk, RF006 -> store_sales.ss_hdemo_sk
 |     row-size=24B cardinality=2.88M
 |
 08:SCAN HDFS [tpcds.customer]
-   partitions=1/1 files=1 size=12.60MB
+   HDFS partitions=1/1 files=1 size=12.60MB
    runtime filters: RF000 -> c_customer_sk
    row-size=68B cardinality=100.00K
 ---- DISTRIBUTEDPLAN
 Max Per-Host Resource Reservation: Memory=49.45MB Threads=13
-Per-Host Resource Estimates: Memory=337MB
+Per-Host Resource Estimates: Memory=336MB
 PLAN-ROOT SINK
 |
 18:MERGING-EXCHANGE [UNPARTITIONED]
@@ -4484,12 +4484,12 @@ PLAN-ROOT SINK
 09:HASH JOIN [INNER JOIN, PARTITIONED]
 |  hash predicates: ss_customer_sk = c_customer_sk
 |  runtime filters: RF000 <- c_customer_sk
-|  row-size=88B cardinality=162.45K
+|  row-size=88B cardinality=16.25K
 |
 |--17:EXCHANGE [HASH(c_customer_sk)]
 |  |
 |  08:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     row-size=68B cardinality=100.00K
 |
 16:EXCHANGE [HASH(ss_customer_sk)]
@@ -4498,7 +4498,7 @@ PLAN-ROOT SINK
 |  output: count:merge(*)
 |  group by: ss_ticket_number, ss_customer_sk
 |  having: count(*) <= 5, count(*) >= 1
-|  row-size=20B cardinality=162.45K
+|  row-size=20B cardinality=16.25K
 |
 14:EXCHANGE [HASH(ss_ticket_number,ss_customer_sk)]
 |
@@ -4515,7 +4515,7 @@ PLAN-ROOT SINK
 |--13:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_county IN ('Saginaw County', 'Sumner County', 'Appanoose County', 'Daviess County')
 |     row-size=33B cardinality=12
 |
@@ -4527,7 +4527,7 @@ PLAN-ROOT SINK
 |--12:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     row-size=4B cardinality=73.05K
 |
 04:HASH JOIN [INNER JOIN, BROADCAST]
@@ -4538,12 +4538,12 @@ PLAN-ROOT SINK
 |--11:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: household_demographics.hd_vehicle_count > 0, household_demographics.hd_buy_potential IN ('>10000', 'unknown'), CASE WHEN household_demographics.hd_vehicle_count > 0 THEN household_demographics.hd_dep_count / household_demographics.hd_vehicle_count ELSE NULL END > 1
 |     row-size=32B cardinality=416
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> tpcds.store_sales.ss_customer_sk, RF002 -> store_sales.ss_store_sk, RF004 -> store_sales.ss_sold_date_sk, RF006 -> store_sales.ss_hdemo_sk
    row-size=24B cardinality=2.88M
 ---- PARALLELPLANS
@@ -4562,7 +4562,7 @@ PLAN-ROOT SINK
 09:HASH JOIN [INNER JOIN, PARTITIONED]
 |  hash predicates: ss_customer_sk = c_customer_sk
 |  runtime filters: RF000 <- c_customer_sk
-|  row-size=88B cardinality=162.45K
+|  row-size=88B cardinality=16.25K
 |
 |--JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
@@ -4571,7 +4571,7 @@ PLAN-ROOT SINK
 |  17:EXCHANGE [HASH(c_customer_sk)]
 |  |
 |  08:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     row-size=68B cardinality=100.00K
 |
 16:EXCHANGE [HASH(ss_customer_sk)]
@@ -4580,7 +4580,7 @@ PLAN-ROOT SINK
 |  output: count:merge(*)
 |  group by: ss_ticket_number, ss_customer_sk
 |  having: count(*) <= 5, count(*) >= 1
-|  row-size=20B cardinality=162.45K
+|  row-size=20B cardinality=16.25K
 |
 14:EXCHANGE [HASH(ss_ticket_number,ss_customer_sk)]
 |
@@ -4601,7 +4601,7 @@ PLAN-ROOT SINK
 |  13:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_county IN ('Saginaw County', 'Sumner County', 'Appanoose County', 'Daviess County')
 |     row-size=33B cardinality=12
 |
@@ -4617,7 +4617,7 @@ PLAN-ROOT SINK
 |  12:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     row-size=4B cardinality=73.05K
 |
 04:HASH JOIN [INNER JOIN, BROADCAST]
@@ -4632,12 +4632,12 @@ PLAN-ROOT SINK
 |  11:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: household_demographics.hd_vehicle_count > 0, household_demographics.hd_buy_potential IN ('>10000', 'unknown'), CASE WHEN household_demographics.hd_vehicle_count > 0 THEN household_demographics.hd_dep_count / household_demographics.hd_vehicle_count ELSE NULL END > 1
 |     row-size=32B cardinality=416
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> tpcds.store_sales.ss_customer_sk, RF002 -> store_sales.ss_store_sk, RF004 -> store_sales.ss_sold_date_sk, RF006 -> store_sales.ss_hdemo_sk
    row-size=24B cardinality=2.88M
 ====
@@ -4709,7 +4709,7 @@ PLAN-ROOT SINK
 |  |  row-size=101B cardinality=46.86K
 |  |
 |  |--01:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: d_date <= '1999-03-31', d_date >= '1999-01-01'
 |  |     row-size=26B cardinality=7.30K
 |  |
@@ -4719,7 +4719,7 @@ PLAN-ROOT SINK
 |  |  row-size=75B cardinality=46.86K
 |  |
 |  |--02:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_number_employees <= 295, store.s_number_employees >= 200
 |  |     row-size=27B cardinality=1
 |  |
@@ -4729,17 +4729,17 @@ PLAN-ROOT SINK
 |  |  row-size=48B cardinality=281.17K
 |  |
 |  |--03:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: (household_demographics.hd_dep_count = 8 OR household_demographics.hd_vehicle_count > 0)
 |  |     row-size=12B cardinality=720
 |  |
 |  00:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF002 -> store_sales.ss_sold_date_sk, RF004 -> store_sales.ss_store_sk, RF006 -> store_sales.ss_hdemo_sk
 |     row-size=36B cardinality=2.88M
 |
 08:SCAN HDFS [tpcds.customer]
-   partitions=1/1 files=1 size=12.60MB
+   HDFS partitions=1/1 files=1 size=12.60MB
    runtime filters: RF000 -> c_customer_sk
    row-size=40B cardinality=100.00K
 ---- DISTRIBUTEDPLAN
@@ -4763,7 +4763,7 @@ PLAN-ROOT SINK
 |--17:EXCHANGE [HASH(c_customer_sk)]
 |  |
 |  08:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     row-size=40B cardinality=100.00K
 |
 16:EXCHANGE [HASH(ss_customer_sk)]
@@ -4788,7 +4788,7 @@ PLAN-ROOT SINK
 |--13:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_date <= '1999-03-31', d_date >= '1999-01-01'
 |     row-size=26B cardinality=7.30K
 |
@@ -4800,7 +4800,7 @@ PLAN-ROOT SINK
 |--12:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_number_employees <= 295, store.s_number_employees >= 200
 |     row-size=27B cardinality=1
 |
@@ -4812,12 +4812,12 @@ PLAN-ROOT SINK
 |--11:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: (household_demographics.hd_dep_count = 8 OR household_demographics.hd_vehicle_count > 0)
 |     row-size=12B cardinality=720
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> tpcds.store_sales.ss_customer_sk, RF002 -> store_sales.ss_sold_date_sk, RF004 -> store_sales.ss_store_sk, RF006 -> store_sales.ss_hdemo_sk
    row-size=36B cardinality=2.88M
 ---- PARALLELPLANS
@@ -4845,7 +4845,7 @@ PLAN-ROOT SINK
 |  17:EXCHANGE [HASH(c_customer_sk)]
 |  |
 |  08:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     row-size=40B cardinality=100.00K
 |
 16:EXCHANGE [HASH(ss_customer_sk)]
@@ -4874,7 +4874,7 @@ PLAN-ROOT SINK
 |  13:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_date <= '1999-03-31', d_date >= '1999-01-01'
 |     row-size=26B cardinality=7.30K
 |
@@ -4890,7 +4890,7 @@ PLAN-ROOT SINK
 |  12:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_number_employees <= 295, store.s_number_employees >= 200
 |     row-size=27B cardinality=1
 |
@@ -4906,12 +4906,12 @@ PLAN-ROOT SINK
 |  11:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: (household_demographics.hd_dep_count = 8 OR household_demographics.hd_vehicle_count > 0)
 |     row-size=12B cardinality=720
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> tpcds.store_sales.ss_customer_sk, RF002 -> store_sales.ss_sold_date_sk, RF004 -> store_sales.ss_store_sk, RF006 -> store_sales.ss_hdemo_sk
    row-size=36B cardinality=2.88M
 ====
@@ -4974,7 +4974,7 @@ PLAN-ROOT SINK
 |  row-size=145B cardinality=10.67K
 |
 |--03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=39B cardinality=12
 |
 05:HASH JOIN [INNER JOIN]
@@ -4983,7 +4983,7 @@ PLAN-ROOT SINK
 |  row-size=106B cardinality=10.67K
 |
 |--02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year IN (2000)
 |     row-size=12B cardinality=373
 |
@@ -4993,12 +4993,12 @@ PLAN-ROOT SINK
 |  row-size=94B cardinality=52.17K
 |
 |--00:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: ((i_category IN ('Children', 'Music', 'Home') AND i_class IN ('toddlers', 'pop', 'lighting')) OR (i_category IN ('Jewelry', 'Books', 'Sports') AND i_class IN ('costume', 'travel', 'football')))
 |     row-size=74B cardinality=326
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_sold_date_sk, RF004 -> ss_item_sk
    row-size=20B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -5047,7 +5047,7 @@ PLAN-ROOT SINK
 |--14:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=39B cardinality=12
 |
 05:HASH JOIN [INNER JOIN, BROADCAST]
@@ -5058,7 +5058,7 @@ PLAN-ROOT SINK
 |--13:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year IN (2000)
 |     row-size=12B cardinality=373
 |
@@ -5070,12 +5070,12 @@ PLAN-ROOT SINK
 |--12:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: ((i_category IN ('Children', 'Music', 'Home') AND i_class IN ('toddlers', 'pop', 'lighting')) OR (i_category IN ('Jewelry', 'Books', 'Sports') AND i_class IN ('costume', 'travel', 'football')))
 |     row-size=74B cardinality=326
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_sold_date_sk, RF004 -> ss_item_sk
    row-size=20B cardinality=2.88M
 ---- PARALLELPLANS
@@ -5128,7 +5128,7 @@ PLAN-ROOT SINK
 |  14:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=39B cardinality=12
 |
 05:HASH JOIN [INNER JOIN, BROADCAST]
@@ -5143,7 +5143,7 @@ PLAN-ROOT SINK
 |  13:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year IN (2000)
 |     row-size=12B cardinality=373
 |
@@ -5159,12 +5159,12 @@ PLAN-ROOT SINK
 |  12:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: ((i_category IN ('Children', 'Music', 'Home') AND i_class IN ('toddlers', 'pop', 'lighting')) OR (i_category IN ('Jewelry', 'Books', 'Sports') AND i_class IN ('costume', 'travel', 'football')))
 |     row-size=74B cardinality=326
 |
 01:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_sold_date_sk, RF004 -> ss_item_sk
    row-size=20B cardinality=2.88M
 ====
@@ -5198,7 +5198,7 @@ PLAN-ROOT SINK
 |  row-size=52B cardinality=2.27K
 |
 |--03:SCAN HDFS [tpcds.store s]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: s.s_store_name = 'ese'
 |     row-size=20B cardinality=2
 |
@@ -5208,7 +5208,7 @@ PLAN-ROOT SINK
 |  row-size=32B cardinality=6.82K
 |
 |--02:SCAN HDFS [tpcds.household_demographics hd]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: hd.hd_dep_count = 5
 |     row-size=8B cardinality=720
 |
@@ -5218,12 +5218,12 @@ PLAN-ROOT SINK
 |  row-size=24B cardinality=69.82K
 |
 |--01:SCAN HDFS [tpcds.time_dim td]
-|     partitions=1/1 files=1 size=4.87MB
+|     HDFS partitions=1/1 files=1 size=4.87MB
 |     predicates: td.t_hour = 8, td.t_minute >= 30
 |     row-size=12B cardinality=1.14K
 |
 00:SCAN HDFS [tpcds.store_sales ss]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss.ss_store_sk, RF002 -> ss.ss_hdemo_sk, RF004 -> ss.ss_sold_time_sk
    row-size=12B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -5249,7 +5249,7 @@ PLAN-ROOT SINK
 |--10:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.store s]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: s.s_store_name = 'ese'
 |     row-size=20B cardinality=2
 |
@@ -5261,7 +5261,7 @@ PLAN-ROOT SINK
 |--09:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.household_demographics hd]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: hd.hd_dep_count = 5
 |     row-size=8B cardinality=720
 |
@@ -5273,12 +5273,12 @@ PLAN-ROOT SINK
 |--08:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.time_dim td]
-|     partitions=1/1 files=1 size=4.87MB
+|     HDFS partitions=1/1 files=1 size=4.87MB
 |     predicates: td.t_hour = 8, td.t_minute >= 30
 |     row-size=12B cardinality=1.14K
 |
 00:SCAN HDFS [tpcds.store_sales ss]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss.ss_store_sk, RF002 -> ss.ss_hdemo_sk, RF004 -> ss.ss_sold_time_sk
    row-size=12B cardinality=2.88M
 ---- PARALLELPLANS
@@ -5308,7 +5308,7 @@ PLAN-ROOT SINK
 |  10:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.store s]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: s.s_store_name = 'ese'
 |     row-size=20B cardinality=2
 |
@@ -5324,7 +5324,7 @@ PLAN-ROOT SINK
 |  09:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.household_demographics hd]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: hd.hd_dep_count = 5
 |     row-size=8B cardinality=720
 |
@@ -5340,12 +5340,12 @@ PLAN-ROOT SINK
 |  08:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.time_dim td]
-|     partitions=1/1 files=1 size=4.87MB
+|     HDFS partitions=1/1 files=1 size=4.87MB
 |     predicates: td.t_hour = 8, td.t_minute >= 30
 |     row-size=12B cardinality=1.14K
 |
 00:SCAN HDFS [tpcds.store_sales ss]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss.ss_store_sk, RF002 -> ss.ss_hdemo_sk, RF004 -> ss.ss_sold_time_sk
    row-size=12B cardinality=2.88M
 ====
@@ -5409,7 +5409,7 @@ PLAN-ROOT SINK
 |  row-size=232B cardinality=29.80K
 |
 |--02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: tpcds.date_dim.d_date_sk <= 2451941, tpcds.date_dim.d_date_sk >= 2451911, d_date <= '2001-01-31', d_date >= '2001-01-01'
 |     row-size=26B cardinality=7.30K
 |
@@ -5420,12 +5420,12 @@ PLAN-ROOT SINK
 |
 |--00:SCAN HDFS [tpcds.store_sales]
 |     partition predicates: ss_sold_date_sk >= 2451911, ss_sold_date_sk <= 2451941
-|     partitions=31/1824 files=31 size=3.64MB
+|     HDFS partitions=31/1824 files=31 size=3.64MB
 |     runtime filters: RF000 -> ss_sold_date_sk
 |     row-size=16B cardinality=29.76K
 |
 01:SCAN HDFS [tpcds.item]
-   partitions=1/1 files=1 size=4.82MB
+   HDFS partitions=1/1 files=1 size=4.82MB
    predicates: i_category IN ('Jewelry', 'Sports', 'Books')
    runtime filters: RF002 -> i_item_sk
    row-size=190B cardinality=5.40K
@@ -5471,7 +5471,7 @@ PLAN-ROOT SINK
 |--11:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: tpcds.date_dim.d_date_sk <= 2451941, tpcds.date_dim.d_date_sk >= 2451911, d_date <= '2001-01-31', d_date >= '2001-01-01'
 |     row-size=26B cardinality=7.30K
 |
@@ -5483,7 +5483,7 @@ PLAN-ROOT SINK
 |--10:EXCHANGE [HASH(i_item_sk)]
 |  |
 |  01:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: i_category IN ('Jewelry', 'Sports', 'Books')
 |     row-size=190B cardinality=5.40K
 |
@@ -5491,7 +5491,7 @@ PLAN-ROOT SINK
 |
 00:SCAN HDFS [tpcds.store_sales]
    partition predicates: ss_sold_date_sk >= 2451911, ss_sold_date_sk <= 2451941
-   partitions=31/1824 files=31 size=3.64MB
+   HDFS partitions=31/1824 files=31 size=3.64MB
    runtime filters: RF000 -> ss_sold_date_sk, RF002 -> ss_item_sk
    row-size=16B cardinality=29.76K
 ---- PARALLELPLANS
@@ -5540,7 +5540,7 @@ PLAN-ROOT SINK
 |  11:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: tpcds.date_dim.d_date_sk <= 2451941, tpcds.date_dim.d_date_sk >= 2451911, d_date <= '2001-01-31', d_date >= '2001-01-01'
 |     row-size=26B cardinality=7.30K
 |
@@ -5556,7 +5556,7 @@ PLAN-ROOT SINK
 |  10:EXCHANGE [HASH(i_item_sk)]
 |  |
 |  01:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: i_category IN ('Jewelry', 'Sports', 'Books')
 |     row-size=190B cardinality=5.40K
 |
@@ -5564,7 +5564,7 @@ PLAN-ROOT SINK
 |
 00:SCAN HDFS [tpcds.store_sales]
    partition predicates: ss_sold_date_sk >= 2451911, ss_sold_date_sk <= 2451941
-   partitions=31/1824 files=31 size=3.64MB
+   HDFS partitions=31/1824 files=31 size=3.64MB
    runtime filters: RF000 -> ss_sold_date_sk, RF002 -> ss_item_sk
    row-size=16B cardinality=29.76K
 ====
@@ -5621,7 +5621,7 @@ PLAN-ROOT SINK
 |  |  row-size=26B cardinality=10
 |  |
 |  07:SCAN HDFS [tpcds.item j]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=22B cardinality=18.00K
 |
 13:HASH JOIN [LEFT SEMI JOIN]
@@ -5635,7 +5635,7 @@ PLAN-ROOT SINK
 |  |  row-size=4B cardinality=1
 |  |
 |  05:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 1999, d_moy = 1
 |     row-size=12B cardinality=108
 |
@@ -5645,7 +5645,7 @@ PLAN-ROOT SINK
 |  row-size=80B cardinality=2.88M
 |
 |--04:SCAN HDFS [tpcds.item i]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     runtime filters: RF000 -> i.i_category
 |     row-size=30B cardinality=18.00K
 |
@@ -5655,7 +5655,7 @@ PLAN-ROOT SINK
 |  row-size=50B cardinality=2.88M
 |
 |--03:SCAN HDFS [tpcds.date_dim d]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     runtime filters: RF002 -> d.d_month_seq
 |     row-size=8B cardinality=73.05K
 |
@@ -5665,7 +5665,7 @@ PLAN-ROOT SINK
 |  row-size=42B cardinality=2.88M
 |
 |--00:SCAN HDFS [tpcds.customer_address a]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=18B cardinality=50.00K
 |
 09:HASH JOIN [INNER JOIN]
@@ -5674,12 +5674,12 @@ PLAN-ROOT SINK
 |  row-size=24B cardinality=2.88M
 |
 |--01:SCAN HDFS [tpcds.customer c]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF008 -> c.c_current_addr_sk
 |     row-size=8B cardinality=100.00K
 |
 02:SCAN HDFS [tpcds.store_sales s]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF004 -> s.ss_item_sk, RF006 -> s.ss_sold_date_sk, RF010 -> s.ss_customer_sk
    row-size=16B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -5729,7 +5729,7 @@ PLAN-ROOT SINK
 |  |  row-size=26B cardinality=10
 |  |
 |  07:SCAN HDFS [tpcds.item j]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=22B cardinality=18.00K
 |
 13:HASH JOIN [LEFT SEMI JOIN, BROADCAST]
@@ -5754,7 +5754,7 @@ PLAN-ROOT SINK
 |  |  row-size=4B cardinality=108
 |  |
 |  05:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 1999, d_moy = 1
 |     row-size=12B cardinality=108
 |
@@ -5766,7 +5766,7 @@ PLAN-ROOT SINK
 |--20:EXCHANGE [BROADCAST]
 |  |
 |  04:SCAN HDFS [tpcds.item i]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     runtime filters: RF000 -> i.i_category
 |     row-size=30B cardinality=18.00K
 |
@@ -5778,7 +5778,7 @@ PLAN-ROOT SINK
 |--19:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.date_dim d]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     runtime filters: RF002 -> d.d_month_seq
 |     row-size=8B cardinality=73.05K
 |
@@ -5790,7 +5790,7 @@ PLAN-ROOT SINK
 |--18:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.customer_address a]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=18B cardinality=50.00K
 |
 09:HASH JOIN [INNER JOIN, BROADCAST]
@@ -5801,12 +5801,12 @@ PLAN-ROOT SINK
 |--17:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.customer c]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF008 -> c.c_current_addr_sk
 |     row-size=8B cardinality=100.00K
 |
 02:SCAN HDFS [tpcds.store_sales s]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF004 -> s.ss_item_sk, RF006 -> s.ss_sold_date_sk, RF010 -> s.ss_customer_sk
    row-size=16B cardinality=2.88M
 ---- PARALLELPLANS
@@ -5860,7 +5860,7 @@ PLAN-ROOT SINK
 |  |  row-size=26B cardinality=10
 |  |
 |  07:SCAN HDFS [tpcds.item j]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=22B cardinality=18.00K
 |
 13:HASH JOIN [LEFT SEMI JOIN, BROADCAST]
@@ -5889,7 +5889,7 @@ PLAN-ROOT SINK
 |  |  row-size=4B cardinality=108
 |  |
 |  05:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 1999, d_moy = 1
 |     row-size=12B cardinality=108
 |
@@ -5905,7 +5905,7 @@ PLAN-ROOT SINK
 |  20:EXCHANGE [BROADCAST]
 |  |
 |  04:SCAN HDFS [tpcds.item i]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     runtime filters: RF000 -> i.i_category
 |     row-size=30B cardinality=18.00K
 |
@@ -5921,7 +5921,7 @@ PLAN-ROOT SINK
 |  19:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.date_dim d]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     runtime filters: RF002 -> d.d_month_seq
 |     row-size=8B cardinality=73.05K
 |
@@ -5937,7 +5937,7 @@ PLAN-ROOT SINK
 |  18:EXCHANGE [BROADCAST]
 |  |
 |  00:SCAN HDFS [tpcds.customer_address a]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     row-size=18B cardinality=50.00K
 |
 09:HASH JOIN [INNER JOIN, BROADCAST]
@@ -5952,12 +5952,12 @@ PLAN-ROOT SINK
 |  17:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.customer c]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF008 -> c.c_current_addr_sk
 |     row-size=8B cardinality=100.00K
 |
 02:SCAN HDFS [tpcds.store_sales s]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF004 -> s.ss_item_sk, RF006 -> s.ss_sold_date_sk, RF010 -> s.ss_customer_sk
    row-size=16B cardinality=2.88M
 ====
@@ -6046,7 +6046,7 @@ PLAN-ROOT SINK
 |  |  row-size=125B cardinality=685.36K
 |  |
 |  |--26:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     row-size=39B cardinality=12
 |  |
 |  28:HASH JOIN [INNER JOIN]
@@ -6055,7 +6055,7 @@ PLAN-ROOT SINK
 |  |  row-size=86B cardinality=685.36K
 |  |
 |  |--23:SCAN HDFS [tpcds.item]
-|  |     partitions=1/1 files=1 size=4.82MB
+|  |     HDFS partitions=1/1 files=1 size=4.82MB
 |  |     row-size=54B cardinality=18.00K
 |  |
 |  27:HASH JOIN [INNER JOIN]
@@ -6064,12 +6064,12 @@ PLAN-ROOT SINK
 |  |  row-size=32B cardinality=685.36K
 |  |
 |  |--25:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: (d_year = 2000 OR (d_year = 1999 AND d_moy = 12) OR (d_year = 2001 AND d_moy = 1))
 |  |     row-size=12B cardinality=434
 |  |
 |  24:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF012 -> ss_store_sk, RF014 -> ss_item_sk, RF016 -> ss_sold_date_sk
 |     row-size=20B cardinality=2.88M
 |
@@ -6112,7 +6112,7 @@ PLAN-ROOT SINK
 |  |  row-size=125B cardinality=685.36K
 |  |
 |  |--03:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     row-size=39B cardinality=12
 |  |
 |  05:HASH JOIN [INNER JOIN]
@@ -6121,7 +6121,7 @@ PLAN-ROOT SINK
 |  |  row-size=86B cardinality=685.36K
 |  |
 |  |--00:SCAN HDFS [tpcds.item]
-|  |     partitions=1/1 files=1 size=4.82MB
+|  |     HDFS partitions=1/1 files=1 size=4.82MB
 |  |     row-size=54B cardinality=18.00K
 |  |
 |  04:HASH JOIN [INNER JOIN]
@@ -6130,12 +6130,12 @@ PLAN-ROOT SINK
 |  |  row-size=32B cardinality=685.36K
 |  |
 |  |--02:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: (d_year = 2000 OR (d_year = 1999 AND d_moy = 12) OR (d_year = 2001 AND d_moy = 1))
 |  |     row-size=12B cardinality=434
 |  |
 |  01:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF006 -> ss_store_sk, RF008 -> ss_item_sk, RF010 -> ss_sold_date_sk
 |     row-size=20B cardinality=2.88M
 |
@@ -6161,7 +6161,7 @@ PLAN-ROOT SINK
 |  row-size=125B cardinality=685.36K
 |
 |--16:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=39B cardinality=12
 |
 18:HASH JOIN [INNER JOIN]
@@ -6170,7 +6170,7 @@ PLAN-ROOT SINK
 |  row-size=86B cardinality=685.36K
 |
 |--13:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=54B cardinality=18.00K
 |
 17:HASH JOIN [INNER JOIN]
@@ -6179,12 +6179,12 @@ PLAN-ROOT SINK
 |  row-size=32B cardinality=685.36K
 |
 |--15:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: (d_year = 2000 OR (d_year = 1999 AND d_moy = 12) OR (d_year = 2001 AND d_moy = 1))
 |     row-size=12B cardinality=434
 |
 14:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_item_sk, RF004 -> ss_sold_date_sk
    row-size=20B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -6237,7 +6237,7 @@ PLAN-ROOT SINK
 |  |--49:EXCHANGE [BROADCAST]
 |  |  |
 |  |  26:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     row-size=39B cardinality=12
 |  |
 |  28:HASH JOIN [INNER JOIN, BROADCAST]
@@ -6248,7 +6248,7 @@ PLAN-ROOT SINK
 |  |--48:EXCHANGE [BROADCAST]
 |  |  |
 |  |  23:SCAN HDFS [tpcds.item]
-|  |     partitions=1/1 files=1 size=4.82MB
+|  |     HDFS partitions=1/1 files=1 size=4.82MB
 |  |     row-size=54B cardinality=18.00K
 |  |
 |  27:HASH JOIN [INNER JOIN, BROADCAST]
@@ -6259,12 +6259,12 @@ PLAN-ROOT SINK
 |  |--47:EXCHANGE [BROADCAST]
 |  |  |
 |  |  25:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: (d_year = 2000 OR (d_year = 1999 AND d_moy = 12) OR (d_year = 2001 AND d_moy = 1))
 |  |     row-size=12B cardinality=434
 |  |
 |  24:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF012 -> ss_store_sk, RF014 -> ss_item_sk, RF016 -> ss_sold_date_sk
 |     row-size=20B cardinality=2.88M
 |
@@ -6320,7 +6320,7 @@ PLAN-ROOT SINK
 |  |--43:EXCHANGE [BROADCAST]
 |  |  |
 |  |  03:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     row-size=39B cardinality=12
 |  |
 |  05:HASH JOIN [INNER JOIN, BROADCAST]
@@ -6331,7 +6331,7 @@ PLAN-ROOT SINK
 |  |--42:EXCHANGE [BROADCAST]
 |  |  |
 |  |  00:SCAN HDFS [tpcds.item]
-|  |     partitions=1/1 files=1 size=4.82MB
+|  |     HDFS partitions=1/1 files=1 size=4.82MB
 |  |     row-size=54B cardinality=18.00K
 |  |
 |  04:HASH JOIN [INNER JOIN, BROADCAST]
@@ -6342,12 +6342,12 @@ PLAN-ROOT SINK
 |  |--41:EXCHANGE [BROADCAST]
 |  |  |
 |  |  02:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: (d_year = 2000 OR (d_year = 1999 AND d_moy = 12) OR (d_year = 2001 AND d_moy = 1))
 |  |     row-size=12B cardinality=434
 |  |
 |  01:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF006 -> ss_store_sk, RF008 -> ss_item_sk, RF010 -> ss_sold_date_sk
 |     row-size=20B cardinality=2.88M
 |
@@ -6382,7 +6382,7 @@ PLAN-ROOT SINK
 |--38:EXCHANGE [BROADCAST]
 |  |
 |  16:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=39B cardinality=12
 |
 18:HASH JOIN [INNER JOIN, BROADCAST]
@@ -6393,7 +6393,7 @@ PLAN-ROOT SINK
 |--37:EXCHANGE [BROADCAST]
 |  |
 |  13:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=54B cardinality=18.00K
 |
 17:HASH JOIN [INNER JOIN, BROADCAST]
@@ -6404,12 +6404,12 @@ PLAN-ROOT SINK
 |--36:EXCHANGE [BROADCAST]
 |  |
 |  15:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: (d_year = 2000 OR (d_year = 1999 AND d_moy = 12) OR (d_year = 2001 AND d_moy = 1))
 |     row-size=12B cardinality=434
 |
 14:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_item_sk, RF004 -> ss_sold_date_sk
    row-size=20B cardinality=2.88M
 ---- PARALLELPLANS
@@ -6470,7 +6470,7 @@ PLAN-ROOT SINK
 |  |  49:EXCHANGE [BROADCAST]
 |  |  |
 |  |  26:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     row-size=39B cardinality=12
 |  |
 |  28:HASH JOIN [INNER JOIN, BROADCAST]
@@ -6485,7 +6485,7 @@ PLAN-ROOT SINK
 |  |  48:EXCHANGE [BROADCAST]
 |  |  |
 |  |  23:SCAN HDFS [tpcds.item]
-|  |     partitions=1/1 files=1 size=4.82MB
+|  |     HDFS partitions=1/1 files=1 size=4.82MB
 |  |     row-size=54B cardinality=18.00K
 |  |
 |  27:HASH JOIN [INNER JOIN, BROADCAST]
@@ -6500,12 +6500,12 @@ PLAN-ROOT SINK
 |  |  47:EXCHANGE [BROADCAST]
 |  |  |
 |  |  25:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: (d_year = 2000 OR (d_year = 1999 AND d_moy = 12) OR (d_year = 2001 AND d_moy = 1))
 |  |     row-size=12B cardinality=434
 |  |
 |  24:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF012 -> ss_store_sk, RF014 -> ss_item_sk, RF016 -> ss_sold_date_sk
 |     row-size=20B cardinality=2.88M
 |
@@ -6569,7 +6569,7 @@ PLAN-ROOT SINK
 |  |  43:EXCHANGE [BROADCAST]
 |  |  |
 |  |  03:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     row-size=39B cardinality=12
 |  |
 |  05:HASH JOIN [INNER JOIN, BROADCAST]
@@ -6584,7 +6584,7 @@ PLAN-ROOT SINK
 |  |  42:EXCHANGE [BROADCAST]
 |  |  |
 |  |  00:SCAN HDFS [tpcds.item]
-|  |     partitions=1/1 files=1 size=4.82MB
+|  |     HDFS partitions=1/1 files=1 size=4.82MB
 |  |     row-size=54B cardinality=18.00K
 |  |
 |  04:HASH JOIN [INNER JOIN, BROADCAST]
@@ -6599,12 +6599,12 @@ PLAN-ROOT SINK
 |  |  41:EXCHANGE [BROADCAST]
 |  |  |
 |  |  02:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: (d_year = 2000 OR (d_year = 1999 AND d_moy = 12) OR (d_year = 2001 AND d_moy = 1))
 |  |     row-size=12B cardinality=434
 |  |
 |  01:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF006 -> ss_store_sk, RF008 -> ss_item_sk, RF010 -> ss_sold_date_sk
 |     row-size=20B cardinality=2.88M
 |
@@ -6643,7 +6643,7 @@ PLAN-ROOT SINK
 |  38:EXCHANGE [BROADCAST]
 |  |
 |  16:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     row-size=39B cardinality=12
 |
 18:HASH JOIN [INNER JOIN, BROADCAST]
@@ -6658,7 +6658,7 @@ PLAN-ROOT SINK
 |  37:EXCHANGE [BROADCAST]
 |  |
 |  13:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     row-size=54B cardinality=18.00K
 |
 17:HASH JOIN [INNER JOIN, BROADCAST]
@@ -6673,12 +6673,12 @@ PLAN-ROOT SINK
 |  36:EXCHANGE [BROADCAST]
 |  |
 |  15:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: (d_year = 2000 OR (d_year = 1999 AND d_moy = 12) OR (d_year = 2001 AND d_moy = 1))
 |     row-size=12B cardinality=434
 |
 14:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF000 -> ss_store_sk, RF002 -> ss_item_sk, RF004 -> ss_sold_date_sk
    row-size=20B cardinality=2.88M
 ====
@@ -6745,7 +6745,7 @@ PLAN-ROOT SINK
 |  |  row-size=86B cardinality=3.30K
 |  |
 |  |--18:SCAN HDFS [tpcds.customer_address]
-|  |     partitions=1/1 files=1 size=5.25MB
+|  |     HDFS partitions=1/1 files=1 size=5.25MB
 |  |     predicates: ca_gmt_offset = -5
 |  |     row-size=8B cardinality=8.33K
 |  |
@@ -6755,7 +6755,7 @@ PLAN-ROOT SINK
 |  |  row-size=78B cardinality=17.06K
 |  |
 |  |--17:SCAN HDFS [tpcds.customer]
-|  |     partitions=1/1 files=1 size=12.60MB
+|  |     HDFS partitions=1/1 files=1 size=12.60MB
 |  |     runtime filters: RF012 -> c_current_addr_sk
 |  |     row-size=8B cardinality=100.00K
 |  |
@@ -6764,7 +6764,7 @@ PLAN-ROOT SINK
 |  |  row-size=70B cardinality=17.06K
 |  |
 |  |--15:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: s_gmt_offset = -5
 |  |     row-size=8B cardinality=12
 |  |
@@ -6774,7 +6774,7 @@ PLAN-ROOT SINK
 |  |  row-size=62B cardinality=17.06K
 |  |
 |  |--19:SCAN HDFS [tpcds.item]
-|  |     partitions=1/1 files=1 size=4.82MB
+|  |     HDFS partitions=1/1 files=1 size=4.82MB
 |  |     predicates: i_category = 'Books'
 |  |     row-size=26B cardinality=1.80K
 |  |
@@ -6784,12 +6784,12 @@ PLAN-ROOT SINK
 |  |  row-size=36B cardinality=170.55K
 |  |
 |  |--16:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: d_year = 2000, d_moy = 11
 |  |     row-size=12B cardinality=108
 |  |
 |  14:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF020 -> ss_sold_date_sk, RF018 -> ss_item_sk, RF014 -> ss_customer_sk
 |     row-size=24B cardinality=2.88M
 |
@@ -6803,7 +6803,7 @@ PLAN-ROOT SINK
 |  row-size=133B cardinality=3.28K
 |
 |--05:SCAN HDFS [tpcds.customer_address]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     predicates: ca_gmt_offset = -5
 |     row-size=8B cardinality=8.33K
 |
@@ -6813,7 +6813,7 @@ PLAN-ROOT SINK
 |  row-size=125B cardinality=16.94K
 |
 |--04:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF000 -> c_current_addr_sk
 |     row-size=8B cardinality=100.00K
 |
@@ -6823,7 +6823,7 @@ PLAN-ROOT SINK
 |  row-size=117B cardinality=16.94K
 |
 |--01:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: s_gmt_offset = -5
 |     row-size=8B cardinality=12
 |
@@ -6833,7 +6833,7 @@ PLAN-ROOT SINK
 |  row-size=109B cardinality=16.94K
 |
 |--02:SCAN HDFS [tpcds.promotion]
-|     partitions=1/1 files=1 size=36.36KB
+|     HDFS partitions=1/1 files=1 size=36.36KB
 |     predicates: (p_channel_dmail = 'Y' OR p_channel_email = 'Y' OR p_channel_tv = 'Y')
 |     row-size=43B cardinality=300
 |
@@ -6843,7 +6843,7 @@ PLAN-ROOT SINK
 |  row-size=66B cardinality=17.06K
 |
 |--06:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: i_category = 'Books'
 |     row-size=26B cardinality=1.80K
 |
@@ -6853,12 +6853,12 @@ PLAN-ROOT SINK
 |  row-size=40B cardinality=170.55K
 |
 |--03:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 2000, d_moy = 11
 |     row-size=12B cardinality=108
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF010 -> ss_sold_date_sk, RF008 -> ss_item_sk, RF006 -> ss_promo_sk, RF002 -> ss_customer_sk, RF004 -> ss_store_sk
    row-size=28B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -6893,7 +6893,7 @@ PLAN-ROOT SINK
 |  |--42:EXCHANGE [BROADCAST]
 |  |  |
 |  |  18:SCAN HDFS [tpcds.customer_address]
-|  |     partitions=1/1 files=1 size=5.25MB
+|  |     HDFS partitions=1/1 files=1 size=5.25MB
 |  |     predicates: ca_gmt_offset = -5
 |  |     row-size=8B cardinality=8.33K
 |  |
@@ -6905,7 +6905,7 @@ PLAN-ROOT SINK
 |  |--41:EXCHANGE [HASH(c_customer_sk)]
 |  |  |
 |  |  17:SCAN HDFS [tpcds.customer]
-|  |     partitions=1/1 files=1 size=12.60MB
+|  |     HDFS partitions=1/1 files=1 size=12.60MB
 |  |     runtime filters: RF012 -> c_current_addr_sk
 |  |     row-size=8B cardinality=100.00K
 |  |
@@ -6918,7 +6918,7 @@ PLAN-ROOT SINK
 |  |--39:EXCHANGE [BROADCAST]
 |  |  |
 |  |  15:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: s_gmt_offset = -5
 |  |     row-size=8B cardinality=12
 |  |
@@ -6930,7 +6930,7 @@ PLAN-ROOT SINK
 |  |--38:EXCHANGE [BROADCAST]
 |  |  |
 |  |  19:SCAN HDFS [tpcds.item]
-|  |     partitions=1/1 files=1 size=4.82MB
+|  |     HDFS partitions=1/1 files=1 size=4.82MB
 |  |     predicates: i_category = 'Books'
 |  |     row-size=26B cardinality=1.80K
 |  |
@@ -6942,12 +6942,12 @@ PLAN-ROOT SINK
 |  |--37:EXCHANGE [BROADCAST]
 |  |  |
 |  |  16:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: d_year = 2000, d_moy = 11
 |  |     row-size=12B cardinality=108
 |  |
 |  14:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF020 -> ss_sold_date_sk, RF018 -> ss_item_sk, RF014 -> ss_customer_sk
 |     row-size=24B cardinality=2.88M
 |
@@ -6969,7 +6969,7 @@ PLAN-ROOT SINK
 |--34:EXCHANGE [BROADCAST]
 |  |
 |  05:SCAN HDFS [tpcds.customer_address]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     predicates: ca_gmt_offset = -5
 |     row-size=8B cardinality=8.33K
 |
@@ -6981,7 +6981,7 @@ PLAN-ROOT SINK
 |--33:EXCHANGE [HASH(c_customer_sk)]
 |  |
 |  04:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF000 -> c_current_addr_sk
 |     row-size=8B cardinality=100.00K
 |
@@ -6995,7 +6995,7 @@ PLAN-ROOT SINK
 |--31:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: s_gmt_offset = -5
 |     row-size=8B cardinality=12
 |
@@ -7007,7 +7007,7 @@ PLAN-ROOT SINK
 |--30:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.promotion]
-|     partitions=1/1 files=1 size=36.36KB
+|     HDFS partitions=1/1 files=1 size=36.36KB
 |     predicates: (p_channel_dmail = 'Y' OR p_channel_email = 'Y' OR p_channel_tv = 'Y')
 |     row-size=43B cardinality=300
 |
@@ -7019,7 +7019,7 @@ PLAN-ROOT SINK
 |--29:EXCHANGE [BROADCAST]
 |  |
 |  06:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: i_category = 'Books'
 |     row-size=26B cardinality=1.80K
 |
@@ -7031,12 +7031,12 @@ PLAN-ROOT SINK
 |--28:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 2000, d_moy = 11
 |     row-size=12B cardinality=108
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF010 -> ss_sold_date_sk, RF008 -> ss_item_sk, RF006 -> ss_promo_sk, RF002 -> ss_customer_sk, RF004 -> ss_store_sk
    row-size=28B cardinality=2.88M
 ---- PARALLELPLANS
@@ -7079,7 +7079,7 @@ PLAN-ROOT SINK
 |  |  42:EXCHANGE [BROADCAST]
 |  |  |
 |  |  18:SCAN HDFS [tpcds.customer_address]
-|  |     partitions=1/1 files=1 size=5.25MB
+|  |     HDFS partitions=1/1 files=1 size=5.25MB
 |  |     predicates: ca_gmt_offset = -5
 |  |     row-size=8B cardinality=8.33K
 |  |
@@ -7095,7 +7095,7 @@ PLAN-ROOT SINK
 |  |  41:EXCHANGE [HASH(c_customer_sk)]
 |  |  |
 |  |  17:SCAN HDFS [tpcds.customer]
-|  |     partitions=1/1 files=1 size=12.60MB
+|  |     HDFS partitions=1/1 files=1 size=12.60MB
 |  |     runtime filters: RF012 -> c_current_addr_sk
 |  |     row-size=8B cardinality=100.00K
 |  |
@@ -7112,7 +7112,7 @@ PLAN-ROOT SINK
 |  |  39:EXCHANGE [BROADCAST]
 |  |  |
 |  |  15:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: s_gmt_offset = -5
 |  |     row-size=8B cardinality=12
 |  |
@@ -7128,7 +7128,7 @@ PLAN-ROOT SINK
 |  |  38:EXCHANGE [BROADCAST]
 |  |  |
 |  |  19:SCAN HDFS [tpcds.item]
-|  |     partitions=1/1 files=1 size=4.82MB
+|  |     HDFS partitions=1/1 files=1 size=4.82MB
 |  |     predicates: i_category = 'Books'
 |  |     row-size=26B cardinality=1.80K
 |  |
@@ -7144,12 +7144,12 @@ PLAN-ROOT SINK
 |  |  37:EXCHANGE [BROADCAST]
 |  |  |
 |  |  16:SCAN HDFS [tpcds.date_dim]
-|  |     partitions=1/1 files=1 size=9.84MB
+|  |     HDFS partitions=1/1 files=1 size=9.84MB
 |  |     predicates: d_year = 2000, d_moy = 11
 |  |     row-size=12B cardinality=108
 |  |
 |  14:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF020 -> ss_sold_date_sk, RF018 -> ss_item_sk, RF014 -> ss_customer_sk
 |     row-size=24B cardinality=2.88M
 |
@@ -7175,7 +7175,7 @@ PLAN-ROOT SINK
 |  34:EXCHANGE [BROADCAST]
 |  |
 |  05:SCAN HDFS [tpcds.customer_address]
-|     partitions=1/1 files=1 size=5.25MB
+|     HDFS partitions=1/1 files=1 size=5.25MB
 |     predicates: ca_gmt_offset = -5
 |     row-size=8B cardinality=8.33K
 |
@@ -7191,7 +7191,7 @@ PLAN-ROOT SINK
 |  33:EXCHANGE [HASH(c_customer_sk)]
 |  |
 |  04:SCAN HDFS [tpcds.customer]
-|     partitions=1/1 files=1 size=12.60MB
+|     HDFS partitions=1/1 files=1 size=12.60MB
 |     runtime filters: RF000 -> c_current_addr_sk
 |     row-size=8B cardinality=100.00K
 |
@@ -7209,7 +7209,7 @@ PLAN-ROOT SINK
 |  31:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: s_gmt_offset = -5
 |     row-size=8B cardinality=12
 |
@@ -7225,7 +7225,7 @@ PLAN-ROOT SINK
 |  30:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.promotion]
-|     partitions=1/1 files=1 size=36.36KB
+|     HDFS partitions=1/1 files=1 size=36.36KB
 |     predicates: (p_channel_dmail = 'Y' OR p_channel_email = 'Y' OR p_channel_tv = 'Y')
 |     row-size=43B cardinality=300
 |
@@ -7241,7 +7241,7 @@ PLAN-ROOT SINK
 |  29:EXCHANGE [BROADCAST]
 |  |
 |  06:SCAN HDFS [tpcds.item]
-|     partitions=1/1 files=1 size=4.82MB
+|     HDFS partitions=1/1 files=1 size=4.82MB
 |     predicates: i_category = 'Books'
 |     row-size=26B cardinality=1.80K
 |
@@ -7257,12 +7257,12 @@ PLAN-ROOT SINK
 |  28:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.date_dim]
-|     partitions=1/1 files=1 size=9.84MB
+|     HDFS partitions=1/1 files=1 size=9.84MB
 |     predicates: d_year = 2000, d_moy = 11
 |     row-size=12B cardinality=108
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF010 -> ss_sold_date_sk, RF008 -> ss_item_sk, RF006 -> ss_promo_sk, RF002 -> ss_customer_sk, RF004 -> ss_store_sk
    row-size=28B cardinality=2.88M
 ====
@@ -7374,7 +7374,7 @@ PLAN-ROOT SINK
 |  |  row-size=56B cardinality=2.27K
 |  |
 |  |--59:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -7383,7 +7383,7 @@ PLAN-ROOT SINK
 |  |  row-size=36B cardinality=6.82K
 |  |
 |  |--57:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -7393,12 +7393,12 @@ PLAN-ROOT SINK
 |  |  row-size=24B cardinality=69.82K
 |  |
 |  |--58:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 12, time_dim.t_minute < 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  56:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF046 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -7414,7 +7414,7 @@ PLAN-ROOT SINK
 |  |  row-size=56B cardinality=2.27K
 |  |
 |  |--51:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -7423,7 +7423,7 @@ PLAN-ROOT SINK
 |  |  row-size=36B cardinality=6.82K
 |  |
 |  |--49:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -7433,12 +7433,12 @@ PLAN-ROOT SINK
 |  |  row-size=24B cardinality=69.82K
 |  |
 |  |--50:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 11, time_dim.t_minute >= 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  48:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF040 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -7454,7 +7454,7 @@ PLAN-ROOT SINK
 |  |  row-size=56B cardinality=2.27K
 |  |
 |  |--43:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -7463,7 +7463,7 @@ PLAN-ROOT SINK
 |  |  row-size=36B cardinality=6.82K
 |  |
 |  |--41:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -7473,12 +7473,12 @@ PLAN-ROOT SINK
 |  |  row-size=24B cardinality=69.82K
 |  |
 |  |--42:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 11, time_dim.t_minute < 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  40:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF034 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -7494,7 +7494,7 @@ PLAN-ROOT SINK
 |  |  row-size=56B cardinality=2.27K
 |  |
 |  |--35:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -7503,7 +7503,7 @@ PLAN-ROOT SINK
 |  |  row-size=36B cardinality=6.82K
 |  |
 |  |--33:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -7513,12 +7513,12 @@ PLAN-ROOT SINK
 |  |  row-size=24B cardinality=69.82K
 |  |
 |  |--34:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 10, time_dim.t_minute >= 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  32:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF028 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -7534,7 +7534,7 @@ PLAN-ROOT SINK
 |  |  row-size=56B cardinality=2.27K
 |  |
 |  |--27:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -7543,7 +7543,7 @@ PLAN-ROOT SINK
 |  |  row-size=36B cardinality=6.82K
 |  |
 |  |--25:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -7553,12 +7553,12 @@ PLAN-ROOT SINK
 |  |  row-size=24B cardinality=69.82K
 |  |
 |  |--26:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 10, time_dim.t_minute < 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  24:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF022 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -7574,7 +7574,7 @@ PLAN-ROOT SINK
 |  |  row-size=56B cardinality=2.27K
 |  |
 |  |--19:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -7583,7 +7583,7 @@ PLAN-ROOT SINK
 |  |  row-size=36B cardinality=6.82K
 |  |
 |  |--17:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -7593,12 +7593,12 @@ PLAN-ROOT SINK
 |  |  row-size=24B cardinality=69.82K
 |  |
 |  |--18:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 9, time_dim.t_minute >= 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  16:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF016 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -7614,7 +7614,7 @@ PLAN-ROOT SINK
 |  |  row-size=56B cardinality=2.27K
 |  |
 |  |--11:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -7624,7 +7624,7 @@ PLAN-ROOT SINK
 |  |  row-size=36B cardinality=6.82K
 |  |
 |  |--09:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -7634,12 +7634,12 @@ PLAN-ROOT SINK
 |  |  row-size=24B cardinality=69.82K
 |  |
 |  |--10:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 9, time_dim.t_minute < 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  08:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF010 -> ss_sold_time_sk, RF008 -> ss_hdemo_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -7652,7 +7652,7 @@ PLAN-ROOT SINK
 |  row-size=56B cardinality=2.27K
 |
 |--03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_store_name = 'ese'
 |     row-size=20B cardinality=2
 |
@@ -7662,7 +7662,7 @@ PLAN-ROOT SINK
 |  row-size=36B cardinality=6.82K
 |
 |--01:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |     row-size=12B cardinality=720
 |
@@ -7672,12 +7672,12 @@ PLAN-ROOT SINK
 |  row-size=24B cardinality=69.82K
 |
 |--02:SCAN HDFS [tpcds.time_dim]
-|     partitions=1/1 files=1 size=4.87MB
+|     HDFS partitions=1/1 files=1 size=4.87MB
 |     predicates: time_dim.t_hour = 8, time_dim.t_minute >= 30
 |     row-size=12B cardinality=1.14K
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF004 -> ss_sold_time_sk, RF002 -> ss_hdemo_sk
    row-size=12B cardinality=2.88M
 ---- DISTRIBUTEDPLAN
@@ -7707,7 +7707,7 @@ PLAN-ROOT SINK
 |  |--114:EXCHANGE [BROADCAST]
 |  |  |
 |  |  59:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -7718,7 +7718,7 @@ PLAN-ROOT SINK
 |  |--113:EXCHANGE [BROADCAST]
 |  |  |
 |  |  57:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -7730,12 +7730,12 @@ PLAN-ROOT SINK
 |  |--112:EXCHANGE [BROADCAST]
 |  |  |
 |  |  58:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 12, time_dim.t_minute < 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  56:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF046 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -7761,7 +7761,7 @@ PLAN-ROOT SINK
 |  |--108:EXCHANGE [BROADCAST]
 |  |  |
 |  |  51:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -7772,7 +7772,7 @@ PLAN-ROOT SINK
 |  |--107:EXCHANGE [BROADCAST]
 |  |  |
 |  |  49:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -7784,12 +7784,12 @@ PLAN-ROOT SINK
 |  |--106:EXCHANGE [BROADCAST]
 |  |  |
 |  |  50:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 11, time_dim.t_minute >= 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  48:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF040 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -7815,7 +7815,7 @@ PLAN-ROOT SINK
 |  |--102:EXCHANGE [BROADCAST]
 |  |  |
 |  |  43:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -7826,7 +7826,7 @@ PLAN-ROOT SINK
 |  |--101:EXCHANGE [BROADCAST]
 |  |  |
 |  |  41:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -7838,12 +7838,12 @@ PLAN-ROOT SINK
 |  |--100:EXCHANGE [BROADCAST]
 |  |  |
 |  |  42:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 11, time_dim.t_minute < 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  40:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF034 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -7869,7 +7869,7 @@ PLAN-ROOT SINK
 |  |--96:EXCHANGE [BROADCAST]
 |  |  |
 |  |  35:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -7880,7 +7880,7 @@ PLAN-ROOT SINK
 |  |--95:EXCHANGE [BROADCAST]
 |  |  |
 |  |  33:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -7892,12 +7892,12 @@ PLAN-ROOT SINK
 |  |--94:EXCHANGE [BROADCAST]
 |  |  |
 |  |  34:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 10, time_dim.t_minute >= 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  32:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF028 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -7923,7 +7923,7 @@ PLAN-ROOT SINK
 |  |--90:EXCHANGE [BROADCAST]
 |  |  |
 |  |  27:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -7934,7 +7934,7 @@ PLAN-ROOT SINK
 |  |--89:EXCHANGE [BROADCAST]
 |  |  |
 |  |  25:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -7946,12 +7946,12 @@ PLAN-ROOT SINK
 |  |--88:EXCHANGE [BROADCAST]
 |  |  |
 |  |  26:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 10, time_dim.t_minute < 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  24:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF022 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -7977,7 +7977,7 @@ PLAN-ROOT SINK
 |  |--84:EXCHANGE [BROADCAST]
 |  |  |
 |  |  19:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -7988,7 +7988,7 @@ PLAN-ROOT SINK
 |  |--83:EXCHANGE [BROADCAST]
 |  |  |
 |  |  17:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -8000,12 +8000,12 @@ PLAN-ROOT SINK
 |  |--82:EXCHANGE [BROADCAST]
 |  |  |
 |  |  18:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 9, time_dim.t_minute >= 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  16:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF016 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -8031,7 +8031,7 @@ PLAN-ROOT SINK
 |  |--78:EXCHANGE [BROADCAST]
 |  |  |
 |  |  11:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -8043,7 +8043,7 @@ PLAN-ROOT SINK
 |  |--77:EXCHANGE [BROADCAST]
 |  |  |
 |  |  09:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -8055,12 +8055,12 @@ PLAN-ROOT SINK
 |  |--76:EXCHANGE [BROADCAST]
 |  |  |
 |  |  10:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 9, time_dim.t_minute < 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  08:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF010 -> ss_sold_time_sk, RF008 -> ss_hdemo_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -8081,7 +8081,7 @@ PLAN-ROOT SINK
 |--73:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_store_name = 'ese'
 |     row-size=20B cardinality=2
 |
@@ -8093,7 +8093,7 @@ PLAN-ROOT SINK
 |--72:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |     row-size=12B cardinality=720
 |
@@ -8105,12 +8105,12 @@ PLAN-ROOT SINK
 |--71:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.time_dim]
-|     partitions=1/1 files=1 size=4.87MB
+|     HDFS partitions=1/1 files=1 size=4.87MB
 |     predicates: time_dim.t_hour = 8, time_dim.t_minute >= 30
 |     row-size=12B cardinality=1.14K
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF004 -> ss_sold_time_sk, RF002 -> ss_hdemo_sk
    row-size=12B cardinality=2.88M
 ---- PARALLELPLANS
@@ -8148,7 +8148,7 @@ PLAN-ROOT SINK
 |  |  114:EXCHANGE [BROADCAST]
 |  |  |
 |  |  59:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -8163,7 +8163,7 @@ PLAN-ROOT SINK
 |  |  113:EXCHANGE [BROADCAST]
 |  |  |
 |  |  57:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -8179,12 +8179,12 @@ PLAN-ROOT SINK
 |  |  112:EXCHANGE [BROADCAST]
 |  |  |
 |  |  58:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 12, time_dim.t_minute < 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  56:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF046 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -8218,7 +8218,7 @@ PLAN-ROOT SINK
 |  |  108:EXCHANGE [BROADCAST]
 |  |  |
 |  |  51:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -8233,7 +8233,7 @@ PLAN-ROOT SINK
 |  |  107:EXCHANGE [BROADCAST]
 |  |  |
 |  |  49:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -8249,12 +8249,12 @@ PLAN-ROOT SINK
 |  |  106:EXCHANGE [BROADCAST]
 |  |  |
 |  |  50:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 11, time_dim.t_minute >= 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  48:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF040 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -8288,7 +8288,7 @@ PLAN-ROOT SINK
 |  |  102:EXCHANGE [BROADCAST]
 |  |  |
 |  |  43:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -8303,7 +8303,7 @@ PLAN-ROOT SINK
 |  |  101:EXCHANGE [BROADCAST]
 |  |  |
 |  |  41:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -8319,12 +8319,12 @@ PLAN-ROOT SINK
 |  |  100:EXCHANGE [BROADCAST]
 |  |  |
 |  |  42:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 11, time_dim.t_minute < 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  40:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF034 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -8358,7 +8358,7 @@ PLAN-ROOT SINK
 |  |  96:EXCHANGE [BROADCAST]
 |  |  |
 |  |  35:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -8373,7 +8373,7 @@ PLAN-ROOT SINK
 |  |  95:EXCHANGE [BROADCAST]
 |  |  |
 |  |  33:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -8389,12 +8389,12 @@ PLAN-ROOT SINK
 |  |  94:EXCHANGE [BROADCAST]
 |  |  |
 |  |  34:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 10, time_dim.t_minute >= 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  32:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF028 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -8428,7 +8428,7 @@ PLAN-ROOT SINK
 |  |  90:EXCHANGE [BROADCAST]
 |  |  |
 |  |  27:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -8443,7 +8443,7 @@ PLAN-ROOT SINK
 |  |  89:EXCHANGE [BROADCAST]
 |  |  |
 |  |  25:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -8459,12 +8459,12 @@ PLAN-ROOT SINK
 |  |  88:EXCHANGE [BROADCAST]
 |  |  |
 |  |  26:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 10, time_dim.t_minute < 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  24:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF022 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -8498,7 +8498,7 @@ PLAN-ROOT SINK
 |  |  84:EXCHANGE [BROADCAST]
 |  |  |
 |  |  19:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -8513,7 +8513,7 @@ PLAN-ROOT SINK
 |  |  83:EXCHANGE [BROADCAST]
 |  |  |
 |  |  17:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -8529,12 +8529,12 @@ PLAN-ROOT SINK
 |  |  82:EXCHANGE [BROADCAST]
 |  |  |
 |  |  18:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 9, time_dim.t_minute >= 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  16:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF016 -> ss_sold_time_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -8568,7 +8568,7 @@ PLAN-ROOT SINK
 |  |  78:EXCHANGE [BROADCAST]
 |  |  |
 |  |  11:SCAN HDFS [tpcds.store]
-|  |     partitions=1/1 files=1 size=3.08KB
+|  |     HDFS partitions=1/1 files=1 size=3.08KB
 |  |     predicates: store.s_store_name = 'ese'
 |  |     row-size=20B cardinality=2
 |  |
@@ -8584,7 +8584,7 @@ PLAN-ROOT SINK
 |  |  77:EXCHANGE [BROADCAST]
 |  |  |
 |  |  09:SCAN HDFS [tpcds.household_demographics]
-|  |     partitions=1/1 files=1 size=148.10KB
+|  |     HDFS partitions=1/1 files=1 size=148.10KB
 |  |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |  |     row-size=12B cardinality=720
 |  |
@@ -8600,12 +8600,12 @@ PLAN-ROOT SINK
 |  |  76:EXCHANGE [BROADCAST]
 |  |  |
 |  |  10:SCAN HDFS [tpcds.time_dim]
-|  |     partitions=1/1 files=1 size=4.87MB
+|  |     HDFS partitions=1/1 files=1 size=4.87MB
 |  |     predicates: time_dim.t_hour = 9, time_dim.t_minute < 30
 |  |     row-size=12B cardinality=1.14K
 |  |
 |  08:SCAN HDFS [tpcds.store_sales]
-|     partitions=1824/1824 files=1824 size=346.60MB
+|     HDFS partitions=1824/1824 files=1824 size=346.60MB
 |     runtime filters: RF010 -> ss_sold_time_sk, RF008 -> ss_hdemo_sk
 |     row-size=12B cardinality=2.88M
 |
@@ -8630,7 +8630,7 @@ PLAN-ROOT SINK
 |  73:EXCHANGE [BROADCAST]
 |  |
 |  03:SCAN HDFS [tpcds.store]
-|     partitions=1/1 files=1 size=3.08KB
+|     HDFS partitions=1/1 files=1 size=3.08KB
 |     predicates: store.s_store_name = 'ese'
 |     row-size=20B cardinality=2
 |
@@ -8646,7 +8646,7 @@ PLAN-ROOT SINK
 |  72:EXCHANGE [BROADCAST]
 |  |
 |  01:SCAN HDFS [tpcds.household_demographics]
-|     partitions=1/1 files=1 size=148.10KB
+|     HDFS partitions=1/1 files=1 size=148.10KB
 |     predicates: ((household_demographics.hd_dep_count = 1 AND household_demographics.hd_vehicle_count <= 3) OR (household_demographics.hd_dep_count = 0 AND household_demographics.hd_vehicle_count <= 2) OR (household_demographics.hd_dep_count = 2 AND household_demographics.hd_vehicle_count <= 4))
 |     row-size=12B cardinality=720
 |
@@ -8662,12 +8662,12 @@ PLAN-ROOT SINK
 |  71:EXCHANGE [BROADCAST]
 |  |
 |  02:SCAN HDFS [tpcds.time_dim]
-|     partitions=1/1 files=1 size=4.87MB
+|     HDFS partitions=1/1 files=1 size=4.87MB
 |     predicates: time_dim.t_hour = 8, time_dim.t_minute >= 30
 |     row-size=12B cardinality=1.14K
 |
 00:SCAN HDFS [tpcds.store_sales]
-   partitions=1824/1824 files=1824 size=346.60MB
+   HDFS partitions=1824/1824 files=1824 size=346.60MB
    runtime filters: RF004 -> ss_sold_time_sk, RF002 -> ss_hdemo_sk
    row-size=12B cardinality=2.88M
 ====


[impala] 03/07: IMPALA-8901: Fix # links on /catalog page.

Posted by bo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

boroknagyz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git

commit 152a76479f61da4ccb58ab00f29df7c6e7d99a45
Author: Anurag Mantripragada <an...@gmail.com>
AuthorDate: Tue Aug 27 21:26:54 2019 -0700

    IMPALA-8901: Fix # links on /catalog page.
    
    After IMPALA-7935, the database links on the top of /catalog page
    that use # links to jump to the part of the page corresponding to
    the particular database is broken because the id is ommitted. This is
    fixed by moving id to a tag which doesn't change if local catalog is
    turned on.
    
    Testing:
    Manually tested the links are working in both local catalog mode and
    V1 mode.
    
    Change-Id: I895742dcaeaf71ecf097b0fec69cc19a3b6f86f4
    Reviewed-on: http://gerrit.cloudera.org:8080/14153
    Reviewed-by: Thomas Tauber-Marshall <tm...@cloudera.com>
    Tested-by: Impala Public Jenkins <im...@cloudera.com>
---
 www/catalog.tmpl | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/www/catalog.tmpl b/www/catalog.tmpl
index 20d9b75..8faf5c1 100644
--- a/www/catalog.tmpl
+++ b/www/catalog.tmpl
@@ -166,9 +166,9 @@ under the License.
 <div class="panel panel-info">
   <div class="panel-heading">
   {{^use_local_catalog}}
-    <a href='catalog_object?object_type=DATABASE&object_name={{name}}' id='{{name}}'>
+    <a href='catalog_object?object_type=DATABASE&object_name={{name}}'>
   {{/use_local_catalog}}
-      <h2 class="panel-title">{{name}}
+      <h2 class="panel-title" id='{{name}}'>{{name}}
       <span class="pull-right">{{num_tables}} table(s)</span></h2>
   {{^use_local_catalog}}
     </a>


[impala] 02/07: IMPALA-8579: Ignore trivial alter table/partition events.

Posted by bo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

boroknagyz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git

commit 08ecb6d28cd7794a654f66fe41bb8ae727bc1a3e
Author: Anurag Mantripragada <an...@gmail.com>
AuthorDate: Wed Aug 7 19:09:53 2019 -0700

    IMPALA-8579: Ignore trivial alter table/partition events.
    
    Hive generates certain trivial alter events for eg: change only
    "transient_lastDdlTime". This is seen in the alter events
    accompanying an INSERT event. MetastoreEventProcessor should ignore
    such events as these trivial properties are not used by Impala
    and they cause unnecessary invalidates/refreshes. This change will
    also potentially reduce the likelihood of IMPALA-8877 as back to back
    invalidates after INSERT operations are avoided.
    
    Testing:
    Added tests respectively to testPartitionEvents() and
    testAlterTableEvent() in MetastoreEventProcessorTest class.
    
    Change-Id: I01a59d5170accc014f76f14eb526d96ddcf61f76
    Reviewed-on: http://gerrit.cloudera.org:8080/14145
    Reviewed-by: Impala Public Jenkins <im...@cloudera.com>
    Tested-by: Impala Public Jenkins <im...@cloudera.com>
---
 .../impala/catalog/events/MetastoreEvents.java     | 91 ++++++++++++++++++++++
 .../events/MetastoreEventsProcessorTest.java       | 59 ++++++++++++++
 2 files changed, 150 insertions(+)

diff --git a/fe/src/main/java/org/apache/impala/catalog/events/MetastoreEvents.java b/fe/src/main/java/org/apache/impala/catalog/events/MetastoreEvents.java
index 51d9ac2..6f23bf8 100644
--- a/fe/src/main/java/org/apache/impala/catalog/events/MetastoreEvents.java
+++ b/fe/src/main/java/org/apache/impala/catalog/events/MetastoreEvents.java
@@ -19,6 +19,7 @@ package org.apache.impala.catalog.events;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
 import java.util.ArrayList;
@@ -857,6 +858,7 @@ public class MetastoreEvents {
    * MetastoreEvent for ALTER_TABLE event type
    */
   public static class AlterTableEvent extends TableInvalidatingEvent {
+    protected org.apache.hadoop.hive.metastore.api.Table tableBefore_;
     // the table object after alter operation, as parsed from the NotificationEvent
     protected org.apache.hadoop.hive.metastore.api.Table tableAfter_;
     // true if this alter event was due to a rename operation
@@ -882,6 +884,7 @@ public class MetastoreEvents {
       try {
         msTbl_ = Preconditions.checkNotNull(alterTableMessage.getTableObjBefore());
         tableAfter_ = Preconditions.checkNotNull(alterTableMessage.getTableObjAfter());
+        tableBefore_ = Preconditions.checkNotNull(alterTableMessage.getTableObjBefore());
       } catch (Exception e) {
         throw new MetastoreNotificationException(
             debugString("Unable to parse the alter table message"), e);
@@ -935,6 +938,13 @@ public class MetastoreEvents {
             + "update is already present in catalog.");
         return;
       }
+      // Ignore the event if this is a trivial event. See javadoc for
+      // canBeSkipped() for examples.
+      if (canBeSkipped()) {
+        infoLog("Not processing this event as it only modifies some table parameters "
+            + "which can be ignored.");
+        return;
+      }
       // in case of table level alters from external systems it is better to do a full
       // invalidate  eg. this could be due to as simple as adding a new parameter or a
       // full blown adding  or changing column type
@@ -1004,6 +1014,20 @@ public class MetastoreEvents {
       return false;
     }
 
+    @Override
+    protected boolean canBeSkipped() {
+      // Certain alter events just modify some parameters such as
+      // "transient_lastDdlTime" in Hive. For eg: the alter table event generated
+      // along with insert events. Check if the alter table event is such a trivial
+      // event by setting those parameters equal before and after the event and
+      // comparing the objects.
+
+      // Avoid modifying the object from event.
+      org.apache.hadoop.hive.metastore.api.Table tblAfter = tableAfter_.deepCopy();
+      setTrivialParameters(tableBefore_.getParameters(), tblAfter.getParameters());
+      return tblAfter.equals(tableBefore_);
+    }
+
     private String qualify(TTableName tTableName) {
       return new TableName(tTableName.db_name, tTableName.table_name).toString();
     }
@@ -1315,6 +1339,13 @@ public class MetastoreEvents {
         return;
       }
 
+      // Skip if it's only a change in parameters by Hive, which can be ignored.
+      if (canBeSkipped()) {
+        infoLog("Not processing this event as it only modifies some "
+            + "parameters which can be ignored.");
+        return;
+      }
+
       if (invalidateCatalogTable()) {
         infoLog("Table {} is invalidated", getFullyQualifiedTblName());
       } else {
@@ -1328,6 +1359,36 @@ public class MetastoreEvents {
       if (params == null) return defaultVal;
       return params.getOrDefault(key, defaultVal);
     }
+
+    /**
+     * Returns a list of parameters that are set by Hive for tables/partitions that can be
+     * ignored to determine if the alter table/partition event is a trivial one.
+     */
+    static final List<String> parametersToIgnore = new ImmutableList.Builder<String>()
+        .add("transient_lastDdlTime")
+        .add("totalSize")
+        .add("numFilesErasureCoded")
+        .add("numFiles")
+        .build();
+
+    /**
+     * Util method that sets the parameters that can be ignored equal before and after
+     * event.
+     */
+     static void setTrivialParameters(Map<String, String> parametersBefore,
+        Map<String, String> parametersAfter) {
+      for (String parameter: parametersToIgnore) {
+        parametersAfter.put(parameter,
+            parametersBefore.get(parameter));
+      }
+    }
+
+    /**
+     * Hive generates certain trivial alter events for eg: change only
+     * "transient_lastDdlTime". This method returns true if the alter partition event is
+     * such a trivial event.
+     */
+    protected abstract boolean canBeSkipped();
   }
 
   public static class AddPartitionEvent extends TableInvalidatingEvent {
@@ -1436,6 +1497,9 @@ public class MetastoreEvents {
             e.getMessage());
       }
     }
+
+    @Override
+    protected boolean canBeSkipped() { return false; }
   }
 
   public static class AlterPartitionEvent extends TableInvalidatingEvent {
@@ -1474,6 +1538,15 @@ public class MetastoreEvents {
         infoLog("Not processing the event as it is a self-event");
         return;
       }
+
+      // Ignore the event if this is a trivial event. See javadoc for
+      // isTrivialAlterPartitionEvent() for examples.
+      if (canBeSkipped()) {
+        infoLog("Not processing this event as it only modifies some partition "
+            + "parameters which can be ignored.");
+        return;
+      }
+
       // Reload the whole table if it's a transactional table.
       if (AcidUtils.isTransactionalTable(msTbl_.getParameters())) {
         reloadTableFromCatalog("ALTER_PARTITION");
@@ -1511,6 +1584,21 @@ public class MetastoreEvents {
     }
 
     @Override
+    protected boolean canBeSkipped() {
+      // Certain alter events just modify some parameters such as
+      // "transient_lastDdlTime" in Hive. For eg: the alter table event generated
+      // along with insert events. Check if the alter table event is such a trivial
+      // event by setting those parameters equal before and after the event and
+      // comparing the objects.
+
+      // Avoid modifying the object from event.
+      Partition afterPartition = partitionAfter_.deepCopy();
+      setTrivialParameters(partitionBefore_.getParameters(),
+          afterPartition.getParameters());
+      return afterPartition.equals(partitionBefore_);
+    }
+
+    @Override
     protected void initSelfEventIdentifiersFromEvent() {
       versionNumberFromEvent_ = Long.parseLong(getStringProperty(
           partitionAfter_.getParameters(),
@@ -1611,6 +1699,9 @@ public class MetastoreEvents {
     protected void initSelfEventIdentifiersFromEvent() {
       // no-op
     }
+
+    @Override
+    protected boolean canBeSkipped() { return false; }
   }
 
   /**
diff --git a/fe/src/test/java/org/apache/impala/catalog/events/MetastoreEventsProcessorTest.java b/fe/src/test/java/org/apache/impala/catalog/events/MetastoreEventsProcessorTest.java
index 4c2d2f8..f9d712e 100644
--- a/fe/src/test/java/org/apache/impala/catalog/events/MetastoreEventsProcessorTest.java
+++ b/fe/src/test/java/org/apache/impala/catalog/events/MetastoreEventsProcessorTest.java
@@ -78,6 +78,7 @@ import org.apache.impala.catalog.events.MetastoreEvents.AlterTableEvent;
 import org.apache.impala.catalog.events.MetastoreEvents.MetastoreEvent;
 import org.apache.impala.catalog.events.MetastoreEvents.MetastoreEventPropertyKey;
 import org.apache.impala.catalog.events.MetastoreEvents.MetastoreEventType;
+import org.apache.impala.catalog.events.MetastoreEvents.TableInvalidatingEvent;
 import org.apache.impala.catalog.events.MetastoreEventsProcessor.EventProcessorStatus;
 import org.apache.impala.common.FileSystemUtil;
 import org.apache.impala.common.ImpalaException;
@@ -596,6 +597,23 @@ public class MetastoreEventsProcessorTest {
     FeFsPartition singlePartition =
         Iterables.getOnlyElement(parts);
     assertTrue(newLocation.equals(singlePartition.getLocation()));
+
+    // Test if trivial partition inserts are skipped. Verify that changing parameters
+    // from TableInvalidatingEvent.parametersToIgnore doesn't trigger a refresh.
+    List partitionValue = Arrays.asList("4");
+    alterPartitionsTrivial(testTblName, partitionValue );
+    eventsProcessor_.processEvents();
+
+    Collection<? extends FeFsPartition> partsAfterTrivialAlter =
+        FeCatalogUtils.loadAllPartitions((HdfsTable)
+            catalog_.getTable(TEST_DB_NAME, testTblName));
+    FeFsPartition singlePartitionAfterTrivialAlter =
+        Iterables.getOnlyElement(partsAfterTrivialAlter);
+    for (String parameter : TableInvalidatingEvent.parametersToIgnore) {
+      assertEquals("Unexpected parameter value after trivial alter partition "
+          + "event", singlePartition.getParameters().get(parameter),
+          singlePartitionAfterTrivialAlter.getParameters().get(parameter));
+    }
   }
 
   /**
@@ -814,6 +832,14 @@ public class MetastoreEventsProcessorTest {
         .getCounter(MetastoreEventsProcessor.NUMBER_OF_TABLE_INVALIDATES).getCount();
     assertEquals("Unexpected number of table invalidates",
         numberOfInvalidatesBefore + 4, numberOfInvalidatesAfter);
+    // Check if trivial alters are ignored.
+    loadTable(testTblName);
+    alterTableChangeTrivialProperties(testTblName);
+    // The above alter should not cause an invalidate.
+    long numberOfInvalidatesAfterTrivialAlter = eventsProcessor_.getMetrics()
+        .getCounter(MetastoreEventsProcessor.NUMBER_OF_TABLE_INVALIDATES).getCount();
+    assertEquals("Unexpected number of table invalidates after trivial alter",
+        numberOfInvalidatesBefore + 4, numberOfInvalidatesAfterTrivialAlter);
   }
 
   /**
@@ -2519,6 +2545,22 @@ public class MetastoreEventsProcessorTest {
     }
   }
 
+  /**
+   * Alters trivial table properties which must be ignored by the event processor
+   */
+  private void alterTableChangeTrivialProperties(String tblName)
+      throws TException {
+    try (MetaStoreClient msClient = catalog_.getMetaStoreClient()) {
+      org.apache.hadoop.hive.metastore.api.Table msTable =
+          msClient.getHiveClient().getTable(TEST_DB_NAME, tblName);
+      for (String parameter : TableInvalidatingEvent.parametersToIgnore) {
+        msTable.getParameters().put(parameter, "1234567");
+      }
+      msClient.getHiveClient().alter_table_with_environmentContext(
+          TEST_DB_NAME, tblName, msTable, null);
+    }
+  }
+
   private void alterTableAddCol(
       String tblName, String colName, String colType, String comment) throws TException {
     try (MetaStoreClient msClient = catalog_.getMetaStoreClient()) {
@@ -2601,6 +2643,23 @@ public class MetastoreEventsProcessorTest {
     }
   }
 
+  /**
+   * Alters trivial partition properties which must be ignored by the event processor
+   */
+  private void alterPartitionsTrivial(String tblName, List<String> partVal)
+      throws TException {
+    List<Partition> partitions = new ArrayList<>();
+    try (MetaStoreClient metaStoreClient = catalog_.getMetaStoreClient()) {
+      Partition partition = metaStoreClient.getHiveClient().getPartition(TEST_DB_NAME,
+          tblName, partVal);
+      for (String parameter : TableInvalidatingEvent.parametersToIgnore) {
+        partition.getParameters().put(parameter, "12334567");
+        partitions.add(partition);
+      }
+      metaStoreClient.getHiveClient().alter_partitions(TEST_DB_NAME, tblName, partitions);
+    }
+  }
+
   private void addPartitions(String dbName, String tblName,
       List<List<String>> partitionValues)
       throws TException {