You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2025/07/09 14:41:06 UTC
(ignite-3) 01/01: Fix invalid quoting. Fix invalid intervals.
This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a commit to branch ignite-25594
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit 91ef0abe485aebd7d2b4fe91743aa97f043f6171
Author: amashenkov <am...@apache.org>
AuthorDate: Wed Jul 9 17:21:06 2025 +0300
Fix invalid quoting. Fix invalid intervals.
---
.../src/test/resources/tpcds/plan/q12.plan | 48 ++++
.../test/resources/tpcds/plan/q12_colocated.plan | 48 ++++
.../src/test/resources/tpcds/plan/q16.plan | 129 +++++++++
.../test/resources/tpcds/plan/q16_colocated.plan | 129 +++++++++
.../src/test/resources/tpcds/plan/q20.plan | 48 ++++
.../test/resources/tpcds/plan/q20_colocated.plan | 48 ++++
.../src/test/resources/tpcds/plan/q21.plan | 58 ++++
.../test/resources/tpcds/plan/q21_colocated.plan | 58 ++++
.../src/test/resources/tpcds/plan/q32.plan | 103 +++++++
.../test/resources/tpcds/plan/q32_colocated.plan | 103 +++++++
.../src/test/resources/tpcds/plan/q37.plan | 55 ++++
.../test/resources/tpcds/plan/q37_colocated.plan | 55 ++++
.../src/test/resources/tpcds/plan/q40.plan | 75 +++++
.../test/resources/tpcds/plan/q40_colocated.plan | 75 +++++
.../src/test/resources/tpcds/plan/q5.plan | 205 ++++++++++++++
.../src/test/resources/tpcds/plan/q50.plan | 66 +++++
.../test/resources/tpcds/plan/q50_colocated.plan | 66 +++++
.../src/test/resources/tpcds/plan/q58.plan | 284 +++++++++++++++++++
.../test/resources/tpcds/plan/q58_colocated.plan | 284 +++++++++++++++++++
.../test/resources/tpcds/plan/q5_colocated.plan | 205 ++++++++++++++
.../src/test/resources/tpcds/plan/q62.plan | 65 +++++
.../test/resources/tpcds/plan/q62_colocated.plan | 65 +++++
.../src/test/resources/tpcds/plan/q66.plan | 152 ++++++++++
.../test/resources/tpcds/plan/q66_colocated.plan | 152 ++++++++++
.../src/test/resources/tpcds/plan/q74.plan | 255 +++++++++++++++++
.../test/resources/tpcds/plan/q74_colocated.plan | 255 +++++++++++++++++
.../src/test/resources/tpcds/plan/q75.plan | 309 +++++++++++++++++++++
.../test/resources/tpcds/plan/q75_colocated.plan | 309 +++++++++++++++++++++
.../src/test/resources/tpcds/plan/q77.plan | 255 +++++++++++++++++
.../test/resources/tpcds/plan/q77_colocated.plan | 255 +++++++++++++++++
.../src/test/resources/tpcds/plan/q80.plan | 278 ++++++++++++++++++
.../test/resources/tpcds/plan/q80_colocated.plan | 278 ++++++++++++++++++
.../src/test/resources/tpcds/plan/q82.plan | 55 ++++
.../test/resources/tpcds/plan/q82_colocated.plan | 55 ++++
.../src/test/resources/tpcds/plan/q83.plan | 297 ++++++++++++++++++++
.../test/resources/tpcds/plan/q83_colocated.plan | 297 ++++++++++++++++++++
.../src/test/resources/tpcds/plan/q92.plan | 104 +++++++
.../test/resources/tpcds/plan/q92_colocated.plan | 104 +++++++
.../src/test/resources/tpcds/plan/q94.plan | 129 +++++++++
.../test/resources/tpcds/plan/q94_colocated.plan | 129 +++++++++
.../src/test/resources/tpcds/plan/q95.plan | 151 ++++++++++
.../test/resources/tpcds/plan/q95_colocated.plan | 151 ++++++++++
.../src/test/resources/tpcds/plan/q98.plan | 47 ++++
.../test/resources/tpcds/plan/q98_colocated.plan | 47 ++++
.../src/test/resources/tpcds/plan/q99.plan | 65 +++++
.../test/resources/tpcds/plan/q99_colocated.plan | 65 +++++
.../src/testFixtures/resources/tpcds/query12.sql | 2 +-
.../src/testFixtures/resources/tpcds/query16.sql | 8 +-
.../src/testFixtures/resources/tpcds/query20.sql | 2 +-
.../src/testFixtures/resources/tpcds/query21.sql | 4 +-
.../src/testFixtures/resources/tpcds/query27.sql | 2 +-
.../src/testFixtures/resources/tpcds/query32.sql | 6 +-
.../src/testFixtures/resources/tpcds/query37.sql | 2 +-
.../src/testFixtures/resources/tpcds/query40.sql | 4 +-
.../src/testFixtures/resources/tpcds/query5.sql | 6 +-
.../src/testFixtures/resources/tpcds/query50.sql | 10 +-
.../src/testFixtures/resources/tpcds/query58.sql | 6 +-
.../src/testFixtures/resources/tpcds/query62.sql | 10 +-
.../src/testFixtures/resources/tpcds/query66.sql | 8 +-
.../src/testFixtures/resources/tpcds/query74.sql | 12 +-
.../src/testFixtures/resources/tpcds/query75.sql | 2 +-
.../src/testFixtures/resources/tpcds/query77.sql | 12 +-
.../src/testFixtures/resources/tpcds/query80.sql | 6 +-
.../src/testFixtures/resources/tpcds/query82.sql | 2 +-
.../src/testFixtures/resources/tpcds/query83.sql | 6 +-
.../src/testFixtures/resources/tpcds/query92.sql | 6 +-
.../src/testFixtures/resources/tpcds/query94.sql | 8 +-
.../src/testFixtures/resources/tpcds/query95.sql | 8 +-
.../src/testFixtures/resources/tpcds/query98.sql | 2 +-
.../src/testFixtures/resources/tpcds/query99.sql | 10 +-
70 files changed, 6538 insertions(+), 72 deletions(-)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q12.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q12.plan
new file mode 100644
index 00000000000..5624010e344
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q12.plan
@@ -0,0 +1,48 @@
+Sort
+ collation: [I_CATEGORY ASC, I_CLASS ASC, I_ITEM_ID ASC, I_ITEM_DESC ASC, REVENUERATIO ASC]
+ fetch: 100
+ est: (rows=100)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE, REVENUERATIO]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE, /(*(ITEMREVENUE, 100), CASE(>(COUNT(ITEMREVENUE) OVER (PARTITION BY I_CLASS), 0), CAST(SUM(ITEMREVENUE) OVER (PARTITION BY I_CLASS)):DECIMAL(32767, 2), null:DECIMAL(32767, 2)))]
+ est: (rows=91982)
+ ColocatedHashAggregate
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE]
+ group: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE]
+ aggregation: [SUM(WS_EXT_SALES_PRICE)]
+ est: (rows=91982)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, WS_EXT_SALES_PRICE]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, WS_EXT_SALES_PRICE]
+ est: (rows=136813)
+ HashJoin
+ predicate: =(WS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=136813)
+ HashJoin
+ predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=179846)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK, WS_EXT_SALES_PRICE]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 1998-01-06), <=(D_DATE, +(1998-01-06, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=13693)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: SEARCH(I_CATEGORY, Sarg[_UTF-8'Books':VARCHAR(50) CHARACTER SET "UTF-8", _UTF-8'Electronics':VARCHAR(50) CHARACTER SET "UTF-8", _UTF-8'Women':VARCHAR(50) CHARACTER SET "UTF-8"]:VARCHAR(50) CHARACTER SET "UTF-8")
+ fieldNames: [I_ITEM_SK, I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE, I_CLASS, I_CATEGORY]
+ est: (rows=13693)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q12_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q12_colocated.plan
new file mode 100644
index 00000000000..5624010e344
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q12_colocated.plan
@@ -0,0 +1,48 @@
+Sort
+ collation: [I_CATEGORY ASC, I_CLASS ASC, I_ITEM_ID ASC, I_ITEM_DESC ASC, REVENUERATIO ASC]
+ fetch: 100
+ est: (rows=100)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE, REVENUERATIO]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE, /(*(ITEMREVENUE, 100), CASE(>(COUNT(ITEMREVENUE) OVER (PARTITION BY I_CLASS), 0), CAST(SUM(ITEMREVENUE) OVER (PARTITION BY I_CLASS)):DECIMAL(32767, 2), null:DECIMAL(32767, 2)))]
+ est: (rows=91982)
+ ColocatedHashAggregate
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE]
+ group: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE]
+ aggregation: [SUM(WS_EXT_SALES_PRICE)]
+ est: (rows=91982)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, WS_EXT_SALES_PRICE]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, WS_EXT_SALES_PRICE]
+ est: (rows=136813)
+ HashJoin
+ predicate: =(WS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=136813)
+ HashJoin
+ predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=179846)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK, WS_EXT_SALES_PRICE]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 1998-01-06), <=(D_DATE, +(1998-01-06, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=13693)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: SEARCH(I_CATEGORY, Sarg[_UTF-8'Books':VARCHAR(50) CHARACTER SET "UTF-8", _UTF-8'Electronics':VARCHAR(50) CHARACTER SET "UTF-8", _UTF-8'Women':VARCHAR(50) CHARACTER SET "UTF-8"]:VARCHAR(50) CHARACTER SET "UTF-8")
+ fieldNames: [I_ITEM_SK, I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE, I_CLASS, I_CATEGORY]
+ est: (rows=13693)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q16.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q16.plan
new file mode 100644
index 00000000000..6e983c007bc
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q16.plan
@@ -0,0 +1,129 @@
+Sort
+ collation: [order count ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedSortAggregate
+ fieldNames: [order count, total shipping cost, total net profit]
+ collation: []
+ group: []
+ aggregation: [COUNT(CS_ORDER_NUMBER), SUM(total shipping cost), SUM(total net profit)]
+ est: (rows=2763728885610)
+ ColocatedSortAggregate
+ fieldNames: [CS_ORDER_NUMBER, total shipping cost, total net profit]
+ collation: [CS_ORDER_NUMBER ASC]
+ group: [CS_ORDER_NUMBER]
+ aggregation: [SUM(CS_EXT_SHIP_COST), SUM(CS_NET_PROFIT)]
+ est: (rows=2763728885610)
+ Project
+ fieldNames: [CS_ORDER_NUMBER, CS_EXT_SHIP_COST, CS_NET_PROFIT]
+ projection: [CS_ORDER_NUMBER, CS_EXT_SHIP_COST, CS_NET_PROFIT]
+ est: (rows=13818644428048)
+ Filter
+ predicate: IS NULL(i)
+ est: (rows=13818644428048)
+ CorrelatedNestedLoopJoin
+ predicate: true
+ type: left
+ correlates: [$cor4]
+ est: (rows=55274577712193)
+ Project
+ fieldNames: [CS_ORDER_NUMBER, CS_EXT_SHIP_COST, CS_NET_PROFIT]
+ projection: [CS_ORDER_NUMBER, CS_EXT_SHIP_COST, CS_NET_PROFIT]
+ est: (rows=5760851647)
+ CorrelatedNestedLoopJoin
+ predicate: true
+ type: inner
+ correlates: [$cor5]
+ est: (rows=5760851647)
+ Sort
+ collation: [CS_ORDER_NUMBER ASC]
+ est: (rows=120009)
+ Project
+ fieldNames: [CS_WAREHOUSE_SK, CS_ORDER_NUMBER, CS_EXT_SHIP_COST, CS_NET_PROFIT]
+ projection: [CS_WAREHOUSE_SK, CS_ORDER_NUMBER, CS_EXT_SHIP_COST, CS_NET_PROFIT]
+ est: (rows=120009)
+ HashJoin
+ predicate: =(CS_CALL_CENTER_SK, CC_CALL_CENTER_SK)
+ type: inner
+ est: (rows=120009)
+ HashJoin
+ predicate: =(CS_SHIP_ADDR_SK, CA_ADDRESS_SK)
+ type: inner
+ est: (rows=120009)
+ HashJoin
+ predicate: =(CS_SHIP_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=360387)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SHIP_DATE_SK, CS_SHIP_ADDR_SK, CS_CALL_CENTER_SK, CS_WAREHOUSE_SK, CS_ORDER_NUMBER, CS_EXT_SHIP_COST, CS_NET_PROFIT]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 1999-04-01), <=(D_DATE, +(1999-04-01, *(60, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=16650)
+ TableScan
+ table: PUBLIC.CUSTOMER_ADDRESS
+ predicate: =(CA_STATE, _UTF-8'IL')
+ fieldNames: [CA_ADDRESS_SK, CA_STATE]
+ est: (rows=16650)
+ Exchange
+ distribution: single
+ est: (rows=6)
+ TableScan
+ table: PUBLIC.CALL_CENTER
+ predicate: SEARCH(CC_COUNTY, Sarg[_UTF-8'Bronx County':VARCHAR(30) CHARACTER SET "UTF-8", _UTF-8'Maverick County':VARCHAR(30) CHARACTER SET "UTF-8", _UTF-8'Mesa County':VARCHAR(30) CHARACTER SET "UTF-8", _UTF-8'Raleigh County':VARCHAR(30) CHARACTER SET "UTF-8", _UTF-8'Richland County':VARCHAR(30) CHARACTER SET "UTF-8"]:VARCHAR(30) CHARACTER SET "UTF-8")
+ fieldNames: [CC_CALL_CENTER_SK, CC_COUNTY]
+ est: (rows=6)
+ Project
+ fieldNames: []
+ projection: []
+ est: (rows=48004)
+ ReduceHashAggregate
+ fieldNames: [i]
+ group: [i]
+ aggregation: []
+ est: (rows=48004)
+ Exchange
+ distribution: single
+ est: (rows=48004)
+ MapHashAggregate
+ fieldNames: [i, _GROUP_ID]
+ group: [i]
+ aggregation: []
+ est: (rows=48004)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ predicate: AND(=($cor5.CS_ORDER_NUMBER, CS_ORDER_NUMBER), <>($cor5.CS_WAREHOUSE_SK, CS_WAREHOUSE_SK))
+ fieldNames: [i]
+ projection: [true]
+ est: (rows=240018)
+ ReduceHashAggregate
+ fieldNames: [i]
+ group: [i]
+ aggregation: []
+ est: (rows=9595)
+ Exchange
+ distribution: single
+ est: (rows=9595)
+ MapHashAggregate
+ fieldNames: [i, _GROUP_ID]
+ group: [i]
+ aggregation: []
+ est: (rows=9595)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ predicate: =($cor4.CS_ORDER_NUMBER, CR_ORDER_NUMBER)
+ fieldNames: [i]
+ projection: [true]
+ est: (rows=47974)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q16_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q16_colocated.plan
new file mode 100644
index 00000000000..6e983c007bc
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q16_colocated.plan
@@ -0,0 +1,129 @@
+Sort
+ collation: [order count ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedSortAggregate
+ fieldNames: [order count, total shipping cost, total net profit]
+ collation: []
+ group: []
+ aggregation: [COUNT(CS_ORDER_NUMBER), SUM(total shipping cost), SUM(total net profit)]
+ est: (rows=2763728885610)
+ ColocatedSortAggregate
+ fieldNames: [CS_ORDER_NUMBER, total shipping cost, total net profit]
+ collation: [CS_ORDER_NUMBER ASC]
+ group: [CS_ORDER_NUMBER]
+ aggregation: [SUM(CS_EXT_SHIP_COST), SUM(CS_NET_PROFIT)]
+ est: (rows=2763728885610)
+ Project
+ fieldNames: [CS_ORDER_NUMBER, CS_EXT_SHIP_COST, CS_NET_PROFIT]
+ projection: [CS_ORDER_NUMBER, CS_EXT_SHIP_COST, CS_NET_PROFIT]
+ est: (rows=13818644428048)
+ Filter
+ predicate: IS NULL(i)
+ est: (rows=13818644428048)
+ CorrelatedNestedLoopJoin
+ predicate: true
+ type: left
+ correlates: [$cor4]
+ est: (rows=55274577712193)
+ Project
+ fieldNames: [CS_ORDER_NUMBER, CS_EXT_SHIP_COST, CS_NET_PROFIT]
+ projection: [CS_ORDER_NUMBER, CS_EXT_SHIP_COST, CS_NET_PROFIT]
+ est: (rows=5760851647)
+ CorrelatedNestedLoopJoin
+ predicate: true
+ type: inner
+ correlates: [$cor5]
+ est: (rows=5760851647)
+ Sort
+ collation: [CS_ORDER_NUMBER ASC]
+ est: (rows=120009)
+ Project
+ fieldNames: [CS_WAREHOUSE_SK, CS_ORDER_NUMBER, CS_EXT_SHIP_COST, CS_NET_PROFIT]
+ projection: [CS_WAREHOUSE_SK, CS_ORDER_NUMBER, CS_EXT_SHIP_COST, CS_NET_PROFIT]
+ est: (rows=120009)
+ HashJoin
+ predicate: =(CS_CALL_CENTER_SK, CC_CALL_CENTER_SK)
+ type: inner
+ est: (rows=120009)
+ HashJoin
+ predicate: =(CS_SHIP_ADDR_SK, CA_ADDRESS_SK)
+ type: inner
+ est: (rows=120009)
+ HashJoin
+ predicate: =(CS_SHIP_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=360387)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SHIP_DATE_SK, CS_SHIP_ADDR_SK, CS_CALL_CENTER_SK, CS_WAREHOUSE_SK, CS_ORDER_NUMBER, CS_EXT_SHIP_COST, CS_NET_PROFIT]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 1999-04-01), <=(D_DATE, +(1999-04-01, *(60, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=16650)
+ TableScan
+ table: PUBLIC.CUSTOMER_ADDRESS
+ predicate: =(CA_STATE, _UTF-8'IL')
+ fieldNames: [CA_ADDRESS_SK, CA_STATE]
+ est: (rows=16650)
+ Exchange
+ distribution: single
+ est: (rows=6)
+ TableScan
+ table: PUBLIC.CALL_CENTER
+ predicate: SEARCH(CC_COUNTY, Sarg[_UTF-8'Bronx County':VARCHAR(30) CHARACTER SET "UTF-8", _UTF-8'Maverick County':VARCHAR(30) CHARACTER SET "UTF-8", _UTF-8'Mesa County':VARCHAR(30) CHARACTER SET "UTF-8", _UTF-8'Raleigh County':VARCHAR(30) CHARACTER SET "UTF-8", _UTF-8'Richland County':VARCHAR(30) CHARACTER SET "UTF-8"]:VARCHAR(30) CHARACTER SET "UTF-8")
+ fieldNames: [CC_CALL_CENTER_SK, CC_COUNTY]
+ est: (rows=6)
+ Project
+ fieldNames: []
+ projection: []
+ est: (rows=48004)
+ ReduceHashAggregate
+ fieldNames: [i]
+ group: [i]
+ aggregation: []
+ est: (rows=48004)
+ Exchange
+ distribution: single
+ est: (rows=48004)
+ MapHashAggregate
+ fieldNames: [i, _GROUP_ID]
+ group: [i]
+ aggregation: []
+ est: (rows=48004)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ predicate: AND(=($cor5.CS_ORDER_NUMBER, CS_ORDER_NUMBER), <>($cor5.CS_WAREHOUSE_SK, CS_WAREHOUSE_SK))
+ fieldNames: [i]
+ projection: [true]
+ est: (rows=240018)
+ ReduceHashAggregate
+ fieldNames: [i]
+ group: [i]
+ aggregation: []
+ est: (rows=9595)
+ Exchange
+ distribution: single
+ est: (rows=9595)
+ MapHashAggregate
+ fieldNames: [i, _GROUP_ID]
+ group: [i]
+ aggregation: []
+ est: (rows=9595)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ predicate: =($cor4.CS_ORDER_NUMBER, CR_ORDER_NUMBER)
+ fieldNames: [i]
+ projection: [true]
+ est: (rows=47974)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q20.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q20.plan
new file mode 100644
index 00000000000..8afbf64ca4d
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q20.plan
@@ -0,0 +1,48 @@
+Sort
+ collation: [I_CATEGORY ASC, I_CLASS ASC, I_ITEM_ID ASC, I_ITEM_DESC ASC, REVENUERATIO ASC]
+ fetch: 100
+ est: (rows=100)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE, REVENUERATIO]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE, /(*(ITEMREVENUE, 100), CASE(>(COUNT(ITEMREVENUE) OVER (PARTITION BY I_CLASS), 0), CAST(SUM(ITEMREVENUE) OVER (PARTITION BY I_CLASS)):DECIMAL(32767, 2), null:DECIMAL(32767, 2)))]
+ est: (rows=184320)
+ ColocatedHashAggregate
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE]
+ group: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE]
+ aggregation: [SUM(CS_EXT_SALES_PRICE)]
+ est: (rows=184320)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, CS_EXT_SALES_PRICE]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, CS_EXT_SALES_PRICE]
+ est: (rows=274155)
+ HashJoin
+ predicate: =(CS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=274155)
+ HashJoin
+ predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=360387)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK, CS_EXT_SALES_PRICE]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2001-03-14), <=(D_DATE, +(2001-03-14, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=13693)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: SEARCH(I_CATEGORY, Sarg[_UTF-8'Children':VARCHAR(50) CHARACTER SET "UTF-8", _UTF-8'Electronics':VARCHAR(50) CHARACTER SET "UTF-8", _UTF-8'Shoes':VARCHAR(50) CHARACTER SET "UTF-8"]:VARCHAR(50) CHARACTER SET "UTF-8")
+ fieldNames: [I_ITEM_SK, I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE, I_CLASS, I_CATEGORY]
+ est: (rows=13693)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q20_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q20_colocated.plan
new file mode 100644
index 00000000000..8afbf64ca4d
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q20_colocated.plan
@@ -0,0 +1,48 @@
+Sort
+ collation: [I_CATEGORY ASC, I_CLASS ASC, I_ITEM_ID ASC, I_ITEM_DESC ASC, REVENUERATIO ASC]
+ fetch: 100
+ est: (rows=100)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE, REVENUERATIO]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE, /(*(ITEMREVENUE, 100), CASE(>(COUNT(ITEMREVENUE) OVER (PARTITION BY I_CLASS), 0), CAST(SUM(ITEMREVENUE) OVER (PARTITION BY I_CLASS)):DECIMAL(32767, 2), null:DECIMAL(32767, 2)))]
+ est: (rows=184320)
+ ColocatedHashAggregate
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE]
+ group: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE]
+ aggregation: [SUM(CS_EXT_SALES_PRICE)]
+ est: (rows=184320)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, CS_EXT_SALES_PRICE]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, CS_EXT_SALES_PRICE]
+ est: (rows=274155)
+ HashJoin
+ predicate: =(CS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=274155)
+ HashJoin
+ predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=360387)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK, CS_EXT_SALES_PRICE]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2001-03-14), <=(D_DATE, +(2001-03-14, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=13693)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: SEARCH(I_CATEGORY, Sarg[_UTF-8'Children':VARCHAR(50) CHARACTER SET "UTF-8", _UTF-8'Electronics':VARCHAR(50) CHARACTER SET "UTF-8", _UTF-8'Shoes':VARCHAR(50) CHARACTER SET "UTF-8"]:VARCHAR(50) CHARACTER SET "UTF-8")
+ fieldNames: [I_ITEM_SK, I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE, I_CLASS, I_CATEGORY]
+ est: (rows=13693)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q21.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q21.plan
new file mode 100644
index 00000000000..1d058b7557c
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q21.plan
@@ -0,0 +1,58 @@
+Sort
+ collation: [W_WAREHOUSE_NAME ASC, I_ITEM_ID ASC]
+ fetch: 100
+ est: (rows=100)
+ Filter
+ predicate: AND(>=(CAST(CASE(>(INV_BEFORE, 0), /(INV_AFTER, INV_BEFORE), null:BIGINT)):DECIMAL(25, 6), CAST(/(2.0:DECIMAL(2, 1), 3.0:DECIMAL(2, 1))):DECIMAL(25, 6) NOT NULL), <=(CAST(CASE(>(INV_BEFORE, 0), /(INV_AFTER, INV_BEFORE), null:BIGINT)):DECIMAL(25, 6), CAST(/(3.0:DECIMAL(2, 1), 2.0:DECIMAL(2, 1))):DECIMAL(25, 6) NOT NULL))
+ est: (rows=66066)
+ ColocatedHashAggregate
+ fieldNames: [W_WAREHOUSE_NAME, I_ITEM_ID, INV_BEFORE, INV_AFTER]
+ group: [W_WAREHOUSE_NAME, I_ITEM_ID]
+ aggregation: [SUM($f2), SUM($f3)]
+ est: (rows=264262)
+ Project
+ fieldNames: [W_WAREHOUSE_NAME, I_ITEM_ID, $f2, $f3]
+ projection: [W_WAREHOUSE_NAME, I_ITEM_ID, CASE(<(D_DATE, 1999-03-20), INV_QUANTITY_ON_HAND, 0), CASE(>=(D_DATE, 1999-03-20), INV_QUANTITY_ON_HAND, 0)]
+ est: (rows=734063)
+ HashJoin
+ predicate: =(INV_WAREHOUSE_SK, W_WAREHOUSE_SK)
+ type: inner
+ est: (rows=734063)
+ HashJoin
+ predicate: =(I_ITEM_SK, INV_ITEM_SK)
+ type: inner
+ est: (rows=734063)
+ HashJoin
+ predicate: =(INV_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=2936250)
+ Exchange
+ distribution: single
+ est: (rows=11745000)
+ TableScan
+ table: PUBLIC.INVENTORY
+ fieldNames: [INV_DATE_SK, INV_ITEM_SK, INV_WAREHOUSE_SK, INV_QUANTITY_ON_HAND]
+ est: (rows=11745000)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, -(1999-03-20, *(30, 86400000:INTERVAL DAY))), <=(D_DATE, +(1999-03-20, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=4500)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: SEARCH(I_CURRENT_PRICE, Sarg[[0.99:DECIMAL(3, 2)..1.49:DECIMAL(3, 2)]]:DECIMAL(3, 2))
+ fieldNames: [I_ITEM_SK, I_ITEM_ID, I_CURRENT_PRICE]
+ est: (rows=4500)
+ Exchange
+ distribution: single
+ est: (rows=5)
+ TableScan
+ table: PUBLIC.WAREHOUSE
+ fieldNames: [W_WAREHOUSE_SK, W_WAREHOUSE_NAME]
+ est: (rows=5)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q21_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q21_colocated.plan
new file mode 100644
index 00000000000..1d058b7557c
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q21_colocated.plan
@@ -0,0 +1,58 @@
+Sort
+ collation: [W_WAREHOUSE_NAME ASC, I_ITEM_ID ASC]
+ fetch: 100
+ est: (rows=100)
+ Filter
+ predicate: AND(>=(CAST(CASE(>(INV_BEFORE, 0), /(INV_AFTER, INV_BEFORE), null:BIGINT)):DECIMAL(25, 6), CAST(/(2.0:DECIMAL(2, 1), 3.0:DECIMAL(2, 1))):DECIMAL(25, 6) NOT NULL), <=(CAST(CASE(>(INV_BEFORE, 0), /(INV_AFTER, INV_BEFORE), null:BIGINT)):DECIMAL(25, 6), CAST(/(3.0:DECIMAL(2, 1), 2.0:DECIMAL(2, 1))):DECIMAL(25, 6) NOT NULL))
+ est: (rows=66066)
+ ColocatedHashAggregate
+ fieldNames: [W_WAREHOUSE_NAME, I_ITEM_ID, INV_BEFORE, INV_AFTER]
+ group: [W_WAREHOUSE_NAME, I_ITEM_ID]
+ aggregation: [SUM($f2), SUM($f3)]
+ est: (rows=264262)
+ Project
+ fieldNames: [W_WAREHOUSE_NAME, I_ITEM_ID, $f2, $f3]
+ projection: [W_WAREHOUSE_NAME, I_ITEM_ID, CASE(<(D_DATE, 1999-03-20), INV_QUANTITY_ON_HAND, 0), CASE(>=(D_DATE, 1999-03-20), INV_QUANTITY_ON_HAND, 0)]
+ est: (rows=734063)
+ HashJoin
+ predicate: =(INV_WAREHOUSE_SK, W_WAREHOUSE_SK)
+ type: inner
+ est: (rows=734063)
+ HashJoin
+ predicate: =(I_ITEM_SK, INV_ITEM_SK)
+ type: inner
+ est: (rows=734063)
+ HashJoin
+ predicate: =(INV_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=2936250)
+ Exchange
+ distribution: single
+ est: (rows=11745000)
+ TableScan
+ table: PUBLIC.INVENTORY
+ fieldNames: [INV_DATE_SK, INV_ITEM_SK, INV_WAREHOUSE_SK, INV_QUANTITY_ON_HAND]
+ est: (rows=11745000)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, -(1999-03-20, *(30, 86400000:INTERVAL DAY))), <=(D_DATE, +(1999-03-20, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=4500)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: SEARCH(I_CURRENT_PRICE, Sarg[[0.99:DECIMAL(3, 2)..1.49:DECIMAL(3, 2)]]:DECIMAL(3, 2))
+ fieldNames: [I_ITEM_SK, I_ITEM_ID, I_CURRENT_PRICE]
+ est: (rows=4500)
+ Exchange
+ distribution: single
+ est: (rows=5)
+ TableScan
+ table: PUBLIC.WAREHOUSE
+ fieldNames: [W_WAREHOUSE_SK, W_WAREHOUSE_NAME]
+ est: (rows=5)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q32.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q32.plan
new file mode 100644
index 00000000000..a486ee46890
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q32.plan
@@ -0,0 +1,103 @@
+Limit
+ fetch: 100
+ est: (rows=1)
+ ColocatedHashAggregate
+ fieldNames: [excess discount amount]
+ group: []
+ aggregation: [SUM(CS_EXT_DISCOUNT_AMT)]
+ est: (rows=1)
+ Project
+ fieldNames: [CS_EXT_DISCOUNT_AMT]
+ projection: [CS_EXT_DISCOUNT_AMT]
+ est: (rows=60004)
+ Filter
+ predicate: >(CAST(CS_EXT_DISCOUNT_AMT):DECIMAL(23, 17), EXPR$0)
+ est: (rows=60004)
+ CorrelatedNestedLoopJoin
+ predicate: true
+ type: left
+ correlates: [$cor1]
+ est: (rows=120009)
+ Project
+ fieldNames: [CS_EXT_DISCOUNT_AMT, I_ITEM_SK]
+ projection: [CS_EXT_DISCOUNT_AMT, I_ITEM_SK]
+ est: (rows=120009)
+ HashJoin
+ predicate: =(I_ITEM_SK, CS_ITEM_SK)
+ type: inner
+ est: (rows=120009)
+ HashJoin
+ predicate: =(D_DATE_SK, CS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=360387)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK, CS_EXT_DISCOUNT_AMT]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2002-03-29), <=(D_DATE, +(2002-03-29, *(90, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_MANUFACT_ID, 66)
+ fieldNames: [I_ITEM_SK, I_MANUFACT_ID]
+ est: (rows=5994)
+ Project
+ fieldNames: [EXPR$0]
+ projection: [*(1.3:DECIMAL(2, 1), $f0)]
+ est: (rows=1)
+ Project
+ fieldNames: [$f0]
+ projection: [CASE(=(f0_0, 0:DECIMAL(32767, 0)), null:DECIMAL(21, 16), DECIMAL_DIVIDE(f0_0, f1_1, 21, 16))]
+ est: (rows=1)
+ ReduceSortAggregate
+ fieldNames: [f0_0, f1_1]
+ collation: []
+ group: []
+ aggregation: [SUM(0), $SUM0(1)]
+ est: (rows=1)
+ Project
+ fieldNames: [0, 1]
+ projection: [_ACC0, CAST(_ACC1):DECIMAL(32767, 0) NOT NULL]
+ est: (rows=1)
+ Exchange
+ distribution: single
+ est: (rows=1)
+ MapSortAggregate
+ fieldNames: [_ACC0, _ACC1]
+ collation: []
+ group: []
+ aggregation: [SUM(CS_EXT_DISCOUNT_AMT), COUNT(CS_EXT_DISCOUNT_AMT)]
+ est: (rows=1)
+ Project
+ fieldNames: [CS_EXT_DISCOUNT_AMT]
+ projection: [CS_EXT_DISCOUNT_AMT]
+ est: (rows=120009)
+ HashJoin
+ predicate: =(D_DATE_SK, CS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=120009)
+ Exchange
+ distribution: table PUBLIC.DATE_DIM in zone "Default" by [CS_SOLD_DATE_SK]
+ est: (rows=480035)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ predicate: =(CS_ITEM_SK, $cor1.I_ITEM_SK)
+ fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK, CS_EXT_DISCOUNT_AMT]
+ est: (rows=480035)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2002-03-29), <=(D_DATE, +(2002-03-29, *(90, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q32_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q32_colocated.plan
new file mode 100644
index 00000000000..a486ee46890
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q32_colocated.plan
@@ -0,0 +1,103 @@
+Limit
+ fetch: 100
+ est: (rows=1)
+ ColocatedHashAggregate
+ fieldNames: [excess discount amount]
+ group: []
+ aggregation: [SUM(CS_EXT_DISCOUNT_AMT)]
+ est: (rows=1)
+ Project
+ fieldNames: [CS_EXT_DISCOUNT_AMT]
+ projection: [CS_EXT_DISCOUNT_AMT]
+ est: (rows=60004)
+ Filter
+ predicate: >(CAST(CS_EXT_DISCOUNT_AMT):DECIMAL(23, 17), EXPR$0)
+ est: (rows=60004)
+ CorrelatedNestedLoopJoin
+ predicate: true
+ type: left
+ correlates: [$cor1]
+ est: (rows=120009)
+ Project
+ fieldNames: [CS_EXT_DISCOUNT_AMT, I_ITEM_SK]
+ projection: [CS_EXT_DISCOUNT_AMT, I_ITEM_SK]
+ est: (rows=120009)
+ HashJoin
+ predicate: =(I_ITEM_SK, CS_ITEM_SK)
+ type: inner
+ est: (rows=120009)
+ HashJoin
+ predicate: =(D_DATE_SK, CS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=360387)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK, CS_EXT_DISCOUNT_AMT]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2002-03-29), <=(D_DATE, +(2002-03-29, *(90, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_MANUFACT_ID, 66)
+ fieldNames: [I_ITEM_SK, I_MANUFACT_ID]
+ est: (rows=5994)
+ Project
+ fieldNames: [EXPR$0]
+ projection: [*(1.3:DECIMAL(2, 1), $f0)]
+ est: (rows=1)
+ Project
+ fieldNames: [$f0]
+ projection: [CASE(=(f0_0, 0:DECIMAL(32767, 0)), null:DECIMAL(21, 16), DECIMAL_DIVIDE(f0_0, f1_1, 21, 16))]
+ est: (rows=1)
+ ReduceSortAggregate
+ fieldNames: [f0_0, f1_1]
+ collation: []
+ group: []
+ aggregation: [SUM(0), $SUM0(1)]
+ est: (rows=1)
+ Project
+ fieldNames: [0, 1]
+ projection: [_ACC0, CAST(_ACC1):DECIMAL(32767, 0) NOT NULL]
+ est: (rows=1)
+ Exchange
+ distribution: single
+ est: (rows=1)
+ MapSortAggregate
+ fieldNames: [_ACC0, _ACC1]
+ collation: []
+ group: []
+ aggregation: [SUM(CS_EXT_DISCOUNT_AMT), COUNT(CS_EXT_DISCOUNT_AMT)]
+ est: (rows=1)
+ Project
+ fieldNames: [CS_EXT_DISCOUNT_AMT]
+ projection: [CS_EXT_DISCOUNT_AMT]
+ est: (rows=120009)
+ HashJoin
+ predicate: =(D_DATE_SK, CS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=120009)
+ Exchange
+ distribution: table PUBLIC.DATE_DIM in zone "Default" by [CS_SOLD_DATE_SK]
+ est: (rows=480035)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ predicate: =(CS_ITEM_SK, $cor1.I_ITEM_SK)
+ fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK, CS_EXT_DISCOUNT_AMT]
+ est: (rows=480035)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2002-03-29), <=(D_DATE, +(2002-03-29, *(90, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q37.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q37.plan
new file mode 100644
index 00000000000..5e5994fc64c
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q37.plan
@@ -0,0 +1,55 @@
+Sort
+ collation: [I_ITEM_ID ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ group: [I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE]
+ aggregation: []
+ est: (rows=10192)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE]
+ est: (rows=20885)
+ HashJoin
+ predicate: =(D_DATE_SK, INV_DATE_SK)
+ type: inner
+ est: (rows=20885)
+ HashJoin
+ predicate: =(CS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=83540)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_ITEM_SK]
+ est: (rows=1441548)
+ HashJoin
+ predicate: =(INV_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=680641)
+ Exchange
+ distribution: single
+ est: (rows=2936250)
+ TableScan
+ table: PUBLIC.INVENTORY
+ predicate: SEARCH(INV_QUANTITY_ON_HAND, Sarg[[100..500]])
+ fieldNames: [INV_DATE_SK, INV_ITEM_SK, INV_QUANTITY_ON_HAND]
+ est: (rows=2936250)
+ Exchange
+ distribution: single
+ est: (rows=4173)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: AND(>=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 39.00), <=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), CAST(+(39, 30)):DECIMAL(12, 2) NOT NULL), SEARCH(I_MANUFACT_ID, Sarg[728, 765, 886, 889]))
+ fieldNames: [I_ITEM_SK, I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE, I_MANUFACT_ID]
+ est: (rows=4173)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2001-01-16), <=(D_DATE, +(2001-01-16, *(60, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q37_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q37_colocated.plan
new file mode 100644
index 00000000000..5e5994fc64c
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q37_colocated.plan
@@ -0,0 +1,55 @@
+Sort
+ collation: [I_ITEM_ID ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ group: [I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE]
+ aggregation: []
+ est: (rows=10192)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE]
+ est: (rows=20885)
+ HashJoin
+ predicate: =(D_DATE_SK, INV_DATE_SK)
+ type: inner
+ est: (rows=20885)
+ HashJoin
+ predicate: =(CS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=83540)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_ITEM_SK]
+ est: (rows=1441548)
+ HashJoin
+ predicate: =(INV_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=680641)
+ Exchange
+ distribution: single
+ est: (rows=2936250)
+ TableScan
+ table: PUBLIC.INVENTORY
+ predicate: SEARCH(INV_QUANTITY_ON_HAND, Sarg[[100..500]])
+ fieldNames: [INV_DATE_SK, INV_ITEM_SK, INV_QUANTITY_ON_HAND]
+ est: (rows=2936250)
+ Exchange
+ distribution: single
+ est: (rows=4173)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: AND(>=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 39.00), <=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), CAST(+(39, 30)):DECIMAL(12, 2) NOT NULL), SEARCH(I_MANUFACT_ID, Sarg[728, 765, 886, 889]))
+ fieldNames: [I_ITEM_SK, I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE, I_MANUFACT_ID]
+ est: (rows=4173)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2001-01-16), <=(D_DATE, +(2001-01-16, *(60, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q40.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q40.plan
new file mode 100644
index 00000000000..83e2ff6306c
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q40.plan
@@ -0,0 +1,75 @@
+Sort
+ collation: [W_STATE ASC, I_ITEM_ID ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ fieldNames: [W_STATE, I_ITEM_ID, SALES_BEFORE, SALES_AFTER]
+ group: [W_STATE, I_ITEM_ID]
+ aggregation: [SUM($f2), SUM($f3)]
+ est: (rows=105169450)
+ Project
+ fieldNames: [W_STATE, I_ITEM_ID, $f2, $f3]
+ projection: [W_STATE, I_ITEM_ID, CASE(<(D_DATE, 2000-03-18), -(CS_SALES_PRICE, CASE(IS NOT NULL(CR_REFUNDED_CASH), CAST(CR_REFUNDED_CASH):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2))), 0.00:DECIMAL(13, 2)), CASE(>=(D_DATE, 2000-03-18), -(CS_SALES_PRICE, CASE(IS NOT NULL(CR_REFUNDED_CASH), CAST(CR_REFUNDED_CASH):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2))), 0.00:DECIMAL(13, 2))]
+ est: (rows=292137360)
+ MergeJoin
+ predicate: =(I_ITEM_SK, CS_ITEM_SK)
+ type: inner
+ est: (rows=292137360)
+ HashJoin
+ predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=1168549442)
+ HashJoin
+ predicate: =(CS_WAREHOUSE_SK, W_WAREHOUSE_SK)
+ type: inner
+ est: (rows=4674197767)
+ MergeJoin
+ predicate: AND(=(CS_ORDER_NUMBER, CR_ORDER_NUMBER), =(CS_ITEM_SK, CR_ITEM_SK))
+ type: left
+ est: (rows=4674197767)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ Sort
+ collation: [CS_ITEM_SK ASC, CS_ORDER_NUMBER ASC]
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_WAREHOUSE_SK, CS_ITEM_SK, CS_ORDER_NUMBER, CS_SALES_PRICE]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=144067)
+ Sort
+ collation: [CR_ITEM_SK ASC, CR_ORDER_NUMBER ASC]
+ est: (rows=144067)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_REFUNDED_CASH]
+ est: (rows=144067)
+ Exchange
+ distribution: single
+ est: (rows=5)
+ TableScan
+ table: PUBLIC.WAREHOUSE
+ fieldNames: [W_WAREHOUSE_SK, W_STATE]
+ est: (rows=5)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, -(2000-03-18, *(30, 86400000:INTERVAL DAY))), <=(D_DATE, +(2000-03-18, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=4500)
+ Sort
+ collation: [I_ITEM_SK ASC]
+ est: (rows=4500)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: SEARCH(I_CURRENT_PRICE, Sarg[[0.99:DECIMAL(3, 2)..1.49:DECIMAL(3, 2)]]:DECIMAL(3, 2))
+ fieldNames: [I_ITEM_SK, I_ITEM_ID, I_CURRENT_PRICE]
+ est: (rows=4500)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q40_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q40_colocated.plan
new file mode 100644
index 00000000000..83e2ff6306c
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q40_colocated.plan
@@ -0,0 +1,75 @@
+Sort
+ collation: [W_STATE ASC, I_ITEM_ID ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ fieldNames: [W_STATE, I_ITEM_ID, SALES_BEFORE, SALES_AFTER]
+ group: [W_STATE, I_ITEM_ID]
+ aggregation: [SUM($f2), SUM($f3)]
+ est: (rows=105169450)
+ Project
+ fieldNames: [W_STATE, I_ITEM_ID, $f2, $f3]
+ projection: [W_STATE, I_ITEM_ID, CASE(<(D_DATE, 2000-03-18), -(CS_SALES_PRICE, CASE(IS NOT NULL(CR_REFUNDED_CASH), CAST(CR_REFUNDED_CASH):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2))), 0.00:DECIMAL(13, 2)), CASE(>=(D_DATE, 2000-03-18), -(CS_SALES_PRICE, CASE(IS NOT NULL(CR_REFUNDED_CASH), CAST(CR_REFUNDED_CASH):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2))), 0.00:DECIMAL(13, 2))]
+ est: (rows=292137360)
+ MergeJoin
+ predicate: =(I_ITEM_SK, CS_ITEM_SK)
+ type: inner
+ est: (rows=292137360)
+ HashJoin
+ predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=1168549442)
+ HashJoin
+ predicate: =(CS_WAREHOUSE_SK, W_WAREHOUSE_SK)
+ type: inner
+ est: (rows=4674197767)
+ MergeJoin
+ predicate: AND(=(CS_ORDER_NUMBER, CR_ORDER_NUMBER), =(CS_ITEM_SK, CR_ITEM_SK))
+ type: left
+ est: (rows=4674197767)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ Sort
+ collation: [CS_ITEM_SK ASC, CS_ORDER_NUMBER ASC]
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_WAREHOUSE_SK, CS_ITEM_SK, CS_ORDER_NUMBER, CS_SALES_PRICE]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=144067)
+ Sort
+ collation: [CR_ITEM_SK ASC, CR_ORDER_NUMBER ASC]
+ est: (rows=144067)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_REFUNDED_CASH]
+ est: (rows=144067)
+ Exchange
+ distribution: single
+ est: (rows=5)
+ TableScan
+ table: PUBLIC.WAREHOUSE
+ fieldNames: [W_WAREHOUSE_SK, W_STATE]
+ est: (rows=5)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, -(2000-03-18, *(30, 86400000:INTERVAL DAY))), <=(D_DATE, +(2000-03-18, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=4500)
+ Sort
+ collation: [I_ITEM_SK ASC]
+ est: (rows=4500)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: SEARCH(I_CURRENT_PRICE, Sarg[[0.99:DECIMAL(3, 2)..1.49:DECIMAL(3, 2)]]:DECIMAL(3, 2))
+ fieldNames: [I_ITEM_SK, I_ITEM_ID, I_CURRENT_PRICE]
+ est: (rows=4500)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q5.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q5.plan
new file mode 100644
index 00000000000..7e621461f1f
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q5.plan
@@ -0,0 +1,205 @@
+Sort
+ collation: [CHANNEL ASC, ID ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ group: [CHANNEL, ID]
+ groupSets: [[CHANNEL, ID], [CHANNEL], []]
+ aggregation: [SUM(SALES), SUM(RETURNS), SUM(PROFIT)]
+ est: (rows=2770902750067)
+ UnionAll
+ est: (rows=4395725844132)
+ Project
+ projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
+ est: (rows=3124078767)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'store channel', ||(_UTF-8'store', S_STORE_ID), SALES, RETURNS, -(PROFIT, PROFIT_LOSS)]
+ est: (rows=3124078767)
+ ColocatedHashAggregate
+ fieldNames: [S_STORE_ID, SALES, PROFIT, RETURNS, PROFIT_LOSS]
+ group: [S_STORE_ID]
+ aggregation: [SUM(SALES_PRICE), SUM(PROFIT), SUM(RETURN_AMT), SUM(NET_LOSS)]
+ est: (rows=3124078767)
+ Project
+ fieldNames: [S_STORE_ID, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [S_STORE_ID, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ est: (rows=15620393834)
+ MergeJoin
+ predicate: =(STORE_SK, S_STORE_SK)
+ type: inner
+ est: (rows=15620393834)
+ HashJoin
+ predicate: =(DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=8677996574)
+ Exchange
+ distribution: single
+ est: (rows=3167918)
+ Sort
+ collation: [STORE_SK ASC]
+ est: (rows=3167918)
+ UnionAll
+ est: (rows=3167918)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [STORE_SK, DATE_SK, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [SS_STORE_SK, SS_SOLD_DATE_SK, SS_EXT_SALES_PRICE, SS_NET_PROFIT, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2)]
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [STORE_SK, DATE_SK, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [SR_STORE_SK, SR_RETURNED_DATE_SK, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2), SR_RETURN_AMT, SR_NET_LOSS]
+ est: (rows=287514)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-19), <=(D_DATE, +(2000-08-19, *(14, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=12)
+ Sort
+ collation: [S_STORE_SK ASC]
+ est: (rows=12)
+ TableScan
+ table: PUBLIC.STORE
+ fieldNames: [S_STORE_SK, S_STORE_ID]
+ est: (rows=12)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'catalog channel', ||(_UTF-8'catalog_page', CP_CATALOG_PAGE_ID), SALES, RETURNS, -(PROFIT, PROFIT_LOSS)]
+ est: (rows=1526926163852)
+ ColocatedHashAggregate
+ fieldNames: [CP_CATALOG_PAGE_ID, SALES, PROFIT, RETURNS, PROFIT_LOSS]
+ group: [CP_CATALOG_PAGE_ID]
+ aggregation: [SUM(SALES_PRICE), SUM(PROFIT), SUM(RETURN_AMT), SUM(NET_LOSS)]
+ est: (rows=1526926163852)
+ Project
+ fieldNames: [CP_CATALOG_PAGE_ID, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [CP_CATALOG_PAGE_ID, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ est: (rows=7634630819261)
+ MergeJoin
+ predicate: =(PAGE_SK, CP_CATALOG_PAGE_SK)
+ type: inner
+ est: (rows=7634630819261)
+ HashJoin
+ predicate: =(DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=4343534630)
+ Exchange
+ distribution: single
+ est: (rows=1585615)
+ Sort
+ collation: [PAGE_SK ASC]
+ est: (rows=1585615)
+ UnionAll
+ est: (rows=1585615)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [PAGE_SK, DATE_SK, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [CS_CATALOG_PAGE_SK, CS_SOLD_DATE_SK, CS_EXT_SALES_PRICE, CS_NET_PROFIT, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2)]
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [PAGE_SK, DATE_SK, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [CR_CATALOG_PAGE_SK, CR_RETURNED_DATE_SK, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2), CR_RETURN_AMOUNT, CR_NET_LOSS]
+ est: (rows=144067)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-19), <=(D_DATE, +(2000-08-19, *(14, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=11718)
+ Sort
+ collation: [CP_CATALOG_PAGE_SK ASC]
+ est: (rows=11718)
+ TableScan
+ table: PUBLIC.CATALOG_PAGE
+ fieldNames: [CP_CATALOG_PAGE_SK, CP_CATALOG_PAGE_ID]
+ est: (rows=11718)
+ Project
+ projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
+ est: (rows=2865675601513)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'web channel', ||(_UTF-8'web_site', WEB_SITE_ID), SALES, RETURNS, -(PROFIT, PROFIT_LOSS)]
+ est: (rows=2865675601513)
+ ColocatedHashAggregate
+ fieldNames: [WEB_SITE_ID, SALES, PROFIT, RETURNS, PROFIT_LOSS]
+ group: [WEB_SITE_ID]
+ aggregation: [SUM(SALES_PRICE), SUM(PROFIT), SUM(RETURN_AMT), SUM(NET_LOSS)]
+ est: (rows=2865675601513)
+ Project
+ fieldNames: [WEB_SITE_ID, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [WEB_SITE_ID, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ est: (rows=14328378007564)
+ MergeJoin
+ predicate: =(WSR_WEB_SITE_SK, WEB_SITE_SK)
+ type: inner
+ est: (rows=14328378007564)
+ HashJoin
+ predicate: =(DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=3184084001681)
+ Sort
+ collation: [WSR_WEB_SITE_SK ASC]
+ est: (rows=1162355497)
+ UnionAll
+ est: (rows=1162355497)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WSR_WEB_SITE_SK, DATE_SK, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [WS_WEB_SITE_SK, WS_SOLD_DATE_SK, WS_EXT_SALES_PRICE, WS_NET_PROFIT, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2)]
+ est: (rows=719384)
+ Project
+ fieldNames: [WSR_WEB_SITE_SK, DATE_SK, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [WS_WEB_SITE_SK, WR_RETURNED_DATE_SK, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2), WR_RETURN_AMT, WR_NET_LOSS]
+ est: (rows=1161636113)
+ HashJoin
+ predicate: AND(=(WR_ITEM_SK, WS_ITEM_SK), =(WR_ORDER_NUMBER, WS_ORDER_NUMBER))
+ type: left
+ est: (rows=1161636113)
+ Exchange
+ distribution: single
+ est: (rows=71763)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ fieldNames: [WR_RETURNED_DATE_SK, WR_ITEM_SK, WR_ORDER_NUMBER, WR_RETURN_AMT, WR_NET_LOSS]
+ est: (rows=71763)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_ITEM_SK, WS_WEB_SITE_SK, WS_ORDER_NUMBER]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-19), <=(D_DATE, +(2000-08-19, *(14, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=30)
+ Sort
+ collation: [WEB_SITE_SK ASC]
+ est: (rows=30)
+ TableScan
+ table: PUBLIC.WEB_SITE
+ fieldNames: [WEB_SITE_SK, WEB_SITE_ID]
+ est: (rows=30)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q50.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q50.plan
new file mode 100644
index 00000000000..9d93f05588f
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q50.plan
@@ -0,0 +1,66 @@
+Sort
+ collation: [S_STORE_NAME ASC, S_COMPANY_ID ASC, S_STREET_NUMBER ASC, S_STREET_NAME ASC, S_STREET_TYPE ASC, S_SUITE_NUMBER ASC, S_CITY ASC, S_COUNTY ASC, S_STATE ASC, S_ZIP ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ fieldNames: [S_STORE_NAME, S_COMPANY_ID, S_STREET_NUMBER, S_STREET_NAME, S_STREET_TYPE, S_SUITE_NUMBER, S_CITY, S_COUNTY, S_STATE, S_ZIP, 30 days, 31-60 days, 61-90 days, 91-120 days, >120 days]
+ group: [S_STORE_NAME, S_COMPANY_ID, S_STREET_NUMBER, S_STREET_NAME, S_STREET_TYPE, S_SUITE_NUMBER, S_CITY, S_COUNTY, S_STATE, S_ZIP]
+ aggregation: [SUM($f10), SUM($f11), SUM($f12), SUM($f13), SUM($f14)]
+ est: (rows=28459)
+ Project
+ fieldNames: [S_STORE_NAME, S_COMPANY_ID, S_STREET_NUMBER, S_STREET_NAME, S_STREET_TYPE, S_SUITE_NUMBER, S_CITY, S_COUNTY, S_STATE, S_ZIP, $f10, $f11, $f12, $f13, $f14]
+ projection: [S_STORE_NAME, S_COMPANY_ID, S_STREET_NUMBER, S_STREET_NAME, S_STREET_TYPE, S_SUITE_NUMBER, S_CITY, S_COUNTY, S_STATE, S_ZIP, CASE(<=(-(SR_RETURNED_DATE_SK, SS_SOLD_DATE_SK), 30), 1, 0), CASE(AND(>(-(SR_RETURNED_DATE_SK, SS_SOLD_DATE_SK), 30), <=(-(SR_RETURNED_DATE_SK, SS_SOLD_DATE_SK), 60)), 1, 0), CASE(AND(>(-(SR_RETURNED_DATE_SK, SS_SOLD_DATE_SK), 60), <=(-(SR_RETURNED_DATE_SK, SS_SOLD_DATE_SK), 90)), 1, 0), CASE(AND(>(-(SR_RETURNED_DATE_SK, SS_SOLD_DATE_SK), 90), [...]
+ est: (rows=31882)
+ HashJoin
+ predicate: =(SS_STORE_SK, S_STORE_SK)
+ type: inner
+ est: (rows=31882)
+ HashJoin
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ fieldNames: [D_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_STORE_SK, SS_TICKET_NUMBER, SR_RETURNED_DATE_SK, SR_ITEM_SK, SR_CUSTOMER_SK, SR_TICKET_NUMBER, D_DATE_SK$0, D_YEAR, D_MOY]
+ type: inner
+ est: (rows=31882)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK]
+ est: (rows=73049)
+ HashJoin
+ predicate: AND(=(SS_TICKET_NUMBER, SR_TICKET_NUMBER), =(SS_ITEM_SK, SR_ITEM_SK), =(SS_CUSTOMER_SK, SR_CUSTOMER_SK))
+ type: inner
+ est: (rows=31882)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_STORE_SK, SS_TICKET_NUMBER]
+ est: (rows=2880404)
+ HashJoin
+ predicate: =(SR_RETURNED_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=31882)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_RETURNED_DATE_SK, SR_ITEM_SK, SR_CUSTOMER_SK, SR_TICKET_NUMBER]
+ est: (rows=287514)
+ Exchange
+ distribution: single
+ est: (rows=8100)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(=(D_YEAR, 1998), =(D_MOY, 9))
+ fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
+ est: (rows=8100)
+ Exchange
+ distribution: single
+ est: (rows=12)
+ TableScan
+ table: PUBLIC.STORE
+ fieldNames: [S_STORE_SK, S_STORE_NAME, S_COMPANY_ID, S_STREET_NUMBER, S_STREET_NAME, S_STREET_TYPE, S_SUITE_NUMBER, S_CITY, S_COUNTY, S_STATE, S_ZIP]
+ est: (rows=12)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q50_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q50_colocated.plan
new file mode 100644
index 00000000000..9d93f05588f
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q50_colocated.plan
@@ -0,0 +1,66 @@
+Sort
+ collation: [S_STORE_NAME ASC, S_COMPANY_ID ASC, S_STREET_NUMBER ASC, S_STREET_NAME ASC, S_STREET_TYPE ASC, S_SUITE_NUMBER ASC, S_CITY ASC, S_COUNTY ASC, S_STATE ASC, S_ZIP ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ fieldNames: [S_STORE_NAME, S_COMPANY_ID, S_STREET_NUMBER, S_STREET_NAME, S_STREET_TYPE, S_SUITE_NUMBER, S_CITY, S_COUNTY, S_STATE, S_ZIP, 30 days, 31-60 days, 61-90 days, 91-120 days, >120 days]
+ group: [S_STORE_NAME, S_COMPANY_ID, S_STREET_NUMBER, S_STREET_NAME, S_STREET_TYPE, S_SUITE_NUMBER, S_CITY, S_COUNTY, S_STATE, S_ZIP]
+ aggregation: [SUM($f10), SUM($f11), SUM($f12), SUM($f13), SUM($f14)]
+ est: (rows=28459)
+ Project
+ fieldNames: [S_STORE_NAME, S_COMPANY_ID, S_STREET_NUMBER, S_STREET_NAME, S_STREET_TYPE, S_SUITE_NUMBER, S_CITY, S_COUNTY, S_STATE, S_ZIP, $f10, $f11, $f12, $f13, $f14]
+ projection: [S_STORE_NAME, S_COMPANY_ID, S_STREET_NUMBER, S_STREET_NAME, S_STREET_TYPE, S_SUITE_NUMBER, S_CITY, S_COUNTY, S_STATE, S_ZIP, CASE(<=(-(SR_RETURNED_DATE_SK, SS_SOLD_DATE_SK), 30), 1, 0), CASE(AND(>(-(SR_RETURNED_DATE_SK, SS_SOLD_DATE_SK), 30), <=(-(SR_RETURNED_DATE_SK, SS_SOLD_DATE_SK), 60)), 1, 0), CASE(AND(>(-(SR_RETURNED_DATE_SK, SS_SOLD_DATE_SK), 60), <=(-(SR_RETURNED_DATE_SK, SS_SOLD_DATE_SK), 90)), 1, 0), CASE(AND(>(-(SR_RETURNED_DATE_SK, SS_SOLD_DATE_SK), 90), [...]
+ est: (rows=31882)
+ HashJoin
+ predicate: =(SS_STORE_SK, S_STORE_SK)
+ type: inner
+ est: (rows=31882)
+ HashJoin
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ fieldNames: [D_DATE_SK, SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_STORE_SK, SS_TICKET_NUMBER, SR_RETURNED_DATE_SK, SR_ITEM_SK, SR_CUSTOMER_SK, SR_TICKET_NUMBER, D_DATE_SK$0, D_YEAR, D_MOY]
+ type: inner
+ est: (rows=31882)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK]
+ est: (rows=73049)
+ HashJoin
+ predicate: AND(=(SS_TICKET_NUMBER, SR_TICKET_NUMBER), =(SS_ITEM_SK, SR_ITEM_SK), =(SS_CUSTOMER_SK, SR_CUSTOMER_SK))
+ type: inner
+ est: (rows=31882)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_CUSTOMER_SK, SS_STORE_SK, SS_TICKET_NUMBER]
+ est: (rows=2880404)
+ HashJoin
+ predicate: =(SR_RETURNED_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=31882)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_RETURNED_DATE_SK, SR_ITEM_SK, SR_CUSTOMER_SK, SR_TICKET_NUMBER]
+ est: (rows=287514)
+ Exchange
+ distribution: single
+ est: (rows=8100)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(=(D_YEAR, 1998), =(D_MOY, 9))
+ fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
+ est: (rows=8100)
+ Exchange
+ distribution: single
+ est: (rows=12)
+ TableScan
+ table: PUBLIC.STORE
+ fieldNames: [S_STORE_SK, S_STORE_NAME, S_COMPANY_ID, S_STREET_NUMBER, S_STREET_NAME, S_STREET_TYPE, S_SUITE_NUMBER, S_CITY, S_COUNTY, S_STATE, S_ZIP]
+ est: (rows=12)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q58.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q58.plan
new file mode 100644
index 00000000000..7ab91f402e6
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q58.plan
@@ -0,0 +1,284 @@
+Limit
+ fetch: 100
+ est: (rows=100)
+ Project
+ fieldNames: [ITEM_ID, SS_ITEM_REV, SS_DEV, CS_ITEM_REV, CS_DEV, WS_ITEM_REV, WS_DEV, AVERAGE]
+ projection: [ITEM_ID, SS_ITEM_REV, *(/(SS_ITEM_REV, /(+(+(SS_ITEM_REV, CS_ITEM_REV), WS_ITEM_REV), 3)), 100), CS_ITEM_REV, *(/(CS_ITEM_REV, /(+(+(SS_ITEM_REV, CS_ITEM_REV), WS_ITEM_REV), 3)), 100), WS_ITEM_REV, *(/(WS_ITEM_REV, /(+(+(SS_ITEM_REV, CS_ITEM_REV), WS_ITEM_REV), 3)), 100), /(+(+(SS_ITEM_REV, CS_ITEM_REV), WS_ITEM_REV), 3)]
+ est: (rows=4847173278)
+ HashJoin
+ predicate: AND(>=(SS_ITEM_REV, *(0.9:DECIMAL(2, 1), WS_ITEM_REV)), <=(SS_ITEM_REV, *(1.1:DECIMAL(2, 1), WS_ITEM_REV)), >=(WS_ITEM_REV, *(0.9:DECIMAL(2, 1), SS_ITEM_REV)), <=(WS_ITEM_REV, *(1.1:DECIMAL(2, 1), SS_ITEM_REV)), >=(SS_ITEM_REV, *(0.9:DECIMAL(2, 1), CS_ITEM_REV)), <=(SS_ITEM_REV, *(1.1:DECIMAL(2, 1), CS_ITEM_REV)), >=(CS_ITEM_REV, *(0.9:DECIMAL(2, 1), SS_ITEM_REV)), <=(CS_ITEM_REV, *(1.1:DECIMAL(2, 1), SS_ITEM_REV)), =(ITEM_ID, ITEM_ID$0$0))
+ fieldNames: [ITEM_ID, SS_ITEM_REV, ITEM_ID$0, CS_ITEM_REV, ITEM_ID$0$0, WS_ITEM_REV]
+ type: inner
+ est: (rows=4847173278)
+ Sort
+ collation: [ITEM_ID ASC, SS_ITEM_REV ASC]
+ est: (rows=191835)
+ ColocatedHashAggregate
+ fieldNames: [ITEM_ID, SS_ITEM_REV]
+ group: [ITEM_ID]
+ aggregation: [SUM(SS_EXT_SALES_PRICE)]
+ est: (rows=191835)
+ Project
+ fieldNames: [ITEM_ID, SS_EXT_SALES_PRICE]
+ projection: [I_ITEM_ID, SS_EXT_SALES_PRICE]
+ est: (rows=959175)
+ HashJoin
+ predicate: =(SS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=959175)
+ MergeJoin
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=959175)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ Sort
+ collation: [SS_SOLD_DATE_SK ASC]
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_EXT_SALES_PRICE]
+ est: (rows=2880404)
+ HashJoin
+ predicate: =(D_DATE, D_DATE$0)
+ fieldNames: [D_DATE_SK, D_DATE, D_DATE$0]
+ type: inner
+ est: (rows=24012704)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE_SK ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=73049)
+ ColocatedHashAggregate
+ group: [D_DATE]
+ aggregation: []
+ est: (rows=2191)
+ Project
+ fieldNames: [D_DATE]
+ projection: [D_DATE]
+ est: (rows=10957)
+ HashJoin
+ predicate: =(D_WEEK_SEQ, $f0)
+ type: inner
+ est: (rows=10957)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE, D_WEEK_SEQ]
+ est: (rows=73049)
+ ReduceSortAggregate
+ fieldNames: [$f0]
+ collation: []
+ group: []
+ aggregation: [SINGLE_VALUE(_ACC0)]
+ est: (rows=1)
+ Exchange
+ distribution: single
+ est: (rows=1)
+ MapSortAggregate
+ fieldNames: [_ACC0]
+ collation: []
+ group: []
+ aggregation: [SINGLE_VALUE(D_WEEK_SEQ)]
+ est: (rows=1)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_DATE, 1998-02-21)
+ fieldNames: [D_WEEK_SEQ]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=18000)
+ TableScan
+ table: PUBLIC.ITEM
+ fieldNames: [I_ITEM_SK, I_ITEM_ID]
+ est: (rows=18000)
+ HashJoin
+ predicate: AND(>=(CS_ITEM_REV, *(0.9:DECIMAL(2, 1), WS_ITEM_REV)), <=(CS_ITEM_REV, *(1.1:DECIMAL(2, 1), WS_ITEM_REV)), >=(WS_ITEM_REV, *(0.9:DECIMAL(2, 1), CS_ITEM_REV)), <=(WS_ITEM_REV, *(1.1:DECIMAL(2, 1), CS_ITEM_REV)), =(ITEM_ID$0, ITEM_ID))
+ fieldNames: [ITEM_ID, CS_ITEM_REV, ITEM_ID$0, WS_ITEM_REV]
+ type: inner
+ est: (rows=43123065)
+ ColocatedHashAggregate
+ fieldNames: [ITEM_ID, CS_ITEM_REV]
+ group: [ITEM_ID]
+ aggregation: [SUM(CS_EXT_SALES_PRICE)]
+ est: (rows=96007)
+ Project
+ fieldNames: [ITEM_ID, CS_EXT_SALES_PRICE]
+ projection: [I_ITEM_ID, CS_EXT_SALES_PRICE]
+ est: (rows=480035)
+ HashJoin
+ predicate: =(CS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=480035)
+ MergeJoin
+ predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=480035)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ Sort
+ collation: [CS_SOLD_DATE_SK ASC]
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK, CS_EXT_SALES_PRICE]
+ est: (rows=1441548)
+ HashJoin
+ predicate: =(D_DATE, D_DATE$0)
+ fieldNames: [D_DATE_SK, D_DATE, D_DATE$0]
+ type: inner
+ est: (rows=24012704)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE_SK ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=73049)
+ ColocatedHashAggregate
+ group: [D_DATE]
+ aggregation: []
+ est: (rows=2191)
+ Project
+ fieldNames: [D_DATE]
+ projection: [D_DATE]
+ est: (rows=10957)
+ HashJoin
+ predicate: =(D_WEEK_SEQ, $f0)
+ type: inner
+ est: (rows=10957)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE, D_WEEK_SEQ]
+ est: (rows=73049)
+ ReduceSortAggregate
+ fieldNames: [$f0]
+ collation: []
+ group: []
+ aggregation: [SINGLE_VALUE(_ACC0)]
+ est: (rows=1)
+ Exchange
+ distribution: single
+ est: (rows=1)
+ MapSortAggregate
+ fieldNames: [_ACC0]
+ collation: []
+ group: []
+ aggregation: [SINGLE_VALUE(D_WEEK_SEQ)]
+ est: (rows=1)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_DATE, 1998-02-21)
+ fieldNames: [D_WEEK_SEQ]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=18000)
+ TableScan
+ table: PUBLIC.ITEM
+ fieldNames: [I_ITEM_SK, I_ITEM_ID]
+ est: (rows=18000)
+ ColocatedHashAggregate
+ fieldNames: [ITEM_ID, WS_ITEM_REV]
+ group: [ITEM_ID]
+ aggregation: [SUM(WS_EXT_SALES_PRICE)]
+ est: (rows=47911)
+ Project
+ fieldNames: [ITEM_ID, WS_EXT_SALES_PRICE]
+ projection: [I_ITEM_ID, WS_EXT_SALES_PRICE]
+ est: (rows=239555)
+ HashJoin
+ predicate: =(WS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=239555)
+ MergeJoin
+ predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=239555)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ Sort
+ collation: [WS_SOLD_DATE_SK ASC]
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK, WS_EXT_SALES_PRICE]
+ est: (rows=719384)
+ HashJoin
+ predicate: =(D_DATE, D_DATE$0)
+ fieldNames: [D_DATE_SK, D_DATE, D_DATE$0]
+ type: inner
+ est: (rows=24012704)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE_SK ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=73049)
+ ColocatedHashAggregate
+ group: [D_DATE]
+ aggregation: []
+ est: (rows=2191)
+ Project
+ fieldNames: [D_DATE]
+ projection: [D_DATE]
+ est: (rows=10957)
+ HashJoin
+ predicate: =(D_WEEK_SEQ, $f0)
+ type: inner
+ est: (rows=10957)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE, D_WEEK_SEQ]
+ est: (rows=73049)
+ ReduceSortAggregate
+ fieldNames: [$f0]
+ collation: []
+ group: []
+ aggregation: [SINGLE_VALUE(_ACC0)]
+ est: (rows=1)
+ Exchange
+ distribution: single
+ est: (rows=1)
+ MapSortAggregate
+ fieldNames: [_ACC0]
+ collation: []
+ group: []
+ aggregation: [SINGLE_VALUE(D_WEEK_SEQ)]
+ est: (rows=1)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_DATE, 1998-02-21)
+ fieldNames: [D_WEEK_SEQ]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=18000)
+ TableScan
+ table: PUBLIC.ITEM
+ fieldNames: [I_ITEM_SK, I_ITEM_ID]
+ est: (rows=18000)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q58_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q58_colocated.plan
new file mode 100644
index 00000000000..7ab91f402e6
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q58_colocated.plan
@@ -0,0 +1,284 @@
+Limit
+ fetch: 100
+ est: (rows=100)
+ Project
+ fieldNames: [ITEM_ID, SS_ITEM_REV, SS_DEV, CS_ITEM_REV, CS_DEV, WS_ITEM_REV, WS_DEV, AVERAGE]
+ projection: [ITEM_ID, SS_ITEM_REV, *(/(SS_ITEM_REV, /(+(+(SS_ITEM_REV, CS_ITEM_REV), WS_ITEM_REV), 3)), 100), CS_ITEM_REV, *(/(CS_ITEM_REV, /(+(+(SS_ITEM_REV, CS_ITEM_REV), WS_ITEM_REV), 3)), 100), WS_ITEM_REV, *(/(WS_ITEM_REV, /(+(+(SS_ITEM_REV, CS_ITEM_REV), WS_ITEM_REV), 3)), 100), /(+(+(SS_ITEM_REV, CS_ITEM_REV), WS_ITEM_REV), 3)]
+ est: (rows=4847173278)
+ HashJoin
+ predicate: AND(>=(SS_ITEM_REV, *(0.9:DECIMAL(2, 1), WS_ITEM_REV)), <=(SS_ITEM_REV, *(1.1:DECIMAL(2, 1), WS_ITEM_REV)), >=(WS_ITEM_REV, *(0.9:DECIMAL(2, 1), SS_ITEM_REV)), <=(WS_ITEM_REV, *(1.1:DECIMAL(2, 1), SS_ITEM_REV)), >=(SS_ITEM_REV, *(0.9:DECIMAL(2, 1), CS_ITEM_REV)), <=(SS_ITEM_REV, *(1.1:DECIMAL(2, 1), CS_ITEM_REV)), >=(CS_ITEM_REV, *(0.9:DECIMAL(2, 1), SS_ITEM_REV)), <=(CS_ITEM_REV, *(1.1:DECIMAL(2, 1), SS_ITEM_REV)), =(ITEM_ID, ITEM_ID$0$0))
+ fieldNames: [ITEM_ID, SS_ITEM_REV, ITEM_ID$0, CS_ITEM_REV, ITEM_ID$0$0, WS_ITEM_REV]
+ type: inner
+ est: (rows=4847173278)
+ Sort
+ collation: [ITEM_ID ASC, SS_ITEM_REV ASC]
+ est: (rows=191835)
+ ColocatedHashAggregate
+ fieldNames: [ITEM_ID, SS_ITEM_REV]
+ group: [ITEM_ID]
+ aggregation: [SUM(SS_EXT_SALES_PRICE)]
+ est: (rows=191835)
+ Project
+ fieldNames: [ITEM_ID, SS_EXT_SALES_PRICE]
+ projection: [I_ITEM_ID, SS_EXT_SALES_PRICE]
+ est: (rows=959175)
+ HashJoin
+ predicate: =(SS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=959175)
+ MergeJoin
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=959175)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ Sort
+ collation: [SS_SOLD_DATE_SK ASC]
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_EXT_SALES_PRICE]
+ est: (rows=2880404)
+ HashJoin
+ predicate: =(D_DATE, D_DATE$0)
+ fieldNames: [D_DATE_SK, D_DATE, D_DATE$0]
+ type: inner
+ est: (rows=24012704)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE_SK ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=73049)
+ ColocatedHashAggregate
+ group: [D_DATE]
+ aggregation: []
+ est: (rows=2191)
+ Project
+ fieldNames: [D_DATE]
+ projection: [D_DATE]
+ est: (rows=10957)
+ HashJoin
+ predicate: =(D_WEEK_SEQ, $f0)
+ type: inner
+ est: (rows=10957)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE, D_WEEK_SEQ]
+ est: (rows=73049)
+ ReduceSortAggregate
+ fieldNames: [$f0]
+ collation: []
+ group: []
+ aggregation: [SINGLE_VALUE(_ACC0)]
+ est: (rows=1)
+ Exchange
+ distribution: single
+ est: (rows=1)
+ MapSortAggregate
+ fieldNames: [_ACC0]
+ collation: []
+ group: []
+ aggregation: [SINGLE_VALUE(D_WEEK_SEQ)]
+ est: (rows=1)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_DATE, 1998-02-21)
+ fieldNames: [D_WEEK_SEQ]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=18000)
+ TableScan
+ table: PUBLIC.ITEM
+ fieldNames: [I_ITEM_SK, I_ITEM_ID]
+ est: (rows=18000)
+ HashJoin
+ predicate: AND(>=(CS_ITEM_REV, *(0.9:DECIMAL(2, 1), WS_ITEM_REV)), <=(CS_ITEM_REV, *(1.1:DECIMAL(2, 1), WS_ITEM_REV)), >=(WS_ITEM_REV, *(0.9:DECIMAL(2, 1), CS_ITEM_REV)), <=(WS_ITEM_REV, *(1.1:DECIMAL(2, 1), CS_ITEM_REV)), =(ITEM_ID$0, ITEM_ID))
+ fieldNames: [ITEM_ID, CS_ITEM_REV, ITEM_ID$0, WS_ITEM_REV]
+ type: inner
+ est: (rows=43123065)
+ ColocatedHashAggregate
+ fieldNames: [ITEM_ID, CS_ITEM_REV]
+ group: [ITEM_ID]
+ aggregation: [SUM(CS_EXT_SALES_PRICE)]
+ est: (rows=96007)
+ Project
+ fieldNames: [ITEM_ID, CS_EXT_SALES_PRICE]
+ projection: [I_ITEM_ID, CS_EXT_SALES_PRICE]
+ est: (rows=480035)
+ HashJoin
+ predicate: =(CS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=480035)
+ MergeJoin
+ predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=480035)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ Sort
+ collation: [CS_SOLD_DATE_SK ASC]
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK, CS_EXT_SALES_PRICE]
+ est: (rows=1441548)
+ HashJoin
+ predicate: =(D_DATE, D_DATE$0)
+ fieldNames: [D_DATE_SK, D_DATE, D_DATE$0]
+ type: inner
+ est: (rows=24012704)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE_SK ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=73049)
+ ColocatedHashAggregate
+ group: [D_DATE]
+ aggregation: []
+ est: (rows=2191)
+ Project
+ fieldNames: [D_DATE]
+ projection: [D_DATE]
+ est: (rows=10957)
+ HashJoin
+ predicate: =(D_WEEK_SEQ, $f0)
+ type: inner
+ est: (rows=10957)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE, D_WEEK_SEQ]
+ est: (rows=73049)
+ ReduceSortAggregate
+ fieldNames: [$f0]
+ collation: []
+ group: []
+ aggregation: [SINGLE_VALUE(_ACC0)]
+ est: (rows=1)
+ Exchange
+ distribution: single
+ est: (rows=1)
+ MapSortAggregate
+ fieldNames: [_ACC0]
+ collation: []
+ group: []
+ aggregation: [SINGLE_VALUE(D_WEEK_SEQ)]
+ est: (rows=1)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_DATE, 1998-02-21)
+ fieldNames: [D_WEEK_SEQ]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=18000)
+ TableScan
+ table: PUBLIC.ITEM
+ fieldNames: [I_ITEM_SK, I_ITEM_ID]
+ est: (rows=18000)
+ ColocatedHashAggregate
+ fieldNames: [ITEM_ID, WS_ITEM_REV]
+ group: [ITEM_ID]
+ aggregation: [SUM(WS_EXT_SALES_PRICE)]
+ est: (rows=47911)
+ Project
+ fieldNames: [ITEM_ID, WS_EXT_SALES_PRICE]
+ projection: [I_ITEM_ID, WS_EXT_SALES_PRICE]
+ est: (rows=239555)
+ HashJoin
+ predicate: =(WS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=239555)
+ MergeJoin
+ predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=239555)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ Sort
+ collation: [WS_SOLD_DATE_SK ASC]
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK, WS_EXT_SALES_PRICE]
+ est: (rows=719384)
+ HashJoin
+ predicate: =(D_DATE, D_DATE$0)
+ fieldNames: [D_DATE_SK, D_DATE, D_DATE$0]
+ type: inner
+ est: (rows=24012704)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE_SK ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=73049)
+ ColocatedHashAggregate
+ group: [D_DATE]
+ aggregation: []
+ est: (rows=2191)
+ Project
+ fieldNames: [D_DATE]
+ projection: [D_DATE]
+ est: (rows=10957)
+ HashJoin
+ predicate: =(D_WEEK_SEQ, $f0)
+ type: inner
+ est: (rows=10957)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE, D_WEEK_SEQ]
+ est: (rows=73049)
+ ReduceSortAggregate
+ fieldNames: [$f0]
+ collation: []
+ group: []
+ aggregation: [SINGLE_VALUE(_ACC0)]
+ est: (rows=1)
+ Exchange
+ distribution: single
+ est: (rows=1)
+ MapSortAggregate
+ fieldNames: [_ACC0]
+ collation: []
+ group: []
+ aggregation: [SINGLE_VALUE(D_WEEK_SEQ)]
+ est: (rows=1)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_DATE, 1998-02-21)
+ fieldNames: [D_WEEK_SEQ]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=18000)
+ TableScan
+ table: PUBLIC.ITEM
+ fieldNames: [I_ITEM_SK, I_ITEM_ID]
+ est: (rows=18000)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q5_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q5_colocated.plan
new file mode 100644
index 00000000000..7e621461f1f
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q5_colocated.plan
@@ -0,0 +1,205 @@
+Sort
+ collation: [CHANNEL ASC, ID ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ group: [CHANNEL, ID]
+ groupSets: [[CHANNEL, ID], [CHANNEL], []]
+ aggregation: [SUM(SALES), SUM(RETURNS), SUM(PROFIT)]
+ est: (rows=2770902750067)
+ UnionAll
+ est: (rows=4395725844132)
+ Project
+ projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
+ est: (rows=3124078767)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'store channel', ||(_UTF-8'store', S_STORE_ID), SALES, RETURNS, -(PROFIT, PROFIT_LOSS)]
+ est: (rows=3124078767)
+ ColocatedHashAggregate
+ fieldNames: [S_STORE_ID, SALES, PROFIT, RETURNS, PROFIT_LOSS]
+ group: [S_STORE_ID]
+ aggregation: [SUM(SALES_PRICE), SUM(PROFIT), SUM(RETURN_AMT), SUM(NET_LOSS)]
+ est: (rows=3124078767)
+ Project
+ fieldNames: [S_STORE_ID, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [S_STORE_ID, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ est: (rows=15620393834)
+ MergeJoin
+ predicate: =(STORE_SK, S_STORE_SK)
+ type: inner
+ est: (rows=15620393834)
+ HashJoin
+ predicate: =(DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=8677996574)
+ Exchange
+ distribution: single
+ est: (rows=3167918)
+ Sort
+ collation: [STORE_SK ASC]
+ est: (rows=3167918)
+ UnionAll
+ est: (rows=3167918)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [STORE_SK, DATE_SK, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [SS_STORE_SK, SS_SOLD_DATE_SK, SS_EXT_SALES_PRICE, SS_NET_PROFIT, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2)]
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [STORE_SK, DATE_SK, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [SR_STORE_SK, SR_RETURNED_DATE_SK, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2), SR_RETURN_AMT, SR_NET_LOSS]
+ est: (rows=287514)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-19), <=(D_DATE, +(2000-08-19, *(14, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=12)
+ Sort
+ collation: [S_STORE_SK ASC]
+ est: (rows=12)
+ TableScan
+ table: PUBLIC.STORE
+ fieldNames: [S_STORE_SK, S_STORE_ID]
+ est: (rows=12)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'catalog channel', ||(_UTF-8'catalog_page', CP_CATALOG_PAGE_ID), SALES, RETURNS, -(PROFIT, PROFIT_LOSS)]
+ est: (rows=1526926163852)
+ ColocatedHashAggregate
+ fieldNames: [CP_CATALOG_PAGE_ID, SALES, PROFIT, RETURNS, PROFIT_LOSS]
+ group: [CP_CATALOG_PAGE_ID]
+ aggregation: [SUM(SALES_PRICE), SUM(PROFIT), SUM(RETURN_AMT), SUM(NET_LOSS)]
+ est: (rows=1526926163852)
+ Project
+ fieldNames: [CP_CATALOG_PAGE_ID, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [CP_CATALOG_PAGE_ID, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ est: (rows=7634630819261)
+ MergeJoin
+ predicate: =(PAGE_SK, CP_CATALOG_PAGE_SK)
+ type: inner
+ est: (rows=7634630819261)
+ HashJoin
+ predicate: =(DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=4343534630)
+ Exchange
+ distribution: single
+ est: (rows=1585615)
+ Sort
+ collation: [PAGE_SK ASC]
+ est: (rows=1585615)
+ UnionAll
+ est: (rows=1585615)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [PAGE_SK, DATE_SK, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [CS_CATALOG_PAGE_SK, CS_SOLD_DATE_SK, CS_EXT_SALES_PRICE, CS_NET_PROFIT, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2)]
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [PAGE_SK, DATE_SK, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [CR_CATALOG_PAGE_SK, CR_RETURNED_DATE_SK, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2), CR_RETURN_AMOUNT, CR_NET_LOSS]
+ est: (rows=144067)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-19), <=(D_DATE, +(2000-08-19, *(14, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=11718)
+ Sort
+ collation: [CP_CATALOG_PAGE_SK ASC]
+ est: (rows=11718)
+ TableScan
+ table: PUBLIC.CATALOG_PAGE
+ fieldNames: [CP_CATALOG_PAGE_SK, CP_CATALOG_PAGE_ID]
+ est: (rows=11718)
+ Project
+ projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
+ est: (rows=2865675601513)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'web channel', ||(_UTF-8'web_site', WEB_SITE_ID), SALES, RETURNS, -(PROFIT, PROFIT_LOSS)]
+ est: (rows=2865675601513)
+ ColocatedHashAggregate
+ fieldNames: [WEB_SITE_ID, SALES, PROFIT, RETURNS, PROFIT_LOSS]
+ group: [WEB_SITE_ID]
+ aggregation: [SUM(SALES_PRICE), SUM(PROFIT), SUM(RETURN_AMT), SUM(NET_LOSS)]
+ est: (rows=2865675601513)
+ Project
+ fieldNames: [WEB_SITE_ID, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [WEB_SITE_ID, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ est: (rows=14328378007564)
+ MergeJoin
+ predicate: =(WSR_WEB_SITE_SK, WEB_SITE_SK)
+ type: inner
+ est: (rows=14328378007564)
+ HashJoin
+ predicate: =(DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=3184084001681)
+ Sort
+ collation: [WSR_WEB_SITE_SK ASC]
+ est: (rows=1162355497)
+ UnionAll
+ est: (rows=1162355497)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WSR_WEB_SITE_SK, DATE_SK, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [WS_WEB_SITE_SK, WS_SOLD_DATE_SK, WS_EXT_SALES_PRICE, WS_NET_PROFIT, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2)]
+ est: (rows=719384)
+ Project
+ fieldNames: [WSR_WEB_SITE_SK, DATE_SK, SALES_PRICE, PROFIT, RETURN_AMT, NET_LOSS]
+ projection: [WS_WEB_SITE_SK, WR_RETURNED_DATE_SK, 0.00:DECIMAL(7, 2), 0.00:DECIMAL(7, 2), WR_RETURN_AMT, WR_NET_LOSS]
+ est: (rows=1161636113)
+ HashJoin
+ predicate: AND(=(WR_ITEM_SK, WS_ITEM_SK), =(WR_ORDER_NUMBER, WS_ORDER_NUMBER))
+ type: left
+ est: (rows=1161636113)
+ Exchange
+ distribution: single
+ est: (rows=71763)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ fieldNames: [WR_RETURNED_DATE_SK, WR_ITEM_SK, WR_ORDER_NUMBER, WR_RETURN_AMT, WR_NET_LOSS]
+ est: (rows=71763)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_ITEM_SK, WS_WEB_SITE_SK, WS_ORDER_NUMBER]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-19), <=(D_DATE, +(2000-08-19, *(14, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=30)
+ Sort
+ collation: [WEB_SITE_SK ASC]
+ est: (rows=30)
+ TableScan
+ table: PUBLIC.WEB_SITE
+ fieldNames: [WEB_SITE_SK, WEB_SITE_ID]
+ est: (rows=30)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q62.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q62.plan
new file mode 100644
index 00000000000..0ffb3577aa8
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q62.plan
@@ -0,0 +1,65 @@
+Sort
+ collation: [EXPR$0 ASC, SM_TYPE ASC, WEB_NAME ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ fieldNames: [EXPR$0, SM_TYPE, WEB_NAME, 30 days, 31-60 days, 61-90 days, 91-120 days, >120 days]
+ group: [EXPR$0, SM_TYPE, WEB_NAME]
+ aggregation: [SUM($f3), SUM($f4), SUM($f5), SUM($f6), SUM($f7)]
+ est: (rows=87765)
+ Project
+ fieldNames: [EXPR$0, SM_TYPE, WEB_NAME, $f3, $f4, $f5, $f6, $f7]
+ projection: [SUBSTR(W_WAREHOUSE_NAME, 1, 20), SM_TYPE, WEB_NAME, CASE(<=(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), 30), 1, 0), CASE(AND(>(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), 30), <=(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), 60)), 1, 0), CASE(AND(>(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), 60), <=(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), 90)), 1, 0), CASE(AND(>(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), 90), <=(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), 120)), 1, 0), CASE(>(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), [...]
+ est: (rows=179846)
+ HashJoin
+ predicate: =(WS_WAREHOUSE_SK, W_WAREHOUSE_SK)
+ type: inner
+ est: (rows=179846)
+ HashJoin
+ predicate: =(WS_SHIP_MODE_SK, SM_SHIP_MODE_SK)
+ type: inner
+ est: (rows=179846)
+ HashJoin
+ predicate: =(WS_WEB_SITE_SK, WEB_SITE_SK)
+ type: inner
+ est: (rows=179846)
+ HashJoin
+ predicate: =(WS_SHIP_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=179846)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_SHIP_DATE_SK, WS_WEB_SITE_SK, WS_SHIP_MODE_SK, WS_WAREHOUSE_SK]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_MONTH_SEQ, 1215), <=(D_MONTH_SEQ, +(1215, 11)))
+ fieldNames: [D_DATE_SK, D_MONTH_SEQ]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=30)
+ TableScan
+ table: PUBLIC.WEB_SITE
+ fieldNames: [WEB_SITE_SK, WEB_NAME]
+ est: (rows=30)
+ Exchange
+ distribution: single
+ est: (rows=20)
+ TableScan
+ table: PUBLIC.SHIP_MODE
+ fieldNames: [SM_SHIP_MODE_SK, SM_TYPE]
+ est: (rows=20)
+ Exchange
+ distribution: single
+ est: (rows=5)
+ TableScan
+ table: PUBLIC.WAREHOUSE
+ fieldNames: [W_WAREHOUSE_SK, W_WAREHOUSE_NAME]
+ est: (rows=5)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q62_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q62_colocated.plan
new file mode 100644
index 00000000000..0ffb3577aa8
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q62_colocated.plan
@@ -0,0 +1,65 @@
+Sort
+ collation: [EXPR$0 ASC, SM_TYPE ASC, WEB_NAME ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ fieldNames: [EXPR$0, SM_TYPE, WEB_NAME, 30 days, 31-60 days, 61-90 days, 91-120 days, >120 days]
+ group: [EXPR$0, SM_TYPE, WEB_NAME]
+ aggregation: [SUM($f3), SUM($f4), SUM($f5), SUM($f6), SUM($f7)]
+ est: (rows=87765)
+ Project
+ fieldNames: [EXPR$0, SM_TYPE, WEB_NAME, $f3, $f4, $f5, $f6, $f7]
+ projection: [SUBSTR(W_WAREHOUSE_NAME, 1, 20), SM_TYPE, WEB_NAME, CASE(<=(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), 30), 1, 0), CASE(AND(>(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), 30), <=(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), 60)), 1, 0), CASE(AND(>(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), 60), <=(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), 90)), 1, 0), CASE(AND(>(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), 90), <=(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), 120)), 1, 0), CASE(>(-(WS_SHIP_DATE_SK, WS_SOLD_DATE_SK), [...]
+ est: (rows=179846)
+ HashJoin
+ predicate: =(WS_WAREHOUSE_SK, W_WAREHOUSE_SK)
+ type: inner
+ est: (rows=179846)
+ HashJoin
+ predicate: =(WS_SHIP_MODE_SK, SM_SHIP_MODE_SK)
+ type: inner
+ est: (rows=179846)
+ HashJoin
+ predicate: =(WS_WEB_SITE_SK, WEB_SITE_SK)
+ type: inner
+ est: (rows=179846)
+ HashJoin
+ predicate: =(WS_SHIP_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=179846)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_SHIP_DATE_SK, WS_WEB_SITE_SK, WS_SHIP_MODE_SK, WS_WAREHOUSE_SK]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_MONTH_SEQ, 1215), <=(D_MONTH_SEQ, +(1215, 11)))
+ fieldNames: [D_DATE_SK, D_MONTH_SEQ]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=30)
+ TableScan
+ table: PUBLIC.WEB_SITE
+ fieldNames: [WEB_SITE_SK, WEB_NAME]
+ est: (rows=30)
+ Exchange
+ distribution: single
+ est: (rows=20)
+ TableScan
+ table: PUBLIC.SHIP_MODE
+ fieldNames: [SM_SHIP_MODE_SK, SM_TYPE]
+ est: (rows=20)
+ Exchange
+ distribution: single
+ est: (rows=5)
+ TableScan
+ table: PUBLIC.WAREHOUSE
+ fieldNames: [W_WAREHOUSE_SK, W_WAREHOUSE_NAME]
+ est: (rows=5)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q66.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q66.plan
new file mode 100644
index 00000000000..ab007a115ea
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q66.plan
@@ -0,0 +1,152 @@
+Limit
+ fetch: 100
+ est: (rows=100)
+ ColocatedSortAggregate
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, SHIP_CARRIERS, year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, JAN_SALES_PER_SQ_FOOT, FEB_SALES_PER_SQ_FOOT, MAR_SALES_PER_SQ_FOOT, APR_SALES_PER_SQ_FOOT, MAY_SALES_PER_SQ_FOOT, JUN_SALES_PER_SQ_FOOT, JUL_SALES_PER_SQ_FOOT, AUG_SALES_PER_SQ_FOOT, SEP_SALES_PER_SQ_FOOT, OCT_SALES_PER_SQ_FOOT, NOV_SALES_PER_S [...]
+ collation: [W_WAREHOUSE_NAME ASC, W_WAREHOUSE_SQ_FT ASC, W_CITY ASC, W_COUNTY ASC, W_STATE ASC, W_COUNTRY ASC, SHIP_CARRIERS ASC, year ASC]
+ group: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, SHIP_CARRIERS, year]
+ aggregation: [SUM(JAN_SALES), SUM(FEB_SALES), SUM(MAR_SALES), SUM(APR_SALES), SUM(MAY_SALES), SUM(JUN_SALES), SUM(JUL_SALES), SUM(AUG_SALES), SUM(SEP_SALES), SUM(OCT_SALES), SUM(NOV_SALES), SUM(DEC_SALES), SUM($f20), SUM($f21), SUM($f22), SUM($f23), SUM($f24), SUM($f25), SUM($f26), SUM($f27), SUM($f28), SUM($f29), SUM($f30), SUM($f31), SUM(JAN_NET), SUM(FEB_NET), SUM(MAR_NET), SUM(APR_NET), SUM(MAY_NET), SUM(JUN_NET), SUM(JUL_NET), SUM(AUG_NET), SUM(SEP_NET), SUM(OCT_NET), SUM(NOV_ [...]
+ est: (rows=80809)
+ Project
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, SHIP_CARRIERS, year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, $f20, $f21, $f22, $f23, $f24, $f25, $f26, $f27, $f28, $f29, $f30, $f31, JAN_NET, FEB_NET, MAR_NET, APR_NET, MAY_NET, JUN_NET, JUL_NET, AUG_NET, SEP_NET, OCT_NET, NOV_NET, DEC_NET]
+ projection: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, SHIP_CARRIERS, year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, /(JAN_SALES, W_WAREHOUSE_SQ_FT), /(FEB_SALES, W_WAREHOUSE_SQ_FT), /(MAR_SALES, W_WAREHOUSE_SQ_FT), /(APR_SALES, W_WAREHOUSE_SQ_FT), /(MAY_SALES, W_WAREHOUSE_SQ_FT), /(JUN_SALES, W_WAREHOUSE_SQ_FT), /(JUL_SALES, W_WAREHOUSE_SQ_FT), /(AUG_SALES, [...]
+ est: (rows=80819)
+ Sort
+ collation: [W_WAREHOUSE_NAME ASC, W_WAREHOUSE_SQ_FT ASC, W_CITY ASC, W_COUNTY ASC, W_STATE ASC, W_COUNTRY ASC, SHIP_CARRIERS ASC, year ASC]
+ est: (rows=80819)
+ UnionAll
+ est: (rows=80819)
+ Project
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, SHIP_CARRIERS, year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, JAN_NET, FEB_NET, MAR_NET, APR_NET, MAY_NET, JUN_NET, JUL_NET, AUG_NET, SEP_NET, OCT_NET, NOV_NET, DEC_NET]
+ projection: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, ||(||(_UTF-8'MSC', _UTF-8','), _UTF-8'GERMA'), year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, JAN_NET, FEB_NET, MAR_NET, APR_NET, MAY_NET, JUN_NET, JUL_NET, AUG_NET, SEP_NET, OCT_NET, NOV_NET, DEC_NET]
+ est: (rows=26905)
+ ColocatedHashAggregate
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, JAN_NET, FEB_NET, MAR_NET, APR_NET, MAY_NET, JUN_NET, JUL_NET, AUG_NET, SEP_NET, OCT_NET, NOV_NET, DEC_NET]
+ group: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, year]
+ aggregation: [SUM($f7), SUM($f8), SUM($f9), SUM($f10), SUM($f11), SUM($f12), SUM($f13), SUM($f14), SUM($f15), SUM($f16), SUM($f17), SUM($f18), SUM($f19), SUM($f20), SUM($f21), SUM($f22), SUM($f23), SUM($f24), SUM($f25), SUM($f26), SUM($f27), SUM($f28), SUM($f29), SUM($f30)]
+ est: (rows=26905)
+ Project
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, year, $f7, $f8, $f9, $f10, $f11, $f12, $f13, $f14, $f15, $f16, $f17, $f18, $f19, $f20, $f21, $f22, $f23, $f24, $f25, $f26, $f27, $f28, $f29, $f30]
+ projection: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, D_YEAR, CASE(=(D_MOY, 1), *(WS_SALES_PRICE, WS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 2), *(WS_SALES_PRICE, WS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 3), *(WS_SALES_PRICE, WS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 4), *(WS_SALES_PRICE, WS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 5), *(WS_SALES_PRICE, WS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 6), [...]
+ est: (rows=34045)
+ HashJoin
+ predicate: =(WS_WAREHOUSE_SK, W_WAREHOUSE_SK)
+ type: inner
+ est: (rows=34045)
+ HashJoin
+ predicate: =(WS_SHIP_MODE_SK, SM_SHIP_MODE_SK)
+ type: inner
+ est: (rows=34045)
+ HashJoin
+ predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=59889)
+ HashJoin
+ predicate: =(WS_SOLD_TIME_SK, T_TIME_SK)
+ type: inner
+ est: (rows=179846)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_SOLD_TIME_SK, WS_SHIP_MODE_SK, WS_WAREHOUSE_SK, WS_QUANTITY, WS_SALES_PRICE, WS_NET_PAID_INC_SHIP_TAX]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=21600)
+ TableScan
+ table: PUBLIC.TIME_DIM
+ predicate: AND(>=(T_TIME, 9453), <=(T_TIME, +(9453, 28800)))
+ fieldNames: [T_TIME_SK, T_TIME]
+ est: (rows=21600)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, 2001)
+ fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=11)
+ TableScan
+ table: PUBLIC.SHIP_MODE
+ predicate: SEARCH(SM_CARRIER, Sarg[_UTF-8'GERMA':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'MSC':VARCHAR(20) CHARACTER SET "UTF-8"]:VARCHAR(20) CHARACTER SET "UTF-8")
+ fieldNames: [SM_SHIP_MODE_SK, SM_CARRIER]
+ est: (rows=11)
+ Exchange
+ distribution: single
+ est: (rows=5)
+ TableScan
+ table: PUBLIC.WAREHOUSE
+ fieldNames: [W_WAREHOUSE_SK, W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY]
+ est: (rows=5)
+ Project
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, SHIP_CARRIERS, year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, JAN_NET, FEB_NET, MAR_NET, APR_NET, MAY_NET, JUN_NET, JUL_NET, AUG_NET, SEP_NET, OCT_NET, NOV_NET, DEC_NET]
+ projection: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, ||(||(_UTF-8'MSC', _UTF-8','), _UTF-8'GERMA'), year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, JAN_NET, FEB_NET, MAR_NET, APR_NET, MAY_NET, JUN_NET, JUL_NET, AUG_NET, SEP_NET, OCT_NET, NOV_NET, DEC_NET]
+ est: (rows=53914)
+ ColocatedHashAggregate
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, JAN_NET, FEB_NET, MAR_NET, APR_NET, MAY_NET, JUN_NET, JUL_NET, AUG_NET, SEP_NET, OCT_NET, NOV_NET, DEC_NET]
+ group: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, year]
+ aggregation: [SUM($f7), SUM($f8), SUM($f9), SUM($f10), SUM($f11), SUM($f12), SUM($f13), SUM($f14), SUM($f15), SUM($f16), SUM($f17), SUM($f18), SUM($f19), SUM($f20), SUM($f21), SUM($f22), SUM($f23), SUM($f24), SUM($f25), SUM($f26), SUM($f27), SUM($f28), SUM($f29), SUM($f30)]
+ est: (rows=53914)
+ Project
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, year, $f7, $f8, $f9, $f10, $f11, $f12, $f13, $f14, $f15, $f16, $f17, $f18, $f19, $f20, $f21, $f22, $f23, $f24, $f25, $f26, $f27, $f28, $f29, $f30]
+ projection: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, D_YEAR, CASE(=(D_MOY, 1), *(CS_EXT_LIST_PRICE, CS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 2), *(CS_EXT_LIST_PRICE, CS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 3), *(CS_EXT_LIST_PRICE, CS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 4), *(CS_EXT_LIST_PRICE, CS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 5), *(CS_EXT_LIST_PRICE, CS_QUANTITY), 0.00:DECIMAL(17, 2)), CAS [...]
+ est: (rows=68221)
+ HashJoin
+ predicate: =(CS_WAREHOUSE_SK, W_WAREHOUSE_SK)
+ type: inner
+ est: (rows=68221)
+ HashJoin
+ predicate: =(CS_SHIP_MODE_SK, SM_SHIP_MODE_SK)
+ type: inner
+ est: (rows=68221)
+ HashJoin
+ predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=120009)
+ HashJoin
+ predicate: =(CS_SOLD_TIME_SK, T_TIME_SK)
+ type: inner
+ est: (rows=360387)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_SOLD_TIME_SK, CS_SHIP_MODE_SK, CS_WAREHOUSE_SK, CS_QUANTITY, CS_EXT_LIST_PRICE, CS_NET_PAID_INC_SHIP]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=21600)
+ TableScan
+ table: PUBLIC.TIME_DIM
+ predicate: AND(>=(T_TIME, 9453), <=(T_TIME, +(9453, 28800)))
+ fieldNames: [T_TIME_SK, T_TIME]
+ est: (rows=21600)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, 2001)
+ fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=11)
+ TableScan
+ table: PUBLIC.SHIP_MODE
+ predicate: SEARCH(SM_CARRIER, Sarg[_UTF-8'GERMA':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'MSC':VARCHAR(20) CHARACTER SET "UTF-8"]:VARCHAR(20) CHARACTER SET "UTF-8")
+ fieldNames: [SM_SHIP_MODE_SK, SM_CARRIER]
+ est: (rows=11)
+ Exchange
+ distribution: single
+ est: (rows=5)
+ TableScan
+ table: PUBLIC.WAREHOUSE
+ fieldNames: [W_WAREHOUSE_SK, W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY]
+ est: (rows=5)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q66_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q66_colocated.plan
new file mode 100644
index 00000000000..ab007a115ea
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q66_colocated.plan
@@ -0,0 +1,152 @@
+Limit
+ fetch: 100
+ est: (rows=100)
+ ColocatedSortAggregate
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, SHIP_CARRIERS, year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, JAN_SALES_PER_SQ_FOOT, FEB_SALES_PER_SQ_FOOT, MAR_SALES_PER_SQ_FOOT, APR_SALES_PER_SQ_FOOT, MAY_SALES_PER_SQ_FOOT, JUN_SALES_PER_SQ_FOOT, JUL_SALES_PER_SQ_FOOT, AUG_SALES_PER_SQ_FOOT, SEP_SALES_PER_SQ_FOOT, OCT_SALES_PER_SQ_FOOT, NOV_SALES_PER_S [...]
+ collation: [W_WAREHOUSE_NAME ASC, W_WAREHOUSE_SQ_FT ASC, W_CITY ASC, W_COUNTY ASC, W_STATE ASC, W_COUNTRY ASC, SHIP_CARRIERS ASC, year ASC]
+ group: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, SHIP_CARRIERS, year]
+ aggregation: [SUM(JAN_SALES), SUM(FEB_SALES), SUM(MAR_SALES), SUM(APR_SALES), SUM(MAY_SALES), SUM(JUN_SALES), SUM(JUL_SALES), SUM(AUG_SALES), SUM(SEP_SALES), SUM(OCT_SALES), SUM(NOV_SALES), SUM(DEC_SALES), SUM($f20), SUM($f21), SUM($f22), SUM($f23), SUM($f24), SUM($f25), SUM($f26), SUM($f27), SUM($f28), SUM($f29), SUM($f30), SUM($f31), SUM(JAN_NET), SUM(FEB_NET), SUM(MAR_NET), SUM(APR_NET), SUM(MAY_NET), SUM(JUN_NET), SUM(JUL_NET), SUM(AUG_NET), SUM(SEP_NET), SUM(OCT_NET), SUM(NOV_ [...]
+ est: (rows=80809)
+ Project
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, SHIP_CARRIERS, year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, $f20, $f21, $f22, $f23, $f24, $f25, $f26, $f27, $f28, $f29, $f30, $f31, JAN_NET, FEB_NET, MAR_NET, APR_NET, MAY_NET, JUN_NET, JUL_NET, AUG_NET, SEP_NET, OCT_NET, NOV_NET, DEC_NET]
+ projection: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, SHIP_CARRIERS, year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, /(JAN_SALES, W_WAREHOUSE_SQ_FT), /(FEB_SALES, W_WAREHOUSE_SQ_FT), /(MAR_SALES, W_WAREHOUSE_SQ_FT), /(APR_SALES, W_WAREHOUSE_SQ_FT), /(MAY_SALES, W_WAREHOUSE_SQ_FT), /(JUN_SALES, W_WAREHOUSE_SQ_FT), /(JUL_SALES, W_WAREHOUSE_SQ_FT), /(AUG_SALES, [...]
+ est: (rows=80819)
+ Sort
+ collation: [W_WAREHOUSE_NAME ASC, W_WAREHOUSE_SQ_FT ASC, W_CITY ASC, W_COUNTY ASC, W_STATE ASC, W_COUNTRY ASC, SHIP_CARRIERS ASC, year ASC]
+ est: (rows=80819)
+ UnionAll
+ est: (rows=80819)
+ Project
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, SHIP_CARRIERS, year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, JAN_NET, FEB_NET, MAR_NET, APR_NET, MAY_NET, JUN_NET, JUL_NET, AUG_NET, SEP_NET, OCT_NET, NOV_NET, DEC_NET]
+ projection: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, ||(||(_UTF-8'MSC', _UTF-8','), _UTF-8'GERMA'), year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, JAN_NET, FEB_NET, MAR_NET, APR_NET, MAY_NET, JUN_NET, JUL_NET, AUG_NET, SEP_NET, OCT_NET, NOV_NET, DEC_NET]
+ est: (rows=26905)
+ ColocatedHashAggregate
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, JAN_NET, FEB_NET, MAR_NET, APR_NET, MAY_NET, JUN_NET, JUL_NET, AUG_NET, SEP_NET, OCT_NET, NOV_NET, DEC_NET]
+ group: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, year]
+ aggregation: [SUM($f7), SUM($f8), SUM($f9), SUM($f10), SUM($f11), SUM($f12), SUM($f13), SUM($f14), SUM($f15), SUM($f16), SUM($f17), SUM($f18), SUM($f19), SUM($f20), SUM($f21), SUM($f22), SUM($f23), SUM($f24), SUM($f25), SUM($f26), SUM($f27), SUM($f28), SUM($f29), SUM($f30)]
+ est: (rows=26905)
+ Project
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, year, $f7, $f8, $f9, $f10, $f11, $f12, $f13, $f14, $f15, $f16, $f17, $f18, $f19, $f20, $f21, $f22, $f23, $f24, $f25, $f26, $f27, $f28, $f29, $f30]
+ projection: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, D_YEAR, CASE(=(D_MOY, 1), *(WS_SALES_PRICE, WS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 2), *(WS_SALES_PRICE, WS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 3), *(WS_SALES_PRICE, WS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 4), *(WS_SALES_PRICE, WS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 5), *(WS_SALES_PRICE, WS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 6), [...]
+ est: (rows=34045)
+ HashJoin
+ predicate: =(WS_WAREHOUSE_SK, W_WAREHOUSE_SK)
+ type: inner
+ est: (rows=34045)
+ HashJoin
+ predicate: =(WS_SHIP_MODE_SK, SM_SHIP_MODE_SK)
+ type: inner
+ est: (rows=34045)
+ HashJoin
+ predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=59889)
+ HashJoin
+ predicate: =(WS_SOLD_TIME_SK, T_TIME_SK)
+ type: inner
+ est: (rows=179846)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_SOLD_TIME_SK, WS_SHIP_MODE_SK, WS_WAREHOUSE_SK, WS_QUANTITY, WS_SALES_PRICE, WS_NET_PAID_INC_SHIP_TAX]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=21600)
+ TableScan
+ table: PUBLIC.TIME_DIM
+ predicate: AND(>=(T_TIME, 9453), <=(T_TIME, +(9453, 28800)))
+ fieldNames: [T_TIME_SK, T_TIME]
+ est: (rows=21600)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, 2001)
+ fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=11)
+ TableScan
+ table: PUBLIC.SHIP_MODE
+ predicate: SEARCH(SM_CARRIER, Sarg[_UTF-8'GERMA':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'MSC':VARCHAR(20) CHARACTER SET "UTF-8"]:VARCHAR(20) CHARACTER SET "UTF-8")
+ fieldNames: [SM_SHIP_MODE_SK, SM_CARRIER]
+ est: (rows=11)
+ Exchange
+ distribution: single
+ est: (rows=5)
+ TableScan
+ table: PUBLIC.WAREHOUSE
+ fieldNames: [W_WAREHOUSE_SK, W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY]
+ est: (rows=5)
+ Project
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, SHIP_CARRIERS, year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, JAN_NET, FEB_NET, MAR_NET, APR_NET, MAY_NET, JUN_NET, JUL_NET, AUG_NET, SEP_NET, OCT_NET, NOV_NET, DEC_NET]
+ projection: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, ||(||(_UTF-8'MSC', _UTF-8','), _UTF-8'GERMA'), year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, JAN_NET, FEB_NET, MAR_NET, APR_NET, MAY_NET, JUN_NET, JUL_NET, AUG_NET, SEP_NET, OCT_NET, NOV_NET, DEC_NET]
+ est: (rows=53914)
+ ColocatedHashAggregate
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, year, JAN_SALES, FEB_SALES, MAR_SALES, APR_SALES, MAY_SALES, JUN_SALES, JUL_SALES, AUG_SALES, SEP_SALES, OCT_SALES, NOV_SALES, DEC_SALES, JAN_NET, FEB_NET, MAR_NET, APR_NET, MAY_NET, JUN_NET, JUL_NET, AUG_NET, SEP_NET, OCT_NET, NOV_NET, DEC_NET]
+ group: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, year]
+ aggregation: [SUM($f7), SUM($f8), SUM($f9), SUM($f10), SUM($f11), SUM($f12), SUM($f13), SUM($f14), SUM($f15), SUM($f16), SUM($f17), SUM($f18), SUM($f19), SUM($f20), SUM($f21), SUM($f22), SUM($f23), SUM($f24), SUM($f25), SUM($f26), SUM($f27), SUM($f28), SUM($f29), SUM($f30)]
+ est: (rows=53914)
+ Project
+ fieldNames: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, year, $f7, $f8, $f9, $f10, $f11, $f12, $f13, $f14, $f15, $f16, $f17, $f18, $f19, $f20, $f21, $f22, $f23, $f24, $f25, $f26, $f27, $f28, $f29, $f30]
+ projection: [W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY, D_YEAR, CASE(=(D_MOY, 1), *(CS_EXT_LIST_PRICE, CS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 2), *(CS_EXT_LIST_PRICE, CS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 3), *(CS_EXT_LIST_PRICE, CS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 4), *(CS_EXT_LIST_PRICE, CS_QUANTITY), 0.00:DECIMAL(17, 2)), CASE(=(D_MOY, 5), *(CS_EXT_LIST_PRICE, CS_QUANTITY), 0.00:DECIMAL(17, 2)), CAS [...]
+ est: (rows=68221)
+ HashJoin
+ predicate: =(CS_WAREHOUSE_SK, W_WAREHOUSE_SK)
+ type: inner
+ est: (rows=68221)
+ HashJoin
+ predicate: =(CS_SHIP_MODE_SK, SM_SHIP_MODE_SK)
+ type: inner
+ est: (rows=68221)
+ HashJoin
+ predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=120009)
+ HashJoin
+ predicate: =(CS_SOLD_TIME_SK, T_TIME_SK)
+ type: inner
+ est: (rows=360387)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_SOLD_TIME_SK, CS_SHIP_MODE_SK, CS_WAREHOUSE_SK, CS_QUANTITY, CS_EXT_LIST_PRICE, CS_NET_PAID_INC_SHIP]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=21600)
+ TableScan
+ table: PUBLIC.TIME_DIM
+ predicate: AND(>=(T_TIME, 9453), <=(T_TIME, +(9453, 28800)))
+ fieldNames: [T_TIME_SK, T_TIME]
+ est: (rows=21600)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, 2001)
+ fieldNames: [D_DATE_SK, D_YEAR, D_MOY]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=11)
+ TableScan
+ table: PUBLIC.SHIP_MODE
+ predicate: SEARCH(SM_CARRIER, Sarg[_UTF-8'GERMA':VARCHAR(20) CHARACTER SET "UTF-8", _UTF-8'MSC':VARCHAR(20) CHARACTER SET "UTF-8"]:VARCHAR(20) CHARACTER SET "UTF-8")
+ fieldNames: [SM_SHIP_MODE_SK, SM_CARRIER]
+ est: (rows=11)
+ Exchange
+ distribution: single
+ est: (rows=5)
+ TableScan
+ table: PUBLIC.WAREHOUSE
+ fieldNames: [W_WAREHOUSE_SK, W_WAREHOUSE_NAME, W_WAREHOUSE_SQ_FT, W_CITY, W_COUNTY, W_STATE, W_COUNTRY]
+ est: (rows=5)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q74.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q74.plan
new file mode 100644
index 00000000000..405bc091944
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q74.plan
@@ -0,0 +1,255 @@
+Limit
+ fetch: 100
+ est: (rows=100)
+ Project
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME]
+ projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME]
+ est: (rows=874578399118912500)
+ HashJoin
+ predicate: AND(>(CASE(>(YEAR_TOTAL$0, 0.00), /(YEAR_TOTAL$0$0$0, YEAR_TOTAL$0), null:DECIMAL(32767, 0)), CASE(>(YEAR_TOTAL$0$0, 0.00), /(YEAR_TOTAL, YEAR_TOTAL$0$0), null:DECIMAL(32767, 0))), =(CUSTOMER_ID, CUSTOMER_ID$0$0))
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, year$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, year$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0, CUSTOMER_ID$0$0$0, year$0$0$0, YEAR_TOTAL$0$0$0, SALE_TYPE$0$0$0]
+ type: inner
+ est: (rows=874578399118912500)
+ Sort
+ collation: [CUSTOMER_LAST_NAME ASC, CUSTOMER_ID ASC, CUSTOMER_FIRST_NAME ASC]
+ est: (rows=321922)
+ UnionAll
+ est: (rows=321922)
+ Project
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, _UTF-8's']
+ est: (rows=321921)
+ ColocatedHashAggregate
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL]
+ group: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year]
+ aggregation: [SUM(SS_NET_PAID)]
+ est: (rows=321921)
+ Project
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, SS_NET_PAID]
+ projection: [C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, D_YEAR, SS_NET_PAID]
+ est: (rows=545259)
+ HashJoin
+ predicate: =(C_CUSTOMER_SK, SS_CUSTOMER_SK)
+ type: inner
+ est: (rows=545259)
+ HashJoin
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=545259)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_CUSTOMER_SK, SS_NET_PAID]
+ est: (rows=2880404)
+ Exchange
+ distribution: single
+ est: (rows=13828)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(OR(=(D_YEAR, 1998), =(D_YEAR, +(1998, 1))), =(D_YEAR, +(1998, 1)))
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=13828)
+ Exchange
+ distribution: single
+ est: (rows=100000)
+ TableScan
+ table: PUBLIC.CUSTOMER
+ fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME]
+ est: (rows=100000)
+ Project
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, CAST(WS_NET_PAID):DECIMAL(32767, 2), _UTF-8'w']
+ est: (rows=1)
+ Values
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, WS_NET_PAID]
+ tuples: []
+ est: (rows=1)
+ MergeJoin
+ predicate: =(CUSTOMER_ID$0, CUSTOMER_ID)
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, year$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, year$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0]
+ type: inner
+ est: (rows=36223234343827)
+ Sort
+ collation: [CUSTOMER_ID ASC]
+ est: (rows=70718)
+ UnionAll
+ est: (rows=70718)
+ Project
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, year, CAST(SS_NET_PAID):DECIMAL(32767, 2), _UTF-8's']
+ est: (rows=1)
+ Filter
+ predicate: >(CAST(SS_NET_PAID):DECIMAL(32767, 2), 0.00)
+ est: (rows=1)
+ Values
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, SS_NET_PAID]
+ tuples: []
+ est: (rows=1)
+ Project
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, year, YEAR_TOTAL, _UTF-8'w']
+ est: (rows=70717)
+ Filter
+ predicate: >(YEAR_TOTAL, 0.00)
+ est: (rows=70717)
+ ColocatedHashAggregate
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL]
+ group: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year]
+ aggregation: [SUM(WS_NET_PAID)]
+ est: (rows=141433)
+ Project
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, WS_NET_PAID]
+ projection: [C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, D_YEAR, WS_NET_PAID]
+ est: (rows=239555)
+ HashJoin
+ predicate: =(C_CUSTOMER_SK, WS_BILL_CUSTOMER_SK)
+ type: inner
+ est: (rows=239555)
+ HashJoin
+ predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=239555)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_BILL_CUSTOMER_SK, WS_NET_PAID]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(OR(IS NOT NULL(D_YEAR), =(D_YEAR, +(1998, 1))), =(D_YEAR, 1998))
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=100000)
+ TableScan
+ table: PUBLIC.CUSTOMER
+ fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME]
+ est: (rows=100000)
+ HashJoin
+ predicate: =(CUSTOMER_ID, CUSTOMER_ID$0)
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, year$0, YEAR_TOTAL$0, SALE_TYPE$0]
+ type: inner
+ est: (rows=3414825094)
+ Sort
+ collation: [CUSTOMER_ID ASC]
+ est: (rows=283149)
+ UnionAll
+ est: (rows=283149)
+ Project
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, year, YEAR_TOTAL, _UTF-8's']
+ est: (rows=283148)
+ Filter
+ predicate: >(YEAR_TOTAL, 0.00)
+ est: (rows=283148)
+ ColocatedHashAggregate
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL]
+ group: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year]
+ aggregation: [SUM(SS_NET_PAID)]
+ est: (rows=566297)
+ Project
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, SS_NET_PAID]
+ projection: [C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, D_YEAR, SS_NET_PAID]
+ est: (rows=959175)
+ HashJoin
+ predicate: =(C_CUSTOMER_SK, SS_CUSTOMER_SK)
+ type: inner
+ est: (rows=959175)
+ HashJoin
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=959175)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_CUSTOMER_SK, SS_NET_PAID]
+ est: (rows=2880404)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(OR(IS NOT NULL(D_YEAR), =(D_YEAR, +(1998, 1))), =(D_YEAR, 1998))
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=100000)
+ TableScan
+ table: PUBLIC.CUSTOMER
+ fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME]
+ est: (rows=100000)
+ Project
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, year, CAST(WS_NET_PAID):DECIMAL(32767, 2), _UTF-8'w']
+ est: (rows=1)
+ Filter
+ predicate: >(CAST(WS_NET_PAID):DECIMAL(32767, 2), 0.00)
+ est: (rows=1)
+ Values
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, WS_NET_PAID]
+ tuples: []
+ est: (rows=1)
+ UnionAll
+ est: (rows=80401)
+ Project
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, year, CAST(SS_NET_PAID):DECIMAL(32767, 2), _UTF-8's']
+ est: (rows=1)
+ Values
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, SS_NET_PAID]
+ tuples: []
+ est: (rows=1)
+ Project
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, year, YEAR_TOTAL, _UTF-8'w']
+ est: (rows=80400)
+ ColocatedHashAggregate
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL]
+ group: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year]
+ aggregation: [SUM(WS_NET_PAID)]
+ est: (rows=80400)
+ Project
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, WS_NET_PAID]
+ projection: [C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, D_YEAR, WS_NET_PAID]
+ est: (rows=136179)
+ HashJoin
+ predicate: =(C_CUSTOMER_SK, WS_BILL_CUSTOMER_SK)
+ type: inner
+ est: (rows=136179)
+ HashJoin
+ predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=136179)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_BILL_CUSTOMER_SK, WS_NET_PAID]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=13828)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(OR(=(D_YEAR, 1998), =(D_YEAR, +(1998, 1))), =(D_YEAR, +(1998, 1)))
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=13828)
+ Exchange
+ distribution: single
+ est: (rows=100000)
+ TableScan
+ table: PUBLIC.CUSTOMER
+ fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME]
+ est: (rows=100000)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q74_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q74_colocated.plan
new file mode 100644
index 00000000000..405bc091944
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q74_colocated.plan
@@ -0,0 +1,255 @@
+Limit
+ fetch: 100
+ est: (rows=100)
+ Project
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME]
+ projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME]
+ est: (rows=874578399118912500)
+ HashJoin
+ predicate: AND(>(CASE(>(YEAR_TOTAL$0, 0.00), /(YEAR_TOTAL$0$0$0, YEAR_TOTAL$0), null:DECIMAL(32767, 0)), CASE(>(YEAR_TOTAL$0$0, 0.00), /(YEAR_TOTAL, YEAR_TOTAL$0$0), null:DECIMAL(32767, 0))), =(CUSTOMER_ID, CUSTOMER_ID$0$0))
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, year$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, year$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0, CUSTOMER_ID$0$0$0, year$0$0$0, YEAR_TOTAL$0$0$0, SALE_TYPE$0$0$0]
+ type: inner
+ est: (rows=874578399118912500)
+ Sort
+ collation: [CUSTOMER_LAST_NAME ASC, CUSTOMER_ID ASC, CUSTOMER_FIRST_NAME ASC]
+ est: (rows=321922)
+ UnionAll
+ est: (rows=321922)
+ Project
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, _UTF-8's']
+ est: (rows=321921)
+ ColocatedHashAggregate
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL]
+ group: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year]
+ aggregation: [SUM(SS_NET_PAID)]
+ est: (rows=321921)
+ Project
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, SS_NET_PAID]
+ projection: [C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, D_YEAR, SS_NET_PAID]
+ est: (rows=545259)
+ HashJoin
+ predicate: =(C_CUSTOMER_SK, SS_CUSTOMER_SK)
+ type: inner
+ est: (rows=545259)
+ HashJoin
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=545259)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_CUSTOMER_SK, SS_NET_PAID]
+ est: (rows=2880404)
+ Exchange
+ distribution: single
+ est: (rows=13828)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(OR(=(D_YEAR, 1998), =(D_YEAR, +(1998, 1))), =(D_YEAR, +(1998, 1)))
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=13828)
+ Exchange
+ distribution: single
+ est: (rows=100000)
+ TableScan
+ table: PUBLIC.CUSTOMER
+ fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME]
+ est: (rows=100000)
+ Project
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, CAST(WS_NET_PAID):DECIMAL(32767, 2), _UTF-8'w']
+ est: (rows=1)
+ Values
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, WS_NET_PAID]
+ tuples: []
+ est: (rows=1)
+ MergeJoin
+ predicate: =(CUSTOMER_ID$0, CUSTOMER_ID)
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, year$0, YEAR_TOTAL$0, SALE_TYPE$0, CUSTOMER_ID$0$0, year$0$0, YEAR_TOTAL$0$0, SALE_TYPE$0$0]
+ type: inner
+ est: (rows=36223234343827)
+ Sort
+ collation: [CUSTOMER_ID ASC]
+ est: (rows=70718)
+ UnionAll
+ est: (rows=70718)
+ Project
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, year, CAST(SS_NET_PAID):DECIMAL(32767, 2), _UTF-8's']
+ est: (rows=1)
+ Filter
+ predicate: >(CAST(SS_NET_PAID):DECIMAL(32767, 2), 0.00)
+ est: (rows=1)
+ Values
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, SS_NET_PAID]
+ tuples: []
+ est: (rows=1)
+ Project
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, year, YEAR_TOTAL, _UTF-8'w']
+ est: (rows=70717)
+ Filter
+ predicate: >(YEAR_TOTAL, 0.00)
+ est: (rows=70717)
+ ColocatedHashAggregate
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL]
+ group: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year]
+ aggregation: [SUM(WS_NET_PAID)]
+ est: (rows=141433)
+ Project
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, WS_NET_PAID]
+ projection: [C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, D_YEAR, WS_NET_PAID]
+ est: (rows=239555)
+ HashJoin
+ predicate: =(C_CUSTOMER_SK, WS_BILL_CUSTOMER_SK)
+ type: inner
+ est: (rows=239555)
+ HashJoin
+ predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=239555)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_BILL_CUSTOMER_SK, WS_NET_PAID]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(OR(IS NOT NULL(D_YEAR), =(D_YEAR, +(1998, 1))), =(D_YEAR, 1998))
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=100000)
+ TableScan
+ table: PUBLIC.CUSTOMER
+ fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME]
+ est: (rows=100000)
+ HashJoin
+ predicate: =(CUSTOMER_ID, CUSTOMER_ID$0)
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE, CUSTOMER_ID$0, year$0, YEAR_TOTAL$0, SALE_TYPE$0]
+ type: inner
+ est: (rows=3414825094)
+ Sort
+ collation: [CUSTOMER_ID ASC]
+ est: (rows=283149)
+ UnionAll
+ est: (rows=283149)
+ Project
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, year, YEAR_TOTAL, _UTF-8's']
+ est: (rows=283148)
+ Filter
+ predicate: >(YEAR_TOTAL, 0.00)
+ est: (rows=283148)
+ ColocatedHashAggregate
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL]
+ group: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year]
+ aggregation: [SUM(SS_NET_PAID)]
+ est: (rows=566297)
+ Project
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, SS_NET_PAID]
+ projection: [C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, D_YEAR, SS_NET_PAID]
+ est: (rows=959175)
+ HashJoin
+ predicate: =(C_CUSTOMER_SK, SS_CUSTOMER_SK)
+ type: inner
+ est: (rows=959175)
+ HashJoin
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=959175)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_CUSTOMER_SK, SS_NET_PAID]
+ est: (rows=2880404)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(OR(IS NOT NULL(D_YEAR), =(D_YEAR, +(1998, 1))), =(D_YEAR, 1998))
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=100000)
+ TableScan
+ table: PUBLIC.CUSTOMER
+ fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME]
+ est: (rows=100000)
+ Project
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, year, CAST(WS_NET_PAID):DECIMAL(32767, 2), _UTF-8'w']
+ est: (rows=1)
+ Filter
+ predicate: >(CAST(WS_NET_PAID):DECIMAL(32767, 2), 0.00)
+ est: (rows=1)
+ Values
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, WS_NET_PAID]
+ tuples: []
+ est: (rows=1)
+ UnionAll
+ est: (rows=80401)
+ Project
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, year, CAST(SS_NET_PAID):DECIMAL(32767, 2), _UTF-8's']
+ est: (rows=1)
+ Values
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, SS_NET_PAID]
+ tuples: []
+ est: (rows=1)
+ Project
+ fieldNames: [CUSTOMER_ID, year, YEAR_TOTAL, SALE_TYPE]
+ projection: [CUSTOMER_ID, year, YEAR_TOTAL, _UTF-8'w']
+ est: (rows=80400)
+ ColocatedHashAggregate
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, YEAR_TOTAL]
+ group: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year]
+ aggregation: [SUM(WS_NET_PAID)]
+ est: (rows=80400)
+ Project
+ fieldNames: [CUSTOMER_ID, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, year, WS_NET_PAID]
+ projection: [C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME, D_YEAR, WS_NET_PAID]
+ est: (rows=136179)
+ HashJoin
+ predicate: =(C_CUSTOMER_SK, WS_BILL_CUSTOMER_SK)
+ type: inner
+ est: (rows=136179)
+ HashJoin
+ predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=136179)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_BILL_CUSTOMER_SK, WS_NET_PAID]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=13828)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(OR(=(D_YEAR, 1998), =(D_YEAR, +(1998, 1))), =(D_YEAR, +(1998, 1)))
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=13828)
+ Exchange
+ distribution: single
+ est: (rows=100000)
+ TableScan
+ table: PUBLIC.CUSTOMER
+ fieldNames: [C_CUSTOMER_SK, C_CUSTOMER_ID, C_FIRST_NAME, C_LAST_NAME]
+ est: (rows=100000)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q75.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q75.plan
new file mode 100644
index 00000000000..a7bf23418d0
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q75.plan
@@ -0,0 +1,309 @@
+Sort
+ collation: [SALES_CNT_DIFF ASC, SALES_AMT_DIFF ASC]
+ fetch: 100
+ est: (rows=100)
+ Project
+ fieldNames: [PREV_YEAR, year, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, PREV_YR_CNT, CURR_YR_CNT, SALES_CNT_DIFF, SALES_AMT_DIFF]
+ projection: [D_YEAR$0, D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT$0, SALES_CNT, -(SALES_CNT, SALES_CNT$0), -(SALES_AMT, SALES_AMT$0)]
+ est: (rows=1164251132626172)
+ HashJoin
+ predicate: AND(=(I_BRAND_ID, I_BRAND_ID$0), =(I_CLASS_ID, I_CLASS_ID$0), =(I_CATEGORY_ID, I_CATEGORY_ID$0), =(I_MANUFACT_ID, I_MANUFACT_ID$0), <(/(CAST(SALES_CNT):DECIMAL(17, 2), CAST(SALES_CNT$0):DECIMAL(17, 2)), 0.90000000000000000000))
+ fieldNames: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT, D_YEAR$0, I_BRAND_ID$0, I_CLASS_ID$0, I_CATEGORY_ID$0, I_MANUFACT_ID$0, SALES_CNT$0, SALES_AMT$0]
+ type: inner
+ est: (rows=1164251132626172)
+ ColocatedHashAggregate
+ group: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID]
+ aggregation: [SUM(SALES_CNT), SUM(SALES_AMT)]
+ est: (rows=2144646975)
+ ColocatedHashAggregate
+ group: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ aggregation: []
+ est: (rows=2144646975)
+ UnionAll
+ est: (rows=2713764677)
+ Project
+ fieldNames: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ projection: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, -(CS_QUANTITY, CASE(IS NOT NULL(CR_RETURN_QUANTITY), CAST(CR_RETURN_QUANTITY):INTEGER NOT NULL, 0)), -(CS_EXT_SALES_PRICE, CASE(IS NOT NULL(CR_RETURN_AMOUNT), CAST(CR_RETURN_AMOUNT):DECIMAL(7, 2) NOT NULL, 0.00:DECIMAL(7, 2)))]
+ est: (rows=518317116)
+ HashJoin
+ predicate: AND(=(CS_ORDER_NUMBER, CR_ORDER_NUMBER), =(CS_ITEM_SK, CR_ITEM_SK))
+ type: left
+ est: (rows=518317116)
+ HashJoin
+ predicate: =(D_DATE_SK, CS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=159852)
+ HashJoin
+ predicate: =(I_ITEM_SK, CS_ITEM_SK)
+ type: inner
+ est: (rows=480035)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK, CS_ORDER_NUMBER, CS_QUANTITY, CS_EXT_SALES_PRICE]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_CATEGORY, _UTF-8'Sports')
+ fieldNames: [I_ITEM_SK, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_CATEGORY, I_MANUFACT_ID]
+ est: (rows=5994)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, 2001)
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=144067)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_RETURN_QUANTITY, CR_RETURN_AMOUNT]
+ est: (rows=144067)
+ Project
+ fieldNames: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ projection: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, -(SS_QUANTITY, CASE(IS NOT NULL(SR_RETURN_QUANTITY), CAST(SR_RETURN_QUANTITY):INTEGER NOT NULL, 0)), -(SS_EXT_SALES_PRICE, CASE(IS NOT NULL(SR_RETURN_AMT), CAST(SR_RETURN_AMT):DECIMAL(7, 2) NOT NULL, 0.00:DECIMAL(7, 2)))]
+ est: (rows=2066564696)
+ HashJoin
+ predicate: AND(=(SS_TICKET_NUMBER, SR_TICKET_NUMBER), =(SS_ITEM_SK, SR_ITEM_SK))
+ type: left
+ est: (rows=2066564696)
+ HashJoin
+ predicate: =(D_DATE_SK, SS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=319405)
+ HashJoin
+ predicate: =(I_ITEM_SK, SS_ITEM_SK)
+ type: inner
+ est: (rows=959175)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_TICKET_NUMBER, SS_QUANTITY, SS_EXT_SALES_PRICE]
+ est: (rows=2880404)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_CATEGORY, _UTF-8'Sports')
+ fieldNames: [I_ITEM_SK, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_CATEGORY, I_MANUFACT_ID]
+ est: (rows=5994)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, 2001)
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_ITEM_SK, SR_TICKET_NUMBER, SR_RETURN_QUANTITY, SR_RETURN_AMT]
+ est: (rows=287514)
+ Project
+ fieldNames: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ projection: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, -(WS_QUANTITY, CASE(IS NOT NULL(WR_RETURN_QUANTITY), CAST(WR_RETURN_QUANTITY):INTEGER NOT NULL, 0)), -(WS_EXT_SALES_PRICE, CASE(IS NOT NULL(WR_RETURN_AMT), CAST(WR_RETURN_AMT):DECIMAL(7, 2) NOT NULL, 0.00:DECIMAL(7, 2)))]
+ est: (rows=128882865)
+ HashJoin
+ predicate: AND(=(WS_ORDER_NUMBER, WR_ORDER_NUMBER), =(WS_ITEM_SK, WR_ITEM_SK))
+ type: left
+ est: (rows=128882865)
+ HashJoin
+ predicate: =(D_DATE_SK, WS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=79772)
+ HashJoin
+ predicate: =(I_ITEM_SK, WS_ITEM_SK)
+ type: inner
+ est: (rows=239555)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK, WS_ORDER_NUMBER, WS_QUANTITY, WS_EXT_SALES_PRICE]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_CATEGORY, _UTF-8'Sports')
+ fieldNames: [I_ITEM_SK, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_CATEGORY, I_MANUFACT_ID]
+ est: (rows=5994)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, 2001)
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=71763)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ fieldNames: [WR_ITEM_SK, WR_ORDER_NUMBER, WR_RETURN_QUANTITY, WR_RETURN_AMT]
+ est: (rows=71763)
+ ColocatedHashAggregate
+ group: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID]
+ aggregation: [SUM(SALES_CNT), SUM(SALES_AMT)]
+ est: (rows=2144646975)
+ ColocatedHashAggregate
+ group: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ aggregation: []
+ est: (rows=2144646975)
+ UnionAll
+ est: (rows=2713764677)
+ Project
+ fieldNames: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ projection: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, -(CS_QUANTITY, CASE(IS NOT NULL(CR_RETURN_QUANTITY), CAST(CR_RETURN_QUANTITY):INTEGER NOT NULL, 0)), -(CS_EXT_SALES_PRICE, CASE(IS NOT NULL(CR_RETURN_AMOUNT), CAST(CR_RETURN_AMOUNT):DECIMAL(7, 2) NOT NULL, 0.00:DECIMAL(7, 2)))]
+ est: (rows=518317116)
+ HashJoin
+ predicate: AND(=(CS_ORDER_NUMBER, CR_ORDER_NUMBER), =(CS_ITEM_SK, CR_ITEM_SK))
+ type: left
+ est: (rows=518317116)
+ HashJoin
+ predicate: =(D_DATE_SK, CS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=159852)
+ HashJoin
+ predicate: =(I_ITEM_SK, CS_ITEM_SK)
+ type: inner
+ est: (rows=480035)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK, CS_ORDER_NUMBER, CS_QUANTITY, CS_EXT_SALES_PRICE]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_CATEGORY, _UTF-8'Sports')
+ fieldNames: [I_ITEM_SK, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_CATEGORY, I_MANUFACT_ID]
+ est: (rows=5994)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, -(2001, 1))
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=144067)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_RETURN_QUANTITY, CR_RETURN_AMOUNT]
+ est: (rows=144067)
+ Project
+ fieldNames: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ projection: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, -(SS_QUANTITY, CASE(IS NOT NULL(SR_RETURN_QUANTITY), CAST(SR_RETURN_QUANTITY):INTEGER NOT NULL, 0)), -(SS_EXT_SALES_PRICE, CASE(IS NOT NULL(SR_RETURN_AMT), CAST(SR_RETURN_AMT):DECIMAL(7, 2) NOT NULL, 0.00:DECIMAL(7, 2)))]
+ est: (rows=2066564696)
+ HashJoin
+ predicate: AND(=(SS_TICKET_NUMBER, SR_TICKET_NUMBER), =(SS_ITEM_SK, SR_ITEM_SK))
+ type: left
+ est: (rows=2066564696)
+ HashJoin
+ predicate: =(D_DATE_SK, SS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=319405)
+ HashJoin
+ predicate: =(I_ITEM_SK, SS_ITEM_SK)
+ type: inner
+ est: (rows=959175)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_TICKET_NUMBER, SS_QUANTITY, SS_EXT_SALES_PRICE]
+ est: (rows=2880404)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_CATEGORY, _UTF-8'Sports')
+ fieldNames: [I_ITEM_SK, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_CATEGORY, I_MANUFACT_ID]
+ est: (rows=5994)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, -(2001, 1))
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_ITEM_SK, SR_TICKET_NUMBER, SR_RETURN_QUANTITY, SR_RETURN_AMT]
+ est: (rows=287514)
+ Project
+ fieldNames: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ projection: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, -(WS_QUANTITY, CASE(IS NOT NULL(WR_RETURN_QUANTITY), CAST(WR_RETURN_QUANTITY):INTEGER NOT NULL, 0)), -(WS_EXT_SALES_PRICE, CASE(IS NOT NULL(WR_RETURN_AMT), CAST(WR_RETURN_AMT):DECIMAL(7, 2) NOT NULL, 0.00:DECIMAL(7, 2)))]
+ est: (rows=128882865)
+ HashJoin
+ predicate: AND(=(WS_ORDER_NUMBER, WR_ORDER_NUMBER), =(WS_ITEM_SK, WR_ITEM_SK))
+ type: left
+ est: (rows=128882865)
+ HashJoin
+ predicate: =(D_DATE_SK, WS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=79772)
+ HashJoin
+ predicate: =(I_ITEM_SK, WS_ITEM_SK)
+ type: inner
+ est: (rows=239555)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK, WS_ORDER_NUMBER, WS_QUANTITY, WS_EXT_SALES_PRICE]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_CATEGORY, _UTF-8'Sports')
+ fieldNames: [I_ITEM_SK, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_CATEGORY, I_MANUFACT_ID]
+ est: (rows=5994)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, -(2001, 1))
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=71763)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ fieldNames: [WR_ITEM_SK, WR_ORDER_NUMBER, WR_RETURN_QUANTITY, WR_RETURN_AMT]
+ est: (rows=71763)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q75_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q75_colocated.plan
new file mode 100644
index 00000000000..a7bf23418d0
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q75_colocated.plan
@@ -0,0 +1,309 @@
+Sort
+ collation: [SALES_CNT_DIFF ASC, SALES_AMT_DIFF ASC]
+ fetch: 100
+ est: (rows=100)
+ Project
+ fieldNames: [PREV_YEAR, year, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, PREV_YR_CNT, CURR_YR_CNT, SALES_CNT_DIFF, SALES_AMT_DIFF]
+ projection: [D_YEAR$0, D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT$0, SALES_CNT, -(SALES_CNT, SALES_CNT$0), -(SALES_AMT, SALES_AMT$0)]
+ est: (rows=1164251132626172)
+ HashJoin
+ predicate: AND(=(I_BRAND_ID, I_BRAND_ID$0), =(I_CLASS_ID, I_CLASS_ID$0), =(I_CATEGORY_ID, I_CATEGORY_ID$0), =(I_MANUFACT_ID, I_MANUFACT_ID$0), <(/(CAST(SALES_CNT):DECIMAL(17, 2), CAST(SALES_CNT$0):DECIMAL(17, 2)), 0.90000000000000000000))
+ fieldNames: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT, D_YEAR$0, I_BRAND_ID$0, I_CLASS_ID$0, I_CATEGORY_ID$0, I_MANUFACT_ID$0, SALES_CNT$0, SALES_AMT$0]
+ type: inner
+ est: (rows=1164251132626172)
+ ColocatedHashAggregate
+ group: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID]
+ aggregation: [SUM(SALES_CNT), SUM(SALES_AMT)]
+ est: (rows=2144646975)
+ ColocatedHashAggregate
+ group: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ aggregation: []
+ est: (rows=2144646975)
+ UnionAll
+ est: (rows=2713764677)
+ Project
+ fieldNames: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ projection: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, -(CS_QUANTITY, CASE(IS NOT NULL(CR_RETURN_QUANTITY), CAST(CR_RETURN_QUANTITY):INTEGER NOT NULL, 0)), -(CS_EXT_SALES_PRICE, CASE(IS NOT NULL(CR_RETURN_AMOUNT), CAST(CR_RETURN_AMOUNT):DECIMAL(7, 2) NOT NULL, 0.00:DECIMAL(7, 2)))]
+ est: (rows=518317116)
+ HashJoin
+ predicate: AND(=(CS_ORDER_NUMBER, CR_ORDER_NUMBER), =(CS_ITEM_SK, CR_ITEM_SK))
+ type: left
+ est: (rows=518317116)
+ HashJoin
+ predicate: =(D_DATE_SK, CS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=159852)
+ HashJoin
+ predicate: =(I_ITEM_SK, CS_ITEM_SK)
+ type: inner
+ est: (rows=480035)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK, CS_ORDER_NUMBER, CS_QUANTITY, CS_EXT_SALES_PRICE]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_CATEGORY, _UTF-8'Sports')
+ fieldNames: [I_ITEM_SK, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_CATEGORY, I_MANUFACT_ID]
+ est: (rows=5994)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, 2001)
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=144067)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_RETURN_QUANTITY, CR_RETURN_AMOUNT]
+ est: (rows=144067)
+ Project
+ fieldNames: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ projection: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, -(SS_QUANTITY, CASE(IS NOT NULL(SR_RETURN_QUANTITY), CAST(SR_RETURN_QUANTITY):INTEGER NOT NULL, 0)), -(SS_EXT_SALES_PRICE, CASE(IS NOT NULL(SR_RETURN_AMT), CAST(SR_RETURN_AMT):DECIMAL(7, 2) NOT NULL, 0.00:DECIMAL(7, 2)))]
+ est: (rows=2066564696)
+ HashJoin
+ predicate: AND(=(SS_TICKET_NUMBER, SR_TICKET_NUMBER), =(SS_ITEM_SK, SR_ITEM_SK))
+ type: left
+ est: (rows=2066564696)
+ HashJoin
+ predicate: =(D_DATE_SK, SS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=319405)
+ HashJoin
+ predicate: =(I_ITEM_SK, SS_ITEM_SK)
+ type: inner
+ est: (rows=959175)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_TICKET_NUMBER, SS_QUANTITY, SS_EXT_SALES_PRICE]
+ est: (rows=2880404)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_CATEGORY, _UTF-8'Sports')
+ fieldNames: [I_ITEM_SK, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_CATEGORY, I_MANUFACT_ID]
+ est: (rows=5994)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, 2001)
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_ITEM_SK, SR_TICKET_NUMBER, SR_RETURN_QUANTITY, SR_RETURN_AMT]
+ est: (rows=287514)
+ Project
+ fieldNames: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ projection: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, -(WS_QUANTITY, CASE(IS NOT NULL(WR_RETURN_QUANTITY), CAST(WR_RETURN_QUANTITY):INTEGER NOT NULL, 0)), -(WS_EXT_SALES_PRICE, CASE(IS NOT NULL(WR_RETURN_AMT), CAST(WR_RETURN_AMT):DECIMAL(7, 2) NOT NULL, 0.00:DECIMAL(7, 2)))]
+ est: (rows=128882865)
+ HashJoin
+ predicate: AND(=(WS_ORDER_NUMBER, WR_ORDER_NUMBER), =(WS_ITEM_SK, WR_ITEM_SK))
+ type: left
+ est: (rows=128882865)
+ HashJoin
+ predicate: =(D_DATE_SK, WS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=79772)
+ HashJoin
+ predicate: =(I_ITEM_SK, WS_ITEM_SK)
+ type: inner
+ est: (rows=239555)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK, WS_ORDER_NUMBER, WS_QUANTITY, WS_EXT_SALES_PRICE]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_CATEGORY, _UTF-8'Sports')
+ fieldNames: [I_ITEM_SK, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_CATEGORY, I_MANUFACT_ID]
+ est: (rows=5994)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, 2001)
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=71763)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ fieldNames: [WR_ITEM_SK, WR_ORDER_NUMBER, WR_RETURN_QUANTITY, WR_RETURN_AMT]
+ est: (rows=71763)
+ ColocatedHashAggregate
+ group: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID]
+ aggregation: [SUM(SALES_CNT), SUM(SALES_AMT)]
+ est: (rows=2144646975)
+ ColocatedHashAggregate
+ group: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ aggregation: []
+ est: (rows=2144646975)
+ UnionAll
+ est: (rows=2713764677)
+ Project
+ fieldNames: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ projection: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, -(CS_QUANTITY, CASE(IS NOT NULL(CR_RETURN_QUANTITY), CAST(CR_RETURN_QUANTITY):INTEGER NOT NULL, 0)), -(CS_EXT_SALES_PRICE, CASE(IS NOT NULL(CR_RETURN_AMOUNT), CAST(CR_RETURN_AMOUNT):DECIMAL(7, 2) NOT NULL, 0.00:DECIMAL(7, 2)))]
+ est: (rows=518317116)
+ HashJoin
+ predicate: AND(=(CS_ORDER_NUMBER, CR_ORDER_NUMBER), =(CS_ITEM_SK, CR_ITEM_SK))
+ type: left
+ est: (rows=518317116)
+ HashJoin
+ predicate: =(D_DATE_SK, CS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=159852)
+ HashJoin
+ predicate: =(I_ITEM_SK, CS_ITEM_SK)
+ type: inner
+ est: (rows=480035)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_ITEM_SK, CS_ORDER_NUMBER, CS_QUANTITY, CS_EXT_SALES_PRICE]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_CATEGORY, _UTF-8'Sports')
+ fieldNames: [I_ITEM_SK, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_CATEGORY, I_MANUFACT_ID]
+ est: (rows=5994)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, -(2001, 1))
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=144067)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_RETURN_QUANTITY, CR_RETURN_AMOUNT]
+ est: (rows=144067)
+ Project
+ fieldNames: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ projection: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, -(SS_QUANTITY, CASE(IS NOT NULL(SR_RETURN_QUANTITY), CAST(SR_RETURN_QUANTITY):INTEGER NOT NULL, 0)), -(SS_EXT_SALES_PRICE, CASE(IS NOT NULL(SR_RETURN_AMT), CAST(SR_RETURN_AMT):DECIMAL(7, 2) NOT NULL, 0.00:DECIMAL(7, 2)))]
+ est: (rows=2066564696)
+ HashJoin
+ predicate: AND(=(SS_TICKET_NUMBER, SR_TICKET_NUMBER), =(SS_ITEM_SK, SR_ITEM_SK))
+ type: left
+ est: (rows=2066564696)
+ HashJoin
+ predicate: =(D_DATE_SK, SS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=319405)
+ HashJoin
+ predicate: =(I_ITEM_SK, SS_ITEM_SK)
+ type: inner
+ est: (rows=959175)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_TICKET_NUMBER, SS_QUANTITY, SS_EXT_SALES_PRICE]
+ est: (rows=2880404)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_CATEGORY, _UTF-8'Sports')
+ fieldNames: [I_ITEM_SK, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_CATEGORY, I_MANUFACT_ID]
+ est: (rows=5994)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, -(2001, 1))
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_ITEM_SK, SR_TICKET_NUMBER, SR_RETURN_QUANTITY, SR_RETURN_AMT]
+ est: (rows=287514)
+ Project
+ fieldNames: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, SALES_CNT, SALES_AMT]
+ projection: [D_YEAR, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_MANUFACT_ID, -(WS_QUANTITY, CASE(IS NOT NULL(WR_RETURN_QUANTITY), CAST(WR_RETURN_QUANTITY):INTEGER NOT NULL, 0)), -(WS_EXT_SALES_PRICE, CASE(IS NOT NULL(WR_RETURN_AMT), CAST(WR_RETURN_AMT):DECIMAL(7, 2) NOT NULL, 0.00:DECIMAL(7, 2)))]
+ est: (rows=128882865)
+ HashJoin
+ predicate: AND(=(WS_ORDER_NUMBER, WR_ORDER_NUMBER), =(WS_ITEM_SK, WR_ITEM_SK))
+ type: left
+ est: (rows=128882865)
+ HashJoin
+ predicate: =(D_DATE_SK, WS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=79772)
+ HashJoin
+ predicate: =(I_ITEM_SK, WS_ITEM_SK)
+ type: inner
+ est: (rows=239555)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK, WS_ORDER_NUMBER, WS_QUANTITY, WS_EXT_SALES_PRICE]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_CATEGORY, _UTF-8'Sports')
+ fieldNames: [I_ITEM_SK, I_BRAND_ID, I_CLASS_ID, I_CATEGORY_ID, I_CATEGORY, I_MANUFACT_ID]
+ est: (rows=5994)
+ Exchange
+ distribution: single
+ est: (rows=24325)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: =(D_YEAR, -(2001, 1))
+ fieldNames: [D_DATE_SK, D_YEAR]
+ est: (rows=24325)
+ Exchange
+ distribution: single
+ est: (rows=71763)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ fieldNames: [WR_ITEM_SK, WR_ORDER_NUMBER, WR_RETURN_QUANTITY, WR_RETURN_AMT]
+ est: (rows=71763)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q77.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q77.plan
new file mode 100644
index 00000000000..35a5aaa9221
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q77.plan
@@ -0,0 +1,255 @@
+Sort
+ collation: [CHANNEL ASC, ID ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ group: [CHANNEL, ID]
+ groupSets: [[CHANNEL, ID], [CHANNEL], []]
+ aggregation: [SUM(SALES), SUM(RETURNS), SUM(PROFIT)]
+ est: (rows=469455114)
+ UnionAll
+ est: (rows=849269841)
+ Project
+ projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, CAST(ID):INTEGER, SALES, CAST(RETURNS):DECIMAL(32767, 2), PROFIT]
+ est: (rows=310681096)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'store channel', S_STORE_SK, SALES, CASE(IS NOT NULL(RETURNS), CAST(RETURNS):DECIMAL(32767, 2) NOT NULL, 0.00:DECIMAL(32767, 2)), -(PROFIT, CASE(IS NOT NULL(PROFIT_LOSS), CAST(PROFIT_LOSS):DECIMAL(32767, 2) NOT NULL, 0.00:DECIMAL(32767, 2)))]
+ est: (rows=310681096)
+ HashJoin
+ predicate: =(S_STORE_SK, S_STORE_SK$0)
+ fieldNames: [S_STORE_SK, SALES, PROFIT, S_STORE_SK$0, RETURNS, PROFIT_LOSS]
+ type: left
+ est: (rows=310681096)
+ ColocatedHashAggregate
+ fieldNames: [S_STORE_SK, SALES, PROFIT]
+ group: [S_STORE_SK]
+ aggregation: [SUM(SS_EXT_SALES_PRICE), SUM(SS_NET_PROFIT)]
+ est: (rows=144020)
+ Project
+ fieldNames: [S_STORE_SK, SS_EXT_SALES_PRICE, SS_NET_PROFIT]
+ projection: [S_STORE_SK, SS_EXT_SALES_PRICE, SS_NET_PROFIT]
+ est: (rows=720101)
+ HashJoin
+ predicate: =(SS_STORE_SK, S_STORE_SK)
+ type: inner
+ est: (rows=720101)
+ HashJoin
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=720101)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_STORE_SK, SS_EXT_SALES_PRICE, SS_NET_PROFIT]
+ est: (rows=2880404)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=12)
+ TableScan
+ table: PUBLIC.STORE
+ fieldNames: [S_STORE_SK]
+ est: (rows=12)
+ ColocatedHashAggregate
+ fieldNames: [S_STORE_SK, RETURNS, PROFIT_LOSS]
+ group: [S_STORE_SK]
+ aggregation: [SUM(SR_RETURN_AMT), SUM(SR_NET_LOSS)]
+ est: (rows=14376)
+ Project
+ fieldNames: [S_STORE_SK, SR_RETURN_AMT, SR_NET_LOSS]
+ projection: [S_STORE_SK, SR_RETURN_AMT, SR_NET_LOSS]
+ est: (rows=71879)
+ HashJoin
+ predicate: =(SR_STORE_SK, S_STORE_SK)
+ type: inner
+ est: (rows=71879)
+ HashJoin
+ predicate: =(SR_RETURNED_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=71879)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_RETURNED_DATE_SK, SR_STORE_SK, SR_RETURN_AMT, SR_NET_LOSS]
+ est: (rows=287514)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=12)
+ TableScan
+ table: PUBLIC.STORE
+ fieldNames: [S_STORE_SK]
+ est: (rows=12)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'catalog channel', CS_CALL_CENTER_SK, SALES, RETURNS, -(PROFIT, PROFIT_LOSS)]
+ est: (rows=519198739)
+ NestedLoopJoin
+ predicate: true
+ type: inner
+ est: (rows=519198739)
+ ColocatedHashAggregate
+ fieldNames: [CS_CALL_CENTER_SK, SALES, PROFIT]
+ group: [CS_CALL_CENTER_SK]
+ aggregation: [SUM(CS_EXT_SALES_PRICE), SUM(CS_NET_PROFIT)]
+ est: (rows=72077)
+ Project
+ fieldNames: [CS_CALL_CENTER_SK, CS_EXT_SALES_PRICE, CS_NET_PROFIT]
+ projection: [CS_CALL_CENTER_SK, CS_EXT_SALES_PRICE, CS_NET_PROFIT]
+ est: (rows=360387)
+ HashJoin
+ predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=360387)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_CALL_CENTER_SK, CS_EXT_SALES_PRICE, CS_NET_PROFIT]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ ColocatedHashAggregate
+ fieldNames: [CR_CALL_CENTER_SK, RETURNS, PROFIT_LOSS]
+ group: [CR_CALL_CENTER_SK]
+ aggregation: [SUM(CR_RETURN_AMOUNT), SUM(CR_NET_LOSS)]
+ est: (rows=7203)
+ Project
+ fieldNames: [CR_CALL_CENTER_SK, CR_RETURN_AMOUNT, CR_NET_LOSS]
+ projection: [CR_CALL_CENTER_SK, CR_RETURN_AMOUNT, CR_NET_LOSS]
+ est: (rows=36017)
+ HashJoin
+ predicate: =(CR_RETURNED_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=36017)
+ Exchange
+ distribution: single
+ est: (rows=144067)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_RETURNED_DATE_SK, CR_CALL_CENTER_SK, CR_RETURN_AMOUNT, CR_NET_LOSS]
+ est: (rows=144067)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Project
+ projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, CAST(ID):INTEGER, SALES, CAST(RETURNS):DECIMAL(32767, 2), PROFIT]
+ est: (rows=19390007)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'web channel', WP_WEB_PAGE_SK, SALES, CASE(IS NOT NULL(RETURNS), CAST(RETURNS):DECIMAL(32767, 2) NOT NULL, 0.00:DECIMAL(32767, 2)), -(PROFIT, CASE(IS NOT NULL(PROFIT_LOSS), CAST(PROFIT_LOSS):DECIMAL(32767, 2) NOT NULL, 0.00:DECIMAL(32767, 2)))]
+ est: (rows=19390007)
+ HashJoin
+ predicate: =(WP_WEB_PAGE_SK, WP_WEB_PAGE_SK$0)
+ fieldNames: [WP_WEB_PAGE_SK, SALES, PROFIT, WP_WEB_PAGE_SK$0, RETURNS, PROFIT_LOSS]
+ type: left
+ est: (rows=19390007)
+ ColocatedHashAggregate
+ fieldNames: [WP_WEB_PAGE_SK, SALES, PROFIT]
+ group: [WP_WEB_PAGE_SK]
+ aggregation: [SUM(WS_EXT_SALES_PRICE), SUM(WS_NET_PROFIT)]
+ est: (rows=35969)
+ Project
+ fieldNames: [WP_WEB_PAGE_SK, WS_EXT_SALES_PRICE, WS_NET_PROFIT]
+ projection: [WP_WEB_PAGE_SK, WS_EXT_SALES_PRICE, WS_NET_PROFIT]
+ est: (rows=179846)
+ HashJoin
+ predicate: =(WS_WEB_PAGE_SK, WP_WEB_PAGE_SK)
+ type: inner
+ est: (rows=179846)
+ HashJoin
+ predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=179846)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_WEB_PAGE_SK, WS_EXT_SALES_PRICE, WS_NET_PROFIT]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=60)
+ TableScan
+ table: PUBLIC.WEB_PAGE
+ fieldNames: [WP_WEB_PAGE_SK]
+ est: (rows=60)
+ ColocatedHashAggregate
+ fieldNames: [WP_WEB_PAGE_SK, RETURNS, PROFIT_LOSS]
+ group: [WP_WEB_PAGE_SK]
+ aggregation: [SUM(WR_RETURN_AMT), SUM(WR_NET_LOSS)]
+ est: (rows=3588)
+ Project
+ fieldNames: [WP_WEB_PAGE_SK, WR_RETURN_AMT, WR_NET_LOSS]
+ projection: [WP_WEB_PAGE_SK, WR_RETURN_AMT, WR_NET_LOSS]
+ est: (rows=17941)
+ HashJoin
+ predicate: =(WR_WEB_PAGE_SK, WP_WEB_PAGE_SK)
+ type: inner
+ est: (rows=17941)
+ HashJoin
+ predicate: =(WR_RETURNED_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=17941)
+ Exchange
+ distribution: single
+ est: (rows=71763)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ fieldNames: [WR_RETURNED_DATE_SK, WR_WEB_PAGE_SK, WR_RETURN_AMT, WR_NET_LOSS]
+ est: (rows=71763)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=60)
+ TableScan
+ table: PUBLIC.WEB_PAGE
+ fieldNames: [WP_WEB_PAGE_SK]
+ est: (rows=60)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q77_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q77_colocated.plan
new file mode 100644
index 00000000000..35a5aaa9221
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q77_colocated.plan
@@ -0,0 +1,255 @@
+Sort
+ collation: [CHANNEL ASC, ID ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ group: [CHANNEL, ID]
+ groupSets: [[CHANNEL, ID], [CHANNEL], []]
+ aggregation: [SUM(SALES), SUM(RETURNS), SUM(PROFIT)]
+ est: (rows=469455114)
+ UnionAll
+ est: (rows=849269841)
+ Project
+ projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, CAST(ID):INTEGER, SALES, CAST(RETURNS):DECIMAL(32767, 2), PROFIT]
+ est: (rows=310681096)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'store channel', S_STORE_SK, SALES, CASE(IS NOT NULL(RETURNS), CAST(RETURNS):DECIMAL(32767, 2) NOT NULL, 0.00:DECIMAL(32767, 2)), -(PROFIT, CASE(IS NOT NULL(PROFIT_LOSS), CAST(PROFIT_LOSS):DECIMAL(32767, 2) NOT NULL, 0.00:DECIMAL(32767, 2)))]
+ est: (rows=310681096)
+ HashJoin
+ predicate: =(S_STORE_SK, S_STORE_SK$0)
+ fieldNames: [S_STORE_SK, SALES, PROFIT, S_STORE_SK$0, RETURNS, PROFIT_LOSS]
+ type: left
+ est: (rows=310681096)
+ ColocatedHashAggregate
+ fieldNames: [S_STORE_SK, SALES, PROFIT]
+ group: [S_STORE_SK]
+ aggregation: [SUM(SS_EXT_SALES_PRICE), SUM(SS_NET_PROFIT)]
+ est: (rows=144020)
+ Project
+ fieldNames: [S_STORE_SK, SS_EXT_SALES_PRICE, SS_NET_PROFIT]
+ projection: [S_STORE_SK, SS_EXT_SALES_PRICE, SS_NET_PROFIT]
+ est: (rows=720101)
+ HashJoin
+ predicate: =(SS_STORE_SK, S_STORE_SK)
+ type: inner
+ est: (rows=720101)
+ HashJoin
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=720101)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_STORE_SK, SS_EXT_SALES_PRICE, SS_NET_PROFIT]
+ est: (rows=2880404)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=12)
+ TableScan
+ table: PUBLIC.STORE
+ fieldNames: [S_STORE_SK]
+ est: (rows=12)
+ ColocatedHashAggregate
+ fieldNames: [S_STORE_SK, RETURNS, PROFIT_LOSS]
+ group: [S_STORE_SK]
+ aggregation: [SUM(SR_RETURN_AMT), SUM(SR_NET_LOSS)]
+ est: (rows=14376)
+ Project
+ fieldNames: [S_STORE_SK, SR_RETURN_AMT, SR_NET_LOSS]
+ projection: [S_STORE_SK, SR_RETURN_AMT, SR_NET_LOSS]
+ est: (rows=71879)
+ HashJoin
+ predicate: =(SR_STORE_SK, S_STORE_SK)
+ type: inner
+ est: (rows=71879)
+ HashJoin
+ predicate: =(SR_RETURNED_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=71879)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_RETURNED_DATE_SK, SR_STORE_SK, SR_RETURN_AMT, SR_NET_LOSS]
+ est: (rows=287514)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=12)
+ TableScan
+ table: PUBLIC.STORE
+ fieldNames: [S_STORE_SK]
+ est: (rows=12)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'catalog channel', CS_CALL_CENTER_SK, SALES, RETURNS, -(PROFIT, PROFIT_LOSS)]
+ est: (rows=519198739)
+ NestedLoopJoin
+ predicate: true
+ type: inner
+ est: (rows=519198739)
+ ColocatedHashAggregate
+ fieldNames: [CS_CALL_CENTER_SK, SALES, PROFIT]
+ group: [CS_CALL_CENTER_SK]
+ aggregation: [SUM(CS_EXT_SALES_PRICE), SUM(CS_NET_PROFIT)]
+ est: (rows=72077)
+ Project
+ fieldNames: [CS_CALL_CENTER_SK, CS_EXT_SALES_PRICE, CS_NET_PROFIT]
+ projection: [CS_CALL_CENTER_SK, CS_EXT_SALES_PRICE, CS_NET_PROFIT]
+ est: (rows=360387)
+ HashJoin
+ predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=360387)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_CALL_CENTER_SK, CS_EXT_SALES_PRICE, CS_NET_PROFIT]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ ColocatedHashAggregate
+ fieldNames: [CR_CALL_CENTER_SK, RETURNS, PROFIT_LOSS]
+ group: [CR_CALL_CENTER_SK]
+ aggregation: [SUM(CR_RETURN_AMOUNT), SUM(CR_NET_LOSS)]
+ est: (rows=7203)
+ Project
+ fieldNames: [CR_CALL_CENTER_SK, CR_RETURN_AMOUNT, CR_NET_LOSS]
+ projection: [CR_CALL_CENTER_SK, CR_RETURN_AMOUNT, CR_NET_LOSS]
+ est: (rows=36017)
+ HashJoin
+ predicate: =(CR_RETURNED_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=36017)
+ Exchange
+ distribution: single
+ est: (rows=144067)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_RETURNED_DATE_SK, CR_CALL_CENTER_SK, CR_RETURN_AMOUNT, CR_NET_LOSS]
+ est: (rows=144067)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Project
+ projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, CAST(ID):INTEGER, SALES, CAST(RETURNS):DECIMAL(32767, 2), PROFIT]
+ est: (rows=19390007)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'web channel', WP_WEB_PAGE_SK, SALES, CASE(IS NOT NULL(RETURNS), CAST(RETURNS):DECIMAL(32767, 2) NOT NULL, 0.00:DECIMAL(32767, 2)), -(PROFIT, CASE(IS NOT NULL(PROFIT_LOSS), CAST(PROFIT_LOSS):DECIMAL(32767, 2) NOT NULL, 0.00:DECIMAL(32767, 2)))]
+ est: (rows=19390007)
+ HashJoin
+ predicate: =(WP_WEB_PAGE_SK, WP_WEB_PAGE_SK$0)
+ fieldNames: [WP_WEB_PAGE_SK, SALES, PROFIT, WP_WEB_PAGE_SK$0, RETURNS, PROFIT_LOSS]
+ type: left
+ est: (rows=19390007)
+ ColocatedHashAggregate
+ fieldNames: [WP_WEB_PAGE_SK, SALES, PROFIT]
+ group: [WP_WEB_PAGE_SK]
+ aggregation: [SUM(WS_EXT_SALES_PRICE), SUM(WS_NET_PROFIT)]
+ est: (rows=35969)
+ Project
+ fieldNames: [WP_WEB_PAGE_SK, WS_EXT_SALES_PRICE, WS_NET_PROFIT]
+ projection: [WP_WEB_PAGE_SK, WS_EXT_SALES_PRICE, WS_NET_PROFIT]
+ est: (rows=179846)
+ HashJoin
+ predicate: =(WS_WEB_PAGE_SK, WP_WEB_PAGE_SK)
+ type: inner
+ est: (rows=179846)
+ HashJoin
+ predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=179846)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_WEB_PAGE_SK, WS_EXT_SALES_PRICE, WS_NET_PROFIT]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=60)
+ TableScan
+ table: PUBLIC.WEB_PAGE
+ fieldNames: [WP_WEB_PAGE_SK]
+ est: (rows=60)
+ ColocatedHashAggregate
+ fieldNames: [WP_WEB_PAGE_SK, RETURNS, PROFIT_LOSS]
+ group: [WP_WEB_PAGE_SK]
+ aggregation: [SUM(WR_RETURN_AMT), SUM(WR_NET_LOSS)]
+ est: (rows=3588)
+ Project
+ fieldNames: [WP_WEB_PAGE_SK, WR_RETURN_AMT, WR_NET_LOSS]
+ projection: [WP_WEB_PAGE_SK, WR_RETURN_AMT, WR_NET_LOSS]
+ est: (rows=17941)
+ HashJoin
+ predicate: =(WR_WEB_PAGE_SK, WP_WEB_PAGE_SK)
+ type: inner
+ est: (rows=17941)
+ HashJoin
+ predicate: =(WR_RETURNED_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=17941)
+ Exchange
+ distribution: single
+ est: (rows=71763)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ fieldNames: [WR_RETURNED_DATE_SK, WR_WEB_PAGE_SK, WR_RETURN_AMT, WR_NET_LOSS]
+ est: (rows=71763)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2000-08-16), <=(D_DATE, +(2000-08-16, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=60)
+ TableScan
+ table: PUBLIC.WEB_PAGE
+ fieldNames: [WP_WEB_PAGE_SK]
+ est: (rows=60)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q80.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q80.plan
new file mode 100644
index 00000000000..4ef30a74922
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q80.plan
@@ -0,0 +1,278 @@
+Sort
+ collation: [CHANNEL ASC, ID ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ group: [CHANNEL, ID]
+ groupSets: [[CHANNEL, ID], [CHANNEL], []]
+ aggregation: [SUM(SALES), SUM(RETURNS), SUM(PROFIT)]
+ est: (rows=110383850)
+ UnionAll
+ est: (rows=203736087)
+ Project
+ projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
+ est: (rows=155147500)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'store channel', ||(_UTF-8'store', STORE_ID), SALES, RETURNS, PROFIT]
+ est: (rows=155147500)
+ ColocatedHashAggregate
+ fieldNames: [STORE_ID, SALES, RETURNS, PROFIT]
+ group: [STORE_ID]
+ aggregation: [SUM(SS_EXT_SALES_PRICE), SUM($f2), SUM($f3)]
+ est: (rows=155147500)
+ Project
+ fieldNames: [STORE_ID, SS_EXT_SALES_PRICE, $f2, $f3]
+ projection: [S_STORE_ID, SS_EXT_SALES_PRICE, CASE(IS NOT NULL(SR_RETURN_AMT), CAST(SR_RETURN_AMT):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2)), -(SS_NET_PROFIT, CASE(IS NOT NULL(SR_NET_LOSS), CAST(SR_NET_LOSS):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2)))]
+ est: (rows=775737498)
+ HashJoin
+ predicate: =(SS_PROMO_SK, P_PROMO_SK)
+ type: inner
+ est: (rows=775737498)
+ MergeJoin
+ predicate: =(SS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=2329542037)
+ HashJoin
+ predicate: =(SS_STORE_SK, S_STORE_SK)
+ type: inner
+ est: (rows=4659084074)
+ HashJoin
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=4659084074)
+ MergeJoin
+ predicate: AND(=(SS_ITEM_SK, SR_ITEM_SK), =(SS_TICKET_NUMBER, SR_TICKET_NUMBER))
+ type: left
+ est: (rows=18636336297)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ Sort
+ collation: [SS_ITEM_SK ASC, SS_TICKET_NUMBER ASC]
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_EXT_SALES_PRICE, SS_NET_PROFIT]
+ est: (rows=2880404)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ Sort
+ collation: [SR_ITEM_SK ASC, SR_TICKET_NUMBER ASC]
+ est: (rows=287514)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_ITEM_SK, SR_TICKET_NUMBER, SR_RETURN_AMT, SR_NET_LOSS]
+ est: (rows=287514)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2002-08-06), <=(D_DATE, +(2002-08-06, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=12)
+ TableScan
+ table: PUBLIC.STORE
+ fieldNames: [S_STORE_SK, S_STORE_ID]
+ est: (rows=12)
+ Exchange
+ distribution: single
+ est: (rows=9000)
+ Sort
+ collation: [I_ITEM_SK ASC]
+ est: (rows=9000)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: >(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 50.00)
+ fieldNames: [I_ITEM_SK, I_CURRENT_PRICE]
+ est: (rows=9000)
+ Exchange
+ distribution: single
+ est: (rows=100)
+ TableScan
+ table: PUBLIC.PROMOTION
+ predicate: =(P_CHANNEL_TV, _UTF-8'N')
+ fieldNames: [P_PROMO_SK, P_CHANNEL_TV]
+ est: (rows=100)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'catalog channel', ||(_UTF-8'catalog_page', CATALOG_PAGE_ID), SALES, RETURNS, PROFIT]
+ est: (rows=38912696)
+ ColocatedHashAggregate
+ fieldNames: [CATALOG_PAGE_ID, SALES, RETURNS, PROFIT]
+ group: [CATALOG_PAGE_ID]
+ aggregation: [SUM(CS_EXT_SALES_PRICE), SUM($f2), SUM($f3)]
+ est: (rows=38912696)
+ Project
+ fieldNames: [CATALOG_PAGE_ID, CS_EXT_SALES_PRICE, $f2, $f3]
+ projection: [CP_CATALOG_PAGE_ID, CS_EXT_SALES_PRICE, CASE(IS NOT NULL(CR_RETURN_AMOUNT), CAST(CR_RETURN_AMOUNT):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2)), -(CS_NET_PROFIT, CASE(IS NOT NULL(CR_NET_LOSS), CAST(CR_NET_LOSS):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2)))]
+ est: (rows=194563482)
+ HashJoin
+ predicate: =(CS_PROMO_SK, P_PROMO_SK)
+ type: inner
+ est: (rows=194563482)
+ MergeJoin
+ predicate: =(CS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=584274721)
+ HashJoin
+ predicate: =(CS_CATALOG_PAGE_SK, CP_CATALOG_PAGE_SK)
+ type: inner
+ est: (rows=1168549442)
+ HashJoin
+ predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=1168549442)
+ MergeJoin
+ predicate: AND(=(CS_ITEM_SK, CR_ITEM_SK), =(CS_ORDER_NUMBER, CR_ORDER_NUMBER))
+ type: left
+ est: (rows=4674197767)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ Sort
+ collation: [CS_ITEM_SK ASC, CS_ORDER_NUMBER ASC]
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_CATALOG_PAGE_SK, CS_ITEM_SK, CS_PROMO_SK, CS_ORDER_NUMBER, CS_EXT_SALES_PRICE, CS_NET_PROFIT]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=144067)
+ Sort
+ collation: [CR_ITEM_SK ASC, CR_ORDER_NUMBER ASC]
+ est: (rows=144067)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_RETURN_AMOUNT, CR_NET_LOSS]
+ est: (rows=144067)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2002-08-06), <=(D_DATE, +(2002-08-06, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=11718)
+ TableScan
+ table: PUBLIC.CATALOG_PAGE
+ fieldNames: [CP_CATALOG_PAGE_SK, CP_CATALOG_PAGE_ID]
+ est: (rows=11718)
+ Exchange
+ distribution: single
+ est: (rows=9000)
+ Sort
+ collation: [I_ITEM_SK ASC]
+ est: (rows=9000)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: >(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 50.00)
+ fieldNames: [I_ITEM_SK, I_CURRENT_PRICE]
+ est: (rows=9000)
+ Exchange
+ distribution: single
+ est: (rows=100)
+ TableScan
+ table: PUBLIC.PROMOTION
+ predicate: =(P_CHANNEL_TV, _UTF-8'N')
+ fieldNames: [P_PROMO_SK, P_CHANNEL_TV]
+ est: (rows=100)
+ Project
+ projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
+ est: (rows=9675891)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'web channel', ||(_UTF-8'web_site', WEB_SITE_ID), SALES, RETURNS, PROFIT]
+ est: (rows=9675891)
+ ColocatedHashAggregate
+ fieldNames: [WEB_SITE_ID, SALES, RETURNS, PROFIT]
+ group: [WEB_SITE_ID]
+ aggregation: [SUM(WS_EXT_SALES_PRICE), SUM($f2), SUM($f3)]
+ est: (rows=9675891)
+ Project
+ fieldNames: [WEB_SITE_ID, WS_EXT_SALES_PRICE, $f2, $f3]
+ projection: [WEB_SITE_ID, WS_EXT_SALES_PRICE, CASE(IS NOT NULL(WR_RETURN_AMT), CAST(WR_RETURN_AMT):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2)), -(WS_NET_PROFIT, CASE(IS NOT NULL(WR_NET_LOSS), CAST(WR_NET_LOSS):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2)))]
+ est: (rows=48379454)
+ HashJoin
+ predicate: =(WS_PROMO_SK, P_PROMO_SK)
+ type: inner
+ est: (rows=48379454)
+ MergeJoin
+ predicate: =(WS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=145283645)
+ HashJoin
+ predicate: =(WS_WEB_SITE_SK, WEB_SITE_SK)
+ type: inner
+ est: (rows=290567291)
+ HashJoin
+ predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=290567291)
+ MergeJoin
+ predicate: AND(=(WS_ITEM_SK, WR_ITEM_SK), =(WS_ORDER_NUMBER, WR_ORDER_NUMBER))
+ type: left
+ est: (rows=1162269163)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ Sort
+ collation: [WS_ITEM_SK ASC, WS_ORDER_NUMBER ASC]
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK, WS_WEB_SITE_SK, WS_PROMO_SK, WS_ORDER_NUMBER, WS_EXT_SALES_PRICE, WS_NET_PROFIT]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=71763)
+ Sort
+ collation: [WR_ITEM_SK ASC, WR_ORDER_NUMBER ASC]
+ est: (rows=71763)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ fieldNames: [WR_ITEM_SK, WR_ORDER_NUMBER, WR_RETURN_AMT, WR_NET_LOSS]
+ est: (rows=71763)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2002-08-06), <=(D_DATE, +(2002-08-06, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=30)
+ TableScan
+ table: PUBLIC.WEB_SITE
+ fieldNames: [WEB_SITE_SK, WEB_SITE_ID]
+ est: (rows=30)
+ Exchange
+ distribution: single
+ est: (rows=9000)
+ Sort
+ collation: [I_ITEM_SK ASC]
+ est: (rows=9000)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: >(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 50.00)
+ fieldNames: [I_ITEM_SK, I_CURRENT_PRICE]
+ est: (rows=9000)
+ Exchange
+ distribution: single
+ est: (rows=100)
+ TableScan
+ table: PUBLIC.PROMOTION
+ predicate: =(P_CHANNEL_TV, _UTF-8'N')
+ fieldNames: [P_PROMO_SK, P_CHANNEL_TV]
+ est: (rows=100)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q80_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q80_colocated.plan
new file mode 100644
index 00000000000..4ef30a74922
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q80_colocated.plan
@@ -0,0 +1,278 @@
+Sort
+ collation: [CHANNEL ASC, ID ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ group: [CHANNEL, ID]
+ groupSets: [[CHANNEL, ID], [CHANNEL], []]
+ aggregation: [SUM(SALES), SUM(RETURNS), SUM(PROFIT)]
+ est: (rows=110383850)
+ UnionAll
+ est: (rows=203736087)
+ Project
+ projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
+ est: (rows=155147500)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'store channel', ||(_UTF-8'store', STORE_ID), SALES, RETURNS, PROFIT]
+ est: (rows=155147500)
+ ColocatedHashAggregate
+ fieldNames: [STORE_ID, SALES, RETURNS, PROFIT]
+ group: [STORE_ID]
+ aggregation: [SUM(SS_EXT_SALES_PRICE), SUM($f2), SUM($f3)]
+ est: (rows=155147500)
+ Project
+ fieldNames: [STORE_ID, SS_EXT_SALES_PRICE, $f2, $f3]
+ projection: [S_STORE_ID, SS_EXT_SALES_PRICE, CASE(IS NOT NULL(SR_RETURN_AMT), CAST(SR_RETURN_AMT):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2)), -(SS_NET_PROFIT, CASE(IS NOT NULL(SR_NET_LOSS), CAST(SR_NET_LOSS):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2)))]
+ est: (rows=775737498)
+ HashJoin
+ predicate: =(SS_PROMO_SK, P_PROMO_SK)
+ type: inner
+ est: (rows=775737498)
+ MergeJoin
+ predicate: =(SS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=2329542037)
+ HashJoin
+ predicate: =(SS_STORE_SK, S_STORE_SK)
+ type: inner
+ est: (rows=4659084074)
+ HashJoin
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=4659084074)
+ MergeJoin
+ predicate: AND(=(SS_ITEM_SK, SR_ITEM_SK), =(SS_TICKET_NUMBER, SR_TICKET_NUMBER))
+ type: left
+ est: (rows=18636336297)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ Sort
+ collation: [SS_ITEM_SK ASC, SS_TICKET_NUMBER ASC]
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_STORE_SK, SS_PROMO_SK, SS_TICKET_NUMBER, SS_EXT_SALES_PRICE, SS_NET_PROFIT]
+ est: (rows=2880404)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ Sort
+ collation: [SR_ITEM_SK ASC, SR_TICKET_NUMBER ASC]
+ est: (rows=287514)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_ITEM_SK, SR_TICKET_NUMBER, SR_RETURN_AMT, SR_NET_LOSS]
+ est: (rows=287514)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2002-08-06), <=(D_DATE, +(2002-08-06, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=12)
+ TableScan
+ table: PUBLIC.STORE
+ fieldNames: [S_STORE_SK, S_STORE_ID]
+ est: (rows=12)
+ Exchange
+ distribution: single
+ est: (rows=9000)
+ Sort
+ collation: [I_ITEM_SK ASC]
+ est: (rows=9000)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: >(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 50.00)
+ fieldNames: [I_ITEM_SK, I_CURRENT_PRICE]
+ est: (rows=9000)
+ Exchange
+ distribution: single
+ est: (rows=100)
+ TableScan
+ table: PUBLIC.PROMOTION
+ predicate: =(P_CHANNEL_TV, _UTF-8'N')
+ fieldNames: [P_PROMO_SK, P_CHANNEL_TV]
+ est: (rows=100)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'catalog channel', ||(_UTF-8'catalog_page', CATALOG_PAGE_ID), SALES, RETURNS, PROFIT]
+ est: (rows=38912696)
+ ColocatedHashAggregate
+ fieldNames: [CATALOG_PAGE_ID, SALES, RETURNS, PROFIT]
+ group: [CATALOG_PAGE_ID]
+ aggregation: [SUM(CS_EXT_SALES_PRICE), SUM($f2), SUM($f3)]
+ est: (rows=38912696)
+ Project
+ fieldNames: [CATALOG_PAGE_ID, CS_EXT_SALES_PRICE, $f2, $f3]
+ projection: [CP_CATALOG_PAGE_ID, CS_EXT_SALES_PRICE, CASE(IS NOT NULL(CR_RETURN_AMOUNT), CAST(CR_RETURN_AMOUNT):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2)), -(CS_NET_PROFIT, CASE(IS NOT NULL(CR_NET_LOSS), CAST(CR_NET_LOSS):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2)))]
+ est: (rows=194563482)
+ HashJoin
+ predicate: =(CS_PROMO_SK, P_PROMO_SK)
+ type: inner
+ est: (rows=194563482)
+ MergeJoin
+ predicate: =(CS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=584274721)
+ HashJoin
+ predicate: =(CS_CATALOG_PAGE_SK, CP_CATALOG_PAGE_SK)
+ type: inner
+ est: (rows=1168549442)
+ HashJoin
+ predicate: =(CS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=1168549442)
+ MergeJoin
+ predicate: AND(=(CS_ITEM_SK, CR_ITEM_SK), =(CS_ORDER_NUMBER, CR_ORDER_NUMBER))
+ type: left
+ est: (rows=4674197767)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ Sort
+ collation: [CS_ITEM_SK ASC, CS_ORDER_NUMBER ASC]
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_CATALOG_PAGE_SK, CS_ITEM_SK, CS_PROMO_SK, CS_ORDER_NUMBER, CS_EXT_SALES_PRICE, CS_NET_PROFIT]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=144067)
+ Sort
+ collation: [CR_ITEM_SK ASC, CR_ORDER_NUMBER ASC]
+ est: (rows=144067)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_ITEM_SK, CR_ORDER_NUMBER, CR_RETURN_AMOUNT, CR_NET_LOSS]
+ est: (rows=144067)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2002-08-06), <=(D_DATE, +(2002-08-06, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=11718)
+ TableScan
+ table: PUBLIC.CATALOG_PAGE
+ fieldNames: [CP_CATALOG_PAGE_SK, CP_CATALOG_PAGE_ID]
+ est: (rows=11718)
+ Exchange
+ distribution: single
+ est: (rows=9000)
+ Sort
+ collation: [I_ITEM_SK ASC]
+ est: (rows=9000)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: >(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 50.00)
+ fieldNames: [I_ITEM_SK, I_CURRENT_PRICE]
+ est: (rows=9000)
+ Exchange
+ distribution: single
+ est: (rows=100)
+ TableScan
+ table: PUBLIC.PROMOTION
+ predicate: =(P_CHANNEL_TV, _UTF-8'N')
+ fieldNames: [P_PROMO_SK, P_CHANNEL_TV]
+ est: (rows=100)
+ Project
+ projection: [CAST(CHANNEL):CHAR(15) CHARACTER SET "UTF-8" NOT NULL, CAST(ID):VARCHAR(28) CHARACTER SET "UTF-8", SALES, RETURNS, PROFIT]
+ est: (rows=9675891)
+ Project
+ fieldNames: [CHANNEL, ID, SALES, RETURNS, PROFIT]
+ projection: [_UTF-8'web channel', ||(_UTF-8'web_site', WEB_SITE_ID), SALES, RETURNS, PROFIT]
+ est: (rows=9675891)
+ ColocatedHashAggregate
+ fieldNames: [WEB_SITE_ID, SALES, RETURNS, PROFIT]
+ group: [WEB_SITE_ID]
+ aggregation: [SUM(WS_EXT_SALES_PRICE), SUM($f2), SUM($f3)]
+ est: (rows=9675891)
+ Project
+ fieldNames: [WEB_SITE_ID, WS_EXT_SALES_PRICE, $f2, $f3]
+ projection: [WEB_SITE_ID, WS_EXT_SALES_PRICE, CASE(IS NOT NULL(WR_RETURN_AMT), CAST(WR_RETURN_AMT):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2)), -(WS_NET_PROFIT, CASE(IS NOT NULL(WR_NET_LOSS), CAST(WR_NET_LOSS):DECIMAL(12, 2) NOT NULL, 0.00:DECIMAL(12, 2)))]
+ est: (rows=48379454)
+ HashJoin
+ predicate: =(WS_PROMO_SK, P_PROMO_SK)
+ type: inner
+ est: (rows=48379454)
+ MergeJoin
+ predicate: =(WS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=145283645)
+ HashJoin
+ predicate: =(WS_WEB_SITE_SK, WEB_SITE_SK)
+ type: inner
+ est: (rows=290567291)
+ HashJoin
+ predicate: =(WS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=290567291)
+ MergeJoin
+ predicate: AND(=(WS_ITEM_SK, WR_ITEM_SK), =(WS_ORDER_NUMBER, WR_ORDER_NUMBER))
+ type: left
+ est: (rows=1162269163)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ Sort
+ collation: [WS_ITEM_SK ASC, WS_ORDER_NUMBER ASC]
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK, WS_WEB_SITE_SK, WS_PROMO_SK, WS_ORDER_NUMBER, WS_EXT_SALES_PRICE, WS_NET_PROFIT]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=71763)
+ Sort
+ collation: [WR_ITEM_SK ASC, WR_ORDER_NUMBER ASC]
+ est: (rows=71763)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ fieldNames: [WR_ITEM_SK, WR_ORDER_NUMBER, WR_RETURN_AMT, WR_NET_LOSS]
+ est: (rows=71763)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2002-08-06), <=(D_DATE, +(2002-08-06, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=30)
+ TableScan
+ table: PUBLIC.WEB_SITE
+ fieldNames: [WEB_SITE_SK, WEB_SITE_ID]
+ est: (rows=30)
+ Exchange
+ distribution: single
+ est: (rows=9000)
+ Sort
+ collation: [I_ITEM_SK ASC]
+ est: (rows=9000)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: >(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 50.00)
+ fieldNames: [I_ITEM_SK, I_CURRENT_PRICE]
+ est: (rows=9000)
+ Exchange
+ distribution: single
+ est: (rows=100)
+ TableScan
+ table: PUBLIC.PROMOTION
+ predicate: =(P_CHANNEL_TV, _UTF-8'N')
+ fieldNames: [P_PROMO_SK, P_CHANNEL_TV]
+ est: (rows=100)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q82.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q82.plan
new file mode 100644
index 00000000000..8abf4ff3e9e
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q82.plan
@@ -0,0 +1,55 @@
+Sort
+ collation: [I_ITEM_ID ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ group: [I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE]
+ aggregation: []
+ est: (rows=20365)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE]
+ est: (rows=41731)
+ HashJoin
+ predicate: =(D_DATE_SK, INV_DATE_SK)
+ type: inner
+ est: (rows=41731)
+ HashJoin
+ predicate: =(SS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=166924)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_ITEM_SK]
+ est: (rows=2880404)
+ HashJoin
+ predicate: =(INV_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=680641)
+ Exchange
+ distribution: single
+ est: (rows=2936250)
+ TableScan
+ table: PUBLIC.INVENTORY
+ predicate: SEARCH(INV_QUANTITY_ON_HAND, Sarg[[100..500]])
+ fieldNames: [INV_DATE_SK, INV_ITEM_SK, INV_QUANTITY_ON_HAND]
+ est: (rows=2936250)
+ Exchange
+ distribution: single
+ est: (rows=4173)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: AND(>=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 49.00), <=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), CAST(+(49, 30)):DECIMAL(12, 2) NOT NULL), SEARCH(I_MANUFACT_ID, Sarg[17, 80, 292, 675]))
+ fieldNames: [I_ITEM_SK, I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE, I_MANUFACT_ID]
+ est: (rows=4173)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2001-01-28), <=(D_DATE, +(2001-01-28, *(60, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q82_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q82_colocated.plan
new file mode 100644
index 00000000000..8abf4ff3e9e
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q82_colocated.plan
@@ -0,0 +1,55 @@
+Sort
+ collation: [I_ITEM_ID ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ group: [I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE]
+ aggregation: []
+ est: (rows=20365)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE]
+ est: (rows=41731)
+ HashJoin
+ predicate: =(D_DATE_SK, INV_DATE_SK)
+ type: inner
+ est: (rows=41731)
+ HashJoin
+ predicate: =(SS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=166924)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_ITEM_SK]
+ est: (rows=2880404)
+ HashJoin
+ predicate: =(INV_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=680641)
+ Exchange
+ distribution: single
+ est: (rows=2936250)
+ TableScan
+ table: PUBLIC.INVENTORY
+ predicate: SEARCH(INV_QUANTITY_ON_HAND, Sarg[[100..500]])
+ fieldNames: [INV_DATE_SK, INV_ITEM_SK, INV_QUANTITY_ON_HAND]
+ est: (rows=2936250)
+ Exchange
+ distribution: single
+ est: (rows=4173)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: AND(>=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), 49.00), <=(CAST(I_CURRENT_PRICE):DECIMAL(12, 2), CAST(+(49, 30)):DECIMAL(12, 2) NOT NULL), SEARCH(I_MANUFACT_ID, Sarg[17, 80, 292, 675]))
+ fieldNames: [I_ITEM_SK, I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE, I_MANUFACT_ID]
+ est: (rows=4173)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2001-01-28), <=(D_DATE, +(2001-01-28, *(60, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q83.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q83.plan
new file mode 100644
index 00000000000..2ca85b1eb48
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q83.plan
@@ -0,0 +1,297 @@
+Sort
+ collation: [ITEM_ID ASC, SR_ITEM_QTY ASC]
+ fetch: 100
+ est: (rows=100)
+ Project
+ fieldNames: [ITEM_ID, SR_ITEM_QTY, SR_DEV, CR_ITEM_QTY, CR_DEV, WR_ITEM_QTY, WR_DEV, AVERAGE]
+ projection: [ITEM_ID$0, SR_ITEM_QTY, *(/(/(SR_ITEM_QTY, +(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY)), 3.0:DECIMAL(2, 1)), 100), CR_ITEM_QTY, *(/(/(CR_ITEM_QTY, +(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY)), 3.0:DECIMAL(2, 1)), 100), WR_ITEM_QTY, *(/(/(WR_ITEM_QTY, +(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY)), 3.0:DECIMAL(2, 1)), 100), /(+(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY), 3.0:DECIMAL(2, 1))]
+ est: (rows=1131225932799338900)
+ MergeJoin
+ predicate: =(ITEM_ID$0, ITEM_ID)
+ fieldNames: [ITEM_ID, CR_ITEM_QTY, ITEM_ID$0, SR_ITEM_QTY, ITEM_ID$0$0, WR_ITEM_QTY]
+ type: inner
+ est: (rows=1131225932799338900)
+ Sort
+ collation: [ITEM_ID ASC]
+ est: (rows=21919)
+ ColocatedHashAggregate
+ fieldNames: [ITEM_ID, CR_ITEM_QTY]
+ group: [ITEM_ID]
+ aggregation: [SUM(CR_RETURN_QUANTITY)]
+ est: (rows=21919)
+ Project
+ fieldNames: [ITEM_ID, CR_RETURN_QUANTITY]
+ projection: [I_ITEM_ID, CR_RETURN_QUANTITY]
+ est: (rows=109595)
+ HashJoin
+ predicate: =(CR_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=109595)
+ MergeJoin
+ predicate: =(CR_RETURNED_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=109595)
+ Exchange
+ distribution: single
+ est: (rows=144067)
+ Sort
+ collation: [CR_RETURNED_DATE_SK ASC]
+ est: (rows=144067)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_RETURNED_DATE_SK, CR_ITEM_SK, CR_RETURN_QUANTITY]
+ est: (rows=144067)
+ HashJoin
+ predicate: =(D_DATE, D_DATE$0)
+ fieldNames: [D_DATE_SK, D_DATE, D_DATE$0]
+ type: inner
+ est: (rows=266877871676)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE_SK ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=73049)
+ ColocatedSortAggregate
+ collation: [D_DATE ASC]
+ group: [D_DATE]
+ aggregation: []
+ est: (rows=24356060)
+ Project
+ fieldNames: [D_DATE]
+ projection: [D_DATE]
+ est: (rows=121780299)
+ HashJoin
+ predicate: =(D_WEEK_SEQ, D_WEEK_SEQ$0)
+ fieldNames: [D_DATE, D_WEEK_SEQ, D_WEEK_SEQ$0]
+ type: inner
+ est: (rows=121780299)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE, D_WEEK_SEQ]
+ est: (rows=73049)
+ ReduceHashAggregate
+ fieldNames: [D_WEEK_SEQ]
+ group: [D_WEEK_SEQ]
+ aggregation: []
+ est: (rows=11114)
+ Exchange
+ distribution: single
+ est: (rows=11114)
+ MapHashAggregate
+ fieldNames: [D_WEEK_SEQ, _GROUP_ID]
+ group: [D_WEEK_SEQ]
+ aggregation: []
+ est: (rows=11114)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: SEARCH(D_DATE, Sarg[2000-06-17, 2000-08-22, 2000-11-17])
+ fieldNames: [D_WEEK_SEQ]
+ est: (rows=55570)
+ Exchange
+ distribution: single
+ est: (rows=18000)
+ TableScan
+ table: PUBLIC.ITEM
+ fieldNames: [I_ITEM_SK, I_ITEM_ID]
+ est: (rows=18000)
+ HashJoin
+ predicate: =(ITEM_ID, ITEM_ID$0)
+ fieldNames: [ITEM_ID, SR_ITEM_QTY, ITEM_ID$0, WR_ITEM_QTY]
+ type: inner
+ est: (rows=344061718558242)
+ Sort
+ collation: [ITEM_ID ASC]
+ est: (rows=43744)
+ ColocatedHashAggregate
+ fieldNames: [ITEM_ID, SR_ITEM_QTY]
+ group: [ITEM_ID]
+ aggregation: [SUM(SR_RETURN_QUANTITY)]
+ est: (rows=43744)
+ Project
+ fieldNames: [ITEM_ID, SR_RETURN_QUANTITY]
+ projection: [I_ITEM_ID, SR_RETURN_QUANTITY]
+ est: (rows=218719)
+ HashJoin
+ predicate: =(SR_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=218719)
+ MergeJoin
+ predicate: =(SR_RETURNED_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=218719)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ Sort
+ collation: [SR_RETURNED_DATE_SK ASC]
+ est: (rows=287514)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_RETURNED_DATE_SK, SR_ITEM_SK, SR_RETURN_QUANTITY]
+ est: (rows=287514)
+ HashJoin
+ predicate: =(D_DATE, D_DATE$0)
+ fieldNames: [D_DATE_SK, D_DATE, D_DATE$0]
+ type: inner
+ est: (rows=266877871676)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE_SK ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=73049)
+ ColocatedSortAggregate
+ collation: [D_DATE ASC]
+ group: [D_DATE]
+ aggregation: []
+ est: (rows=24356060)
+ Project
+ fieldNames: [D_DATE]
+ projection: [D_DATE]
+ est: (rows=121780299)
+ HashJoin
+ predicate: =(D_WEEK_SEQ, D_WEEK_SEQ$0)
+ fieldNames: [D_DATE, D_WEEK_SEQ, D_WEEK_SEQ$0]
+ type: inner
+ est: (rows=121780299)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE, D_WEEK_SEQ]
+ est: (rows=73049)
+ ReduceHashAggregate
+ fieldNames: [D_WEEK_SEQ]
+ group: [D_WEEK_SEQ]
+ aggregation: []
+ est: (rows=11114)
+ Exchange
+ distribution: single
+ est: (rows=11114)
+ MapHashAggregate
+ fieldNames: [D_WEEK_SEQ, _GROUP_ID]
+ group: [D_WEEK_SEQ]
+ aggregation: []
+ est: (rows=11114)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: SEARCH(D_DATE, Sarg[2000-06-17, 2000-08-22, 2000-11-17])
+ fieldNames: [D_WEEK_SEQ]
+ est: (rows=55570)
+ Exchange
+ distribution: single
+ est: (rows=18000)
+ TableScan
+ table: PUBLIC.ITEM
+ fieldNames: [I_ITEM_SK, I_ITEM_ID]
+ est: (rows=18000)
+ ColocatedHashAggregate
+ fieldNames: [ITEM_ID, WR_ITEM_QTY]
+ group: [ITEM_ID]
+ aggregation: [SUM(WR_RETURN_QUANTITY)]
+ est: (rows=52435917549)
+ Project
+ fieldNames: [ITEM_ID, WR_RETURN_QUANTITY]
+ projection: [I_ITEM_ID, WR_RETURN_QUANTITY]
+ est: (rows=262179587743)
+ MergeJoin
+ predicate: =(WR_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=262179587743)
+ Exchange
+ distribution: single
+ est: (rows=18000)
+ Sort
+ collation: [I_ITEM_SK ASC]
+ est: (rows=18000)
+ TableScan
+ table: PUBLIC.ITEM
+ fieldNames: [I_ITEM_SK, I_ITEM_ID]
+ est: (rows=18000)
+ HashJoin
+ predicate: =(D_DATE, D_DATE$0)
+ fieldNames: [D_DATE_SK, D_DATE, WR_RETURNED_DATE_SK, WR_ITEM_SK, WR_RETURN_QUANTITY, D_DATE$0]
+ type: inner
+ est: (rows=262179587743)
+ Sort
+ collation: [WR_ITEM_SK ASC]
+ est: (rows=71763)
+ HashJoin
+ predicate: =(WR_RETURNED_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=71763)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=73049)
+ Exchange
+ distribution: single
+ est: (rows=71763)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ fieldNames: [WR_RETURNED_DATE_SK, WR_ITEM_SK, WR_RETURN_QUANTITY]
+ est: (rows=71763)
+ ColocatedSortAggregate
+ collation: [D_DATE ASC]
+ group: [D_DATE]
+ aggregation: []
+ est: (rows=24356060)
+ Project
+ fieldNames: [D_DATE]
+ projection: [D_DATE]
+ est: (rows=121780299)
+ HashJoin
+ predicate: =(D_WEEK_SEQ, D_WEEK_SEQ$0)
+ fieldNames: [D_DATE, D_WEEK_SEQ, D_WEEK_SEQ$0]
+ type: inner
+ est: (rows=121780299)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE, D_WEEK_SEQ]
+ est: (rows=73049)
+ ReduceHashAggregate
+ fieldNames: [D_WEEK_SEQ]
+ group: [D_WEEK_SEQ]
+ aggregation: []
+ est: (rows=11114)
+ Exchange
+ distribution: single
+ est: (rows=11114)
+ MapHashAggregate
+ fieldNames: [D_WEEK_SEQ, _GROUP_ID]
+ group: [D_WEEK_SEQ]
+ aggregation: []
+ est: (rows=11114)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: SEARCH(D_DATE, Sarg[2000-06-17, 2000-08-22, 2000-11-17])
+ fieldNames: [D_WEEK_SEQ]
+ est: (rows=55570)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q83_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q83_colocated.plan
new file mode 100644
index 00000000000..2ca85b1eb48
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q83_colocated.plan
@@ -0,0 +1,297 @@
+Sort
+ collation: [ITEM_ID ASC, SR_ITEM_QTY ASC]
+ fetch: 100
+ est: (rows=100)
+ Project
+ fieldNames: [ITEM_ID, SR_ITEM_QTY, SR_DEV, CR_ITEM_QTY, CR_DEV, WR_ITEM_QTY, WR_DEV, AVERAGE]
+ projection: [ITEM_ID$0, SR_ITEM_QTY, *(/(/(SR_ITEM_QTY, +(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY)), 3.0:DECIMAL(2, 1)), 100), CR_ITEM_QTY, *(/(/(CR_ITEM_QTY, +(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY)), 3.0:DECIMAL(2, 1)), 100), WR_ITEM_QTY, *(/(/(WR_ITEM_QTY, +(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY)), 3.0:DECIMAL(2, 1)), 100), /(+(+(SR_ITEM_QTY, CR_ITEM_QTY), WR_ITEM_QTY), 3.0:DECIMAL(2, 1))]
+ est: (rows=1131225932799338900)
+ MergeJoin
+ predicate: =(ITEM_ID$0, ITEM_ID)
+ fieldNames: [ITEM_ID, CR_ITEM_QTY, ITEM_ID$0, SR_ITEM_QTY, ITEM_ID$0$0, WR_ITEM_QTY]
+ type: inner
+ est: (rows=1131225932799338900)
+ Sort
+ collation: [ITEM_ID ASC]
+ est: (rows=21919)
+ ColocatedHashAggregate
+ fieldNames: [ITEM_ID, CR_ITEM_QTY]
+ group: [ITEM_ID]
+ aggregation: [SUM(CR_RETURN_QUANTITY)]
+ est: (rows=21919)
+ Project
+ fieldNames: [ITEM_ID, CR_RETURN_QUANTITY]
+ projection: [I_ITEM_ID, CR_RETURN_QUANTITY]
+ est: (rows=109595)
+ HashJoin
+ predicate: =(CR_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=109595)
+ MergeJoin
+ predicate: =(CR_RETURNED_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=109595)
+ Exchange
+ distribution: single
+ est: (rows=144067)
+ Sort
+ collation: [CR_RETURNED_DATE_SK ASC]
+ est: (rows=144067)
+ TableScan
+ table: PUBLIC.CATALOG_RETURNS
+ fieldNames: [CR_RETURNED_DATE_SK, CR_ITEM_SK, CR_RETURN_QUANTITY]
+ est: (rows=144067)
+ HashJoin
+ predicate: =(D_DATE, D_DATE$0)
+ fieldNames: [D_DATE_SK, D_DATE, D_DATE$0]
+ type: inner
+ est: (rows=266877871676)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE_SK ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=73049)
+ ColocatedSortAggregate
+ collation: [D_DATE ASC]
+ group: [D_DATE]
+ aggregation: []
+ est: (rows=24356060)
+ Project
+ fieldNames: [D_DATE]
+ projection: [D_DATE]
+ est: (rows=121780299)
+ HashJoin
+ predicate: =(D_WEEK_SEQ, D_WEEK_SEQ$0)
+ fieldNames: [D_DATE, D_WEEK_SEQ, D_WEEK_SEQ$0]
+ type: inner
+ est: (rows=121780299)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE, D_WEEK_SEQ]
+ est: (rows=73049)
+ ReduceHashAggregate
+ fieldNames: [D_WEEK_SEQ]
+ group: [D_WEEK_SEQ]
+ aggregation: []
+ est: (rows=11114)
+ Exchange
+ distribution: single
+ est: (rows=11114)
+ MapHashAggregate
+ fieldNames: [D_WEEK_SEQ, _GROUP_ID]
+ group: [D_WEEK_SEQ]
+ aggregation: []
+ est: (rows=11114)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: SEARCH(D_DATE, Sarg[2000-06-17, 2000-08-22, 2000-11-17])
+ fieldNames: [D_WEEK_SEQ]
+ est: (rows=55570)
+ Exchange
+ distribution: single
+ est: (rows=18000)
+ TableScan
+ table: PUBLIC.ITEM
+ fieldNames: [I_ITEM_SK, I_ITEM_ID]
+ est: (rows=18000)
+ HashJoin
+ predicate: =(ITEM_ID, ITEM_ID$0)
+ fieldNames: [ITEM_ID, SR_ITEM_QTY, ITEM_ID$0, WR_ITEM_QTY]
+ type: inner
+ est: (rows=344061718558242)
+ Sort
+ collation: [ITEM_ID ASC]
+ est: (rows=43744)
+ ColocatedHashAggregate
+ fieldNames: [ITEM_ID, SR_ITEM_QTY]
+ group: [ITEM_ID]
+ aggregation: [SUM(SR_RETURN_QUANTITY)]
+ est: (rows=43744)
+ Project
+ fieldNames: [ITEM_ID, SR_RETURN_QUANTITY]
+ projection: [I_ITEM_ID, SR_RETURN_QUANTITY]
+ est: (rows=218719)
+ HashJoin
+ predicate: =(SR_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=218719)
+ MergeJoin
+ predicate: =(SR_RETURNED_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=218719)
+ Exchange
+ distribution: single
+ est: (rows=287514)
+ Sort
+ collation: [SR_RETURNED_DATE_SK ASC]
+ est: (rows=287514)
+ TableScan
+ table: PUBLIC.STORE_RETURNS
+ fieldNames: [SR_RETURNED_DATE_SK, SR_ITEM_SK, SR_RETURN_QUANTITY]
+ est: (rows=287514)
+ HashJoin
+ predicate: =(D_DATE, D_DATE$0)
+ fieldNames: [D_DATE_SK, D_DATE, D_DATE$0]
+ type: inner
+ est: (rows=266877871676)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE_SK ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=73049)
+ ColocatedSortAggregate
+ collation: [D_DATE ASC]
+ group: [D_DATE]
+ aggregation: []
+ est: (rows=24356060)
+ Project
+ fieldNames: [D_DATE]
+ projection: [D_DATE]
+ est: (rows=121780299)
+ HashJoin
+ predicate: =(D_WEEK_SEQ, D_WEEK_SEQ$0)
+ fieldNames: [D_DATE, D_WEEK_SEQ, D_WEEK_SEQ$0]
+ type: inner
+ est: (rows=121780299)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE, D_WEEK_SEQ]
+ est: (rows=73049)
+ ReduceHashAggregate
+ fieldNames: [D_WEEK_SEQ]
+ group: [D_WEEK_SEQ]
+ aggregation: []
+ est: (rows=11114)
+ Exchange
+ distribution: single
+ est: (rows=11114)
+ MapHashAggregate
+ fieldNames: [D_WEEK_SEQ, _GROUP_ID]
+ group: [D_WEEK_SEQ]
+ aggregation: []
+ est: (rows=11114)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: SEARCH(D_DATE, Sarg[2000-06-17, 2000-08-22, 2000-11-17])
+ fieldNames: [D_WEEK_SEQ]
+ est: (rows=55570)
+ Exchange
+ distribution: single
+ est: (rows=18000)
+ TableScan
+ table: PUBLIC.ITEM
+ fieldNames: [I_ITEM_SK, I_ITEM_ID]
+ est: (rows=18000)
+ ColocatedHashAggregate
+ fieldNames: [ITEM_ID, WR_ITEM_QTY]
+ group: [ITEM_ID]
+ aggregation: [SUM(WR_RETURN_QUANTITY)]
+ est: (rows=52435917549)
+ Project
+ fieldNames: [ITEM_ID, WR_RETURN_QUANTITY]
+ projection: [I_ITEM_ID, WR_RETURN_QUANTITY]
+ est: (rows=262179587743)
+ MergeJoin
+ predicate: =(WR_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=262179587743)
+ Exchange
+ distribution: single
+ est: (rows=18000)
+ Sort
+ collation: [I_ITEM_SK ASC]
+ est: (rows=18000)
+ TableScan
+ table: PUBLIC.ITEM
+ fieldNames: [I_ITEM_SK, I_ITEM_ID]
+ est: (rows=18000)
+ HashJoin
+ predicate: =(D_DATE, D_DATE$0)
+ fieldNames: [D_DATE_SK, D_DATE, WR_RETURNED_DATE_SK, WR_ITEM_SK, WR_RETURN_QUANTITY, D_DATE$0]
+ type: inner
+ est: (rows=262179587743)
+ Sort
+ collation: [WR_ITEM_SK ASC]
+ est: (rows=71763)
+ HashJoin
+ predicate: =(WR_RETURNED_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=71763)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=73049)
+ Exchange
+ distribution: single
+ est: (rows=71763)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ fieldNames: [WR_RETURNED_DATE_SK, WR_ITEM_SK, WR_RETURN_QUANTITY]
+ est: (rows=71763)
+ ColocatedSortAggregate
+ collation: [D_DATE ASC]
+ group: [D_DATE]
+ aggregation: []
+ est: (rows=24356060)
+ Project
+ fieldNames: [D_DATE]
+ projection: [D_DATE]
+ est: (rows=121780299)
+ HashJoin
+ predicate: =(D_WEEK_SEQ, D_WEEK_SEQ$0)
+ fieldNames: [D_DATE, D_WEEK_SEQ, D_WEEK_SEQ$0]
+ type: inner
+ est: (rows=121780299)
+ Exchange
+ distribution: single
+ est: (rows=73049)
+ Sort
+ collation: [D_DATE ASC]
+ est: (rows=73049)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ fieldNames: [D_DATE, D_WEEK_SEQ]
+ est: (rows=73049)
+ ReduceHashAggregate
+ fieldNames: [D_WEEK_SEQ]
+ group: [D_WEEK_SEQ]
+ aggregation: []
+ est: (rows=11114)
+ Exchange
+ distribution: single
+ est: (rows=11114)
+ MapHashAggregate
+ fieldNames: [D_WEEK_SEQ, _GROUP_ID]
+ group: [D_WEEK_SEQ]
+ aggregation: []
+ est: (rows=11114)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: SEARCH(D_DATE, Sarg[2000-06-17, 2000-08-22, 2000-11-17])
+ fieldNames: [D_WEEK_SEQ]
+ est: (rows=55570)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q92.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q92.plan
new file mode 100644
index 00000000000..dd8367471cc
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q92.plan
@@ -0,0 +1,104 @@
+Sort
+ collation: [Excess Discount Amount ASC]
+ fetch: 100
+ est: (rows=1)
+ ColocatedHashAggregate
+ fieldNames: [Excess Discount Amount]
+ group: []
+ aggregation: [SUM(WS_EXT_DISCOUNT_AMT)]
+ est: (rows=1)
+ Project
+ fieldNames: [WS_EXT_DISCOUNT_AMT]
+ projection: [WS_EXT_DISCOUNT_AMT]
+ est: (rows=29944)
+ Filter
+ predicate: >(CAST(WS_EXT_DISCOUNT_AMT):DECIMAL(23, 17), EXPR$0)
+ est: (rows=29944)
+ CorrelatedNestedLoopJoin
+ predicate: true
+ type: left
+ correlates: [$cor1]
+ est: (rows=59889)
+ Project
+ fieldNames: [WS_EXT_DISCOUNT_AMT, I_ITEM_SK]
+ projection: [WS_EXT_DISCOUNT_AMT, I_ITEM_SK]
+ est: (rows=59889)
+ HashJoin
+ predicate: =(I_ITEM_SK, WS_ITEM_SK)
+ type: inner
+ est: (rows=59889)
+ HashJoin
+ predicate: =(D_DATE_SK, WS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=179846)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK, WS_EXT_DISCOUNT_AMT]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2001-03-12), <=(D_DATE, +(2001-03-12, *(90, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_MANUFACT_ID, 356)
+ fieldNames: [I_ITEM_SK, I_MANUFACT_ID]
+ est: (rows=5994)
+ Project
+ fieldNames: [EXPR$0]
+ projection: [*(1.3:DECIMAL(2, 1), $f0)]
+ est: (rows=1)
+ Project
+ fieldNames: [$f0]
+ projection: [CASE(=(f0_0, 0:DECIMAL(32767, 0)), null:DECIMAL(21, 16), DECIMAL_DIVIDE(f0_0, f1_1, 21, 16))]
+ est: (rows=1)
+ ReduceSortAggregate
+ fieldNames: [f0_0, f1_1]
+ collation: []
+ group: []
+ aggregation: [SUM(0), $SUM0(1)]
+ est: (rows=1)
+ Project
+ fieldNames: [0, 1]
+ projection: [_ACC0, CAST(_ACC1):DECIMAL(32767, 0) NOT NULL]
+ est: (rows=1)
+ Exchange
+ distribution: single
+ est: (rows=1)
+ MapSortAggregate
+ fieldNames: [_ACC0, _ACC1]
+ collation: []
+ group: []
+ aggregation: [SUM(WS_EXT_DISCOUNT_AMT), COUNT(WS_EXT_DISCOUNT_AMT)]
+ est: (rows=1)
+ Project
+ fieldNames: [WS_EXT_DISCOUNT_AMT]
+ projection: [WS_EXT_DISCOUNT_AMT]
+ est: (rows=59889)
+ HashJoin
+ predicate: =(D_DATE_SK, WS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=59889)
+ Exchange
+ distribution: table PUBLIC.DATE_DIM in zone "Default" by [WS_SOLD_DATE_SK]
+ est: (rows=239555)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ predicate: =(WS_ITEM_SK, $cor1.I_ITEM_SK)
+ fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK, WS_EXT_DISCOUNT_AMT]
+ est: (rows=239555)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2001-03-12), <=(D_DATE, +(2001-03-12, *(90, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q92_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q92_colocated.plan
new file mode 100644
index 00000000000..dd8367471cc
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q92_colocated.plan
@@ -0,0 +1,104 @@
+Sort
+ collation: [Excess Discount Amount ASC]
+ fetch: 100
+ est: (rows=1)
+ ColocatedHashAggregate
+ fieldNames: [Excess Discount Amount]
+ group: []
+ aggregation: [SUM(WS_EXT_DISCOUNT_AMT)]
+ est: (rows=1)
+ Project
+ fieldNames: [WS_EXT_DISCOUNT_AMT]
+ projection: [WS_EXT_DISCOUNT_AMT]
+ est: (rows=29944)
+ Filter
+ predicate: >(CAST(WS_EXT_DISCOUNT_AMT):DECIMAL(23, 17), EXPR$0)
+ est: (rows=29944)
+ CorrelatedNestedLoopJoin
+ predicate: true
+ type: left
+ correlates: [$cor1]
+ est: (rows=59889)
+ Project
+ fieldNames: [WS_EXT_DISCOUNT_AMT, I_ITEM_SK]
+ projection: [WS_EXT_DISCOUNT_AMT, I_ITEM_SK]
+ est: (rows=59889)
+ HashJoin
+ predicate: =(I_ITEM_SK, WS_ITEM_SK)
+ type: inner
+ est: (rows=59889)
+ HashJoin
+ predicate: =(D_DATE_SK, WS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=179846)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK, WS_EXT_DISCOUNT_AMT]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2001-03-12), <=(D_DATE, +(2001-03-12, *(90, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=5994)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: =(I_MANUFACT_ID, 356)
+ fieldNames: [I_ITEM_SK, I_MANUFACT_ID]
+ est: (rows=5994)
+ Project
+ fieldNames: [EXPR$0]
+ projection: [*(1.3:DECIMAL(2, 1), $f0)]
+ est: (rows=1)
+ Project
+ fieldNames: [$f0]
+ projection: [CASE(=(f0_0, 0:DECIMAL(32767, 0)), null:DECIMAL(21, 16), DECIMAL_DIVIDE(f0_0, f1_1, 21, 16))]
+ est: (rows=1)
+ ReduceSortAggregate
+ fieldNames: [f0_0, f1_1]
+ collation: []
+ group: []
+ aggregation: [SUM(0), $SUM0(1)]
+ est: (rows=1)
+ Project
+ fieldNames: [0, 1]
+ projection: [_ACC0, CAST(_ACC1):DECIMAL(32767, 0) NOT NULL]
+ est: (rows=1)
+ Exchange
+ distribution: single
+ est: (rows=1)
+ MapSortAggregate
+ fieldNames: [_ACC0, _ACC1]
+ collation: []
+ group: []
+ aggregation: [SUM(WS_EXT_DISCOUNT_AMT), COUNT(WS_EXT_DISCOUNT_AMT)]
+ est: (rows=1)
+ Project
+ fieldNames: [WS_EXT_DISCOUNT_AMT]
+ projection: [WS_EXT_DISCOUNT_AMT]
+ est: (rows=59889)
+ HashJoin
+ predicate: =(D_DATE_SK, WS_SOLD_DATE_SK)
+ type: inner
+ est: (rows=59889)
+ Exchange
+ distribution: table PUBLIC.DATE_DIM in zone "Default" by [WS_SOLD_DATE_SK]
+ est: (rows=239555)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ predicate: =(WS_ITEM_SK, $cor1.I_ITEM_SK)
+ fieldNames: [WS_SOLD_DATE_SK, WS_ITEM_SK, WS_EXT_DISCOUNT_AMT]
+ est: (rows=239555)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2001-03-12), <=(D_DATE, +(2001-03-12, *(90, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q94.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q94.plan
new file mode 100644
index 00000000000..3ffd77615bf
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q94.plan
@@ -0,0 +1,129 @@
+Sort
+ collation: [order count ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedSortAggregate
+ fieldNames: [order count, total shipping cost, total net profit]
+ collation: []
+ group: []
+ aggregation: [COUNT(WS_ORDER_NUMBER), SUM(total shipping cost), SUM(total net profit)]
+ est: (rows=114166602536)
+ ColocatedSortAggregate
+ fieldNames: [WS_ORDER_NUMBER, total shipping cost, total net profit]
+ collation: [WS_ORDER_NUMBER ASC]
+ group: [WS_ORDER_NUMBER]
+ aggregation: [SUM(WS_EXT_SHIP_COST), SUM(WS_NET_PROFIT)]
+ est: (rows=114166602536)
+ Project
+ fieldNames: [WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ projection: [WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ est: (rows=570833012679)
+ Filter
+ predicate: IS NULL(i)
+ est: (rows=570833012679)
+ CorrelatedNestedLoopJoin
+ predicate: true
+ type: left
+ correlates: [$cor4]
+ est: (rows=2283332050716)
+ Project
+ fieldNames: [WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ projection: [WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ est: (rows=477742918)
+ CorrelatedNestedLoopJoin
+ predicate: true
+ type: inner
+ correlates: [$cor5]
+ est: (rows=477742918)
+ Sort
+ collation: [WS_ORDER_NUMBER ASC]
+ est: (rows=19943)
+ Project
+ fieldNames: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ projection: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ est: (rows=19943)
+ HashJoin
+ predicate: =(WS_SHIP_ADDR_SK, CA_ADDRESS_SK)
+ type: inner
+ est: (rows=19943)
+ HashJoin
+ predicate: =(WS_WEB_SITE_SK, WEB_SITE_SK)
+ type: inner
+ est: (rows=59889)
+ HashJoin
+ predicate: =(WS_SHIP_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=179846)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SHIP_DATE_SK, WS_SHIP_ADDR_SK, WS_WEB_SITE_SK, WS_WAREHOUSE_SK, WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 1999-04-01), <=(D_DATE, +(1999-04-01, *(60, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=10)
+ TableScan
+ table: PUBLIC.WEB_SITE
+ predicate: =(WEB_COMPANY_NAME, _UTF-8'pri')
+ fieldNames: [WEB_SITE_SK, WEB_COMPANY_NAME]
+ est: (rows=10)
+ Exchange
+ distribution: single
+ est: (rows=16650)
+ TableScan
+ table: PUBLIC.CUSTOMER_ADDRESS
+ predicate: =(CA_STATE, _UTF-8'NE')
+ fieldNames: [CA_ADDRESS_SK, CA_STATE]
+ est: (rows=16650)
+ Project
+ fieldNames: []
+ projection: []
+ est: (rows=23955)
+ ReduceHashAggregate
+ fieldNames: [i]
+ group: [i]
+ aggregation: []
+ est: (rows=23955)
+ Exchange
+ distribution: single
+ est: (rows=23955)
+ MapHashAggregate
+ fieldNames: [i, _GROUP_ID]
+ group: [i]
+ aggregation: []
+ est: (rows=23955)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ predicate: AND(=($cor5.WS_ORDER_NUMBER, WS_ORDER_NUMBER), <>($cor5.WS_WAREHOUSE_SK, WS_WAREHOUSE_SK))
+ fieldNames: [i]
+ projection: [true]
+ est: (rows=119777)
+ ReduceHashAggregate
+ fieldNames: [i]
+ group: [i]
+ aggregation: []
+ est: (rows=4779)
+ Exchange
+ distribution: single
+ est: (rows=4779)
+ MapHashAggregate
+ fieldNames: [i, _GROUP_ID]
+ group: [i]
+ aggregation: []
+ est: (rows=4779)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ predicate: =($cor4.WS_ORDER_NUMBER, WR_ORDER_NUMBER)
+ fieldNames: [i]
+ projection: [true]
+ est: (rows=23897)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q94_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q94_colocated.plan
new file mode 100644
index 00000000000..3ffd77615bf
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q94_colocated.plan
@@ -0,0 +1,129 @@
+Sort
+ collation: [order count ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedSortAggregate
+ fieldNames: [order count, total shipping cost, total net profit]
+ collation: []
+ group: []
+ aggregation: [COUNT(WS_ORDER_NUMBER), SUM(total shipping cost), SUM(total net profit)]
+ est: (rows=114166602536)
+ ColocatedSortAggregate
+ fieldNames: [WS_ORDER_NUMBER, total shipping cost, total net profit]
+ collation: [WS_ORDER_NUMBER ASC]
+ group: [WS_ORDER_NUMBER]
+ aggregation: [SUM(WS_EXT_SHIP_COST), SUM(WS_NET_PROFIT)]
+ est: (rows=114166602536)
+ Project
+ fieldNames: [WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ projection: [WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ est: (rows=570833012679)
+ Filter
+ predicate: IS NULL(i)
+ est: (rows=570833012679)
+ CorrelatedNestedLoopJoin
+ predicate: true
+ type: left
+ correlates: [$cor4]
+ est: (rows=2283332050716)
+ Project
+ fieldNames: [WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ projection: [WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ est: (rows=477742918)
+ CorrelatedNestedLoopJoin
+ predicate: true
+ type: inner
+ correlates: [$cor5]
+ est: (rows=477742918)
+ Sort
+ collation: [WS_ORDER_NUMBER ASC]
+ est: (rows=19943)
+ Project
+ fieldNames: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ projection: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ est: (rows=19943)
+ HashJoin
+ predicate: =(WS_SHIP_ADDR_SK, CA_ADDRESS_SK)
+ type: inner
+ est: (rows=19943)
+ HashJoin
+ predicate: =(WS_WEB_SITE_SK, WEB_SITE_SK)
+ type: inner
+ est: (rows=59889)
+ HashJoin
+ predicate: =(WS_SHIP_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=179846)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SHIP_DATE_SK, WS_SHIP_ADDR_SK, WS_WEB_SITE_SK, WS_WAREHOUSE_SK, WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 1999-04-01), <=(D_DATE, +(1999-04-01, *(60, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=10)
+ TableScan
+ table: PUBLIC.WEB_SITE
+ predicate: =(WEB_COMPANY_NAME, _UTF-8'pri')
+ fieldNames: [WEB_SITE_SK, WEB_COMPANY_NAME]
+ est: (rows=10)
+ Exchange
+ distribution: single
+ est: (rows=16650)
+ TableScan
+ table: PUBLIC.CUSTOMER_ADDRESS
+ predicate: =(CA_STATE, _UTF-8'NE')
+ fieldNames: [CA_ADDRESS_SK, CA_STATE]
+ est: (rows=16650)
+ Project
+ fieldNames: []
+ projection: []
+ est: (rows=23955)
+ ReduceHashAggregate
+ fieldNames: [i]
+ group: [i]
+ aggregation: []
+ est: (rows=23955)
+ Exchange
+ distribution: single
+ est: (rows=23955)
+ MapHashAggregate
+ fieldNames: [i, _GROUP_ID]
+ group: [i]
+ aggregation: []
+ est: (rows=23955)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ predicate: AND(=($cor5.WS_ORDER_NUMBER, WS_ORDER_NUMBER), <>($cor5.WS_WAREHOUSE_SK, WS_WAREHOUSE_SK))
+ fieldNames: [i]
+ projection: [true]
+ est: (rows=119777)
+ ReduceHashAggregate
+ fieldNames: [i]
+ group: [i]
+ aggregation: []
+ est: (rows=4779)
+ Exchange
+ distribution: single
+ est: (rows=4779)
+ MapHashAggregate
+ fieldNames: [i, _GROUP_ID]
+ group: [i]
+ aggregation: []
+ est: (rows=4779)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ predicate: =($cor4.WS_ORDER_NUMBER, WR_ORDER_NUMBER)
+ fieldNames: [i]
+ projection: [true]
+ est: (rows=23897)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q95.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q95.plan
new file mode 100644
index 00000000000..f48a8b08424
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q95.plan
@@ -0,0 +1,151 @@
+Sort
+ collation: [order count ASC]
+ fetch: 100
+ est: (rows=1)
+ ColocatedHashAggregate
+ fieldNames: [order count, total shipping cost, total net profit]
+ group: []
+ aggregation: [COUNT(DISTINCT WS_ORDER_NUMBER), SUM(WS_EXT_SHIP_COST), SUM(WS_NET_PROFIT)]
+ est: (rows=1)
+ Project
+ fieldNames: [WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ projection: [WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ est: (rows=291064492602986630000000000)
+ HashJoin
+ predicate: =(WS_WEB_SITE_SK, WEB_SITE_SK)
+ type: inner
+ est: (rows=291064492602986630000000000)
+ HashJoin
+ predicate: =(WS_SHIP_ADDR_SK, CA_ADDRESS_SK)
+ type: inner
+ est: (rows=874067545354314200000000000)
+ Exchange
+ distribution: single
+ est: (rows=16650)
+ TableScan
+ table: PUBLIC.CUSTOMER_ADDRESS
+ predicate: =(CA_STATE, _UTF-8'AL')
+ fieldNames: [CA_ADDRESS_SK, CA_STATE]
+ est: (rows=16650)
+ MergeJoin
+ predicate: =(WS_SHIP_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=2624827463526469000000000000)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ Sort
+ collation: [D_DATE_SK ASC]
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2002-04-01), <=(D_DATE, +(2002-04-01, *(60, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ HashJoin
+ predicate: =(WS_ORDER_NUMBER, WS_ORDER_NUMBER$0)
+ fieldNames: [WS_SHIP_DATE_SK, WS_SHIP_ADDR_SK, WS_WEB_SITE_SK, WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT, WR_ORDER_NUMBER, WS_ORDER_NUMBER$0]
+ type: inner
+ est: (rows=10499309854105876000000000000)
+ HashJoin
+ predicate: =(WS_ORDER_NUMBER, WR_ORDER_NUMBER)
+ type: inner
+ est: (rows=9016888221786429000)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ Sort
+ collation: [WS_SHIP_DATE_SK ASC]
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SHIP_DATE_SK, WS_SHIP_ADDR_SK, WS_WEB_SITE_SK, WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ est: (rows=719384)
+ ColocatedSortAggregate
+ collation: [WR_ORDER_NUMBER ASC]
+ group: [WR_ORDER_NUMBER]
+ aggregation: []
+ est: (rows=83561197003607)
+ Project
+ fieldNames: [WR_ORDER_NUMBER]
+ projection: [WR_ORDER_NUMBER]
+ est: (rows=417805985018035)
+ MergeJoin
+ predicate: =(WR_ORDER_NUMBER, WS_ORDER_NUMBER)
+ type: inner
+ est: (rows=417805985018035)
+ Exchange
+ distribution: single
+ est: (rows=71763)
+ Sort
+ collation: [WR_ORDER_NUMBER ASC]
+ est: (rows=71763)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ fieldNames: [WR_ORDER_NUMBER]
+ est: (rows=71763)
+ Project
+ fieldNames: [WS_ORDER_NUMBER]
+ projection: [WS_ORDER_NUMBER]
+ est: (rows=38813500459)
+ HashJoin
+ predicate: AND(=(WS_ORDER_NUMBER, WS_ORDER_NUMBER$0), <>(WS_WAREHOUSE_SK, WS_WAREHOUSE_SK$0))
+ fieldNames: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER, WS_WAREHOUSE_SK$0, WS_ORDER_NUMBER$0]
+ type: inner
+ est: (rows=38813500459)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ Sort
+ collation: [WS_ORDER_NUMBER ASC]
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER]
+ est: (rows=719384)
+ ColocatedSortAggregate
+ collation: [WS_ORDER_NUMBER ASC]
+ group: [WS_ORDER_NUMBER]
+ aggregation: []
+ est: (rows=7762700092)
+ Project
+ fieldNames: [WS_ORDER_NUMBER]
+ projection: [WS_ORDER_NUMBER]
+ est: (rows=38813500459)
+ HashJoin
+ predicate: AND(=(WS_ORDER_NUMBER, WS_ORDER_NUMBER$0), <>(WS_WAREHOUSE_SK, WS_WAREHOUSE_SK$0))
+ fieldNames: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER, WS_WAREHOUSE_SK$0, WS_ORDER_NUMBER$0]
+ type: inner
+ est: (rows=38813500459)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ Sort
+ collation: [WS_ORDER_NUMBER ASC]
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=10)
+ TableScan
+ table: PUBLIC.WEB_SITE
+ predicate: =(WEB_COMPANY_NAME, _UTF-8'pri')
+ fieldNames: [WEB_SITE_SK, WEB_COMPANY_NAME]
+ est: (rows=10)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q95_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q95_colocated.plan
new file mode 100644
index 00000000000..f48a8b08424
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q95_colocated.plan
@@ -0,0 +1,151 @@
+Sort
+ collation: [order count ASC]
+ fetch: 100
+ est: (rows=1)
+ ColocatedHashAggregate
+ fieldNames: [order count, total shipping cost, total net profit]
+ group: []
+ aggregation: [COUNT(DISTINCT WS_ORDER_NUMBER), SUM(WS_EXT_SHIP_COST), SUM(WS_NET_PROFIT)]
+ est: (rows=1)
+ Project
+ fieldNames: [WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ projection: [WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ est: (rows=291064492602986630000000000)
+ HashJoin
+ predicate: =(WS_WEB_SITE_SK, WEB_SITE_SK)
+ type: inner
+ est: (rows=291064492602986630000000000)
+ HashJoin
+ predicate: =(WS_SHIP_ADDR_SK, CA_ADDRESS_SK)
+ type: inner
+ est: (rows=874067545354314200000000000)
+ Exchange
+ distribution: single
+ est: (rows=16650)
+ TableScan
+ table: PUBLIC.CUSTOMER_ADDRESS
+ predicate: =(CA_STATE, _UTF-8'AL')
+ fieldNames: [CA_ADDRESS_SK, CA_STATE]
+ est: (rows=16650)
+ MergeJoin
+ predicate: =(WS_SHIP_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=2624827463526469000000000000)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ Sort
+ collation: [D_DATE_SK ASC]
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2002-04-01), <=(D_DATE, +(2002-04-01, *(60, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ HashJoin
+ predicate: =(WS_ORDER_NUMBER, WS_ORDER_NUMBER$0)
+ fieldNames: [WS_SHIP_DATE_SK, WS_SHIP_ADDR_SK, WS_WEB_SITE_SK, WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT, WR_ORDER_NUMBER, WS_ORDER_NUMBER$0]
+ type: inner
+ est: (rows=10499309854105876000000000000)
+ HashJoin
+ predicate: =(WS_ORDER_NUMBER, WR_ORDER_NUMBER)
+ type: inner
+ est: (rows=9016888221786429000)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ Sort
+ collation: [WS_SHIP_DATE_SK ASC]
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_SHIP_DATE_SK, WS_SHIP_ADDR_SK, WS_WEB_SITE_SK, WS_ORDER_NUMBER, WS_EXT_SHIP_COST, WS_NET_PROFIT]
+ est: (rows=719384)
+ ColocatedSortAggregate
+ collation: [WR_ORDER_NUMBER ASC]
+ group: [WR_ORDER_NUMBER]
+ aggregation: []
+ est: (rows=83561197003607)
+ Project
+ fieldNames: [WR_ORDER_NUMBER]
+ projection: [WR_ORDER_NUMBER]
+ est: (rows=417805985018035)
+ MergeJoin
+ predicate: =(WR_ORDER_NUMBER, WS_ORDER_NUMBER)
+ type: inner
+ est: (rows=417805985018035)
+ Exchange
+ distribution: single
+ est: (rows=71763)
+ Sort
+ collation: [WR_ORDER_NUMBER ASC]
+ est: (rows=71763)
+ TableScan
+ table: PUBLIC.WEB_RETURNS
+ fieldNames: [WR_ORDER_NUMBER]
+ est: (rows=71763)
+ Project
+ fieldNames: [WS_ORDER_NUMBER]
+ projection: [WS_ORDER_NUMBER]
+ est: (rows=38813500459)
+ HashJoin
+ predicate: AND(=(WS_ORDER_NUMBER, WS_ORDER_NUMBER$0), <>(WS_WAREHOUSE_SK, WS_WAREHOUSE_SK$0))
+ fieldNames: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER, WS_WAREHOUSE_SK$0, WS_ORDER_NUMBER$0]
+ type: inner
+ est: (rows=38813500459)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ Sort
+ collation: [WS_ORDER_NUMBER ASC]
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER]
+ est: (rows=719384)
+ ColocatedSortAggregate
+ collation: [WS_ORDER_NUMBER ASC]
+ group: [WS_ORDER_NUMBER]
+ aggregation: []
+ est: (rows=7762700092)
+ Project
+ fieldNames: [WS_ORDER_NUMBER]
+ projection: [WS_ORDER_NUMBER]
+ est: (rows=38813500459)
+ HashJoin
+ predicate: AND(=(WS_ORDER_NUMBER, WS_ORDER_NUMBER$0), <>(WS_WAREHOUSE_SK, WS_WAREHOUSE_SK$0))
+ fieldNames: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER, WS_WAREHOUSE_SK$0, WS_ORDER_NUMBER$0]
+ type: inner
+ est: (rows=38813500459)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ Sort
+ collation: [WS_ORDER_NUMBER ASC]
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=719384)
+ TableScan
+ table: PUBLIC.WEB_SALES
+ fieldNames: [WS_WAREHOUSE_SK, WS_ORDER_NUMBER]
+ est: (rows=719384)
+ Exchange
+ distribution: single
+ est: (rows=10)
+ TableScan
+ table: PUBLIC.WEB_SITE
+ predicate: =(WEB_COMPANY_NAME, _UTF-8'pri')
+ fieldNames: [WEB_SITE_SK, WEB_COMPANY_NAME]
+ est: (rows=10)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q98.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q98.plan
new file mode 100644
index 00000000000..144a59f82c8
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q98.plan
@@ -0,0 +1,47 @@
+Sort
+ collation: [I_CATEGORY ASC, I_CLASS ASC, I_ITEM_ID ASC, I_ITEM_DESC ASC, REVENUERATIO ASC]
+ est: (rows=368296)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE, REVENUERATIO]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE, /(*(ITEMREVENUE, 100), CASE(>(COUNT(ITEMREVENUE) OVER (PARTITION BY I_CLASS), 0), CAST(SUM(ITEMREVENUE) OVER (PARTITION BY I_CLASS)):DECIMAL(32767, 2), null:DECIMAL(32767, 2)))]
+ est: (rows=368296)
+ ColocatedHashAggregate
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE]
+ group: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE]
+ aggregation: [SUM(SS_EXT_SALES_PRICE)]
+ est: (rows=368296)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, SS_EXT_SALES_PRICE]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, SS_EXT_SALES_PRICE]
+ est: (rows=547798)
+ HashJoin
+ predicate: =(SS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=547798)
+ HashJoin
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=720101)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_EXT_SALES_PRICE]
+ est: (rows=2880404)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2002-01-05), <=(D_DATE, +(2002-01-05, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=13693)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: SEARCH(I_CATEGORY, Sarg[_UTF-8'Home':VARCHAR(50) CHARACTER SET "UTF-8", _UTF-8'Men':VARCHAR(50) CHARACTER SET "UTF-8", _UTF-8'Sports':VARCHAR(50) CHARACTER SET "UTF-8"]:VARCHAR(50) CHARACTER SET "UTF-8")
+ fieldNames: [I_ITEM_SK, I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE, I_CLASS, I_CATEGORY]
+ est: (rows=13693)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q98_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q98_colocated.plan
new file mode 100644
index 00000000000..144a59f82c8
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q98_colocated.plan
@@ -0,0 +1,47 @@
+Sort
+ collation: [I_CATEGORY ASC, I_CLASS ASC, I_ITEM_ID ASC, I_ITEM_DESC ASC, REVENUERATIO ASC]
+ est: (rows=368296)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE, REVENUERATIO]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE, /(*(ITEMREVENUE, 100), CASE(>(COUNT(ITEMREVENUE) OVER (PARTITION BY I_CLASS), 0), CAST(SUM(ITEMREVENUE) OVER (PARTITION BY I_CLASS)):DECIMAL(32767, 2), null:DECIMAL(32767, 2)))]
+ est: (rows=368296)
+ ColocatedHashAggregate
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, ITEMREVENUE]
+ group: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE]
+ aggregation: [SUM(SS_EXT_SALES_PRICE)]
+ est: (rows=368296)
+ Project
+ fieldNames: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, SS_EXT_SALES_PRICE]
+ projection: [I_ITEM_ID, I_ITEM_DESC, I_CATEGORY, I_CLASS, I_CURRENT_PRICE, SS_EXT_SALES_PRICE]
+ est: (rows=547798)
+ HashJoin
+ predicate: =(SS_ITEM_SK, I_ITEM_SK)
+ type: inner
+ est: (rows=547798)
+ HashJoin
+ predicate: =(SS_SOLD_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=720101)
+ Exchange
+ distribution: single
+ est: (rows=2880404)
+ TableScan
+ table: PUBLIC.STORE_SALES
+ fieldNames: [SS_SOLD_DATE_SK, SS_ITEM_SK, SS_EXT_SALES_PRICE]
+ est: (rows=2880404)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_DATE, 2002-01-05), <=(D_DATE, +(2002-01-05, *(30, 86400000:INTERVAL DAY))))
+ fieldNames: [D_DATE_SK, D_DATE]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=13693)
+ TableScan
+ table: PUBLIC.ITEM
+ predicate: SEARCH(I_CATEGORY, Sarg[_UTF-8'Home':VARCHAR(50) CHARACTER SET "UTF-8", _UTF-8'Men':VARCHAR(50) CHARACTER SET "UTF-8", _UTF-8'Sports':VARCHAR(50) CHARACTER SET "UTF-8"]:VARCHAR(50) CHARACTER SET "UTF-8")
+ fieldNames: [I_ITEM_SK, I_ITEM_ID, I_ITEM_DESC, I_CURRENT_PRICE, I_CLASS, I_CATEGORY]
+ est: (rows=13693)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q99.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q99.plan
new file mode 100644
index 00000000000..4f9da7b2141
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q99.plan
@@ -0,0 +1,65 @@
+Sort
+ collation: [EXPR$0 ASC, SM_TYPE ASC, CC_NAME ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ fieldNames: [EXPR$0, SM_TYPE, CC_NAME, 30 days, 31-60 days, 61-90 days, 91-120 days, >120 days]
+ group: [EXPR$0, SM_TYPE, CC_NAME]
+ aggregation: [SUM($f3), SUM($f4), SUM($f5), SUM($f6), SUM($f7)]
+ est: (rows=175869)
+ Project
+ fieldNames: [EXPR$0, SM_TYPE, CC_NAME, $f3, $f4, $f5, $f6, $f7]
+ projection: [SUBSTR(W_WAREHOUSE_NAME, 1, 20), SM_TYPE, CC_NAME, CASE(<=(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), 30), 1, 0), CASE(AND(>(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), 30), <=(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), 60)), 1, 0), CASE(AND(>(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), 60), <=(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), 90)), 1, 0), CASE(AND(>(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), 90), <=(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), 120)), 1, 0), CASE(>(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), [...]
+ est: (rows=360387)
+ HashJoin
+ predicate: =(CS_WAREHOUSE_SK, W_WAREHOUSE_SK)
+ type: inner
+ est: (rows=360387)
+ HashJoin
+ predicate: =(CS_SHIP_MODE_SK, SM_SHIP_MODE_SK)
+ type: inner
+ est: (rows=360387)
+ HashJoin
+ predicate: =(CS_CALL_CENTER_SK, CC_CALL_CENTER_SK)
+ type: inner
+ est: (rows=360387)
+ HashJoin
+ predicate: =(CS_SHIP_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=360387)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_SHIP_DATE_SK, CS_CALL_CENTER_SK, CS_SHIP_MODE_SK, CS_WAREHOUSE_SK]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_MONTH_SEQ, 1178), <=(D_MONTH_SEQ, +(1178, 11)))
+ fieldNames: [D_DATE_SK, D_MONTH_SEQ]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=6)
+ TableScan
+ table: PUBLIC.CALL_CENTER
+ fieldNames: [CC_CALL_CENTER_SK, CC_NAME]
+ est: (rows=6)
+ Exchange
+ distribution: single
+ est: (rows=20)
+ TableScan
+ table: PUBLIC.SHIP_MODE
+ fieldNames: [SM_SHIP_MODE_SK, SM_TYPE]
+ est: (rows=20)
+ Exchange
+ distribution: single
+ est: (rows=5)
+ TableScan
+ table: PUBLIC.WAREHOUSE
+ fieldNames: [W_WAREHOUSE_SK, W_WAREHOUSE_NAME]
+ est: (rows=5)
diff --git a/modules/sql-engine/src/test/resources/tpcds/plan/q99_colocated.plan b/modules/sql-engine/src/test/resources/tpcds/plan/q99_colocated.plan
new file mode 100644
index 00000000000..4f9da7b2141
--- /dev/null
+++ b/modules/sql-engine/src/test/resources/tpcds/plan/q99_colocated.plan
@@ -0,0 +1,65 @@
+Sort
+ collation: [EXPR$0 ASC, SM_TYPE ASC, CC_NAME ASC]
+ fetch: 100
+ est: (rows=100)
+ ColocatedHashAggregate
+ fieldNames: [EXPR$0, SM_TYPE, CC_NAME, 30 days, 31-60 days, 61-90 days, 91-120 days, >120 days]
+ group: [EXPR$0, SM_TYPE, CC_NAME]
+ aggregation: [SUM($f3), SUM($f4), SUM($f5), SUM($f6), SUM($f7)]
+ est: (rows=175869)
+ Project
+ fieldNames: [EXPR$0, SM_TYPE, CC_NAME, $f3, $f4, $f5, $f6, $f7]
+ projection: [SUBSTR(W_WAREHOUSE_NAME, 1, 20), SM_TYPE, CC_NAME, CASE(<=(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), 30), 1, 0), CASE(AND(>(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), 30), <=(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), 60)), 1, 0), CASE(AND(>(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), 60), <=(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), 90)), 1, 0), CASE(AND(>(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), 90), <=(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), 120)), 1, 0), CASE(>(-(CS_SHIP_DATE_SK, CS_SOLD_DATE_SK), [...]
+ est: (rows=360387)
+ HashJoin
+ predicate: =(CS_WAREHOUSE_SK, W_WAREHOUSE_SK)
+ type: inner
+ est: (rows=360387)
+ HashJoin
+ predicate: =(CS_SHIP_MODE_SK, SM_SHIP_MODE_SK)
+ type: inner
+ est: (rows=360387)
+ HashJoin
+ predicate: =(CS_CALL_CENTER_SK, CC_CALL_CENTER_SK)
+ type: inner
+ est: (rows=360387)
+ HashJoin
+ predicate: =(CS_SHIP_DATE_SK, D_DATE_SK)
+ type: inner
+ est: (rows=360387)
+ Exchange
+ distribution: single
+ est: (rows=1441548)
+ TableScan
+ table: PUBLIC.CATALOG_SALES
+ fieldNames: [CS_SOLD_DATE_SK, CS_SHIP_DATE_SK, CS_CALL_CENTER_SK, CS_SHIP_MODE_SK, CS_WAREHOUSE_SK]
+ est: (rows=1441548)
+ Exchange
+ distribution: single
+ est: (rows=18262)
+ TableScan
+ table: PUBLIC.DATE_DIM
+ predicate: AND(>=(D_MONTH_SEQ, 1178), <=(D_MONTH_SEQ, +(1178, 11)))
+ fieldNames: [D_DATE_SK, D_MONTH_SEQ]
+ est: (rows=18262)
+ Exchange
+ distribution: single
+ est: (rows=6)
+ TableScan
+ table: PUBLIC.CALL_CENTER
+ fieldNames: [CC_CALL_CENTER_SK, CC_NAME]
+ est: (rows=6)
+ Exchange
+ distribution: single
+ est: (rows=20)
+ TableScan
+ table: PUBLIC.SHIP_MODE
+ fieldNames: [SM_SHIP_MODE_SK, SM_TYPE]
+ est: (rows=20)
+ Exchange
+ distribution: single
+ est: (rows=5)
+ TableScan
+ table: PUBLIC.WAREHOUSE
+ fieldNames: [W_WAREHOUSE_SK, W_WAREHOUSE_NAME]
+ est: (rows=5)
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query12.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query12.sql
index 3267c967590..29e33f91f3c 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query12.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query12.sql
@@ -16,7 +16,7 @@ where
and i_category in ('Electronics', 'Books', 'Women')
and ws_sold_date_sk = d_date_sk
and d_date between cast('1998-01-06' as date)
- and (cast('1998-01-06' as date) + 30 days)
+ and (cast('1998-01-06' as date) + interval 30 days)
group by
i_item_id
,i_item_desc
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query16.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query16.sql
index affb71eb24b..32cf8040442 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query16.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query16.sql
@@ -1,8 +1,8 @@
-- start query 1 in stream 0 using template query16.tpl and seed 171719422
select
- count(distinct cs_order_number) as `order count`
- ,sum(cs_ext_ship_cost) as `total shipping cost`
- ,sum(cs_net_profit) as `total net profit`
+ count(distinct cs_order_number) as "order count"
+ ,sum(cs_ext_ship_cost) as "total shipping cost"
+ ,sum(cs_net_profit) as "total net profit"
from
catalog_sales cs1
,date_dim
@@ -10,7 +10,7 @@ from
,call_center
where
d_date between '1999-4-01' and
- (cast('1999-4-01' as date) + 60 days)
+ (cast('1999-4-01' as date) + interval 60 days)
and cs1.cs_ship_date_sk = d_date_sk
and cs1.cs_ship_addr_sk = ca_address_sk
and ca_state = 'IL'
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query20.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query20.sql
index f6e7e46128c..a7b19020705 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query20.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query20.sql
@@ -14,7 +14,7 @@ select i_item_id
and i_category in ('Shoes', 'Electronics', 'Children')
and cs_sold_date_sk = d_date_sk
and d_date between cast('2001-03-14' as date)
- and (cast('2001-03-14' as date) + 30 days)
+ and (cast('2001-03-14' as date) + interval 30 days)
group by i_item_id
,i_item_desc
,i_category
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query21.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query21.sql
index 372fcd781a0..02a461fd0e1 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query21.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query21.sql
@@ -16,8 +16,8 @@ select *
and i_item_sk = inv_item_sk
and inv_warehouse_sk = w_warehouse_sk
and inv_date_sk = d_date_sk
- and d_date between (cast ('1999-03-20' as date) - 30 days)
- and (cast ('1999-03-20' as date) + 30 days)
+ and d_date between (cast ('1999-03-20' as date) - interval 30 days)
+ and (cast ('1999-03-20' as date) + interval 30 days)
group by w_warehouse_name, i_item_id) x
where (case when inv_before > 0
then inv_after / inv_before
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query27.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query27.sql
index 9a906c4a026..6d6ceb79040 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query27.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query27.sql
@@ -1,6 +1,6 @@
-- start query 1 in stream 0 using template query27.tpl and seed 2017787633
select i_item_id,
- s_state, grouping(s_state) g_state,
+ s_state, grouping(s_state) as g_state,
avg(ss_quantity) agg1,
avg(ss_list_price) agg2,
avg(ss_coupon_amt) agg3,
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query32.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query32.sql
index f1f8098ca3a..5e997a5b264 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query32.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query32.sql
@@ -1,5 +1,5 @@
-- start query 1 in stream 0 using template query32.tpl and seed 2031708268
-select sum(cs_ext_discount_amt) as `excess discount amount`
+select sum(cs_ext_discount_amt) as "excess discount amount"
from
catalog_sales
,item
@@ -8,7 +8,7 @@ where
i_manufact_id = 66
and i_item_sk = cs_item_sk
and d_date between '2002-03-29' and
- (cast('2002-03-29' as date) + 90 days)
+ (cast('2002-03-29' as date) + interval 90 days)
and d_date_sk = cs_sold_date_sk
and cs_ext_discount_amt
> (
@@ -20,7 +20,7 @@ and cs_ext_discount_amt
where
cs_item_sk = i_item_sk
and d_date between '2002-03-29' and
- (cast('2002-03-29' as date) + 90 days)
+ (cast('2002-03-29' as date) + interval 90 days)
and d_date_sk = cs_sold_date_sk
)
limit 100;
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query37.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query37.sql
index 78960dba87e..18ce2e8d003 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query37.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query37.sql
@@ -6,7 +6,7 @@ select i_item_id
where i_current_price between 39 and 39 + 30
and inv_item_sk = i_item_sk
and d_date_sk=inv_date_sk
- and d_date between cast('2001-01-16' as date) and (cast('2001-01-16' as date) + 60 days)
+ and d_date between cast('2001-01-16' as date) and (cast('2001-01-16' as date) + interval 60 days)
and i_manufact_id in (765,886,889,728)
and inv_quantity_on_hand between 100 and 500
and cs_item_sk = i_item_sk
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query40.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query40.sql
index 333dc7fd38e..cfc2d43ffe0 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query40.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query40.sql
@@ -18,8 +18,8 @@ select
and i_item_sk = cs_item_sk
and cs_warehouse_sk = w_warehouse_sk
and cs_sold_date_sk = d_date_sk
- and d_date between (cast ('2000-03-18' as date) - 30 days)
- and (cast ('2000-03-18' as date) + 30 days)
+ and d_date between (cast ('2000-03-18' as date) - interval 30 days)
+ and (cast ('2000-03-18' as date) + interval 30 days)
group by
w_state,i_item_id
order by w_state,i_item_id
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query5.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query5.sql
index f8428f6e547..994b211326b 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query5.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query5.sql
@@ -26,7 +26,7 @@ with ssr as
store
where date_sk = d_date_sk
and d_date between cast('2000-08-19' as date)
- and (cast('2000-08-19' as date) + 14 days)
+ and (cast('2000-08-19' as date) + interval 14 days)
and store_sk = s_store_sk
group by s_store_id)
,
@@ -57,7 +57,7 @@ with ssr as
catalog_page
where date_sk = d_date_sk
and d_date between cast('2000-08-19' as date)
- and (cast('2000-08-19' as date) + 14 days)
+ and (cast('2000-08-19' as date) + interval 14 days)
and page_sk = cp_catalog_page_sk
group by cp_catalog_page_id)
,
@@ -90,7 +90,7 @@ with ssr as
web_site
where date_sk = d_date_sk
and d_date between cast('2000-08-19' as date)
- and (cast('2000-08-19' as date) + 14 days)
+ and (cast('2000-08-19' as date) + interval 14 days)
and wsr_web_site_sk = web_site_sk
group by web_site_id)
select channel
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query50.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query50.sql
index ea694397af1..206432b8ea6 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query50.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query50.sql
@@ -10,14 +10,14 @@ select
,s_county
,s_state
,s_zip
- ,sum(case when (sr_returned_date_sk - ss_sold_date_sk <= 30 ) then 1 else 0 end) as `30 days`
+ ,sum(case when (sr_returned_date_sk - ss_sold_date_sk <= 30 ) then 1 else 0 end) as "30 days"
,sum(case when (sr_returned_date_sk - ss_sold_date_sk > 30) and
- (sr_returned_date_sk - ss_sold_date_sk <= 60) then 1 else 0 end ) as `31-60 days`
+ (sr_returned_date_sk - ss_sold_date_sk <= 60) then 1 else 0 end ) as "31-60 days"
,sum(case when (sr_returned_date_sk - ss_sold_date_sk > 60) and
- (sr_returned_date_sk - ss_sold_date_sk <= 90) then 1 else 0 end) as `61-90 days`
+ (sr_returned_date_sk - ss_sold_date_sk <= 90) then 1 else 0 end) as "61-90 days"
,sum(case when (sr_returned_date_sk - ss_sold_date_sk > 90) and
- (sr_returned_date_sk - ss_sold_date_sk <= 120) then 1 else 0 end) as `91-120 days`
- ,sum(case when (sr_returned_date_sk - ss_sold_date_sk > 120) then 1 else 0 end) as `>120 days`
+ (sr_returned_date_sk - ss_sold_date_sk <= 120) then 1 else 0 end) as "91-120 days"
+ ,sum(case when (sr_returned_date_sk - ss_sold_date_sk > 120) then 1 else 0 end) as ">120 days"
from
store_sales
,store_returns
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query58.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query58.sql
index 36a4359807d..2d132d19c92 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query58.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query58.sql
@@ -10,7 +10,7 @@ with ss_items as
from date_dim
where d_week_seq = (select d_week_seq
from date_dim
- where d_date = '1998-02-21'))
+ where d_date = date '1998-02-21'))
and ss_sold_date_sk = d_date_sk
group by i_item_id),
cs_items as
@@ -24,7 +24,7 @@ with ss_items as
from date_dim
where d_week_seq = (select d_week_seq
from date_dim
- where d_date = '1998-02-21'))
+ where d_date = date '1998-02-21'))
and cs_sold_date_sk = d_date_sk
group by i_item_id),
ws_items as
@@ -38,7 +38,7 @@ with ss_items as
from date_dim
where d_week_seq =(select d_week_seq
from date_dim
- where d_date = '1998-02-21'))
+ where d_date = date '1998-02-21'))
and ws_sold_date_sk = d_date_sk
group by i_item_id)
select ss_items.item_id
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query62.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query62.sql
index 374256db8b6..0f8c79422db 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query62.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query62.sql
@@ -3,14 +3,14 @@ select
substr(w_warehouse_name,1,20)
,sm_type
,web_name
- ,sum(case when (ws_ship_date_sk - ws_sold_date_sk <= 30 ) then 1 else 0 end) as `30 days`
+ ,sum(case when (ws_ship_date_sk - ws_sold_date_sk <= 30 ) then 1 else 0 end) as "30 days"
,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 30) and
- (ws_ship_date_sk - ws_sold_date_sk <= 60) then 1 else 0 end ) as `31-60 days`
+ (ws_ship_date_sk - ws_sold_date_sk <= 60) then 1 else 0 end ) as "31-60 days"
,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 60) and
- (ws_ship_date_sk - ws_sold_date_sk <= 90) then 1 else 0 end) as `61-90 days`
+ (ws_ship_date_sk - ws_sold_date_sk <= 90) then 1 else 0 end) as "61-90 days"
,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 90) and
- (ws_ship_date_sk - ws_sold_date_sk <= 120) then 1 else 0 end) as `91-120 days`
- ,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 120) then 1 else 0 end) as `>120 days`
+ (ws_ship_date_sk - ws_sold_date_sk <= 120) then 1 else 0 end) as "91-120 days"
+ ,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 120) then 1 else 0 end) as ">120 days"
from
web_sales
,warehouse
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query66.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query66.sql
index 987238b1258..1451d85b814 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query66.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query66.sql
@@ -7,7 +7,7 @@ select
,w_state
,w_country
,ship_carriers
- ,year
+ ,"year"
,sum(jan_sales) as jan_sales
,sum(feb_sales) as feb_sales
,sum(mar_sales) as mar_sales
@@ -53,7 +53,7 @@ select
,w_state
,w_country
,'MSC' || ',' || 'GERMA' as ship_carriers
- ,d_year as year
+ ,d_year as "year"
,sum(case when d_moy = 1
then ws_sales_price* ws_quantity else 0 end) as jan_sales
,sum(case when d_moy = 2
@@ -133,7 +133,7 @@ select
,w_state
,w_country
,'MSC' || ',' || 'GERMA' as ship_carriers
- ,d_year as year
+ ,d_year as "year"
,sum(case when d_moy = 1
then cs_ext_list_price* cs_quantity else 0 end) as jan_sales
,sum(case when d_moy = 2
@@ -213,7 +213,7 @@ select
,w_state
,w_country
,ship_carriers
- ,year
+ ,"year"
order by w_warehouse_name
limit 100;
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query74.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query74.sql
index d44235f5cd6..b461cfbdf47 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query74.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query74.sql
@@ -3,7 +3,7 @@ with year_total as (
select c_customer_id customer_id
,c_first_name customer_first_name
,c_last_name customer_last_name
- ,d_year as year
+ ,d_year as "year"
,sum(ss_net_paid) year_total
,'s' sale_type
from customer
@@ -20,7 +20,7 @@ with year_total as (
select c_customer_id customer_id
,c_first_name customer_first_name
,c_last_name customer_last_name
- ,d_year as year
+ ,d_year as "year"
,sum(ws_net_paid) year_total
,'w' sale_type
from customer
@@ -47,10 +47,10 @@ with year_total as (
and t_w_firstyear.sale_type = 'w'
and t_s_secyear.sale_type = 's'
and t_w_secyear.sale_type = 'w'
- and t_s_firstyear.year = 1998
- and t_s_secyear.year = 1998+1
- and t_w_firstyear.year = 1998
- and t_w_secyear.year = 1998+1
+ and t_s_firstyear."year" = 1998
+ and t_s_secyear."year" = 1998+1
+ and t_w_firstyear."year" = 1998
+ and t_w_secyear."year" = 1998+1
and t_s_firstyear.year_total > 0
and t_w_firstyear.year_total > 0
and case when t_w_firstyear.year_total > 0 then t_w_secyear.year_total / t_w_firstyear.year_total else null end
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query75.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query75.sql
index 50b507e1b5a..a9c8bf43925 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query75.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query75.sql
@@ -47,7 +47,7 @@ WITH all_sales AS (
WHERE i_category='Sports') sales_detail
GROUP BY d_year, i_brand_id, i_class_id, i_category_id, i_manufact_id)
SELECT prev_yr.d_year AS prev_year
- ,curr_yr.d_year AS year
+ ,curr_yr.d_year AS "year"
,curr_yr.i_brand_id
,curr_yr.i_class_id
,curr_yr.i_category_id
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query77.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query77.sql
index ce875c85b02..3762ac4af5a 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query77.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query77.sql
@@ -8,7 +8,7 @@ with ss as
store
where ss_sold_date_sk = d_date_sk
and d_date between cast('2000-08-16' as date)
- and (cast('2000-08-16' as date) + 30 days)
+ and (cast('2000-08-16' as date) + interval 30 days)
and ss_store_sk = s_store_sk
group by s_store_sk)
,
@@ -21,7 +21,7 @@ with ss as
store
where sr_returned_date_sk = d_date_sk
and d_date between cast('2000-08-16' as date)
- and (cast('2000-08-16' as date) + 30 days)
+ and (cast('2000-08-16' as date) + interval 30 days)
and sr_store_sk = s_store_sk
group by s_store_sk),
cs as
@@ -32,7 +32,7 @@ with ss as
date_dim
where cs_sold_date_sk = d_date_sk
and d_date between cast('2000-08-16' as date)
- and (cast('2000-08-16' as date) + 30 days)
+ and (cast('2000-08-16' as date) + interval 30 days)
group by cs_call_center_sk
),
cr as
@@ -43,7 +43,7 @@ with ss as
date_dim
where cr_returned_date_sk = d_date_sk
and d_date between cast('2000-08-16' as date)
- and (cast('2000-08-16' as date) + 30 days)
+ and (cast('2000-08-16' as date) + interval 30 days)
group by cr_call_center_sk
),
ws as
@@ -55,7 +55,7 @@ with ss as
web_page
where ws_sold_date_sk = d_date_sk
and d_date between cast('2000-08-16' as date)
- and (cast('2000-08-16' as date) + 30 days)
+ and (cast('2000-08-16' as date) + interval 30 days)
and ws_web_page_sk = wp_web_page_sk
group by wp_web_page_sk),
wr as
@@ -67,7 +67,7 @@ with ss as
web_page
where wr_returned_date_sk = d_date_sk
and d_date between cast('2000-08-16' as date)
- and (cast('2000-08-16' as date) + 30 days)
+ and (cast('2000-08-16' as date) + interval 30 days)
and wr_web_page_sk = wp_web_page_sk
group by wp_web_page_sk)
select channel
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query80.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query80.sql
index 522f9e0c3c8..154350c1c6c 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query80.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query80.sql
@@ -12,7 +12,7 @@ with ssr as
promotion
where ss_sold_date_sk = d_date_sk
and d_date between cast('2002-08-06' as date)
- and (cast('2002-08-06' as date) + 30 days)
+ and (cast('2002-08-06' as date) + interval 30 days)
and ss_store_sk = s_store_sk
and ss_item_sk = i_item_sk
and i_current_price > 50
@@ -33,7 +33,7 @@ with ssr as
promotion
where cs_sold_date_sk = d_date_sk
and d_date between cast('2002-08-06' as date)
- and (cast('2002-08-06' as date) + 30 days)
+ and (cast('2002-08-06' as date) + interval 30 days)
and cs_catalog_page_sk = cp_catalog_page_sk
and cs_item_sk = i_item_sk
and i_current_price > 50
@@ -54,7 +54,7 @@ group by cp_catalog_page_id)
promotion
where ws_sold_date_sk = d_date_sk
and d_date between cast('2002-08-06' as date)
- and (cast('2002-08-06' as date) + 30 days)
+ and (cast('2002-08-06' as date) + interval 30 days)
and ws_web_site_sk = web_site_sk
and ws_item_sk = i_item_sk
and i_current_price > 50
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query82.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query82.sql
index fd83a7833c4..263bc6fc888 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query82.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query82.sql
@@ -6,7 +6,7 @@ select i_item_id
where i_current_price between 49 and 49+30
and inv_item_sk = i_item_sk
and d_date_sk=inv_date_sk
- and d_date between cast('2001-01-28' as date) and (cast('2001-01-28' as date) + 60 days)
+ and d_date between cast('2001-01-28' as date) and (cast('2001-01-28' as date) + interval 60 days)
and i_manufact_id in (80,675,292,17)
and inv_quantity_on_hand between 100 and 500
and ss_item_sk = i_item_sk
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query83.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query83.sql
index 49d5bc199b6..139d34c121b 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query83.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query83.sql
@@ -12,7 +12,7 @@ with sr_items as
where d_week_seq in
(select d_week_seq
from date_dim
- where d_date in ('2000-06-17','2000-08-22','2000-11-17')))
+ where d_date in (date '2000-06-17',date '2000-08-22',date '2000-11-17')))
and sr_returned_date_sk = d_date_sk
group by i_item_id),
cr_items as
@@ -28,7 +28,7 @@ with sr_items as
where d_week_seq in
(select d_week_seq
from date_dim
- where d_date in ('2000-06-17','2000-08-22','2000-11-17')))
+ where d_date in (date '2000-06-17',date '2000-08-22',date '2000-11-17')))
and cr_returned_date_sk = d_date_sk
group by i_item_id),
wr_items as
@@ -44,7 +44,7 @@ with sr_items as
where d_week_seq in
(select d_week_seq
from date_dim
- where d_date in ('2000-06-17','2000-08-22','2000-11-17')))
+ where d_date in (date '2000-06-17',date '2000-08-22',date '2000-11-17')))
and wr_returned_date_sk = d_date_sk
group by i_item_id)
select sr_items.item_id
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query92.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query92.sql
index 3f83e0ea764..c67af17d75a 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query92.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query92.sql
@@ -1,6 +1,6 @@
-- start query 1 in stream 0 using template query92.tpl and seed 2031708268
select
- sum(ws_ext_discount_amt) as `Excess Discount Amount`
+ sum(ws_ext_discount_amt) as "Excess Discount Amount"
from
web_sales
,item
@@ -9,7 +9,7 @@ where
i_manufact_id = 356
and i_item_sk = ws_item_sk
and d_date between '2001-03-12' and
- (cast('2001-03-12' as date) + 90 days)
+ (cast('2001-03-12' as date) + interval 90 days)
and d_date_sk = ws_sold_date_sk
and ws_ext_discount_amt
> (
@@ -21,7 +21,7 @@ and ws_ext_discount_amt
WHERE
ws_item_sk = i_item_sk
and d_date between '2001-03-12' and
- (cast('2001-03-12' as date) + 90 days)
+ (cast('2001-03-12' as date) + interval 90 days)
and d_date_sk = ws_sold_date_sk
)
order by sum(ws_ext_discount_amt)
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query94.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query94.sql
index 76783ba71a6..ad28042276a 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query94.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query94.sql
@@ -1,8 +1,8 @@
-- start query 1 in stream 0 using template query94.tpl and seed 2031708268
select
- count(distinct ws_order_number) as `order count`
- ,sum(ws_ext_ship_cost) as `total shipping cost`
- ,sum(ws_net_profit) as `total net profit`
+ count(distinct ws_order_number) as "order count"
+ ,sum(ws_ext_ship_cost) as "total shipping cost"
+ ,sum(ws_net_profit) as "total net profit"
from
web_sales ws1
,date_dim
@@ -10,7 +10,7 @@ from
,web_site
where
d_date between '1999-4-01' and
- (cast('1999-4-01' as date) + 60 days)
+ (cast('1999-4-01' as date) + interval 60 days)
and ws1.ws_ship_date_sk = d_date_sk
and ws1.ws_ship_addr_sk = ca_address_sk
and ca_state = 'NE'
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query95.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query95.sql
index e8e9063fbd3..bdc71ee189e 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query95.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query95.sql
@@ -5,9 +5,9 @@ with ws_wh as
where ws1.ws_order_number = ws2.ws_order_number
and ws1.ws_warehouse_sk <> ws2.ws_warehouse_sk)
select
- count(distinct ws_order_number) as `order count`
- ,sum(ws_ext_ship_cost) as `total shipping cost`
- ,sum(ws_net_profit) as `total net profit`
+ count(distinct ws_order_number) as "order count"
+ ,sum(ws_ext_ship_cost) as "total shipping cost"
+ ,sum(ws_net_profit) as "total net profit"
from
web_sales ws1
,date_dim
@@ -15,7 +15,7 @@ from
,web_site
where
d_date between '2002-4-01' and
- (cast('2002-4-01' as date) + 60 days)
+ (cast('2002-4-01' as date) + interval 60 days)
and ws1.ws_ship_date_sk = d_date_sk
and ws1.ws_ship_addr_sk = ca_address_sk
and ca_state = 'AL'
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query98.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query98.sql
index e167dd989aa..4a043f67cf5 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query98.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query98.sql
@@ -16,7 +16,7 @@ where
and i_category in ('Home', 'Sports', 'Men')
and ss_sold_date_sk = d_date_sk
and d_date between cast('2002-01-05' as date)
- and (cast('2002-01-05' as date) + 30 days)
+ and (cast('2002-01-05' as date) + interval 30 days)
group by
i_item_id
,i_item_desc
diff --git a/modules/sql-engine/src/testFixtures/resources/tpcds/query99.sql b/modules/sql-engine/src/testFixtures/resources/tpcds/query99.sql
index 0f420a9eba9..95db9ab3e17 100644
--- a/modules/sql-engine/src/testFixtures/resources/tpcds/query99.sql
+++ b/modules/sql-engine/src/testFixtures/resources/tpcds/query99.sql
@@ -3,14 +3,14 @@ select
substr(w_warehouse_name,1,20)
,sm_type
,cc_name
- ,sum(case when (cs_ship_date_sk - cs_sold_date_sk <= 30 ) then 1 else 0 end) as `30 days`
+ ,sum(case when (cs_ship_date_sk - cs_sold_date_sk <= 30 ) then 1 else 0 end) as "30 days"
,sum(case when (cs_ship_date_sk - cs_sold_date_sk > 30) and
- (cs_ship_date_sk - cs_sold_date_sk <= 60) then 1 else 0 end ) as `31-60 days`
+ (cs_ship_date_sk - cs_sold_date_sk <= 60) then 1 else 0 end ) as "31-60 days"
,sum(case when (cs_ship_date_sk - cs_sold_date_sk > 60) and
- (cs_ship_date_sk - cs_sold_date_sk <= 90) then 1 else 0 end) as `61-90 days`
+ (cs_ship_date_sk - cs_sold_date_sk <= 90) then 1 else 0 end) as "61-90 days"
,sum(case when (cs_ship_date_sk - cs_sold_date_sk > 90) and
- (cs_ship_date_sk - cs_sold_date_sk <= 120) then 1 else 0 end) as `91-120 days`
- ,sum(case when (cs_ship_date_sk - cs_sold_date_sk > 120) then 1 else 0 end) as `>120 days`
+ (cs_ship_date_sk - cs_sold_date_sk <= 120) then 1 else 0 end) as "91-120 days"
+ ,sum(case when (cs_ship_date_sk - cs_sold_date_sk > 120) then 1 else 0 end) as ">120 days"
from
catalog_sales
,warehouse