From a911bdc41714680983c36b9428f37947ed19f7d9 Mon Sep 17 00:00:00 2001 From: Wenchen Fan Date: Fri, 10 Jun 2022 12:59:05 +0800 Subject: [PATCH 1/2] normalize plan id separately in PlanStabilitySuite --- .../sql/execution/exchange/Exchange.scala | 2 +- .../q10.sf100/explain.txt | 196 ++-- .../approved-plans-modified/q10/explain.txt | 104 +-- .../q19.sf100/explain.txt | 134 +-- .../approved-plans-modified/q19/explain.txt | 106 +-- .../q27.sf100/explain.txt | 174 ++-- .../approved-plans-modified/q27/explain.txt | 196 ++-- .../q3.sf100/explain.txt | 50 +- .../approved-plans-modified/q3/explain.txt | 48 +- .../q34.sf100/explain.txt | 88 +- .../approved-plans-modified/q34/explain.txt | 78 +- .../q42.sf100/explain.txt | 72 +- .../approved-plans-modified/q42/explain.txt | 48 +- .../q43.sf100/explain.txt | 72 +- .../approved-plans-modified/q43/explain.txt | 48 +- .../q46.sf100/explain.txt | 130 +-- .../approved-plans-modified/q46/explain.txt | 106 +-- .../q52.sf100/explain.txt | 72 +- .../approved-plans-modified/q52/explain.txt | 48 +- .../q53.sf100/explain.txt | 112 +-- .../approved-plans-modified/q53/explain.txt | 86 +- .../q55.sf100/explain.txt | 72 +- .../approved-plans-modified/q55/explain.txt | 48 +- .../q59.sf100/explain.txt | 196 ++-- .../approved-plans-modified/q59/explain.txt | 126 +-- .../q63.sf100/explain.txt | 112 +-- .../approved-plans-modified/q63/explain.txt | 86 +- .../q65.sf100/explain.txt | 144 +-- .../approved-plans-modified/q65/explain.txt | 134 +-- .../q68.sf100/explain.txt | 126 +-- .../approved-plans-modified/q68/explain.txt | 106 +-- .../q7.sf100/explain.txt | 76 +- .../approved-plans-modified/q7/explain.txt | 88 +- .../q73.sf100/explain.txt | 78 +- .../approved-plans-modified/q73/explain.txt | 78 +- .../q79.sf100/explain.txt | 88 +- .../approved-plans-modified/q79/explain.txt | 70 +- .../q89.sf100/explain.txt | 76 +- .../approved-plans-modified/q89/explain.txt | 88 +- .../q98.sf100/explain.txt | 84 +- .../approved-plans-modified/q98/explain.txt | 64 +- .../ss_max.sf100/explain.txt | 16 +- .../ss_max/explain.txt | 16 +- .../approved-plans-v1_4/q1.sf100/explain.txt | 138 +-- .../approved-plans-v1_4/q1/explain.txt | 126 +-- .../approved-plans-v1_4/q10.sf100/explain.txt | 202 ++-- .../approved-plans-v1_4/q10/explain.txt | 124 +-- .../approved-plans-v1_4/q11.sf100/explain.txt | 332 +++---- .../approved-plans-v1_4/q11/explain.txt | 302 +++--- .../approved-plans-v1_4/q12.sf100/explain.txt | 88 +- .../approved-plans-v1_4/q12/explain.txt | 56 +- .../approved-plans-v1_4/q13.sf100/explain.txt | 94 +- .../approved-plans-v1_4/q13/explain.txt | 98 +- .../q14a.sf100/explain.txt | 582 ++++++------ .../approved-plans-v1_4/q14a/explain.txt | 436 ++++----- .../q14b.sf100/explain.txt | 514 +++++----- .../approved-plans-v1_4/q14b/explain.txt | 380 ++++---- .../approved-plans-v1_4/q15.sf100/explain.txt | 94 +- .../approved-plans-v1_4/q15/explain.txt | 70 +- .../approved-plans-v1_4/q16.sf100/explain.txt | 222 ++--- .../approved-plans-v1_4/q16/explain.txt | 126 +-- .../approved-plans-v1_4/q17.sf100/explain.txt | 170 ++-- .../approved-plans-v1_4/q17/explain.txt | 146 +-- .../approved-plans-v1_4/q18.sf100/explain.txt | 158 ++-- .../approved-plans-v1_4/q18/explain.txt | 138 +-- .../approved-plans-v1_4/q19.sf100/explain.txt | 120 +-- .../approved-plans-v1_4/q19/explain.txt | 106 +-- .../approved-plans-v1_4/q2.sf100/explain.txt | 164 ++-- .../approved-plans-v1_4/q2/explain.txt | 88 +- .../approved-plans-v1_4/q20.sf100/explain.txt | 88 +- .../approved-plans-v1_4/q20/explain.txt | 56 +- .../approved-plans-v1_4/q21.sf100/explain.txt | 72 +- .../approved-plans-v1_4/q21/explain.txt | 76 +- .../approved-plans-v1_4/q22.sf100/explain.txt | 76 +- .../approved-plans-v1_4/q22/explain.txt | 56 +- .../q23a.sf100/explain.txt | 480 +++++----- .../approved-plans-v1_4/q23a/explain.txt | 330 +++---- .../q23b.sf100/explain.txt | 658 ++++++------- .../approved-plans-v1_4/q23b/explain.txt | 424 ++++----- .../q24a.sf100/explain.txt | 294 +++--- .../approved-plans-v1_4/q24a/explain.txt | 248 ++--- .../q24b.sf100/explain.txt | 294 +++--- .../approved-plans-v1_4/q24b/explain.txt | 248 ++--- .../approved-plans-v1_4/q25.sf100/explain.txt | 170 ++-- .../approved-plans-v1_4/q25/explain.txt | 146 +-- .../approved-plans-v1_4/q26.sf100/explain.txt | 86 +- .../approved-plans-v1_4/q26/explain.txt | 88 +- .../approved-plans-v1_4/q27.sf100/explain.txt | 88 +- .../approved-plans-v1_4/q27/explain.txt | 88 +- .../approved-plans-v1_4/q28.sf100/explain.txt | 316 +++---- .../approved-plans-v1_4/q28/explain.txt | 316 +++---- .../approved-plans-v1_4/q29.sf100/explain.txt | 186 ++-- .../approved-plans-v1_4/q29/explain.txt | 162 ++-- .../approved-plans-v1_4/q3.sf100/explain.txt | 50 +- .../approved-plans-v1_4/q3/explain.txt | 48 +- .../approved-plans-v1_4/q30.sf100/explain.txt | 222 ++--- .../approved-plans-v1_4/q30/explain.txt | 136 +-- .../approved-plans-v1_4/q31.sf100/explain.txt | 480 +++++----- .../approved-plans-v1_4/q31/explain.txt | 380 ++++---- .../approved-plans-v1_4/q32.sf100/explain.txt | 126 +-- .../approved-plans-v1_4/q32/explain.txt | 88 +- .../approved-plans-v1_4/q33.sf100/explain.txt | 206 ++-- .../approved-plans-v1_4/q33/explain.txt | 232 ++--- .../approved-plans-v1_4/q35.sf100/explain.txt | 182 ++-- .../approved-plans-v1_4/q35/explain.txt | 126 +-- .../approved-plans-v1_4/q36.sf100/explain.txt | 76 +- .../approved-plans-v1_4/q36/explain.txt | 76 +- .../approved-plans-v1_4/q37.sf100/explain.txt | 76 +- .../approved-plans-v1_4/q37/explain.txt | 44 +- .../approved-plans-v1_4/q38.sf100/explain.txt | 220 ++--- .../approved-plans-v1_4/q38/explain.txt | 138 +-- .../q39a.sf100/explain.txt | 178 ++-- .../approved-plans-v1_4/q39a/explain.txt | 178 ++-- .../q39b.sf100/explain.txt | 178 ++-- .../approved-plans-v1_4/q39b/explain.txt | 178 ++-- .../approved-plans-v1_4/q4.sf100/explain.txt | 502 +++++----- .../approved-plans-v1_4/q4/explain.txt | 460 ++++----- .../approved-plans-v1_4/q40.sf100/explain.txt | 148 +-- .../approved-plans-v1_4/q40/explain.txt | 116 +-- .../approved-plans-v1_4/q41.sf100/explain.txt | 16 +- .../approved-plans-v1_4/q41/explain.txt | 16 +- .../approved-plans-v1_4/q42.sf100/explain.txt | 50 +- .../approved-plans-v1_4/q42/explain.txt | 48 +- .../approved-plans-v1_4/q43.sf100/explain.txt | 72 +- .../approved-plans-v1_4/q43/explain.txt | 48 +- .../approved-plans-v1_4/q44.sf100/explain.txt | 132 +-- .../approved-plans-v1_4/q44/explain.txt | 136 +-- .../approved-plans-v1_4/q45.sf100/explain.txt | 120 +-- .../approved-plans-v1_4/q45/explain.txt | 114 +-- .../approved-plans-v1_4/q46.sf100/explain.txt | 178 ++-- .../approved-plans-v1_4/q46/explain.txt | 106 +-- .../approved-plans-v1_4/q47.sf100/explain.txt | 160 ++-- .../approved-plans-v1_4/q47/explain.txt | 158 ++-- .../approved-plans-v1_4/q48.sf100/explain.txt | 78 +- .../approved-plans-v1_4/q48/explain.txt | 78 +- .../approved-plans-v1_4/q49.sf100/explain.txt | 336 +++---- .../approved-plans-v1_4/q49/explain.txt | 316 +++---- .../approved-plans-v1_4/q5.sf100/explain.txt | 270 +++--- .../approved-plans-v1_4/q5/explain.txt | 248 ++--- .../approved-plans-v1_4/q50.sf100/explain.txt | 106 +-- .../approved-plans-v1_4/q50/explain.txt | 86 +- .../approved-plans-v1_4/q51.sf100/explain.txt | 138 +-- .../approved-plans-v1_4/q51/explain.txt | 138 +-- .../approved-plans-v1_4/q52.sf100/explain.txt | 50 +- .../approved-plans-v1_4/q52/explain.txt | 48 +- .../approved-plans-v1_4/q53.sf100/explain.txt | 112 +-- .../approved-plans-v1_4/q53/explain.txt | 86 +- .../approved-plans-v1_4/q54.sf100/explain.txt | 298 +++--- .../approved-plans-v1_4/q54/explain.txt | 256 ++--- .../approved-plans-v1_4/q55.sf100/explain.txt | 42 +- .../approved-plans-v1_4/q55/explain.txt | 48 +- .../approved-plans-v1_4/q56.sf100/explain.txt | 232 ++--- .../approved-plans-v1_4/q56/explain.txt | 232 ++--- .../approved-plans-v1_4/q57.sf100/explain.txt | 160 ++-- .../approved-plans-v1_4/q57/explain.txt | 158 ++-- .../approved-plans-v1_4/q58.sf100/explain.txt | 216 ++--- .../approved-plans-v1_4/q58/explain.txt | 228 ++--- .../approved-plans-v1_4/q59.sf100/explain.txt | 196 ++-- .../approved-plans-v1_4/q59/explain.txt | 120 +-- .../approved-plans-v1_4/q60.sf100/explain.txt | 232 ++--- .../approved-plans-v1_4/q60/explain.txt | 232 ++--- .../approved-plans-v1_4/q61.sf100/explain.txt | 188 ++-- .../approved-plans-v1_4/q61/explain.txt | 208 ++--- .../approved-plans-v1_4/q62.sf100/explain.txt | 80 +- .../approved-plans-v1_4/q62/explain.txt | 84 +- .../approved-plans-v1_4/q63.sf100/explain.txt | 112 +-- .../approved-plans-v1_4/q63/explain.txt | 86 +- .../approved-plans-v1_4/q65.sf100/explain.txt | 154 +-- .../approved-plans-v1_4/q65/explain.txt | 134 +-- .../approved-plans-v1_4/q66.sf100/explain.txt | 188 ++-- .../approved-plans-v1_4/q66/explain.txt | 194 ++-- .../approved-plans-v1_4/q67.sf100/explain.txt | 82 +- .../approved-plans-v1_4/q67/explain.txt | 76 +- .../approved-plans-v1_4/q68.sf100/explain.txt | 178 ++-- .../approved-plans-v1_4/q68/explain.txt | 106 +-- .../approved-plans-v1_4/q69.sf100/explain.txt | 194 ++-- .../approved-plans-v1_4/q69/explain.txt | 124 +-- .../approved-plans-v1_4/q7.sf100/explain.txt | 86 +- .../approved-plans-v1_4/q7/explain.txt | 88 +- .../approved-plans-v1_4/q70.sf100/explain.txt | 88 +- .../approved-plans-v1_4/q70/explain.txt | 94 +- .../approved-plans-v1_4/q71.sf100/explain.txt | 146 +-- .../approved-plans-v1_4/q71/explain.txt | 146 +-- .../approved-plans-v1_4/q72.sf100/explain.txt | 244 ++--- .../approved-plans-v1_4/q72/explain.txt | 220 ++--- .../approved-plans-v1_4/q73.sf100/explain.txt | 88 +- .../approved-plans-v1_4/q73/explain.txt | 78 +- .../approved-plans-v1_4/q76.sf100/explain.txt | 128 +-- .../approved-plans-v1_4/q76/explain.txt | 108 +-- .../approved-plans-v1_4/q77.sf100/explain.txt | 348 +++---- .../approved-plans-v1_4/q77/explain.txt | 348 +++---- .../approved-plans-v1_4/q79.sf100/explain.txt | 88 +- .../approved-plans-v1_4/q79/explain.txt | 70 +- .../approved-plans-v1_4/q8.sf100/explain.txt | 154 +-- .../approved-plans-v1_4/q8/explain.txt | 136 +-- .../approved-plans-v1_4/q80.sf100/explain.txt | 478 +++++----- .../approved-plans-v1_4/q80/explain.txt | 414 ++++---- .../approved-plans-v1_4/q81.sf100/explain.txt | 230 ++--- .../approved-plans-v1_4/q81/explain.txt | 132 +-- .../approved-plans-v1_4/q82.sf100/explain.txt | 76 +- .../approved-plans-v1_4/q82/explain.txt | 44 +- .../approved-plans-v1_4/q83.sf100/explain.txt | 202 ++-- .../approved-plans-v1_4/q83/explain.txt | 214 ++--- .../approved-plans-v1_4/q84.sf100/explain.txt | 86 +- .../approved-plans-v1_4/q84/explain.txt | 90 +- .../approved-plans-v1_4/q85.sf100/explain.txt | 250 ++--- .../approved-plans-v1_4/q85/explain.txt | 178 ++-- .../approved-plans-v1_4/q86.sf100/explain.txt | 56 +- .../approved-plans-v1_4/q86/explain.txt | 56 +- .../approved-plans-v1_4/q87.sf100/explain.txt | 220 ++--- .../approved-plans-v1_4/q87/explain.txt | 138 +-- .../approved-plans-v1_4/q88.sf100/explain.txt | 560 +++++------ .../approved-plans-v1_4/q88/explain.txt | 560 +++++------ .../approved-plans-v1_4/q89.sf100/explain.txt | 114 +-- .../approved-plans-v1_4/q89/explain.txt | 88 +- .../approved-plans-v1_4/q9.sf100/explain.txt | 154 +-- .../approved-plans-v1_4/q9/explain.txt | 154 +-- .../approved-plans-v1_4/q90.sf100/explain.txt | 132 +-- .../approved-plans-v1_4/q90/explain.txt | 132 +-- .../approved-plans-v1_4/q91.sf100/explain.txt | 142 +-- .../approved-plans-v1_4/q91/explain.txt | 138 +-- .../approved-plans-v1_4/q92.sf100/explain.txt | 144 +-- .../approved-plans-v1_4/q92/explain.txt | 98 +- .../approved-plans-v1_4/q93.sf100/explain.txt | 54 +- .../approved-plans-v1_4/q93/explain.txt | 76 +- .../approved-plans-v1_4/q94.sf100/explain.txt | 222 ++--- .../approved-plans-v1_4/q94/explain.txt | 126 +-- .../approved-plans-v1_4/q95.sf100/explain.txt | 270 +++--- .../approved-plans-v1_4/q95/explain.txt | 178 ++-- .../approved-plans-v1_4/q96.sf100/explain.txt | 56 +- .../approved-plans-v1_4/q96/explain.txt | 56 +- .../approved-plans-v1_4/q97.sf100/explain.txt | 86 +- .../approved-plans-v1_4/q97/explain.txt | 86 +- .../approved-plans-v1_4/q98.sf100/explain.txt | 96 +- .../approved-plans-v1_4/q98/explain.txt | 64 +- .../approved-plans-v1_4/q99.sf100/explain.txt | 80 +- .../approved-plans-v1_4/q99/explain.txt | 84 +- .../q10a.sf100/explain.txt | 184 ++-- .../approved-plans-v2_7/q10a/explain.txt | 118 +-- .../approved-plans-v2_7/q11.sf100/explain.txt | 328 +++---- .../approved-plans-v2_7/q11/explain.txt | 298 +++--- .../approved-plans-v2_7/q12.sf100/explain.txt | 88 +- .../approved-plans-v2_7/q12/explain.txt | 56 +- .../approved-plans-v2_7/q14.sf100/explain.txt | 514 +++++----- .../approved-plans-v2_7/q14/explain.txt | 380 ++++---- .../q14a.sf100/explain.txt | 738 +++++++-------- .../approved-plans-v2_7/q14a/explain.txt | 592 ++++++------ .../q18a.sf100/explain.txt | 504 +++++----- .../approved-plans-v2_7/q18a/explain.txt | 450 ++++----- .../approved-plans-v2_7/q20.sf100/explain.txt | 88 +- .../approved-plans-v2_7/q20/explain.txt | 56 +- .../approved-plans-v2_7/q22.sf100/explain.txt | 70 +- .../approved-plans-v2_7/q22/explain.txt | 42 +- .../q22a.sf100/explain.txt | 224 ++--- .../approved-plans-v2_7/q22a/explain.txt | 176 ++-- .../approved-plans-v2_7/q24.sf100/explain.txt | 298 +++--- .../approved-plans-v2_7/q24/explain.txt | 256 ++--- .../q27a.sf100/explain.txt | 196 ++-- .../approved-plans-v2_7/q27a/explain.txt | 196 ++-- .../approved-plans-v2_7/q34.sf100/explain.txt | 88 +- .../approved-plans-v2_7/q34/explain.txt | 78 +- .../approved-plans-v2_7/q35.sf100/explain.txt | 182 ++-- .../approved-plans-v2_7/q35/explain.txt | 126 +-- .../q35a.sf100/explain.txt | 172 ++-- .../approved-plans-v2_7/q35a/explain.txt | 120 +-- .../q36a.sf100/explain.txt | 152 +-- .../approved-plans-v2_7/q36a/explain.txt | 140 +-- .../approved-plans-v2_7/q47.sf100/explain.txt | 160 ++-- .../approved-plans-v2_7/q47/explain.txt | 158 ++-- .../approved-plans-v2_7/q49.sf100/explain.txt | 336 +++---- .../approved-plans-v2_7/q49/explain.txt | 316 +++---- .../q51a.sf100/explain.txt | 306 +++--- .../approved-plans-v2_7/q51a/explain.txt | 294 +++--- .../approved-plans-v2_7/q57.sf100/explain.txt | 160 ++-- .../approved-plans-v2_7/q57/explain.txt | 158 ++-- .../approved-plans-v2_7/q5a.sf100/explain.txt | 350 +++---- .../approved-plans-v2_7/q5a/explain.txt | 328 +++---- .../approved-plans-v2_7/q6.sf100/explain.txt | 154 +-- .../approved-plans-v2_7/q6/explain.txt | 168 ++-- .../approved-plans-v2_7/q64.sf100/explain.txt | 788 ++++++++-------- .../approved-plans-v2_7/q64/explain.txt | 660 ++++++------- .../q67a.sf100/explain.txt | 346 +++---- .../approved-plans-v2_7/q67a/explain.txt | 340 +++---- .../q70a.sf100/explain.txt | 152 +-- .../approved-plans-v2_7/q70a/explain.txt | 158 ++-- .../approved-plans-v2_7/q72.sf100/explain.txt | 244 ++--- .../approved-plans-v2_7/q72/explain.txt | 220 ++--- .../approved-plans-v2_7/q74.sf100/explain.txt | 328 +++---- .../approved-plans-v2_7/q74/explain.txt | 298 +++--- .../approved-plans-v2_7/q75.sf100/explain.txt | 470 +++++----- .../approved-plans-v2_7/q75/explain.txt | 470 +++++----- .../q77a.sf100/explain.txt | 428 ++++----- .../approved-plans-v2_7/q77a/explain.txt | 428 ++++----- .../approved-plans-v2_7/q78.sf100/explain.txt | 282 +++--- .../approved-plans-v2_7/q78/explain.txt | 282 +++--- .../q80a.sf100/explain.txt | 884 +++++++++--------- .../approved-plans-v2_7/q80a/explain.txt | 494 +++++----- .../q86a.sf100/explain.txt | 120 +-- .../approved-plans-v2_7/q86a/explain.txt | 120 +-- .../approved-plans-v2_7/q98.sf100/explain.txt | 92 +- .../approved-plans-v2_7/q98/explain.txt | 60 +- .../tpch-plan-stability/q1/explain.txt | 12 +- .../tpch-plan-stability/q10/explain.txt | 70 +- .../tpch-plan-stability/q11/explain.txt | 98 +- .../tpch-plan-stability/q12/explain.txt | 22 +- .../tpch-plan-stability/q13/explain.txt | 44 +- .../tpch-plan-stability/q14/explain.txt | 16 +- .../tpch-plan-stability/q15/explain.txt | 62 +- .../tpch-plan-stability/q16/explain.txt | 66 +- .../tpch-plan-stability/q17/explain.txt | 62 +- .../tpch-plan-stability/q18/explain.txt | 60 +- .../tpch-plan-stability/q19/explain.txt | 16 +- .../tpch-plan-stability/q2/explain.txt | 162 ++-- .../tpch-plan-stability/q20/explain.txt | 78 +- .../tpch-plan-stability/q21/explain.txt | 82 +- .../tpch-plan-stability/q22/explain.txt | 64 +- .../tpch-plan-stability/q3/explain.txt | 52 +- .../tpch-plan-stability/q4/explain.txt | 22 +- .../tpch-plan-stability/q5/explain.txt | 116 +-- .../tpch-plan-stability/q6/explain.txt | 6 +- .../tpch-plan-stability/q7/explain.txt | 102 +- .../tpch-plan-stability/q8/explain.txt | 154 +-- .../tpch-plan-stability/q9/explain.txt | 108 +-- .../apache/spark/sql/PlanStabilitySuite.scala | 11 +- 324 files changed, 27808 insertions(+), 27799 deletions(-) diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/exchange/Exchange.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/exchange/Exchange.scala index 8ceaf88e875e7..c02beea4f879c 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/exchange/Exchange.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/exchange/Exchange.scala @@ -37,7 +37,7 @@ abstract class Exchange extends UnaryExecNode { override def output: Seq[Attribute] = child.output final override val nodePatterns: Seq[TreePattern] = Seq(EXCHANGE) - override def stringArgs: Iterator[Any] = super.stringArgs ++ Iterator(s"[id=#$id]") + override def stringArgs: Iterator[Any] = super.stringArgs ++ Iterator(s"[plan_id=$id]") } /** diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10.sf100/explain.txt index 8bcb8420937bf..287ecbd6c2a35 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10.sf100/explain.txt @@ -65,119 +65,119 @@ Condition : (((isnotnull(c_customer_sk#1) AND isnotnull(c_current_addr_sk#3)) AN (4) Exchange Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: [c_customer_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#7, ws_sold_date_sk#8] +Output [2]: [ws_bill_customer_sk#6, ws_sold_date_sk#7] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#8), dynamicpruningexpression(ws_sold_date_sk#8 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(ws_sold_date_sk#7), dynamicpruningexpression(ws_sold_date_sk#7 IN dynamicpruning#8)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 4] -Input [2]: [ws_bill_customer_sk#7, ws_sold_date_sk#8] +Input [2]: [ws_bill_customer_sk#6, ws_sold_date_sk#7] (8) Filter [codegen id : 4] -Input [2]: [ws_bill_customer_sk#7, ws_sold_date_sk#8] -Condition : isnotnull(ws_bill_customer_sk#7) +Input [2]: [ws_bill_customer_sk#6, ws_sold_date_sk#7] +Condition : isnotnull(ws_bill_customer_sk#6) (9) ReusedExchange [Reuses operator id: 60] -Output [1]: [d_date_sk#10] +Output [1]: [d_date_sk#9] (10) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ws_sold_date_sk#8] -Right keys [1]: [d_date_sk#10] +Left keys [1]: [ws_sold_date_sk#7] +Right keys [1]: [d_date_sk#9] Join condition: None (11) Project [codegen id : 4] -Output [1]: [ws_bill_customer_sk#7 AS customer_sk#11] -Input [3]: [ws_bill_customer_sk#7, ws_sold_date_sk#8, d_date_sk#10] +Output [1]: [ws_bill_customer_sk#6 AS customer_sk#10] +Input [3]: [ws_bill_customer_sk#6, ws_sold_date_sk#7, d_date_sk#9] (12) Scan parquet default.catalog_sales -Output [2]: [cs_ship_customer_sk#12, cs_sold_date_sk#13] +Output [2]: [cs_ship_customer_sk#11, cs_sold_date_sk#12] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#13), dynamicpruningexpression(cs_sold_date_sk#13 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(cs_sold_date_sk#12), dynamicpruningexpression(cs_sold_date_sk#12 IN dynamicpruning#8)] PushedFilters: [IsNotNull(cs_ship_customer_sk)] ReadSchema: struct (13) ColumnarToRow [codegen id : 6] -Input [2]: [cs_ship_customer_sk#12, cs_sold_date_sk#13] +Input [2]: [cs_ship_customer_sk#11, cs_sold_date_sk#12] (14) Filter [codegen id : 6] -Input [2]: [cs_ship_customer_sk#12, cs_sold_date_sk#13] -Condition : isnotnull(cs_ship_customer_sk#12) +Input [2]: [cs_ship_customer_sk#11, cs_sold_date_sk#12] +Condition : isnotnull(cs_ship_customer_sk#11) (15) ReusedExchange [Reuses operator id: 60] -Output [1]: [d_date_sk#14] +Output [1]: [d_date_sk#13] (16) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [cs_sold_date_sk#13] -Right keys [1]: [d_date_sk#14] +Left keys [1]: [cs_sold_date_sk#12] +Right keys [1]: [d_date_sk#13] Join condition: None (17) Project [codegen id : 6] -Output [1]: [cs_ship_customer_sk#12 AS customer_sk#15] -Input [3]: [cs_ship_customer_sk#12, cs_sold_date_sk#13, d_date_sk#14] +Output [1]: [cs_ship_customer_sk#11 AS customer_sk#14] +Input [3]: [cs_ship_customer_sk#11, cs_sold_date_sk#12, d_date_sk#13] (18) Union (19) Exchange -Input [1]: [customer_sk#11] -Arguments: hashpartitioning(customer_sk#11, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [1]: [customer_sk#10] +Arguments: hashpartitioning(customer_sk#10, 5), ENSURE_REQUIREMENTS, [plan_id=2] (20) Sort [codegen id : 7] -Input [1]: [customer_sk#11] -Arguments: [customer_sk#11 ASC NULLS FIRST], false, 0 +Input [1]: [customer_sk#10] +Arguments: [customer_sk#10 ASC NULLS FIRST], false, 0 (21) SortMergeJoin [codegen id : 8] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [customer_sk#11] +Right keys [1]: [customer_sk#10] Join condition: None (22) Scan parquet default.store_sales -Output [2]: [ss_customer_sk#17, ss_sold_date_sk#18] +Output [2]: [ss_customer_sk#15, ss_sold_date_sk#16] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#18), dynamicpruningexpression(ss_sold_date_sk#18 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(ss_sold_date_sk#16), dynamicpruningexpression(ss_sold_date_sk#16 IN dynamicpruning#8)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 10] -Input [2]: [ss_customer_sk#17, ss_sold_date_sk#18] +Input [2]: [ss_customer_sk#15, ss_sold_date_sk#16] (24) Filter [codegen id : 10] -Input [2]: [ss_customer_sk#17, ss_sold_date_sk#18] -Condition : isnotnull(ss_customer_sk#17) +Input [2]: [ss_customer_sk#15, ss_sold_date_sk#16] +Condition : isnotnull(ss_customer_sk#15) (25) ReusedExchange [Reuses operator id: 60] -Output [1]: [d_date_sk#19] +Output [1]: [d_date_sk#17] (26) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_sold_date_sk#18] -Right keys [1]: [d_date_sk#19] +Left keys [1]: [ss_sold_date_sk#16] +Right keys [1]: [d_date_sk#17] Join condition: None (27) Project [codegen id : 10] -Output [1]: [ss_customer_sk#17 AS customer_sk#20] -Input [3]: [ss_customer_sk#17, ss_sold_date_sk#18, d_date_sk#19] +Output [1]: [ss_customer_sk#15 AS customer_sk#18] +Input [3]: [ss_customer_sk#15, ss_sold_date_sk#16, d_date_sk#17] (28) Exchange -Input [1]: [customer_sk#20] -Arguments: hashpartitioning(customer_sk#20, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [1]: [customer_sk#18] +Arguments: hashpartitioning(customer_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=3] (29) Sort [codegen id : 11] -Input [1]: [customer_sk#20] -Arguments: [customer_sk#20 ASC NULLS FIRST], false, 0 +Input [1]: [customer_sk#18] +Arguments: [customer_sk#18 ASC NULLS FIRST], false, 0 (30) SortMergeJoin [codegen id : 13] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [customer_sk#20] +Right keys [1]: [customer_sk#18] Join condition: None (31) Project [codegen id : 13] @@ -185,84 +185,84 @@ Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] (32) Scan parquet default.customer_address -Output [2]: [ca_address_sk#22, ca_county#23] +Output [2]: [ca_address_sk#19, ca_county#20] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Douglas County,Gaines County,Richland County,Walker County]), IsNotNull(ca_address_sk)] ReadSchema: struct (33) ColumnarToRow [codegen id : 12] -Input [2]: [ca_address_sk#22, ca_county#23] +Input [2]: [ca_address_sk#19, ca_county#20] (34) Filter [codegen id : 12] -Input [2]: [ca_address_sk#22, ca_county#23] -Condition : (ca_county#23 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#22)) +Input [2]: [ca_address_sk#19, ca_county#20] +Condition : (ca_county#20 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#19)) (35) Project [codegen id : 12] -Output [1]: [ca_address_sk#22] -Input [2]: [ca_address_sk#22, ca_county#23] +Output [1]: [ca_address_sk#19] +Input [2]: [ca_address_sk#19, ca_county#20] (36) BroadcastExchange -Input [1]: [ca_address_sk#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#24] +Input [1]: [ca_address_sk#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (37) BroadcastHashJoin [codegen id : 13] Left keys [1]: [c_current_addr_sk#3] -Right keys [1]: [ca_address_sk#22] +Right keys [1]: [ca_address_sk#19] Join condition: None (38) Project [codegen id : 13] Output [1]: [c_current_cdemo_sk#2] -Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#22] +Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#19] (39) BroadcastExchange Input [1]: [c_current_cdemo_sk#2] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (40) Scan parquet default.customer_demographics -Output [9]: [cd_demo_sk#26, cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] +Output [9]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (41) ColumnarToRow -Input [9]: [cd_demo_sk#26, cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] +Input [9]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] (42) Filter -Input [9]: [cd_demo_sk#26, cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] -Condition : isnotnull(cd_demo_sk#26) +Input [9]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] +Condition : isnotnull(cd_demo_sk#21) (43) BroadcastHashJoin [codegen id : 14] Left keys [1]: [c_current_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#26] +Right keys [1]: [cd_demo_sk#21] Join condition: None (44) Project [codegen id : 14] -Output [8]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] -Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#26, cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] +Output [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] +Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] (45) HashAggregate [codegen id : 14] -Input [8]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] -Keys [8]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] +Input [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] +Keys [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#35] -Results [9]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34, count#36] +Aggregate Attributes [1]: [count#30] +Results [9]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29, count#31] (46) Exchange -Input [9]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34, count#36] -Arguments: hashpartitioning(cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34, 5), ENSURE_REQUIREMENTS, [id=#37] +Input [9]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29, count#31] +Arguments: hashpartitioning(cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29, 5), ENSURE_REQUIREMENTS, [plan_id=6] (47) HashAggregate [codegen id : 15] -Input [9]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34, count#36] -Keys [8]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] +Input [9]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29, count#31] +Keys [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#38] -Results [14]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, count(1)#38 AS cnt1#39, cd_purchase_estimate#30, count(1)#38 AS cnt2#40, cd_credit_rating#31, count(1)#38 AS cnt3#41, cd_dep_count#32, count(1)#38 AS cnt4#42, cd_dep_employed_count#33, count(1)#38 AS cnt5#43, cd_dep_college_count#34, count(1)#38 AS cnt6#44] +Aggregate Attributes [1]: [count(1)#32] +Results [14]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, count(1)#32 AS cnt1#33, cd_purchase_estimate#25, count(1)#32 AS cnt2#34, cd_credit_rating#26, count(1)#32 AS cnt3#35, cd_dep_count#27, count(1)#32 AS cnt4#36, cd_dep_employed_count#28, count(1)#32 AS cnt5#37, cd_dep_college_count#29, count(1)#32 AS cnt6#38] (48) TakeOrderedAndProject -Input [14]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cnt1#39, cd_purchase_estimate#30, cnt2#40, cd_credit_rating#31, cnt3#41, cd_dep_count#32, cnt4#42, cd_dep_employed_count#33, cnt5#43, cd_dep_college_count#34, cnt6#44] -Arguments: 100, [cd_gender#27 ASC NULLS FIRST, cd_marital_status#28 ASC NULLS FIRST, cd_education_status#29 ASC NULLS FIRST, cd_purchase_estimate#30 ASC NULLS FIRST, cd_credit_rating#31 ASC NULLS FIRST, cd_dep_count#32 ASC NULLS FIRST, cd_dep_employed_count#33 ASC NULLS FIRST, cd_dep_college_count#34 ASC NULLS FIRST], [cd_gender#27, cd_marital_status#28, cd_education_status#29, cnt1#39, cd_purchase_estimate#30, cnt2#40, cd_credit_rating#31, cnt3#41, cd_dep_count#32, cnt4#42, cd_dep_employed_count#33, cnt5#43, cd_dep_college_count#34, cnt6#44] +Input [14]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cnt1#33, cd_purchase_estimate#25, cnt2#34, cd_credit_rating#26, cnt3#35, cd_dep_count#27, cnt4#36, cd_dep_employed_count#28, cnt5#37, cd_dep_college_count#29, cnt6#38] +Arguments: 100, [cd_gender#22 ASC NULLS FIRST, cd_marital_status#23 ASC NULLS FIRST, cd_education_status#24 ASC NULLS FIRST, cd_purchase_estimate#25 ASC NULLS FIRST, cd_credit_rating#26 ASC NULLS FIRST, cd_dep_count#27 ASC NULLS FIRST, cd_dep_employed_count#28 ASC NULLS FIRST, cd_dep_college_count#29 ASC NULLS FIRST], [cd_gender#22, cd_marital_status#23, cd_education_status#24, cnt1#33, cd_purchase_estimate#25, cnt2#34, cd_credit_rating#26, cnt3#35, cd_dep_count#27, cnt4#36, cd_dep_employed_count#28, cnt5#37, cd_dep_college_count#29, cnt6#38] ===== Subqueries ===== @@ -277,42 +277,42 @@ ObjectHashAggregate (55) (49) Scan parquet default.customer_address -Output [2]: [ca_address_sk#22, ca_county#23] +Output [2]: [ca_address_sk#19, ca_county#20] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Douglas County,Gaines County,Richland County,Walker County]), IsNotNull(ca_address_sk)] ReadSchema: struct (50) ColumnarToRow [codegen id : 1] -Input [2]: [ca_address_sk#22, ca_county#23] +Input [2]: [ca_address_sk#19, ca_county#20] (51) Filter [codegen id : 1] -Input [2]: [ca_address_sk#22, ca_county#23] -Condition : (ca_county#23 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#22)) +Input [2]: [ca_address_sk#19, ca_county#20] +Condition : (ca_county#20 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#19)) (52) Project [codegen id : 1] -Output [1]: [ca_address_sk#22] -Input [2]: [ca_address_sk#22, ca_county#23] +Output [1]: [ca_address_sk#19] +Input [2]: [ca_address_sk#19, ca_county#20] (53) ObjectHashAggregate -Input [1]: [ca_address_sk#22] +Input [1]: [ca_address_sk#19] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#22, 42), 2555, 20440, 0, 0)] -Aggregate Attributes [1]: [buf#45] -Results [1]: [buf#46] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 2555, 20440, 0, 0)] +Aggregate Attributes [1]: [buf#39] +Results [1]: [buf#40] (54) Exchange -Input [1]: [buf#46] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#47] +Input [1]: [buf#40] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (55) ObjectHashAggregate -Input [1]: [buf#46] +Input [1]: [buf#40] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#22, 42), 2555, 20440, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#22, 42), 2555, 20440, 0, 0)#48] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#22, 42), 2555, 20440, 0, 0)#48 AS bloomFilter#49] +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 2555, 20440, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 2555, 20440, 0, 0)#41] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#19, 42), 2555, 20440, 0, 0)#41 AS bloomFilter#42] -Subquery:2 Hosting operator id = 6 Hosting Expression = ws_sold_date_sk#8 IN dynamicpruning#9 +Subquery:2 Hosting operator id = 6 Hosting Expression = ws_sold_date_sk#7 IN dynamicpruning#8 BroadcastExchange (60) +- * Project (59) +- * Filter (58) @@ -321,29 +321,29 @@ BroadcastExchange (60) (56) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#50, d_moy#51] +Output [3]: [d_date_sk#9, d_year#43, d_moy#44] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,7), IsNotNull(d_date_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#50, d_moy#51] +Input [3]: [d_date_sk#9, d_year#43, d_moy#44] (58) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#50, d_moy#51] -Condition : (((((isnotnull(d_year#50) AND isnotnull(d_moy#51)) AND (d_year#50 = 2002)) AND (d_moy#51 >= 4)) AND (d_moy#51 <= 7)) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#9, d_year#43, d_moy#44] +Condition : (((((isnotnull(d_year#43) AND isnotnull(d_moy#44)) AND (d_year#43 = 2002)) AND (d_moy#44 >= 4)) AND (d_moy#44 <= 7)) AND isnotnull(d_date_sk#9)) (59) Project [codegen id : 1] -Output [1]: [d_date_sk#10] -Input [3]: [d_date_sk#10, d_year#50, d_moy#51] +Output [1]: [d_date_sk#9] +Input [3]: [d_date_sk#9, d_year#43, d_moy#44] (60) BroadcastExchange -Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#52] +Input [1]: [d_date_sk#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:3 Hosting operator id = 12 Hosting Expression = cs_sold_date_sk#13 IN dynamicpruning#9 +Subquery:3 Hosting operator id = 12 Hosting Expression = cs_sold_date_sk#12 IN dynamicpruning#8 -Subquery:4 Hosting operator id = 22 Hosting Expression = ss_sold_date_sk#18 IN dynamicpruning#9 +Subquery:4 Hosting operator id = 22 Hosting Expression = ss_sold_date_sk#16 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10/explain.txt index a565ac5010026..3494945bb469f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10/explain.txt @@ -117,7 +117,7 @@ Input [3]: [cs_ship_customer_sk#9, cs_sold_date_sk#10, d_date_sk#11] (17) BroadcastExchange Input [1]: [customer_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (18) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#1] @@ -125,39 +125,39 @@ Right keys [1]: [customer_sk#8] Join condition: None (19) Scan parquet default.store_sales -Output [2]: [ss_customer_sk#14, ss_sold_date_sk#15] +Output [2]: [ss_customer_sk#13, ss_sold_date_sk#14] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#15), dynamicpruningexpression(ss_sold_date_sk#15 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(ss_sold_date_sk#14), dynamicpruningexpression(ss_sold_date_sk#14 IN dynamicpruning#6)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 6] -Input [2]: [ss_customer_sk#14, ss_sold_date_sk#15] +Input [2]: [ss_customer_sk#13, ss_sold_date_sk#14] (21) Filter [codegen id : 6] -Input [2]: [ss_customer_sk#14, ss_sold_date_sk#15] -Condition : isnotnull(ss_customer_sk#14) +Input [2]: [ss_customer_sk#13, ss_sold_date_sk#14] +Condition : isnotnull(ss_customer_sk#13) (22) ReusedExchange [Reuses operator id: 49] -Output [1]: [d_date_sk#16] +Output [1]: [d_date_sk#15] (23) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ss_sold_date_sk#15] -Right keys [1]: [d_date_sk#16] +Left keys [1]: [ss_sold_date_sk#14] +Right keys [1]: [d_date_sk#15] Join condition: None (24) Project [codegen id : 6] -Output [1]: [ss_customer_sk#14 AS customer_sk#17] -Input [3]: [ss_customer_sk#14, ss_sold_date_sk#15, d_date_sk#16] +Output [1]: [ss_customer_sk#13 AS customer_sk#16] +Input [3]: [ss_customer_sk#13, ss_sold_date_sk#14, d_date_sk#15] (25) BroadcastExchange -Input [1]: [customer_sk#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [1]: [customer_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (26) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [customer_sk#17] +Right keys [1]: [customer_sk#16] Join condition: None (27) Project [codegen id : 9] @@ -165,84 +165,84 @@ Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] (28) Scan parquet default.customer_address -Output [2]: [ca_address_sk#19, ca_county#20] +Output [2]: [ca_address_sk#17, ca_county#18] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Douglas County,Gaines County,Richland County,Walker County]), IsNotNull(ca_address_sk)] ReadSchema: struct (29) ColumnarToRow [codegen id : 7] -Input [2]: [ca_address_sk#19, ca_county#20] +Input [2]: [ca_address_sk#17, ca_county#18] (30) Filter [codegen id : 7] -Input [2]: [ca_address_sk#19, ca_county#20] -Condition : (ca_county#20 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#19)) +Input [2]: [ca_address_sk#17, ca_county#18] +Condition : (ca_county#18 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#17)) (31) Project [codegen id : 7] -Output [1]: [ca_address_sk#19] -Input [2]: [ca_address_sk#19, ca_county#20] +Output [1]: [ca_address_sk#17] +Input [2]: [ca_address_sk#17, ca_county#18] (32) BroadcastExchange -Input [1]: [ca_address_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#21] +Input [1]: [ca_address_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (33) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_current_addr_sk#3] -Right keys [1]: [ca_address_sk#19] +Right keys [1]: [ca_address_sk#17] Join condition: None (34) Project [codegen id : 9] Output [1]: [c_current_cdemo_sk#2] -Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#19] +Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#17] (35) Scan parquet default.customer_demographics -Output [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Output [9]: [cd_demo_sk#19, cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (36) ColumnarToRow [codegen id : 8] -Input [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Input [9]: [cd_demo_sk#19, cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] (37) Filter [codegen id : 8] -Input [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Condition : isnotnull(cd_demo_sk#22) +Input [9]: [cd_demo_sk#19, cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] +Condition : isnotnull(cd_demo_sk#19) (38) BroadcastExchange -Input [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#31] +Input [9]: [cd_demo_sk#19, cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (39) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_current_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#22] +Right keys [1]: [cd_demo_sk#19] Join condition: None (40) Project [codegen id : 9] -Output [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Output [8]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] +Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#19, cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] (41) HashAggregate [codegen id : 9] -Input [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Keys [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Input [8]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] +Keys [8]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#32] -Results [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#33] +Aggregate Attributes [1]: [count#28] +Results [9]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, count#29] (42) Exchange -Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#33] -Arguments: hashpartitioning(cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [9]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, count#29] +Arguments: hashpartitioning(cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, 5), ENSURE_REQUIREMENTS, [plan_id=5] (43) HashAggregate [codegen id : 10] -Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#33] -Keys [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Input [9]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, count#29] +Keys [8]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cd_purchase_estimate#23, cd_credit_rating#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#35] -Results [14]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, count(1)#35 AS cnt1#36, cd_purchase_estimate#26, count(1)#35 AS cnt2#37, cd_credit_rating#27, count(1)#35 AS cnt3#38, cd_dep_count#28, count(1)#35 AS cnt4#39, cd_dep_employed_count#29, count(1)#35 AS cnt5#40, cd_dep_college_count#30, count(1)#35 AS cnt6#41] +Aggregate Attributes [1]: [count(1)#30] +Results [14]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, count(1)#30 AS cnt1#31, cd_purchase_estimate#23, count(1)#30 AS cnt2#32, cd_credit_rating#24, count(1)#30 AS cnt3#33, cd_dep_count#25, count(1)#30 AS cnt4#34, cd_dep_employed_count#26, count(1)#30 AS cnt5#35, cd_dep_college_count#27, count(1)#30 AS cnt6#36] (44) TakeOrderedAndProject -Input [14]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cnt1#36, cd_purchase_estimate#26, cnt2#37, cd_credit_rating#27, cnt3#38, cd_dep_count#28, cnt4#39, cd_dep_employed_count#29, cnt5#40, cd_dep_college_count#30, cnt6#41] -Arguments: 100, [cd_gender#23 ASC NULLS FIRST, cd_marital_status#24 ASC NULLS FIRST, cd_education_status#25 ASC NULLS FIRST, cd_purchase_estimate#26 ASC NULLS FIRST, cd_credit_rating#27 ASC NULLS FIRST, cd_dep_count#28 ASC NULLS FIRST, cd_dep_employed_count#29 ASC NULLS FIRST, cd_dep_college_count#30 ASC NULLS FIRST], [cd_gender#23, cd_marital_status#24, cd_education_status#25, cnt1#36, cd_purchase_estimate#26, cnt2#37, cd_credit_rating#27, cnt3#38, cd_dep_count#28, cnt4#39, cd_dep_employed_count#29, cnt5#40, cd_dep_college_count#30, cnt6#41] +Input [14]: [cd_gender#20, cd_marital_status#21, cd_education_status#22, cnt1#31, cd_purchase_estimate#23, cnt2#32, cd_credit_rating#24, cnt3#33, cd_dep_count#25, cnt4#34, cd_dep_employed_count#26, cnt5#35, cd_dep_college_count#27, cnt6#36] +Arguments: 100, [cd_gender#20 ASC NULLS FIRST, cd_marital_status#21 ASC NULLS FIRST, cd_education_status#22 ASC NULLS FIRST, cd_purchase_estimate#23 ASC NULLS FIRST, cd_credit_rating#24 ASC NULLS FIRST, cd_dep_count#25 ASC NULLS FIRST, cd_dep_employed_count#26 ASC NULLS FIRST, cd_dep_college_count#27 ASC NULLS FIRST], [cd_gender#20, cd_marital_status#21, cd_education_status#22, cnt1#31, cd_purchase_estimate#23, cnt2#32, cd_credit_rating#24, cnt3#33, cd_dep_count#25, cnt4#34, cd_dep_employed_count#26, cnt5#35, cd_dep_college_count#27, cnt6#36] ===== Subqueries ===== @@ -255,29 +255,29 @@ BroadcastExchange (49) (45) Scan parquet default.date_dim -Output [3]: [d_date_sk#7, d_year#42, d_moy#43] +Output [3]: [d_date_sk#7, d_year#37, d_moy#38] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,7), IsNotNull(d_date_sk)] ReadSchema: struct (46) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#42, d_moy#43] +Input [3]: [d_date_sk#7, d_year#37, d_moy#38] (47) Filter [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#42, d_moy#43] -Condition : (((((isnotnull(d_year#42) AND isnotnull(d_moy#43)) AND (d_year#42 = 2002)) AND (d_moy#43 >= 4)) AND (d_moy#43 <= 7)) AND isnotnull(d_date_sk#7)) +Input [3]: [d_date_sk#7, d_year#37, d_moy#38] +Condition : (((((isnotnull(d_year#37) AND isnotnull(d_moy#38)) AND (d_year#37 = 2002)) AND (d_moy#38 >= 4)) AND (d_moy#38 <= 7)) AND isnotnull(d_date_sk#7)) (48) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [3]: [d_date_sk#7, d_year#42, d_moy#43] +Input [3]: [d_date_sk#7, d_year#37, d_moy#38] (49) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#44] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] Subquery:2 Hosting operator id = 10 Hosting Expression = cs_sold_date_sk#10 IN dynamicpruning#6 -Subquery:3 Hosting operator id = 19 Hosting Expression = ss_sold_date_sk#15 IN dynamicpruning#6 +Subquery:3 Hosting operator id = 19 Hosting Expression = ss_sold_date_sk#14 IN dynamicpruning#6 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19.sf100/explain.txt index 6b4fce45b44f2..27ebf292c53d1 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19.sf100/explain.txt @@ -60,169 +60,169 @@ Input [3]: [d_date_sk#1, d_year#2, d_moy#3] (5) BroadcastExchange Input [1]: [d_date_sk#1] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#4] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.store_sales -Output [5]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8, ss_sold_date_sk#9] +Output [5]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, ss_sold_date_sk#8] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#9), (ss_sold_date_sk#9 >= 2451484), (ss_sold_date_sk#9 <= 2451513), dynamicpruningexpression(ss_sold_date_sk#9 IN dynamicpruning#10)] +PartitionFilters: [isnotnull(ss_sold_date_sk#8), (ss_sold_date_sk#8 >= 2451484), (ss_sold_date_sk#8 <= 2451513), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)] PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (7) ColumnarToRow -Input [5]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8, ss_sold_date_sk#9] +Input [5]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, ss_sold_date_sk#8] (8) Filter -Input [5]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8, ss_sold_date_sk#9] -Condition : ((isnotnull(ss_item_sk#5) AND isnotnull(ss_customer_sk#6)) AND isnotnull(ss_store_sk#7)) +Input [5]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, ss_sold_date_sk#8] +Condition : ((isnotnull(ss_item_sk#4) AND isnotnull(ss_customer_sk#5)) AND isnotnull(ss_store_sk#6)) (9) BroadcastHashJoin [codegen id : 2] Left keys [1]: [d_date_sk#1] -Right keys [1]: [ss_sold_date_sk#9] +Right keys [1]: [ss_sold_date_sk#8] Join condition: None (10) Project [codegen id : 2] -Output [4]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8] -Input [6]: [d_date_sk#1, ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8, ss_sold_date_sk#9] +Output [4]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7] +Input [6]: [d_date_sk#1, ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, ss_sold_date_sk#8] (11) BroadcastExchange -Input [4]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#11] +Input [4]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [plan_id=2] (12) Scan parquet default.customer -Output [2]: [c_customer_sk#12, c_current_addr_sk#13] +Output [2]: [c_customer_sk#10, c_current_addr_sk#11] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (13) ColumnarToRow -Input [2]: [c_customer_sk#12, c_current_addr_sk#13] +Input [2]: [c_customer_sk#10, c_current_addr_sk#11] (14) Filter -Input [2]: [c_customer_sk#12, c_current_addr_sk#13] -Condition : (isnotnull(c_customer_sk#12) AND isnotnull(c_current_addr_sk#13)) +Input [2]: [c_customer_sk#10, c_current_addr_sk#11] +Condition : (isnotnull(c_customer_sk#10) AND isnotnull(c_current_addr_sk#11)) (15) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_customer_sk#6] -Right keys [1]: [c_customer_sk#12] +Left keys [1]: [ss_customer_sk#5] +Right keys [1]: [c_customer_sk#10] Join condition: None (16) Project [codegen id : 4] -Output [4]: [ss_item_sk#5, ss_store_sk#7, ss_ext_sales_price#8, c_current_addr_sk#13] -Input [6]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8, c_customer_sk#12, c_current_addr_sk#13] +Output [4]: [ss_item_sk#4, ss_store_sk#6, ss_ext_sales_price#7, c_current_addr_sk#11] +Input [6]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, c_customer_sk#10, c_current_addr_sk#11] (17) Scan parquet default.store -Output [2]: [s_store_sk#14, s_zip#15] +Output [2]: [s_store_sk#12, s_zip#13] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_zip), IsNotNull(s_store_sk)] ReadSchema: struct (18) ColumnarToRow [codegen id : 3] -Input [2]: [s_store_sk#14, s_zip#15] +Input [2]: [s_store_sk#12, s_zip#13] (19) Filter [codegen id : 3] -Input [2]: [s_store_sk#14, s_zip#15] -Condition : (isnotnull(s_zip#15) AND isnotnull(s_store_sk#14)) +Input [2]: [s_store_sk#12, s_zip#13] +Condition : (isnotnull(s_zip#13) AND isnotnull(s_store_sk#12)) (20) BroadcastExchange -Input [2]: [s_store_sk#14, s_zip#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#16] +Input [2]: [s_store_sk#12, s_zip#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_store_sk#7] -Right keys [1]: [s_store_sk#14] +Left keys [1]: [ss_store_sk#6] +Right keys [1]: [s_store_sk#12] Join condition: None (22) Project [codegen id : 4] -Output [4]: [ss_item_sk#5, ss_ext_sales_price#8, c_current_addr_sk#13, s_zip#15] -Input [6]: [ss_item_sk#5, ss_store_sk#7, ss_ext_sales_price#8, c_current_addr_sk#13, s_store_sk#14, s_zip#15] +Output [4]: [ss_item_sk#4, ss_ext_sales_price#7, c_current_addr_sk#11, s_zip#13] +Input [6]: [ss_item_sk#4, ss_store_sk#6, ss_ext_sales_price#7, c_current_addr_sk#11, s_store_sk#12, s_zip#13] (23) BroadcastExchange -Input [4]: [ss_item_sk#5, ss_ext_sales_price#8, c_current_addr_sk#13, s_zip#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#17] +Input [4]: [ss_item_sk#4, ss_ext_sales_price#7, c_current_addr_sk#11, s_zip#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [plan_id=4] (24) Scan parquet default.customer_address -Output [2]: [ca_address_sk#18, ca_zip#19] +Output [2]: [ca_address_sk#14, ca_zip#15] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_zip)] ReadSchema: struct (25) ColumnarToRow -Input [2]: [ca_address_sk#18, ca_zip#19] +Input [2]: [ca_address_sk#14, ca_zip#15] (26) Filter -Input [2]: [ca_address_sk#18, ca_zip#19] -Condition : (isnotnull(ca_address_sk#18) AND isnotnull(ca_zip#19)) +Input [2]: [ca_address_sk#14, ca_zip#15] +Condition : (isnotnull(ca_address_sk#14) AND isnotnull(ca_zip#15)) (27) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [c_current_addr_sk#13] -Right keys [1]: [ca_address_sk#18] -Join condition: NOT (substr(ca_zip#19, 1, 5) = substr(s_zip#15, 1, 5)) +Left keys [1]: [c_current_addr_sk#11] +Right keys [1]: [ca_address_sk#14] +Join condition: NOT (substr(ca_zip#15, 1, 5) = substr(s_zip#13, 1, 5)) (28) Project [codegen id : 6] -Output [2]: [ss_item_sk#5, ss_ext_sales_price#8] -Input [6]: [ss_item_sk#5, ss_ext_sales_price#8, c_current_addr_sk#13, s_zip#15, ca_address_sk#18, ca_zip#19] +Output [2]: [ss_item_sk#4, ss_ext_sales_price#7] +Input [6]: [ss_item_sk#4, ss_ext_sales_price#7, c_current_addr_sk#11, s_zip#13, ca_address_sk#14, ca_zip#15] (29) Scan parquet default.item -Output [6]: [i_item_sk#20, i_brand_id#21, i_brand#22, i_manufact_id#23, i_manufact#24, i_manager_id#25] +Output [6]: [i_item_sk#16, i_brand_id#17, i_brand#18, i_manufact_id#19, i_manufact#20, i_manager_id#21] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,7), IsNotNull(i_item_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 5] -Input [6]: [i_item_sk#20, i_brand_id#21, i_brand#22, i_manufact_id#23, i_manufact#24, i_manager_id#25] +Input [6]: [i_item_sk#16, i_brand_id#17, i_brand#18, i_manufact_id#19, i_manufact#20, i_manager_id#21] (31) Filter [codegen id : 5] -Input [6]: [i_item_sk#20, i_brand_id#21, i_brand#22, i_manufact_id#23, i_manufact#24, i_manager_id#25] -Condition : ((isnotnull(i_manager_id#25) AND (i_manager_id#25 = 7)) AND isnotnull(i_item_sk#20)) +Input [6]: [i_item_sk#16, i_brand_id#17, i_brand#18, i_manufact_id#19, i_manufact#20, i_manager_id#21] +Condition : ((isnotnull(i_manager_id#21) AND (i_manager_id#21 = 7)) AND isnotnull(i_item_sk#16)) (32) Project [codegen id : 5] -Output [5]: [i_item_sk#20, i_brand_id#21, i_brand#22, i_manufact_id#23, i_manufact#24] -Input [6]: [i_item_sk#20, i_brand_id#21, i_brand#22, i_manufact_id#23, i_manufact#24, i_manager_id#25] +Output [5]: [i_item_sk#16, i_brand_id#17, i_brand#18, i_manufact_id#19, i_manufact#20] +Input [6]: [i_item_sk#16, i_brand_id#17, i_brand#18, i_manufact_id#19, i_manufact#20, i_manager_id#21] (33) BroadcastExchange -Input [5]: [i_item_sk#20, i_brand_id#21, i_brand#22, i_manufact_id#23, i_manufact#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [5]: [i_item_sk#16, i_brand_id#17, i_brand#18, i_manufact_id#19, i_manufact#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ss_item_sk#5] -Right keys [1]: [i_item_sk#20] +Left keys [1]: [ss_item_sk#4] +Right keys [1]: [i_item_sk#16] Join condition: None (35) Project [codegen id : 6] -Output [5]: [ss_ext_sales_price#8, i_brand_id#21, i_brand#22, i_manufact_id#23, i_manufact#24] -Input [7]: [ss_item_sk#5, ss_ext_sales_price#8, i_item_sk#20, i_brand_id#21, i_brand#22, i_manufact_id#23, i_manufact#24] +Output [5]: [ss_ext_sales_price#7, i_brand_id#17, i_brand#18, i_manufact_id#19, i_manufact#20] +Input [7]: [ss_item_sk#4, ss_ext_sales_price#7, i_item_sk#16, i_brand_id#17, i_brand#18, i_manufact_id#19, i_manufact#20] (36) HashAggregate [codegen id : 6] -Input [5]: [ss_ext_sales_price#8, i_brand_id#21, i_brand#22, i_manufact_id#23, i_manufact#24] -Keys [4]: [i_brand#22, i_brand_id#21, i_manufact_id#23, i_manufact#24] -Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#8))] -Aggregate Attributes [1]: [sum#27] -Results [5]: [i_brand#22, i_brand_id#21, i_manufact_id#23, i_manufact#24, sum#28] +Input [5]: [ss_ext_sales_price#7, i_brand_id#17, i_brand#18, i_manufact_id#19, i_manufact#20] +Keys [4]: [i_brand#18, i_brand_id#17, i_manufact_id#19, i_manufact#20] +Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#7))] +Aggregate Attributes [1]: [sum#22] +Results [5]: [i_brand#18, i_brand_id#17, i_manufact_id#19, i_manufact#20, sum#23] (37) Exchange -Input [5]: [i_brand#22, i_brand_id#21, i_manufact_id#23, i_manufact#24, sum#28] -Arguments: hashpartitioning(i_brand#22, i_brand_id#21, i_manufact_id#23, i_manufact#24, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [5]: [i_brand#18, i_brand_id#17, i_manufact_id#19, i_manufact#20, sum#23] +Arguments: hashpartitioning(i_brand#18, i_brand_id#17, i_manufact_id#19, i_manufact#20, 5), ENSURE_REQUIREMENTS, [plan_id=6] (38) HashAggregate [codegen id : 7] -Input [5]: [i_brand#22, i_brand_id#21, i_manufact_id#23, i_manufact#24, sum#28] -Keys [4]: [i_brand#22, i_brand_id#21, i_manufact_id#23, i_manufact#24] -Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#8))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#8))#30] -Results [5]: [i_brand_id#21 AS brand_id#31, i_brand#22 AS brand#32, i_manufact_id#23, i_manufact#24, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#8))#30,17,2) AS ext_price#33] +Input [5]: [i_brand#18, i_brand_id#17, i_manufact_id#19, i_manufact#20, sum#23] +Keys [4]: [i_brand#18, i_brand_id#17, i_manufact_id#19, i_manufact#20] +Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#7))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#7))#24] +Results [5]: [i_brand_id#17 AS brand_id#25, i_brand#18 AS brand#26, i_manufact_id#19, i_manufact#20, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#7))#24,17,2) AS ext_price#27] (39) TakeOrderedAndProject -Input [5]: [brand_id#31, brand#32, i_manufact_id#23, i_manufact#24, ext_price#33] -Arguments: 100, [ext_price#33 DESC NULLS LAST, brand#32 ASC NULLS FIRST, brand_id#31 ASC NULLS FIRST, i_manufact_id#23 ASC NULLS FIRST, i_manufact#24 ASC NULLS FIRST], [brand_id#31, brand#32, i_manufact_id#23, i_manufact#24, ext_price#33] +Input [5]: [brand_id#25, brand#26, i_manufact_id#19, i_manufact#20, ext_price#27] +Arguments: 100, [ext_price#27 DESC NULLS LAST, brand#26 ASC NULLS FIRST, brand_id#25 ASC NULLS FIRST, i_manufact_id#19 ASC NULLS FIRST, i_manufact#20 ASC NULLS FIRST], [brand_id#25, brand#26, i_manufact_id#19, i_manufact#20, ext_price#27] ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#9 IN dynamicpruning#10 +Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 ReusedExchange (40) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19/explain.txt index e58fb8a1e1364..a13166ff0ceb3 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19/explain.txt @@ -75,7 +75,7 @@ Condition : ((isnotnull(ss_item_sk#4) AND isnotnull(ss_customer_sk#5)) AND isnot (8) BroadcastExchange Input [5]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, ss_sold_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[4, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[4, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 6] Left keys [1]: [d_date_sk#1] @@ -87,136 +87,136 @@ Output [4]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7 Input [6]: [d_date_sk#1, ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, ss_sold_date_sk#8] (11) Scan parquet default.item -Output [6]: [i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, i_manager_id#15] +Output [6]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, i_manager_id#14] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,7), IsNotNull(i_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [6]: [i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, i_manager_id#15] +Input [6]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, i_manager_id#14] (13) Filter [codegen id : 2] -Input [6]: [i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, i_manager_id#15] -Condition : ((isnotnull(i_manager_id#15) AND (i_manager_id#15 = 7)) AND isnotnull(i_item_sk#10)) +Input [6]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, i_manager_id#14] +Condition : ((isnotnull(i_manager_id#14) AND (i_manager_id#14 = 7)) AND isnotnull(i_item_sk#9)) (14) Project [codegen id : 2] -Output [5]: [i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14] -Input [6]: [i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, i_manager_id#15] +Output [5]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13] +Input [6]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, i_manager_id#14] (15) BroadcastExchange -Input [5]: [i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16] +Input [5]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_item_sk#4] -Right keys [1]: [i_item_sk#10] +Right keys [1]: [i_item_sk#9] Join condition: None (17) Project [codegen id : 6] -Output [7]: [ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14] -Input [9]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14] +Output [7]: [ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13] +Input [9]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_item_sk#9, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13] (18) Scan parquet default.customer -Output [2]: [c_customer_sk#17, c_current_addr_sk#18] +Output [2]: [c_customer_sk#15, c_current_addr_sk#16] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (19) ColumnarToRow [codegen id : 3] -Input [2]: [c_customer_sk#17, c_current_addr_sk#18] +Input [2]: [c_customer_sk#15, c_current_addr_sk#16] (20) Filter [codegen id : 3] -Input [2]: [c_customer_sk#17, c_current_addr_sk#18] -Condition : (isnotnull(c_customer_sk#17) AND isnotnull(c_current_addr_sk#18)) +Input [2]: [c_customer_sk#15, c_current_addr_sk#16] +Condition : (isnotnull(c_customer_sk#15) AND isnotnull(c_current_addr_sk#16)) (21) BroadcastExchange -Input [2]: [c_customer_sk#17, c_current_addr_sk#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19] +Input [2]: [c_customer_sk#15, c_current_addr_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (22) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#5] -Right keys [1]: [c_customer_sk#17] +Right keys [1]: [c_customer_sk#15] Join condition: None (23) Project [codegen id : 6] -Output [7]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, c_current_addr_sk#18] -Input [9]: [ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, c_customer_sk#17, c_current_addr_sk#18] +Output [7]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, c_current_addr_sk#16] +Input [9]: [ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, c_customer_sk#15, c_current_addr_sk#16] (24) Scan parquet default.customer_address -Output [2]: [ca_address_sk#20, ca_zip#21] +Output [2]: [ca_address_sk#17, ca_zip#18] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_zip)] ReadSchema: struct (25) ColumnarToRow [codegen id : 4] -Input [2]: [ca_address_sk#20, ca_zip#21] +Input [2]: [ca_address_sk#17, ca_zip#18] (26) Filter [codegen id : 4] -Input [2]: [ca_address_sk#20, ca_zip#21] -Condition : (isnotnull(ca_address_sk#20) AND isnotnull(ca_zip#21)) +Input [2]: [ca_address_sk#17, ca_zip#18] +Condition : (isnotnull(ca_address_sk#17) AND isnotnull(ca_zip#18)) (27) BroadcastExchange -Input [2]: [ca_address_sk#20, ca_zip#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#22] +Input [2]: [ca_address_sk#17, ca_zip#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (28) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [c_current_addr_sk#18] -Right keys [1]: [ca_address_sk#20] +Left keys [1]: [c_current_addr_sk#16] +Right keys [1]: [ca_address_sk#17] Join condition: None (29) Project [codegen id : 6] -Output [7]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, ca_zip#21] -Input [9]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, c_current_addr_sk#18, ca_address_sk#20, ca_zip#21] +Output [7]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, ca_zip#18] +Input [9]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, c_current_addr_sk#16, ca_address_sk#17, ca_zip#18] (30) Scan parquet default.store -Output [2]: [s_store_sk#23, s_zip#24] +Output [2]: [s_store_sk#19, s_zip#20] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_zip), IsNotNull(s_store_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 5] -Input [2]: [s_store_sk#23, s_zip#24] +Input [2]: [s_store_sk#19, s_zip#20] (32) Filter [codegen id : 5] -Input [2]: [s_store_sk#23, s_zip#24] -Condition : (isnotnull(s_zip#24) AND isnotnull(s_store_sk#23)) +Input [2]: [s_store_sk#19, s_zip#20] +Condition : (isnotnull(s_zip#20) AND isnotnull(s_store_sk#19)) (33) BroadcastExchange -Input [2]: [s_store_sk#23, s_zip#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#25] +Input [2]: [s_store_sk#19, s_zip#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_store_sk#6] -Right keys [1]: [s_store_sk#23] -Join condition: NOT (substr(ca_zip#21, 1, 5) = substr(s_zip#24, 1, 5)) +Right keys [1]: [s_store_sk#19] +Join condition: NOT (substr(ca_zip#18, 1, 5) = substr(s_zip#20, 1, 5)) (35) Project [codegen id : 6] -Output [5]: [ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14] -Input [9]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, ca_zip#21, s_store_sk#23, s_zip#24] +Output [5]: [ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13] +Input [9]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, ca_zip#18, s_store_sk#19, s_zip#20] (36) HashAggregate [codegen id : 6] -Input [5]: [ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14] -Keys [4]: [i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14] +Input [5]: [ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13] +Keys [4]: [i_brand#11, i_brand_id#10, i_manufact_id#12, i_manufact#13] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#7))] -Aggregate Attributes [1]: [sum#26] -Results [5]: [i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14, sum#27] +Aggregate Attributes [1]: [sum#21] +Results [5]: [i_brand#11, i_brand_id#10, i_manufact_id#12, i_manufact#13, sum#22] (37) Exchange -Input [5]: [i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14, sum#27] -Arguments: hashpartitioning(i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [5]: [i_brand#11, i_brand_id#10, i_manufact_id#12, i_manufact#13, sum#22] +Arguments: hashpartitioning(i_brand#11, i_brand_id#10, i_manufact_id#12, i_manufact#13, 5), ENSURE_REQUIREMENTS, [plan_id=6] (38) HashAggregate [codegen id : 7] -Input [5]: [i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14, sum#27] -Keys [4]: [i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14] +Input [5]: [i_brand#11, i_brand_id#10, i_manufact_id#12, i_manufact#13, sum#22] +Keys [4]: [i_brand#11, i_brand_id#10, i_manufact_id#12, i_manufact#13] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#7))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#7))#29] -Results [5]: [i_brand_id#11 AS brand_id#30, i_brand#12 AS brand#31, i_manufact_id#13, i_manufact#14, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#7))#29,17,2) AS ext_price#32] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#7))#23] +Results [5]: [i_brand_id#10 AS brand_id#24, i_brand#11 AS brand#25, i_manufact_id#12, i_manufact#13, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#7))#23,17,2) AS ext_price#26] (39) TakeOrderedAndProject -Input [5]: [brand_id#30, brand#31, i_manufact_id#13, i_manufact#14, ext_price#32] -Arguments: 100, [ext_price#32 DESC NULLS LAST, brand#31 ASC NULLS FIRST, brand_id#30 ASC NULLS FIRST, i_manufact_id#13 ASC NULLS FIRST, i_manufact#14 ASC NULLS FIRST], [brand_id#30, brand#31, i_manufact_id#13, i_manufact#14, ext_price#32] +Input [5]: [brand_id#24, brand#25, i_manufact_id#12, i_manufact#13, ext_price#26] +Arguments: 100, [ext_price#26 DESC NULLS LAST, brand#25 ASC NULLS FIRST, brand_id#24 ASC NULLS FIRST, i_manufact_id#12 ASC NULLS FIRST, i_manufact#13 ASC NULLS FIRST], [brand_id#24, brand#25, i_manufact_id#12, i_manufact#13, ext_price#26] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27.sf100/explain.txt index 65572cfd770d0..ae00dddad017c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27.sf100/explain.txt @@ -121,7 +121,7 @@ Input [4]: [cd_demo_sk#11, cd_gender#12, cd_marital_status#13, cd_education_stat (11) BroadcastExchange Input [1]: [cd_demo_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_cdemo_sk#2] @@ -133,76 +133,76 @@ Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, cd_demo_sk#11] (14) Scan parquet default.store -Output [2]: [s_store_sk#16, s_state#17] +Output [2]: [s_store_sk#15, s_state#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [In(s_state, [AL,SD,TN]), IsNotNull(s_store_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [2]: [s_store_sk#16, s_state#17] +Input [2]: [s_store_sk#15, s_state#16] (16) Filter [codegen id : 3] -Input [2]: [s_store_sk#16, s_state#17] -Condition : (s_state#17 IN (TN,AL,SD) AND isnotnull(s_store_sk#16)) +Input [2]: [s_store_sk#15, s_state#16] +Condition : (s_state#16 IN (TN,AL,SD) AND isnotnull(s_store_sk#15)) (17) BroadcastExchange -Input [2]: [s_store_sk#16, s_state#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#18] +Input [2]: [s_store_sk#15, s_state#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#16] +Right keys [1]: [s_store_sk#15] Join condition: None (19) Project [codegen id : 5] -Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#17] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#16, s_state#17] +Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#16] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#15, s_state#16] (20) Scan parquet default.item -Output [2]: [i_item_sk#19, i_item_id#20] +Output [2]: [i_item_sk#17, i_item_id#18] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#19, i_item_id#20] +Input [2]: [i_item_sk#17, i_item_id#18] (22) Filter [codegen id : 4] -Input [2]: [i_item_sk#19, i_item_id#20] -Condition : isnotnull(i_item_sk#19) +Input [2]: [i_item_sk#17, i_item_id#18] +Condition : isnotnull(i_item_sk#17) (23) BroadcastExchange -Input [2]: [i_item_sk#19, i_item_id#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21] +Input [2]: [i_item_sk#17, i_item_id#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#19] +Right keys [1]: [i_item_sk#17] Join condition: None (25) Project [codegen id : 5] -Output [6]: [i_item_id#20, s_state#17, ss_quantity#4 AS agg1#22, ss_list_price#5 AS agg2#23, ss_coupon_amt#7 AS agg3#24, ss_sales_price#6 AS agg4#25] -Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#17, i_item_sk#19, i_item_id#20] +Output [6]: [i_item_id#18, s_state#16, ss_quantity#4 AS agg1#19, ss_list_price#5 AS agg2#20, ss_coupon_amt#7 AS agg3#21, ss_sales_price#6 AS agg4#22] +Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#16, i_item_sk#17, i_item_id#18] (26) HashAggregate [codegen id : 5] -Input [6]: [i_item_id#20, s_state#17, agg1#22, agg2#23, agg3#24, agg4#25] -Keys [2]: [i_item_id#20, s_state#17] -Functions [4]: [partial_avg(agg1#22), partial_avg(UnscaledValue(agg2#23)), partial_avg(UnscaledValue(agg3#24)), partial_avg(UnscaledValue(agg4#25))] -Aggregate Attributes [8]: [sum#26, count#27, sum#28, count#29, sum#30, count#31, sum#32, count#33] -Results [10]: [i_item_id#20, s_state#17, sum#34, count#35, sum#36, count#37, sum#38, count#39, sum#40, count#41] +Input [6]: [i_item_id#18, s_state#16, agg1#19, agg2#20, agg3#21, agg4#22] +Keys [2]: [i_item_id#18, s_state#16] +Functions [4]: [partial_avg(agg1#19), partial_avg(UnscaledValue(agg2#20)), partial_avg(UnscaledValue(agg3#21)), partial_avg(UnscaledValue(agg4#22))] +Aggregate Attributes [8]: [sum#23, count#24, sum#25, count#26, sum#27, count#28, sum#29, count#30] +Results [10]: [i_item_id#18, s_state#16, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] (27) Exchange -Input [10]: [i_item_id#20, s_state#17, sum#34, count#35, sum#36, count#37, sum#38, count#39, sum#40, count#41] -Arguments: hashpartitioning(i_item_id#20, s_state#17, 5), ENSURE_REQUIREMENTS, [id=#42] +Input [10]: [i_item_id#18, s_state#16, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] +Arguments: hashpartitioning(i_item_id#18, s_state#16, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 6] -Input [10]: [i_item_id#20, s_state#17, sum#34, count#35, sum#36, count#37, sum#38, count#39, sum#40, count#41] -Keys [2]: [i_item_id#20, s_state#17] -Functions [4]: [avg(agg1#22), avg(UnscaledValue(agg2#23)), avg(UnscaledValue(agg3#24)), avg(UnscaledValue(agg4#25))] -Aggregate Attributes [4]: [avg(agg1#22)#43, avg(UnscaledValue(agg2#23))#44, avg(UnscaledValue(agg3#24))#45, avg(UnscaledValue(agg4#25))#46] -Results [7]: [i_item_id#20, s_state#17, 0 AS g_state#47, avg(agg1#22)#43 AS agg1#48, cast((avg(UnscaledValue(agg2#23))#44 / 100.0) as decimal(11,6)) AS agg2#49, cast((avg(UnscaledValue(agg3#24))#45 / 100.0) as decimal(11,6)) AS agg3#50, cast((avg(UnscaledValue(agg4#25))#46 / 100.0) as decimal(11,6)) AS agg4#51] +Input [10]: [i_item_id#18, s_state#16, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] +Keys [2]: [i_item_id#18, s_state#16] +Functions [4]: [avg(agg1#19), avg(UnscaledValue(agg2#20)), avg(UnscaledValue(agg3#21)), avg(UnscaledValue(agg4#22))] +Aggregate Attributes [4]: [avg(agg1#19)#39, avg(UnscaledValue(agg2#20))#40, avg(UnscaledValue(agg3#21))#41, avg(UnscaledValue(agg4#22))#42] +Results [7]: [i_item_id#18, s_state#16, 0 AS g_state#43, avg(agg1#19)#39 AS agg1#44, cast((avg(UnscaledValue(agg2#20))#40 / 100.0) as decimal(11,6)) AS agg2#45, cast((avg(UnscaledValue(agg3#21))#41 / 100.0) as decimal(11,6)) AS agg3#46, cast((avg(UnscaledValue(agg4#22))#42 / 100.0) as decimal(11,6)) AS agg4#47] (29) Scan parquet default.store_sales Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8] @@ -232,35 +232,35 @@ Output [7]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_ Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#10] (35) Scan parquet default.store -Output [2]: [s_store_sk#16, s_state#17] +Output [2]: [s_store_sk#15, s_state#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [In(s_state, [AL,SD,TN]), IsNotNull(s_store_sk)] ReadSchema: struct (36) ColumnarToRow [codegen id : 8] -Input [2]: [s_store_sk#16, s_state#17] +Input [2]: [s_store_sk#15, s_state#16] (37) Filter [codegen id : 8] -Input [2]: [s_store_sk#16, s_state#17] -Condition : (s_state#17 IN (TN,AL,SD) AND isnotnull(s_store_sk#16)) +Input [2]: [s_store_sk#15, s_state#16] +Condition : (s_state#16 IN (TN,AL,SD) AND isnotnull(s_store_sk#15)) (38) Project [codegen id : 8] -Output [1]: [s_store_sk#16] -Input [2]: [s_store_sk#16, s_state#17] +Output [1]: [s_store_sk#15] +Input [2]: [s_store_sk#15, s_state#16] (39) BroadcastExchange -Input [1]: [s_store_sk#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#52] +Input [1]: [s_store_sk#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (40) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#16] +Right keys [1]: [s_store_sk#15] Join condition: None (41) Project [codegen id : 11] Output [6]: [ss_item_sk#1, ss_cdemo_sk#2, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#16] +Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#15] (42) ReusedExchange [Reuses operator id: 11] Output [1]: [cd_demo_sk#11] @@ -275,34 +275,34 @@ Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_ Input [7]: [ss_item_sk#1, ss_cdemo_sk#2, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, cd_demo_sk#11] (45) ReusedExchange [Reuses operator id: 23] -Output [2]: [i_item_sk#19, i_item_id#20] +Output [2]: [i_item_sk#17, i_item_id#18] (46) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#19] +Right keys [1]: [i_item_sk#17] Join condition: None (47) Project [codegen id : 11] -Output [5]: [i_item_id#20, ss_quantity#4 AS agg1#22, ss_list_price#5 AS agg2#23, ss_coupon_amt#7 AS agg3#24, ss_sales_price#6 AS agg4#25] -Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#19, i_item_id#20] +Output [5]: [i_item_id#18, ss_quantity#4 AS agg1#19, ss_list_price#5 AS agg2#20, ss_coupon_amt#7 AS agg3#21, ss_sales_price#6 AS agg4#22] +Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#17, i_item_id#18] (48) HashAggregate [codegen id : 11] -Input [5]: [i_item_id#20, agg1#22, agg2#23, agg3#24, agg4#25] -Keys [1]: [i_item_id#20] -Functions [4]: [partial_avg(agg1#22), partial_avg(UnscaledValue(agg2#23)), partial_avg(UnscaledValue(agg3#24)), partial_avg(UnscaledValue(agg4#25))] -Aggregate Attributes [8]: [sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60] -Results [9]: [i_item_id#20, sum#61, count#62, sum#63, count#64, sum#65, count#66, sum#67, count#68] +Input [5]: [i_item_id#18, agg1#19, agg2#20, agg3#21, agg4#22] +Keys [1]: [i_item_id#18] +Functions [4]: [partial_avg(agg1#19), partial_avg(UnscaledValue(agg2#20)), partial_avg(UnscaledValue(agg3#21)), partial_avg(UnscaledValue(agg4#22))] +Aggregate Attributes [8]: [sum#48, count#49, sum#50, count#51, sum#52, count#53, sum#54, count#55] +Results [9]: [i_item_id#18, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63] (49) Exchange -Input [9]: [i_item_id#20, sum#61, count#62, sum#63, count#64, sum#65, count#66, sum#67, count#68] -Arguments: hashpartitioning(i_item_id#20, 5), ENSURE_REQUIREMENTS, [id=#69] +Input [9]: [i_item_id#18, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63] +Arguments: hashpartitioning(i_item_id#18, 5), ENSURE_REQUIREMENTS, [plan_id=6] (50) HashAggregate [codegen id : 12] -Input [9]: [i_item_id#20, sum#61, count#62, sum#63, count#64, sum#65, count#66, sum#67, count#68] -Keys [1]: [i_item_id#20] -Functions [4]: [avg(agg1#22), avg(UnscaledValue(agg2#23)), avg(UnscaledValue(agg3#24)), avg(UnscaledValue(agg4#25))] -Aggregate Attributes [4]: [avg(agg1#22)#70, avg(UnscaledValue(agg2#23))#71, avg(UnscaledValue(agg3#24))#72, avg(UnscaledValue(agg4#25))#73] -Results [7]: [i_item_id#20, null AS s_state#74, 1 AS g_state#75, avg(agg1#22)#70 AS agg1#76, cast((avg(UnscaledValue(agg2#23))#71 / 100.0) as decimal(11,6)) AS agg2#77, cast((avg(UnscaledValue(agg3#24))#72 / 100.0) as decimal(11,6)) AS agg3#78, cast((avg(UnscaledValue(agg4#25))#73 / 100.0) as decimal(11,6)) AS agg4#79] +Input [9]: [i_item_id#18, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63] +Keys [1]: [i_item_id#18] +Functions [4]: [avg(agg1#19), avg(UnscaledValue(agg2#20)), avg(UnscaledValue(agg3#21)), avg(UnscaledValue(agg4#22))] +Aggregate Attributes [4]: [avg(agg1#19)#64, avg(UnscaledValue(agg2#20))#65, avg(UnscaledValue(agg3#21))#66, avg(UnscaledValue(agg4#22))#67] +Results [7]: [i_item_id#18, null AS s_state#68, 1 AS g_state#69, avg(agg1#19)#64 AS agg1#70, cast((avg(UnscaledValue(agg2#20))#65 / 100.0) as decimal(11,6)) AS agg2#71, cast((avg(UnscaledValue(agg3#21))#66 / 100.0) as decimal(11,6)) AS agg3#72, cast((avg(UnscaledValue(agg4#22))#67 / 100.0) as decimal(11,6)) AS agg4#73] (51) Scan parquet default.store_sales Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8] @@ -332,16 +332,16 @@ Output [7]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_ Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#10] (57) ReusedExchange [Reuses operator id: 39] -Output [1]: [s_store_sk#16] +Output [1]: [s_store_sk#15] (58) BroadcastHashJoin [codegen id : 17] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#16] +Right keys [1]: [s_store_sk#15] Join condition: None (59) Project [codegen id : 17] Output [6]: [ss_item_sk#1, ss_cdemo_sk#2, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#16] +Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#15] (60) ReusedExchange [Reuses operator id: 11] Output [1]: [cd_demo_sk#11] @@ -356,55 +356,55 @@ Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_ Input [7]: [ss_item_sk#1, ss_cdemo_sk#2, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, cd_demo_sk#11] (63) Scan parquet default.item -Output [1]: [i_item_sk#19] +Output [1]: [i_item_sk#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (64) ColumnarToRow [codegen id : 16] -Input [1]: [i_item_sk#19] +Input [1]: [i_item_sk#17] (65) Filter [codegen id : 16] -Input [1]: [i_item_sk#19] -Condition : isnotnull(i_item_sk#19) +Input [1]: [i_item_sk#17] +Condition : isnotnull(i_item_sk#17) (66) BroadcastExchange -Input [1]: [i_item_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#80] +Input [1]: [i_item_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (67) BroadcastHashJoin [codegen id : 17] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#19] +Right keys [1]: [i_item_sk#17] Join condition: None (68) Project [codegen id : 17] -Output [4]: [ss_quantity#4 AS agg1#22, ss_list_price#5 AS agg2#23, ss_coupon_amt#7 AS agg3#24, ss_sales_price#6 AS agg4#25] -Input [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#19] +Output [4]: [ss_quantity#4 AS agg1#19, ss_list_price#5 AS agg2#20, ss_coupon_amt#7 AS agg3#21, ss_sales_price#6 AS agg4#22] +Input [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#17] (69) HashAggregate [codegen id : 17] -Input [4]: [agg1#22, agg2#23, agg3#24, agg4#25] +Input [4]: [agg1#19, agg2#20, agg3#21, agg4#22] Keys: [] -Functions [4]: [partial_avg(agg1#22), partial_avg(UnscaledValue(agg2#23)), partial_avg(UnscaledValue(agg3#24)), partial_avg(UnscaledValue(agg4#25))] -Aggregate Attributes [8]: [sum#81, count#82, sum#83, count#84, sum#85, count#86, sum#87, count#88] -Results [8]: [sum#89, count#90, sum#91, count#92, sum#93, count#94, sum#95, count#96] +Functions [4]: [partial_avg(agg1#19), partial_avg(UnscaledValue(agg2#20)), partial_avg(UnscaledValue(agg3#21)), partial_avg(UnscaledValue(agg4#22))] +Aggregate Attributes [8]: [sum#74, count#75, sum#76, count#77, sum#78, count#79, sum#80, count#81] +Results [8]: [sum#82, count#83, sum#84, count#85, sum#86, count#87, sum#88, count#89] (70) Exchange -Input [8]: [sum#89, count#90, sum#91, count#92, sum#93, count#94, sum#95, count#96] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#97] +Input [8]: [sum#82, count#83, sum#84, count#85, sum#86, count#87, sum#88, count#89] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8] (71) HashAggregate [codegen id : 18] -Input [8]: [sum#89, count#90, sum#91, count#92, sum#93, count#94, sum#95, count#96] +Input [8]: [sum#82, count#83, sum#84, count#85, sum#86, count#87, sum#88, count#89] Keys: [] -Functions [4]: [avg(agg1#22), avg(UnscaledValue(agg2#23)), avg(UnscaledValue(agg3#24)), avg(UnscaledValue(agg4#25))] -Aggregate Attributes [4]: [avg(agg1#22)#98, avg(UnscaledValue(agg2#23))#99, avg(UnscaledValue(agg3#24))#100, avg(UnscaledValue(agg4#25))#101] -Results [7]: [null AS i_item_id#102, null AS s_state#103, 1 AS g_state#104, avg(agg1#22)#98 AS agg1#105, cast((avg(UnscaledValue(agg2#23))#99 / 100.0) as decimal(11,6)) AS agg2#106, cast((avg(UnscaledValue(agg3#24))#100 / 100.0) as decimal(11,6)) AS agg3#107, cast((avg(UnscaledValue(agg4#25))#101 / 100.0) as decimal(11,6)) AS agg4#108] +Functions [4]: [avg(agg1#19), avg(UnscaledValue(agg2#20)), avg(UnscaledValue(agg3#21)), avg(UnscaledValue(agg4#22))] +Aggregate Attributes [4]: [avg(agg1#19)#90, avg(UnscaledValue(agg2#20))#91, avg(UnscaledValue(agg3#21))#92, avg(UnscaledValue(agg4#22))#93] +Results [7]: [null AS i_item_id#94, null AS s_state#95, 1 AS g_state#96, avg(agg1#19)#90 AS agg1#97, cast((avg(UnscaledValue(agg2#20))#91 / 100.0) as decimal(11,6)) AS agg2#98, cast((avg(UnscaledValue(agg3#21))#92 / 100.0) as decimal(11,6)) AS agg3#99, cast((avg(UnscaledValue(agg4#22))#93 / 100.0) as decimal(11,6)) AS agg4#100] (72) Union (73) TakeOrderedAndProject -Input [7]: [i_item_id#20, s_state#17, g_state#47, agg1#48, agg2#49, agg3#50, agg4#51] -Arguments: 100, [i_item_id#20 ASC NULLS FIRST, s_state#17 ASC NULLS FIRST], [i_item_id#20, s_state#17, g_state#47, agg1#48, agg2#49, agg3#50, agg4#51] +Input [7]: [i_item_id#18, s_state#16, g_state#43, agg1#44, agg2#45, agg3#46, agg4#47] +Arguments: 100, [i_item_id#18 ASC NULLS FIRST, s_state#16 ASC NULLS FIRST], [i_item_id#18, s_state#16, g_state#43, agg1#44, agg2#45, agg3#46, agg4#47] ===== Subqueries ===== @@ -417,26 +417,26 @@ BroadcastExchange (78) (74) Scan parquet default.date_dim -Output [2]: [d_date_sk#10, d_year#109] +Output [2]: [d_date_sk#10, d_year#101] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), GreaterThanOrEqual(d_date_sk,2451545), LessThanOrEqual(d_date_sk,2451910), IsNotNull(d_date_sk)] ReadSchema: struct (75) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#10, d_year#109] +Input [2]: [d_date_sk#10, d_year#101] (76) Filter [codegen id : 1] -Input [2]: [d_date_sk#10, d_year#109] -Condition : ((((isnotnull(d_year#109) AND (d_year#109 = 2000)) AND (d_date_sk#10 >= 2451545)) AND (d_date_sk#10 <= 2451910)) AND isnotnull(d_date_sk#10)) +Input [2]: [d_date_sk#10, d_year#101] +Condition : ((((isnotnull(d_year#101) AND (d_year#101 = 2000)) AND (d_date_sk#10 >= 2451545)) AND (d_date_sk#10 <= 2451910)) AND isnotnull(d_date_sk#10)) (77) Project [codegen id : 1] Output [1]: [d_date_sk#10] -Input [2]: [d_date_sk#10, d_year#109] +Input [2]: [d_date_sk#10, d_year#101] (78) BroadcastExchange Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#110] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] Subquery:2 Hosting operator id = 29 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27/explain.txt index 0fe719015aaa3..c181d2097b5f7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27/explain.txt @@ -109,7 +109,7 @@ Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_stat (8) BroadcastExchange Input [1]: [cd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_cdemo_sk#2] @@ -121,88 +121,88 @@ Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10] (11) ReusedExchange [Reuses operator id: 78] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (13) Project [codegen id : 5] Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#14] (14) Scan parquet default.store -Output [2]: [s_store_sk#16, s_state#17] +Output [2]: [s_store_sk#15, s_state#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [In(s_state, [AL,SD,TN]), IsNotNull(s_store_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [2]: [s_store_sk#16, s_state#17] +Input [2]: [s_store_sk#15, s_state#16] (16) Filter [codegen id : 3] -Input [2]: [s_store_sk#16, s_state#17] -Condition : (s_state#17 IN (TN,AL,SD) AND isnotnull(s_store_sk#16)) +Input [2]: [s_store_sk#15, s_state#16] +Condition : (s_state#16 IN (TN,AL,SD) AND isnotnull(s_store_sk#15)) (17) BroadcastExchange -Input [2]: [s_store_sk#16, s_state#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#18] +Input [2]: [s_store_sk#15, s_state#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#16] +Right keys [1]: [s_store_sk#15] Join condition: None (19) Project [codegen id : 5] -Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#17] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#16, s_state#17] +Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#16] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#15, s_state#16] (20) Scan parquet default.item -Output [2]: [i_item_sk#19, i_item_id#20] +Output [2]: [i_item_sk#17, i_item_id#18] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#19, i_item_id#20] +Input [2]: [i_item_sk#17, i_item_id#18] (22) Filter [codegen id : 4] -Input [2]: [i_item_sk#19, i_item_id#20] -Condition : isnotnull(i_item_sk#19) +Input [2]: [i_item_sk#17, i_item_id#18] +Condition : isnotnull(i_item_sk#17) (23) BroadcastExchange -Input [2]: [i_item_sk#19, i_item_id#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21] +Input [2]: [i_item_sk#17, i_item_id#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#19] +Right keys [1]: [i_item_sk#17] Join condition: None (25) Project [codegen id : 5] -Output [6]: [i_item_id#20, s_state#17, ss_quantity#4 AS agg1#22, ss_list_price#5 AS agg2#23, ss_coupon_amt#7 AS agg3#24, ss_sales_price#6 AS agg4#25] -Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#17, i_item_sk#19, i_item_id#20] +Output [6]: [i_item_id#18, s_state#16, ss_quantity#4 AS agg1#19, ss_list_price#5 AS agg2#20, ss_coupon_amt#7 AS agg3#21, ss_sales_price#6 AS agg4#22] +Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#16, i_item_sk#17, i_item_id#18] (26) HashAggregate [codegen id : 5] -Input [6]: [i_item_id#20, s_state#17, agg1#22, agg2#23, agg3#24, agg4#25] -Keys [2]: [i_item_id#20, s_state#17] -Functions [4]: [partial_avg(agg1#22), partial_avg(UnscaledValue(agg2#23)), partial_avg(UnscaledValue(agg3#24)), partial_avg(UnscaledValue(agg4#25))] -Aggregate Attributes [8]: [sum#26, count#27, sum#28, count#29, sum#30, count#31, sum#32, count#33] -Results [10]: [i_item_id#20, s_state#17, sum#34, count#35, sum#36, count#37, sum#38, count#39, sum#40, count#41] +Input [6]: [i_item_id#18, s_state#16, agg1#19, agg2#20, agg3#21, agg4#22] +Keys [2]: [i_item_id#18, s_state#16] +Functions [4]: [partial_avg(agg1#19), partial_avg(UnscaledValue(agg2#20)), partial_avg(UnscaledValue(agg3#21)), partial_avg(UnscaledValue(agg4#22))] +Aggregate Attributes [8]: [sum#23, count#24, sum#25, count#26, sum#27, count#28, sum#29, count#30] +Results [10]: [i_item_id#18, s_state#16, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] (27) Exchange -Input [10]: [i_item_id#20, s_state#17, sum#34, count#35, sum#36, count#37, sum#38, count#39, sum#40, count#41] -Arguments: hashpartitioning(i_item_id#20, s_state#17, 5), ENSURE_REQUIREMENTS, [id=#42] +Input [10]: [i_item_id#18, s_state#16, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] +Arguments: hashpartitioning(i_item_id#18, s_state#16, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 6] -Input [10]: [i_item_id#20, s_state#17, sum#34, count#35, sum#36, count#37, sum#38, count#39, sum#40, count#41] -Keys [2]: [i_item_id#20, s_state#17] -Functions [4]: [avg(agg1#22), avg(UnscaledValue(agg2#23)), avg(UnscaledValue(agg3#24)), avg(UnscaledValue(agg4#25))] -Aggregate Attributes [4]: [avg(agg1#22)#43, avg(UnscaledValue(agg2#23))#44, avg(UnscaledValue(agg3#24))#45, avg(UnscaledValue(agg4#25))#46] -Results [7]: [i_item_id#20, s_state#17, 0 AS g_state#47, avg(agg1#22)#43 AS agg1#48, cast((avg(UnscaledValue(agg2#23))#44 / 100.0) as decimal(11,6)) AS agg2#49, cast((avg(UnscaledValue(agg3#24))#45 / 100.0) as decimal(11,6)) AS agg3#50, cast((avg(UnscaledValue(agg4#25))#46 / 100.0) as decimal(11,6)) AS agg4#51] +Input [10]: [i_item_id#18, s_state#16, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] +Keys [2]: [i_item_id#18, s_state#16] +Functions [4]: [avg(agg1#19), avg(UnscaledValue(agg2#20)), avg(UnscaledValue(agg3#21)), avg(UnscaledValue(agg4#22))] +Aggregate Attributes [4]: [avg(agg1#19)#39, avg(UnscaledValue(agg2#20))#40, avg(UnscaledValue(agg3#21))#41, avg(UnscaledValue(agg4#22))#42] +Results [7]: [i_item_id#18, s_state#16, 0 AS g_state#43, avg(agg1#19)#39 AS agg1#44, cast((avg(UnscaledValue(agg2#20))#40 / 100.0) as decimal(11,6)) AS agg2#45, cast((avg(UnscaledValue(agg3#21))#41 / 100.0) as decimal(11,6)) AS agg3#46, cast((avg(UnscaledValue(agg4#22))#42 / 100.0) as decimal(11,6)) AS agg4#47] (29) Scan parquet default.store_sales Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8] @@ -232,77 +232,77 @@ Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10] (35) ReusedExchange [Reuses operator id: 78] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (36) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (37) Project [codegen id : 11] Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#14] (38) Scan parquet default.store -Output [2]: [s_store_sk#16, s_state#17] +Output [2]: [s_store_sk#15, s_state#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [In(s_state, [AL,SD,TN]), IsNotNull(s_store_sk)] ReadSchema: struct (39) ColumnarToRow [codegen id : 9] -Input [2]: [s_store_sk#16, s_state#17] +Input [2]: [s_store_sk#15, s_state#16] (40) Filter [codegen id : 9] -Input [2]: [s_store_sk#16, s_state#17] -Condition : (s_state#17 IN (TN,AL,SD) AND isnotnull(s_store_sk#16)) +Input [2]: [s_store_sk#15, s_state#16] +Condition : (s_state#16 IN (TN,AL,SD) AND isnotnull(s_store_sk#15)) (41) Project [codegen id : 9] -Output [1]: [s_store_sk#16] -Input [2]: [s_store_sk#16, s_state#17] +Output [1]: [s_store_sk#15] +Input [2]: [s_store_sk#15, s_state#16] (42) BroadcastExchange -Input [1]: [s_store_sk#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#52] +Input [1]: [s_store_sk#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (43) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#16] +Right keys [1]: [s_store_sk#15] Join condition: None (44) Project [codegen id : 11] Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#16] +Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#15] (45) ReusedExchange [Reuses operator id: 23] -Output [2]: [i_item_sk#19, i_item_id#20] +Output [2]: [i_item_sk#17, i_item_id#18] (46) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#19] +Right keys [1]: [i_item_sk#17] Join condition: None (47) Project [codegen id : 11] -Output [5]: [i_item_id#20, ss_quantity#4 AS agg1#22, ss_list_price#5 AS agg2#23, ss_coupon_amt#7 AS agg3#24, ss_sales_price#6 AS agg4#25] -Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#19, i_item_id#20] +Output [5]: [i_item_id#18, ss_quantity#4 AS agg1#19, ss_list_price#5 AS agg2#20, ss_coupon_amt#7 AS agg3#21, ss_sales_price#6 AS agg4#22] +Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#17, i_item_id#18] (48) HashAggregate [codegen id : 11] -Input [5]: [i_item_id#20, agg1#22, agg2#23, agg3#24, agg4#25] -Keys [1]: [i_item_id#20] -Functions [4]: [partial_avg(agg1#22), partial_avg(UnscaledValue(agg2#23)), partial_avg(UnscaledValue(agg3#24)), partial_avg(UnscaledValue(agg4#25))] -Aggregate Attributes [8]: [sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60] -Results [9]: [i_item_id#20, sum#61, count#62, sum#63, count#64, sum#65, count#66, sum#67, count#68] +Input [5]: [i_item_id#18, agg1#19, agg2#20, agg3#21, agg4#22] +Keys [1]: [i_item_id#18] +Functions [4]: [partial_avg(agg1#19), partial_avg(UnscaledValue(agg2#20)), partial_avg(UnscaledValue(agg3#21)), partial_avg(UnscaledValue(agg4#22))] +Aggregate Attributes [8]: [sum#48, count#49, sum#50, count#51, sum#52, count#53, sum#54, count#55] +Results [9]: [i_item_id#18, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63] (49) Exchange -Input [9]: [i_item_id#20, sum#61, count#62, sum#63, count#64, sum#65, count#66, sum#67, count#68] -Arguments: hashpartitioning(i_item_id#20, 5), ENSURE_REQUIREMENTS, [id=#69] +Input [9]: [i_item_id#18, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63] +Arguments: hashpartitioning(i_item_id#18, 5), ENSURE_REQUIREMENTS, [plan_id=6] (50) HashAggregate [codegen id : 12] -Input [9]: [i_item_id#20, sum#61, count#62, sum#63, count#64, sum#65, count#66, sum#67, count#68] -Keys [1]: [i_item_id#20] -Functions [4]: [avg(agg1#22), avg(UnscaledValue(agg2#23)), avg(UnscaledValue(agg3#24)), avg(UnscaledValue(agg4#25))] -Aggregate Attributes [4]: [avg(agg1#22)#70, avg(UnscaledValue(agg2#23))#71, avg(UnscaledValue(agg3#24))#72, avg(UnscaledValue(agg4#25))#73] -Results [7]: [i_item_id#20, null AS s_state#74, 1 AS g_state#75, avg(agg1#22)#70 AS agg1#76, cast((avg(UnscaledValue(agg2#23))#71 / 100.0) as decimal(11,6)) AS agg2#77, cast((avg(UnscaledValue(agg3#24))#72 / 100.0) as decimal(11,6)) AS agg3#78, cast((avg(UnscaledValue(agg4#25))#73 / 100.0) as decimal(11,6)) AS agg4#79] +Input [9]: [i_item_id#18, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63] +Keys [1]: [i_item_id#18] +Functions [4]: [avg(agg1#19), avg(UnscaledValue(agg2#20)), avg(UnscaledValue(agg3#21)), avg(UnscaledValue(agg4#22))] +Aggregate Attributes [4]: [avg(agg1#19)#64, avg(UnscaledValue(agg2#20))#65, avg(UnscaledValue(agg3#21))#66, avg(UnscaledValue(agg4#22))#67] +Results [7]: [i_item_id#18, null AS s_state#68, 1 AS g_state#69, avg(agg1#19)#64 AS agg1#70, cast((avg(UnscaledValue(agg2#20))#65 / 100.0) as decimal(11,6)) AS agg2#71, cast((avg(UnscaledValue(agg3#21))#66 / 100.0) as decimal(11,6)) AS agg3#72, cast((avg(UnscaledValue(agg4#22))#67 / 100.0) as decimal(11,6)) AS agg4#73] (51) Scan parquet default.store_sales Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8] @@ -332,79 +332,79 @@ Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10] (57) ReusedExchange [Reuses operator id: 78] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (58) BroadcastHashJoin [codegen id : 17] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (59) Project [codegen id : 17] Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#14] (60) ReusedExchange [Reuses operator id: 42] -Output [1]: [s_store_sk#16] +Output [1]: [s_store_sk#15] (61) BroadcastHashJoin [codegen id : 17] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#16] +Right keys [1]: [s_store_sk#15] Join condition: None (62) Project [codegen id : 17] Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#16] +Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#15] (63) Scan parquet default.item -Output [1]: [i_item_sk#19] +Output [1]: [i_item_sk#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (64) ColumnarToRow [codegen id : 16] -Input [1]: [i_item_sk#19] +Input [1]: [i_item_sk#17] (65) Filter [codegen id : 16] -Input [1]: [i_item_sk#19] -Condition : isnotnull(i_item_sk#19) +Input [1]: [i_item_sk#17] +Condition : isnotnull(i_item_sk#17) (66) BroadcastExchange -Input [1]: [i_item_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#80] +Input [1]: [i_item_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (67) BroadcastHashJoin [codegen id : 17] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#19] +Right keys [1]: [i_item_sk#17] Join condition: None (68) Project [codegen id : 17] -Output [4]: [ss_quantity#4 AS agg1#22, ss_list_price#5 AS agg2#23, ss_coupon_amt#7 AS agg3#24, ss_sales_price#6 AS agg4#25] -Input [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#19] +Output [4]: [ss_quantity#4 AS agg1#19, ss_list_price#5 AS agg2#20, ss_coupon_amt#7 AS agg3#21, ss_sales_price#6 AS agg4#22] +Input [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#17] (69) HashAggregate [codegen id : 17] -Input [4]: [agg1#22, agg2#23, agg3#24, agg4#25] +Input [4]: [agg1#19, agg2#20, agg3#21, agg4#22] Keys: [] -Functions [4]: [partial_avg(agg1#22), partial_avg(UnscaledValue(agg2#23)), partial_avg(UnscaledValue(agg3#24)), partial_avg(UnscaledValue(agg4#25))] -Aggregate Attributes [8]: [sum#81, count#82, sum#83, count#84, sum#85, count#86, sum#87, count#88] -Results [8]: [sum#89, count#90, sum#91, count#92, sum#93, count#94, sum#95, count#96] +Functions [4]: [partial_avg(agg1#19), partial_avg(UnscaledValue(agg2#20)), partial_avg(UnscaledValue(agg3#21)), partial_avg(UnscaledValue(agg4#22))] +Aggregate Attributes [8]: [sum#74, count#75, sum#76, count#77, sum#78, count#79, sum#80, count#81] +Results [8]: [sum#82, count#83, sum#84, count#85, sum#86, count#87, sum#88, count#89] (70) Exchange -Input [8]: [sum#89, count#90, sum#91, count#92, sum#93, count#94, sum#95, count#96] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#97] +Input [8]: [sum#82, count#83, sum#84, count#85, sum#86, count#87, sum#88, count#89] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8] (71) HashAggregate [codegen id : 18] -Input [8]: [sum#89, count#90, sum#91, count#92, sum#93, count#94, sum#95, count#96] +Input [8]: [sum#82, count#83, sum#84, count#85, sum#86, count#87, sum#88, count#89] Keys: [] -Functions [4]: [avg(agg1#22), avg(UnscaledValue(agg2#23)), avg(UnscaledValue(agg3#24)), avg(UnscaledValue(agg4#25))] -Aggregate Attributes [4]: [avg(agg1#22)#98, avg(UnscaledValue(agg2#23))#99, avg(UnscaledValue(agg3#24))#100, avg(UnscaledValue(agg4#25))#101] -Results [7]: [null AS i_item_id#102, null AS s_state#103, 1 AS g_state#104, avg(agg1#22)#98 AS agg1#105, cast((avg(UnscaledValue(agg2#23))#99 / 100.0) as decimal(11,6)) AS agg2#106, cast((avg(UnscaledValue(agg3#24))#100 / 100.0) as decimal(11,6)) AS agg3#107, cast((avg(UnscaledValue(agg4#25))#101 / 100.0) as decimal(11,6)) AS agg4#108] +Functions [4]: [avg(agg1#19), avg(UnscaledValue(agg2#20)), avg(UnscaledValue(agg3#21)), avg(UnscaledValue(agg4#22))] +Aggregate Attributes [4]: [avg(agg1#19)#90, avg(UnscaledValue(agg2#20))#91, avg(UnscaledValue(agg3#21))#92, avg(UnscaledValue(agg4#22))#93] +Results [7]: [null AS i_item_id#94, null AS s_state#95, 1 AS g_state#96, avg(agg1#19)#90 AS agg1#97, cast((avg(UnscaledValue(agg2#20))#91 / 100.0) as decimal(11,6)) AS agg2#98, cast((avg(UnscaledValue(agg3#21))#92 / 100.0) as decimal(11,6)) AS agg3#99, cast((avg(UnscaledValue(agg4#22))#93 / 100.0) as decimal(11,6)) AS agg4#100] (72) Union (73) TakeOrderedAndProject -Input [7]: [i_item_id#20, s_state#17, g_state#47, agg1#48, agg2#49, agg3#50, agg4#51] -Arguments: 100, [i_item_id#20 ASC NULLS FIRST, s_state#17 ASC NULLS FIRST], [i_item_id#20, s_state#17, g_state#47, agg1#48, agg2#49, agg3#50, agg4#51] +Input [7]: [i_item_id#18, s_state#16, g_state#43, agg1#44, agg2#45, agg3#46, agg4#47] +Arguments: 100, [i_item_id#18 ASC NULLS FIRST, s_state#16 ASC NULLS FIRST], [i_item_id#18, s_state#16, g_state#43, agg1#44, agg2#45, agg3#46, agg4#47] ===== Subqueries ===== @@ -417,26 +417,26 @@ BroadcastExchange (78) (74) Scan parquet default.date_dim -Output [2]: [d_date_sk#15, d_year#109] +Output [2]: [d_date_sk#14, d_year#101] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), GreaterThanOrEqual(d_date_sk,2451545), LessThanOrEqual(d_date_sk,2451910), IsNotNull(d_date_sk)] ReadSchema: struct (75) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#109] +Input [2]: [d_date_sk#14, d_year#101] (76) Filter [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#109] -Condition : ((((isnotnull(d_year#109) AND (d_year#109 = 2000)) AND (d_date_sk#15 >= 2451545)) AND (d_date_sk#15 <= 2451910)) AND isnotnull(d_date_sk#15)) +Input [2]: [d_date_sk#14, d_year#101] +Condition : ((((isnotnull(d_year#101) AND (d_year#101 = 2000)) AND (d_date_sk#14 >= 2451545)) AND (d_date_sk#14 <= 2451910)) AND isnotnull(d_date_sk#14)) (77) Project [codegen id : 1] -Output [1]: [d_date_sk#15] -Input [2]: [d_date_sk#15, d_year#109] +Output [1]: [d_date_sk#14] +Input [2]: [d_date_sk#14, d_year#101] (78) BroadcastExchange -Input [1]: [d_date_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#110] +Input [1]: [d_date_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] Subquery:2 Hosting operator id = 29 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3.sf100/explain.txt index 36258b96121f4..2878785c1740e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3.sf100/explain.txt @@ -53,7 +53,7 @@ Input [4]: [i_item_sk#5, i_brand_id#6, i_brand#7, i_manufact_id#8] (8) BroadcastExchange Input [3]: [i_item_sk#5, i_brand_id#6, i_brand#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#1] @@ -65,38 +65,38 @@ Output [4]: [ss_net_profit#2, ss_sold_date_sk#3, i_brand_id#6, i_brand#7] Input [6]: [ss_item_sk#1, ss_net_profit#2, ss_sold_date_sk#3, i_item_sk#5, i_brand_id#6, i_brand#7] (11) ReusedExchange [Reuses operator id: 22] -Output [2]: [d_date_sk#10, d_year#11] +Output [2]: [d_date_sk#9, d_year#10] (12) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_sold_date_sk#3] -Right keys [1]: [d_date_sk#10] +Right keys [1]: [d_date_sk#9] Join condition: None (13) Project [codegen id : 3] -Output [4]: [d_year#11, ss_net_profit#2, i_brand_id#6, i_brand#7] -Input [6]: [ss_net_profit#2, ss_sold_date_sk#3, i_brand_id#6, i_brand#7, d_date_sk#10, d_year#11] +Output [4]: [d_year#10, ss_net_profit#2, i_brand_id#6, i_brand#7] +Input [6]: [ss_net_profit#2, ss_sold_date_sk#3, i_brand_id#6, i_brand#7, d_date_sk#9, d_year#10] (14) HashAggregate [codegen id : 3] -Input [4]: [d_year#11, ss_net_profit#2, i_brand_id#6, i_brand#7] -Keys [3]: [d_year#11, i_brand#7, i_brand_id#6] +Input [4]: [d_year#10, ss_net_profit#2, i_brand_id#6, i_brand#7] +Keys [3]: [d_year#10, i_brand#7, i_brand_id#6] Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum#12] -Results [4]: [d_year#11, i_brand#7, i_brand_id#6, sum#13] +Aggregate Attributes [1]: [sum#11] +Results [4]: [d_year#10, i_brand#7, i_brand_id#6, sum#12] (15) Exchange -Input [4]: [d_year#11, i_brand#7, i_brand_id#6, sum#13] -Arguments: hashpartitioning(d_year#11, i_brand#7, i_brand_id#6, 5), ENSURE_REQUIREMENTS, [id=#14] +Input [4]: [d_year#10, i_brand#7, i_brand_id#6, sum#12] +Arguments: hashpartitioning(d_year#10, i_brand#7, i_brand_id#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (16) HashAggregate [codegen id : 4] -Input [4]: [d_year#11, i_brand#7, i_brand_id#6, sum#13] -Keys [3]: [d_year#11, i_brand#7, i_brand_id#6] +Input [4]: [d_year#10, i_brand#7, i_brand_id#6, sum#12] +Keys [3]: [d_year#10, i_brand#7, i_brand_id#6] Functions [1]: [sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#15] -Results [4]: [d_year#11, i_brand_id#6 AS brand_id#16, i_brand#7 AS brand#17, MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#15,17,2) AS sum_agg#18] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#13] +Results [4]: [d_year#10, i_brand_id#6 AS brand_id#14, i_brand#7 AS brand#15, MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#13,17,2) AS sum_agg#16] (17) TakeOrderedAndProject -Input [4]: [d_year#11, brand_id#16, brand#17, sum_agg#18] -Arguments: 100, [d_year#11 ASC NULLS FIRST, sum_agg#18 DESC NULLS LAST, brand_id#16 ASC NULLS FIRST], [d_year#11, brand_id#16, brand#17, sum_agg#18] +Input [4]: [d_year#10, brand_id#14, brand#15, sum_agg#16] +Arguments: 100, [d_year#10 ASC NULLS FIRST, sum_agg#16 DESC NULLS LAST, brand_id#14 ASC NULLS FIRST], [d_year#10, brand_id#14, brand#15, sum_agg#16] ===== Subqueries ===== @@ -109,25 +109,25 @@ BroadcastExchange (22) (18) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#11, d_moy#19] +Output [3]: [d_date_sk#9, d_year#10, d_moy#17] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), EqualTo(d_moy,12), Or(Or(Or(Or(Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2415355),LessThanOrEqual(d_date_sk,2415385)),And(GreaterThanOrEqual(d_date_sk,2415720),LessThanOrEqual(d_date_sk,2415750))),Or(And(GreaterThanOrEqual(d_date_sk,2416085),LessThanOrEqual(d_date_sk,2416115)),And(GreaterThanOrEqual(d_date_sk,2416450),LessThanOrEqual(d_date_sk,2416480)))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2416816),LessThanOrEqual(d_date_sk,2416846)),And(GreaterThanOrEqual(d_date_sk,2417181),LessThanOrEqual(d_date_sk,2417211))),And(GreaterThanOrEqual(d_date_sk,2417546),LessThanOrEqual(d_date_sk,2417576)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2417911),LessThanOrEqual(d_date_sk,2417941)),And(GreaterThanOrEqual(d_date_sk,2418277),LessThanOrEqual(d_date_sk,2418307))),And(GreaterThanOrEqual(d_date_sk,2418642),LessThanOrEqual(d_date_sk,2418672))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2419007),LessThanOrEqual(d_date_sk,2419037)),And(GreaterThanOrEqual(d_date_sk,2419372),LessThanOrEqual(d_date_sk,2419402))),And(GreaterThanOrEqual(d_date_sk,2419738),LessThanOrEqual(d_date_sk,2419768))))),Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2420103),LessThanOrEqual(d_date_sk,2420133)),And(GreaterThanOrEqual(d_date_sk,2420468),LessThanOrEqual(d_date_sk,2420498))),And(GreaterThanOrEqual(d_date_sk,2420833),LessThanOrEqual(d_date_sk,2420863))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2421199),LessThanOrEqual(d_date_sk,2421229)),And(GreaterThanOrEqual(d_date_sk,2421564),LessThanOrEqual(d_date_sk,2421594))),And(GreaterThanOrEqual(d_date_sk,2421929),LessThanOrEqual(d_date_sk,2421959)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2422294),LessThanOrEqual(d_date_sk,2422324)),And(GreaterThanOrEqual(d_date_sk,2422660),LessThanOrEqual(d_date_sk,2422690))),And(GreaterThanOrEqual(d_date_sk,2423025),LessThanOrEqual(d_date_sk,2423055))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2423390),LessThanOrEqual(d_date_sk,2423420)),And(GreaterThanOrEqual(d_date_sk,2423755),LessThanOrEqual(d_date_sk,2423785))),And(GreaterThanOrEqual(d_date_sk,2424121),LessThanOrEqual(d_date_sk,2424151)))))),Or(Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2424486),LessThanOrEqual(d_date_sk,2424516)),And(GreaterThanOrEqual(d_date_sk,2424851),LessThanOrEqual(d_date_sk,2424881))),Or(And(GreaterThanOrEqual(d_date_sk,2425216),LessThanOrEqual(d_date_sk,2425246)),And(GreaterThanOrEqual(d_date_sk,2425582),LessThanOrEqual(d_date_sk,2425612)))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2425947),LessThanOrEqual(d_date_sk,2425977)),And(GreaterThanOrEqual(d_date_sk,2426312),LessThanOrEqual(d_date_sk,2426342))),And(GreaterThanOrEqual(d_date_sk,2426677),LessThanOrEqual(d_date_sk,2426707)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2427043),LessThanOrEqual(d_date_sk,2427073)),And(GreaterThanOrEqual(d_date_sk,2427408),LessThanOrEqual(d_date_sk,2427438))),And(GreaterThanOrEqual(d_date_sk,2427773),LessThanOrEqual(d_date_sk,2427803))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2428138),LessThanOrEqual(d_date_sk,2428168)),And(GreaterThanOrEqual(d_date_sk,2428504),LessThanOrEqual(d_date_sk,2428534))),And(GreaterThanOrEqual(d_date_sk,2428869),LessThanOrEqual(d_date_sk,2428899))))),Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2429234),LessThanOrEqual(d_date_sk,2429264)),And(GreaterThanOrEqual(d_date_sk,2429599),LessThanOrEqual(d_date_sk,2429629))),And(GreaterThanOrEqual(d_date_sk,2429965),LessThanOrEqual(d_date_sk,2429995))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2430330),LessThanOrEqual(d_date_sk,2430360)),And(GreaterThanOrEqual(d_date_sk,2430695),LessThanOrEqual(d_date_sk,2430725))),And(GreaterThanOrEqual(d_date_sk,2431060),LessThanOrEqual(d_date_sk,2431090)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2431426),LessThanOrEqual(d_date_sk,2431456)),And(GreaterThanOrEqual(d_date_sk,2431791),LessThanOrEqual(d_date_sk,2431821))),And(GreaterThanOrEqual(d_date_sk,2432156),LessThanOrEqual(d_date_sk,2432186))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2432521),LessThanOrEqual(d_date_sk,2432551)),And(GreaterThanOrEqual(d_date_sk,2432887),LessThanOrEqual(d_date_sk,2432917))),And(GreaterThanOrEqual(d_date_sk,2433252),LessThanOrEqual(d_date_sk,2433282))))))),Or(Or(Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2433617),LessThanOrEqual(d_date_sk,2433647)),And(GreaterThanOrEqual(d_date_sk,2433982),LessThanOrEqual(d_date_sk,2434012))),Or(And(GreaterThanOrEqual(d_date_sk,2434348),LessThanOrEqual(d_date_sk,2434378)),And(GreaterThanOrEqual(d_date_sk,2434713),LessThanOrEqual(d_date_sk,2434743)))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2435078),LessThanOrEqual(d_date_sk,2435108)),And(GreaterThanOrEqual(d_date_sk,2435443),LessThanOrEqual(d_date_sk,2435473))),And(GreaterThanOrEqual(d_date_sk,2435809),LessThanOrEqual(d_date_sk,2435839)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2436174),LessThanOrEqual(d_date_sk,2436204)),And(GreaterThanOrEqual(d_date_sk,2436539),LessThanOrEqual(d_date_sk,2436569))),And(GreaterThanOrEqual(d_date_sk,2436904),LessThanOrEqual(d_date_sk,2436934))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2437270),LessThanOrEqual(d_date_sk,2437300)),And(GreaterThanOrEqual(d_date_sk,2437635),LessThanOrEqual(d_date_sk,2437665))),And(GreaterThanOrEqual(d_date_sk,2438000),LessThanOrEqual(d_date_sk,2438030))))),Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2438365),LessThanOrEqual(d_date_sk,2438395)),And(GreaterThanOrEqual(d_date_sk,2438731),LessThanOrEqual(d_date_sk,2438761))),And(GreaterThanOrEqual(d_date_sk,2439096),LessThanOrEqual(d_date_sk,2439126))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2439461),LessThanOrEqual(d_date_sk,2439491)),And(GreaterThanOrEqual(d_date_sk,2439826),LessThanOrEqual(d_date_sk,2439856))),And(GreaterThanOrEqual(d_date_sk,2440192),LessThanOrEqual(d_date_sk,2440222)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2440557),LessThanOrEqual(d_date_sk,2440587)),And(GreaterThanOrEqual(d_date_sk,2440922),LessThanOrEqual(d_date_sk,2440952))),And(GreaterThanOrEqual(d_date_sk,2441287),LessThanOrEqual(d_date_sk,2441317))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2441653),LessThanOrEqual(d_date_sk,2441683)),And(GreaterThanOrEqual(d_date_sk,2442018),LessThanOrEqual(d_date_sk,2442048))),And(GreaterThanOrEqual(d_date_sk,2442383),LessThanOrEqual(d_date_sk,2442413)))))),Or(Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2442748),LessThanOrEqual(d_date_sk,2442778)),And(GreaterThanOrEqual(d_date_sk,2443114),LessThanOrEqual(d_date_sk,2443144))),Or(And(GreaterThanOrEqual(d_date_sk,2443479),LessThanOrEqual(d_date_sk,2443509)),And(GreaterThanOrEqual(d_date_sk,2443844),LessThanOrEqual(d_date_sk,2443874)))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2444209),LessThanOrEqual(d_date_sk,2444239)),And(GreaterThanOrEqual(d_date_sk,2444575),LessThanOrEqual(d_date_sk,2444605))),And(GreaterThanOrEqual(d_date_sk,2444940),LessThanOrEqual(d_date_sk,2444970)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2445305),LessThanOrEqual(d_date_sk,2445335)),And(GreaterThanOrEqual(d_date_sk,2445670),LessThanOrEqual(d_date_sk,2445700))),And(GreaterThanOrEqual(d_date_sk,2446036),LessThanOrEqual(d_date_sk,2446066))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2446401),LessThanOrEqual(d_date_sk,2446431)),And(GreaterThanOrEqual(d_date_sk,2446766),LessThanOrEqual(d_date_sk,2446796))),And(GreaterThanOrEqual(d_date_sk,2447131),LessThanOrEqual(d_date_sk,2447161))))),Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2447497),LessThanOrEqual(d_date_sk,2447527)),And(GreaterThanOrEqual(d_date_sk,2447862),LessThanOrEqual(d_date_sk,2447892))),And(GreaterThanOrEqual(d_date_sk,2448227),LessThanOrEqual(d_date_sk,2448257))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2448592),LessThanOrEqual(d_date_sk,2448622)),And(GreaterThanOrEqual(d_date_sk,2448958),LessThanOrEqual(d_date_sk,2448988))),And(GreaterThanOrEqual(d_date_sk,2449323),LessThanOrEqual(d_date_sk,2449353)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2449688),LessThanOrEqual(d_date_sk,2449718)),And(GreaterThanOrEqual(d_date_sk,2450053),LessThanOrEqual(d_date_sk,2450083))),And(GreaterThanOrEqual(d_date_sk,2450419),LessThanOrEqual(d_date_sk,2450449))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2450784),LessThanOrEqual(d_date_sk,2450814)),And(GreaterThanOrEqual(d_date_sk,2451149),LessThanOrEqual(d_date_sk,2451179))),And(GreaterThanOrEqual(d_date_sk,2451514),LessThanOrEqual(d_date_sk,2451544)))))))),Or(Or(Or(Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2451880),LessThanOrEqual(d_date_sk,2451910)),And(GreaterThanOrEqual(d_date_sk,2452245),LessThanOrEqual(d_date_sk,2452275))),Or(And(GreaterThanOrEqual(d_date_sk,2452610),LessThanOrEqual(d_date_sk,2452640)),And(GreaterThanOrEqual(d_date_sk,2452975),LessThanOrEqual(d_date_sk,2453005)))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2453341),LessThanOrEqual(d_date_sk,2453371)),And(GreaterThanOrEqual(d_date_sk,2453706),LessThanOrEqual(d_date_sk,2453736))),And(GreaterThanOrEqual(d_date_sk,2454071),LessThanOrEqual(d_date_sk,2454101)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2454436),LessThanOrEqual(d_date_sk,2454466)),And(GreaterThanOrEqual(d_date_sk,2454802),LessThanOrEqual(d_date_sk,2454832))),And(GreaterThanOrEqual(d_date_sk,2455167),LessThanOrEqual(d_date_sk,2455197))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2455532),LessThanOrEqual(d_date_sk,2455562)),And(GreaterThanOrEqual(d_date_sk,2455897),LessThanOrEqual(d_date_sk,2455927))),And(GreaterThanOrEqual(d_date_sk,2456263),LessThanOrEqual(d_date_sk,2456293))))),Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2456628),LessThanOrEqual(d_date_sk,2456658)),And(GreaterThanOrEqual(d_date_sk,2456993),LessThanOrEqual(d_date_sk,2457023))),And(GreaterThanOrEqual(d_date_sk,2457358),LessThanOrEqual(d_date_sk,2457388))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2457724),LessThanOrEqual(d_date_sk,2457754)),And(GreaterThanOrEqual(d_date_sk,2458089),LessThanOrEqual(d_date_sk,2458119))),And(GreaterThanOrEqual(d_date_sk,2458454),LessThanOrEqual(d_date_sk,2458484)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2458819),LessThanOrEqual(d_date_sk,2458849)),And(GreaterThanOrEqual(d_date_sk,2459185),LessThanOrEqual(d_date_sk,2459215))),And(GreaterThanOrEqual(d_date_sk,2459550),LessThanOrEqual(d_date_sk,2459580))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2459915),LessThanOrEqual(d_date_sk,2459945)),And(GreaterThanOrEqual(d_date_sk,2460280),LessThanOrEqual(d_date_sk,2460310))),And(GreaterThanOrEqual(d_date_sk,2460646),LessThanOrEqual(d_date_sk,2460676)))))),Or(Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2461011),LessThanOrEqual(d_date_sk,2461041)),And(GreaterThanOrEqual(d_date_sk,2461376),LessThanOrEqual(d_date_sk,2461406))),Or(And(GreaterThanOrEqual(d_date_sk,2461741),LessThanOrEqual(d_date_sk,2461771)),And(GreaterThanOrEqual(d_date_sk,2462107),LessThanOrEqual(d_date_sk,2462137)))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2462472),LessThanOrEqual(d_date_sk,2462502)),And(GreaterThanOrEqual(d_date_sk,2462837),LessThanOrEqual(d_date_sk,2462867))),And(GreaterThanOrEqual(d_date_sk,2463202),LessThanOrEqual(d_date_sk,2463232)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2463568),LessThanOrEqual(d_date_sk,2463598)),And(GreaterThanOrEqual(d_date_sk,2463933),LessThanOrEqual(d_date_sk,2463963))),And(GreaterThanOrEqual(d_date_sk,2464298),LessThanOrEqual(d_date_sk,2464328))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2464663),LessThanOrEqual(d_date_sk,2464693)),And(GreaterThanOrEqual(d_date_sk,2465029),LessThanOrEqual(d_date_sk,2465059))),And(GreaterThanOrEqual(d_date_sk,2465394),LessThanOrEqual(d_date_sk,2465424))))),Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2465759),LessThanOrEqual(d_date_sk,2465789)),And(GreaterThanOrEqual(d_date_sk,2466124),LessThanOrEqual(d_date_sk,2466154))),And(GreaterThanOrEqual(d_date_sk,2466490),LessThanOrEqual(d_date_sk,2466520))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2466855),LessThanOrEqual(d_date_sk,2466885)),And(GreaterThanOrEqual(d_date_sk,2467220),LessThanOrEqual(d_date_sk,2467250))),And(GreaterThanOrEqual(d_date_sk,2467585),LessThanOrEqual(d_date_sk,2467615)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2467951),LessThanOrEqual(d_date_sk,2467981)),And(GreaterThanOrEqual(d_date_sk,2468316),LessThanOrEqual(d_date_sk,2468346))),And(GreaterThanOrEqual(d_date_sk,2468681),LessThanOrEqual(d_date_sk,2468711))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2469046),LessThanOrEqual(d_date_sk,2469076)),And(GreaterThanOrEqual(d_date_sk,2469412),LessThanOrEqual(d_date_sk,2469442))),And(GreaterThanOrEqual(d_date_sk,2469777),LessThanOrEqual(d_date_sk,2469807))))))),Or(Or(Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2470142),LessThanOrEqual(d_date_sk,2470172)),And(GreaterThanOrEqual(d_date_sk,2470507),LessThanOrEqual(d_date_sk,2470537))),Or(And(GreaterThanOrEqual(d_date_sk,2470873),LessThanOrEqual(d_date_sk,2470903)),And(GreaterThanOrEqual(d_date_sk,2471238),LessThanOrEqual(d_date_sk,2471268)))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2471603),LessThanOrEqual(d_date_sk,2471633)),And(GreaterThanOrEqual(d_date_sk,2471968),LessThanOrEqual(d_date_sk,2471998))),And(GreaterThanOrEqual(d_date_sk,2472334),LessThanOrEqual(d_date_sk,2472364)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2472699),LessThanOrEqual(d_date_sk,2472729)),And(GreaterThanOrEqual(d_date_sk,2473064),LessThanOrEqual(d_date_sk,2473094))),And(GreaterThanOrEqual(d_date_sk,2473429),LessThanOrEqual(d_date_sk,2473459))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2473795),LessThanOrEqual(d_date_sk,2473825)),And(GreaterThanOrEqual(d_date_sk,2474160),LessThanOrEqual(d_date_sk,2474190))),And(GreaterThanOrEqual(d_date_sk,2474525),LessThanOrEqual(d_date_sk,2474555))))),Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2474890),LessThanOrEqual(d_date_sk,2474920)),And(GreaterThanOrEqual(d_date_sk,2475256),LessThanOrEqual(d_date_sk,2475286))),And(GreaterThanOrEqual(d_date_sk,2475621),LessThanOrEqual(d_date_sk,2475651))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2475986),LessThanOrEqual(d_date_sk,2476016)),And(GreaterThanOrEqual(d_date_sk,2476351),LessThanOrEqual(d_date_sk,2476381))),And(GreaterThanOrEqual(d_date_sk,2476717),LessThanOrEqual(d_date_sk,2476747)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2477082),LessThanOrEqual(d_date_sk,2477112)),And(GreaterThanOrEqual(d_date_sk,2477447),LessThanOrEqual(d_date_sk,2477477))),And(GreaterThanOrEqual(d_date_sk,2477812),LessThanOrEqual(d_date_sk,2477842))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2478178),LessThanOrEqual(d_date_sk,2478208)),And(GreaterThanOrEqual(d_date_sk,2478543),LessThanOrEqual(d_date_sk,2478573))),And(GreaterThanOrEqual(d_date_sk,2478908),LessThanOrEqual(d_date_sk,2478938)))))),Or(Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2479273),LessThanOrEqual(d_date_sk,2479303)),And(GreaterThanOrEqual(d_date_sk,2479639),LessThanOrEqual(d_date_sk,2479669))),Or(And(GreaterThanOrEqual(d_date_sk,2480004),LessThanOrEqual(d_date_sk,2480034)),And(GreaterThanOrEqual(d_date_sk,2480369),LessThanOrEqual(d_date_sk,2480399)))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2480734),LessThanOrEqual(d_date_sk,2480764)),And(GreaterThanOrEqual(d_date_sk,2481100),LessThanOrEqual(d_date_sk,2481130))),And(GreaterThanOrEqual(d_date_sk,2481465),LessThanOrEqual(d_date_sk,2481495)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2481830),LessThanOrEqual(d_date_sk,2481860)),And(GreaterThanOrEqual(d_date_sk,2482195),LessThanOrEqual(d_date_sk,2482225))),And(GreaterThanOrEqual(d_date_sk,2482561),LessThanOrEqual(d_date_sk,2482591))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2482926),LessThanOrEqual(d_date_sk,2482956)),And(GreaterThanOrEqual(d_date_sk,2483291),LessThanOrEqual(d_date_sk,2483321))),And(GreaterThanOrEqual(d_date_sk,2483656),LessThanOrEqual(d_date_sk,2483686))))),Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2484022),LessThanOrEqual(d_date_sk,2484052)),And(GreaterThanOrEqual(d_date_sk,2484387),LessThanOrEqual(d_date_sk,2484417))),And(GreaterThanOrEqual(d_date_sk,2484752),LessThanOrEqual(d_date_sk,2484782))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2485117),LessThanOrEqual(d_date_sk,2485147)),And(GreaterThanOrEqual(d_date_sk,2485483),LessThanOrEqual(d_date_sk,2485513))),And(GreaterThanOrEqual(d_date_sk,2485848),LessThanOrEqual(d_date_sk,2485878)))),Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2486213),LessThanOrEqual(d_date_sk,2486243)),And(GreaterThanOrEqual(d_date_sk,2486578),LessThanOrEqual(d_date_sk,2486608))),And(GreaterThanOrEqual(d_date_sk,2486944),LessThanOrEqual(d_date_sk,2486974))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2487309),LessThanOrEqual(d_date_sk,2487339)),And(GreaterThanOrEqual(d_date_sk,2487674),LessThanOrEqual(d_date_sk,2487704))),And(GreaterThanOrEqual(d_date_sk,2488039),LessThanOrEqual(d_date_sk,2488069))))))))), IsNotNull(d_date_sk)] ReadSchema: struct (19) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#19] +Input [3]: [d_date_sk#9, d_year#10, d_moy#17] (20) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#19] -Condition : (((isnotnull(d_moy#19) AND (d_moy#19 = 12)) AND ((((((((((d_date_sk#10 >= 2415355) AND (d_date_sk#10 <= 2415385)) OR ((d_date_sk#10 >= 2415720) AND (d_date_sk#10 <= 2415750))) OR (((d_date_sk#10 >= 2416085) AND (d_date_sk#10 <= 2416115)) OR ((d_date_sk#10 >= 2416450) AND (d_date_sk#10 <= 2416480)))) OR ((((d_date_sk#10 >= 2416816) AND (d_date_sk#10 <= 2416846)) OR ((d_date_sk#10 >= 2417181) AND (d_date_sk#10 <= 2417211))) OR ((d_date_sk#10 >= 2417546) AND (d_date_sk#10 <= 2417576)))) OR (((((d_date_sk#10 >= 2417911) AND (d_date_sk#10 <= 2417941)) OR ((d_date_sk#10 >= 2418277) AND (d_date_sk#10 <= 2418307))) OR ((d_date_sk#10 >= 2418642) AND (d_date_sk#10 <= 2418672))) OR ((((d_date_sk#10 >= 2419007) AND (d_date_sk#10 <= 2419037)) OR ((d_date_sk#10 >= 2419372) AND (d_date_sk#10 <= 2419402))) OR ((d_date_sk#10 >= 2419738) AND (d_date_sk#10 <= 2419768))))) OR ((((((d_date_sk#10 >= 2420103) AND (d_date_sk#10 <= 2420133)) OR ((d_date_sk#10 >= 2420468) AND (d_date_sk#10 <= 2420498))) OR ((d_date_sk#10 >= 2420833) AND (d_date_sk#10 <= 2420863))) OR ((((d_date_sk#10 >= 2421199) AND (d_date_sk#10 <= 2421229)) OR ((d_date_sk#10 >= 2421564) AND (d_date_sk#10 <= 2421594))) OR ((d_date_sk#10 >= 2421929) AND (d_date_sk#10 <= 2421959)))) OR (((((d_date_sk#10 >= 2422294) AND (d_date_sk#10 <= 2422324)) OR ((d_date_sk#10 >= 2422660) AND (d_date_sk#10 <= 2422690))) OR ((d_date_sk#10 >= 2423025) AND (d_date_sk#10 <= 2423055))) OR ((((d_date_sk#10 >= 2423390) AND (d_date_sk#10 <= 2423420)) OR ((d_date_sk#10 >= 2423755) AND (d_date_sk#10 <= 2423785))) OR ((d_date_sk#10 >= 2424121) AND (d_date_sk#10 <= 2424151)))))) OR (((((((d_date_sk#10 >= 2424486) AND (d_date_sk#10 <= 2424516)) OR ((d_date_sk#10 >= 2424851) AND (d_date_sk#10 <= 2424881))) OR (((d_date_sk#10 >= 2425216) AND (d_date_sk#10 <= 2425246)) OR ((d_date_sk#10 >= 2425582) AND (d_date_sk#10 <= 2425612)))) OR ((((d_date_sk#10 >= 2425947) AND (d_date_sk#10 <= 2425977)) OR ((d_date_sk#10 >= 2426312) AND (d_date_sk#10 <= 2426342))) OR ((d_date_sk#10 >= 2426677) AND (d_date_sk#10 <= 2426707)))) OR (((((d_date_sk#10 >= 2427043) AND (d_date_sk#10 <= 2427073)) OR ((d_date_sk#10 >= 2427408) AND (d_date_sk#10 <= 2427438))) OR ((d_date_sk#10 >= 2427773) AND (d_date_sk#10 <= 2427803))) OR ((((d_date_sk#10 >= 2428138) AND (d_date_sk#10 <= 2428168)) OR ((d_date_sk#10 >= 2428504) AND (d_date_sk#10 <= 2428534))) OR ((d_date_sk#10 >= 2428869) AND (d_date_sk#10 <= 2428899))))) OR ((((((d_date_sk#10 >= 2429234) AND (d_date_sk#10 <= 2429264)) OR ((d_date_sk#10 >= 2429599) AND (d_date_sk#10 <= 2429629))) OR ((d_date_sk#10 >= 2429965) AND (d_date_sk#10 <= 2429995))) OR ((((d_date_sk#10 >= 2430330) AND (d_date_sk#10 <= 2430360)) OR ((d_date_sk#10 >= 2430695) AND (d_date_sk#10 <= 2430725))) OR ((d_date_sk#10 >= 2431060) AND (d_date_sk#10 <= 2431090)))) OR (((((d_date_sk#10 >= 2431426) AND (d_date_sk#10 <= 2431456)) OR ((d_date_sk#10 >= 2431791) AND (d_date_sk#10 <= 2431821))) OR ((d_date_sk#10 >= 2432156) AND (d_date_sk#10 <= 2432186))) OR ((((d_date_sk#10 >= 2432521) AND (d_date_sk#10 <= 2432551)) OR ((d_date_sk#10 >= 2432887) AND (d_date_sk#10 <= 2432917))) OR ((d_date_sk#10 >= 2433252) AND (d_date_sk#10 <= 2433282))))))) OR ((((((((d_date_sk#10 >= 2433617) AND (d_date_sk#10 <= 2433647)) OR ((d_date_sk#10 >= 2433982) AND (d_date_sk#10 <= 2434012))) OR (((d_date_sk#10 >= 2434348) AND (d_date_sk#10 <= 2434378)) OR ((d_date_sk#10 >= 2434713) AND (d_date_sk#10 <= 2434743)))) OR ((((d_date_sk#10 >= 2435078) AND (d_date_sk#10 <= 2435108)) OR ((d_date_sk#10 >= 2435443) AND (d_date_sk#10 <= 2435473))) OR ((d_date_sk#10 >= 2435809) AND (d_date_sk#10 <= 2435839)))) OR (((((d_date_sk#10 >= 2436174) AND (d_date_sk#10 <= 2436204)) OR ((d_date_sk#10 >= 2436539) AND (d_date_sk#10 <= 2436569))) OR ((d_date_sk#10 >= 2436904) AND (d_date_sk#10 <= 2436934))) OR ((((d_date_sk#10 >= 2437270) AND (d_date_sk#10 <= 2437300)) OR ((d_date_sk#10 >= 2437635) AND (d_date_sk#10 <= 2437665))) OR ((d_date_sk#10 >= 2438000) AND (d_date_sk#10 <= 2438030))))) OR ((((((d_date_sk#10 >= 2438365) AND (d_date_sk#10 <= 2438395)) OR ((d_date_sk#10 >= 2438731) AND (d_date_sk#10 <= 2438761))) OR ((d_date_sk#10 >= 2439096) AND (d_date_sk#10 <= 2439126))) OR ((((d_date_sk#10 >= 2439461) AND (d_date_sk#10 <= 2439491)) OR ((d_date_sk#10 >= 2439826) AND (d_date_sk#10 <= 2439856))) OR ((d_date_sk#10 >= 2440192) AND (d_date_sk#10 <= 2440222)))) OR (((((d_date_sk#10 >= 2440557) AND (d_date_sk#10 <= 2440587)) OR ((d_date_sk#10 >= 2440922) AND (d_date_sk#10 <= 2440952))) OR ((d_date_sk#10 >= 2441287) AND (d_date_sk#10 <= 2441317))) OR ((((d_date_sk#10 >= 2441653) AND (d_date_sk#10 <= 2441683)) OR ((d_date_sk#10 >= 2442018) AND (d_date_sk#10 <= 2442048))) OR ((d_date_sk#10 >= 2442383) AND (d_date_sk#10 <= 2442413)))))) OR (((((((d_date_sk#10 >= 2442748) AND (d_date_sk#10 <= 2442778)) OR ((d_date_sk#10 >= 2443114) AND (d_date_sk#10 <= 2443144))) OR (((d_date_sk#10 >= 2443479) AND (d_date_sk#10 <= 2443509)) OR ((d_date_sk#10 >= 2443844) AND (d_date_sk#10 <= 2443874)))) OR ((((d_date_sk#10 >= 2444209) AND (d_date_sk#10 <= 2444239)) OR ((d_date_sk#10 >= 2444575) AND (d_date_sk#10 <= 2444605))) OR ((d_date_sk#10 >= 2444940) AND (d_date_sk#10 <= 2444970)))) OR (((((d_date_sk#10 >= 2445305) AND (d_date_sk#10 <= 2445335)) OR ((d_date_sk#10 >= 2445670) AND (d_date_sk#10 <= 2445700))) OR ((d_date_sk#10 >= 2446036) AND (d_date_sk#10 <= 2446066))) OR ((((d_date_sk#10 >= 2446401) AND (d_date_sk#10 <= 2446431)) OR ((d_date_sk#10 >= 2446766) AND (d_date_sk#10 <= 2446796))) OR ((d_date_sk#10 >= 2447131) AND (d_date_sk#10 <= 2447161))))) OR ((((((d_date_sk#10 >= 2447497) AND (d_date_sk#10 <= 2447527)) OR ((d_date_sk#10 >= 2447862) AND (d_date_sk#10 <= 2447892))) OR ((d_date_sk#10 >= 2448227) AND (d_date_sk#10 <= 2448257))) OR ((((d_date_sk#10 >= 2448592) AND (d_date_sk#10 <= 2448622)) OR ((d_date_sk#10 >= 2448958) AND (d_date_sk#10 <= 2448988))) OR ((d_date_sk#10 >= 2449323) AND (d_date_sk#10 <= 2449353)))) OR (((((d_date_sk#10 >= 2449688) AND (d_date_sk#10 <= 2449718)) OR ((d_date_sk#10 >= 2450053) AND (d_date_sk#10 <= 2450083))) OR ((d_date_sk#10 >= 2450419) AND (d_date_sk#10 <= 2450449))) OR ((((d_date_sk#10 >= 2450784) AND (d_date_sk#10 <= 2450814)) OR ((d_date_sk#10 >= 2451149) AND (d_date_sk#10 <= 2451179))) OR ((d_date_sk#10 >= 2451514) AND (d_date_sk#10 <= 2451544)))))))) OR (((((((((d_date_sk#10 >= 2451880) AND (d_date_sk#10 <= 2451910)) OR ((d_date_sk#10 >= 2452245) AND (d_date_sk#10 <= 2452275))) OR (((d_date_sk#10 >= 2452610) AND (d_date_sk#10 <= 2452640)) OR ((d_date_sk#10 >= 2452975) AND (d_date_sk#10 <= 2453005)))) OR ((((d_date_sk#10 >= 2453341) AND (d_date_sk#10 <= 2453371)) OR ((d_date_sk#10 >= 2453706) AND (d_date_sk#10 <= 2453736))) OR ((d_date_sk#10 >= 2454071) AND (d_date_sk#10 <= 2454101)))) OR (((((d_date_sk#10 >= 2454436) AND (d_date_sk#10 <= 2454466)) OR ((d_date_sk#10 >= 2454802) AND (d_date_sk#10 <= 2454832))) OR ((d_date_sk#10 >= 2455167) AND (d_date_sk#10 <= 2455197))) OR ((((d_date_sk#10 >= 2455532) AND (d_date_sk#10 <= 2455562)) OR ((d_date_sk#10 >= 2455897) AND (d_date_sk#10 <= 2455927))) OR ((d_date_sk#10 >= 2456263) AND (d_date_sk#10 <= 2456293))))) OR ((((((d_date_sk#10 >= 2456628) AND (d_date_sk#10 <= 2456658)) OR ((d_date_sk#10 >= 2456993) AND (d_date_sk#10 <= 2457023))) OR ((d_date_sk#10 >= 2457358) AND (d_date_sk#10 <= 2457388))) OR ((((d_date_sk#10 >= 2457724) AND (d_date_sk#10 <= 2457754)) OR ((d_date_sk#10 >= 2458089) AND (d_date_sk#10 <= 2458119))) OR ((d_date_sk#10 >= 2458454) AND (d_date_sk#10 <= 2458484)))) OR (((((d_date_sk#10 >= 2458819) AND (d_date_sk#10 <= 2458849)) OR ((d_date_sk#10 >= 2459185) AND (d_date_sk#10 <= 2459215))) OR ((d_date_sk#10 >= 2459550) AND (d_date_sk#10 <= 2459580))) OR ((((d_date_sk#10 >= 2459915) AND (d_date_sk#10 <= 2459945)) OR ((d_date_sk#10 >= 2460280) AND (d_date_sk#10 <= 2460310))) OR ((d_date_sk#10 >= 2460646) AND (d_date_sk#10 <= 2460676)))))) OR (((((((d_date_sk#10 >= 2461011) AND (d_date_sk#10 <= 2461041)) OR ((d_date_sk#10 >= 2461376) AND (d_date_sk#10 <= 2461406))) OR (((d_date_sk#10 >= 2461741) AND (d_date_sk#10 <= 2461771)) OR ((d_date_sk#10 >= 2462107) AND (d_date_sk#10 <= 2462137)))) OR ((((d_date_sk#10 >= 2462472) AND (d_date_sk#10 <= 2462502)) OR ((d_date_sk#10 >= 2462837) AND (d_date_sk#10 <= 2462867))) OR ((d_date_sk#10 >= 2463202) AND (d_date_sk#10 <= 2463232)))) OR (((((d_date_sk#10 >= 2463568) AND (d_date_sk#10 <= 2463598)) OR ((d_date_sk#10 >= 2463933) AND (d_date_sk#10 <= 2463963))) OR ((d_date_sk#10 >= 2464298) AND (d_date_sk#10 <= 2464328))) OR ((((d_date_sk#10 >= 2464663) AND (d_date_sk#10 <= 2464693)) OR ((d_date_sk#10 >= 2465029) AND (d_date_sk#10 <= 2465059))) OR ((d_date_sk#10 >= 2465394) AND (d_date_sk#10 <= 2465424))))) OR ((((((d_date_sk#10 >= 2465759) AND (d_date_sk#10 <= 2465789)) OR ((d_date_sk#10 >= 2466124) AND (d_date_sk#10 <= 2466154))) OR ((d_date_sk#10 >= 2466490) AND (d_date_sk#10 <= 2466520))) OR ((((d_date_sk#10 >= 2466855) AND (d_date_sk#10 <= 2466885)) OR ((d_date_sk#10 >= 2467220) AND (d_date_sk#10 <= 2467250))) OR ((d_date_sk#10 >= 2467585) AND (d_date_sk#10 <= 2467615)))) OR (((((d_date_sk#10 >= 2467951) AND (d_date_sk#10 <= 2467981)) OR ((d_date_sk#10 >= 2468316) AND (d_date_sk#10 <= 2468346))) OR ((d_date_sk#10 >= 2468681) AND (d_date_sk#10 <= 2468711))) OR ((((d_date_sk#10 >= 2469046) AND (d_date_sk#10 <= 2469076)) OR ((d_date_sk#10 >= 2469412) AND (d_date_sk#10 <= 2469442))) OR ((d_date_sk#10 >= 2469777) AND (d_date_sk#10 <= 2469807))))))) OR ((((((((d_date_sk#10 >= 2470142) AND (d_date_sk#10 <= 2470172)) OR ((d_date_sk#10 >= 2470507) AND (d_date_sk#10 <= 2470537))) OR (((d_date_sk#10 >= 2470873) AND (d_date_sk#10 <= 2470903)) OR ((d_date_sk#10 >= 2471238) AND (d_date_sk#10 <= 2471268)))) OR ((((d_date_sk#10 >= 2471603) AND (d_date_sk#10 <= 2471633)) OR ((d_date_sk#10 >= 2471968) AND (d_date_sk#10 <= 2471998))) OR ((d_date_sk#10 >= 2472334) AND (d_date_sk#10 <= 2472364)))) OR (((((d_date_sk#10 >= 2472699) AND (d_date_sk#10 <= 2472729)) OR ((d_date_sk#10 >= 2473064) AND (d_date_sk#10 <= 2473094))) OR ((d_date_sk#10 >= 2473429) AND (d_date_sk#10 <= 2473459))) OR ((((d_date_sk#10 >= 2473795) AND (d_date_sk#10 <= 2473825)) OR ((d_date_sk#10 >= 2474160) AND (d_date_sk#10 <= 2474190))) OR ((d_date_sk#10 >= 2474525) AND (d_date_sk#10 <= 2474555))))) OR ((((((d_date_sk#10 >= 2474890) AND (d_date_sk#10 <= 2474920)) OR ((d_date_sk#10 >= 2475256) AND (d_date_sk#10 <= 2475286))) OR ((d_date_sk#10 >= 2475621) AND (d_date_sk#10 <= 2475651))) OR ((((d_date_sk#10 >= 2475986) AND (d_date_sk#10 <= 2476016)) OR ((d_date_sk#10 >= 2476351) AND (d_date_sk#10 <= 2476381))) OR ((d_date_sk#10 >= 2476717) AND (d_date_sk#10 <= 2476747)))) OR (((((d_date_sk#10 >= 2477082) AND (d_date_sk#10 <= 2477112)) OR ((d_date_sk#10 >= 2477447) AND (d_date_sk#10 <= 2477477))) OR ((d_date_sk#10 >= 2477812) AND (d_date_sk#10 <= 2477842))) OR ((((d_date_sk#10 >= 2478178) AND (d_date_sk#10 <= 2478208)) OR ((d_date_sk#10 >= 2478543) AND (d_date_sk#10 <= 2478573))) OR ((d_date_sk#10 >= 2478908) AND (d_date_sk#10 <= 2478938)))))) OR (((((((d_date_sk#10 >= 2479273) AND (d_date_sk#10 <= 2479303)) OR ((d_date_sk#10 >= 2479639) AND (d_date_sk#10 <= 2479669))) OR (((d_date_sk#10 >= 2480004) AND (d_date_sk#10 <= 2480034)) OR ((d_date_sk#10 >= 2480369) AND (d_date_sk#10 <= 2480399)))) OR ((((d_date_sk#10 >= 2480734) AND (d_date_sk#10 <= 2480764)) OR ((d_date_sk#10 >= 2481100) AND (d_date_sk#10 <= 2481130))) OR ((d_date_sk#10 >= 2481465) AND (d_date_sk#10 <= 2481495)))) OR (((((d_date_sk#10 >= 2481830) AND (d_date_sk#10 <= 2481860)) OR ((d_date_sk#10 >= 2482195) AND (d_date_sk#10 <= 2482225))) OR ((d_date_sk#10 >= 2482561) AND (d_date_sk#10 <= 2482591))) OR ((((d_date_sk#10 >= 2482926) AND (d_date_sk#10 <= 2482956)) OR ((d_date_sk#10 >= 2483291) AND (d_date_sk#10 <= 2483321))) OR ((d_date_sk#10 >= 2483656) AND (d_date_sk#10 <= 2483686))))) OR ((((((d_date_sk#10 >= 2484022) AND (d_date_sk#10 <= 2484052)) OR ((d_date_sk#10 >= 2484387) AND (d_date_sk#10 <= 2484417))) OR ((d_date_sk#10 >= 2484752) AND (d_date_sk#10 <= 2484782))) OR ((((d_date_sk#10 >= 2485117) AND (d_date_sk#10 <= 2485147)) OR ((d_date_sk#10 >= 2485483) AND (d_date_sk#10 <= 2485513))) OR ((d_date_sk#10 >= 2485848) AND (d_date_sk#10 <= 2485878)))) OR (((((d_date_sk#10 >= 2486213) AND (d_date_sk#10 <= 2486243)) OR ((d_date_sk#10 >= 2486578) AND (d_date_sk#10 <= 2486608))) OR ((d_date_sk#10 >= 2486944) AND (d_date_sk#10 <= 2486974))) OR ((((d_date_sk#10 >= 2487309) AND (d_date_sk#10 <= 2487339)) OR ((d_date_sk#10 >= 2487674) AND (d_date_sk#10 <= 2487704))) OR ((d_date_sk#10 >= 2488039) AND (d_date_sk#10 <= 2488069)))))))))) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#9, d_year#10, d_moy#17] +Condition : (((isnotnull(d_moy#17) AND (d_moy#17 = 12)) AND ((((((((((d_date_sk#9 >= 2415355) AND (d_date_sk#9 <= 2415385)) OR ((d_date_sk#9 >= 2415720) AND (d_date_sk#9 <= 2415750))) OR (((d_date_sk#9 >= 2416085) AND (d_date_sk#9 <= 2416115)) OR ((d_date_sk#9 >= 2416450) AND (d_date_sk#9 <= 2416480)))) OR ((((d_date_sk#9 >= 2416816) AND (d_date_sk#9 <= 2416846)) OR ((d_date_sk#9 >= 2417181) AND (d_date_sk#9 <= 2417211))) OR ((d_date_sk#9 >= 2417546) AND (d_date_sk#9 <= 2417576)))) OR (((((d_date_sk#9 >= 2417911) AND (d_date_sk#9 <= 2417941)) OR ((d_date_sk#9 >= 2418277) AND (d_date_sk#9 <= 2418307))) OR ((d_date_sk#9 >= 2418642) AND (d_date_sk#9 <= 2418672))) OR ((((d_date_sk#9 >= 2419007) AND (d_date_sk#9 <= 2419037)) OR ((d_date_sk#9 >= 2419372) AND (d_date_sk#9 <= 2419402))) OR ((d_date_sk#9 >= 2419738) AND (d_date_sk#9 <= 2419768))))) OR ((((((d_date_sk#9 >= 2420103) AND (d_date_sk#9 <= 2420133)) OR ((d_date_sk#9 >= 2420468) AND (d_date_sk#9 <= 2420498))) OR ((d_date_sk#9 >= 2420833) AND (d_date_sk#9 <= 2420863))) OR ((((d_date_sk#9 >= 2421199) AND (d_date_sk#9 <= 2421229)) OR ((d_date_sk#9 >= 2421564) AND (d_date_sk#9 <= 2421594))) OR ((d_date_sk#9 >= 2421929) AND (d_date_sk#9 <= 2421959)))) OR (((((d_date_sk#9 >= 2422294) AND (d_date_sk#9 <= 2422324)) OR ((d_date_sk#9 >= 2422660) AND (d_date_sk#9 <= 2422690))) OR ((d_date_sk#9 >= 2423025) AND (d_date_sk#9 <= 2423055))) OR ((((d_date_sk#9 >= 2423390) AND (d_date_sk#9 <= 2423420)) OR ((d_date_sk#9 >= 2423755) AND (d_date_sk#9 <= 2423785))) OR ((d_date_sk#9 >= 2424121) AND (d_date_sk#9 <= 2424151)))))) OR (((((((d_date_sk#9 >= 2424486) AND (d_date_sk#9 <= 2424516)) OR ((d_date_sk#9 >= 2424851) AND (d_date_sk#9 <= 2424881))) OR (((d_date_sk#9 >= 2425216) AND (d_date_sk#9 <= 2425246)) OR ((d_date_sk#9 >= 2425582) AND (d_date_sk#9 <= 2425612)))) OR ((((d_date_sk#9 >= 2425947) AND (d_date_sk#9 <= 2425977)) OR ((d_date_sk#9 >= 2426312) AND (d_date_sk#9 <= 2426342))) OR ((d_date_sk#9 >= 2426677) AND (d_date_sk#9 <= 2426707)))) OR (((((d_date_sk#9 >= 2427043) AND (d_date_sk#9 <= 2427073)) OR ((d_date_sk#9 >= 2427408) AND (d_date_sk#9 <= 2427438))) OR ((d_date_sk#9 >= 2427773) AND (d_date_sk#9 <= 2427803))) OR ((((d_date_sk#9 >= 2428138) AND (d_date_sk#9 <= 2428168)) OR ((d_date_sk#9 >= 2428504) AND (d_date_sk#9 <= 2428534))) OR ((d_date_sk#9 >= 2428869) AND (d_date_sk#9 <= 2428899))))) OR ((((((d_date_sk#9 >= 2429234) AND (d_date_sk#9 <= 2429264)) OR ((d_date_sk#9 >= 2429599) AND (d_date_sk#9 <= 2429629))) OR ((d_date_sk#9 >= 2429965) AND (d_date_sk#9 <= 2429995))) OR ((((d_date_sk#9 >= 2430330) AND (d_date_sk#9 <= 2430360)) OR ((d_date_sk#9 >= 2430695) AND (d_date_sk#9 <= 2430725))) OR ((d_date_sk#9 >= 2431060) AND (d_date_sk#9 <= 2431090)))) OR (((((d_date_sk#9 >= 2431426) AND (d_date_sk#9 <= 2431456)) OR ((d_date_sk#9 >= 2431791) AND (d_date_sk#9 <= 2431821))) OR ((d_date_sk#9 >= 2432156) AND (d_date_sk#9 <= 2432186))) OR ((((d_date_sk#9 >= 2432521) AND (d_date_sk#9 <= 2432551)) OR ((d_date_sk#9 >= 2432887) AND (d_date_sk#9 <= 2432917))) OR ((d_date_sk#9 >= 2433252) AND (d_date_sk#9 <= 2433282))))))) OR ((((((((d_date_sk#9 >= 2433617) AND (d_date_sk#9 <= 2433647)) OR ((d_date_sk#9 >= 2433982) AND (d_date_sk#9 <= 2434012))) OR (((d_date_sk#9 >= 2434348) AND (d_date_sk#9 <= 2434378)) OR ((d_date_sk#9 >= 2434713) AND (d_date_sk#9 <= 2434743)))) OR ((((d_date_sk#9 >= 2435078) AND (d_date_sk#9 <= 2435108)) OR ((d_date_sk#9 >= 2435443) AND (d_date_sk#9 <= 2435473))) OR ((d_date_sk#9 >= 2435809) AND (d_date_sk#9 <= 2435839)))) OR (((((d_date_sk#9 >= 2436174) AND (d_date_sk#9 <= 2436204)) OR ((d_date_sk#9 >= 2436539) AND (d_date_sk#9 <= 2436569))) OR ((d_date_sk#9 >= 2436904) AND (d_date_sk#9 <= 2436934))) OR ((((d_date_sk#9 >= 2437270) AND (d_date_sk#9 <= 2437300)) OR ((d_date_sk#9 >= 2437635) AND (d_date_sk#9 <= 2437665))) OR ((d_date_sk#9 >= 2438000) AND (d_date_sk#9 <= 2438030))))) OR ((((((d_date_sk#9 >= 2438365) AND (d_date_sk#9 <= 2438395)) OR ((d_date_sk#9 >= 2438731) AND (d_date_sk#9 <= 2438761))) OR ((d_date_sk#9 >= 2439096) AND (d_date_sk#9 <= 2439126))) OR ((((d_date_sk#9 >= 2439461) AND (d_date_sk#9 <= 2439491)) OR ((d_date_sk#9 >= 2439826) AND (d_date_sk#9 <= 2439856))) OR ((d_date_sk#9 >= 2440192) AND (d_date_sk#9 <= 2440222)))) OR (((((d_date_sk#9 >= 2440557) AND (d_date_sk#9 <= 2440587)) OR ((d_date_sk#9 >= 2440922) AND (d_date_sk#9 <= 2440952))) OR ((d_date_sk#9 >= 2441287) AND (d_date_sk#9 <= 2441317))) OR ((((d_date_sk#9 >= 2441653) AND (d_date_sk#9 <= 2441683)) OR ((d_date_sk#9 >= 2442018) AND (d_date_sk#9 <= 2442048))) OR ((d_date_sk#9 >= 2442383) AND (d_date_sk#9 <= 2442413)))))) OR (((((((d_date_sk#9 >= 2442748) AND (d_date_sk#9 <= 2442778)) OR ((d_date_sk#9 >= 2443114) AND (d_date_sk#9 <= 2443144))) OR (((d_date_sk#9 >= 2443479) AND (d_date_sk#9 <= 2443509)) OR ((d_date_sk#9 >= 2443844) AND (d_date_sk#9 <= 2443874)))) OR ((((d_date_sk#9 >= 2444209) AND (d_date_sk#9 <= 2444239)) OR ((d_date_sk#9 >= 2444575) AND (d_date_sk#9 <= 2444605))) OR ((d_date_sk#9 >= 2444940) AND (d_date_sk#9 <= 2444970)))) OR (((((d_date_sk#9 >= 2445305) AND (d_date_sk#9 <= 2445335)) OR ((d_date_sk#9 >= 2445670) AND (d_date_sk#9 <= 2445700))) OR ((d_date_sk#9 >= 2446036) AND (d_date_sk#9 <= 2446066))) OR ((((d_date_sk#9 >= 2446401) AND (d_date_sk#9 <= 2446431)) OR ((d_date_sk#9 >= 2446766) AND (d_date_sk#9 <= 2446796))) OR ((d_date_sk#9 >= 2447131) AND (d_date_sk#9 <= 2447161))))) OR ((((((d_date_sk#9 >= 2447497) AND (d_date_sk#9 <= 2447527)) OR ((d_date_sk#9 >= 2447862) AND (d_date_sk#9 <= 2447892))) OR ((d_date_sk#9 >= 2448227) AND (d_date_sk#9 <= 2448257))) OR ((((d_date_sk#9 >= 2448592) AND (d_date_sk#9 <= 2448622)) OR ((d_date_sk#9 >= 2448958) AND (d_date_sk#9 <= 2448988))) OR ((d_date_sk#9 >= 2449323) AND (d_date_sk#9 <= 2449353)))) OR (((((d_date_sk#9 >= 2449688) AND (d_date_sk#9 <= 2449718)) OR ((d_date_sk#9 >= 2450053) AND (d_date_sk#9 <= 2450083))) OR ((d_date_sk#9 >= 2450419) AND (d_date_sk#9 <= 2450449))) OR ((((d_date_sk#9 >= 2450784) AND (d_date_sk#9 <= 2450814)) OR ((d_date_sk#9 >= 2451149) AND (d_date_sk#9 <= 2451179))) OR ((d_date_sk#9 >= 2451514) AND (d_date_sk#9 <= 2451544)))))))) OR (((((((((d_date_sk#9 >= 2451880) AND (d_date_sk#9 <= 2451910)) OR ((d_date_sk#9 >= 2452245) AND (d_date_sk#9 <= 2452275))) OR (((d_date_sk#9 >= 2452610) AND (d_date_sk#9 <= 2452640)) OR ((d_date_sk#9 >= 2452975) AND (d_date_sk#9 <= 2453005)))) OR ((((d_date_sk#9 >= 2453341) AND (d_date_sk#9 <= 2453371)) OR ((d_date_sk#9 >= 2453706) AND (d_date_sk#9 <= 2453736))) OR ((d_date_sk#9 >= 2454071) AND (d_date_sk#9 <= 2454101)))) OR (((((d_date_sk#9 >= 2454436) AND (d_date_sk#9 <= 2454466)) OR ((d_date_sk#9 >= 2454802) AND (d_date_sk#9 <= 2454832))) OR ((d_date_sk#9 >= 2455167) AND (d_date_sk#9 <= 2455197))) OR ((((d_date_sk#9 >= 2455532) AND (d_date_sk#9 <= 2455562)) OR ((d_date_sk#9 >= 2455897) AND (d_date_sk#9 <= 2455927))) OR ((d_date_sk#9 >= 2456263) AND (d_date_sk#9 <= 2456293))))) OR ((((((d_date_sk#9 >= 2456628) AND (d_date_sk#9 <= 2456658)) OR ((d_date_sk#9 >= 2456993) AND (d_date_sk#9 <= 2457023))) OR ((d_date_sk#9 >= 2457358) AND (d_date_sk#9 <= 2457388))) OR ((((d_date_sk#9 >= 2457724) AND (d_date_sk#9 <= 2457754)) OR ((d_date_sk#9 >= 2458089) AND (d_date_sk#9 <= 2458119))) OR ((d_date_sk#9 >= 2458454) AND (d_date_sk#9 <= 2458484)))) OR (((((d_date_sk#9 >= 2458819) AND (d_date_sk#9 <= 2458849)) OR ((d_date_sk#9 >= 2459185) AND (d_date_sk#9 <= 2459215))) OR ((d_date_sk#9 >= 2459550) AND (d_date_sk#9 <= 2459580))) OR ((((d_date_sk#9 >= 2459915) AND (d_date_sk#9 <= 2459945)) OR ((d_date_sk#9 >= 2460280) AND (d_date_sk#9 <= 2460310))) OR ((d_date_sk#9 >= 2460646) AND (d_date_sk#9 <= 2460676)))))) OR (((((((d_date_sk#9 >= 2461011) AND (d_date_sk#9 <= 2461041)) OR ((d_date_sk#9 >= 2461376) AND (d_date_sk#9 <= 2461406))) OR (((d_date_sk#9 >= 2461741) AND (d_date_sk#9 <= 2461771)) OR ((d_date_sk#9 >= 2462107) AND (d_date_sk#9 <= 2462137)))) OR ((((d_date_sk#9 >= 2462472) AND (d_date_sk#9 <= 2462502)) OR ((d_date_sk#9 >= 2462837) AND (d_date_sk#9 <= 2462867))) OR ((d_date_sk#9 >= 2463202) AND (d_date_sk#9 <= 2463232)))) OR (((((d_date_sk#9 >= 2463568) AND (d_date_sk#9 <= 2463598)) OR ((d_date_sk#9 >= 2463933) AND (d_date_sk#9 <= 2463963))) OR ((d_date_sk#9 >= 2464298) AND (d_date_sk#9 <= 2464328))) OR ((((d_date_sk#9 >= 2464663) AND (d_date_sk#9 <= 2464693)) OR ((d_date_sk#9 >= 2465029) AND (d_date_sk#9 <= 2465059))) OR ((d_date_sk#9 >= 2465394) AND (d_date_sk#9 <= 2465424))))) OR ((((((d_date_sk#9 >= 2465759) AND (d_date_sk#9 <= 2465789)) OR ((d_date_sk#9 >= 2466124) AND (d_date_sk#9 <= 2466154))) OR ((d_date_sk#9 >= 2466490) AND (d_date_sk#9 <= 2466520))) OR ((((d_date_sk#9 >= 2466855) AND (d_date_sk#9 <= 2466885)) OR ((d_date_sk#9 >= 2467220) AND (d_date_sk#9 <= 2467250))) OR ((d_date_sk#9 >= 2467585) AND (d_date_sk#9 <= 2467615)))) OR (((((d_date_sk#9 >= 2467951) AND (d_date_sk#9 <= 2467981)) OR ((d_date_sk#9 >= 2468316) AND (d_date_sk#9 <= 2468346))) OR ((d_date_sk#9 >= 2468681) AND (d_date_sk#9 <= 2468711))) OR ((((d_date_sk#9 >= 2469046) AND (d_date_sk#9 <= 2469076)) OR ((d_date_sk#9 >= 2469412) AND (d_date_sk#9 <= 2469442))) OR ((d_date_sk#9 >= 2469777) AND (d_date_sk#9 <= 2469807))))))) OR ((((((((d_date_sk#9 >= 2470142) AND (d_date_sk#9 <= 2470172)) OR ((d_date_sk#9 >= 2470507) AND (d_date_sk#9 <= 2470537))) OR (((d_date_sk#9 >= 2470873) AND (d_date_sk#9 <= 2470903)) OR ((d_date_sk#9 >= 2471238) AND (d_date_sk#9 <= 2471268)))) OR ((((d_date_sk#9 >= 2471603) AND (d_date_sk#9 <= 2471633)) OR ((d_date_sk#9 >= 2471968) AND (d_date_sk#9 <= 2471998))) OR ((d_date_sk#9 >= 2472334) AND (d_date_sk#9 <= 2472364)))) OR (((((d_date_sk#9 >= 2472699) AND (d_date_sk#9 <= 2472729)) OR ((d_date_sk#9 >= 2473064) AND (d_date_sk#9 <= 2473094))) OR ((d_date_sk#9 >= 2473429) AND (d_date_sk#9 <= 2473459))) OR ((((d_date_sk#9 >= 2473795) AND (d_date_sk#9 <= 2473825)) OR ((d_date_sk#9 >= 2474160) AND (d_date_sk#9 <= 2474190))) OR ((d_date_sk#9 >= 2474525) AND (d_date_sk#9 <= 2474555))))) OR ((((((d_date_sk#9 >= 2474890) AND (d_date_sk#9 <= 2474920)) OR ((d_date_sk#9 >= 2475256) AND (d_date_sk#9 <= 2475286))) OR ((d_date_sk#9 >= 2475621) AND (d_date_sk#9 <= 2475651))) OR ((((d_date_sk#9 >= 2475986) AND (d_date_sk#9 <= 2476016)) OR ((d_date_sk#9 >= 2476351) AND (d_date_sk#9 <= 2476381))) OR ((d_date_sk#9 >= 2476717) AND (d_date_sk#9 <= 2476747)))) OR (((((d_date_sk#9 >= 2477082) AND (d_date_sk#9 <= 2477112)) OR ((d_date_sk#9 >= 2477447) AND (d_date_sk#9 <= 2477477))) OR ((d_date_sk#9 >= 2477812) AND (d_date_sk#9 <= 2477842))) OR ((((d_date_sk#9 >= 2478178) AND (d_date_sk#9 <= 2478208)) OR ((d_date_sk#9 >= 2478543) AND (d_date_sk#9 <= 2478573))) OR ((d_date_sk#9 >= 2478908) AND (d_date_sk#9 <= 2478938)))))) OR (((((((d_date_sk#9 >= 2479273) AND (d_date_sk#9 <= 2479303)) OR ((d_date_sk#9 >= 2479639) AND (d_date_sk#9 <= 2479669))) OR (((d_date_sk#9 >= 2480004) AND (d_date_sk#9 <= 2480034)) OR ((d_date_sk#9 >= 2480369) AND (d_date_sk#9 <= 2480399)))) OR ((((d_date_sk#9 >= 2480734) AND (d_date_sk#9 <= 2480764)) OR ((d_date_sk#9 >= 2481100) AND (d_date_sk#9 <= 2481130))) OR ((d_date_sk#9 >= 2481465) AND (d_date_sk#9 <= 2481495)))) OR (((((d_date_sk#9 >= 2481830) AND (d_date_sk#9 <= 2481860)) OR ((d_date_sk#9 >= 2482195) AND (d_date_sk#9 <= 2482225))) OR ((d_date_sk#9 >= 2482561) AND (d_date_sk#9 <= 2482591))) OR ((((d_date_sk#9 >= 2482926) AND (d_date_sk#9 <= 2482956)) OR ((d_date_sk#9 >= 2483291) AND (d_date_sk#9 <= 2483321))) OR ((d_date_sk#9 >= 2483656) AND (d_date_sk#9 <= 2483686))))) OR ((((((d_date_sk#9 >= 2484022) AND (d_date_sk#9 <= 2484052)) OR ((d_date_sk#9 >= 2484387) AND (d_date_sk#9 <= 2484417))) OR ((d_date_sk#9 >= 2484752) AND (d_date_sk#9 <= 2484782))) OR ((((d_date_sk#9 >= 2485117) AND (d_date_sk#9 <= 2485147)) OR ((d_date_sk#9 >= 2485483) AND (d_date_sk#9 <= 2485513))) OR ((d_date_sk#9 >= 2485848) AND (d_date_sk#9 <= 2485878)))) OR (((((d_date_sk#9 >= 2486213) AND (d_date_sk#9 <= 2486243)) OR ((d_date_sk#9 >= 2486578) AND (d_date_sk#9 <= 2486608))) OR ((d_date_sk#9 >= 2486944) AND (d_date_sk#9 <= 2486974))) OR ((((d_date_sk#9 >= 2487309) AND (d_date_sk#9 <= 2487339)) OR ((d_date_sk#9 >= 2487674) AND (d_date_sk#9 <= 2487704))) OR ((d_date_sk#9 >= 2488039) AND (d_date_sk#9 <= 2488069)))))))))) AND isnotnull(d_date_sk#9)) (21) Project [codegen id : 1] -Output [2]: [d_date_sk#10, d_year#11] -Input [3]: [d_date_sk#10, d_year#11, d_moy#19] +Output [2]: [d_date_sk#9, d_year#10] +Input [3]: [d_date_sk#9, d_year#10, d_moy#17] (22) BroadcastExchange -Input [2]: [d_date_sk#10, d_year#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20] +Input [2]: [d_date_sk#9, d_year#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3/explain.txt index a60caf19f23df..c6c1e51e9360e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3/explain.txt @@ -57,7 +57,7 @@ Condition : isnotnull(ss_item_sk#4) (8) BroadcastExchange Input [3]: [ss_item_sk#4, ss_net_profit#5, ss_sold_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] @@ -69,55 +69,55 @@ Output [3]: [d_year#2, ss_item_sk#4, ss_net_profit#5] Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#4, ss_net_profit#5, ss_sold_date_sk#6] (11) Scan parquet default.item -Output [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manufact_id#11] +Output [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manufact_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manufact_id), EqualTo(i_manufact_id,436), IsNotNull(i_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manufact_id#11] +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manufact_id#10] (13) Filter [codegen id : 2] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manufact_id#11] -Condition : ((isnotnull(i_manufact_id#11) AND (i_manufact_id#11 = 436)) AND isnotnull(i_item_sk#8)) +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manufact_id#10] +Condition : ((isnotnull(i_manufact_id#10) AND (i_manufact_id#10 = 436)) AND isnotnull(i_item_sk#7)) (14) Project [codegen id : 2] -Output [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manufact_id#11] +Output [3]: [i_item_sk#7, i_brand_id#8, i_brand#9] +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manufact_id#10] (15) BroadcastExchange -Input [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Input [3]: [i_item_sk#7, i_brand_id#8, i_brand#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#4] -Right keys [1]: [i_item_sk#8] +Right keys [1]: [i_item_sk#7] Join condition: None (17) Project [codegen id : 3] -Output [4]: [d_year#2, ss_net_profit#5, i_brand_id#9, i_brand#10] -Input [6]: [d_year#2, ss_item_sk#4, ss_net_profit#5, i_item_sk#8, i_brand_id#9, i_brand#10] +Output [4]: [d_year#2, ss_net_profit#5, i_brand_id#8, i_brand#9] +Input [6]: [d_year#2, ss_item_sk#4, ss_net_profit#5, i_item_sk#7, i_brand_id#8, i_brand#9] (18) HashAggregate [codegen id : 3] -Input [4]: [d_year#2, ss_net_profit#5, i_brand_id#9, i_brand#10] -Keys [3]: [d_year#2, i_brand#10, i_brand_id#9] +Input [4]: [d_year#2, ss_net_profit#5, i_brand_id#8, i_brand#9] +Keys [3]: [d_year#2, i_brand#9, i_brand_id#8] Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#5))] -Aggregate Attributes [1]: [sum#13] -Results [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14] +Aggregate Attributes [1]: [sum#11] +Results [4]: [d_year#2, i_brand#9, i_brand_id#8, sum#12] (19) Exchange -Input [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14] -Arguments: hashpartitioning(d_year#2, i_brand#10, i_brand_id#9, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [d_year#2, i_brand#9, i_brand_id#8, sum#12] +Arguments: hashpartitioning(d_year#2, i_brand#9, i_brand_id#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14] -Keys [3]: [d_year#2, i_brand#10, i_brand_id#9] +Input [4]: [d_year#2, i_brand#9, i_brand_id#8, sum#12] +Keys [3]: [d_year#2, i_brand#9, i_brand_id#8] Functions [1]: [sum(UnscaledValue(ss_net_profit#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#5))#16] -Results [4]: [d_year#2, i_brand_id#9 AS brand_id#17, i_brand#10 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_net_profit#5))#16,17,2) AS sum_agg#19] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#5))#13] +Results [4]: [d_year#2, i_brand_id#8 AS brand_id#14, i_brand#9 AS brand#15, MakeDecimal(sum(UnscaledValue(ss_net_profit#5))#13,17,2) AS sum_agg#16] (21) TakeOrderedAndProject -Input [4]: [d_year#2, brand_id#17, brand#18, sum_agg#19] -Arguments: 100, [d_year#2 ASC NULLS FIRST, sum_agg#19 DESC NULLS LAST, brand_id#17 ASC NULLS FIRST], [d_year#2, brand_id#17, brand#18, sum_agg#19] +Input [4]: [d_year#2, brand_id#14, brand#15, sum_agg#16] +Arguments: 100, [d_year#2 ASC NULLS FIRST, sum_agg#16 DESC NULLS LAST, brand_id#14 ASC NULLS FIRST], [d_year#2, brand_id#14, brand#15, sum_agg#16] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34.sf100/explain.txt index bdc8690e8d3ba..bdd5dda489c61 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34.sf100/explain.txt @@ -83,7 +83,7 @@ Input [2]: [s_store_sk#8, s_county#9] (11) BroadcastExchange Input [1]: [s_store_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#3] @@ -95,104 +95,104 @@ Output [3]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4] Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, s_store_sk#8] (14) Scan parquet default.household_demographics -Output [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_vehicle_count), IsNotNull(hd_dep_count), Or(EqualTo(hd_buy_potential,>10000 ),EqualTo(hd_buy_potential,Unknown )), GreaterThan(hd_vehicle_count,0), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (16) Filter [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] -Condition : (((((isnotnull(hd_vehicle_count#14) AND isnotnull(hd_dep_count#13)) AND ((hd_buy_potential#12 = >10000 ) OR (hd_buy_potential#12 = Unknown ))) AND (hd_vehicle_count#14 > 0)) AND ((cast(hd_dep_count#13 as double) / cast(hd_vehicle_count#14 as double)) > 1.2)) AND isnotnull(hd_demo_sk#11)) +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] +Condition : (((((isnotnull(hd_vehicle_count#13) AND isnotnull(hd_dep_count#12)) AND ((hd_buy_potential#11 = >10000 ) OR (hd_buy_potential#11 = Unknown ))) AND (hd_vehicle_count#13 > 0)) AND ((cast(hd_dep_count#12 as double) / cast(hd_vehicle_count#13 as double)) > 1.2)) AND isnotnull(hd_demo_sk#10)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#11] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [1]: [hd_demo_sk#10] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (18) BroadcastExchange -Input [1]: [hd_demo_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [hd_demo_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#11] +Right keys [1]: [hd_demo_sk#10] Join condition: None (20) Project [codegen id : 4] Output [2]: [ss_customer_sk#1, ss_ticket_number#4] -Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#11] +Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#10] (21) HashAggregate [codegen id : 4] Input [2]: [ss_customer_sk#1, ss_ticket_number#4] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#16] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Aggregate Attributes [1]: [count#14] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] (22) Exchange -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] -Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] +Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 5] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#19] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#19 AS cnt#20] +Aggregate Attributes [1]: [count(1)#16] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#16 AS cnt#17] (24) Filter [codegen id : 5] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] -Condition : ((cnt#20 >= 15) AND (cnt#20 <= 20)) +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] +Condition : ((cnt#17 >= 15) AND (cnt#17 <= 20)) (25) Exchange -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] -Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] +Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=4] (26) Sort [codegen id : 6] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] Arguments: [ss_customer_sk#1 ASC NULLS FIRST], false, 0 (27) Scan parquet default.customer -Output [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] +Output [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 7] -Input [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (29) Filter [codegen id : 7] -Input [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] -Condition : isnotnull(c_customer_sk#22) +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Condition : isnotnull(c_customer_sk#18) (30) Exchange -Input [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] -Arguments: hashpartitioning(c_customer_sk#22, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Arguments: hashpartitioning(c_customer_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=5] (31) Sort [codegen id : 8] -Input [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] -Arguments: [c_customer_sk#22 ASC NULLS FIRST], false, 0 +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Arguments: [c_customer_sk#18 ASC NULLS FIRST], false, 0 (32) SortMergeJoin [codegen id : 9] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#22] +Right keys [1]: [c_customer_sk#18] Join condition: None (33) Project [codegen id : 9] -Output [6]: [c_last_name#25, c_first_name#24, c_salutation#23, c_preferred_cust_flag#26, ss_ticket_number#4, cnt#20] -Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20, c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] +Output [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17, c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (34) Exchange -Input [6]: [c_last_name#25, c_first_name#24, c_salutation#23, c_preferred_cust_flag#26, ss_ticket_number#4, cnt#20] -Arguments: rangepartitioning(c_last_name#25 ASC NULLS FIRST, c_first_name#24 ASC NULLS FIRST, c_salutation#23 ASC NULLS FIRST, c_preferred_cust_flag#26 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: rangepartitioning(c_last_name#21 ASC NULLS FIRST, c_first_name#20 ASC NULLS FIRST, c_salutation#19 ASC NULLS FIRST, c_preferred_cust_flag#22 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [plan_id=6] (35) Sort [codegen id : 10] -Input [6]: [c_last_name#25, c_first_name#24, c_salutation#23, c_preferred_cust_flag#26, ss_ticket_number#4, cnt#20] -Arguments: [c_last_name#25 ASC NULLS FIRST, c_first_name#24 ASC NULLS FIRST, c_salutation#23 ASC NULLS FIRST, c_preferred_cust_flag#26 DESC NULLS LAST], true, 0 +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: [c_last_name#21 ASC NULLS FIRST, c_first_name#20 ASC NULLS FIRST, c_salutation#19 ASC NULLS FIRST, c_preferred_cust_flag#22 DESC NULLS LAST], true, 0 ===== Subqueries ===== @@ -205,25 +205,25 @@ BroadcastExchange (40) (36) Scan parquet default.date_dim -Output [3]: [d_date_sk#7, d_year#29, d_dom#30] +Output [3]: [d_date_sk#7, d_year#23, d_dom#24] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [Or(And(GreaterThanOrEqual(d_dom,1),LessThanOrEqual(d_dom,3)),And(GreaterThanOrEqual(d_dom,25),LessThanOrEqual(d_dom,28))), In(d_year, [1998,1999,2000]), GreaterThanOrEqual(d_date_sk,2450816), LessThanOrEqual(d_date_sk,2451910), IsNotNull(d_date_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#29, d_dom#30] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (38) Filter [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#29, d_dom#30] -Condition : (((((((d_dom#30 >= 1) AND (d_dom#30 <= 3)) OR ((d_dom#30 >= 25) AND (d_dom#30 <= 28))) AND d_year#29 IN (1998,1999,2000)) AND (d_date_sk#7 >= 2450816)) AND (d_date_sk#7 <= 2451910)) AND isnotnull(d_date_sk#7)) +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] +Condition : (((((((d_dom#24 >= 1) AND (d_dom#24 <= 3)) OR ((d_dom#24 >= 25) AND (d_dom#24 <= 28))) AND d_year#23 IN (1998,1999,2000)) AND (d_date_sk#7 >= 2450816)) AND (d_date_sk#7 <= 2451910)) AND isnotnull(d_date_sk#7)) (39) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [3]: [d_date_sk#7, d_year#29, d_dom#30] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (40) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#31] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34/explain.txt index b2b1d9c78229f..dddd98f235cd1 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34/explain.txt @@ -80,7 +80,7 @@ Input [2]: [s_store_sk#8, s_county#9] (11) BroadcastExchange Input [1]: [s_store_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#3] @@ -92,92 +92,92 @@ Output [3]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4] Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, s_store_sk#8] (14) Scan parquet default.household_demographics -Output [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_vehicle_count), IsNotNull(hd_dep_count), Or(EqualTo(hd_buy_potential,>10000 ),EqualTo(hd_buy_potential,Unknown )), GreaterThan(hd_vehicle_count,0), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (16) Filter [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] -Condition : (((((isnotnull(hd_vehicle_count#14) AND isnotnull(hd_dep_count#13)) AND ((hd_buy_potential#12 = >10000 ) OR (hd_buy_potential#12 = Unknown ))) AND (hd_vehicle_count#14 > 0)) AND ((cast(hd_dep_count#13 as double) / cast(hd_vehicle_count#14 as double)) > 1.2)) AND isnotnull(hd_demo_sk#11)) +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] +Condition : (((((isnotnull(hd_vehicle_count#13) AND isnotnull(hd_dep_count#12)) AND ((hd_buy_potential#11 = >10000 ) OR (hd_buy_potential#11 = Unknown ))) AND (hd_vehicle_count#13 > 0)) AND ((cast(hd_dep_count#12 as double) / cast(hd_vehicle_count#13 as double)) > 1.2)) AND isnotnull(hd_demo_sk#10)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#11] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [1]: [hd_demo_sk#10] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (18) BroadcastExchange -Input [1]: [hd_demo_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [hd_demo_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#11] +Right keys [1]: [hd_demo_sk#10] Join condition: None (20) Project [codegen id : 4] Output [2]: [ss_customer_sk#1, ss_ticket_number#4] -Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#11] +Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#10] (21) HashAggregate [codegen id : 4] Input [2]: [ss_customer_sk#1, ss_ticket_number#4] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#16] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Aggregate Attributes [1]: [count#14] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] (22) Exchange -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] -Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] +Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 6] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#19] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#19 AS cnt#20] +Aggregate Attributes [1]: [count(1)#16] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#16 AS cnt#17] (24) Filter [codegen id : 6] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] -Condition : ((cnt#20 >= 15) AND (cnt#20 <= 20)) +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] +Condition : ((cnt#17 >= 15) AND (cnt#17 <= 20)) (25) Scan parquet default.customer -Output [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] +Output [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 5] -Input [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (27) Filter [codegen id : 5] -Input [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] -Condition : isnotnull(c_customer_sk#21) +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Condition : isnotnull(c_customer_sk#18) (28) BroadcastExchange -Input [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#26] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (29) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#21] +Right keys [1]: [c_customer_sk#18] Join condition: None (30) Project [codegen id : 6] -Output [6]: [c_last_name#24, c_first_name#23, c_salutation#22, c_preferred_cust_flag#25, ss_ticket_number#4, cnt#20] -Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20, c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] +Output [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17, c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (31) Exchange -Input [6]: [c_last_name#24, c_first_name#23, c_salutation#22, c_preferred_cust_flag#25, ss_ticket_number#4, cnt#20] -Arguments: rangepartitioning(c_last_name#24 ASC NULLS FIRST, c_first_name#23 ASC NULLS FIRST, c_salutation#22 ASC NULLS FIRST, c_preferred_cust_flag#25 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: rangepartitioning(c_last_name#21 ASC NULLS FIRST, c_first_name#20 ASC NULLS FIRST, c_salutation#19 ASC NULLS FIRST, c_preferred_cust_flag#22 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [plan_id=5] (32) Sort [codegen id : 7] -Input [6]: [c_last_name#24, c_first_name#23, c_salutation#22, c_preferred_cust_flag#25, ss_ticket_number#4, cnt#20] -Arguments: [c_last_name#24 ASC NULLS FIRST, c_first_name#23 ASC NULLS FIRST, c_salutation#22 ASC NULLS FIRST, c_preferred_cust_flag#25 DESC NULLS LAST], true, 0 +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: [c_last_name#21 ASC NULLS FIRST, c_first_name#20 ASC NULLS FIRST, c_salutation#19 ASC NULLS FIRST, c_preferred_cust_flag#22 DESC NULLS LAST], true, 0 ===== Subqueries ===== @@ -190,25 +190,25 @@ BroadcastExchange (37) (33) Scan parquet default.date_dim -Output [3]: [d_date_sk#7, d_year#28, d_dom#29] +Output [3]: [d_date_sk#7, d_year#23, d_dom#24] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [Or(And(GreaterThanOrEqual(d_dom,1),LessThanOrEqual(d_dom,3)),And(GreaterThanOrEqual(d_dom,25),LessThanOrEqual(d_dom,28))), In(d_year, [1998,1999,2000]), GreaterThanOrEqual(d_date_sk,2450816), LessThanOrEqual(d_date_sk,2451910), IsNotNull(d_date_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (35) Filter [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] -Condition : (((((((d_dom#29 >= 1) AND (d_dom#29 <= 3)) OR ((d_dom#29 >= 25) AND (d_dom#29 <= 28))) AND d_year#28 IN (1998,1999,2000)) AND (d_date_sk#7 >= 2450816)) AND (d_date_sk#7 <= 2451910)) AND isnotnull(d_date_sk#7)) +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] +Condition : (((((((d_dom#24 >= 1) AND (d_dom#24 <= 3)) OR ((d_dom#24 >= 25) AND (d_dom#24 <= 28))) AND d_year#23 IN (1998,1999,2000)) AND (d_date_sk#7 >= 2450816)) AND (d_date_sk#7 <= 2451910)) AND isnotnull(d_date_sk#7)) (36) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (37) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#30] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42.sf100/explain.txt index 5e83e995a3766..a7ad5b0917504 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42.sf100/explain.txt @@ -42,88 +42,88 @@ Input [3]: [d_date_sk#1, d_year#2, d_moy#3] (5) BroadcastExchange Input [2]: [d_date_sk#1, d_year#2] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#4] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.store_sales -Output [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7] +Output [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#7), (ss_sold_date_sk#7 >= 2451149), (ss_sold_date_sk#7 <= 2451179), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ss_sold_date_sk#6), (ss_sold_date_sk#6 >= 2451149), (ss_sold_date_sk#6 <= 2451179), dynamicpruningexpression(ss_sold_date_sk#6 IN dynamicpruning#7)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (7) ColumnarToRow -Input [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7] +Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] (8) Filter -Input [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7] -Condition : isnotnull(ss_item_sk#5) +Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] +Condition : isnotnull(ss_item_sk#4) (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] -Right keys [1]: [ss_sold_date_sk#7] +Right keys [1]: [ss_sold_date_sk#6] Join condition: None (10) Project [codegen id : 3] -Output [3]: [d_year#2, ss_item_sk#5, ss_ext_sales_price#6] -Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7] +Output [3]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5] +Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] (11) Scan parquet default.item -Output [4]: [i_item_sk#9, i_category_id#10, i_category#11, i_manager_id#12] +Output [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,1), IsNotNull(i_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [i_item_sk#9, i_category_id#10, i_category#11, i_manager_id#12] +Input [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11] (13) Filter [codegen id : 2] -Input [4]: [i_item_sk#9, i_category_id#10, i_category#11, i_manager_id#12] -Condition : ((isnotnull(i_manager_id#12) AND (i_manager_id#12 = 1)) AND isnotnull(i_item_sk#9)) +Input [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11] +Condition : ((isnotnull(i_manager_id#11) AND (i_manager_id#11 = 1)) AND isnotnull(i_item_sk#8)) (14) Project [codegen id : 2] -Output [3]: [i_item_sk#9, i_category_id#10, i_category#11] -Input [4]: [i_item_sk#9, i_category_id#10, i_category#11, i_manager_id#12] +Output [3]: [i_item_sk#8, i_category_id#9, i_category#10] +Input [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11] (15) BroadcastExchange -Input [3]: [i_item_sk#9, i_category_id#10, i_category#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] +Input [3]: [i_item_sk#8, i_category_id#9, i_category#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [ss_item_sk#5] -Right keys [1]: [i_item_sk#9] +Left keys [1]: [ss_item_sk#4] +Right keys [1]: [i_item_sk#8] Join condition: None (17) Project [codegen id : 3] -Output [4]: [d_year#2, ss_ext_sales_price#6, i_category_id#10, i_category#11] -Input [6]: [d_year#2, ss_item_sk#5, ss_ext_sales_price#6, i_item_sk#9, i_category_id#10, i_category#11] +Output [4]: [d_year#2, ss_ext_sales_price#5, i_category_id#9, i_category#10] +Input [6]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#8, i_category_id#9, i_category#10] (18) HashAggregate [codegen id : 3] -Input [4]: [d_year#2, ss_ext_sales_price#6, i_category_id#10, i_category#11] -Keys [3]: [d_year#2, i_category_id#10, i_category#11] -Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#6))] -Aggregate Attributes [1]: [sum#14] -Results [4]: [d_year#2, i_category_id#10, i_category#11, sum#15] +Input [4]: [d_year#2, ss_ext_sales_price#5, i_category_id#9, i_category#10] +Keys [3]: [d_year#2, i_category_id#9, i_category#10] +Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))] +Aggregate Attributes [1]: [sum#12] +Results [4]: [d_year#2, i_category_id#9, i_category#10, sum#13] (19) Exchange -Input [4]: [d_year#2, i_category_id#10, i_category#11, sum#15] -Arguments: hashpartitioning(d_year#2, i_category_id#10, i_category#11, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [4]: [d_year#2, i_category_id#9, i_category#10, sum#13] +Arguments: hashpartitioning(d_year#2, i_category_id#9, i_category#10, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [4]: [d_year#2, i_category_id#10, i_category#11, sum#15] -Keys [3]: [d_year#2, i_category_id#10, i_category#11] -Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#6))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#6))#17] -Results [4]: [d_year#2, i_category_id#10, i_category#11, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#17,17,2) AS sum(ss_ext_sales_price)#18] +Input [4]: [d_year#2, i_category_id#9, i_category#10, sum#13] +Keys [3]: [d_year#2, i_category_id#9, i_category#10] +Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#14] +Results [4]: [d_year#2, i_category_id#9, i_category#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#14,17,2) AS sum(ss_ext_sales_price)#15] (21) TakeOrderedAndProject -Input [4]: [d_year#2, i_category_id#10, i_category#11, sum(ss_ext_sales_price)#18] -Arguments: 100, [sum(ss_ext_sales_price)#18 DESC NULLS LAST, d_year#2 ASC NULLS FIRST, i_category_id#10 ASC NULLS FIRST, i_category#11 ASC NULLS FIRST], [d_year#2, i_category_id#10, i_category#11, sum(ss_ext_sales_price)#18] +Input [4]: [d_year#2, i_category_id#9, i_category#10, sum(ss_ext_sales_price)#15] +Arguments: 100, [sum(ss_ext_sales_price)#15 DESC NULLS LAST, d_year#2 ASC NULLS FIRST, i_category_id#9 ASC NULLS FIRST, i_category#10 ASC NULLS FIRST], [d_year#2, i_category_id#9, i_category#10, sum(ss_ext_sales_price)#15] ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 +Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#6 IN dynamicpruning#7 ReusedExchange (22) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42/explain.txt index 255f39414f908..a77e0cac14259 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42/explain.txt @@ -57,7 +57,7 @@ Condition : isnotnull(ss_item_sk#4) (8) BroadcastExchange Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] @@ -69,55 +69,55 @@ Output [3]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5] Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] (11) Scan parquet default.item -Output [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11] +Output [4]: [i_item_sk#7, i_category_id#8, i_category#9, i_manager_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,1), IsNotNull(i_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11] +Input [4]: [i_item_sk#7, i_category_id#8, i_category#9, i_manager_id#10] (13) Filter [codegen id : 2] -Input [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11] -Condition : ((isnotnull(i_manager_id#11) AND (i_manager_id#11 = 1)) AND isnotnull(i_item_sk#8)) +Input [4]: [i_item_sk#7, i_category_id#8, i_category#9, i_manager_id#10] +Condition : ((isnotnull(i_manager_id#10) AND (i_manager_id#10 = 1)) AND isnotnull(i_item_sk#7)) (14) Project [codegen id : 2] -Output [3]: [i_item_sk#8, i_category_id#9, i_category#10] -Input [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11] +Output [3]: [i_item_sk#7, i_category_id#8, i_category#9] +Input [4]: [i_item_sk#7, i_category_id#8, i_category#9, i_manager_id#10] (15) BroadcastExchange -Input [3]: [i_item_sk#8, i_category_id#9, i_category#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Input [3]: [i_item_sk#7, i_category_id#8, i_category#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#4] -Right keys [1]: [i_item_sk#8] +Right keys [1]: [i_item_sk#7] Join condition: None (17) Project [codegen id : 3] -Output [4]: [d_year#2, ss_ext_sales_price#5, i_category_id#9, i_category#10] -Input [6]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#8, i_category_id#9, i_category#10] +Output [4]: [d_year#2, ss_ext_sales_price#5, i_category_id#8, i_category#9] +Input [6]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#7, i_category_id#8, i_category#9] (18) HashAggregate [codegen id : 3] -Input [4]: [d_year#2, ss_ext_sales_price#5, i_category_id#9, i_category#10] -Keys [3]: [d_year#2, i_category_id#9, i_category#10] +Input [4]: [d_year#2, ss_ext_sales_price#5, i_category_id#8, i_category#9] +Keys [3]: [d_year#2, i_category_id#8, i_category#9] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum#13] -Results [4]: [d_year#2, i_category_id#9, i_category#10, sum#14] +Aggregate Attributes [1]: [sum#11] +Results [4]: [d_year#2, i_category_id#8, i_category#9, sum#12] (19) Exchange -Input [4]: [d_year#2, i_category_id#9, i_category#10, sum#14] -Arguments: hashpartitioning(d_year#2, i_category_id#9, i_category#10, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [d_year#2, i_category_id#8, i_category#9, sum#12] +Arguments: hashpartitioning(d_year#2, i_category_id#8, i_category#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [4]: [d_year#2, i_category_id#9, i_category#10, sum#14] -Keys [3]: [d_year#2, i_category_id#9, i_category#10] +Input [4]: [d_year#2, i_category_id#8, i_category#9, sum#12] +Keys [3]: [d_year#2, i_category_id#8, i_category#9] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#16] -Results [4]: [d_year#2, i_category_id#9, i_category#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#16,17,2) AS sum(ss_ext_sales_price)#17] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#13] +Results [4]: [d_year#2, i_category_id#8, i_category#9, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#13,17,2) AS sum(ss_ext_sales_price)#14] (21) TakeOrderedAndProject -Input [4]: [d_year#2, i_category_id#9, i_category#10, sum(ss_ext_sales_price)#17] -Arguments: 100, [sum(ss_ext_sales_price)#17 DESC NULLS LAST, d_year#2 ASC NULLS FIRST, i_category_id#9 ASC NULLS FIRST, i_category#10 ASC NULLS FIRST], [d_year#2, i_category_id#9, i_category#10, sum(ss_ext_sales_price)#17] +Input [4]: [d_year#2, i_category_id#8, i_category#9, sum(ss_ext_sales_price)#14] +Arguments: 100, [sum(ss_ext_sales_price)#14 DESC NULLS LAST, d_year#2 ASC NULLS FIRST, i_category_id#8 ASC NULLS FIRST, i_category#9 ASC NULLS FIRST], [d_year#2, i_category_id#8, i_category#9, sum(ss_ext_sales_price)#14] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43.sf100/explain.txt index 72454cf27c3ee..bd95073599fb2 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43.sf100/explain.txt @@ -42,88 +42,88 @@ Input [3]: [d_date_sk#1, d_year#2, d_day_name#3] (5) BroadcastExchange Input [2]: [d_date_sk#1, d_day_name#3] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#4] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.store_sales -Output [3]: [ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7] +Output [3]: [ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#7), (ss_sold_date_sk#7 >= 2450816), (ss_sold_date_sk#7 <= 2451179), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ss_sold_date_sk#6), (ss_sold_date_sk#6 >= 2450816), (ss_sold_date_sk#6 <= 2451179), dynamicpruningexpression(ss_sold_date_sk#6 IN dynamicpruning#7)] PushedFilters: [IsNotNull(ss_store_sk)] ReadSchema: struct (7) ColumnarToRow -Input [3]: [ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7] +Input [3]: [ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6] (8) Filter -Input [3]: [ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7] -Condition : isnotnull(ss_store_sk#5) +Input [3]: [ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6] +Condition : isnotnull(ss_store_sk#4) (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] -Right keys [1]: [ss_sold_date_sk#7] +Right keys [1]: [ss_sold_date_sk#6] Join condition: None (10) Project [codegen id : 3] -Output [3]: [d_day_name#3, ss_store_sk#5, ss_sales_price#6] -Input [5]: [d_date_sk#1, d_day_name#3, ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7] +Output [3]: [d_day_name#3, ss_store_sk#4, ss_sales_price#5] +Input [5]: [d_date_sk#1, d_day_name#3, ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6] (11) Scan parquet default.store -Output [4]: [s_store_sk#9, s_store_id#10, s_store_name#11, s_gmt_offset#12] +Output [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_gmt_offset), EqualTo(s_gmt_offset,-5.00), IsNotNull(s_store_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [s_store_sk#9, s_store_id#10, s_store_name#11, s_gmt_offset#12] +Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] (13) Filter [codegen id : 2] -Input [4]: [s_store_sk#9, s_store_id#10, s_store_name#11, s_gmt_offset#12] -Condition : ((isnotnull(s_gmt_offset#12) AND (s_gmt_offset#12 = -5.00)) AND isnotnull(s_store_sk#9)) +Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] +Condition : ((isnotnull(s_gmt_offset#11) AND (s_gmt_offset#11 = -5.00)) AND isnotnull(s_store_sk#8)) (14) Project [codegen id : 2] -Output [3]: [s_store_sk#9, s_store_id#10, s_store_name#11] -Input [4]: [s_store_sk#9, s_store_id#10, s_store_name#11, s_gmt_offset#12] +Output [3]: [s_store_sk#8, s_store_id#9, s_store_name#10] +Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] (15) BroadcastExchange -Input [3]: [s_store_sk#9, s_store_id#10, s_store_name#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] +Input [3]: [s_store_sk#8, s_store_id#9, s_store_name#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [ss_store_sk#5] -Right keys [1]: [s_store_sk#9] +Left keys [1]: [ss_store_sk#4] +Right keys [1]: [s_store_sk#8] Join condition: None (17) Project [codegen id : 3] -Output [4]: [d_day_name#3, ss_sales_price#6, s_store_id#10, s_store_name#11] -Input [6]: [d_day_name#3, ss_store_sk#5, ss_sales_price#6, s_store_sk#9, s_store_id#10, s_store_name#11] +Output [4]: [d_day_name#3, ss_sales_price#5, s_store_id#9, s_store_name#10] +Input [6]: [d_day_name#3, ss_store_sk#4, ss_sales_price#5, s_store_sk#8, s_store_id#9, s_store_name#10] (18) HashAggregate [codegen id : 3] -Input [4]: [d_day_name#3, ss_sales_price#6, s_store_id#10, s_store_name#11] -Keys [2]: [s_store_name#11, s_store_id#10] -Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#6 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#6 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#6 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#6 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#6 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#6 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#6 END))] -Aggregate Attributes [7]: [sum#14, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20] -Results [9]: [s_store_name#11, s_store_id#10, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27] +Input [4]: [d_day_name#3, ss_sales_price#5, s_store_id#9, s_store_name#10] +Keys [2]: [s_store_name#10, s_store_id#9] +Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))] +Aggregate Attributes [7]: [sum#12, sum#13, sum#14, sum#15, sum#16, sum#17, sum#18] +Results [9]: [s_store_name#10, s_store_id#9, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25] (19) Exchange -Input [9]: [s_store_name#11, s_store_id#10, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27] -Arguments: hashpartitioning(s_store_name#11, s_store_id#10, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [9]: [s_store_name#10, s_store_id#9, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25] +Arguments: hashpartitioning(s_store_name#10, s_store_id#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [9]: [s_store_name#11, s_store_id#10, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27] -Keys [2]: [s_store_name#11, s_store_id#10] -Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#6 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#6 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#6 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#6 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#6 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#6 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#6 END))] -Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#6 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#6 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#6 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#6 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#6 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#6 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#6 END))#35] -Results [9]: [s_store_name#11, s_store_id#10, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#6 END))#29,17,2) AS sun_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#6 END))#30,17,2) AS mon_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#6 END))#31,17,2) AS tue_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#6 END))#32,17,2) AS wed_sales#39, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#6 END))#33,17,2) AS thu_sales#40, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#6 END))#34,17,2) AS fri_sales#41, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#6 END))#35,17,2) AS sat_sales#42] +Input [9]: [s_store_name#10, s_store_id#9, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25] +Keys [2]: [s_store_name#10, s_store_id#9] +Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))] +Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))#32] +Results [9]: [s_store_name#10, s_store_id#9, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END))#26,17,2) AS sun_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END))#27,17,2) AS mon_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END))#28,17,2) AS tue_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END))#29,17,2) AS wed_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END))#30,17,2) AS thu_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END))#31,17,2) AS fri_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))#32,17,2) AS sat_sales#39] (21) TakeOrderedAndProject -Input [9]: [s_store_name#11, s_store_id#10, sun_sales#36, mon_sales#37, tue_sales#38, wed_sales#39, thu_sales#40, fri_sales#41, sat_sales#42] -Arguments: 100, [s_store_name#11 ASC NULLS FIRST, s_store_id#10 ASC NULLS FIRST, sun_sales#36 ASC NULLS FIRST, mon_sales#37 ASC NULLS FIRST, tue_sales#38 ASC NULLS FIRST, wed_sales#39 ASC NULLS FIRST, thu_sales#40 ASC NULLS FIRST, fri_sales#41 ASC NULLS FIRST, sat_sales#42 ASC NULLS FIRST], [s_store_name#11, s_store_id#10, sun_sales#36, mon_sales#37, tue_sales#38, wed_sales#39, thu_sales#40, fri_sales#41, sat_sales#42] +Input [9]: [s_store_name#10, s_store_id#9, sun_sales#33, mon_sales#34, tue_sales#35, wed_sales#36, thu_sales#37, fri_sales#38, sat_sales#39] +Arguments: 100, [s_store_name#10 ASC NULLS FIRST, s_store_id#9 ASC NULLS FIRST, sun_sales#33 ASC NULLS FIRST, mon_sales#34 ASC NULLS FIRST, tue_sales#35 ASC NULLS FIRST, wed_sales#36 ASC NULLS FIRST, thu_sales#37 ASC NULLS FIRST, fri_sales#38 ASC NULLS FIRST, sat_sales#39 ASC NULLS FIRST], [s_store_name#10, s_store_id#9, sun_sales#33, mon_sales#34, tue_sales#35, wed_sales#36, thu_sales#37, fri_sales#38, sat_sales#39] ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 +Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#6 IN dynamicpruning#7 ReusedExchange (22) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43/explain.txt index 74911c78e91fe..18475905e6d84 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43/explain.txt @@ -57,7 +57,7 @@ Condition : isnotnull(ss_store_sk#4) (8) BroadcastExchange Input [3]: [ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] @@ -69,55 +69,55 @@ Output [3]: [d_day_name#3, ss_store_sk#4, ss_sales_price#5] Input [5]: [d_date_sk#1, d_day_name#3, ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6] (11) Scan parquet default.store -Output [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] +Output [4]: [s_store_sk#7, s_store_id#8, s_store_name#9, s_gmt_offset#10] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_gmt_offset), EqualTo(s_gmt_offset,-5.00), IsNotNull(s_store_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] +Input [4]: [s_store_sk#7, s_store_id#8, s_store_name#9, s_gmt_offset#10] (13) Filter [codegen id : 2] -Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] -Condition : ((isnotnull(s_gmt_offset#11) AND (s_gmt_offset#11 = -5.00)) AND isnotnull(s_store_sk#8)) +Input [4]: [s_store_sk#7, s_store_id#8, s_store_name#9, s_gmt_offset#10] +Condition : ((isnotnull(s_gmt_offset#10) AND (s_gmt_offset#10 = -5.00)) AND isnotnull(s_store_sk#7)) (14) Project [codegen id : 2] -Output [3]: [s_store_sk#8, s_store_id#9, s_store_name#10] -Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] +Output [3]: [s_store_sk#7, s_store_id#8, s_store_name#9] +Input [4]: [s_store_sk#7, s_store_id#8, s_store_name#9, s_gmt_offset#10] (15) BroadcastExchange -Input [3]: [s_store_sk#8, s_store_id#9, s_store_name#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Input [3]: [s_store_sk#7, s_store_id#8, s_store_name#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_store_sk#4] -Right keys [1]: [s_store_sk#8] +Right keys [1]: [s_store_sk#7] Join condition: None (17) Project [codegen id : 3] -Output [4]: [d_day_name#3, ss_sales_price#5, s_store_id#9, s_store_name#10] -Input [6]: [d_day_name#3, ss_store_sk#4, ss_sales_price#5, s_store_sk#8, s_store_id#9, s_store_name#10] +Output [4]: [d_day_name#3, ss_sales_price#5, s_store_id#8, s_store_name#9] +Input [6]: [d_day_name#3, ss_store_sk#4, ss_sales_price#5, s_store_sk#7, s_store_id#8, s_store_name#9] (18) HashAggregate [codegen id : 3] -Input [4]: [d_day_name#3, ss_sales_price#5, s_store_id#9, s_store_name#10] -Keys [2]: [s_store_name#10, s_store_id#9] +Input [4]: [d_day_name#3, ss_sales_price#5, s_store_id#8, s_store_name#9] +Keys [2]: [s_store_name#9, s_store_id#8] Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))] -Aggregate Attributes [7]: [sum#13, sum#14, sum#15, sum#16, sum#17, sum#18, sum#19] -Results [9]: [s_store_name#10, s_store_id#9, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26] +Aggregate Attributes [7]: [sum#11, sum#12, sum#13, sum#14, sum#15, sum#16, sum#17] +Results [9]: [s_store_name#9, s_store_id#8, sum#18, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24] (19) Exchange -Input [9]: [s_store_name#10, s_store_id#9, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26] -Arguments: hashpartitioning(s_store_name#10, s_store_id#9, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [9]: [s_store_name#9, s_store_id#8, sum#18, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24] +Arguments: hashpartitioning(s_store_name#9, s_store_id#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [9]: [s_store_name#10, s_store_id#9, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26] -Keys [2]: [s_store_name#10, s_store_id#9] +Input [9]: [s_store_name#9, s_store_id#8, sum#18, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24] +Keys [2]: [s_store_name#9, s_store_id#8] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))] -Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))#34] -Results [9]: [s_store_name#10, s_store_id#9, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END))#28,17,2) AS sun_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END))#29,17,2) AS mon_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END))#30,17,2) AS tue_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END))#31,17,2) AS wed_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END))#32,17,2) AS thu_sales#39, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END))#33,17,2) AS fri_sales#40, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))#34,17,2) AS sat_sales#41] +Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))#31] +Results [9]: [s_store_name#9, s_store_id#8, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END))#25,17,2) AS sun_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END))#26,17,2) AS mon_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END))#27,17,2) AS tue_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END))#28,17,2) AS wed_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END))#29,17,2) AS thu_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END))#30,17,2) AS fri_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))#31,17,2) AS sat_sales#38] (21) TakeOrderedAndProject -Input [9]: [s_store_name#10, s_store_id#9, sun_sales#35, mon_sales#36, tue_sales#37, wed_sales#38, thu_sales#39, fri_sales#40, sat_sales#41] -Arguments: 100, [s_store_name#10 ASC NULLS FIRST, s_store_id#9 ASC NULLS FIRST, sun_sales#35 ASC NULLS FIRST, mon_sales#36 ASC NULLS FIRST, tue_sales#37 ASC NULLS FIRST, wed_sales#38 ASC NULLS FIRST, thu_sales#39 ASC NULLS FIRST, fri_sales#40 ASC NULLS FIRST, sat_sales#41 ASC NULLS FIRST], [s_store_name#10, s_store_id#9, sun_sales#35, mon_sales#36, tue_sales#37, wed_sales#38, thu_sales#39, fri_sales#40, sat_sales#41] +Input [9]: [s_store_name#9, s_store_id#8, sun_sales#32, mon_sales#33, tue_sales#34, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38] +Arguments: 100, [s_store_name#9 ASC NULLS FIRST, s_store_id#8 ASC NULLS FIRST, sun_sales#32 ASC NULLS FIRST, mon_sales#33 ASC NULLS FIRST, tue_sales#34 ASC NULLS FIRST, wed_sales#35 ASC NULLS FIRST, thu_sales#36 ASC NULLS FIRST, fri_sales#37 ASC NULLS FIRST, sat_sales#38 ASC NULLS FIRST], [s_store_name#9, s_store_id#8, sun_sales#32, mon_sales#33, tue_sales#34, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46.sf100/explain.txt index 4ea916a38b26b..48a3708fa4de4 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46.sf100/explain.txt @@ -95,7 +95,7 @@ Input [2]: [s_store_sk#11, s_city#12] (11) BroadcastExchange Input [1]: [s_store_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#4] @@ -107,155 +107,155 @@ Output [6]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_store_sk#11] (14) Scan parquet default.household_demographics -Output [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] +Output [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [Or(EqualTo(hd_dep_count,5),EqualTo(hd_vehicle_count,3)), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] +Input [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15] (16) Filter [codegen id : 3] -Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] -Condition : (((hd_dep_count#15 = 5) OR (hd_vehicle_count#16 = 3)) AND isnotnull(hd_demo_sk#14)) +Input [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15] +Condition : (((hd_dep_count#14 = 5) OR (hd_vehicle_count#15 = 3)) AND isnotnull(hd_demo_sk#13)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#14] -Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] +Output [1]: [hd_demo_sk#13] +Input [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15] (18) BroadcastExchange -Input [1]: [hd_demo_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Input [1]: [hd_demo_sk#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#14] +Right keys [1]: [hd_demo_sk#13] Join condition: None (20) Project [codegen id : 4] Output [5]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7] -Input [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, hd_demo_sk#14] +Input [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, hd_demo_sk#13] (21) Exchange Input [5]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7] -Arguments: hashpartitioning(ss_addr_sk#3, 5), ENSURE_REQUIREMENTS, [id=#18] +Arguments: hashpartitioning(ss_addr_sk#3, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) Sort [codegen id : 5] Input [5]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7] Arguments: [ss_addr_sk#3 ASC NULLS FIRST], false, 0 (23) Scan parquet default.customer_address -Output [2]: [ca_address_sk#19, ca_city#20] +Output [2]: [ca_address_sk#16, ca_city#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_city)] ReadSchema: struct (24) ColumnarToRow [codegen id : 6] -Input [2]: [ca_address_sk#19, ca_city#20] +Input [2]: [ca_address_sk#16, ca_city#17] (25) Filter [codegen id : 6] -Input [2]: [ca_address_sk#19, ca_city#20] -Condition : (isnotnull(ca_address_sk#19) AND isnotnull(ca_city#20)) +Input [2]: [ca_address_sk#16, ca_city#17] +Condition : (isnotnull(ca_address_sk#16) AND isnotnull(ca_city#17)) (26) Exchange -Input [2]: [ca_address_sk#19, ca_city#20] -Arguments: hashpartitioning(ca_address_sk#19, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [2]: [ca_address_sk#16, ca_city#17] +Arguments: hashpartitioning(ca_address_sk#16, 5), ENSURE_REQUIREMENTS, [plan_id=4] (27) Sort [codegen id : 7] -Input [2]: [ca_address_sk#19, ca_city#20] -Arguments: [ca_address_sk#19 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#16, ca_city#17] +Arguments: [ca_address_sk#16 ASC NULLS FIRST], false, 0 (28) SortMergeJoin [codegen id : 8] Left keys [1]: [ss_addr_sk#3] -Right keys [1]: [ca_address_sk#19] +Right keys [1]: [ca_address_sk#16] Join condition: None (29) Project [codegen id : 8] -Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#20] -Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_address_sk#19, ca_city#20] +Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#17] +Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_address_sk#16, ca_city#17] (30) HashAggregate [codegen id : 8] -Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#20] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20] +Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#17] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17] Functions [2]: [partial_sum(UnscaledValue(ss_coupon_amt#6)), partial_sum(UnscaledValue(ss_net_profit#7))] -Aggregate Attributes [2]: [sum#22, sum#23] -Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20, sum#24, sum#25] +Aggregate Attributes [2]: [sum#18, sum#19] +Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17, sum#20, sum#21] (31) HashAggregate [codegen id : 8] -Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20, sum#24, sum#25] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20] +Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17, sum#20, sum#21] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17] Functions [2]: [sum(UnscaledValue(ss_coupon_amt#6)), sum(UnscaledValue(ss_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#26, sum(UnscaledValue(ss_net_profit#7))#27] -Results [5]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#20 AS bought_city#28, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#26,17,2) AS amt#29, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#27,17,2) AS profit#30] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#22, sum(UnscaledValue(ss_net_profit#7))#23] +Results [5]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#17 AS bought_city#24, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#22,17,2) AS amt#25, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#23,17,2) AS profit#26] (32) Exchange -Input [5]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#28, amt#29, profit#30] -Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [5]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#24, amt#25, profit#26] +Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=5] (33) Sort [codegen id : 9] -Input [5]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#28, amt#29, profit#30] +Input [5]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#24, amt#25, profit#26] Arguments: [ss_customer_sk#1 ASC NULLS FIRST], false, 0 (34) Scan parquet default.customer -Output [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] +Output [4]: [c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 10] -Input [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] +Input [4]: [c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] (36) Filter [codegen id : 10] -Input [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] -Condition : (isnotnull(c_customer_sk#32) AND isnotnull(c_current_addr_sk#33)) +Input [4]: [c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] +Condition : (isnotnull(c_customer_sk#27) AND isnotnull(c_current_addr_sk#28)) (37) Exchange -Input [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] -Arguments: hashpartitioning(c_customer_sk#32, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [4]: [c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] +Arguments: hashpartitioning(c_customer_sk#27, 5), ENSURE_REQUIREMENTS, [plan_id=6] (38) Sort [codegen id : 11] -Input [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] -Arguments: [c_customer_sk#32 ASC NULLS FIRST], false, 0 +Input [4]: [c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] +Arguments: [c_customer_sk#27 ASC NULLS FIRST], false, 0 (39) SortMergeJoin [codegen id : 12] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#32] +Right keys [1]: [c_customer_sk#27] Join condition: None (40) Project [codegen id : 12] -Output [7]: [ss_ticket_number#5, bought_city#28, amt#29, profit#30, c_current_addr_sk#33, c_first_name#34, c_last_name#35] -Input [9]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#28, amt#29, profit#30, c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] +Output [7]: [ss_ticket_number#5, bought_city#24, amt#25, profit#26, c_current_addr_sk#28, c_first_name#29, c_last_name#30] +Input [9]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#24, amt#25, profit#26, c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] (41) Exchange -Input [7]: [ss_ticket_number#5, bought_city#28, amt#29, profit#30, c_current_addr_sk#33, c_first_name#34, c_last_name#35] -Arguments: hashpartitioning(c_current_addr_sk#33, 5), ENSURE_REQUIREMENTS, [id=#37] +Input [7]: [ss_ticket_number#5, bought_city#24, amt#25, profit#26, c_current_addr_sk#28, c_first_name#29, c_last_name#30] +Arguments: hashpartitioning(c_current_addr_sk#28, 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) Sort [codegen id : 13] -Input [7]: [ss_ticket_number#5, bought_city#28, amt#29, profit#30, c_current_addr_sk#33, c_first_name#34, c_last_name#35] -Arguments: [c_current_addr_sk#33 ASC NULLS FIRST], false, 0 +Input [7]: [ss_ticket_number#5, bought_city#24, amt#25, profit#26, c_current_addr_sk#28, c_first_name#29, c_last_name#30] +Arguments: [c_current_addr_sk#28 ASC NULLS FIRST], false, 0 (43) ReusedExchange [Reuses operator id: 26] -Output [2]: [ca_address_sk#38, ca_city#39] +Output [2]: [ca_address_sk#31, ca_city#32] (44) Sort [codegen id : 15] -Input [2]: [ca_address_sk#38, ca_city#39] -Arguments: [ca_address_sk#38 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#31, ca_city#32] +Arguments: [ca_address_sk#31 ASC NULLS FIRST], false, 0 (45) SortMergeJoin [codegen id : 16] -Left keys [1]: [c_current_addr_sk#33] -Right keys [1]: [ca_address_sk#38] -Join condition: NOT (ca_city#39 = bought_city#28) +Left keys [1]: [c_current_addr_sk#28] +Right keys [1]: [ca_address_sk#31] +Join condition: NOT (ca_city#32 = bought_city#24) (46) Project [codegen id : 16] -Output [7]: [c_last_name#35, c_first_name#34, ca_city#39, bought_city#28, ss_ticket_number#5, amt#29, profit#30] -Input [9]: [ss_ticket_number#5, bought_city#28, amt#29, profit#30, c_current_addr_sk#33, c_first_name#34, c_last_name#35, ca_address_sk#38, ca_city#39] +Output [7]: [c_last_name#30, c_first_name#29, ca_city#32, bought_city#24, ss_ticket_number#5, amt#25, profit#26] +Input [9]: [ss_ticket_number#5, bought_city#24, amt#25, profit#26, c_current_addr_sk#28, c_first_name#29, c_last_name#30, ca_address_sk#31, ca_city#32] (47) TakeOrderedAndProject -Input [7]: [c_last_name#35, c_first_name#34, ca_city#39, bought_city#28, ss_ticket_number#5, amt#29, profit#30] -Arguments: 100, [c_last_name#35 ASC NULLS FIRST, c_first_name#34 ASC NULLS FIRST, ca_city#39 ASC NULLS FIRST, bought_city#28 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#35, c_first_name#34, ca_city#39, bought_city#28, ss_ticket_number#5, amt#29, profit#30] +Input [7]: [c_last_name#30, c_first_name#29, ca_city#32, bought_city#24, ss_ticket_number#5, amt#25, profit#26] +Arguments: 100, [c_last_name#30 ASC NULLS FIRST, c_first_name#29 ASC NULLS FIRST, ca_city#32 ASC NULLS FIRST, bought_city#24 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#30, c_first_name#29, ca_city#32, bought_city#24, ss_ticket_number#5, amt#25, profit#26] ===== Subqueries ===== @@ -268,25 +268,25 @@ BroadcastExchange (52) (48) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#40, d_dow#41] +Output [3]: [d_date_sk#10, d_year#33, d_dow#34] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_dow, [0,6]), In(d_year, [1999,2000,2001]), In(d_date_sk, [2451181,2451182,2451188,2451189,2451195,2451196,2451202,2451203,2451209,2451210,2451216,2451217,2451223,2451224,2451230,2451231,2451237,2451238,2451244,2451245,2451251,2451252,2451258,2451259,2451265,2451266,2451272,2451273,2451279,2451280,2451286,2451287,2451293,2451294,2451300,2451301,2451307,2451308,2451314,2451315,2451321,2451322,2451328,2451329,2451335,2451336,2451342,2451343,2451349,2451350,2451356,2451357,2451363,2451364,2451370,2451371,2451377,2451378,2451384,2451385,2451391,2451392,2451398,2451399,2451405,2451406,2451412,2451413,2451419,2451420,2451426,2451427,2451433,2451434,2451440,2451441,2451447,2451448,2451454,2451455,2451461,2451462,2451468,2451469,2451475,2451476,2451482,2451483,2451489,2451490,2451496,2451497,2451503,2451504,2451510,2451511,2451517,2451518,2451524,2451525,2451531,2451532,2451538,2451539,2451545,2451546,2451552,2451553,2451559,2451560,2451566,2451567,2451573,2451574,2451580,2451581,2451587,2451588,2451594,2451595,2451601,2451602,2451608,2451609,2451615,2451616,2451622,2451623,2451629,2451630,2451636,2451637,2451643,2451644,2451650,2451651,2451657,2451658,2451664,2451665,2451671,2451672,2451678,2451679,2451685,2451686,2451692,2451693,2451699,2451700,2451706,2451707,2451713,2451714,2451720,2451721,2451727,2451728,2451734,2451735,2451741,2451742,2451748,2451749,2451755,2451756,2451762,2451763,2451769,2451770,2451776,2451777,2451783,2451784,2451790,2451791,2451797,2451798,2451804,2451805,2451811,2451812,2451818,2451819,2451825,2451826,2451832,2451833,2451839,2451840,2451846,2451847,2451853,2451854,2451860,2451861,2451867,2451868,2451874,2451875,2451881,2451882,2451888,2451889,2451895,2451896,2451902,2451903,2451909,2451910,2451916,2451917,2451923,2451924,2451930,2451931,2451937,2451938,2451944,2451945,2451951,2451952,2451958,2451959,2451965,2451966,2451972,2451973,2451979,2451980,2451986,2451987,2451993,2451994,2452000,2452001,2452007,2452008,2452014,2452015,2452021,2452022,2452028,2452029,2452035,2452036,2452042,2452043,2452049,2452050,2452056,2452057,2452063,2452064,2452070,2452071,2452077,2452078,2452084,2452085,2452091,2452092,2452098,2452099,2452105,2452106,2452112,2452113,2452119,2452120,2452126,2452127,2452133,2452134,2452140,2452141,2452147,2452148,2452154,2452155,2452161,2452162,2452168,2452169,2452175,2452176,2452182,2452183,2452189,2452190,2452196,2452197,2452203,2452204,2452210,2452211,2452217,2452218,2452224,2452225,2452231,2452232,2452238,2452239,2452245,2452246,2452252,2452253,2452259,2452260,2452266,2452267,2452273,2452274]), IsNotNull(d_date_sk)] ReadSchema: struct (49) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#40, d_dow#41] +Input [3]: [d_date_sk#10, d_year#33, d_dow#34] (50) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#40, d_dow#41] -Condition : (((d_dow#41 IN (6,0) AND d_year#40 IN (1999,2000,2001)) AND d_date_sk#10 INSET 2451181, 2451182, 2451188, 2451189, 2451195, 2451196, 2451202, 2451203, 2451209, 2451210, 2451216, 2451217, 2451223, 2451224, 2451230, 2451231, 2451237, 2451238, 2451244, 2451245, 2451251, 2451252, 2451258, 2451259, 2451265, 2451266, 2451272, 2451273, 2451279, 2451280, 2451286, 2451287, 2451293, 2451294, 2451300, 2451301, 2451307, 2451308, 2451314, 2451315, 2451321, 2451322, 2451328, 2451329, 2451335, 2451336, 2451342, 2451343, 2451349, 2451350, 2451356, 2451357, 2451363, 2451364, 2451370, 2451371, 2451377, 2451378, 2451384, 2451385, 2451391, 2451392, 2451398, 2451399, 2451405, 2451406, 2451412, 2451413, 2451419, 2451420, 2451426, 2451427, 2451433, 2451434, 2451440, 2451441, 2451447, 2451448, 2451454, 2451455, 2451461, 2451462, 2451468, 2451469, 2451475, 2451476, 2451482, 2451483, 2451489, 2451490, 2451496, 2451497, 2451503, 2451504, 2451510, 2451511, 2451517, 2451518, 2451524, 2451525, 2451531, 2451532, 2451538, 2451539, 2451545, 2451546, 2451552, 2451553, 2451559, 2451560, 2451566, 2451567, 2451573, 2451574, 2451580, 2451581, 2451587, 2451588, 2451594, 2451595, 2451601, 2451602, 2451608, 2451609, 2451615, 2451616, 2451622, 2451623, 2451629, 2451630, 2451636, 2451637, 2451643, 2451644, 2451650, 2451651, 2451657, 2451658, 2451664, 2451665, 2451671, 2451672, 2451678, 2451679, 2451685, 2451686, 2451692, 2451693, 2451699, 2451700, 2451706, 2451707, 2451713, 2451714, 2451720, 2451721, 2451727, 2451728, 2451734, 2451735, 2451741, 2451742, 2451748, 2451749, 2451755, 2451756, 2451762, 2451763, 2451769, 2451770, 2451776, 2451777, 2451783, 2451784, 2451790, 2451791, 2451797, 2451798, 2451804, 2451805, 2451811, 2451812, 2451818, 2451819, 2451825, 2451826, 2451832, 2451833, 2451839, 2451840, 2451846, 2451847, 2451853, 2451854, 2451860, 2451861, 2451867, 2451868, 2451874, 2451875, 2451881, 2451882, 2451888, 2451889, 2451895, 2451896, 2451902, 2451903, 2451909, 2451910, 2451916, 2451917, 2451923, 2451924, 2451930, 2451931, 2451937, 2451938, 2451944, 2451945, 2451951, 2451952, 2451958, 2451959, 2451965, 2451966, 2451972, 2451973, 2451979, 2451980, 2451986, 2451987, 2451993, 2451994, 2452000, 2452001, 2452007, 2452008, 2452014, 2452015, 2452021, 2452022, 2452028, 2452029, 2452035, 2452036, 2452042, 2452043, 2452049, 2452050, 2452056, 2452057, 2452063, 2452064, 2452070, 2452071, 2452077, 2452078, 2452084, 2452085, 2452091, 2452092, 2452098, 2452099, 2452105, 2452106, 2452112, 2452113, 2452119, 2452120, 2452126, 2452127, 2452133, 2452134, 2452140, 2452141, 2452147, 2452148, 2452154, 2452155, 2452161, 2452162, 2452168, 2452169, 2452175, 2452176, 2452182, 2452183, 2452189, 2452190, 2452196, 2452197, 2452203, 2452204, 2452210, 2452211, 2452217, 2452218, 2452224, 2452225, 2452231, 2452232, 2452238, 2452239, 2452245, 2452246, 2452252, 2452253, 2452259, 2452260, 2452266, 2452267, 2452273, 2452274) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#10, d_year#33, d_dow#34] +Condition : (((d_dow#34 IN (6,0) AND d_year#33 IN (1999,2000,2001)) AND d_date_sk#10 INSET 2451181, 2451182, 2451188, 2451189, 2451195, 2451196, 2451202, 2451203, 2451209, 2451210, 2451216, 2451217, 2451223, 2451224, 2451230, 2451231, 2451237, 2451238, 2451244, 2451245, 2451251, 2451252, 2451258, 2451259, 2451265, 2451266, 2451272, 2451273, 2451279, 2451280, 2451286, 2451287, 2451293, 2451294, 2451300, 2451301, 2451307, 2451308, 2451314, 2451315, 2451321, 2451322, 2451328, 2451329, 2451335, 2451336, 2451342, 2451343, 2451349, 2451350, 2451356, 2451357, 2451363, 2451364, 2451370, 2451371, 2451377, 2451378, 2451384, 2451385, 2451391, 2451392, 2451398, 2451399, 2451405, 2451406, 2451412, 2451413, 2451419, 2451420, 2451426, 2451427, 2451433, 2451434, 2451440, 2451441, 2451447, 2451448, 2451454, 2451455, 2451461, 2451462, 2451468, 2451469, 2451475, 2451476, 2451482, 2451483, 2451489, 2451490, 2451496, 2451497, 2451503, 2451504, 2451510, 2451511, 2451517, 2451518, 2451524, 2451525, 2451531, 2451532, 2451538, 2451539, 2451545, 2451546, 2451552, 2451553, 2451559, 2451560, 2451566, 2451567, 2451573, 2451574, 2451580, 2451581, 2451587, 2451588, 2451594, 2451595, 2451601, 2451602, 2451608, 2451609, 2451615, 2451616, 2451622, 2451623, 2451629, 2451630, 2451636, 2451637, 2451643, 2451644, 2451650, 2451651, 2451657, 2451658, 2451664, 2451665, 2451671, 2451672, 2451678, 2451679, 2451685, 2451686, 2451692, 2451693, 2451699, 2451700, 2451706, 2451707, 2451713, 2451714, 2451720, 2451721, 2451727, 2451728, 2451734, 2451735, 2451741, 2451742, 2451748, 2451749, 2451755, 2451756, 2451762, 2451763, 2451769, 2451770, 2451776, 2451777, 2451783, 2451784, 2451790, 2451791, 2451797, 2451798, 2451804, 2451805, 2451811, 2451812, 2451818, 2451819, 2451825, 2451826, 2451832, 2451833, 2451839, 2451840, 2451846, 2451847, 2451853, 2451854, 2451860, 2451861, 2451867, 2451868, 2451874, 2451875, 2451881, 2451882, 2451888, 2451889, 2451895, 2451896, 2451902, 2451903, 2451909, 2451910, 2451916, 2451917, 2451923, 2451924, 2451930, 2451931, 2451937, 2451938, 2451944, 2451945, 2451951, 2451952, 2451958, 2451959, 2451965, 2451966, 2451972, 2451973, 2451979, 2451980, 2451986, 2451987, 2451993, 2451994, 2452000, 2452001, 2452007, 2452008, 2452014, 2452015, 2452021, 2452022, 2452028, 2452029, 2452035, 2452036, 2452042, 2452043, 2452049, 2452050, 2452056, 2452057, 2452063, 2452064, 2452070, 2452071, 2452077, 2452078, 2452084, 2452085, 2452091, 2452092, 2452098, 2452099, 2452105, 2452106, 2452112, 2452113, 2452119, 2452120, 2452126, 2452127, 2452133, 2452134, 2452140, 2452141, 2452147, 2452148, 2452154, 2452155, 2452161, 2452162, 2452168, 2452169, 2452175, 2452176, 2452182, 2452183, 2452189, 2452190, 2452196, 2452197, 2452203, 2452204, 2452210, 2452211, 2452217, 2452218, 2452224, 2452225, 2452231, 2452232, 2452238, 2452239, 2452245, 2452246, 2452252, 2452253, 2452259, 2452260, 2452266, 2452267, 2452273, 2452274) AND isnotnull(d_date_sk#10)) (51) Project [codegen id : 1] Output [1]: [d_date_sk#10] -Input [3]: [d_date_sk#10, d_year#40, d_dow#41] +Input [3]: [d_date_sk#10, d_year#33, d_dow#34] (52) BroadcastExchange Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#42] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46/explain.txt index 5d36c1d7cd2f5..618ab37aa7c98 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46/explain.txt @@ -87,7 +87,7 @@ Input [2]: [s_store_sk#11, s_city#12] (11) BroadcastExchange Input [1]: [s_store_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_store_sk#4] @@ -99,123 +99,123 @@ Output [6]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_store_sk#11] (14) Scan parquet default.household_demographics -Output [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] +Output [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [Or(EqualTo(hd_dep_count,5),EqualTo(hd_vehicle_count,3)), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] +Input [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15] (16) Filter [codegen id : 3] -Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] -Condition : (((hd_dep_count#15 = 5) OR (hd_vehicle_count#16 = 3)) AND isnotnull(hd_demo_sk#14)) +Input [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15] +Condition : (((hd_dep_count#14 = 5) OR (hd_vehicle_count#15 = 3)) AND isnotnull(hd_demo_sk#13)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#14] -Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] +Output [1]: [hd_demo_sk#13] +Input [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15] (18) BroadcastExchange -Input [1]: [hd_demo_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Input [1]: [hd_demo_sk#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#14] +Right keys [1]: [hd_demo_sk#13] Join condition: None (20) Project [codegen id : 5] Output [5]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7] -Input [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, hd_demo_sk#14] +Input [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, hd_demo_sk#13] (21) Scan parquet default.customer_address -Output [2]: [ca_address_sk#18, ca_city#19] +Output [2]: [ca_address_sk#16, ca_city#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_city)] ReadSchema: struct (22) ColumnarToRow [codegen id : 4] -Input [2]: [ca_address_sk#18, ca_city#19] +Input [2]: [ca_address_sk#16, ca_city#17] (23) Filter [codegen id : 4] -Input [2]: [ca_address_sk#18, ca_city#19] -Condition : (isnotnull(ca_address_sk#18) AND isnotnull(ca_city#19)) +Input [2]: [ca_address_sk#16, ca_city#17] +Condition : (isnotnull(ca_address_sk#16) AND isnotnull(ca_city#17)) (24) BroadcastExchange -Input [2]: [ca_address_sk#18, ca_city#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#20] +Input [2]: [ca_address_sk#16, ca_city#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (25) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_addr_sk#3] -Right keys [1]: [ca_address_sk#18] +Right keys [1]: [ca_address_sk#16] Join condition: None (26) Project [codegen id : 5] -Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#19] -Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_address_sk#18, ca_city#19] +Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#17] +Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_address_sk#16, ca_city#17] (27) HashAggregate [codegen id : 5] -Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#19] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#19] +Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#17] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17] Functions [2]: [partial_sum(UnscaledValue(ss_coupon_amt#6)), partial_sum(UnscaledValue(ss_net_profit#7))] -Aggregate Attributes [2]: [sum#21, sum#22] -Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#19, sum#23, sum#24] +Aggregate Attributes [2]: [sum#18, sum#19] +Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17, sum#20, sum#21] (28) Exchange -Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#19, sum#23, sum#24] -Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#19, 5), ENSURE_REQUIREMENTS, [id=#25] +Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17, sum#20, sum#21] +Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 8] -Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#19, sum#23, sum#24] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#19] +Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17, sum#20, sum#21] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17] Functions [2]: [sum(UnscaledValue(ss_coupon_amt#6)), sum(UnscaledValue(ss_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#26, sum(UnscaledValue(ss_net_profit#7))#27] -Results [5]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#19 AS bought_city#28, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#26,17,2) AS amt#29, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#27,17,2) AS profit#30] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#22, sum(UnscaledValue(ss_net_profit#7))#23] +Results [5]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#17 AS bought_city#24, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#22,17,2) AS amt#25, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#23,17,2) AS profit#26] (30) Scan parquet default.customer -Output [4]: [c_customer_sk#31, c_current_addr_sk#32, c_first_name#33, c_last_name#34] +Output [4]: [c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 6] -Input [4]: [c_customer_sk#31, c_current_addr_sk#32, c_first_name#33, c_last_name#34] +Input [4]: [c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] (32) Filter [codegen id : 6] -Input [4]: [c_customer_sk#31, c_current_addr_sk#32, c_first_name#33, c_last_name#34] -Condition : (isnotnull(c_customer_sk#31) AND isnotnull(c_current_addr_sk#32)) +Input [4]: [c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] +Condition : (isnotnull(c_customer_sk#27) AND isnotnull(c_current_addr_sk#28)) (33) BroadcastExchange -Input [4]: [c_customer_sk#31, c_current_addr_sk#32, c_first_name#33, c_last_name#34] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#35] +Input [4]: [c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#31] +Right keys [1]: [c_customer_sk#27] Join condition: None (35) Project [codegen id : 8] -Output [7]: [ss_ticket_number#5, bought_city#28, amt#29, profit#30, c_current_addr_sk#32, c_first_name#33, c_last_name#34] -Input [9]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#28, amt#29, profit#30, c_customer_sk#31, c_current_addr_sk#32, c_first_name#33, c_last_name#34] +Output [7]: [ss_ticket_number#5, bought_city#24, amt#25, profit#26, c_current_addr_sk#28, c_first_name#29, c_last_name#30] +Input [9]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#24, amt#25, profit#26, c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] (36) ReusedExchange [Reuses operator id: 24] -Output [2]: [ca_address_sk#36, ca_city#37] +Output [2]: [ca_address_sk#31, ca_city#32] (37) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [c_current_addr_sk#32] -Right keys [1]: [ca_address_sk#36] -Join condition: NOT (ca_city#37 = bought_city#28) +Left keys [1]: [c_current_addr_sk#28] +Right keys [1]: [ca_address_sk#31] +Join condition: NOT (ca_city#32 = bought_city#24) (38) Project [codegen id : 8] -Output [7]: [c_last_name#34, c_first_name#33, ca_city#37, bought_city#28, ss_ticket_number#5, amt#29, profit#30] -Input [9]: [ss_ticket_number#5, bought_city#28, amt#29, profit#30, c_current_addr_sk#32, c_first_name#33, c_last_name#34, ca_address_sk#36, ca_city#37] +Output [7]: [c_last_name#30, c_first_name#29, ca_city#32, bought_city#24, ss_ticket_number#5, amt#25, profit#26] +Input [9]: [ss_ticket_number#5, bought_city#24, amt#25, profit#26, c_current_addr_sk#28, c_first_name#29, c_last_name#30, ca_address_sk#31, ca_city#32] (39) TakeOrderedAndProject -Input [7]: [c_last_name#34, c_first_name#33, ca_city#37, bought_city#28, ss_ticket_number#5, amt#29, profit#30] -Arguments: 100, [c_last_name#34 ASC NULLS FIRST, c_first_name#33 ASC NULLS FIRST, ca_city#37 ASC NULLS FIRST, bought_city#28 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#34, c_first_name#33, ca_city#37, bought_city#28, ss_ticket_number#5, amt#29, profit#30] +Input [7]: [c_last_name#30, c_first_name#29, ca_city#32, bought_city#24, ss_ticket_number#5, amt#25, profit#26] +Arguments: 100, [c_last_name#30 ASC NULLS FIRST, c_first_name#29 ASC NULLS FIRST, ca_city#32 ASC NULLS FIRST, bought_city#24 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#30, c_first_name#29, ca_city#32, bought_city#24, ss_ticket_number#5, amt#25, profit#26] ===== Subqueries ===== @@ -228,25 +228,25 @@ BroadcastExchange (44) (40) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#38, d_dow#39] +Output [3]: [d_date_sk#10, d_year#33, d_dow#34] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_dow, [0,6]), In(d_year, [1999,2000,2001]), In(d_date_sk, [2451181,2451182,2451188,2451189,2451195,2451196,2451202,2451203,2451209,2451210,2451216,2451217,2451223,2451224,2451230,2451231,2451237,2451238,2451244,2451245,2451251,2451252,2451258,2451259,2451265,2451266,2451272,2451273,2451279,2451280,2451286,2451287,2451293,2451294,2451300,2451301,2451307,2451308,2451314,2451315,2451321,2451322,2451328,2451329,2451335,2451336,2451342,2451343,2451349,2451350,2451356,2451357,2451363,2451364,2451370,2451371,2451377,2451378,2451384,2451385,2451391,2451392,2451398,2451399,2451405,2451406,2451412,2451413,2451419,2451420,2451426,2451427,2451433,2451434,2451440,2451441,2451447,2451448,2451454,2451455,2451461,2451462,2451468,2451469,2451475,2451476,2451482,2451483,2451489,2451490,2451496,2451497,2451503,2451504,2451510,2451511,2451517,2451518,2451524,2451525,2451531,2451532,2451538,2451539,2451545,2451546,2451552,2451553,2451559,2451560,2451566,2451567,2451573,2451574,2451580,2451581,2451587,2451588,2451594,2451595,2451601,2451602,2451608,2451609,2451615,2451616,2451622,2451623,2451629,2451630,2451636,2451637,2451643,2451644,2451650,2451651,2451657,2451658,2451664,2451665,2451671,2451672,2451678,2451679,2451685,2451686,2451692,2451693,2451699,2451700,2451706,2451707,2451713,2451714,2451720,2451721,2451727,2451728,2451734,2451735,2451741,2451742,2451748,2451749,2451755,2451756,2451762,2451763,2451769,2451770,2451776,2451777,2451783,2451784,2451790,2451791,2451797,2451798,2451804,2451805,2451811,2451812,2451818,2451819,2451825,2451826,2451832,2451833,2451839,2451840,2451846,2451847,2451853,2451854,2451860,2451861,2451867,2451868,2451874,2451875,2451881,2451882,2451888,2451889,2451895,2451896,2451902,2451903,2451909,2451910,2451916,2451917,2451923,2451924,2451930,2451931,2451937,2451938,2451944,2451945,2451951,2451952,2451958,2451959,2451965,2451966,2451972,2451973,2451979,2451980,2451986,2451987,2451993,2451994,2452000,2452001,2452007,2452008,2452014,2452015,2452021,2452022,2452028,2452029,2452035,2452036,2452042,2452043,2452049,2452050,2452056,2452057,2452063,2452064,2452070,2452071,2452077,2452078,2452084,2452085,2452091,2452092,2452098,2452099,2452105,2452106,2452112,2452113,2452119,2452120,2452126,2452127,2452133,2452134,2452140,2452141,2452147,2452148,2452154,2452155,2452161,2452162,2452168,2452169,2452175,2452176,2452182,2452183,2452189,2452190,2452196,2452197,2452203,2452204,2452210,2452211,2452217,2452218,2452224,2452225,2452231,2452232,2452238,2452239,2452245,2452246,2452252,2452253,2452259,2452260,2452266,2452267,2452273,2452274]), IsNotNull(d_date_sk)] ReadSchema: struct (41) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#38, d_dow#39] +Input [3]: [d_date_sk#10, d_year#33, d_dow#34] (42) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#38, d_dow#39] -Condition : (((d_dow#39 IN (6,0) AND d_year#38 IN (1999,2000,2001)) AND d_date_sk#10 INSET 2451181, 2451182, 2451188, 2451189, 2451195, 2451196, 2451202, 2451203, 2451209, 2451210, 2451216, 2451217, 2451223, 2451224, 2451230, 2451231, 2451237, 2451238, 2451244, 2451245, 2451251, 2451252, 2451258, 2451259, 2451265, 2451266, 2451272, 2451273, 2451279, 2451280, 2451286, 2451287, 2451293, 2451294, 2451300, 2451301, 2451307, 2451308, 2451314, 2451315, 2451321, 2451322, 2451328, 2451329, 2451335, 2451336, 2451342, 2451343, 2451349, 2451350, 2451356, 2451357, 2451363, 2451364, 2451370, 2451371, 2451377, 2451378, 2451384, 2451385, 2451391, 2451392, 2451398, 2451399, 2451405, 2451406, 2451412, 2451413, 2451419, 2451420, 2451426, 2451427, 2451433, 2451434, 2451440, 2451441, 2451447, 2451448, 2451454, 2451455, 2451461, 2451462, 2451468, 2451469, 2451475, 2451476, 2451482, 2451483, 2451489, 2451490, 2451496, 2451497, 2451503, 2451504, 2451510, 2451511, 2451517, 2451518, 2451524, 2451525, 2451531, 2451532, 2451538, 2451539, 2451545, 2451546, 2451552, 2451553, 2451559, 2451560, 2451566, 2451567, 2451573, 2451574, 2451580, 2451581, 2451587, 2451588, 2451594, 2451595, 2451601, 2451602, 2451608, 2451609, 2451615, 2451616, 2451622, 2451623, 2451629, 2451630, 2451636, 2451637, 2451643, 2451644, 2451650, 2451651, 2451657, 2451658, 2451664, 2451665, 2451671, 2451672, 2451678, 2451679, 2451685, 2451686, 2451692, 2451693, 2451699, 2451700, 2451706, 2451707, 2451713, 2451714, 2451720, 2451721, 2451727, 2451728, 2451734, 2451735, 2451741, 2451742, 2451748, 2451749, 2451755, 2451756, 2451762, 2451763, 2451769, 2451770, 2451776, 2451777, 2451783, 2451784, 2451790, 2451791, 2451797, 2451798, 2451804, 2451805, 2451811, 2451812, 2451818, 2451819, 2451825, 2451826, 2451832, 2451833, 2451839, 2451840, 2451846, 2451847, 2451853, 2451854, 2451860, 2451861, 2451867, 2451868, 2451874, 2451875, 2451881, 2451882, 2451888, 2451889, 2451895, 2451896, 2451902, 2451903, 2451909, 2451910, 2451916, 2451917, 2451923, 2451924, 2451930, 2451931, 2451937, 2451938, 2451944, 2451945, 2451951, 2451952, 2451958, 2451959, 2451965, 2451966, 2451972, 2451973, 2451979, 2451980, 2451986, 2451987, 2451993, 2451994, 2452000, 2452001, 2452007, 2452008, 2452014, 2452015, 2452021, 2452022, 2452028, 2452029, 2452035, 2452036, 2452042, 2452043, 2452049, 2452050, 2452056, 2452057, 2452063, 2452064, 2452070, 2452071, 2452077, 2452078, 2452084, 2452085, 2452091, 2452092, 2452098, 2452099, 2452105, 2452106, 2452112, 2452113, 2452119, 2452120, 2452126, 2452127, 2452133, 2452134, 2452140, 2452141, 2452147, 2452148, 2452154, 2452155, 2452161, 2452162, 2452168, 2452169, 2452175, 2452176, 2452182, 2452183, 2452189, 2452190, 2452196, 2452197, 2452203, 2452204, 2452210, 2452211, 2452217, 2452218, 2452224, 2452225, 2452231, 2452232, 2452238, 2452239, 2452245, 2452246, 2452252, 2452253, 2452259, 2452260, 2452266, 2452267, 2452273, 2452274) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#10, d_year#33, d_dow#34] +Condition : (((d_dow#34 IN (6,0) AND d_year#33 IN (1999,2000,2001)) AND d_date_sk#10 INSET 2451181, 2451182, 2451188, 2451189, 2451195, 2451196, 2451202, 2451203, 2451209, 2451210, 2451216, 2451217, 2451223, 2451224, 2451230, 2451231, 2451237, 2451238, 2451244, 2451245, 2451251, 2451252, 2451258, 2451259, 2451265, 2451266, 2451272, 2451273, 2451279, 2451280, 2451286, 2451287, 2451293, 2451294, 2451300, 2451301, 2451307, 2451308, 2451314, 2451315, 2451321, 2451322, 2451328, 2451329, 2451335, 2451336, 2451342, 2451343, 2451349, 2451350, 2451356, 2451357, 2451363, 2451364, 2451370, 2451371, 2451377, 2451378, 2451384, 2451385, 2451391, 2451392, 2451398, 2451399, 2451405, 2451406, 2451412, 2451413, 2451419, 2451420, 2451426, 2451427, 2451433, 2451434, 2451440, 2451441, 2451447, 2451448, 2451454, 2451455, 2451461, 2451462, 2451468, 2451469, 2451475, 2451476, 2451482, 2451483, 2451489, 2451490, 2451496, 2451497, 2451503, 2451504, 2451510, 2451511, 2451517, 2451518, 2451524, 2451525, 2451531, 2451532, 2451538, 2451539, 2451545, 2451546, 2451552, 2451553, 2451559, 2451560, 2451566, 2451567, 2451573, 2451574, 2451580, 2451581, 2451587, 2451588, 2451594, 2451595, 2451601, 2451602, 2451608, 2451609, 2451615, 2451616, 2451622, 2451623, 2451629, 2451630, 2451636, 2451637, 2451643, 2451644, 2451650, 2451651, 2451657, 2451658, 2451664, 2451665, 2451671, 2451672, 2451678, 2451679, 2451685, 2451686, 2451692, 2451693, 2451699, 2451700, 2451706, 2451707, 2451713, 2451714, 2451720, 2451721, 2451727, 2451728, 2451734, 2451735, 2451741, 2451742, 2451748, 2451749, 2451755, 2451756, 2451762, 2451763, 2451769, 2451770, 2451776, 2451777, 2451783, 2451784, 2451790, 2451791, 2451797, 2451798, 2451804, 2451805, 2451811, 2451812, 2451818, 2451819, 2451825, 2451826, 2451832, 2451833, 2451839, 2451840, 2451846, 2451847, 2451853, 2451854, 2451860, 2451861, 2451867, 2451868, 2451874, 2451875, 2451881, 2451882, 2451888, 2451889, 2451895, 2451896, 2451902, 2451903, 2451909, 2451910, 2451916, 2451917, 2451923, 2451924, 2451930, 2451931, 2451937, 2451938, 2451944, 2451945, 2451951, 2451952, 2451958, 2451959, 2451965, 2451966, 2451972, 2451973, 2451979, 2451980, 2451986, 2451987, 2451993, 2451994, 2452000, 2452001, 2452007, 2452008, 2452014, 2452015, 2452021, 2452022, 2452028, 2452029, 2452035, 2452036, 2452042, 2452043, 2452049, 2452050, 2452056, 2452057, 2452063, 2452064, 2452070, 2452071, 2452077, 2452078, 2452084, 2452085, 2452091, 2452092, 2452098, 2452099, 2452105, 2452106, 2452112, 2452113, 2452119, 2452120, 2452126, 2452127, 2452133, 2452134, 2452140, 2452141, 2452147, 2452148, 2452154, 2452155, 2452161, 2452162, 2452168, 2452169, 2452175, 2452176, 2452182, 2452183, 2452189, 2452190, 2452196, 2452197, 2452203, 2452204, 2452210, 2452211, 2452217, 2452218, 2452224, 2452225, 2452231, 2452232, 2452238, 2452239, 2452245, 2452246, 2452252, 2452253, 2452259, 2452260, 2452266, 2452267, 2452273, 2452274) AND isnotnull(d_date_sk#10)) (43) Project [codegen id : 1] Output [1]: [d_date_sk#10] -Input [3]: [d_date_sk#10, d_year#38, d_dow#39] +Input [3]: [d_date_sk#10, d_year#33, d_dow#34] (44) BroadcastExchange Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52.sf100/explain.txt index 02f680fc0dd1a..eb1ec98eb6304 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52.sf100/explain.txt @@ -42,88 +42,88 @@ Input [3]: [d_date_sk#1, d_year#2, d_moy#3] (5) BroadcastExchange Input [2]: [d_date_sk#1, d_year#2] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#4] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.store_sales -Output [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7] +Output [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#7), (ss_sold_date_sk#7 >= 2451149), (ss_sold_date_sk#7 <= 2451179), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ss_sold_date_sk#6), (ss_sold_date_sk#6 >= 2451149), (ss_sold_date_sk#6 <= 2451179), dynamicpruningexpression(ss_sold_date_sk#6 IN dynamicpruning#7)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (7) ColumnarToRow -Input [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7] +Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] (8) Filter -Input [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7] -Condition : isnotnull(ss_item_sk#5) +Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] +Condition : isnotnull(ss_item_sk#4) (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] -Right keys [1]: [ss_sold_date_sk#7] +Right keys [1]: [ss_sold_date_sk#6] Join condition: None (10) Project [codegen id : 3] -Output [3]: [d_year#2, ss_item_sk#5, ss_ext_sales_price#6] -Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7] +Output [3]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5] +Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] (11) Scan parquet default.item -Output [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12] +Output [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,1), IsNotNull(i_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12] +Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] (13) Filter [codegen id : 2] -Input [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12] -Condition : ((isnotnull(i_manager_id#12) AND (i_manager_id#12 = 1)) AND isnotnull(i_item_sk#9)) +Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] +Condition : ((isnotnull(i_manager_id#11) AND (i_manager_id#11 = 1)) AND isnotnull(i_item_sk#8)) (14) Project [codegen id : 2] -Output [3]: [i_item_sk#9, i_brand_id#10, i_brand#11] -Input [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12] +Output [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] +Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] (15) BroadcastExchange -Input [3]: [i_item_sk#9, i_brand_id#10, i_brand#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] +Input [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [ss_item_sk#5] -Right keys [1]: [i_item_sk#9] +Left keys [1]: [ss_item_sk#4] +Right keys [1]: [i_item_sk#8] Join condition: None (17) Project [codegen id : 3] -Output [4]: [d_year#2, ss_ext_sales_price#6, i_brand_id#10, i_brand#11] -Input [6]: [d_year#2, ss_item_sk#5, ss_ext_sales_price#6, i_item_sk#9, i_brand_id#10, i_brand#11] +Output [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#9, i_brand#10] +Input [6]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#8, i_brand_id#9, i_brand#10] (18) HashAggregate [codegen id : 3] -Input [4]: [d_year#2, ss_ext_sales_price#6, i_brand_id#10, i_brand#11] -Keys [3]: [d_year#2, i_brand#11, i_brand_id#10] -Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#6))] -Aggregate Attributes [1]: [sum#14] -Results [4]: [d_year#2, i_brand#11, i_brand_id#10, sum#15] +Input [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#9, i_brand#10] +Keys [3]: [d_year#2, i_brand#10, i_brand_id#9] +Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))] +Aggregate Attributes [1]: [sum#12] +Results [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#13] (19) Exchange -Input [4]: [d_year#2, i_brand#11, i_brand_id#10, sum#15] -Arguments: hashpartitioning(d_year#2, i_brand#11, i_brand_id#10, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#13] +Arguments: hashpartitioning(d_year#2, i_brand#10, i_brand_id#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [4]: [d_year#2, i_brand#11, i_brand_id#10, sum#15] -Keys [3]: [d_year#2, i_brand#11, i_brand_id#10] -Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#6))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#6))#17] -Results [4]: [d_year#2, i_brand_id#10 AS brand_id#18, i_brand#11 AS brand#19, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#17,17,2) AS ext_price#20] +Input [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#13] +Keys [3]: [d_year#2, i_brand#10, i_brand_id#9] +Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#14] +Results [4]: [d_year#2, i_brand_id#9 AS brand_id#15, i_brand#10 AS brand#16, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#14,17,2) AS ext_price#17] (21) TakeOrderedAndProject -Input [4]: [d_year#2, brand_id#18, brand#19, ext_price#20] -Arguments: 100, [d_year#2 ASC NULLS FIRST, ext_price#20 DESC NULLS LAST, brand_id#18 ASC NULLS FIRST], [d_year#2, brand_id#18, brand#19, ext_price#20] +Input [4]: [d_year#2, brand_id#15, brand#16, ext_price#17] +Arguments: 100, [d_year#2 ASC NULLS FIRST, ext_price#17 DESC NULLS LAST, brand_id#15 ASC NULLS FIRST], [d_year#2, brand_id#15, brand#16, ext_price#17] ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 +Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#6 IN dynamicpruning#7 ReusedExchange (22) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52/explain.txt index 8d081d60f9e85..012a1cc0d40b5 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52/explain.txt @@ -57,7 +57,7 @@ Condition : isnotnull(ss_item_sk#4) (8) BroadcastExchange Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] @@ -69,55 +69,55 @@ Output [3]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5] Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] (11) Scan parquet default.item -Output [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] +Output [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,1), IsNotNull(i_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] (13) Filter [codegen id : 2] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] -Condition : ((isnotnull(i_manager_id#11) AND (i_manager_id#11 = 1)) AND isnotnull(i_item_sk#8)) +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] +Condition : ((isnotnull(i_manager_id#10) AND (i_manager_id#10 = 1)) AND isnotnull(i_item_sk#7)) (14) Project [codegen id : 2] -Output [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] +Output [3]: [i_item_sk#7, i_brand_id#8, i_brand#9] +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] (15) BroadcastExchange -Input [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Input [3]: [i_item_sk#7, i_brand_id#8, i_brand#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#4] -Right keys [1]: [i_item_sk#8] +Right keys [1]: [i_item_sk#7] Join condition: None (17) Project [codegen id : 3] -Output [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#9, i_brand#10] -Input [6]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#8, i_brand_id#9, i_brand#10] +Output [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#8, i_brand#9] +Input [6]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#7, i_brand_id#8, i_brand#9] (18) HashAggregate [codegen id : 3] -Input [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#9, i_brand#10] -Keys [3]: [d_year#2, i_brand#10, i_brand_id#9] +Input [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#8, i_brand#9] +Keys [3]: [d_year#2, i_brand#9, i_brand_id#8] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum#13] -Results [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14] +Aggregate Attributes [1]: [sum#11] +Results [4]: [d_year#2, i_brand#9, i_brand_id#8, sum#12] (19) Exchange -Input [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14] -Arguments: hashpartitioning(d_year#2, i_brand#10, i_brand_id#9, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [d_year#2, i_brand#9, i_brand_id#8, sum#12] +Arguments: hashpartitioning(d_year#2, i_brand#9, i_brand_id#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14] -Keys [3]: [d_year#2, i_brand#10, i_brand_id#9] +Input [4]: [d_year#2, i_brand#9, i_brand_id#8, sum#12] +Keys [3]: [d_year#2, i_brand#9, i_brand_id#8] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#16] -Results [4]: [d_year#2, i_brand_id#9 AS brand_id#17, i_brand#10 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#16,17,2) AS ext_price#19] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#13] +Results [4]: [d_year#2, i_brand_id#8 AS brand_id#14, i_brand#9 AS brand#15, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#13,17,2) AS ext_price#16] (21) TakeOrderedAndProject -Input [4]: [d_year#2, brand_id#17, brand#18, ext_price#19] -Arguments: 100, [d_year#2 ASC NULLS FIRST, ext_price#19 DESC NULLS LAST, brand_id#17 ASC NULLS FIRST], [d_year#2, brand_id#17, brand#18, ext_price#19] +Input [4]: [d_year#2, brand_id#14, brand#15, ext_price#16] +Arguments: 100, [d_year#2 ASC NULLS FIRST, ext_price#16 DESC NULLS LAST, brand_id#14 ASC NULLS FIRST], [d_year#2, brand_id#14, brand#15, ext_price#16] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53.sf100/explain.txt index 42b83c9c7d830..321d0ec4277f6 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53.sf100/explain.txt @@ -49,116 +49,116 @@ Input [5]: [i_item_sk#1, i_brand#2, i_class#3, i_category#4, i_manufact_id#5] (5) BroadcastExchange Input [2]: [i_item_sk#1, i_manufact_id#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.store_sales -Output [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] +Output [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#14), (ss_sold_date_sk#14 >= 2451911), (ss_sold_date_sk#14 <= 2452275), dynamicpruningexpression(ss_sold_date_sk#14 IN dynamicpruning#15)] +PartitionFilters: [isnotnull(ss_sold_date_sk#13), (ss_sold_date_sk#13 >= 2451911), (ss_sold_date_sk#13 <= 2452275), dynamicpruningexpression(ss_sold_date_sk#13 IN dynamicpruning#14)] PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (7) ColumnarToRow -Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] +Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] (8) Filter -Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] -Condition : (isnotnull(ss_item_sk#11) AND isnotnull(ss_store_sk#12)) +Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] +Condition : (isnotnull(ss_item_sk#10) AND isnotnull(ss_store_sk#11)) (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] -Right keys [1]: [ss_item_sk#11] +Right keys [1]: [ss_item_sk#10] Join condition: None (10) Project [codegen id : 4] -Output [4]: [i_manufact_id#5, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] -Input [6]: [i_item_sk#1, i_manufact_id#5, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] +Output [4]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] +Input [6]: [i_item_sk#1, i_manufact_id#5, ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] (11) Scan parquet default.store -Output [1]: [s_store_sk#16] +Output [1]: [s_store_sk#15] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [1]: [s_store_sk#16] +Input [1]: [s_store_sk#15] (13) Filter [codegen id : 2] -Input [1]: [s_store_sk#16] -Condition : isnotnull(s_store_sk#16) +Input [1]: [s_store_sk#15] +Condition : isnotnull(s_store_sk#15) (14) BroadcastExchange -Input [1]: [s_store_sk#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#17] +Input [1]: [s_store_sk#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_store_sk#12] -Right keys [1]: [s_store_sk#16] +Left keys [1]: [ss_store_sk#11] +Right keys [1]: [s_store_sk#15] Join condition: None (16) Project [codegen id : 4] -Output [3]: [i_manufact_id#5, ss_sales_price#13, ss_sold_date_sk#14] -Input [5]: [i_manufact_id#5, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14, s_store_sk#16] +Output [3]: [i_manufact_id#5, ss_sales_price#12, ss_sold_date_sk#13] +Input [5]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13, s_store_sk#15] (17) ReusedExchange [Reuses operator id: 33] -Output [2]: [d_date_sk#18, d_qoy#19] +Output [2]: [d_date_sk#16, d_qoy#17] (18) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#14] -Right keys [1]: [d_date_sk#18] +Left keys [1]: [ss_sold_date_sk#13] +Right keys [1]: [d_date_sk#16] Join condition: None (19) Project [codegen id : 4] -Output [3]: [i_manufact_id#5, ss_sales_price#13, d_qoy#19] -Input [5]: [i_manufact_id#5, ss_sales_price#13, ss_sold_date_sk#14, d_date_sk#18, d_qoy#19] +Output [3]: [i_manufact_id#5, ss_sales_price#12, d_qoy#17] +Input [5]: [i_manufact_id#5, ss_sales_price#12, ss_sold_date_sk#13, d_date_sk#16, d_qoy#17] (20) HashAggregate [codegen id : 4] -Input [3]: [i_manufact_id#5, ss_sales_price#13, d_qoy#19] -Keys [2]: [i_manufact_id#5, d_qoy#19] -Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#13))] -Aggregate Attributes [1]: [sum#20] -Results [3]: [i_manufact_id#5, d_qoy#19, sum#21] +Input [3]: [i_manufact_id#5, ss_sales_price#12, d_qoy#17] +Keys [2]: [i_manufact_id#5, d_qoy#17] +Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#12))] +Aggregate Attributes [1]: [sum#18] +Results [3]: [i_manufact_id#5, d_qoy#17, sum#19] (21) Exchange -Input [3]: [i_manufact_id#5, d_qoy#19, sum#21] -Arguments: hashpartitioning(i_manufact_id#5, d_qoy#19, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [3]: [i_manufact_id#5, d_qoy#17, sum#19] +Arguments: hashpartitioning(i_manufact_id#5, d_qoy#17, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 5] -Input [3]: [i_manufact_id#5, d_qoy#19, sum#21] -Keys [2]: [i_manufact_id#5, d_qoy#19] -Functions [1]: [sum(UnscaledValue(ss_sales_price#13))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#13))#23] -Results [3]: [i_manufact_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#23,17,2) AS sum_sales#24, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#23,17,2) AS _w0#25] +Input [3]: [i_manufact_id#5, d_qoy#17, sum#19] +Keys [2]: [i_manufact_id#5, d_qoy#17] +Functions [1]: [sum(UnscaledValue(ss_sales_price#12))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#12))#20] +Results [3]: [i_manufact_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS _w0#22] (23) Exchange -Input [3]: [i_manufact_id#5, sum_sales#24, _w0#25] -Arguments: hashpartitioning(i_manufact_id#5, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [3]: [i_manufact_id#5, sum_sales#21, _w0#22] +Arguments: hashpartitioning(i_manufact_id#5, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 6] -Input [3]: [i_manufact_id#5, sum_sales#24, _w0#25] +Input [3]: [i_manufact_id#5, sum_sales#21, _w0#22] Arguments: [i_manufact_id#5 ASC NULLS FIRST], false, 0 (25) Window -Input [3]: [i_manufact_id#5, sum_sales#24, _w0#25] -Arguments: [avg(_w0#25) windowspecdefinition(i_manufact_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_quarterly_sales#27], [i_manufact_id#5] +Input [3]: [i_manufact_id#5, sum_sales#21, _w0#22] +Arguments: [avg(_w0#22) windowspecdefinition(i_manufact_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_quarterly_sales#23], [i_manufact_id#5] (26) Filter [codegen id : 7] -Input [4]: [i_manufact_id#5, sum_sales#24, _w0#25, avg_quarterly_sales#27] -Condition : (isnotnull(avg_quarterly_sales#27) AND ((avg_quarterly_sales#27 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#24 as decimal(22,6))) - promote_precision(cast(avg_quarterly_sales#27 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_quarterly_sales#27 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) +Input [4]: [i_manufact_id#5, sum_sales#21, _w0#22, avg_quarterly_sales#23] +Condition : (isnotnull(avg_quarterly_sales#23) AND ((avg_quarterly_sales#23 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_quarterly_sales#23 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_quarterly_sales#23 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) (27) Project [codegen id : 7] -Output [3]: [i_manufact_id#5, sum_sales#24, avg_quarterly_sales#27] -Input [4]: [i_manufact_id#5, sum_sales#24, _w0#25, avg_quarterly_sales#27] +Output [3]: [i_manufact_id#5, sum_sales#21, avg_quarterly_sales#23] +Input [4]: [i_manufact_id#5, sum_sales#21, _w0#22, avg_quarterly_sales#23] (28) TakeOrderedAndProject -Input [3]: [i_manufact_id#5, sum_sales#24, avg_quarterly_sales#27] -Arguments: 100, [avg_quarterly_sales#27 ASC NULLS FIRST, sum_sales#24 ASC NULLS FIRST, i_manufact_id#5 ASC NULLS FIRST], [i_manufact_id#5, sum_sales#24, avg_quarterly_sales#27] +Input [3]: [i_manufact_id#5, sum_sales#21, avg_quarterly_sales#23] +Arguments: 100, [avg_quarterly_sales#23 ASC NULLS FIRST, sum_sales#21 ASC NULLS FIRST, i_manufact_id#5 ASC NULLS FIRST], [i_manufact_id#5, sum_sales#21, avg_quarterly_sales#23] ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#14 IN dynamicpruning#15 +Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#13 IN dynamicpruning#14 BroadcastExchange (33) +- * Project (32) +- * Filter (31) @@ -167,25 +167,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [3]: [d_date_sk#18, d_month_seq#28, d_qoy#19] +Output [3]: [d_date_sk#16, d_month_seq#24, d_qoy#17] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_month_seq, [1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223]), GreaterThanOrEqual(d_date_sk,2451911), LessThanOrEqual(d_date_sk,2452275), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#18, d_month_seq#28, d_qoy#19] +Input [3]: [d_date_sk#16, d_month_seq#24, d_qoy#17] (31) Filter [codegen id : 1] -Input [3]: [d_date_sk#18, d_month_seq#28, d_qoy#19] -Condition : (((d_month_seq#28 INSET 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223 AND (d_date_sk#18 >= 2451911)) AND (d_date_sk#18 <= 2452275)) AND isnotnull(d_date_sk#18)) +Input [3]: [d_date_sk#16, d_month_seq#24, d_qoy#17] +Condition : (((d_month_seq#24 INSET 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223 AND (d_date_sk#16 >= 2451911)) AND (d_date_sk#16 <= 2452275)) AND isnotnull(d_date_sk#16)) (32) Project [codegen id : 1] -Output [2]: [d_date_sk#18, d_qoy#19] -Input [3]: [d_date_sk#18, d_month_seq#28, d_qoy#19] +Output [2]: [d_date_sk#16, d_qoy#17] +Input [3]: [d_date_sk#16, d_month_seq#24, d_qoy#17] (33) BroadcastExchange -Input [2]: [d_date_sk#18, d_qoy#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#29] +Input [2]: [d_date_sk#16, d_qoy#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53/explain.txt index e7ae5ce6dcfb7..c91dd8a11b5f7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53/explain.txt @@ -64,7 +64,7 @@ Condition : (isnotnull(ss_item_sk#10) AND isnotnull(ss_store_sk#11)) (8) BroadcastExchange Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] @@ -76,85 +76,85 @@ Output [4]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk Input [6]: [i_item_sk#1, i_manufact_id#5, ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] (11) ReusedExchange [Reuses operator id: 33] -Output [2]: [d_date_sk#16, d_qoy#17] +Output [2]: [d_date_sk#15, d_qoy#16] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_date_sk#13] -Right keys [1]: [d_date_sk#16] +Right keys [1]: [d_date_sk#15] Join condition: None (13) Project [codegen id : 4] -Output [4]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, d_qoy#17] -Input [6]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13, d_date_sk#16, d_qoy#17] +Output [4]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, d_qoy#16] +Input [6]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13, d_date_sk#15, d_qoy#16] (14) Scan parquet default.store -Output [1]: [s_store_sk#18] +Output [1]: [s_store_sk#17] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [1]: [s_store_sk#18] +Input [1]: [s_store_sk#17] (16) Filter [codegen id : 3] -Input [1]: [s_store_sk#18] -Condition : isnotnull(s_store_sk#18) +Input [1]: [s_store_sk#17] +Condition : isnotnull(s_store_sk#17) (17) BroadcastExchange -Input [1]: [s_store_sk#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19] +Input [1]: [s_store_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#11] -Right keys [1]: [s_store_sk#18] +Right keys [1]: [s_store_sk#17] Join condition: None (19) Project [codegen id : 4] -Output [3]: [i_manufact_id#5, ss_sales_price#12, d_qoy#17] -Input [5]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, d_qoy#17, s_store_sk#18] +Output [3]: [i_manufact_id#5, ss_sales_price#12, d_qoy#16] +Input [5]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, d_qoy#16, s_store_sk#17] (20) HashAggregate [codegen id : 4] -Input [3]: [i_manufact_id#5, ss_sales_price#12, d_qoy#17] -Keys [2]: [i_manufact_id#5, d_qoy#17] +Input [3]: [i_manufact_id#5, ss_sales_price#12, d_qoy#16] +Keys [2]: [i_manufact_id#5, d_qoy#16] Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#12))] -Aggregate Attributes [1]: [sum#20] -Results [3]: [i_manufact_id#5, d_qoy#17, sum#21] +Aggregate Attributes [1]: [sum#18] +Results [3]: [i_manufact_id#5, d_qoy#16, sum#19] (21) Exchange -Input [3]: [i_manufact_id#5, d_qoy#17, sum#21] -Arguments: hashpartitioning(i_manufact_id#5, d_qoy#17, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [3]: [i_manufact_id#5, d_qoy#16, sum#19] +Arguments: hashpartitioning(i_manufact_id#5, d_qoy#16, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 5] -Input [3]: [i_manufact_id#5, d_qoy#17, sum#21] -Keys [2]: [i_manufact_id#5, d_qoy#17] +Input [3]: [i_manufact_id#5, d_qoy#16, sum#19] +Keys [2]: [i_manufact_id#5, d_qoy#16] Functions [1]: [sum(UnscaledValue(ss_sales_price#12))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#12))#23] -Results [3]: [i_manufact_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#23,17,2) AS sum_sales#24, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#23,17,2) AS _w0#25] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#12))#20] +Results [3]: [i_manufact_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS _w0#22] (23) Exchange -Input [3]: [i_manufact_id#5, sum_sales#24, _w0#25] -Arguments: hashpartitioning(i_manufact_id#5, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [3]: [i_manufact_id#5, sum_sales#21, _w0#22] +Arguments: hashpartitioning(i_manufact_id#5, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 6] -Input [3]: [i_manufact_id#5, sum_sales#24, _w0#25] +Input [3]: [i_manufact_id#5, sum_sales#21, _w0#22] Arguments: [i_manufact_id#5 ASC NULLS FIRST], false, 0 (25) Window -Input [3]: [i_manufact_id#5, sum_sales#24, _w0#25] -Arguments: [avg(_w0#25) windowspecdefinition(i_manufact_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_quarterly_sales#27], [i_manufact_id#5] +Input [3]: [i_manufact_id#5, sum_sales#21, _w0#22] +Arguments: [avg(_w0#22) windowspecdefinition(i_manufact_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_quarterly_sales#23], [i_manufact_id#5] (26) Filter [codegen id : 7] -Input [4]: [i_manufact_id#5, sum_sales#24, _w0#25, avg_quarterly_sales#27] -Condition : (isnotnull(avg_quarterly_sales#27) AND ((avg_quarterly_sales#27 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#24 as decimal(22,6))) - promote_precision(cast(avg_quarterly_sales#27 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_quarterly_sales#27 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) +Input [4]: [i_manufact_id#5, sum_sales#21, _w0#22, avg_quarterly_sales#23] +Condition : (isnotnull(avg_quarterly_sales#23) AND ((avg_quarterly_sales#23 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_quarterly_sales#23 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_quarterly_sales#23 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) (27) Project [codegen id : 7] -Output [3]: [i_manufact_id#5, sum_sales#24, avg_quarterly_sales#27] -Input [4]: [i_manufact_id#5, sum_sales#24, _w0#25, avg_quarterly_sales#27] +Output [3]: [i_manufact_id#5, sum_sales#21, avg_quarterly_sales#23] +Input [4]: [i_manufact_id#5, sum_sales#21, _w0#22, avg_quarterly_sales#23] (28) TakeOrderedAndProject -Input [3]: [i_manufact_id#5, sum_sales#24, avg_quarterly_sales#27] -Arguments: 100, [avg_quarterly_sales#27 ASC NULLS FIRST, sum_sales#24 ASC NULLS FIRST, i_manufact_id#5 ASC NULLS FIRST], [i_manufact_id#5, sum_sales#24, avg_quarterly_sales#27] +Input [3]: [i_manufact_id#5, sum_sales#21, avg_quarterly_sales#23] +Arguments: 100, [avg_quarterly_sales#23 ASC NULLS FIRST, sum_sales#21 ASC NULLS FIRST, i_manufact_id#5 ASC NULLS FIRST], [i_manufact_id#5, sum_sales#21, avg_quarterly_sales#23] ===== Subqueries ===== @@ -167,25 +167,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [3]: [d_date_sk#16, d_month_seq#28, d_qoy#17] +Output [3]: [d_date_sk#15, d_month_seq#24, d_qoy#16] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_month_seq, [1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223]), GreaterThanOrEqual(d_date_sk,2451911), LessThanOrEqual(d_date_sk,2452275), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#16, d_month_seq#28, d_qoy#17] +Input [3]: [d_date_sk#15, d_month_seq#24, d_qoy#16] (31) Filter [codegen id : 1] -Input [3]: [d_date_sk#16, d_month_seq#28, d_qoy#17] -Condition : (((d_month_seq#28 INSET 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223 AND (d_date_sk#16 >= 2451911)) AND (d_date_sk#16 <= 2452275)) AND isnotnull(d_date_sk#16)) +Input [3]: [d_date_sk#15, d_month_seq#24, d_qoy#16] +Condition : (((d_month_seq#24 INSET 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223 AND (d_date_sk#15 >= 2451911)) AND (d_date_sk#15 <= 2452275)) AND isnotnull(d_date_sk#15)) (32) Project [codegen id : 1] -Output [2]: [d_date_sk#16, d_qoy#17] -Input [3]: [d_date_sk#16, d_month_seq#28, d_qoy#17] +Output [2]: [d_date_sk#15, d_qoy#16] +Input [3]: [d_date_sk#15, d_month_seq#24, d_qoy#16] (33) BroadcastExchange -Input [2]: [d_date_sk#16, d_qoy#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#29] +Input [2]: [d_date_sk#15, d_qoy#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55.sf100/explain.txt index df4d94f40bc16..1bed4285522f5 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55.sf100/explain.txt @@ -42,88 +42,88 @@ Input [3]: [d_date_sk#1, d_year#2, d_moy#3] (5) BroadcastExchange Input [1]: [d_date_sk#1] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#4] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.store_sales -Output [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7] +Output [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#7), (ss_sold_date_sk#7 >= 2452215), (ss_sold_date_sk#7 <= 2452244), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ss_sold_date_sk#6), (ss_sold_date_sk#6 >= 2452215), (ss_sold_date_sk#6 <= 2452244), dynamicpruningexpression(ss_sold_date_sk#6 IN dynamicpruning#7)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (7) ColumnarToRow -Input [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7] +Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] (8) Filter -Input [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7] -Condition : isnotnull(ss_item_sk#5) +Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] +Condition : isnotnull(ss_item_sk#4) (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] -Right keys [1]: [ss_sold_date_sk#7] +Right keys [1]: [ss_sold_date_sk#6] Join condition: None (10) Project [codegen id : 3] -Output [2]: [ss_item_sk#5, ss_ext_sales_price#6] -Input [4]: [d_date_sk#1, ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7] +Output [2]: [ss_item_sk#4, ss_ext_sales_price#5] +Input [4]: [d_date_sk#1, ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] (11) Scan parquet default.item -Output [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12] +Output [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,48), IsNotNull(i_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12] +Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] (13) Filter [codegen id : 2] -Input [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12] -Condition : ((isnotnull(i_manager_id#12) AND (i_manager_id#12 = 48)) AND isnotnull(i_item_sk#9)) +Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] +Condition : ((isnotnull(i_manager_id#11) AND (i_manager_id#11 = 48)) AND isnotnull(i_item_sk#8)) (14) Project [codegen id : 2] -Output [3]: [i_item_sk#9, i_brand_id#10, i_brand#11] -Input [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12] +Output [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] +Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] (15) BroadcastExchange -Input [3]: [i_item_sk#9, i_brand_id#10, i_brand#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] +Input [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [ss_item_sk#5] -Right keys [1]: [i_item_sk#9] +Left keys [1]: [ss_item_sk#4] +Right keys [1]: [i_item_sk#8] Join condition: None (17) Project [codegen id : 3] -Output [3]: [ss_ext_sales_price#6, i_brand_id#10, i_brand#11] -Input [5]: [ss_item_sk#5, ss_ext_sales_price#6, i_item_sk#9, i_brand_id#10, i_brand#11] +Output [3]: [ss_ext_sales_price#5, i_brand_id#9, i_brand#10] +Input [5]: [ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#8, i_brand_id#9, i_brand#10] (18) HashAggregate [codegen id : 3] -Input [3]: [ss_ext_sales_price#6, i_brand_id#10, i_brand#11] -Keys [2]: [i_brand#11, i_brand_id#10] -Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#6))] -Aggregate Attributes [1]: [sum#14] -Results [3]: [i_brand#11, i_brand_id#10, sum#15] +Input [3]: [ss_ext_sales_price#5, i_brand_id#9, i_brand#10] +Keys [2]: [i_brand#10, i_brand_id#9] +Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))] +Aggregate Attributes [1]: [sum#12] +Results [3]: [i_brand#10, i_brand_id#9, sum#13] (19) Exchange -Input [3]: [i_brand#11, i_brand_id#10, sum#15] -Arguments: hashpartitioning(i_brand#11, i_brand_id#10, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [3]: [i_brand#10, i_brand_id#9, sum#13] +Arguments: hashpartitioning(i_brand#10, i_brand_id#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [3]: [i_brand#11, i_brand_id#10, sum#15] -Keys [2]: [i_brand#11, i_brand_id#10] -Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#6))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#6))#17] -Results [3]: [i_brand_id#10 AS brand_id#18, i_brand#11 AS brand#19, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#17,17,2) AS ext_price#20] +Input [3]: [i_brand#10, i_brand_id#9, sum#13] +Keys [2]: [i_brand#10, i_brand_id#9] +Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#14] +Results [3]: [i_brand_id#9 AS brand_id#15, i_brand#10 AS brand#16, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#14,17,2) AS ext_price#17] (21) TakeOrderedAndProject -Input [3]: [brand_id#18, brand#19, ext_price#20] -Arguments: 100, [ext_price#20 DESC NULLS LAST, brand_id#18 ASC NULLS FIRST], [brand_id#18, brand#19, ext_price#20] +Input [3]: [brand_id#15, brand#16, ext_price#17] +Arguments: 100, [ext_price#17 DESC NULLS LAST, brand_id#15 ASC NULLS FIRST], [brand_id#15, brand#16, ext_price#17] ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 +Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#6 IN dynamicpruning#7 ReusedExchange (22) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55/explain.txt index a10fc3256db33..c9a41a6596900 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55/explain.txt @@ -57,7 +57,7 @@ Condition : isnotnull(ss_item_sk#4) (8) BroadcastExchange Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] @@ -69,55 +69,55 @@ Output [2]: [ss_item_sk#4, ss_ext_sales_price#5] Input [4]: [d_date_sk#1, ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] (11) Scan parquet default.item -Output [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] +Output [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,48), IsNotNull(i_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] (13) Filter [codegen id : 2] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] -Condition : ((isnotnull(i_manager_id#11) AND (i_manager_id#11 = 48)) AND isnotnull(i_item_sk#8)) +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] +Condition : ((isnotnull(i_manager_id#10) AND (i_manager_id#10 = 48)) AND isnotnull(i_item_sk#7)) (14) Project [codegen id : 2] -Output [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] +Output [3]: [i_item_sk#7, i_brand_id#8, i_brand#9] +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] (15) BroadcastExchange -Input [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Input [3]: [i_item_sk#7, i_brand_id#8, i_brand#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#4] -Right keys [1]: [i_item_sk#8] +Right keys [1]: [i_item_sk#7] Join condition: None (17) Project [codegen id : 3] -Output [3]: [ss_ext_sales_price#5, i_brand_id#9, i_brand#10] -Input [5]: [ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#8, i_brand_id#9, i_brand#10] +Output [3]: [ss_ext_sales_price#5, i_brand_id#8, i_brand#9] +Input [5]: [ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#7, i_brand_id#8, i_brand#9] (18) HashAggregate [codegen id : 3] -Input [3]: [ss_ext_sales_price#5, i_brand_id#9, i_brand#10] -Keys [2]: [i_brand#10, i_brand_id#9] +Input [3]: [ss_ext_sales_price#5, i_brand_id#8, i_brand#9] +Keys [2]: [i_brand#9, i_brand_id#8] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum#13] -Results [3]: [i_brand#10, i_brand_id#9, sum#14] +Aggregate Attributes [1]: [sum#11] +Results [3]: [i_brand#9, i_brand_id#8, sum#12] (19) Exchange -Input [3]: [i_brand#10, i_brand_id#9, sum#14] -Arguments: hashpartitioning(i_brand#10, i_brand_id#9, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [3]: [i_brand#9, i_brand_id#8, sum#12] +Arguments: hashpartitioning(i_brand#9, i_brand_id#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [3]: [i_brand#10, i_brand_id#9, sum#14] -Keys [2]: [i_brand#10, i_brand_id#9] +Input [3]: [i_brand#9, i_brand_id#8, sum#12] +Keys [2]: [i_brand#9, i_brand_id#8] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#16] -Results [3]: [i_brand_id#9 AS brand_id#17, i_brand#10 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#16,17,2) AS ext_price#19] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#13] +Results [3]: [i_brand_id#8 AS brand_id#14, i_brand#9 AS brand#15, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#13,17,2) AS ext_price#16] (21) TakeOrderedAndProject -Input [3]: [brand_id#17, brand#18, ext_price#19] -Arguments: 100, [ext_price#19 DESC NULLS LAST, brand_id#17 ASC NULLS FIRST], [brand_id#17, brand#18, ext_price#19] +Input [3]: [brand_id#14, brand#15, ext_price#16] +Arguments: 100, [ext_price#16 DESC NULLS LAST, brand_id#14 ASC NULLS FIRST], [brand_id#14, brand#15, ext_price#16] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59.sf100/explain.txt index 10deecf766fe8..1637f847f418a 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59.sf100/explain.txt @@ -86,7 +86,7 @@ Condition : ((isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) AND might_cont (7) BroadcastExchange Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 2] Left keys [1]: [ss_sold_date_sk#3] @@ -101,77 +101,77 @@ Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_w Input [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [7]: [sum#10, sum#11, sum#12, sum#13, sum#14, sum#15, sum#16] -Results [9]: [d_week_seq#5, ss_store_sk#1, sum#17, sum#18, sum#19, sum#20, sum#21, sum#22, sum#23] +Aggregate Attributes [7]: [sum#9, sum#10, sum#11, sum#12, sum#13, sum#14, sum#15] +Results [9]: [d_week_seq#5, ss_store_sk#1, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21, sum#22] (11) Exchange -Input [9]: [d_week_seq#5, ss_store_sk#1, sum#17, sum#18, sum#19, sum#20, sum#21, sum#22, sum#23] -Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [9]: [d_week_seq#5, ss_store_sk#1, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21, sum#22] +Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) HashAggregate [codegen id : 10] -Input [9]: [d_week_seq#5, ss_store_sk#1, sum#17, sum#18, sum#19, sum#20, sum#21, sum#22, sum#23] +Input [9]: [d_week_seq#5, ss_store_sk#1, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21, sum#22] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#31] -Results [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#25,17,2) AS sun_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#26,17,2) AS mon_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#27,17,2) AS tue_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#28,17,2) AS wed_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#29,17,2) AS thu_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#30,17,2) AS fri_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#31,17,2) AS sat_sales#38] +Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29] +Results [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#25,17,2) AS tue_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26,17,2) AS wed_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27,17,2) AS thu_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28,17,2) AS fri_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29,17,2) AS sat_sales#36] (13) Scan parquet default.store -Output [3]: [s_store_sk#39, s_store_id#40, s_store_name#41] +Output [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [3]: [s_store_sk#39, s_store_id#40, s_store_name#41] +Input [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] (15) Filter [codegen id : 3] -Input [3]: [s_store_sk#39, s_store_id#40, s_store_name#41] -Condition : (isnotnull(s_store_sk#39) AND isnotnull(s_store_id#40)) +Input [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] +Condition : (isnotnull(s_store_sk#37) AND isnotnull(s_store_id#38)) (16) BroadcastExchange -Input [3]: [s_store_sk#39, s_store_id#40, s_store_name#41] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#42] +Input [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (17) BroadcastHashJoin [codegen id : 10] Left keys [1]: [ss_store_sk#1] -Right keys [1]: [s_store_sk#39] +Right keys [1]: [s_store_sk#37] Join condition: None (18) Project [codegen id : 10] -Output [10]: [d_week_seq#5, sun_sales#32, mon_sales#33, tue_sales#34, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38, s_store_id#40, s_store_name#41] -Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#32, mon_sales#33, tue_sales#34, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38, s_store_sk#39, s_store_id#40, s_store_name#41] +Output [10]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#38, s_store_name#39] +Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#37, s_store_id#38, s_store_name#39] (19) Scan parquet default.date_dim -Output [2]: [d_month_seq#43, d_week_seq#44] +Output [2]: [d_month_seq#40, d_week_seq#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1185), LessThanOrEqual(d_month_seq,1196), IsNotNull(d_week_seq)] ReadSchema: struct (20) ColumnarToRow [codegen id : 4] -Input [2]: [d_month_seq#43, d_week_seq#44] +Input [2]: [d_month_seq#40, d_week_seq#41] (21) Filter [codegen id : 4] -Input [2]: [d_month_seq#43, d_week_seq#44] -Condition : (((isnotnull(d_month_seq#43) AND (d_month_seq#43 >= 1185)) AND (d_month_seq#43 <= 1196)) AND isnotnull(d_week_seq#44)) +Input [2]: [d_month_seq#40, d_week_seq#41] +Condition : (((isnotnull(d_month_seq#40) AND (d_month_seq#40 >= 1185)) AND (d_month_seq#40 <= 1196)) AND isnotnull(d_week_seq#41)) (22) Project [codegen id : 4] -Output [1]: [d_week_seq#44] -Input [2]: [d_month_seq#43, d_week_seq#44] +Output [1]: [d_week_seq#41] +Input [2]: [d_month_seq#40, d_week_seq#41] (23) BroadcastExchange -Input [1]: [d_week_seq#44] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#45] +Input [1]: [d_week_seq#41] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (24) BroadcastHashJoin [codegen id : 10] Left keys [1]: [d_week_seq#5] -Right keys [1]: [d_week_seq#44] +Right keys [1]: [d_week_seq#41] Join condition: None (25) Project [codegen id : 10] -Output [10]: [s_store_name#41 AS s_store_name1#46, d_week_seq#5 AS d_week_seq1#47, s_store_id#40 AS s_store_id1#48, sun_sales#32 AS sun_sales1#49, mon_sales#33 AS mon_sales1#50, tue_sales#34 AS tue_sales1#51, wed_sales#35 AS wed_sales1#52, thu_sales#36 AS thu_sales1#53, fri_sales#37 AS fri_sales1#54, sat_sales#38 AS sat_sales1#55] -Input [11]: [d_week_seq#5, sun_sales#32, mon_sales#33, tue_sales#34, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38, s_store_id#40, s_store_name#41, d_week_seq#44] +Output [10]: [s_store_name#39 AS s_store_name1#42, d_week_seq#5 AS d_week_seq1#43, s_store_id#38 AS s_store_id1#44, sun_sales#30 AS sun_sales1#45, mon_sales#31 AS mon_sales1#46, tue_sales#32 AS tue_sales1#47, wed_sales#33 AS wed_sales1#48, thu_sales#34 AS thu_sales1#49, fri_sales#35 AS fri_sales1#50, sat_sales#36 AS sat_sales1#51] +Input [11]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#38, s_store_name#39, d_week_seq#41] (26) Scan parquet default.store_sales Output [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3] @@ -200,11 +200,11 @@ Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] (31) Filter [codegen id : 5] Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Condition : ((isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) AND might_contain(Subquery scalar-subquery#56, [id=#57], xxhash64(d_week_seq#5, 42))) +Condition : ((isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) AND might_contain(Subquery scalar-subquery#52, [id=#53], xxhash64(d_week_seq#5, 42))) (32) BroadcastExchange Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#58] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (33) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_sold_date_sk#3] @@ -219,94 +219,94 @@ Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_w Input [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [6]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [6]: [sum#59, sum#60, sum#61, sum#62, sum#63, sum#64] -Results [8]: [d_week_seq#5, ss_store_sk#1, sum#65, sum#66, sum#67, sum#68, sum#69, sum#70] +Aggregate Attributes [6]: [sum#54, sum#55, sum#56, sum#57, sum#58, sum#59] +Results [8]: [d_week_seq#5, ss_store_sk#1, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65] (36) Exchange -Input [8]: [d_week_seq#5, ss_store_sk#1, sum#65, sum#66, sum#67, sum#68, sum#69, sum#70] -Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [id=#71] +Input [8]: [d_week_seq#5, ss_store_sk#1, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65] +Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=6] (37) HashAggregate [codegen id : 9] -Input [8]: [d_week_seq#5, ss_store_sk#1, sum#65, sum#66, sum#67, sum#68, sum#69, sum#70] +Input [8]: [d_week_seq#5, ss_store_sk#1, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#31] -Results [8]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#25,17,2) AS sun_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#26,17,2) AS mon_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#28,17,2) AS wed_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#29,17,2) AS thu_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#30,17,2) AS fri_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#31,17,2) AS sat_sales#38] +Aggregate Attributes [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29] +Results [8]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26,17,2) AS wed_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27,17,2) AS thu_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28,17,2) AS fri_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29,17,2) AS sat_sales#36] (38) Scan parquet default.store -Output [2]: [s_store_sk#72, s_store_id#73] +Output [2]: [s_store_sk#66, s_store_id#67] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct (39) ColumnarToRow [codegen id : 7] -Input [2]: [s_store_sk#72, s_store_id#73] +Input [2]: [s_store_sk#66, s_store_id#67] (40) Filter [codegen id : 7] -Input [2]: [s_store_sk#72, s_store_id#73] -Condition : (isnotnull(s_store_sk#72) AND isnotnull(s_store_id#73)) +Input [2]: [s_store_sk#66, s_store_id#67] +Condition : (isnotnull(s_store_sk#66) AND isnotnull(s_store_id#67)) (41) BroadcastExchange -Input [2]: [s_store_sk#72, s_store_id#73] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#74] +Input [2]: [s_store_sk#66, s_store_id#67] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (42) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#1] -Right keys [1]: [s_store_sk#72] +Right keys [1]: [s_store_sk#66] Join condition: None (43) Project [codegen id : 9] -Output [8]: [d_week_seq#5, sun_sales#32, mon_sales#33, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38, s_store_id#73] -Input [10]: [d_week_seq#5, ss_store_sk#1, sun_sales#32, mon_sales#33, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38, s_store_sk#72, s_store_id#73] +Output [8]: [d_week_seq#5, sun_sales#30, mon_sales#31, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#67] +Input [10]: [d_week_seq#5, ss_store_sk#1, sun_sales#30, mon_sales#31, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#66, s_store_id#67] (44) Scan parquet default.date_dim -Output [2]: [d_month_seq#75, d_week_seq#76] +Output [2]: [d_month_seq#68, d_week_seq#69] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1197), LessThanOrEqual(d_month_seq,1208), IsNotNull(d_week_seq)] ReadSchema: struct (45) ColumnarToRow [codegen id : 8] -Input [2]: [d_month_seq#75, d_week_seq#76] +Input [2]: [d_month_seq#68, d_week_seq#69] (46) Filter [codegen id : 8] -Input [2]: [d_month_seq#75, d_week_seq#76] -Condition : (((isnotnull(d_month_seq#75) AND (d_month_seq#75 >= 1197)) AND (d_month_seq#75 <= 1208)) AND isnotnull(d_week_seq#76)) +Input [2]: [d_month_seq#68, d_week_seq#69] +Condition : (((isnotnull(d_month_seq#68) AND (d_month_seq#68 >= 1197)) AND (d_month_seq#68 <= 1208)) AND isnotnull(d_week_seq#69)) (47) Project [codegen id : 8] -Output [1]: [d_week_seq#76] -Input [2]: [d_month_seq#75, d_week_seq#76] +Output [1]: [d_week_seq#69] +Input [2]: [d_month_seq#68, d_week_seq#69] (48) BroadcastExchange -Input [1]: [d_week_seq#76] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#77] +Input [1]: [d_week_seq#69] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] (49) BroadcastHashJoin [codegen id : 9] Left keys [1]: [d_week_seq#5] -Right keys [1]: [d_week_seq#76] +Right keys [1]: [d_week_seq#69] Join condition: None (50) Project [codegen id : 9] -Output [8]: [d_week_seq#5 AS d_week_seq2#78, s_store_id#73 AS s_store_id2#79, sun_sales#32 AS sun_sales2#80, mon_sales#33 AS mon_sales2#81, wed_sales#35 AS wed_sales2#82, thu_sales#36 AS thu_sales2#83, fri_sales#37 AS fri_sales2#84, sat_sales#38 AS sat_sales2#85] -Input [9]: [d_week_seq#5, sun_sales#32, mon_sales#33, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38, s_store_id#73, d_week_seq#76] +Output [8]: [d_week_seq#5 AS d_week_seq2#70, s_store_id#67 AS s_store_id2#71, sun_sales#30 AS sun_sales2#72, mon_sales#31 AS mon_sales2#73, wed_sales#33 AS wed_sales2#74, thu_sales#34 AS thu_sales2#75, fri_sales#35 AS fri_sales2#76, sat_sales#36 AS sat_sales2#77] +Input [9]: [d_week_seq#5, sun_sales#30, mon_sales#31, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#67, d_week_seq#69] (51) BroadcastExchange -Input [8]: [d_week_seq2#78, s_store_id2#79, sun_sales2#80, mon_sales2#81, wed_sales2#82, thu_sales2#83, fri_sales2#84, sat_sales2#85] -Arguments: HashedRelationBroadcastMode(List(input[1, string, true], (input[0, int, true] - 52)),false), [id=#86] +Input [8]: [d_week_seq2#70, s_store_id2#71, sun_sales2#72, mon_sales2#73, wed_sales2#74, thu_sales2#75, fri_sales2#76, sat_sales2#77] +Arguments: HashedRelationBroadcastMode(List(input[1, string, true], (input[0, int, true] - 52)),false), [plan_id=9] (52) BroadcastHashJoin [codegen id : 10] -Left keys [2]: [s_store_id1#48, d_week_seq1#47] -Right keys [2]: [s_store_id2#79, (d_week_seq2#78 - 52)] +Left keys [2]: [s_store_id1#44, d_week_seq1#43] +Right keys [2]: [s_store_id2#71, (d_week_seq2#70 - 52)] Join condition: None (53) Project [codegen id : 10] -Output [10]: [s_store_name1#46, s_store_id1#48, d_week_seq1#47, CheckOverflow((promote_precision(sun_sales1#49) / promote_precision(sun_sales2#80)), DecimalType(37,20)) AS (sun_sales1 / sun_sales2)#87, CheckOverflow((promote_precision(mon_sales1#50) / promote_precision(mon_sales2#81)), DecimalType(37,20)) AS (mon_sales1 / mon_sales2)#88, CheckOverflow((promote_precision(tue_sales1#51) / promote_precision(tue_sales1#51)), DecimalType(37,20)) AS (tue_sales1 / tue_sales1)#89, CheckOverflow((promote_precision(wed_sales1#52) / promote_precision(wed_sales2#82)), DecimalType(37,20)) AS (wed_sales1 / wed_sales2)#90, CheckOverflow((promote_precision(thu_sales1#53) / promote_precision(thu_sales2#83)), DecimalType(37,20)) AS (thu_sales1 / thu_sales2)#91, CheckOverflow((promote_precision(fri_sales1#54) / promote_precision(fri_sales2#84)), DecimalType(37,20)) AS (fri_sales1 / fri_sales2)#92, CheckOverflow((promote_precision(sat_sales1#55) / promote_precision(sat_sales2#85)), DecimalType(37,20)) AS (sat_sales1 / sat_sales2)#93] -Input [18]: [s_store_name1#46, d_week_seq1#47, s_store_id1#48, sun_sales1#49, mon_sales1#50, tue_sales1#51, wed_sales1#52, thu_sales1#53, fri_sales1#54, sat_sales1#55, d_week_seq2#78, s_store_id2#79, sun_sales2#80, mon_sales2#81, wed_sales2#82, thu_sales2#83, fri_sales2#84, sat_sales2#85] +Output [10]: [s_store_name1#42, s_store_id1#44, d_week_seq1#43, CheckOverflow((promote_precision(sun_sales1#45) / promote_precision(sun_sales2#72)), DecimalType(37,20)) AS (sun_sales1 / sun_sales2)#78, CheckOverflow((promote_precision(mon_sales1#46) / promote_precision(mon_sales2#73)), DecimalType(37,20)) AS (mon_sales1 / mon_sales2)#79, CheckOverflow((promote_precision(tue_sales1#47) / promote_precision(tue_sales1#47)), DecimalType(37,20)) AS (tue_sales1 / tue_sales1)#80, CheckOverflow((promote_precision(wed_sales1#48) / promote_precision(wed_sales2#74)), DecimalType(37,20)) AS (wed_sales1 / wed_sales2)#81, CheckOverflow((promote_precision(thu_sales1#49) / promote_precision(thu_sales2#75)), DecimalType(37,20)) AS (thu_sales1 / thu_sales2)#82, CheckOverflow((promote_precision(fri_sales1#50) / promote_precision(fri_sales2#76)), DecimalType(37,20)) AS (fri_sales1 / fri_sales2)#83, CheckOverflow((promote_precision(sat_sales1#51) / promote_precision(sat_sales2#77)), DecimalType(37,20)) AS (sat_sales1 / sat_sales2)#84] +Input [18]: [s_store_name1#42, d_week_seq1#43, s_store_id1#44, sun_sales1#45, mon_sales1#46, tue_sales1#47, wed_sales1#48, thu_sales1#49, fri_sales1#50, sat_sales1#51, d_week_seq2#70, s_store_id2#71, sun_sales2#72, mon_sales2#73, wed_sales2#74, thu_sales2#75, fri_sales2#76, sat_sales2#77] (54) TakeOrderedAndProject -Input [10]: [s_store_name1#46, s_store_id1#48, d_week_seq1#47, (sun_sales1 / sun_sales2)#87, (mon_sales1 / mon_sales2)#88, (tue_sales1 / tue_sales1)#89, (wed_sales1 / wed_sales2)#90, (thu_sales1 / thu_sales2)#91, (fri_sales1 / fri_sales2)#92, (sat_sales1 / sat_sales2)#93] -Arguments: 100, [s_store_name1#46 ASC NULLS FIRST, s_store_id1#48 ASC NULLS FIRST, d_week_seq1#47 ASC NULLS FIRST], [s_store_name1#46, s_store_id1#48, d_week_seq1#47, (sun_sales1 / sun_sales2)#87, (mon_sales1 / mon_sales2)#88, (tue_sales1 / tue_sales1)#89, (wed_sales1 / wed_sales2)#90, (thu_sales1 / thu_sales2)#91, (fri_sales1 / fri_sales2)#92, (sat_sales1 / sat_sales2)#93] +Input [10]: [s_store_name1#42, s_store_id1#44, d_week_seq1#43, (sun_sales1 / sun_sales2)#78, (mon_sales1 / mon_sales2)#79, (tue_sales1 / tue_sales1)#80, (wed_sales1 / wed_sales2)#81, (thu_sales1 / thu_sales2)#82, (fri_sales1 / fri_sales2)#83, (sat_sales1 / sat_sales2)#84] +Arguments: 100, [s_store_name1#42 ASC NULLS FIRST, s_store_id1#44 ASC NULLS FIRST, d_week_seq1#43 ASC NULLS FIRST], [s_store_name1#42, s_store_id1#44, d_week_seq1#43, (sun_sales1 / sun_sales2)#78, (mon_sales1 / mon_sales2)#79, (tue_sales1 / tue_sales1)#80, (wed_sales1 / wed_sales2)#81, (thu_sales1 / thu_sales2)#82, (fri_sales1 / fri_sales2)#83, (sat_sales1 / sat_sales2)#84] ===== Subqueries ===== @@ -321,42 +321,42 @@ ObjectHashAggregate (61) (55) Scan parquet default.date_dim -Output [2]: [d_month_seq#43, d_week_seq#44] +Output [2]: [d_month_seq#40, d_week_seq#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1185), LessThanOrEqual(d_month_seq,1196), IsNotNull(d_week_seq)] ReadSchema: struct (56) ColumnarToRow [codegen id : 1] -Input [2]: [d_month_seq#43, d_week_seq#44] +Input [2]: [d_month_seq#40, d_week_seq#41] (57) Filter [codegen id : 1] -Input [2]: [d_month_seq#43, d_week_seq#44] -Condition : (((isnotnull(d_month_seq#43) AND (d_month_seq#43 >= 1185)) AND (d_month_seq#43 <= 1196)) AND isnotnull(d_week_seq#44)) +Input [2]: [d_month_seq#40, d_week_seq#41] +Condition : (((isnotnull(d_month_seq#40) AND (d_month_seq#40 >= 1185)) AND (d_month_seq#40 <= 1196)) AND isnotnull(d_week_seq#41)) (58) Project [codegen id : 1] -Output [1]: [d_week_seq#44] -Input [2]: [d_month_seq#43, d_week_seq#44] +Output [1]: [d_week_seq#41] +Input [2]: [d_month_seq#40, d_week_seq#41] (59) ObjectHashAggregate -Input [1]: [d_week_seq#44] +Input [1]: [d_week_seq#41] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#44, 42), 335, 2680, 0, 0)] -Aggregate Attributes [1]: [buf#94] -Results [1]: [buf#95] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#41, 42), 335, 2680, 0, 0)] +Aggregate Attributes [1]: [buf#85] +Results [1]: [buf#86] (60) Exchange -Input [1]: [buf#95] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#96] +Input [1]: [buf#86] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10] (61) ObjectHashAggregate -Input [1]: [buf#95] +Input [1]: [buf#86] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#44, 42), 335, 2680, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#44, 42), 335, 2680, 0, 0)#97] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#44, 42), 335, 2680, 0, 0)#97 AS bloomFilter#98] +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#41, 42), 335, 2680, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#41, 42), 335, 2680, 0, 0)#87] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#41, 42), 335, 2680, 0, 0)#87 AS bloomFilter#88] -Subquery:2 Hosting operator id = 31 Hosting Expression = Subquery scalar-subquery#56, [id=#57] +Subquery:2 Hosting operator id = 31 Hosting Expression = Subquery scalar-subquery#52, [id=#53] ObjectHashAggregate (68) +- Exchange (67) +- ObjectHashAggregate (66) @@ -367,39 +367,39 @@ ObjectHashAggregate (68) (62) Scan parquet default.date_dim -Output [2]: [d_month_seq#75, d_week_seq#76] +Output [2]: [d_month_seq#68, d_week_seq#69] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1197), LessThanOrEqual(d_month_seq,1208), IsNotNull(d_week_seq)] ReadSchema: struct (63) ColumnarToRow [codegen id : 1] -Input [2]: [d_month_seq#75, d_week_seq#76] +Input [2]: [d_month_seq#68, d_week_seq#69] (64) Filter [codegen id : 1] -Input [2]: [d_month_seq#75, d_week_seq#76] -Condition : (((isnotnull(d_month_seq#75) AND (d_month_seq#75 >= 1197)) AND (d_month_seq#75 <= 1208)) AND isnotnull(d_week_seq#76)) +Input [2]: [d_month_seq#68, d_week_seq#69] +Condition : (((isnotnull(d_month_seq#68) AND (d_month_seq#68 >= 1197)) AND (d_month_seq#68 <= 1208)) AND isnotnull(d_week_seq#69)) (65) Project [codegen id : 1] -Output [1]: [d_week_seq#76] -Input [2]: [d_month_seq#75, d_week_seq#76] +Output [1]: [d_week_seq#69] +Input [2]: [d_month_seq#68, d_week_seq#69] (66) ObjectHashAggregate -Input [1]: [d_week_seq#76] +Input [1]: [d_week_seq#69] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#76, 42), 335, 2680, 0, 0)] -Aggregate Attributes [1]: [buf#99] -Results [1]: [buf#100] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#69, 42), 335, 2680, 0, 0)] +Aggregate Attributes [1]: [buf#89] +Results [1]: [buf#90] (67) Exchange -Input [1]: [buf#100] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#101] +Input [1]: [buf#90] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11] (68) ObjectHashAggregate -Input [1]: [buf#100] +Input [1]: [buf#90] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#76, 42), 335, 2680, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#76, 42), 335, 2680, 0, 0)#102] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#76, 42), 335, 2680, 0, 0)#102 AS bloomFilter#103] +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#69, 42), 335, 2680, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#69, 42), 335, 2680, 0, 0)#91] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#69, 42), 335, 2680, 0, 0)#91 AS bloomFilter#92] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59/explain.txt index f260becf18e26..c2e49a39aa6bc 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59/explain.txt @@ -83,7 +83,7 @@ Condition : (isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) (7) BroadcastExchange Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 2] Left keys [1]: [ss_sold_date_sk#3] @@ -98,77 +98,77 @@ Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_w Input [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [7]: [sum#8, sum#9, sum#10, sum#11, sum#12, sum#13, sum#14] -Results [9]: [d_week_seq#5, ss_store_sk#1, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21] +Aggregate Attributes [7]: [sum#7, sum#8, sum#9, sum#10, sum#11, sum#12, sum#13] +Results [9]: [d_week_seq#5, ss_store_sk#1, sum#14, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20] (11) Exchange -Input [9]: [d_week_seq#5, ss_store_sk#1, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21] -Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [9]: [d_week_seq#5, ss_store_sk#1, sum#14, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20] +Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) HashAggregate [codegen id : 10] -Input [9]: [d_week_seq#5, ss_store_sk#1, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21] +Input [9]: [d_week_seq#5, ss_store_sk#1, sum#14, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29] -Results [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#25,17,2) AS tue_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26,17,2) AS wed_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27,17,2) AS thu_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28,17,2) AS fri_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29,17,2) AS sat_sales#36] +Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#21, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#22, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#27] +Results [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#21,17,2) AS sun_sales#28, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#22,17,2) AS mon_sales#29, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#23,17,2) AS tue_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#24,17,2) AS wed_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#25,17,2) AS thu_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#26,17,2) AS fri_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#27,17,2) AS sat_sales#34] (13) Scan parquet default.store -Output [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] +Output [3]: [s_store_sk#35, s_store_id#36, s_store_name#37] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] +Input [3]: [s_store_sk#35, s_store_id#36, s_store_name#37] (15) Filter [codegen id : 3] -Input [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] -Condition : (isnotnull(s_store_sk#37) AND isnotnull(s_store_id#38)) +Input [3]: [s_store_sk#35, s_store_id#36, s_store_name#37] +Condition : (isnotnull(s_store_sk#35) AND isnotnull(s_store_id#36)) (16) BroadcastExchange -Input [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#40] +Input [3]: [s_store_sk#35, s_store_id#36, s_store_name#37] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (17) BroadcastHashJoin [codegen id : 10] Left keys [1]: [ss_store_sk#1] -Right keys [1]: [s_store_sk#37] +Right keys [1]: [s_store_sk#35] Join condition: None (18) Project [codegen id : 10] -Output [10]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#38, s_store_name#39] -Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#37, s_store_id#38, s_store_name#39] +Output [10]: [d_week_seq#5, sun_sales#28, mon_sales#29, tue_sales#30, wed_sales#31, thu_sales#32, fri_sales#33, sat_sales#34, s_store_id#36, s_store_name#37] +Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#28, mon_sales#29, tue_sales#30, wed_sales#31, thu_sales#32, fri_sales#33, sat_sales#34, s_store_sk#35, s_store_id#36, s_store_name#37] (19) Scan parquet default.date_dim -Output [2]: [d_month_seq#41, d_week_seq#42] +Output [2]: [d_month_seq#38, d_week_seq#39] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1185), LessThanOrEqual(d_month_seq,1196), IsNotNull(d_week_seq)] ReadSchema: struct (20) ColumnarToRow [codegen id : 4] -Input [2]: [d_month_seq#41, d_week_seq#42] +Input [2]: [d_month_seq#38, d_week_seq#39] (21) Filter [codegen id : 4] -Input [2]: [d_month_seq#41, d_week_seq#42] -Condition : (((isnotnull(d_month_seq#41) AND (d_month_seq#41 >= 1185)) AND (d_month_seq#41 <= 1196)) AND isnotnull(d_week_seq#42)) +Input [2]: [d_month_seq#38, d_week_seq#39] +Condition : (((isnotnull(d_month_seq#38) AND (d_month_seq#38 >= 1185)) AND (d_month_seq#38 <= 1196)) AND isnotnull(d_week_seq#39)) (22) Project [codegen id : 4] -Output [1]: [d_week_seq#42] -Input [2]: [d_month_seq#41, d_week_seq#42] +Output [1]: [d_week_seq#39] +Input [2]: [d_month_seq#38, d_week_seq#39] (23) BroadcastExchange -Input [1]: [d_week_seq#42] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#43] +Input [1]: [d_week_seq#39] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (24) BroadcastHashJoin [codegen id : 10] Left keys [1]: [d_week_seq#5] -Right keys [1]: [d_week_seq#42] +Right keys [1]: [d_week_seq#39] Join condition: None (25) Project [codegen id : 10] -Output [10]: [s_store_name#39 AS s_store_name1#44, d_week_seq#5 AS d_week_seq1#45, s_store_id#38 AS s_store_id1#46, sun_sales#30 AS sun_sales1#47, mon_sales#31 AS mon_sales1#48, tue_sales#32 AS tue_sales1#49, wed_sales#33 AS wed_sales1#50, thu_sales#34 AS thu_sales1#51, fri_sales#35 AS fri_sales1#52, sat_sales#36 AS sat_sales1#53] -Input [11]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#38, s_store_name#39, d_week_seq#42] +Output [10]: [s_store_name#37 AS s_store_name1#40, d_week_seq#5 AS d_week_seq1#41, s_store_id#36 AS s_store_id1#42, sun_sales#28 AS sun_sales1#43, mon_sales#29 AS mon_sales1#44, tue_sales#30 AS tue_sales1#45, wed_sales#31 AS wed_sales1#46, thu_sales#32 AS thu_sales1#47, fri_sales#33 AS fri_sales1#48, sat_sales#34 AS sat_sales1#49] +Input [11]: [d_week_seq#5, sun_sales#28, mon_sales#29, tue_sales#30, wed_sales#31, thu_sales#32, fri_sales#33, sat_sales#34, s_store_id#36, s_store_name#37, d_week_seq#39] (26) Scan parquet default.store_sales Output [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3] @@ -201,92 +201,92 @@ Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_w Input [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [6]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [6]: [sum#54, sum#55, sum#56, sum#57, sum#58, sum#59] -Results [8]: [d_week_seq#5, ss_store_sk#1, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65] +Aggregate Attributes [6]: [sum#50, sum#51, sum#52, sum#53, sum#54, sum#55] +Results [8]: [d_week_seq#5, ss_store_sk#1, sum#56, sum#57, sum#58, sum#59, sum#60, sum#61] (33) Exchange -Input [8]: [d_week_seq#5, ss_store_sk#1, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65] -Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [id=#66] +Input [8]: [d_week_seq#5, ss_store_sk#1, sum#56, sum#57, sum#58, sum#59, sum#60, sum#61] +Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=5] (34) HashAggregate [codegen id : 9] -Input [8]: [d_week_seq#5, ss_store_sk#1, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65] +Input [8]: [d_week_seq#5, ss_store_sk#1, sum#56, sum#57, sum#58, sum#59, sum#60, sum#61] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29] -Results [8]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26,17,2) AS wed_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27,17,2) AS thu_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28,17,2) AS fri_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29,17,2) AS sat_sales#36] +Aggregate Attributes [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#21, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#22, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#27] +Results [8]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#21,17,2) AS sun_sales#28, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#22,17,2) AS mon_sales#29, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#24,17,2) AS wed_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#25,17,2) AS thu_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#26,17,2) AS fri_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#27,17,2) AS sat_sales#34] (35) Scan parquet default.store -Output [2]: [s_store_sk#67, s_store_id#68] +Output [2]: [s_store_sk#62, s_store_id#63] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct (36) ColumnarToRow [codegen id : 7] -Input [2]: [s_store_sk#67, s_store_id#68] +Input [2]: [s_store_sk#62, s_store_id#63] (37) Filter [codegen id : 7] -Input [2]: [s_store_sk#67, s_store_id#68] -Condition : (isnotnull(s_store_sk#67) AND isnotnull(s_store_id#68)) +Input [2]: [s_store_sk#62, s_store_id#63] +Condition : (isnotnull(s_store_sk#62) AND isnotnull(s_store_id#63)) (38) BroadcastExchange -Input [2]: [s_store_sk#67, s_store_id#68] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#69] +Input [2]: [s_store_sk#62, s_store_id#63] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] (39) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#1] -Right keys [1]: [s_store_sk#67] +Right keys [1]: [s_store_sk#62] Join condition: None (40) Project [codegen id : 9] -Output [8]: [d_week_seq#5, sun_sales#30, mon_sales#31, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#68] -Input [10]: [d_week_seq#5, ss_store_sk#1, sun_sales#30, mon_sales#31, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#67, s_store_id#68] +Output [8]: [d_week_seq#5, sun_sales#28, mon_sales#29, wed_sales#31, thu_sales#32, fri_sales#33, sat_sales#34, s_store_id#63] +Input [10]: [d_week_seq#5, ss_store_sk#1, sun_sales#28, mon_sales#29, wed_sales#31, thu_sales#32, fri_sales#33, sat_sales#34, s_store_sk#62, s_store_id#63] (41) Scan parquet default.date_dim -Output [2]: [d_month_seq#70, d_week_seq#71] +Output [2]: [d_month_seq#64, d_week_seq#65] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1197), LessThanOrEqual(d_month_seq,1208), IsNotNull(d_week_seq)] ReadSchema: struct (42) ColumnarToRow [codegen id : 8] -Input [2]: [d_month_seq#70, d_week_seq#71] +Input [2]: [d_month_seq#64, d_week_seq#65] (43) Filter [codegen id : 8] -Input [2]: [d_month_seq#70, d_week_seq#71] -Condition : (((isnotnull(d_month_seq#70) AND (d_month_seq#70 >= 1197)) AND (d_month_seq#70 <= 1208)) AND isnotnull(d_week_seq#71)) +Input [2]: [d_month_seq#64, d_week_seq#65] +Condition : (((isnotnull(d_month_seq#64) AND (d_month_seq#64 >= 1197)) AND (d_month_seq#64 <= 1208)) AND isnotnull(d_week_seq#65)) (44) Project [codegen id : 8] -Output [1]: [d_week_seq#71] -Input [2]: [d_month_seq#70, d_week_seq#71] +Output [1]: [d_week_seq#65] +Input [2]: [d_month_seq#64, d_week_seq#65] (45) BroadcastExchange -Input [1]: [d_week_seq#71] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#72] +Input [1]: [d_week_seq#65] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] (46) BroadcastHashJoin [codegen id : 9] Left keys [1]: [d_week_seq#5] -Right keys [1]: [d_week_seq#71] +Right keys [1]: [d_week_seq#65] Join condition: None (47) Project [codegen id : 9] -Output [8]: [d_week_seq#5 AS d_week_seq2#73, s_store_id#68 AS s_store_id2#74, sun_sales#30 AS sun_sales2#75, mon_sales#31 AS mon_sales2#76, wed_sales#33 AS wed_sales2#77, thu_sales#34 AS thu_sales2#78, fri_sales#35 AS fri_sales2#79, sat_sales#36 AS sat_sales2#80] -Input [9]: [d_week_seq#5, sun_sales#30, mon_sales#31, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#68, d_week_seq#71] +Output [8]: [d_week_seq#5 AS d_week_seq2#66, s_store_id#63 AS s_store_id2#67, sun_sales#28 AS sun_sales2#68, mon_sales#29 AS mon_sales2#69, wed_sales#31 AS wed_sales2#70, thu_sales#32 AS thu_sales2#71, fri_sales#33 AS fri_sales2#72, sat_sales#34 AS sat_sales2#73] +Input [9]: [d_week_seq#5, sun_sales#28, mon_sales#29, wed_sales#31, thu_sales#32, fri_sales#33, sat_sales#34, s_store_id#63, d_week_seq#65] (48) BroadcastExchange -Input [8]: [d_week_seq2#73, s_store_id2#74, sun_sales2#75, mon_sales2#76, wed_sales2#77, thu_sales2#78, fri_sales2#79, sat_sales2#80] -Arguments: HashedRelationBroadcastMode(List(input[1, string, true], (input[0, int, true] - 52)),false), [id=#81] +Input [8]: [d_week_seq2#66, s_store_id2#67, sun_sales2#68, mon_sales2#69, wed_sales2#70, thu_sales2#71, fri_sales2#72, sat_sales2#73] +Arguments: HashedRelationBroadcastMode(List(input[1, string, true], (input[0, int, true] - 52)),false), [plan_id=8] (49) BroadcastHashJoin [codegen id : 10] -Left keys [2]: [s_store_id1#46, d_week_seq1#45] -Right keys [2]: [s_store_id2#74, (d_week_seq2#73 - 52)] +Left keys [2]: [s_store_id1#42, d_week_seq1#41] +Right keys [2]: [s_store_id2#67, (d_week_seq2#66 - 52)] Join condition: None (50) Project [codegen id : 10] -Output [10]: [s_store_name1#44, s_store_id1#46, d_week_seq1#45, CheckOverflow((promote_precision(sun_sales1#47) / promote_precision(sun_sales2#75)), DecimalType(37,20)) AS (sun_sales1 / sun_sales2)#82, CheckOverflow((promote_precision(mon_sales1#48) / promote_precision(mon_sales2#76)), DecimalType(37,20)) AS (mon_sales1 / mon_sales2)#83, CheckOverflow((promote_precision(tue_sales1#49) / promote_precision(tue_sales1#49)), DecimalType(37,20)) AS (tue_sales1 / tue_sales1)#84, CheckOverflow((promote_precision(wed_sales1#50) / promote_precision(wed_sales2#77)), DecimalType(37,20)) AS (wed_sales1 / wed_sales2)#85, CheckOverflow((promote_precision(thu_sales1#51) / promote_precision(thu_sales2#78)), DecimalType(37,20)) AS (thu_sales1 / thu_sales2)#86, CheckOverflow((promote_precision(fri_sales1#52) / promote_precision(fri_sales2#79)), DecimalType(37,20)) AS (fri_sales1 / fri_sales2)#87, CheckOverflow((promote_precision(sat_sales1#53) / promote_precision(sat_sales2#80)), DecimalType(37,20)) AS (sat_sales1 / sat_sales2)#88] -Input [18]: [s_store_name1#44, d_week_seq1#45, s_store_id1#46, sun_sales1#47, mon_sales1#48, tue_sales1#49, wed_sales1#50, thu_sales1#51, fri_sales1#52, sat_sales1#53, d_week_seq2#73, s_store_id2#74, sun_sales2#75, mon_sales2#76, wed_sales2#77, thu_sales2#78, fri_sales2#79, sat_sales2#80] +Output [10]: [s_store_name1#40, s_store_id1#42, d_week_seq1#41, CheckOverflow((promote_precision(sun_sales1#43) / promote_precision(sun_sales2#68)), DecimalType(37,20)) AS (sun_sales1 / sun_sales2)#74, CheckOverflow((promote_precision(mon_sales1#44) / promote_precision(mon_sales2#69)), DecimalType(37,20)) AS (mon_sales1 / mon_sales2)#75, CheckOverflow((promote_precision(tue_sales1#45) / promote_precision(tue_sales1#45)), DecimalType(37,20)) AS (tue_sales1 / tue_sales1)#76, CheckOverflow((promote_precision(wed_sales1#46) / promote_precision(wed_sales2#70)), DecimalType(37,20)) AS (wed_sales1 / wed_sales2)#77, CheckOverflow((promote_precision(thu_sales1#47) / promote_precision(thu_sales2#71)), DecimalType(37,20)) AS (thu_sales1 / thu_sales2)#78, CheckOverflow((promote_precision(fri_sales1#48) / promote_precision(fri_sales2#72)), DecimalType(37,20)) AS (fri_sales1 / fri_sales2)#79, CheckOverflow((promote_precision(sat_sales1#49) / promote_precision(sat_sales2#73)), DecimalType(37,20)) AS (sat_sales1 / sat_sales2)#80] +Input [18]: [s_store_name1#40, d_week_seq1#41, s_store_id1#42, sun_sales1#43, mon_sales1#44, tue_sales1#45, wed_sales1#46, thu_sales1#47, fri_sales1#48, sat_sales1#49, d_week_seq2#66, s_store_id2#67, sun_sales2#68, mon_sales2#69, wed_sales2#70, thu_sales2#71, fri_sales2#72, sat_sales2#73] (51) TakeOrderedAndProject -Input [10]: [s_store_name1#44, s_store_id1#46, d_week_seq1#45, (sun_sales1 / sun_sales2)#82, (mon_sales1 / mon_sales2)#83, (tue_sales1 / tue_sales1)#84, (wed_sales1 / wed_sales2)#85, (thu_sales1 / thu_sales2)#86, (fri_sales1 / fri_sales2)#87, (sat_sales1 / sat_sales2)#88] -Arguments: 100, [s_store_name1#44 ASC NULLS FIRST, s_store_id1#46 ASC NULLS FIRST, d_week_seq1#45 ASC NULLS FIRST], [s_store_name1#44, s_store_id1#46, d_week_seq1#45, (sun_sales1 / sun_sales2)#82, (mon_sales1 / mon_sales2)#83, (tue_sales1 / tue_sales1)#84, (wed_sales1 / wed_sales2)#85, (thu_sales1 / thu_sales2)#86, (fri_sales1 / fri_sales2)#87, (sat_sales1 / sat_sales2)#88] +Input [10]: [s_store_name1#40, s_store_id1#42, d_week_seq1#41, (sun_sales1 / sun_sales2)#74, (mon_sales1 / mon_sales2)#75, (tue_sales1 / tue_sales1)#76, (wed_sales1 / wed_sales2)#77, (thu_sales1 / thu_sales2)#78, (fri_sales1 / fri_sales2)#79, (sat_sales1 / sat_sales2)#80] +Arguments: 100, [s_store_name1#40 ASC NULLS FIRST, s_store_id1#42 ASC NULLS FIRST, d_week_seq1#41 ASC NULLS FIRST], [s_store_name1#40, s_store_id1#42, d_week_seq1#41, (sun_sales1 / sun_sales2)#74, (mon_sales1 / mon_sales2)#75, (tue_sales1 / tue_sales1)#76, (wed_sales1 / wed_sales2)#77, (thu_sales1 / thu_sales2)#78, (fri_sales1 / fri_sales2)#79, (sat_sales1 / sat_sales2)#80] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63.sf100/explain.txt index 698d6f41f8871..8a225052b4ff7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63.sf100/explain.txt @@ -49,116 +49,116 @@ Input [5]: [i_item_sk#1, i_brand#2, i_class#3, i_category#4, i_manager_id#5] (5) BroadcastExchange Input [2]: [i_item_sk#1, i_manager_id#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.store_sales -Output [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] +Output [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#14), (ss_sold_date_sk#14 >= 2452123), (ss_sold_date_sk#14 <= 2452487), dynamicpruningexpression(ss_sold_date_sk#14 IN dynamicpruning#15)] +PartitionFilters: [isnotnull(ss_sold_date_sk#13), (ss_sold_date_sk#13 >= 2452123), (ss_sold_date_sk#13 <= 2452487), dynamicpruningexpression(ss_sold_date_sk#13 IN dynamicpruning#14)] PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (7) ColumnarToRow -Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] +Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] (8) Filter -Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] -Condition : (isnotnull(ss_item_sk#11) AND isnotnull(ss_store_sk#12)) +Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] +Condition : (isnotnull(ss_item_sk#10) AND isnotnull(ss_store_sk#11)) (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] -Right keys [1]: [ss_item_sk#11] +Right keys [1]: [ss_item_sk#10] Join condition: None (10) Project [codegen id : 4] -Output [4]: [i_manager_id#5, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] -Input [6]: [i_item_sk#1, i_manager_id#5, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] +Output [4]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] +Input [6]: [i_item_sk#1, i_manager_id#5, ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] (11) Scan parquet default.store -Output [1]: [s_store_sk#16] +Output [1]: [s_store_sk#15] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [1]: [s_store_sk#16] +Input [1]: [s_store_sk#15] (13) Filter [codegen id : 2] -Input [1]: [s_store_sk#16] -Condition : isnotnull(s_store_sk#16) +Input [1]: [s_store_sk#15] +Condition : isnotnull(s_store_sk#15) (14) BroadcastExchange -Input [1]: [s_store_sk#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#17] +Input [1]: [s_store_sk#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_store_sk#12] -Right keys [1]: [s_store_sk#16] +Left keys [1]: [ss_store_sk#11] +Right keys [1]: [s_store_sk#15] Join condition: None (16) Project [codegen id : 4] -Output [3]: [i_manager_id#5, ss_sales_price#13, ss_sold_date_sk#14] -Input [5]: [i_manager_id#5, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14, s_store_sk#16] +Output [3]: [i_manager_id#5, ss_sales_price#12, ss_sold_date_sk#13] +Input [5]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13, s_store_sk#15] (17) ReusedExchange [Reuses operator id: 33] -Output [2]: [d_date_sk#18, d_moy#19] +Output [2]: [d_date_sk#16, d_moy#17] (18) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#14] -Right keys [1]: [d_date_sk#18] +Left keys [1]: [ss_sold_date_sk#13] +Right keys [1]: [d_date_sk#16] Join condition: None (19) Project [codegen id : 4] -Output [3]: [i_manager_id#5, ss_sales_price#13, d_moy#19] -Input [5]: [i_manager_id#5, ss_sales_price#13, ss_sold_date_sk#14, d_date_sk#18, d_moy#19] +Output [3]: [i_manager_id#5, ss_sales_price#12, d_moy#17] +Input [5]: [i_manager_id#5, ss_sales_price#12, ss_sold_date_sk#13, d_date_sk#16, d_moy#17] (20) HashAggregate [codegen id : 4] -Input [3]: [i_manager_id#5, ss_sales_price#13, d_moy#19] -Keys [2]: [i_manager_id#5, d_moy#19] -Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#13))] -Aggregate Attributes [1]: [sum#20] -Results [3]: [i_manager_id#5, d_moy#19, sum#21] +Input [3]: [i_manager_id#5, ss_sales_price#12, d_moy#17] +Keys [2]: [i_manager_id#5, d_moy#17] +Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#12))] +Aggregate Attributes [1]: [sum#18] +Results [3]: [i_manager_id#5, d_moy#17, sum#19] (21) Exchange -Input [3]: [i_manager_id#5, d_moy#19, sum#21] -Arguments: hashpartitioning(i_manager_id#5, d_moy#19, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [3]: [i_manager_id#5, d_moy#17, sum#19] +Arguments: hashpartitioning(i_manager_id#5, d_moy#17, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 5] -Input [3]: [i_manager_id#5, d_moy#19, sum#21] -Keys [2]: [i_manager_id#5, d_moy#19] -Functions [1]: [sum(UnscaledValue(ss_sales_price#13))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#13))#23] -Results [3]: [i_manager_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#23,17,2) AS sum_sales#24, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#23,17,2) AS _w0#25] +Input [3]: [i_manager_id#5, d_moy#17, sum#19] +Keys [2]: [i_manager_id#5, d_moy#17] +Functions [1]: [sum(UnscaledValue(ss_sales_price#12))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#12))#20] +Results [3]: [i_manager_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS _w0#22] (23) Exchange -Input [3]: [i_manager_id#5, sum_sales#24, _w0#25] -Arguments: hashpartitioning(i_manager_id#5, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [3]: [i_manager_id#5, sum_sales#21, _w0#22] +Arguments: hashpartitioning(i_manager_id#5, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 6] -Input [3]: [i_manager_id#5, sum_sales#24, _w0#25] +Input [3]: [i_manager_id#5, sum_sales#21, _w0#22] Arguments: [i_manager_id#5 ASC NULLS FIRST], false, 0 (25) Window -Input [3]: [i_manager_id#5, sum_sales#24, _w0#25] -Arguments: [avg(_w0#25) windowspecdefinition(i_manager_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#27], [i_manager_id#5] +Input [3]: [i_manager_id#5, sum_sales#21, _w0#22] +Arguments: [avg(_w0#22) windowspecdefinition(i_manager_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#23], [i_manager_id#5] (26) Filter [codegen id : 7] -Input [4]: [i_manager_id#5, sum_sales#24, _w0#25, avg_monthly_sales#27] -Condition : (isnotnull(avg_monthly_sales#27) AND ((avg_monthly_sales#27 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#24 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#27 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#27 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) +Input [4]: [i_manager_id#5, sum_sales#21, _w0#22, avg_monthly_sales#23] +Condition : (isnotnull(avg_monthly_sales#23) AND ((avg_monthly_sales#23 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#23 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#23 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) (27) Project [codegen id : 7] -Output [3]: [i_manager_id#5, sum_sales#24, avg_monthly_sales#27] -Input [4]: [i_manager_id#5, sum_sales#24, _w0#25, avg_monthly_sales#27] +Output [3]: [i_manager_id#5, sum_sales#21, avg_monthly_sales#23] +Input [4]: [i_manager_id#5, sum_sales#21, _w0#22, avg_monthly_sales#23] (28) TakeOrderedAndProject -Input [3]: [i_manager_id#5, sum_sales#24, avg_monthly_sales#27] -Arguments: 100, [i_manager_id#5 ASC NULLS FIRST, avg_monthly_sales#27 ASC NULLS FIRST, sum_sales#24 ASC NULLS FIRST], [i_manager_id#5, sum_sales#24, avg_monthly_sales#27] +Input [3]: [i_manager_id#5, sum_sales#21, avg_monthly_sales#23] +Arguments: 100, [i_manager_id#5 ASC NULLS FIRST, avg_monthly_sales#23 ASC NULLS FIRST, sum_sales#21 ASC NULLS FIRST], [i_manager_id#5, sum_sales#21, avg_monthly_sales#23] ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#14 IN dynamicpruning#15 +Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#13 IN dynamicpruning#14 BroadcastExchange (33) +- * Project (32) +- * Filter (31) @@ -167,25 +167,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [3]: [d_date_sk#18, d_month_seq#28, d_moy#19] +Output [3]: [d_date_sk#16, d_month_seq#24, d_moy#17] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_month_seq, [1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230]), GreaterThanOrEqual(d_date_sk,2452123), LessThanOrEqual(d_date_sk,2452487), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#18, d_month_seq#28, d_moy#19] +Input [3]: [d_date_sk#16, d_month_seq#24, d_moy#17] (31) Filter [codegen id : 1] -Input [3]: [d_date_sk#18, d_month_seq#28, d_moy#19] -Condition : (((d_month_seq#28 INSET 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230 AND (d_date_sk#18 >= 2452123)) AND (d_date_sk#18 <= 2452487)) AND isnotnull(d_date_sk#18)) +Input [3]: [d_date_sk#16, d_month_seq#24, d_moy#17] +Condition : (((d_month_seq#24 INSET 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230 AND (d_date_sk#16 >= 2452123)) AND (d_date_sk#16 <= 2452487)) AND isnotnull(d_date_sk#16)) (32) Project [codegen id : 1] -Output [2]: [d_date_sk#18, d_moy#19] -Input [3]: [d_date_sk#18, d_month_seq#28, d_moy#19] +Output [2]: [d_date_sk#16, d_moy#17] +Input [3]: [d_date_sk#16, d_month_seq#24, d_moy#17] (33) BroadcastExchange -Input [2]: [d_date_sk#18, d_moy#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#29] +Input [2]: [d_date_sk#16, d_moy#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63/explain.txt index 99146cf1d2829..bdb9612bfa2f4 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63/explain.txt @@ -64,7 +64,7 @@ Condition : (isnotnull(ss_item_sk#10) AND isnotnull(ss_store_sk#11)) (8) BroadcastExchange Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] @@ -76,85 +76,85 @@ Output [4]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk# Input [6]: [i_item_sk#1, i_manager_id#5, ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] (11) ReusedExchange [Reuses operator id: 33] -Output [2]: [d_date_sk#16, d_moy#17] +Output [2]: [d_date_sk#15, d_moy#16] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_date_sk#13] -Right keys [1]: [d_date_sk#16] +Right keys [1]: [d_date_sk#15] Join condition: None (13) Project [codegen id : 4] -Output [4]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, d_moy#17] -Input [6]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13, d_date_sk#16, d_moy#17] +Output [4]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, d_moy#16] +Input [6]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13, d_date_sk#15, d_moy#16] (14) Scan parquet default.store -Output [1]: [s_store_sk#18] +Output [1]: [s_store_sk#17] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [1]: [s_store_sk#18] +Input [1]: [s_store_sk#17] (16) Filter [codegen id : 3] -Input [1]: [s_store_sk#18] -Condition : isnotnull(s_store_sk#18) +Input [1]: [s_store_sk#17] +Condition : isnotnull(s_store_sk#17) (17) BroadcastExchange -Input [1]: [s_store_sk#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19] +Input [1]: [s_store_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#11] -Right keys [1]: [s_store_sk#18] +Right keys [1]: [s_store_sk#17] Join condition: None (19) Project [codegen id : 4] -Output [3]: [i_manager_id#5, ss_sales_price#12, d_moy#17] -Input [5]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, d_moy#17, s_store_sk#18] +Output [3]: [i_manager_id#5, ss_sales_price#12, d_moy#16] +Input [5]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, d_moy#16, s_store_sk#17] (20) HashAggregate [codegen id : 4] -Input [3]: [i_manager_id#5, ss_sales_price#12, d_moy#17] -Keys [2]: [i_manager_id#5, d_moy#17] +Input [3]: [i_manager_id#5, ss_sales_price#12, d_moy#16] +Keys [2]: [i_manager_id#5, d_moy#16] Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#12))] -Aggregate Attributes [1]: [sum#20] -Results [3]: [i_manager_id#5, d_moy#17, sum#21] +Aggregate Attributes [1]: [sum#18] +Results [3]: [i_manager_id#5, d_moy#16, sum#19] (21) Exchange -Input [3]: [i_manager_id#5, d_moy#17, sum#21] -Arguments: hashpartitioning(i_manager_id#5, d_moy#17, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [3]: [i_manager_id#5, d_moy#16, sum#19] +Arguments: hashpartitioning(i_manager_id#5, d_moy#16, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 5] -Input [3]: [i_manager_id#5, d_moy#17, sum#21] -Keys [2]: [i_manager_id#5, d_moy#17] +Input [3]: [i_manager_id#5, d_moy#16, sum#19] +Keys [2]: [i_manager_id#5, d_moy#16] Functions [1]: [sum(UnscaledValue(ss_sales_price#12))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#12))#23] -Results [3]: [i_manager_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#23,17,2) AS sum_sales#24, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#23,17,2) AS _w0#25] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#12))#20] +Results [3]: [i_manager_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS _w0#22] (23) Exchange -Input [3]: [i_manager_id#5, sum_sales#24, _w0#25] -Arguments: hashpartitioning(i_manager_id#5, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [3]: [i_manager_id#5, sum_sales#21, _w0#22] +Arguments: hashpartitioning(i_manager_id#5, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 6] -Input [3]: [i_manager_id#5, sum_sales#24, _w0#25] +Input [3]: [i_manager_id#5, sum_sales#21, _w0#22] Arguments: [i_manager_id#5 ASC NULLS FIRST], false, 0 (25) Window -Input [3]: [i_manager_id#5, sum_sales#24, _w0#25] -Arguments: [avg(_w0#25) windowspecdefinition(i_manager_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#27], [i_manager_id#5] +Input [3]: [i_manager_id#5, sum_sales#21, _w0#22] +Arguments: [avg(_w0#22) windowspecdefinition(i_manager_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#23], [i_manager_id#5] (26) Filter [codegen id : 7] -Input [4]: [i_manager_id#5, sum_sales#24, _w0#25, avg_monthly_sales#27] -Condition : (isnotnull(avg_monthly_sales#27) AND ((avg_monthly_sales#27 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#24 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#27 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#27 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) +Input [4]: [i_manager_id#5, sum_sales#21, _w0#22, avg_monthly_sales#23] +Condition : (isnotnull(avg_monthly_sales#23) AND ((avg_monthly_sales#23 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#23 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#23 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) (27) Project [codegen id : 7] -Output [3]: [i_manager_id#5, sum_sales#24, avg_monthly_sales#27] -Input [4]: [i_manager_id#5, sum_sales#24, _w0#25, avg_monthly_sales#27] +Output [3]: [i_manager_id#5, sum_sales#21, avg_monthly_sales#23] +Input [4]: [i_manager_id#5, sum_sales#21, _w0#22, avg_monthly_sales#23] (28) TakeOrderedAndProject -Input [3]: [i_manager_id#5, sum_sales#24, avg_monthly_sales#27] -Arguments: 100, [i_manager_id#5 ASC NULLS FIRST, avg_monthly_sales#27 ASC NULLS FIRST, sum_sales#24 ASC NULLS FIRST], [i_manager_id#5, sum_sales#24, avg_monthly_sales#27] +Input [3]: [i_manager_id#5, sum_sales#21, avg_monthly_sales#23] +Arguments: 100, [i_manager_id#5 ASC NULLS FIRST, avg_monthly_sales#23 ASC NULLS FIRST, sum_sales#21 ASC NULLS FIRST], [i_manager_id#5, sum_sales#21, avg_monthly_sales#23] ===== Subqueries ===== @@ -167,25 +167,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [3]: [d_date_sk#16, d_month_seq#28, d_moy#17] +Output [3]: [d_date_sk#15, d_month_seq#24, d_moy#16] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_month_seq, [1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230]), GreaterThanOrEqual(d_date_sk,2452123), LessThanOrEqual(d_date_sk,2452487), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#16, d_month_seq#28, d_moy#17] +Input [3]: [d_date_sk#15, d_month_seq#24, d_moy#16] (31) Filter [codegen id : 1] -Input [3]: [d_date_sk#16, d_month_seq#28, d_moy#17] -Condition : (((d_month_seq#28 INSET 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230 AND (d_date_sk#16 >= 2452123)) AND (d_date_sk#16 <= 2452487)) AND isnotnull(d_date_sk#16)) +Input [3]: [d_date_sk#15, d_month_seq#24, d_moy#16] +Condition : (((d_month_seq#24 INSET 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230 AND (d_date_sk#15 >= 2452123)) AND (d_date_sk#15 <= 2452487)) AND isnotnull(d_date_sk#15)) (32) Project [codegen id : 1] -Output [2]: [d_date_sk#16, d_moy#17] -Input [3]: [d_date_sk#16, d_month_seq#28, d_moy#17] +Output [2]: [d_date_sk#15, d_moy#16] +Input [3]: [d_date_sk#15, d_month_seq#24, d_moy#16] (33) BroadcastExchange -Input [2]: [d_date_sk#16, d_moy#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#29] +Input [2]: [d_date_sk#15, d_moy#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65.sf100/explain.txt index aabb4fe67f387..1be6b422f019d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65.sf100/explain.txt @@ -75,152 +75,152 @@ Results [3]: [ss_store_sk#2, ss_item_sk#1, sum#8] (8) Exchange Input [3]: [ss_store_sk#2, ss_item_sk#1, sum#8] -Arguments: hashpartitioning(ss_store_sk#2, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ss_store_sk#2, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (9) HashAggregate [codegen id : 7] Input [3]: [ss_store_sk#2, ss_item_sk#1, sum#8] Keys [2]: [ss_store_sk#2, ss_item_sk#1] Functions [1]: [sum(UnscaledValue(ss_sales_price#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#3))#10] -Results [3]: [ss_store_sk#2, ss_item_sk#1, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#10,17,2) AS revenue#11] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#3))#9] +Results [3]: [ss_store_sk#2, ss_item_sk#1, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#9,17,2) AS revenue#10] (10) Filter [codegen id : 7] -Input [3]: [ss_store_sk#2, ss_item_sk#1, revenue#11] -Condition : isnotnull(revenue#11) +Input [3]: [ss_store_sk#2, ss_item_sk#1, revenue#10] +Condition : isnotnull(revenue#10) (11) Scan parquet default.store_sales -Output [4]: [ss_item_sk#12, ss_store_sk#13, ss_sales_price#14, ss_sold_date_sk#15] +Output [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#15), (ss_sold_date_sk#15 >= 2451911), (ss_sold_date_sk#15 <= 2452275), dynamicpruningexpression(ss_sold_date_sk#15 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ss_sold_date_sk#14), (ss_sold_date_sk#14 >= 2451911), (ss_sold_date_sk#14 <= 2452275), dynamicpruningexpression(ss_sold_date_sk#14 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ss_store_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 4] -Input [4]: [ss_item_sk#12, ss_store_sk#13, ss_sales_price#14, ss_sold_date_sk#15] +Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] (13) Filter [codegen id : 4] -Input [4]: [ss_item_sk#12, ss_store_sk#13, ss_sales_price#14, ss_sold_date_sk#15] -Condition : isnotnull(ss_store_sk#13) +Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] +Condition : isnotnull(ss_store_sk#12) (14) ReusedExchange [Reuses operator id: 43] -Output [1]: [d_date_sk#16] +Output [1]: [d_date_sk#15] (15) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#15] -Right keys [1]: [d_date_sk#16] +Left keys [1]: [ss_sold_date_sk#14] +Right keys [1]: [d_date_sk#15] Join condition: None (16) Project [codegen id : 4] -Output [3]: [ss_item_sk#12, ss_store_sk#13, ss_sales_price#14] -Input [5]: [ss_item_sk#12, ss_store_sk#13, ss_sales_price#14, ss_sold_date_sk#15, d_date_sk#16] +Output [3]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13] +Input [5]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14, d_date_sk#15] (17) HashAggregate [codegen id : 4] -Input [3]: [ss_item_sk#12, ss_store_sk#13, ss_sales_price#14] -Keys [2]: [ss_store_sk#13, ss_item_sk#12] -Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#14))] -Aggregate Attributes [1]: [sum#17] -Results [3]: [ss_store_sk#13, ss_item_sk#12, sum#18] +Input [3]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13] +Keys [2]: [ss_store_sk#12, ss_item_sk#11] +Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#13))] +Aggregate Attributes [1]: [sum#16] +Results [3]: [ss_store_sk#12, ss_item_sk#11, sum#17] (18) Exchange -Input [3]: [ss_store_sk#13, ss_item_sk#12, sum#18] -Arguments: hashpartitioning(ss_store_sk#13, ss_item_sk#12, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [3]: [ss_store_sk#12, ss_item_sk#11, sum#17] +Arguments: hashpartitioning(ss_store_sk#12, ss_item_sk#11, 5), ENSURE_REQUIREMENTS, [plan_id=2] (19) HashAggregate [codegen id : 5] -Input [3]: [ss_store_sk#13, ss_item_sk#12, sum#18] -Keys [2]: [ss_store_sk#13, ss_item_sk#12] -Functions [1]: [sum(UnscaledValue(ss_sales_price#14))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#14))#20] -Results [2]: [ss_store_sk#13, MakeDecimal(sum(UnscaledValue(ss_sales_price#14))#20,17,2) AS revenue#21] +Input [3]: [ss_store_sk#12, ss_item_sk#11, sum#17] +Keys [2]: [ss_store_sk#12, ss_item_sk#11] +Functions [1]: [sum(UnscaledValue(ss_sales_price#13))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#13))#18] +Results [2]: [ss_store_sk#12, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#18,17,2) AS revenue#19] (20) HashAggregate [codegen id : 5] -Input [2]: [ss_store_sk#13, revenue#21] -Keys [1]: [ss_store_sk#13] -Functions [1]: [partial_avg(revenue#21)] -Aggregate Attributes [2]: [sum#22, count#23] -Results [3]: [ss_store_sk#13, sum#24, count#25] +Input [2]: [ss_store_sk#12, revenue#19] +Keys [1]: [ss_store_sk#12] +Functions [1]: [partial_avg(revenue#19)] +Aggregate Attributes [2]: [sum#20, count#21] +Results [3]: [ss_store_sk#12, sum#22, count#23] (21) Exchange -Input [3]: [ss_store_sk#13, sum#24, count#25] -Arguments: hashpartitioning(ss_store_sk#13, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [3]: [ss_store_sk#12, sum#22, count#23] +Arguments: hashpartitioning(ss_store_sk#12, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 6] -Input [3]: [ss_store_sk#13, sum#24, count#25] -Keys [1]: [ss_store_sk#13] -Functions [1]: [avg(revenue#21)] -Aggregate Attributes [1]: [avg(revenue#21)#27] -Results [2]: [ss_store_sk#13, avg(revenue#21)#27 AS ave#28] +Input [3]: [ss_store_sk#12, sum#22, count#23] +Keys [1]: [ss_store_sk#12] +Functions [1]: [avg(revenue#19)] +Aggregate Attributes [1]: [avg(revenue#19)#24] +Results [2]: [ss_store_sk#12, avg(revenue#19)#24 AS ave#25] (23) BroadcastExchange -Input [2]: [ss_store_sk#13, ave#28] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#29] +Input [2]: [ss_store_sk#12, ave#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (24) BroadcastHashJoin [codegen id : 7] Left keys [1]: [ss_store_sk#2] -Right keys [1]: [ss_store_sk#13] -Join condition: (cast(revenue#11 as decimal(23,7)) <= CheckOverflow((0.100000 * promote_precision(ave#28)), DecimalType(23,7))) +Right keys [1]: [ss_store_sk#12] +Join condition: (cast(revenue#10 as decimal(23,7)) <= CheckOverflow((0.100000 * promote_precision(ave#25)), DecimalType(23,7))) (25) Project [codegen id : 7] -Output [3]: [ss_store_sk#2, ss_item_sk#1, revenue#11] -Input [5]: [ss_store_sk#2, ss_item_sk#1, revenue#11, ss_store_sk#13, ave#28] +Output [3]: [ss_store_sk#2, ss_item_sk#1, revenue#10] +Input [5]: [ss_store_sk#2, ss_item_sk#1, revenue#10, ss_store_sk#12, ave#25] (26) BroadcastExchange -Input [3]: [ss_store_sk#2, ss_item_sk#1, revenue#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#30] +Input [3]: [ss_store_sk#2, ss_item_sk#1, revenue#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (27) Scan parquet default.store -Output [2]: [s_store_sk#31, s_store_name#32] +Output [2]: [s_store_sk#26, s_store_name#27] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (28) ColumnarToRow -Input [2]: [s_store_sk#31, s_store_name#32] +Input [2]: [s_store_sk#26, s_store_name#27] (29) Filter -Input [2]: [s_store_sk#31, s_store_name#32] -Condition : isnotnull(s_store_sk#31) +Input [2]: [s_store_sk#26, s_store_name#27] +Condition : isnotnull(s_store_sk#26) (30) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_store_sk#2] -Right keys [1]: [s_store_sk#31] +Right keys [1]: [s_store_sk#26] Join condition: None (31) Project [codegen id : 8] -Output [3]: [ss_item_sk#1, revenue#11, s_store_name#32] -Input [5]: [ss_store_sk#2, ss_item_sk#1, revenue#11, s_store_sk#31, s_store_name#32] +Output [3]: [ss_item_sk#1, revenue#10, s_store_name#27] +Input [5]: [ss_store_sk#2, ss_item_sk#1, revenue#10, s_store_sk#26, s_store_name#27] (32) BroadcastExchange -Input [3]: [ss_item_sk#1, revenue#11, s_store_name#32] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#33] +Input [3]: [ss_item_sk#1, revenue#10, s_store_name#27] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] (33) Scan parquet default.item -Output [5]: [i_item_sk#34, i_item_desc#35, i_current_price#36, i_wholesale_cost#37, i_brand#38] +Output [5]: [i_item_sk#28, i_item_desc#29, i_current_price#30, i_wholesale_cost#31, i_brand#32] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (34) ColumnarToRow -Input [5]: [i_item_sk#34, i_item_desc#35, i_current_price#36, i_wholesale_cost#37, i_brand#38] +Input [5]: [i_item_sk#28, i_item_desc#29, i_current_price#30, i_wholesale_cost#31, i_brand#32] (35) Filter -Input [5]: [i_item_sk#34, i_item_desc#35, i_current_price#36, i_wholesale_cost#37, i_brand#38] -Condition : isnotnull(i_item_sk#34) +Input [5]: [i_item_sk#28, i_item_desc#29, i_current_price#30, i_wholesale_cost#31, i_brand#32] +Condition : isnotnull(i_item_sk#28) (36) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#34] +Right keys [1]: [i_item_sk#28] Join condition: None (37) Project [codegen id : 9] -Output [6]: [s_store_name#32, i_item_desc#35, revenue#11, i_current_price#36, i_wholesale_cost#37, i_brand#38] -Input [8]: [ss_item_sk#1, revenue#11, s_store_name#32, i_item_sk#34, i_item_desc#35, i_current_price#36, i_wholesale_cost#37, i_brand#38] +Output [6]: [s_store_name#27, i_item_desc#29, revenue#10, i_current_price#30, i_wholesale_cost#31, i_brand#32] +Input [8]: [ss_item_sk#1, revenue#10, s_store_name#27, i_item_sk#28, i_item_desc#29, i_current_price#30, i_wholesale_cost#31, i_brand#32] (38) TakeOrderedAndProject -Input [6]: [s_store_name#32, i_item_desc#35, revenue#11, i_current_price#36, i_wholesale_cost#37, i_brand#38] -Arguments: 100, [s_store_name#32 ASC NULLS FIRST, i_item_desc#35 ASC NULLS FIRST], [s_store_name#32, i_item_desc#35, revenue#11, i_current_price#36, i_wholesale_cost#37, i_brand#38] +Input [6]: [s_store_name#27, i_item_desc#29, revenue#10, i_current_price#30, i_wholesale_cost#31, i_brand#32] +Arguments: 100, [s_store_name#27 ASC NULLS FIRST, i_item_desc#29 ASC NULLS FIRST], [s_store_name#27, i_item_desc#29, revenue#10, i_current_price#30, i_wholesale_cost#31, i_brand#32] ===== Subqueries ===== @@ -233,27 +233,27 @@ BroadcastExchange (43) (39) Scan parquet default.date_dim -Output [2]: [d_date_sk#6, d_month_seq#39] +Output [2]: [d_date_sk#6, d_month_seq#33] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), GreaterThanOrEqual(d_date_sk,2451911), LessThanOrEqual(d_date_sk,2452275), IsNotNull(d_date_sk)] ReadSchema: struct (40) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#6, d_month_seq#39] +Input [2]: [d_date_sk#6, d_month_seq#33] (41) Filter [codegen id : 1] -Input [2]: [d_date_sk#6, d_month_seq#39] -Condition : (((((isnotnull(d_month_seq#39) AND (d_month_seq#39 >= 1212)) AND (d_month_seq#39 <= 1223)) AND (d_date_sk#6 >= 2451911)) AND (d_date_sk#6 <= 2452275)) AND isnotnull(d_date_sk#6)) +Input [2]: [d_date_sk#6, d_month_seq#33] +Condition : (((((isnotnull(d_month_seq#33) AND (d_month_seq#33 >= 1212)) AND (d_month_seq#33 <= 1223)) AND (d_date_sk#6 >= 2451911)) AND (d_date_sk#6 <= 2452275)) AND isnotnull(d_date_sk#6)) (42) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [2]: [d_date_sk#6, d_month_seq#39] +Input [2]: [d_date_sk#6, d_month_seq#33] (43) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:2 Hosting operator id = 11 Hosting Expression = ss_sold_date_sk#15 IN dynamicpruning#5 +Subquery:2 Hosting operator id = 11 Hosting Expression = ss_sold_date_sk#14 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65/explain.txt index 019f4fa4c7076..f6dfdf7342ff9 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65/explain.txt @@ -89,22 +89,22 @@ Results [3]: [ss_store_sk#4, ss_item_sk#3, sum#10] (11) Exchange Input [3]: [ss_store_sk#4, ss_item_sk#3, sum#10] -Arguments: hashpartitioning(ss_store_sk#4, ss_item_sk#3, 5), ENSURE_REQUIREMENTS, [id=#11] +Arguments: hashpartitioning(ss_store_sk#4, ss_item_sk#3, 5), ENSURE_REQUIREMENTS, [plan_id=1] (12) HashAggregate [codegen id : 3] Input [3]: [ss_store_sk#4, ss_item_sk#3, sum#10] Keys [2]: [ss_store_sk#4, ss_item_sk#3] Functions [1]: [sum(UnscaledValue(ss_sales_price#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#5))#12] -Results [3]: [ss_store_sk#4, ss_item_sk#3, MakeDecimal(sum(UnscaledValue(ss_sales_price#5))#12,17,2) AS revenue#13] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#5))#11] +Results [3]: [ss_store_sk#4, ss_item_sk#3, MakeDecimal(sum(UnscaledValue(ss_sales_price#5))#11,17,2) AS revenue#12] (13) Filter [codegen id : 3] -Input [3]: [ss_store_sk#4, ss_item_sk#3, revenue#13] -Condition : isnotnull(revenue#13) +Input [3]: [ss_store_sk#4, ss_item_sk#3, revenue#12] +Condition : isnotnull(revenue#12) (14) BroadcastExchange -Input [3]: [ss_store_sk#4, ss_item_sk#3, revenue#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Input [3]: [ss_store_sk#4, ss_item_sk#3, revenue#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 9] Left keys [1]: [s_store_sk#1] @@ -112,115 +112,115 @@ Right keys [1]: [ss_store_sk#4] Join condition: None (16) Project [codegen id : 9] -Output [4]: [s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#13] -Input [5]: [s_store_sk#1, s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#13] +Output [4]: [s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#12] +Input [5]: [s_store_sk#1, s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#12] (17) Scan parquet default.item -Output [5]: [i_item_sk#15, i_item_desc#16, i_current_price#17, i_wholesale_cost#18, i_brand#19] +Output [5]: [i_item_sk#13, i_item_desc#14, i_current_price#15, i_wholesale_cost#16, i_brand#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (18) ColumnarToRow [codegen id : 4] -Input [5]: [i_item_sk#15, i_item_desc#16, i_current_price#17, i_wholesale_cost#18, i_brand#19] +Input [5]: [i_item_sk#13, i_item_desc#14, i_current_price#15, i_wholesale_cost#16, i_brand#17] (19) Filter [codegen id : 4] -Input [5]: [i_item_sk#15, i_item_desc#16, i_current_price#17, i_wholesale_cost#18, i_brand#19] -Condition : isnotnull(i_item_sk#15) +Input [5]: [i_item_sk#13, i_item_desc#14, i_current_price#15, i_wholesale_cost#16, i_brand#17] +Condition : isnotnull(i_item_sk#13) (20) BroadcastExchange -Input [5]: [i_item_sk#15, i_item_desc#16, i_current_price#17, i_wholesale_cost#18, i_brand#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#20] +Input [5]: [i_item_sk#13, i_item_desc#14, i_current_price#15, i_wholesale_cost#16, i_brand#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_item_sk#3] -Right keys [1]: [i_item_sk#15] +Right keys [1]: [i_item_sk#13] Join condition: None (22) Project [codegen id : 9] -Output [7]: [s_store_name#2, ss_store_sk#4, revenue#13, i_item_desc#16, i_current_price#17, i_wholesale_cost#18, i_brand#19] -Input [9]: [s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#13, i_item_sk#15, i_item_desc#16, i_current_price#17, i_wholesale_cost#18, i_brand#19] +Output [7]: [s_store_name#2, ss_store_sk#4, revenue#12, i_item_desc#14, i_current_price#15, i_wholesale_cost#16, i_brand#17] +Input [9]: [s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#12, i_item_sk#13, i_item_desc#14, i_current_price#15, i_wholesale_cost#16, i_brand#17] (23) Scan parquet default.store_sales -Output [4]: [ss_item_sk#21, ss_store_sk#22, ss_sales_price#23, ss_sold_date_sk#24] +Output [4]: [ss_item_sk#18, ss_store_sk#19, ss_sales_price#20, ss_sold_date_sk#21] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#24), (ss_sold_date_sk#24 >= 2451911), (ss_sold_date_sk#24 <= 2452275), dynamicpruningexpression(ss_sold_date_sk#24 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(ss_sold_date_sk#21), (ss_sold_date_sk#21 >= 2451911), (ss_sold_date_sk#21 <= 2452275), dynamicpruningexpression(ss_sold_date_sk#21 IN dynamicpruning#7)] PushedFilters: [IsNotNull(ss_store_sk)] ReadSchema: struct (24) ColumnarToRow [codegen id : 6] -Input [4]: [ss_item_sk#21, ss_store_sk#22, ss_sales_price#23, ss_sold_date_sk#24] +Input [4]: [ss_item_sk#18, ss_store_sk#19, ss_sales_price#20, ss_sold_date_sk#21] (25) Filter [codegen id : 6] -Input [4]: [ss_item_sk#21, ss_store_sk#22, ss_sales_price#23, ss_sold_date_sk#24] -Condition : isnotnull(ss_store_sk#22) +Input [4]: [ss_item_sk#18, ss_store_sk#19, ss_sales_price#20, ss_sold_date_sk#21] +Condition : isnotnull(ss_store_sk#19) (26) ReusedExchange [Reuses operator id: 43] -Output [1]: [d_date_sk#25] +Output [1]: [d_date_sk#22] (27) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ss_sold_date_sk#24] -Right keys [1]: [d_date_sk#25] +Left keys [1]: [ss_sold_date_sk#21] +Right keys [1]: [d_date_sk#22] Join condition: None (28) Project [codegen id : 6] -Output [3]: [ss_item_sk#21, ss_store_sk#22, ss_sales_price#23] -Input [5]: [ss_item_sk#21, ss_store_sk#22, ss_sales_price#23, ss_sold_date_sk#24, d_date_sk#25] +Output [3]: [ss_item_sk#18, ss_store_sk#19, ss_sales_price#20] +Input [5]: [ss_item_sk#18, ss_store_sk#19, ss_sales_price#20, ss_sold_date_sk#21, d_date_sk#22] (29) HashAggregate [codegen id : 6] -Input [3]: [ss_item_sk#21, ss_store_sk#22, ss_sales_price#23] -Keys [2]: [ss_store_sk#22, ss_item_sk#21] -Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#23))] -Aggregate Attributes [1]: [sum#26] -Results [3]: [ss_store_sk#22, ss_item_sk#21, sum#27] +Input [3]: [ss_item_sk#18, ss_store_sk#19, ss_sales_price#20] +Keys [2]: [ss_store_sk#19, ss_item_sk#18] +Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#20))] +Aggregate Attributes [1]: [sum#23] +Results [3]: [ss_store_sk#19, ss_item_sk#18, sum#24] (30) Exchange -Input [3]: [ss_store_sk#22, ss_item_sk#21, sum#27] -Arguments: hashpartitioning(ss_store_sk#22, ss_item_sk#21, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [3]: [ss_store_sk#19, ss_item_sk#18, sum#24] +Arguments: hashpartitioning(ss_store_sk#19, ss_item_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=4] (31) HashAggregate [codegen id : 7] -Input [3]: [ss_store_sk#22, ss_item_sk#21, sum#27] -Keys [2]: [ss_store_sk#22, ss_item_sk#21] -Functions [1]: [sum(UnscaledValue(ss_sales_price#23))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#23))#29] -Results [2]: [ss_store_sk#22, MakeDecimal(sum(UnscaledValue(ss_sales_price#23))#29,17,2) AS revenue#30] +Input [3]: [ss_store_sk#19, ss_item_sk#18, sum#24] +Keys [2]: [ss_store_sk#19, ss_item_sk#18] +Functions [1]: [sum(UnscaledValue(ss_sales_price#20))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#20))#25] +Results [2]: [ss_store_sk#19, MakeDecimal(sum(UnscaledValue(ss_sales_price#20))#25,17,2) AS revenue#26] (32) HashAggregate [codegen id : 7] -Input [2]: [ss_store_sk#22, revenue#30] -Keys [1]: [ss_store_sk#22] -Functions [1]: [partial_avg(revenue#30)] -Aggregate Attributes [2]: [sum#31, count#32] -Results [3]: [ss_store_sk#22, sum#33, count#34] +Input [2]: [ss_store_sk#19, revenue#26] +Keys [1]: [ss_store_sk#19] +Functions [1]: [partial_avg(revenue#26)] +Aggregate Attributes [2]: [sum#27, count#28] +Results [3]: [ss_store_sk#19, sum#29, count#30] (33) Exchange -Input [3]: [ss_store_sk#22, sum#33, count#34] -Arguments: hashpartitioning(ss_store_sk#22, 5), ENSURE_REQUIREMENTS, [id=#35] +Input [3]: [ss_store_sk#19, sum#29, count#30] +Arguments: hashpartitioning(ss_store_sk#19, 5), ENSURE_REQUIREMENTS, [plan_id=5] (34) HashAggregate [codegen id : 8] -Input [3]: [ss_store_sk#22, sum#33, count#34] -Keys [1]: [ss_store_sk#22] -Functions [1]: [avg(revenue#30)] -Aggregate Attributes [1]: [avg(revenue#30)#36] -Results [2]: [ss_store_sk#22, avg(revenue#30)#36 AS ave#37] +Input [3]: [ss_store_sk#19, sum#29, count#30] +Keys [1]: [ss_store_sk#19] +Functions [1]: [avg(revenue#26)] +Aggregate Attributes [1]: [avg(revenue#26)#31] +Results [2]: [ss_store_sk#19, avg(revenue#26)#31 AS ave#32] (35) BroadcastExchange -Input [2]: [ss_store_sk#22, ave#37] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#38] +Input [2]: [ss_store_sk#19, ave#32] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] (36) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#4] -Right keys [1]: [ss_store_sk#22] -Join condition: (cast(revenue#13 as decimal(23,7)) <= CheckOverflow((0.100000 * promote_precision(ave#37)), DecimalType(23,7))) +Right keys [1]: [ss_store_sk#19] +Join condition: (cast(revenue#12 as decimal(23,7)) <= CheckOverflow((0.100000 * promote_precision(ave#32)), DecimalType(23,7))) (37) Project [codegen id : 9] -Output [6]: [s_store_name#2, i_item_desc#16, revenue#13, i_current_price#17, i_wholesale_cost#18, i_brand#19] -Input [9]: [s_store_name#2, ss_store_sk#4, revenue#13, i_item_desc#16, i_current_price#17, i_wholesale_cost#18, i_brand#19, ss_store_sk#22, ave#37] +Output [6]: [s_store_name#2, i_item_desc#14, revenue#12, i_current_price#15, i_wholesale_cost#16, i_brand#17] +Input [9]: [s_store_name#2, ss_store_sk#4, revenue#12, i_item_desc#14, i_current_price#15, i_wholesale_cost#16, i_brand#17, ss_store_sk#19, ave#32] (38) TakeOrderedAndProject -Input [6]: [s_store_name#2, i_item_desc#16, revenue#13, i_current_price#17, i_wholesale_cost#18, i_brand#19] -Arguments: 100, [s_store_name#2 ASC NULLS FIRST, i_item_desc#16 ASC NULLS FIRST], [s_store_name#2, i_item_desc#16, revenue#13, i_current_price#17, i_wholesale_cost#18, i_brand#19] +Input [6]: [s_store_name#2, i_item_desc#14, revenue#12, i_current_price#15, i_wholesale_cost#16, i_brand#17] +Arguments: 100, [s_store_name#2 ASC NULLS FIRST, i_item_desc#14 ASC NULLS FIRST], [s_store_name#2, i_item_desc#14, revenue#12, i_current_price#15, i_wholesale_cost#16, i_brand#17] ===== Subqueries ===== @@ -233,27 +233,27 @@ BroadcastExchange (43) (39) Scan parquet default.date_dim -Output [2]: [d_date_sk#8, d_month_seq#39] +Output [2]: [d_date_sk#8, d_month_seq#33] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), GreaterThanOrEqual(d_date_sk,2451911), LessThanOrEqual(d_date_sk,2452275), IsNotNull(d_date_sk)] ReadSchema: struct (40) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#8, d_month_seq#39] +Input [2]: [d_date_sk#8, d_month_seq#33] (41) Filter [codegen id : 1] -Input [2]: [d_date_sk#8, d_month_seq#39] -Condition : (((((isnotnull(d_month_seq#39) AND (d_month_seq#39 >= 1212)) AND (d_month_seq#39 <= 1223)) AND (d_date_sk#8 >= 2451911)) AND (d_date_sk#8 <= 2452275)) AND isnotnull(d_date_sk#8)) +Input [2]: [d_date_sk#8, d_month_seq#33] +Condition : (((((isnotnull(d_month_seq#33) AND (d_month_seq#33 >= 1212)) AND (d_month_seq#33 <= 1223)) AND (d_date_sk#8 >= 2451911)) AND (d_date_sk#8 <= 2452275)) AND isnotnull(d_date_sk#8)) (42) Project [codegen id : 1] Output [1]: [d_date_sk#8] -Input [2]: [d_date_sk#8, d_month_seq#39] +Input [2]: [d_date_sk#8, d_month_seq#33] (43) BroadcastExchange Input [1]: [d_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:2 Hosting operator id = 23 Hosting Expression = ss_sold_date_sk#24 IN dynamicpruning#7 +Subquery:2 Hosting operator id = 23 Hosting Expression = ss_sold_date_sk#21 IN dynamicpruning#7 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68.sf100/explain.txt index 020f7344233b1..48a9282c67f20 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68.sf100/explain.txt @@ -93,7 +93,7 @@ Input [2]: [s_store_sk#12, s_city#13] (11) BroadcastExchange Input [1]: [s_store_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#4] @@ -105,150 +105,150 @@ Output [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, Input [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, s_store_sk#12] (14) Scan parquet default.household_demographics -Output [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Output [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [Or(EqualTo(hd_dep_count,5),EqualTo(hd_vehicle_count,3)), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] (16) Filter [codegen id : 3] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] -Condition : (((hd_dep_count#16 = 5) OR (hd_vehicle_count#17 = 3)) AND isnotnull(hd_demo_sk#15)) +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] +Condition : (((hd_dep_count#15 = 5) OR (hd_vehicle_count#16 = 3)) AND isnotnull(hd_demo_sk#14)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#15] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Output [1]: [hd_demo_sk#14] +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] (18) BroadcastExchange -Input [1]: [hd_demo_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [1]: [hd_demo_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#15] +Right keys [1]: [hd_demo_sk#14] Join condition: None (20) Project [codegen id : 4] Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8] -Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, hd_demo_sk#15] +Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, hd_demo_sk#14] (21) BroadcastExchange Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [plan_id=3] (22) Scan parquet default.customer_address -Output [2]: [ca_address_sk#20, ca_city#21] +Output [2]: [ca_address_sk#17, ca_city#18] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_city)] ReadSchema: struct (23) ColumnarToRow -Input [2]: [ca_address_sk#20, ca_city#21] +Input [2]: [ca_address_sk#17, ca_city#18] (24) Filter -Input [2]: [ca_address_sk#20, ca_city#21] -Condition : (isnotnull(ca_address_sk#20) AND isnotnull(ca_city#21)) +Input [2]: [ca_address_sk#17, ca_city#18] +Condition : (isnotnull(ca_address_sk#17) AND isnotnull(ca_city#18)) (25) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_addr_sk#3] -Right keys [1]: [ca_address_sk#20] +Right keys [1]: [ca_address_sk#17] Join condition: None (26) Project [codegen id : 5] -Output [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#21] -Input [8]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_address_sk#20, ca_city#21] +Output [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#18] +Input [8]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_address_sk#17, ca_city#18] (27) HashAggregate [codegen id : 5] -Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#21] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#21] +Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#18] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18] Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#6)), partial_sum(UnscaledValue(ss_ext_list_price#7)), partial_sum(UnscaledValue(ss_ext_tax#8))] -Aggregate Attributes [3]: [sum#22, sum#23, sum#24] -Results [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#21, sum#25, sum#26, sum#27] +Aggregate Attributes [3]: [sum#19, sum#20, sum#21] +Results [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18, sum#22, sum#23, sum#24] (28) Exchange -Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#21, sum#25, sum#26, sum#27] -Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#21, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18, sum#22, sum#23, sum#24] +Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 6] -Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#21, sum#25, sum#26, sum#27] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#21] +Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18, sum#22, sum#23, sum#24] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18] Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#6)), sum(UnscaledValue(ss_ext_list_price#7)), sum(UnscaledValue(ss_ext_tax#8))] -Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#6))#29, sum(UnscaledValue(ss_ext_list_price#7))#30, sum(UnscaledValue(ss_ext_tax#8))#31] -Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#21 AS bought_city#32, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#29,17,2) AS extended_price#33, MakeDecimal(sum(UnscaledValue(ss_ext_list_price#7))#30,17,2) AS list_price#34, MakeDecimal(sum(UnscaledValue(ss_ext_tax#8))#31,17,2) AS extended_tax#35] +Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#6))#25, sum(UnscaledValue(ss_ext_list_price#7))#26, sum(UnscaledValue(ss_ext_tax#8))#27] +Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#18 AS bought_city#28, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#25,17,2) AS extended_price#29, MakeDecimal(sum(UnscaledValue(ss_ext_list_price#7))#26,17,2) AS list_price#30, MakeDecimal(sum(UnscaledValue(ss_ext_tax#8))#27,17,2) AS extended_tax#31] (30) BroadcastExchange -Input [6]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#32, extended_price#33, list_price#34, extended_tax#35] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#36] +Input [6]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#28, extended_price#29, list_price#30, extended_tax#31] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [plan_id=5] (31) Scan parquet default.customer -Output [4]: [c_customer_sk#37, c_current_addr_sk#38, c_first_name#39, c_last_name#40] +Output [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (32) ColumnarToRow -Input [4]: [c_customer_sk#37, c_current_addr_sk#38, c_first_name#39, c_last_name#40] +Input [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] (33) Filter -Input [4]: [c_customer_sk#37, c_current_addr_sk#38, c_first_name#39, c_last_name#40] -Condition : (isnotnull(c_customer_sk#37) AND isnotnull(c_current_addr_sk#38)) +Input [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] +Condition : (isnotnull(c_customer_sk#32) AND isnotnull(c_current_addr_sk#33)) (34) BroadcastHashJoin [codegen id : 7] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#37] +Right keys [1]: [c_customer_sk#32] Join condition: None (35) Project [codegen id : 7] -Output [8]: [ss_ticket_number#5, bought_city#32, extended_price#33, list_price#34, extended_tax#35, c_current_addr_sk#38, c_first_name#39, c_last_name#40] -Input [10]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#32, extended_price#33, list_price#34, extended_tax#35, c_customer_sk#37, c_current_addr_sk#38, c_first_name#39, c_last_name#40] +Output [8]: [ss_ticket_number#5, bought_city#28, extended_price#29, list_price#30, extended_tax#31, c_current_addr_sk#33, c_first_name#34, c_last_name#35] +Input [10]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#28, extended_price#29, list_price#30, extended_tax#31, c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] (36) Exchange -Input [8]: [ss_ticket_number#5, bought_city#32, extended_price#33, list_price#34, extended_tax#35, c_current_addr_sk#38, c_first_name#39, c_last_name#40] -Arguments: hashpartitioning(c_current_addr_sk#38, 5), ENSURE_REQUIREMENTS, [id=#41] +Input [8]: [ss_ticket_number#5, bought_city#28, extended_price#29, list_price#30, extended_tax#31, c_current_addr_sk#33, c_first_name#34, c_last_name#35] +Arguments: hashpartitioning(c_current_addr_sk#33, 5), ENSURE_REQUIREMENTS, [plan_id=6] (37) Sort [codegen id : 8] -Input [8]: [ss_ticket_number#5, bought_city#32, extended_price#33, list_price#34, extended_tax#35, c_current_addr_sk#38, c_first_name#39, c_last_name#40] -Arguments: [c_current_addr_sk#38 ASC NULLS FIRST], false, 0 +Input [8]: [ss_ticket_number#5, bought_city#28, extended_price#29, list_price#30, extended_tax#31, c_current_addr_sk#33, c_first_name#34, c_last_name#35] +Arguments: [c_current_addr_sk#33 ASC NULLS FIRST], false, 0 (38) Scan parquet default.customer_address -Output [2]: [ca_address_sk#42, ca_city#43] +Output [2]: [ca_address_sk#36, ca_city#37] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_city)] ReadSchema: struct (39) ColumnarToRow [codegen id : 9] -Input [2]: [ca_address_sk#42, ca_city#43] +Input [2]: [ca_address_sk#36, ca_city#37] (40) Filter [codegen id : 9] -Input [2]: [ca_address_sk#42, ca_city#43] -Condition : (isnotnull(ca_address_sk#42) AND isnotnull(ca_city#43)) +Input [2]: [ca_address_sk#36, ca_city#37] +Condition : (isnotnull(ca_address_sk#36) AND isnotnull(ca_city#37)) (41) Exchange -Input [2]: [ca_address_sk#42, ca_city#43] -Arguments: hashpartitioning(ca_address_sk#42, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [2]: [ca_address_sk#36, ca_city#37] +Arguments: hashpartitioning(ca_address_sk#36, 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) Sort [codegen id : 10] -Input [2]: [ca_address_sk#42, ca_city#43] -Arguments: [ca_address_sk#42 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#36, ca_city#37] +Arguments: [ca_address_sk#36 ASC NULLS FIRST], false, 0 (43) SortMergeJoin [codegen id : 11] -Left keys [1]: [c_current_addr_sk#38] -Right keys [1]: [ca_address_sk#42] -Join condition: NOT (ca_city#43 = bought_city#32) +Left keys [1]: [c_current_addr_sk#33] +Right keys [1]: [ca_address_sk#36] +Join condition: NOT (ca_city#37 = bought_city#28) (44) Project [codegen id : 11] -Output [8]: [c_last_name#40, c_first_name#39, ca_city#43, bought_city#32, ss_ticket_number#5, extended_price#33, extended_tax#35, list_price#34] -Input [10]: [ss_ticket_number#5, bought_city#32, extended_price#33, list_price#34, extended_tax#35, c_current_addr_sk#38, c_first_name#39, c_last_name#40, ca_address_sk#42, ca_city#43] +Output [8]: [c_last_name#35, c_first_name#34, ca_city#37, bought_city#28, ss_ticket_number#5, extended_price#29, extended_tax#31, list_price#30] +Input [10]: [ss_ticket_number#5, bought_city#28, extended_price#29, list_price#30, extended_tax#31, c_current_addr_sk#33, c_first_name#34, c_last_name#35, ca_address_sk#36, ca_city#37] (45) TakeOrderedAndProject -Input [8]: [c_last_name#40, c_first_name#39, ca_city#43, bought_city#32, ss_ticket_number#5, extended_price#33, extended_tax#35, list_price#34] -Arguments: 100, [c_last_name#40 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#40, c_first_name#39, ca_city#43, bought_city#32, ss_ticket_number#5, extended_price#33, extended_tax#35, list_price#34] +Input [8]: [c_last_name#35, c_first_name#34, ca_city#37, bought_city#28, ss_ticket_number#5, extended_price#29, extended_tax#31, list_price#30] +Arguments: 100, [c_last_name#35 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#35, c_first_name#34, ca_city#37, bought_city#28, ss_ticket_number#5, extended_price#29, extended_tax#31, list_price#30] ===== Subqueries ===== @@ -261,25 +261,25 @@ BroadcastExchange (50) (46) Scan parquet default.date_dim -Output [3]: [d_date_sk#11, d_year#45, d_dom#46] +Output [3]: [d_date_sk#11, d_year#38, d_dom#39] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_dom), GreaterThanOrEqual(d_dom,1), LessThanOrEqual(d_dom,2), In(d_year, [1999,2000,2001]), In(d_date_sk, [2451180,2451181,2451211,2451212,2451239,2451240,2451270,2451271,2451300,2451301,2451331,2451332,2451361,2451362,2451392,2451393,2451423,2451424,2451453,2451454,2451484,2451485,2451514,2451515,2451545,2451546,2451576,2451577,2451605,2451606,2451636,2451637,2451666,2451667,2451697,2451698,2451727,2451728,2451758,2451759,2451789,2451790,2451819,2451820,2451850,2451851,2451880,2451881,2451911,2451912,2451942,2451943,2451970,2451971,2452001,2452002,2452031,2452032,2452062,2452063,2452092,2452093,2452123,2452124,2452154,2452155,2452184,2452185,2452215,2452216,2452245,2452246]), IsNotNull(d_date_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#45, d_dom#46] +Input [3]: [d_date_sk#11, d_year#38, d_dom#39] (48) Filter [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#45, d_dom#46] -Condition : (((((isnotnull(d_dom#46) AND (d_dom#46 >= 1)) AND (d_dom#46 <= 2)) AND d_year#45 IN (1999,2000,2001)) AND d_date_sk#11 INSET 2451180, 2451181, 2451211, 2451212, 2451239, 2451240, 2451270, 2451271, 2451300, 2451301, 2451331, 2451332, 2451361, 2451362, 2451392, 2451393, 2451423, 2451424, 2451453, 2451454, 2451484, 2451485, 2451514, 2451515, 2451545, 2451546, 2451576, 2451577, 2451605, 2451606, 2451636, 2451637, 2451666, 2451667, 2451697, 2451698, 2451727, 2451728, 2451758, 2451759, 2451789, 2451790, 2451819, 2451820, 2451850, 2451851, 2451880, 2451881, 2451911, 2451912, 2451942, 2451943, 2451970, 2451971, 2452001, 2452002, 2452031, 2452032, 2452062, 2452063, 2452092, 2452093, 2452123, 2452124, 2452154, 2452155, 2452184, 2452185, 2452215, 2452216, 2452245, 2452246) AND isnotnull(d_date_sk#11)) +Input [3]: [d_date_sk#11, d_year#38, d_dom#39] +Condition : (((((isnotnull(d_dom#39) AND (d_dom#39 >= 1)) AND (d_dom#39 <= 2)) AND d_year#38 IN (1999,2000,2001)) AND d_date_sk#11 INSET 2451180, 2451181, 2451211, 2451212, 2451239, 2451240, 2451270, 2451271, 2451300, 2451301, 2451331, 2451332, 2451361, 2451362, 2451392, 2451393, 2451423, 2451424, 2451453, 2451454, 2451484, 2451485, 2451514, 2451515, 2451545, 2451546, 2451576, 2451577, 2451605, 2451606, 2451636, 2451637, 2451666, 2451667, 2451697, 2451698, 2451727, 2451728, 2451758, 2451759, 2451789, 2451790, 2451819, 2451820, 2451850, 2451851, 2451880, 2451881, 2451911, 2451912, 2451942, 2451943, 2451970, 2451971, 2452001, 2452002, 2452031, 2452032, 2452062, 2452063, 2452092, 2452093, 2452123, 2452124, 2452154, 2452155, 2452184, 2452185, 2452215, 2452216, 2452245, 2452246) AND isnotnull(d_date_sk#11)) (49) Project [codegen id : 1] Output [1]: [d_date_sk#11] -Input [3]: [d_date_sk#11, d_year#45, d_dom#46] +Input [3]: [d_date_sk#11, d_year#38, d_dom#39] (50) BroadcastExchange Input [1]: [d_date_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#47] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68/explain.txt index 63f007cf1205e..d0cf7f029917d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68/explain.txt @@ -87,7 +87,7 @@ Input [2]: [s_store_sk#12, s_city#13] (11) BroadcastExchange Input [1]: [s_store_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_store_sk#4] @@ -99,123 +99,123 @@ Output [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, Input [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, s_store_sk#12] (14) Scan parquet default.household_demographics -Output [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Output [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [Or(EqualTo(hd_dep_count,5),EqualTo(hd_vehicle_count,3)), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] (16) Filter [codegen id : 3] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] -Condition : (((hd_dep_count#16 = 5) OR (hd_vehicle_count#17 = 3)) AND isnotnull(hd_demo_sk#15)) +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] +Condition : (((hd_dep_count#15 = 5) OR (hd_vehicle_count#16 = 3)) AND isnotnull(hd_demo_sk#14)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#15] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Output [1]: [hd_demo_sk#14] +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] (18) BroadcastExchange -Input [1]: [hd_demo_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [1]: [hd_demo_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#15] +Right keys [1]: [hd_demo_sk#14] Join condition: None (20) Project [codegen id : 5] Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8] -Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, hd_demo_sk#15] +Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, hd_demo_sk#14] (21) Scan parquet default.customer_address -Output [2]: [ca_address_sk#19, ca_city#20] +Output [2]: [ca_address_sk#17, ca_city#18] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_city)] ReadSchema: struct (22) ColumnarToRow [codegen id : 4] -Input [2]: [ca_address_sk#19, ca_city#20] +Input [2]: [ca_address_sk#17, ca_city#18] (23) Filter [codegen id : 4] -Input [2]: [ca_address_sk#19, ca_city#20] -Condition : (isnotnull(ca_address_sk#19) AND isnotnull(ca_city#20)) +Input [2]: [ca_address_sk#17, ca_city#18] +Condition : (isnotnull(ca_address_sk#17) AND isnotnull(ca_city#18)) (24) BroadcastExchange -Input [2]: [ca_address_sk#19, ca_city#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21] +Input [2]: [ca_address_sk#17, ca_city#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (25) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_addr_sk#3] -Right keys [1]: [ca_address_sk#19] +Right keys [1]: [ca_address_sk#17] Join condition: None (26) Project [codegen id : 5] -Output [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#20] -Input [8]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_address_sk#19, ca_city#20] +Output [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#18] +Input [8]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_address_sk#17, ca_city#18] (27) HashAggregate [codegen id : 5] -Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#20] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20] +Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#18] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18] Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#6)), partial_sum(UnscaledValue(ss_ext_list_price#7)), partial_sum(UnscaledValue(ss_ext_tax#8))] -Aggregate Attributes [3]: [sum#22, sum#23, sum#24] -Results [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20, sum#25, sum#26, sum#27] +Aggregate Attributes [3]: [sum#19, sum#20, sum#21] +Results [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18, sum#22, sum#23, sum#24] (28) Exchange -Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20, sum#25, sum#26, sum#27] -Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18, sum#22, sum#23, sum#24] +Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 8] -Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20, sum#25, sum#26, sum#27] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20] +Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18, sum#22, sum#23, sum#24] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18] Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#6)), sum(UnscaledValue(ss_ext_list_price#7)), sum(UnscaledValue(ss_ext_tax#8))] -Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#6))#29, sum(UnscaledValue(ss_ext_list_price#7))#30, sum(UnscaledValue(ss_ext_tax#8))#31] -Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#20 AS bought_city#32, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#29,17,2) AS extended_price#33, MakeDecimal(sum(UnscaledValue(ss_ext_list_price#7))#30,17,2) AS list_price#34, MakeDecimal(sum(UnscaledValue(ss_ext_tax#8))#31,17,2) AS extended_tax#35] +Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#6))#25, sum(UnscaledValue(ss_ext_list_price#7))#26, sum(UnscaledValue(ss_ext_tax#8))#27] +Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#18 AS bought_city#28, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#25,17,2) AS extended_price#29, MakeDecimal(sum(UnscaledValue(ss_ext_list_price#7))#26,17,2) AS list_price#30, MakeDecimal(sum(UnscaledValue(ss_ext_tax#8))#27,17,2) AS extended_tax#31] (30) Scan parquet default.customer -Output [4]: [c_customer_sk#36, c_current_addr_sk#37, c_first_name#38, c_last_name#39] +Output [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 6] -Input [4]: [c_customer_sk#36, c_current_addr_sk#37, c_first_name#38, c_last_name#39] +Input [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] (32) Filter [codegen id : 6] -Input [4]: [c_customer_sk#36, c_current_addr_sk#37, c_first_name#38, c_last_name#39] -Condition : (isnotnull(c_customer_sk#36) AND isnotnull(c_current_addr_sk#37)) +Input [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] +Condition : (isnotnull(c_customer_sk#32) AND isnotnull(c_current_addr_sk#33)) (33) BroadcastExchange -Input [4]: [c_customer_sk#36, c_current_addr_sk#37, c_first_name#38, c_last_name#39] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#40] +Input [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#36] +Right keys [1]: [c_customer_sk#32] Join condition: None (35) Project [codegen id : 8] -Output [8]: [ss_ticket_number#5, bought_city#32, extended_price#33, list_price#34, extended_tax#35, c_current_addr_sk#37, c_first_name#38, c_last_name#39] -Input [10]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#32, extended_price#33, list_price#34, extended_tax#35, c_customer_sk#36, c_current_addr_sk#37, c_first_name#38, c_last_name#39] +Output [8]: [ss_ticket_number#5, bought_city#28, extended_price#29, list_price#30, extended_tax#31, c_current_addr_sk#33, c_first_name#34, c_last_name#35] +Input [10]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#28, extended_price#29, list_price#30, extended_tax#31, c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] (36) ReusedExchange [Reuses operator id: 24] -Output [2]: [ca_address_sk#41, ca_city#42] +Output [2]: [ca_address_sk#36, ca_city#37] (37) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [c_current_addr_sk#37] -Right keys [1]: [ca_address_sk#41] -Join condition: NOT (ca_city#42 = bought_city#32) +Left keys [1]: [c_current_addr_sk#33] +Right keys [1]: [ca_address_sk#36] +Join condition: NOT (ca_city#37 = bought_city#28) (38) Project [codegen id : 8] -Output [8]: [c_last_name#39, c_first_name#38, ca_city#42, bought_city#32, ss_ticket_number#5, extended_price#33, extended_tax#35, list_price#34] -Input [10]: [ss_ticket_number#5, bought_city#32, extended_price#33, list_price#34, extended_tax#35, c_current_addr_sk#37, c_first_name#38, c_last_name#39, ca_address_sk#41, ca_city#42] +Output [8]: [c_last_name#35, c_first_name#34, ca_city#37, bought_city#28, ss_ticket_number#5, extended_price#29, extended_tax#31, list_price#30] +Input [10]: [ss_ticket_number#5, bought_city#28, extended_price#29, list_price#30, extended_tax#31, c_current_addr_sk#33, c_first_name#34, c_last_name#35, ca_address_sk#36, ca_city#37] (39) TakeOrderedAndProject -Input [8]: [c_last_name#39, c_first_name#38, ca_city#42, bought_city#32, ss_ticket_number#5, extended_price#33, extended_tax#35, list_price#34] -Arguments: 100, [c_last_name#39 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#39, c_first_name#38, ca_city#42, bought_city#32, ss_ticket_number#5, extended_price#33, extended_tax#35, list_price#34] +Input [8]: [c_last_name#35, c_first_name#34, ca_city#37, bought_city#28, ss_ticket_number#5, extended_price#29, extended_tax#31, list_price#30] +Arguments: 100, [c_last_name#35 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#35, c_first_name#34, ca_city#37, bought_city#28, ss_ticket_number#5, extended_price#29, extended_tax#31, list_price#30] ===== Subqueries ===== @@ -228,25 +228,25 @@ BroadcastExchange (44) (40) Scan parquet default.date_dim -Output [3]: [d_date_sk#11, d_year#43, d_dom#44] +Output [3]: [d_date_sk#11, d_year#38, d_dom#39] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_dom), GreaterThanOrEqual(d_dom,1), LessThanOrEqual(d_dom,2), In(d_year, [1999,2000,2001]), In(d_date_sk, [2451180,2451181,2451211,2451212,2451239,2451240,2451270,2451271,2451300,2451301,2451331,2451332,2451361,2451362,2451392,2451393,2451423,2451424,2451453,2451454,2451484,2451485,2451514,2451515,2451545,2451546,2451576,2451577,2451605,2451606,2451636,2451637,2451666,2451667,2451697,2451698,2451727,2451728,2451758,2451759,2451789,2451790,2451819,2451820,2451850,2451851,2451880,2451881,2451911,2451912,2451942,2451943,2451970,2451971,2452001,2452002,2452031,2452032,2452062,2452063,2452092,2452093,2452123,2452124,2452154,2452155,2452184,2452185,2452215,2452216,2452245,2452246]), IsNotNull(d_date_sk)] ReadSchema: struct (41) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#43, d_dom#44] +Input [3]: [d_date_sk#11, d_year#38, d_dom#39] (42) Filter [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#43, d_dom#44] -Condition : (((((isnotnull(d_dom#44) AND (d_dom#44 >= 1)) AND (d_dom#44 <= 2)) AND d_year#43 IN (1999,2000,2001)) AND d_date_sk#11 INSET 2451180, 2451181, 2451211, 2451212, 2451239, 2451240, 2451270, 2451271, 2451300, 2451301, 2451331, 2451332, 2451361, 2451362, 2451392, 2451393, 2451423, 2451424, 2451453, 2451454, 2451484, 2451485, 2451514, 2451515, 2451545, 2451546, 2451576, 2451577, 2451605, 2451606, 2451636, 2451637, 2451666, 2451667, 2451697, 2451698, 2451727, 2451728, 2451758, 2451759, 2451789, 2451790, 2451819, 2451820, 2451850, 2451851, 2451880, 2451881, 2451911, 2451912, 2451942, 2451943, 2451970, 2451971, 2452001, 2452002, 2452031, 2452032, 2452062, 2452063, 2452092, 2452093, 2452123, 2452124, 2452154, 2452155, 2452184, 2452185, 2452215, 2452216, 2452245, 2452246) AND isnotnull(d_date_sk#11)) +Input [3]: [d_date_sk#11, d_year#38, d_dom#39] +Condition : (((((isnotnull(d_dom#39) AND (d_dom#39 >= 1)) AND (d_dom#39 <= 2)) AND d_year#38 IN (1999,2000,2001)) AND d_date_sk#11 INSET 2451180, 2451181, 2451211, 2451212, 2451239, 2451240, 2451270, 2451271, 2451300, 2451301, 2451331, 2451332, 2451361, 2451362, 2451392, 2451393, 2451423, 2451424, 2451453, 2451454, 2451484, 2451485, 2451514, 2451515, 2451545, 2451546, 2451576, 2451577, 2451605, 2451606, 2451636, 2451637, 2451666, 2451667, 2451697, 2451698, 2451727, 2451728, 2451758, 2451759, 2451789, 2451790, 2451819, 2451820, 2451850, 2451851, 2451880, 2451881, 2451911, 2451912, 2451942, 2451943, 2451970, 2451971, 2452001, 2452002, 2452031, 2452032, 2452062, 2452063, 2452092, 2452093, 2452123, 2452124, 2452154, 2452155, 2452184, 2452185, 2452215, 2452216, 2452245, 2452246) AND isnotnull(d_date_sk#11)) (43) Project [codegen id : 1] Output [1]: [d_date_sk#11] -Input [3]: [d_date_sk#11, d_year#43, d_dom#44] +Input [3]: [d_date_sk#11, d_year#38, d_dom#39] (44) BroadcastExchange Input [1]: [d_date_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#45] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7.sf100/explain.txt index adbc64c43ff2f..7e79f01f2ed3c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7.sf100/explain.txt @@ -78,7 +78,7 @@ Input [3]: [p_promo_sk#11, p_channel_email#12, p_channel_event#13] (11) BroadcastExchange Input [1]: [p_promo_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_promo_sk#3] @@ -90,84 +90,84 @@ Output [6]: [ss_item_sk#1, ss_cdemo_sk#2, ss_quantity#4, ss_list_price#5, ss_sal Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, p_promo_sk#11] (14) Scan parquet default.customer_demographics -Output [4]: [cd_demo_sk#15, cd_gender#16, cd_marital_status#17, cd_education_status#18] +Output [4]: [cd_demo_sk#14, cd_gender#15, cd_marital_status#16, cd_education_status#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_gender), IsNotNull(cd_marital_status), IsNotNull(cd_education_status), EqualTo(cd_gender,F), EqualTo(cd_marital_status,W), EqualTo(cd_education_status,Primary ), IsNotNull(cd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [4]: [cd_demo_sk#15, cd_gender#16, cd_marital_status#17, cd_education_status#18] +Input [4]: [cd_demo_sk#14, cd_gender#15, cd_marital_status#16, cd_education_status#17] (16) Filter [codegen id : 3] -Input [4]: [cd_demo_sk#15, cd_gender#16, cd_marital_status#17, cd_education_status#18] -Condition : ((((((isnotnull(cd_gender#16) AND isnotnull(cd_marital_status#17)) AND isnotnull(cd_education_status#18)) AND (cd_gender#16 = F)) AND (cd_marital_status#17 = W)) AND (cd_education_status#18 = Primary )) AND isnotnull(cd_demo_sk#15)) +Input [4]: [cd_demo_sk#14, cd_gender#15, cd_marital_status#16, cd_education_status#17] +Condition : ((((((isnotnull(cd_gender#15) AND isnotnull(cd_marital_status#16)) AND isnotnull(cd_education_status#17)) AND (cd_gender#15 = F)) AND (cd_marital_status#16 = W)) AND (cd_education_status#17 = Primary )) AND isnotnull(cd_demo_sk#14)) (17) Project [codegen id : 3] -Output [1]: [cd_demo_sk#15] -Input [4]: [cd_demo_sk#15, cd_gender#16, cd_marital_status#17, cd_education_status#18] +Output [1]: [cd_demo_sk#14] +Input [4]: [cd_demo_sk#14, cd_gender#15, cd_marital_status#16, cd_education_status#17] (18) BroadcastExchange -Input [1]: [cd_demo_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#19] +Input [1]: [cd_demo_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#15] +Right keys [1]: [cd_demo_sk#14] Join condition: None (20) Project [codegen id : 5] Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [7]: [ss_item_sk#1, ss_cdemo_sk#2, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, cd_demo_sk#15] +Input [7]: [ss_item_sk#1, ss_cdemo_sk#2, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, cd_demo_sk#14] (21) Scan parquet default.item -Output [2]: [i_item_sk#20, i_item_id#21] +Output [2]: [i_item_sk#18, i_item_id#19] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#20, i_item_id#21] +Input [2]: [i_item_sk#18, i_item_id#19] (23) Filter [codegen id : 4] -Input [2]: [i_item_sk#20, i_item_id#21] -Condition : isnotnull(i_item_sk#20) +Input [2]: [i_item_sk#18, i_item_id#19] +Condition : isnotnull(i_item_sk#18) (24) BroadcastExchange -Input [2]: [i_item_sk#20, i_item_id#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#22] +Input [2]: [i_item_sk#18, i_item_id#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (25) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#20] +Right keys [1]: [i_item_sk#18] Join condition: None (26) Project [codegen id : 5] -Output [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#21] -Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#20, i_item_id#21] +Output [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#19] +Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#18, i_item_id#19] (27) HashAggregate [codegen id : 5] -Input [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#21] -Keys [1]: [i_item_id#21] +Input [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#19] +Keys [1]: [i_item_id#19] Functions [4]: [partial_avg(ss_quantity#4), partial_avg(UnscaledValue(ss_list_price#5)), partial_avg(UnscaledValue(ss_coupon_amt#7)), partial_avg(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [8]: [sum#23, count#24, sum#25, count#26, sum#27, count#28, sum#29, count#30] -Results [9]: [i_item_id#21, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] +Aggregate Attributes [8]: [sum#20, count#21, sum#22, count#23, sum#24, count#25, sum#26, count#27] +Results [9]: [i_item_id#19, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] (28) Exchange -Input [9]: [i_item_id#21, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] -Arguments: hashpartitioning(i_item_id#21, 5), ENSURE_REQUIREMENTS, [id=#39] +Input [9]: [i_item_id#19, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] +Arguments: hashpartitioning(i_item_id#19, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 6] -Input [9]: [i_item_id#21, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] -Keys [1]: [i_item_id#21] +Input [9]: [i_item_id#19, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] +Keys [1]: [i_item_id#19] Functions [4]: [avg(ss_quantity#4), avg(UnscaledValue(ss_list_price#5)), avg(UnscaledValue(ss_coupon_amt#7)), avg(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [4]: [avg(ss_quantity#4)#40, avg(UnscaledValue(ss_list_price#5))#41, avg(UnscaledValue(ss_coupon_amt#7))#42, avg(UnscaledValue(ss_sales_price#6))#43] -Results [5]: [i_item_id#21, avg(ss_quantity#4)#40 AS agg1#44, cast((avg(UnscaledValue(ss_list_price#5))#41 / 100.0) as decimal(11,6)) AS agg2#45, cast((avg(UnscaledValue(ss_coupon_amt#7))#42 / 100.0) as decimal(11,6)) AS agg3#46, cast((avg(UnscaledValue(ss_sales_price#6))#43 / 100.0) as decimal(11,6)) AS agg4#47] +Aggregate Attributes [4]: [avg(ss_quantity#4)#36, avg(UnscaledValue(ss_list_price#5))#37, avg(UnscaledValue(ss_coupon_amt#7))#38, avg(UnscaledValue(ss_sales_price#6))#39] +Results [5]: [i_item_id#19, avg(ss_quantity#4)#36 AS agg1#40, cast((avg(UnscaledValue(ss_list_price#5))#37 / 100.0) as decimal(11,6)) AS agg2#41, cast((avg(UnscaledValue(ss_coupon_amt#7))#38 / 100.0) as decimal(11,6)) AS agg3#42, cast((avg(UnscaledValue(ss_sales_price#6))#39 / 100.0) as decimal(11,6)) AS agg4#43] (30) TakeOrderedAndProject -Input [5]: [i_item_id#21, agg1#44, agg2#45, agg3#46, agg4#47] -Arguments: 100, [i_item_id#21 ASC NULLS FIRST], [i_item_id#21, agg1#44, agg2#45, agg3#46, agg4#47] +Input [5]: [i_item_id#19, agg1#40, agg2#41, agg3#42, agg4#43] +Arguments: 100, [i_item_id#19 ASC NULLS FIRST], [i_item_id#19, agg1#40, agg2#41, agg3#42, agg4#43] ===== Subqueries ===== @@ -180,25 +180,25 @@ BroadcastExchange (35) (31) Scan parquet default.date_dim -Output [2]: [d_date_sk#10, d_year#48] +Output [2]: [d_date_sk#10, d_year#44] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1998), GreaterThanOrEqual(d_date_sk,2450815), LessThanOrEqual(d_date_sk,2451179), IsNotNull(d_date_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#10, d_year#48] +Input [2]: [d_date_sk#10, d_year#44] (33) Filter [codegen id : 1] -Input [2]: [d_date_sk#10, d_year#48] -Condition : ((((isnotnull(d_year#48) AND (d_year#48 = 1998)) AND (d_date_sk#10 >= 2450815)) AND (d_date_sk#10 <= 2451179)) AND isnotnull(d_date_sk#10)) +Input [2]: [d_date_sk#10, d_year#44] +Condition : ((((isnotnull(d_year#44) AND (d_year#44 = 1998)) AND (d_date_sk#10 >= 2450815)) AND (d_date_sk#10 <= 2451179)) AND isnotnull(d_date_sk#10)) (34) Project [codegen id : 1] Output [1]: [d_date_sk#10] -Input [2]: [d_date_sk#10, d_year#48] +Input [2]: [d_date_sk#10, d_year#44] (35) BroadcastExchange Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#49] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7/explain.txt index afcfd4816dcad..54fb333a149fb 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7/explain.txt @@ -66,7 +66,7 @@ Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_stat (8) BroadcastExchange Input [1]: [cd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_cdemo_sk#2] @@ -78,96 +78,96 @@ Output [7]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10] (11) ReusedExchange [Reuses operator id: 35] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (13) Project [codegen id : 5] Output [6]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15] +Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#14] (14) Scan parquet default.item -Output [2]: [i_item_sk#16, i_item_id#17] +Output [2]: [i_item_sk#15, i_item_id#16] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [2]: [i_item_sk#16, i_item_id#17] +Input [2]: [i_item_sk#15, i_item_id#16] (16) Filter [codegen id : 3] -Input [2]: [i_item_sk#16, i_item_id#17] -Condition : isnotnull(i_item_sk#16) +Input [2]: [i_item_sk#15, i_item_id#16] +Condition : isnotnull(i_item_sk#15) (17) BroadcastExchange -Input [2]: [i_item_sk#16, i_item_id#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#18] +Input [2]: [i_item_sk#15, i_item_id#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#16] +Right keys [1]: [i_item_sk#15] Join condition: None (19) Project [codegen id : 5] -Output [6]: [ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#17] -Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#16, i_item_id#17] +Output [6]: [ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#16] +Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#15, i_item_id#16] (20) Scan parquet default.promotion -Output [3]: [p_promo_sk#19, p_channel_email#20, p_channel_event#21] +Output [3]: [p_promo_sk#17, p_channel_email#18, p_channel_event#19] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [Or(EqualTo(p_channel_email,N),EqualTo(p_channel_event,N)), IsNotNull(p_promo_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [3]: [p_promo_sk#19, p_channel_email#20, p_channel_event#21] +Input [3]: [p_promo_sk#17, p_channel_email#18, p_channel_event#19] (22) Filter [codegen id : 4] -Input [3]: [p_promo_sk#19, p_channel_email#20, p_channel_event#21] -Condition : (((p_channel_email#20 = N) OR (p_channel_event#21 = N)) AND isnotnull(p_promo_sk#19)) +Input [3]: [p_promo_sk#17, p_channel_email#18, p_channel_event#19] +Condition : (((p_channel_email#18 = N) OR (p_channel_event#19 = N)) AND isnotnull(p_promo_sk#17)) (23) Project [codegen id : 4] -Output [1]: [p_promo_sk#19] -Input [3]: [p_promo_sk#19, p_channel_email#20, p_channel_event#21] +Output [1]: [p_promo_sk#17] +Input [3]: [p_promo_sk#17, p_channel_email#18, p_channel_event#19] (24) BroadcastExchange -Input [1]: [p_promo_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [p_promo_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (25) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_promo_sk#3] -Right keys [1]: [p_promo_sk#19] +Right keys [1]: [p_promo_sk#17] Join condition: None (26) Project [codegen id : 5] -Output [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#17] -Input [7]: [ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#17, p_promo_sk#19] +Output [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#16] +Input [7]: [ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#16, p_promo_sk#17] (27) HashAggregate [codegen id : 5] -Input [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#17] -Keys [1]: [i_item_id#17] +Input [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#16] +Keys [1]: [i_item_id#16] Functions [4]: [partial_avg(ss_quantity#4), partial_avg(UnscaledValue(ss_list_price#5)), partial_avg(UnscaledValue(ss_coupon_amt#7)), partial_avg(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [8]: [sum#23, count#24, sum#25, count#26, sum#27, count#28, sum#29, count#30] -Results [9]: [i_item_id#17, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] +Aggregate Attributes [8]: [sum#20, count#21, sum#22, count#23, sum#24, count#25, sum#26, count#27] +Results [9]: [i_item_id#16, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] (28) Exchange -Input [9]: [i_item_id#17, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] -Arguments: hashpartitioning(i_item_id#17, 5), ENSURE_REQUIREMENTS, [id=#39] +Input [9]: [i_item_id#16, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] +Arguments: hashpartitioning(i_item_id#16, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 6] -Input [9]: [i_item_id#17, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] -Keys [1]: [i_item_id#17] +Input [9]: [i_item_id#16, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] +Keys [1]: [i_item_id#16] Functions [4]: [avg(ss_quantity#4), avg(UnscaledValue(ss_list_price#5)), avg(UnscaledValue(ss_coupon_amt#7)), avg(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [4]: [avg(ss_quantity#4)#40, avg(UnscaledValue(ss_list_price#5))#41, avg(UnscaledValue(ss_coupon_amt#7))#42, avg(UnscaledValue(ss_sales_price#6))#43] -Results [5]: [i_item_id#17, avg(ss_quantity#4)#40 AS agg1#44, cast((avg(UnscaledValue(ss_list_price#5))#41 / 100.0) as decimal(11,6)) AS agg2#45, cast((avg(UnscaledValue(ss_coupon_amt#7))#42 / 100.0) as decimal(11,6)) AS agg3#46, cast((avg(UnscaledValue(ss_sales_price#6))#43 / 100.0) as decimal(11,6)) AS agg4#47] +Aggregate Attributes [4]: [avg(ss_quantity#4)#36, avg(UnscaledValue(ss_list_price#5))#37, avg(UnscaledValue(ss_coupon_amt#7))#38, avg(UnscaledValue(ss_sales_price#6))#39] +Results [5]: [i_item_id#16, avg(ss_quantity#4)#36 AS agg1#40, cast((avg(UnscaledValue(ss_list_price#5))#37 / 100.0) as decimal(11,6)) AS agg2#41, cast((avg(UnscaledValue(ss_coupon_amt#7))#38 / 100.0) as decimal(11,6)) AS agg3#42, cast((avg(UnscaledValue(ss_sales_price#6))#39 / 100.0) as decimal(11,6)) AS agg4#43] (30) TakeOrderedAndProject -Input [5]: [i_item_id#17, agg1#44, agg2#45, agg3#46, agg4#47] -Arguments: 100, [i_item_id#17 ASC NULLS FIRST], [i_item_id#17, agg1#44, agg2#45, agg3#46, agg4#47] +Input [5]: [i_item_id#16, agg1#40, agg2#41, agg3#42, agg4#43] +Arguments: 100, [i_item_id#16 ASC NULLS FIRST], [i_item_id#16, agg1#40, agg2#41, agg3#42, agg4#43] ===== Subqueries ===== @@ -180,25 +180,25 @@ BroadcastExchange (35) (31) Scan parquet default.date_dim -Output [2]: [d_date_sk#15, d_year#48] +Output [2]: [d_date_sk#14, d_year#44] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1998), GreaterThanOrEqual(d_date_sk,2450815), LessThanOrEqual(d_date_sk,2451179), IsNotNull(d_date_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#48] +Input [2]: [d_date_sk#14, d_year#44] (33) Filter [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#48] -Condition : ((((isnotnull(d_year#48) AND (d_year#48 = 1998)) AND (d_date_sk#15 >= 2450815)) AND (d_date_sk#15 <= 2451179)) AND isnotnull(d_date_sk#15)) +Input [2]: [d_date_sk#14, d_year#44] +Condition : ((((isnotnull(d_year#44) AND (d_year#44 = 1998)) AND (d_date_sk#14 >= 2450815)) AND (d_date_sk#14 <= 2451179)) AND isnotnull(d_date_sk#14)) (34) Project [codegen id : 1] -Output [1]: [d_date_sk#15] -Input [2]: [d_date_sk#15, d_year#48] +Output [1]: [d_date_sk#14] +Input [2]: [d_date_sk#14, d_year#44] (35) BroadcastExchange -Input [1]: [d_date_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#49] +Input [1]: [d_date_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73.sf100/explain.txt index 1419499d54d5e..4cd58b1442653 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73.sf100/explain.txt @@ -80,7 +80,7 @@ Input [2]: [s_store_sk#8, s_county#9] (11) BroadcastExchange Input [1]: [s_store_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#3] @@ -92,92 +92,92 @@ Output [3]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4] Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, s_store_sk#8] (14) Scan parquet default.household_demographics -Output [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_vehicle_count), IsNotNull(hd_dep_count), Or(EqualTo(hd_buy_potential,>10000 ),EqualTo(hd_buy_potential,Unknown )), GreaterThan(hd_vehicle_count,0), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (16) Filter [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] -Condition : (((((isnotnull(hd_vehicle_count#14) AND isnotnull(hd_dep_count#13)) AND ((hd_buy_potential#12 = >10000 ) OR (hd_buy_potential#12 = Unknown ))) AND (hd_vehicle_count#14 > 0)) AND ((cast(hd_dep_count#13 as double) / cast(hd_vehicle_count#14 as double)) > 1.0)) AND isnotnull(hd_demo_sk#11)) +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] +Condition : (((((isnotnull(hd_vehicle_count#13) AND isnotnull(hd_dep_count#12)) AND ((hd_buy_potential#11 = >10000 ) OR (hd_buy_potential#11 = Unknown ))) AND (hd_vehicle_count#13 > 0)) AND ((cast(hd_dep_count#12 as double) / cast(hd_vehicle_count#13 as double)) > 1.0)) AND isnotnull(hd_demo_sk#10)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#11] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [1]: [hd_demo_sk#10] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (18) BroadcastExchange -Input [1]: [hd_demo_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [hd_demo_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#11] +Right keys [1]: [hd_demo_sk#10] Join condition: None (20) Project [codegen id : 4] Output [2]: [ss_customer_sk#1, ss_ticket_number#4] -Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#11] +Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#10] (21) HashAggregate [codegen id : 4] Input [2]: [ss_customer_sk#1, ss_ticket_number#4] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#16] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Aggregate Attributes [1]: [count#14] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] (22) Exchange -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] -Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] +Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 5] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#19] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#19 AS cnt#20] +Aggregate Attributes [1]: [count(1)#16] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#16 AS cnt#17] (24) Filter [codegen id : 5] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] -Condition : ((cnt#20 >= 1) AND (cnt#20 <= 5)) +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] +Condition : ((cnt#17 >= 1) AND (cnt#17 <= 5)) (25) BroadcastExchange -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#21] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [plan_id=4] (26) Scan parquet default.customer -Output [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] +Output [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (27) ColumnarToRow -Input [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (28) Filter -Input [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] -Condition : isnotnull(c_customer_sk#22) +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Condition : isnotnull(c_customer_sk#18) (29) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#22] +Right keys [1]: [c_customer_sk#18] Join condition: None (30) Project [codegen id : 6] -Output [6]: [c_last_name#25, c_first_name#24, c_salutation#23, c_preferred_cust_flag#26, ss_ticket_number#4, cnt#20] -Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20, c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] +Output [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17, c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (31) Exchange -Input [6]: [c_last_name#25, c_first_name#24, c_salutation#23, c_preferred_cust_flag#26, ss_ticket_number#4, cnt#20] -Arguments: rangepartitioning(cnt#20 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: rangepartitioning(cnt#17 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [plan_id=5] (32) Sort [codegen id : 7] -Input [6]: [c_last_name#25, c_first_name#24, c_salutation#23, c_preferred_cust_flag#26, ss_ticket_number#4, cnt#20] -Arguments: [cnt#20 DESC NULLS LAST], true, 0 +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: [cnt#17 DESC NULLS LAST], true, 0 ===== Subqueries ===== @@ -190,25 +190,25 @@ BroadcastExchange (37) (33) Scan parquet default.date_dim -Output [3]: [d_date_sk#7, d_year#28, d_dom#29] +Output [3]: [d_date_sk#7, d_year#23, d_dom#24] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_dom), GreaterThanOrEqual(d_dom,1), LessThanOrEqual(d_dom,2), In(d_year, [1998,1999,2000]), In(d_date_sk, [2450815,2450816,2450846,2450847,2450874,2450875,2450905,2450906,2450935,2450936,2450966,2450967,2450996,2450997,2451027,2451028,2451058,2451059,2451088,2451089,2451119,2451120,2451149,2451150,2451180,2451181,2451211,2451212,2451239,2451240,2451270,2451271,2451300,2451301,2451331,2451332,2451361,2451362,2451392,2451393,2451423,2451424,2451453,2451454,2451484,2451485,2451514,2451515,2451545,2451546,2451576,2451577,2451605,2451606,2451636,2451637,2451666,2451667,2451697,2451698,2451727,2451728,2451758,2451759,2451789,2451790,2451819,2451820,2451850,2451851,2451880,2451881]), IsNotNull(d_date_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (35) Filter [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] -Condition : (((((isnotnull(d_dom#29) AND (d_dom#29 >= 1)) AND (d_dom#29 <= 2)) AND d_year#28 IN (1998,1999,2000)) AND d_date_sk#7 INSET 2450815, 2450816, 2450846, 2450847, 2450874, 2450875, 2450905, 2450906, 2450935, 2450936, 2450966, 2450967, 2450996, 2450997, 2451027, 2451028, 2451058, 2451059, 2451088, 2451089, 2451119, 2451120, 2451149, 2451150, 2451180, 2451181, 2451211, 2451212, 2451239, 2451240, 2451270, 2451271, 2451300, 2451301, 2451331, 2451332, 2451361, 2451362, 2451392, 2451393, 2451423, 2451424, 2451453, 2451454, 2451484, 2451485, 2451514, 2451515, 2451545, 2451546, 2451576, 2451577, 2451605, 2451606, 2451636, 2451637, 2451666, 2451667, 2451697, 2451698, 2451727, 2451728, 2451758, 2451759, 2451789, 2451790, 2451819, 2451820, 2451850, 2451851, 2451880, 2451881) AND isnotnull(d_date_sk#7)) +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] +Condition : (((((isnotnull(d_dom#24) AND (d_dom#24 >= 1)) AND (d_dom#24 <= 2)) AND d_year#23 IN (1998,1999,2000)) AND d_date_sk#7 INSET 2450815, 2450816, 2450846, 2450847, 2450874, 2450875, 2450905, 2450906, 2450935, 2450936, 2450966, 2450967, 2450996, 2450997, 2451027, 2451028, 2451058, 2451059, 2451088, 2451089, 2451119, 2451120, 2451149, 2451150, 2451180, 2451181, 2451211, 2451212, 2451239, 2451240, 2451270, 2451271, 2451300, 2451301, 2451331, 2451332, 2451361, 2451362, 2451392, 2451393, 2451423, 2451424, 2451453, 2451454, 2451484, 2451485, 2451514, 2451515, 2451545, 2451546, 2451576, 2451577, 2451605, 2451606, 2451636, 2451637, 2451666, 2451667, 2451697, 2451698, 2451727, 2451728, 2451758, 2451759, 2451789, 2451790, 2451819, 2451820, 2451850, 2451851, 2451880, 2451881) AND isnotnull(d_date_sk#7)) (36) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (37) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#30] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73/explain.txt index e86ea3648e7a2..de22608640529 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73/explain.txt @@ -80,7 +80,7 @@ Input [2]: [s_store_sk#8, s_county#9] (11) BroadcastExchange Input [1]: [s_store_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#3] @@ -92,92 +92,92 @@ Output [3]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4] Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, s_store_sk#8] (14) Scan parquet default.household_demographics -Output [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_vehicle_count), IsNotNull(hd_dep_count), Or(EqualTo(hd_buy_potential,>10000 ),EqualTo(hd_buy_potential,Unknown )), GreaterThan(hd_vehicle_count,0), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (16) Filter [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] -Condition : (((((isnotnull(hd_vehicle_count#14) AND isnotnull(hd_dep_count#13)) AND ((hd_buy_potential#12 = >10000 ) OR (hd_buy_potential#12 = Unknown ))) AND (hd_vehicle_count#14 > 0)) AND ((cast(hd_dep_count#13 as double) / cast(hd_vehicle_count#14 as double)) > 1.0)) AND isnotnull(hd_demo_sk#11)) +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] +Condition : (((((isnotnull(hd_vehicle_count#13) AND isnotnull(hd_dep_count#12)) AND ((hd_buy_potential#11 = >10000 ) OR (hd_buy_potential#11 = Unknown ))) AND (hd_vehicle_count#13 > 0)) AND ((cast(hd_dep_count#12 as double) / cast(hd_vehicle_count#13 as double)) > 1.0)) AND isnotnull(hd_demo_sk#10)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#11] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [1]: [hd_demo_sk#10] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (18) BroadcastExchange -Input [1]: [hd_demo_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [hd_demo_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#11] +Right keys [1]: [hd_demo_sk#10] Join condition: None (20) Project [codegen id : 4] Output [2]: [ss_customer_sk#1, ss_ticket_number#4] -Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#11] +Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#10] (21) HashAggregate [codegen id : 4] Input [2]: [ss_customer_sk#1, ss_ticket_number#4] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#16] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Aggregate Attributes [1]: [count#14] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] (22) Exchange -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] -Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] +Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 6] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#19] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#19 AS cnt#20] +Aggregate Attributes [1]: [count(1)#16] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#16 AS cnt#17] (24) Filter [codegen id : 6] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] -Condition : ((cnt#20 >= 1) AND (cnt#20 <= 5)) +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] +Condition : ((cnt#17 >= 1) AND (cnt#17 <= 5)) (25) Scan parquet default.customer -Output [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] +Output [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 5] -Input [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (27) Filter [codegen id : 5] -Input [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] -Condition : isnotnull(c_customer_sk#21) +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Condition : isnotnull(c_customer_sk#18) (28) BroadcastExchange -Input [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#26] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (29) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#21] +Right keys [1]: [c_customer_sk#18] Join condition: None (30) Project [codegen id : 6] -Output [6]: [c_last_name#24, c_first_name#23, c_salutation#22, c_preferred_cust_flag#25, ss_ticket_number#4, cnt#20] -Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20, c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] +Output [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17, c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (31) Exchange -Input [6]: [c_last_name#24, c_first_name#23, c_salutation#22, c_preferred_cust_flag#25, ss_ticket_number#4, cnt#20] -Arguments: rangepartitioning(cnt#20 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: rangepartitioning(cnt#17 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [plan_id=5] (32) Sort [codegen id : 7] -Input [6]: [c_last_name#24, c_first_name#23, c_salutation#22, c_preferred_cust_flag#25, ss_ticket_number#4, cnt#20] -Arguments: [cnt#20 DESC NULLS LAST], true, 0 +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: [cnt#17 DESC NULLS LAST], true, 0 ===== Subqueries ===== @@ -190,25 +190,25 @@ BroadcastExchange (37) (33) Scan parquet default.date_dim -Output [3]: [d_date_sk#7, d_year#28, d_dom#29] +Output [3]: [d_date_sk#7, d_year#23, d_dom#24] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_dom), GreaterThanOrEqual(d_dom,1), LessThanOrEqual(d_dom,2), In(d_year, [1998,1999,2000]), In(d_date_sk, [2450815,2450816,2450846,2450847,2450874,2450875,2450905,2450906,2450935,2450936,2450966,2450967,2450996,2450997,2451027,2451028,2451058,2451059,2451088,2451089,2451119,2451120,2451149,2451150,2451180,2451181,2451211,2451212,2451239,2451240,2451270,2451271,2451300,2451301,2451331,2451332,2451361,2451362,2451392,2451393,2451423,2451424,2451453,2451454,2451484,2451485,2451514,2451515,2451545,2451546,2451576,2451577,2451605,2451606,2451636,2451637,2451666,2451667,2451697,2451698,2451727,2451728,2451758,2451759,2451789,2451790,2451819,2451820,2451850,2451851,2451880,2451881]), IsNotNull(d_date_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (35) Filter [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] -Condition : (((((isnotnull(d_dom#29) AND (d_dom#29 >= 1)) AND (d_dom#29 <= 2)) AND d_year#28 IN (1998,1999,2000)) AND d_date_sk#7 INSET 2450815, 2450816, 2450846, 2450847, 2450874, 2450875, 2450905, 2450906, 2450935, 2450936, 2450966, 2450967, 2450996, 2450997, 2451027, 2451028, 2451058, 2451059, 2451088, 2451089, 2451119, 2451120, 2451149, 2451150, 2451180, 2451181, 2451211, 2451212, 2451239, 2451240, 2451270, 2451271, 2451300, 2451301, 2451331, 2451332, 2451361, 2451362, 2451392, 2451393, 2451423, 2451424, 2451453, 2451454, 2451484, 2451485, 2451514, 2451515, 2451545, 2451546, 2451576, 2451577, 2451605, 2451606, 2451636, 2451637, 2451666, 2451667, 2451697, 2451698, 2451727, 2451728, 2451758, 2451759, 2451789, 2451790, 2451819, 2451820, 2451850, 2451851, 2451880, 2451881) AND isnotnull(d_date_sk#7)) +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] +Condition : (((((isnotnull(d_dom#24) AND (d_dom#24 >= 1)) AND (d_dom#24 <= 2)) AND d_year#23 IN (1998,1999,2000)) AND d_date_sk#7 INSET 2450815, 2450816, 2450846, 2450847, 2450874, 2450875, 2450905, 2450906, 2450935, 2450936, 2450966, 2450967, 2450996, 2450997, 2451027, 2451028, 2451058, 2451059, 2451088, 2451089, 2451119, 2451120, 2451149, 2451150, 2451180, 2451181, 2451211, 2451212, 2451239, 2451240, 2451270, 2451271, 2451300, 2451301, 2451331, 2451332, 2451361, 2451362, 2451392, 2451393, 2451423, 2451424, 2451453, 2451454, 2451484, 2451485, 2451514, 2451515, 2451545, 2451546, 2451576, 2451577, 2451605, 2451606, 2451636, 2451637, 2451666, 2451667, 2451697, 2451698, 2451727, 2451728, 2451758, 2451759, 2451789, 2451790, 2451819, 2451820, 2451850, 2451851, 2451880, 2451881) AND isnotnull(d_date_sk#7)) (36) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (37) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#30] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q79.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q79.sf100/explain.txt index 739c29798ad6e..4943e951d7223 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q79.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q79.sf100/explain.txt @@ -81,7 +81,7 @@ Input [3]: [hd_demo_sk#11, hd_dep_count#12, hd_vehicle_count#13] (11) BroadcastExchange Input [1]: [hd_demo_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] @@ -93,96 +93,96 @@ Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, hd_demo_sk#11] (14) Scan parquet default.store -Output [3]: [s_store_sk#15, s_number_employees#16, s_city#17] +Output [3]: [s_store_sk#14, s_number_employees#15, s_city#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_number_employees), GreaterThanOrEqual(s_number_employees,200), LessThanOrEqual(s_number_employees,295), IsNotNull(s_store_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [3]: [s_store_sk#15, s_number_employees#16, s_city#17] +Input [3]: [s_store_sk#14, s_number_employees#15, s_city#16] (16) Filter [codegen id : 3] -Input [3]: [s_store_sk#15, s_number_employees#16, s_city#17] -Condition : (((isnotnull(s_number_employees#16) AND (s_number_employees#16 >= 200)) AND (s_number_employees#16 <= 295)) AND isnotnull(s_store_sk#15)) +Input [3]: [s_store_sk#14, s_number_employees#15, s_city#16] +Condition : (((isnotnull(s_number_employees#15) AND (s_number_employees#15 >= 200)) AND (s_number_employees#15 <= 295)) AND isnotnull(s_store_sk#14)) (17) Project [codegen id : 3] -Output [2]: [s_store_sk#15, s_city#17] -Input [3]: [s_store_sk#15, s_number_employees#16, s_city#17] +Output [2]: [s_store_sk#14, s_city#16] +Input [3]: [s_store_sk#14, s_number_employees#15, s_city#16] (18) BroadcastExchange -Input [2]: [s_store_sk#15, s_city#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [2]: [s_store_sk#14, s_city#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#4] -Right keys [1]: [s_store_sk#15] +Right keys [1]: [s_store_sk#14] Join condition: None (20) Project [codegen id : 4] -Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#17] -Input [8]: [ss_customer_sk#1, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_store_sk#15, s_city#17] +Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#16] +Input [8]: [ss_customer_sk#1, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_store_sk#14, s_city#16] (21) HashAggregate [codegen id : 4] -Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#17] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#17] +Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#16] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#16] Functions [2]: [partial_sum(UnscaledValue(ss_coupon_amt#6)), partial_sum(UnscaledValue(ss_net_profit#7))] -Aggregate Attributes [2]: [sum#19, sum#20] -Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#17, sum#21, sum#22] +Aggregate Attributes [2]: [sum#17, sum#18] +Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#16, sum#19, sum#20] (22) Exchange -Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#17, sum#21, sum#22] -Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#17, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#16, sum#19, sum#20] +Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#16, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 5] -Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#17, sum#21, sum#22] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#17] +Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#16, sum#19, sum#20] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#16] Functions [2]: [sum(UnscaledValue(ss_coupon_amt#6)), sum(UnscaledValue(ss_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#24, sum(UnscaledValue(ss_net_profit#7))#25] -Results [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#17, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#24,17,2) AS amt#26, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#25,17,2) AS profit#27] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#21, sum(UnscaledValue(ss_net_profit#7))#22] +Results [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#16, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#21,17,2) AS amt#23, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#22,17,2) AS profit#24] (24) Exchange -Input [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#17, amt#26, profit#27] -Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#16, amt#23, profit#24] +Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=4] (25) Sort [codegen id : 6] -Input [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#17, amt#26, profit#27] +Input [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#16, amt#23, profit#24] Arguments: [ss_customer_sk#1 ASC NULLS FIRST], false, 0 (26) Scan parquet default.customer -Output [3]: [c_customer_sk#29, c_first_name#30, c_last_name#31] +Output [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 7] -Input [3]: [c_customer_sk#29, c_first_name#30, c_last_name#31] +Input [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] (28) Filter [codegen id : 7] -Input [3]: [c_customer_sk#29, c_first_name#30, c_last_name#31] -Condition : isnotnull(c_customer_sk#29) +Input [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] +Condition : isnotnull(c_customer_sk#25) (29) Exchange -Input [3]: [c_customer_sk#29, c_first_name#30, c_last_name#31] -Arguments: hashpartitioning(c_customer_sk#29, 5), ENSURE_REQUIREMENTS, [id=#32] +Input [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] +Arguments: hashpartitioning(c_customer_sk#25, 5), ENSURE_REQUIREMENTS, [plan_id=5] (30) Sort [codegen id : 8] -Input [3]: [c_customer_sk#29, c_first_name#30, c_last_name#31] -Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] +Arguments: [c_customer_sk#25 ASC NULLS FIRST], false, 0 (31) SortMergeJoin [codegen id : 9] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#29] +Right keys [1]: [c_customer_sk#25] Join condition: None (32) Project [codegen id : 9] -Output [7]: [c_last_name#31, c_first_name#30, substr(s_city#17, 1, 30) AS substr(s_city, 1, 30)#33, ss_ticket_number#5, amt#26, profit#27, s_city#17] -Input [8]: [ss_ticket_number#5, ss_customer_sk#1, s_city#17, amt#26, profit#27, c_customer_sk#29, c_first_name#30, c_last_name#31] +Output [7]: [c_last_name#27, c_first_name#26, substr(s_city#16, 1, 30) AS substr(s_city, 1, 30)#28, ss_ticket_number#5, amt#23, profit#24, s_city#16] +Input [8]: [ss_ticket_number#5, ss_customer_sk#1, s_city#16, amt#23, profit#24, c_customer_sk#25, c_first_name#26, c_last_name#27] (33) TakeOrderedAndProject -Input [7]: [c_last_name#31, c_first_name#30, substr(s_city, 1, 30)#33, ss_ticket_number#5, amt#26, profit#27, s_city#17] -Arguments: 100, [c_last_name#31 ASC NULLS FIRST, c_first_name#30 ASC NULLS FIRST, substr(s_city#17, 1, 30) ASC NULLS FIRST, profit#27 ASC NULLS FIRST], [c_last_name#31, c_first_name#30, substr(s_city, 1, 30)#33, ss_ticket_number#5, amt#26, profit#27] +Input [7]: [c_last_name#27, c_first_name#26, substr(s_city, 1, 30)#28, ss_ticket_number#5, amt#23, profit#24, s_city#16] +Arguments: 100, [c_last_name#27 ASC NULLS FIRST, c_first_name#26 ASC NULLS FIRST, substr(s_city#16, 1, 30) ASC NULLS FIRST, profit#24 ASC NULLS FIRST], [c_last_name#27, c_first_name#26, substr(s_city, 1, 30)#28, ss_ticket_number#5, amt#23, profit#24] ===== Subqueries ===== @@ -195,25 +195,25 @@ BroadcastExchange (38) (34) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#34, d_dow#35] +Output [3]: [d_date_sk#10, d_year#29, d_dow#30] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_dow), EqualTo(d_dow,1), In(d_year, [1998,1999,2000]), GreaterThanOrEqual(d_date_sk,2450819), LessThanOrEqual(d_date_sk,2451904), IsNotNull(d_date_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#34, d_dow#35] +Input [3]: [d_date_sk#10, d_year#29, d_dow#30] (36) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#34, d_dow#35] -Condition : (((((isnotnull(d_dow#35) AND (d_dow#35 = 1)) AND d_year#34 IN (1998,1999,2000)) AND (d_date_sk#10 >= 2450819)) AND (d_date_sk#10 <= 2451904)) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#10, d_year#29, d_dow#30] +Condition : (((((isnotnull(d_dow#30) AND (d_dow#30 = 1)) AND d_year#29 IN (1998,1999,2000)) AND (d_date_sk#10 >= 2450819)) AND (d_date_sk#10 <= 2451904)) AND isnotnull(d_date_sk#10)) (37) Project [codegen id : 1] Output [1]: [d_date_sk#10] -Input [3]: [d_date_sk#10, d_year#34, d_dow#35] +Input [3]: [d_date_sk#10, d_year#29, d_dow#30] (38) BroadcastExchange Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#36] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q79/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q79/explain.txt index b00a5500d7c9a..eedd3e68fc2b6 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q79/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q79/explain.txt @@ -78,7 +78,7 @@ Input [3]: [s_store_sk#11, s_number_employees#12, s_city#13] (11) BroadcastExchange Input [2]: [s_store_sk#11, s_city#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#4] @@ -90,84 +90,84 @@ Output [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, Input [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_store_sk#11, s_city#13] (14) Scan parquet default.household_demographics -Output [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Output [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [Or(EqualTo(hd_dep_count,8),GreaterThan(hd_vehicle_count,0)), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] (16) Filter [codegen id : 3] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] -Condition : (((hd_dep_count#16 = 8) OR (hd_vehicle_count#17 > 0)) AND isnotnull(hd_demo_sk#15)) +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] +Condition : (((hd_dep_count#15 = 8) OR (hd_vehicle_count#16 > 0)) AND isnotnull(hd_demo_sk#14)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#15] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Output [1]: [hd_demo_sk#14] +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] (18) BroadcastExchange -Input [1]: [hd_demo_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [1]: [hd_demo_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#15] +Right keys [1]: [hd_demo_sk#14] Join condition: None (20) Project [codegen id : 4] Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#13] -Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#13, hd_demo_sk#15] +Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#13, hd_demo_sk#14] (21) HashAggregate [codegen id : 4] Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#13] Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13] Functions [2]: [partial_sum(UnscaledValue(ss_coupon_amt#6)), partial_sum(UnscaledValue(ss_net_profit#7))] -Aggregate Attributes [2]: [sum#19, sum#20] -Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, sum#21, sum#22] +Aggregate Attributes [2]: [sum#17, sum#18] +Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, sum#19, sum#20] (22) Exchange -Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, sum#21, sum#22] -Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, sum#19, sum#20] +Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 6] -Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, sum#21, sum#22] +Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, sum#19, sum#20] Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13] Functions [2]: [sum(UnscaledValue(ss_coupon_amt#6)), sum(UnscaledValue(ss_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#24, sum(UnscaledValue(ss_net_profit#7))#25] -Results [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#13, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#24,17,2) AS amt#26, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#25,17,2) AS profit#27] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#21, sum(UnscaledValue(ss_net_profit#7))#22] +Results [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#13, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#21,17,2) AS amt#23, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#22,17,2) AS profit#24] (24) Scan parquet default.customer -Output [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30] +Output [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 5] -Input [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30] +Input [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] (26) Filter [codegen id : 5] -Input [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30] -Condition : isnotnull(c_customer_sk#28) +Input [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] +Condition : isnotnull(c_customer_sk#25) (27) BroadcastExchange -Input [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#31] +Input [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (28) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#28] +Right keys [1]: [c_customer_sk#25] Join condition: None (29) Project [codegen id : 6] -Output [7]: [c_last_name#30, c_first_name#29, substr(s_city#13, 1, 30) AS substr(s_city, 1, 30)#32, ss_ticket_number#5, amt#26, profit#27, s_city#13] -Input [8]: [ss_ticket_number#5, ss_customer_sk#1, s_city#13, amt#26, profit#27, c_customer_sk#28, c_first_name#29, c_last_name#30] +Output [7]: [c_last_name#27, c_first_name#26, substr(s_city#13, 1, 30) AS substr(s_city, 1, 30)#28, ss_ticket_number#5, amt#23, profit#24, s_city#13] +Input [8]: [ss_ticket_number#5, ss_customer_sk#1, s_city#13, amt#23, profit#24, c_customer_sk#25, c_first_name#26, c_last_name#27] (30) TakeOrderedAndProject -Input [7]: [c_last_name#30, c_first_name#29, substr(s_city, 1, 30)#32, ss_ticket_number#5, amt#26, profit#27, s_city#13] -Arguments: 100, [c_last_name#30 ASC NULLS FIRST, c_first_name#29 ASC NULLS FIRST, substr(s_city#13, 1, 30) ASC NULLS FIRST, profit#27 ASC NULLS FIRST], [c_last_name#30, c_first_name#29, substr(s_city, 1, 30)#32, ss_ticket_number#5, amt#26, profit#27] +Input [7]: [c_last_name#27, c_first_name#26, substr(s_city, 1, 30)#28, ss_ticket_number#5, amt#23, profit#24, s_city#13] +Arguments: 100, [c_last_name#27 ASC NULLS FIRST, c_first_name#26 ASC NULLS FIRST, substr(s_city#13, 1, 30) ASC NULLS FIRST, profit#24 ASC NULLS FIRST], [c_last_name#27, c_first_name#26, substr(s_city, 1, 30)#28, ss_ticket_number#5, amt#23, profit#24] ===== Subqueries ===== @@ -180,25 +180,25 @@ BroadcastExchange (35) (31) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#33, d_dow#34] +Output [3]: [d_date_sk#10, d_year#29, d_dow#30] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_dow), EqualTo(d_dow,1), In(d_year, [1998,1999,2000]), GreaterThanOrEqual(d_date_sk,2450819), LessThanOrEqual(d_date_sk,2451904), IsNotNull(d_date_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#33, d_dow#34] +Input [3]: [d_date_sk#10, d_year#29, d_dow#30] (33) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#33, d_dow#34] -Condition : (((((isnotnull(d_dow#34) AND (d_dow#34 = 1)) AND d_year#33 IN (1998,1999,2000)) AND (d_date_sk#10 >= 2450819)) AND (d_date_sk#10 <= 2451904)) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#10, d_year#29, d_dow#30] +Condition : (((((isnotnull(d_dow#30) AND (d_dow#30 = 1)) AND d_year#29 IN (1998,1999,2000)) AND (d_date_sk#10 >= 2450819)) AND (d_date_sk#10 <= 2451904)) AND isnotnull(d_date_sk#10)) (34) Project [codegen id : 1] Output [1]: [d_date_sk#10] -Input [3]: [d_date_sk#10, d_year#33, d_dow#34] +Input [3]: [d_date_sk#10, d_year#29, d_dow#30] (35) BroadcastExchange Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q89.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q89.sf100/explain.txt index 8b19320021538..a2cfd6b66801d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q89.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q89.sf100/explain.txt @@ -71,7 +71,7 @@ Condition : isnotnull(s_store_sk#8) (10) BroadcastExchange Input [3]: [s_store_sk#8, s_store_name#9, s_company_name#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#2] @@ -83,73 +83,73 @@ Output [5]: [ss_item_sk#1, ss_sales_price#3, d_moy#7, s_store_name#9, s_company_ Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_sales_price#3, d_moy#7, s_store_sk#8, s_store_name#9, s_company_name#10] (13) Scan parquet default.item -Output [4]: [i_item_sk#12, i_brand#13, i_class#14, i_category#15] +Output [4]: [i_item_sk#11, i_brand#12, i_class#13, i_category#14] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [Or(And(In(i_category, [Books ,Electronics ,Home ]),In(i_class, [musical ,parenting ,wallpaper ])),And(In(i_category, [Jewelry ,Men ,Shoes ]),In(i_class, [birdal ,pants ,womens ]))), IsNotNull(i_item_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [4]: [i_item_sk#12, i_brand#13, i_class#14, i_category#15] +Input [4]: [i_item_sk#11, i_brand#12, i_class#13, i_category#14] (15) Filter [codegen id : 3] -Input [4]: [i_item_sk#12, i_brand#13, i_class#14, i_category#15] -Condition : (((i_category#15 IN (Home ,Books ,Electronics ) AND i_class#14 IN (wallpaper ,parenting ,musical )) OR (i_category#15 IN (Shoes ,Jewelry ,Men ) AND i_class#14 IN (womens ,birdal ,pants ))) AND isnotnull(i_item_sk#12)) +Input [4]: [i_item_sk#11, i_brand#12, i_class#13, i_category#14] +Condition : (((i_category#14 IN (Home ,Books ,Electronics ) AND i_class#13 IN (wallpaper ,parenting ,musical )) OR (i_category#14 IN (Shoes ,Jewelry ,Men ) AND i_class#13 IN (womens ,birdal ,pants ))) AND isnotnull(i_item_sk#11)) (16) BroadcastExchange -Input [4]: [i_item_sk#12, i_brand#13, i_class#14, i_category#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#16] +Input [4]: [i_item_sk#11, i_brand#12, i_class#13, i_category#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#12] +Right keys [1]: [i_item_sk#11] Join condition: None (18) Project [codegen id : 4] -Output [7]: [i_brand#13, i_class#14, i_category#15, ss_sales_price#3, d_moy#7, s_store_name#9, s_company_name#10] -Input [9]: [ss_item_sk#1, ss_sales_price#3, d_moy#7, s_store_name#9, s_company_name#10, i_item_sk#12, i_brand#13, i_class#14, i_category#15] +Output [7]: [i_brand#12, i_class#13, i_category#14, ss_sales_price#3, d_moy#7, s_store_name#9, s_company_name#10] +Input [9]: [ss_item_sk#1, ss_sales_price#3, d_moy#7, s_store_name#9, s_company_name#10, i_item_sk#11, i_brand#12, i_class#13, i_category#14] (19) HashAggregate [codegen id : 4] -Input [7]: [i_brand#13, i_class#14, i_category#15, ss_sales_price#3, d_moy#7, s_store_name#9, s_company_name#10] -Keys [6]: [i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7] +Input [7]: [i_brand#12, i_class#13, i_category#14, ss_sales_price#3, d_moy#7, s_store_name#9, s_company_name#10] +Keys [6]: [i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7] Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#3))] -Aggregate Attributes [1]: [sum#17] -Results [7]: [i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7, sum#18] +Aggregate Attributes [1]: [sum#15] +Results [7]: [i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7, sum#16] (20) Exchange -Input [7]: [i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7, sum#18] -Arguments: hashpartitioning(i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [7]: [i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7, sum#16] +Arguments: hashpartitioning(i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 5] -Input [7]: [i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7, sum#18] -Keys [6]: [i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7] +Input [7]: [i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7, sum#16] +Keys [6]: [i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7] Functions [1]: [sum(UnscaledValue(ss_sales_price#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#3))#20] -Results [8]: [i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#20,17,2) AS _w0#22] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#3))#17] +Results [8]: [i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#17,17,2) AS sum_sales#18, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#17,17,2) AS _w0#19] (22) Exchange -Input [8]: [i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#21, _w0#22] -Arguments: hashpartitioning(i_category#15, i_brand#13, s_store_name#9, s_company_name#10, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [8]: [i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#18, _w0#19] +Arguments: hashpartitioning(i_category#14, i_brand#12, s_store_name#9, s_company_name#10, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) Sort [codegen id : 6] -Input [8]: [i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#21, _w0#22] -Arguments: [i_category#15 ASC NULLS FIRST, i_brand#13 ASC NULLS FIRST, s_store_name#9 ASC NULLS FIRST, s_company_name#10 ASC NULLS FIRST], false, 0 +Input [8]: [i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#18, _w0#19] +Arguments: [i_category#14 ASC NULLS FIRST, i_brand#12 ASC NULLS FIRST, s_store_name#9 ASC NULLS FIRST, s_company_name#10 ASC NULLS FIRST], false, 0 (24) Window -Input [8]: [i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#21, _w0#22] -Arguments: [avg(_w0#22) windowspecdefinition(i_category#15, i_brand#13, s_store_name#9, s_company_name#10, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#24], [i_category#15, i_brand#13, s_store_name#9, s_company_name#10] +Input [8]: [i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#18, _w0#19] +Arguments: [avg(_w0#19) windowspecdefinition(i_category#14, i_brand#12, s_store_name#9, s_company_name#10, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#20], [i_category#14, i_brand#12, s_store_name#9, s_company_name#10] (25) Filter [codegen id : 7] -Input [9]: [i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#21, _w0#22, avg_monthly_sales#24] -Condition : (isnotnull(avg_monthly_sales#24) AND (NOT (avg_monthly_sales#24 = 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) +Input [9]: [i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#18, _w0#19, avg_monthly_sales#20] +Condition : (isnotnull(avg_monthly_sales#20) AND (NOT (avg_monthly_sales#20 = 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) (26) Project [codegen id : 7] -Output [8]: [i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#21, avg_monthly_sales#24] -Input [9]: [i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#21, _w0#22, avg_monthly_sales#24] +Output [8]: [i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#18, avg_monthly_sales#20] +Input [9]: [i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#18, _w0#19, avg_monthly_sales#20] (27) TakeOrderedAndProject -Input [8]: [i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#21, avg_monthly_sales#24] -Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, s_store_name#9 ASC NULLS FIRST], [i_category#15, i_class#14, i_brand#13, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#21, avg_monthly_sales#24] +Input [8]: [i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#18, avg_monthly_sales#20] +Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, s_store_name#9 ASC NULLS FIRST], [i_category#14, i_class#13, i_brand#12, s_store_name#9, s_company_name#10, d_moy#7, sum_sales#18, avg_monthly_sales#20] ===== Subqueries ===== @@ -162,25 +162,25 @@ BroadcastExchange (32) (28) Scan parquet default.date_dim -Output [3]: [d_date_sk#6, d_year#25, d_moy#7] +Output [3]: [d_date_sk#6, d_year#21, d_moy#7] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), GreaterThanOrEqual(d_date_sk,2451545), LessThanOrEqual(d_date_sk,2451910), IsNotNull(d_date_sk)] ReadSchema: struct (29) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#25, d_moy#7] +Input [3]: [d_date_sk#6, d_year#21, d_moy#7] (30) Filter [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#25, d_moy#7] -Condition : ((((isnotnull(d_year#25) AND (d_year#25 = 2000)) AND (d_date_sk#6 >= 2451545)) AND (d_date_sk#6 <= 2451910)) AND isnotnull(d_date_sk#6)) +Input [3]: [d_date_sk#6, d_year#21, d_moy#7] +Condition : ((((isnotnull(d_year#21) AND (d_year#21 = 2000)) AND (d_date_sk#6 >= 2451545)) AND (d_date_sk#6 <= 2451910)) AND isnotnull(d_date_sk#6)) (31) Project [codegen id : 1] Output [2]: [d_date_sk#6, d_moy#7] -Input [3]: [d_date_sk#6, d_year#25, d_moy#7] +Input [3]: [d_date_sk#6, d_year#21, d_moy#7] (32) BroadcastExchange Input [2]: [d_date_sk#6, d_moy#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q89/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q89/explain.txt index 5d3ea6d0cb7be..4ee1a5b7c2937 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q89/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q89/explain.txt @@ -59,7 +59,7 @@ Condition : (isnotnull(ss_item_sk#5) AND isnotnull(ss_store_sk#6)) (7) BroadcastExchange Input [4]: [ss_item_sk#5, ss_store_sk#6, ss_sales_price#7, ss_sold_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] @@ -71,85 +71,85 @@ Output [6]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7 Input [8]: [i_item_sk#1, i_brand#2, i_class#3, i_category#4, ss_item_sk#5, ss_store_sk#6, ss_sales_price#7, ss_sold_date_sk#8] (10) ReusedExchange [Reuses operator id: 32] -Output [2]: [d_date_sk#11, d_moy#12] +Output [2]: [d_date_sk#10, d_moy#11] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#11] +Right keys [1]: [d_date_sk#10] Join condition: None (12) Project [codegen id : 4] -Output [6]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, d_moy#12] -Input [8]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, ss_sold_date_sk#8, d_date_sk#11, d_moy#12] +Output [6]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, d_moy#11] +Input [8]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, ss_sold_date_sk#8, d_date_sk#10, d_moy#11] (13) Scan parquet default.store -Output [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] +Output [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] (15) Filter [codegen id : 3] -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] -Condition : isnotnull(s_store_sk#13) +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] +Condition : isnotnull(s_store_sk#12) (16) BroadcastExchange -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#16] +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#6] -Right keys [1]: [s_store_sk#13] +Right keys [1]: [s_store_sk#12] Join condition: None (18) Project [codegen id : 4] -Output [7]: [i_brand#2, i_class#3, i_category#4, ss_sales_price#7, d_moy#12, s_store_name#14, s_company_name#15] -Input [9]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, d_moy#12, s_store_sk#13, s_store_name#14, s_company_name#15] +Output [7]: [i_brand#2, i_class#3, i_category#4, ss_sales_price#7, d_moy#11, s_store_name#13, s_company_name#14] +Input [9]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, d_moy#11, s_store_sk#12, s_store_name#13, s_company_name#14] (19) HashAggregate [codegen id : 4] -Input [7]: [i_brand#2, i_class#3, i_category#4, ss_sales_price#7, d_moy#12, s_store_name#14, s_company_name#15] -Keys [6]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12] +Input [7]: [i_brand#2, i_class#3, i_category#4, ss_sales_price#7, d_moy#11, s_store_name#13, s_company_name#14] +Keys [6]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11] Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#7))] -Aggregate Attributes [1]: [sum#17] -Results [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum#18] +Aggregate Attributes [1]: [sum#15] +Results [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum#16] (20) Exchange -Input [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum#18] -Arguments: hashpartitioning(i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum#16] +Arguments: hashpartitioning(i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 5] -Input [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum#18] -Keys [6]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12] +Input [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum#16] +Keys [6]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11] Functions [1]: [sum(UnscaledValue(ss_sales_price#7))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#7))#20] -Results [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, MakeDecimal(sum(UnscaledValue(ss_sales_price#7))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#7))#20,17,2) AS _w0#22] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#7))#17] +Results [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, MakeDecimal(sum(UnscaledValue(ss_sales_price#7))#17,17,2) AS sum_sales#18, MakeDecimal(sum(UnscaledValue(ss_sales_price#7))#17,17,2) AS _w0#19] (22) Exchange -Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22] -Arguments: hashpartitioning(i_category#4, i_brand#2, s_store_name#14, s_company_name#15, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19] +Arguments: hashpartitioning(i_category#4, i_brand#2, s_store_name#13, s_company_name#14, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) Sort [codegen id : 6] -Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22] -Arguments: [i_category#4 ASC NULLS FIRST, i_brand#2 ASC NULLS FIRST, s_store_name#14 ASC NULLS FIRST, s_company_name#15 ASC NULLS FIRST], false, 0 +Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19] +Arguments: [i_category#4 ASC NULLS FIRST, i_brand#2 ASC NULLS FIRST, s_store_name#13 ASC NULLS FIRST, s_company_name#14 ASC NULLS FIRST], false, 0 (24) Window -Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22] -Arguments: [avg(_w0#22) windowspecdefinition(i_category#4, i_brand#2, s_store_name#14, s_company_name#15, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#24], [i_category#4, i_brand#2, s_store_name#14, s_company_name#15] +Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19] +Arguments: [avg(_w0#19) windowspecdefinition(i_category#4, i_brand#2, s_store_name#13, s_company_name#14, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#20], [i_category#4, i_brand#2, s_store_name#13, s_company_name#14] (25) Filter [codegen id : 7] -Input [9]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22, avg_monthly_sales#24] -Condition : (isnotnull(avg_monthly_sales#24) AND (NOT (avg_monthly_sales#24 = 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) +Input [9]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19, avg_monthly_sales#20] +Condition : (isnotnull(avg_monthly_sales#20) AND (NOT (avg_monthly_sales#20 = 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) (26) Project [codegen id : 7] -Output [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, avg_monthly_sales#24] -Input [9]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22, avg_monthly_sales#24] +Output [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, avg_monthly_sales#20] +Input [9]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19, avg_monthly_sales#20] (27) TakeOrderedAndProject -Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, avg_monthly_sales#24] -Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, s_store_name#14 ASC NULLS FIRST], [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, avg_monthly_sales#24] +Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, avg_monthly_sales#20] +Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, s_store_name#13 ASC NULLS FIRST], [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, avg_monthly_sales#20] ===== Subqueries ===== @@ -162,25 +162,25 @@ BroadcastExchange (32) (28) Scan parquet default.date_dim -Output [3]: [d_date_sk#11, d_year#25, d_moy#12] +Output [3]: [d_date_sk#10, d_year#21, d_moy#11] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), GreaterThanOrEqual(d_date_sk,2451545), LessThanOrEqual(d_date_sk,2451910), IsNotNull(d_date_sk)] ReadSchema: struct (29) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#25, d_moy#12] +Input [3]: [d_date_sk#10, d_year#21, d_moy#11] (30) Filter [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#25, d_moy#12] -Condition : ((((isnotnull(d_year#25) AND (d_year#25 = 2000)) AND (d_date_sk#11 >= 2451545)) AND (d_date_sk#11 <= 2451910)) AND isnotnull(d_date_sk#11)) +Input [3]: [d_date_sk#10, d_year#21, d_moy#11] +Condition : ((((isnotnull(d_year#21) AND (d_year#21 = 2000)) AND (d_date_sk#10 >= 2451545)) AND (d_date_sk#10 <= 2451910)) AND isnotnull(d_date_sk#10)) (31) Project [codegen id : 1] -Output [2]: [d_date_sk#11, d_moy#12] -Input [3]: [d_date_sk#11, d_year#25, d_moy#12] +Output [2]: [d_date_sk#10, d_moy#11] +Input [3]: [d_date_sk#10, d_year#21, d_moy#11] (32) BroadcastExchange -Input [2]: [d_date_sk#11, d_moy#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [2]: [d_date_sk#10, d_moy#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q98.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q98.sf100/explain.txt index e630982cc606b..a0080476fc022 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q98.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q98.sf100/explain.txt @@ -55,88 +55,88 @@ Input [4]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, d_date_sk#5] (7) Exchange Input [2]: [ss_item_sk#1, ss_ext_sales_price#2] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (8) Sort [codegen id : 3] Input [2]: [ss_item_sk#1, ss_ext_sales_price#2] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (9) Scan parquet default.item -Output [6]: [i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12] +Output [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [In(i_category, [Books ,Jewelry ,Sports ]), IsNotNull(i_item_sk)] ReadSchema: struct (10) ColumnarToRow [codegen id : 4] -Input [6]: [i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12] +Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] (11) Filter [codegen id : 4] -Input [6]: [i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12] -Condition : (i_category#12 IN (Jewelry ,Sports ,Books ) AND isnotnull(i_item_sk#7)) +Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Condition : (i_category#11 IN (Jewelry ,Sports ,Books ) AND isnotnull(i_item_sk#6)) (12) Exchange -Input [6]: [i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12] -Arguments: hashpartitioning(i_item_sk#7, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Arguments: hashpartitioning(i_item_sk#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (13) Sort [codegen id : 5] -Input [6]: [i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12] -Arguments: [i_item_sk#7 ASC NULLS FIRST], false, 0 +Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Arguments: [i_item_sk#6 ASC NULLS FIRST], false, 0 (14) SortMergeJoin [codegen id : 6] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#7] +Right keys [1]: [i_item_sk#6] Join condition: None (15) Project [codegen id : 6] -Output [6]: [ss_ext_sales_price#2, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12] -Input [8]: [ss_item_sk#1, ss_ext_sales_price#2, i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12] +Output [6]: [ss_ext_sales_price#2, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Input [8]: [ss_item_sk#1, ss_ext_sales_price#2, i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] (16) HashAggregate [codegen id : 6] -Input [6]: [ss_ext_sales_price#2, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12] -Keys [5]: [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10] +Input [6]: [ss_ext_sales_price#2, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Keys [5]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#14] -Results [6]: [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum#15] +Aggregate Attributes [1]: [sum#12] +Results [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#13] (17) Exchange -Input [6]: [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum#15] -Arguments: hashpartitioning(i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#13] +Arguments: hashpartitioning(i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 7] -Input [6]: [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum#15] -Keys [5]: [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10] +Input [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#13] +Keys [5]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#17] -Results [8]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#17,17,2) AS itemrevenue#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#17,17,2) AS _w0#19, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#17,17,2) AS _w1#20, i_item_id#8] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#14] +Results [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS itemrevenue#15, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS _w0#16, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS _w1#17, i_item_id#7] (19) Exchange -Input [8]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#18, _w0#19, _w1#20, i_item_id#8] -Arguments: hashpartitioning(i_class#11, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#15, _w0#16, _w1#17, i_item_id#7] +Arguments: hashpartitioning(i_class#10, 5), ENSURE_REQUIREMENTS, [plan_id=4] (20) Sort [codegen id : 8] -Input [8]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#18, _w0#19, _w1#20, i_item_id#8] -Arguments: [i_class#11 ASC NULLS FIRST], false, 0 +Input [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#15, _w0#16, _w1#17, i_item_id#7] +Arguments: [i_class#10 ASC NULLS FIRST], false, 0 (21) Window -Input [8]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#18, _w0#19, _w1#20, i_item_id#8] -Arguments: [sum(_w1#20) windowspecdefinition(i_class#11, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#22], [i_class#11] +Input [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#15, _w0#16, _w1#17, i_item_id#7] +Arguments: [sum(_w1#17) windowspecdefinition(i_class#10, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#10] (22) Project [codegen id : 9] -Output [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#18, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#19) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#22)), DecimalType(38,17)) AS revenueratio#23, i_item_id#8] -Input [9]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#18, _w0#19, _w1#20, i_item_id#8, _we0#22] +Output [7]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#15, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#16) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#18)), DecimalType(38,17)) AS revenueratio#19, i_item_id#7] +Input [9]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#15, _w0#16, _w1#17, i_item_id#7, _we0#18] (23) Exchange -Input [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#18, revenueratio#23, i_item_id#8] -Arguments: rangepartitioning(i_category#12 ASC NULLS FIRST, i_class#11 ASC NULLS FIRST, i_item_id#8 ASC NULLS FIRST, i_item_desc#9 ASC NULLS FIRST, revenueratio#23 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [7]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#15, revenueratio#19, i_item_id#7] +Arguments: rangepartitioning(i_category#11 ASC NULLS FIRST, i_class#10 ASC NULLS FIRST, i_item_id#7 ASC NULLS FIRST, i_item_desc#8 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=5] (24) Sort [codegen id : 10] -Input [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#18, revenueratio#23, i_item_id#8] -Arguments: [i_category#12 ASC NULLS FIRST, i_class#11 ASC NULLS FIRST, i_item_id#8 ASC NULLS FIRST, i_item_desc#9 ASC NULLS FIRST, revenueratio#23 ASC NULLS FIRST], true, 0 +Input [7]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#15, revenueratio#19, i_item_id#7] +Arguments: [i_category#11 ASC NULLS FIRST, i_class#10 ASC NULLS FIRST, i_item_id#7 ASC NULLS FIRST, i_item_desc#8 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], true, 0 (25) Project [codegen id : 10] -Output [6]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#18, revenueratio#23] -Input [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#18, revenueratio#23, i_item_id#8] +Output [6]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#15, revenueratio#19] +Input [7]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#15, revenueratio#19, i_item_id#7] ===== Subqueries ===== @@ -149,25 +149,25 @@ BroadcastExchange (30) (26) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_date#25] +Output [2]: [d_date_sk#5, d_date#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2001-01-01), LessThanOrEqual(d_date,2001-01-31), GreaterThanOrEqual(d_date_sk,2451911), LessThanOrEqual(d_date_sk,2451941), IsNotNull(d_date_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#5, d_date#25] +Input [2]: [d_date_sk#5, d_date#20] (28) Filter [codegen id : 1] -Input [2]: [d_date_sk#5, d_date#25] -Condition : (((((isnotnull(d_date#25) AND (d_date#25 >= 2001-01-01)) AND (d_date#25 <= 2001-01-31)) AND (d_date_sk#5 >= 2451911)) AND (d_date_sk#5 <= 2451941)) AND isnotnull(d_date_sk#5)) +Input [2]: [d_date_sk#5, d_date#20] +Condition : (((((isnotnull(d_date#20) AND (d_date#20 >= 2001-01-01)) AND (d_date#20 <= 2001-01-31)) AND (d_date_sk#5 >= 2451911)) AND (d_date_sk#5 <= 2451941)) AND isnotnull(d_date_sk#5)) (29) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_date#25] +Input [2]: [d_date_sk#5, d_date#20] (30) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q98/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q98/explain.txt index fc2390f392247..a87e71a75e1ac 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q98/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q98/explain.txt @@ -54,7 +54,7 @@ Condition : (i_category#10 IN (Jewelry (7) BroadcastExchange Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#1] @@ -66,62 +66,62 @@ Output [7]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, i_item_desc#7 Input [9]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (10) ReusedExchange [Reuses operator id: 27] -Output [1]: [d_date_sk#12] +Output [1]: [d_date_sk#11] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_sold_date_sk#3] -Right keys [1]: [d_date_sk#12] +Right keys [1]: [d_date_sk#11] Join condition: None (12) Project [codegen id : 3] Output [6]: [ss_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] -Input [8]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#12] +Input [8]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#11] (13) HashAggregate [codegen id : 3] Input [6]: [ss_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#13] -Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] +Aggregate Attributes [1]: [sum#12] +Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] (14) Exchange -Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] -Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 4] -Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#16] -Results [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#16,17,2) AS itemrevenue#17, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#16,17,2) AS _w0#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#16,17,2) AS _w1#19, i_item_id#6] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#14] +Results [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS itemrevenue#15, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS _w0#16, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS _w1#17, i_item_id#6] (16) Exchange -Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6] -Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (17) Sort [codegen id : 5] -Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] Arguments: [i_class#9 ASC NULLS FIRST], false, 0 (18) Window -Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6] -Arguments: [sum(_w1#19) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#21], [i_class#9] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: [sum(_w1#17) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#9] (19) Project [codegen id : 6] -Output [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#18) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#21)), DecimalType(38,17)) AS revenueratio#22, i_item_id#6] -Input [9]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6, _we0#21] +Output [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#16) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#18)), DecimalType(38,17)) AS revenueratio#19, i_item_id#6] +Input [9]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6, _we0#18] (20) Exchange -Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22, i_item_id#6] -Arguments: rangepartitioning(i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#22 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19, i_item_id#6] +Arguments: rangepartitioning(i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=4] (21) Sort [codegen id : 7] -Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22, i_item_id#6] -Arguments: [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#22 ASC NULLS FIRST], true, 0 +Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19, i_item_id#6] +Arguments: [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], true, 0 (22) Project [codegen id : 7] -Output [6]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22] -Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22, i_item_id#6] +Output [6]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] +Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19, i_item_id#6] ===== Subqueries ===== @@ -134,25 +134,25 @@ BroadcastExchange (27) (23) Scan parquet default.date_dim -Output [2]: [d_date_sk#12, d_date#24] +Output [2]: [d_date_sk#11, d_date#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2001-01-01), LessThanOrEqual(d_date,2001-01-31), GreaterThanOrEqual(d_date_sk,2451911), LessThanOrEqual(d_date_sk,2451941), IsNotNull(d_date_sk)] ReadSchema: struct (24) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#12, d_date#24] +Input [2]: [d_date_sk#11, d_date#20] (25) Filter [codegen id : 1] -Input [2]: [d_date_sk#12, d_date#24] -Condition : (((((isnotnull(d_date#24) AND (d_date#24 >= 2001-01-01)) AND (d_date#24 <= 2001-01-31)) AND (d_date_sk#12 >= 2451911)) AND (d_date_sk#12 <= 2451941)) AND isnotnull(d_date_sk#12)) +Input [2]: [d_date_sk#11, d_date#20] +Condition : (((((isnotnull(d_date#20) AND (d_date#20 >= 2001-01-01)) AND (d_date#20 <= 2001-01-31)) AND (d_date_sk#11 >= 2451911)) AND (d_date_sk#11 <= 2451941)) AND isnotnull(d_date_sk#11)) (26) Project [codegen id : 1] -Output [1]: [d_date_sk#12] -Input [2]: [d_date_sk#12, d_date#24] +Output [1]: [d_date_sk#11] +Input [2]: [d_date_sk#11, d_date#20] (27) BroadcastExchange -Input [1]: [d_date_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [d_date_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/ss_max.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/ss_max.sf100/explain.txt index 1ebc9a69a3865..073a29fd22304 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/ss_max.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/ss_max.sf100/explain.txt @@ -27,7 +27,7 @@ Results [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, ma (4) Exchange Input [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31] -Arguments: hashpartitioning(ss_sold_date_sk#9, 5), ENSURE_REQUIREMENTS, [id=#32] +Arguments: hashpartitioning(ss_sold_date_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) HashAggregate [codegen id : 2] Input [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31] @@ -40,17 +40,17 @@ Results [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, ma Input [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31] Keys: [] Functions [12]: [merge_count(1), merge_count(ss_sold_date_sk#9), merge_max(ss_sold_date_sk#9), merge_max(ss_sold_time_sk#1), merge_max(ss_item_sk#2), merge_max(ss_customer_sk#3), merge_max(ss_cdemo_sk#4), merge_max(ss_hdemo_sk#5), merge_max(ss_addr_sk#6), merge_max(ss_store_sk#7), merge_max(ss_promo_sk#8), partial_count(distinct ss_sold_date_sk#9)] -Aggregate Attributes [12]: [count(1)#10, count(ss_sold_date_sk#9)#11, max(ss_sold_date_sk#9)#12, max(ss_sold_time_sk#1)#13, max(ss_item_sk#2)#14, max(ss_customer_sk#3)#15, max(ss_cdemo_sk#4)#16, max(ss_hdemo_sk#5)#17, max(ss_addr_sk#6)#18, max(ss_store_sk#7)#19, max(ss_promo_sk#8)#20, count(ss_sold_date_sk#9)#33] -Results [12]: [count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31, count#34] +Aggregate Attributes [12]: [count(1)#10, count(ss_sold_date_sk#9)#11, max(ss_sold_date_sk#9)#12, max(ss_sold_time_sk#1)#13, max(ss_item_sk#2)#14, max(ss_customer_sk#3)#15, max(ss_cdemo_sk#4)#16, max(ss_hdemo_sk#5)#17, max(ss_addr_sk#6)#18, max(ss_store_sk#7)#19, max(ss_promo_sk#8)#20, count(ss_sold_date_sk#9)#32] +Results [12]: [count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31, count#33] (7) Exchange -Input [12]: [count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31, count#34] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#35] +Input [12]: [count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31, count#33] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2] (8) HashAggregate [codegen id : 3] -Input [12]: [count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31, count#34] +Input [12]: [count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31, count#33] Keys: [] Functions [12]: [count(1), count(ss_sold_date_sk#9), max(ss_sold_date_sk#9), max(ss_sold_time_sk#1), max(ss_item_sk#2), max(ss_customer_sk#3), max(ss_cdemo_sk#4), max(ss_hdemo_sk#5), max(ss_addr_sk#6), max(ss_store_sk#7), max(ss_promo_sk#8), count(distinct ss_sold_date_sk#9)] -Aggregate Attributes [12]: [count(1)#10, count(ss_sold_date_sk#9)#11, max(ss_sold_date_sk#9)#12, max(ss_sold_time_sk#1)#13, max(ss_item_sk#2)#14, max(ss_customer_sk#3)#15, max(ss_cdemo_sk#4)#16, max(ss_hdemo_sk#5)#17, max(ss_addr_sk#6)#18, max(ss_store_sk#7)#19, max(ss_promo_sk#8)#20, count(ss_sold_date_sk#9)#33] -Results [12]: [count(1)#10 AS total#36, count(ss_sold_date_sk#9)#11 AS not_null_total#37, count(ss_sold_date_sk#9)#33 AS unique_days#38, max(ss_sold_date_sk#9)#12 AS max_ss_sold_date_sk#39, max(ss_sold_time_sk#1)#13 AS max_ss_sold_time_sk#40, max(ss_item_sk#2)#14 AS max_ss_item_sk#41, max(ss_customer_sk#3)#15 AS max_ss_customer_sk#42, max(ss_cdemo_sk#4)#16 AS max_ss_cdemo_sk#43, max(ss_hdemo_sk#5)#17 AS max_ss_hdemo_sk#44, max(ss_addr_sk#6)#18 AS max_ss_addr_sk#45, max(ss_store_sk#7)#19 AS max_ss_store_sk#46, max(ss_promo_sk#8)#20 AS max_ss_promo_sk#47] +Aggregate Attributes [12]: [count(1)#10, count(ss_sold_date_sk#9)#11, max(ss_sold_date_sk#9)#12, max(ss_sold_time_sk#1)#13, max(ss_item_sk#2)#14, max(ss_customer_sk#3)#15, max(ss_cdemo_sk#4)#16, max(ss_hdemo_sk#5)#17, max(ss_addr_sk#6)#18, max(ss_store_sk#7)#19, max(ss_promo_sk#8)#20, count(ss_sold_date_sk#9)#32] +Results [12]: [count(1)#10 AS total#34, count(ss_sold_date_sk#9)#11 AS not_null_total#35, count(ss_sold_date_sk#9)#32 AS unique_days#36, max(ss_sold_date_sk#9)#12 AS max_ss_sold_date_sk#37, max(ss_sold_time_sk#1)#13 AS max_ss_sold_time_sk#38, max(ss_item_sk#2)#14 AS max_ss_item_sk#39, max(ss_customer_sk#3)#15 AS max_ss_customer_sk#40, max(ss_cdemo_sk#4)#16 AS max_ss_cdemo_sk#41, max(ss_hdemo_sk#5)#17 AS max_ss_hdemo_sk#42, max(ss_addr_sk#6)#18 AS max_ss_addr_sk#43, max(ss_store_sk#7)#19 AS max_ss_store_sk#44, max(ss_promo_sk#8)#20 AS max_ss_promo_sk#45] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/ss_max/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/ss_max/explain.txt index 1ebc9a69a3865..073a29fd22304 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/ss_max/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/ss_max/explain.txt @@ -27,7 +27,7 @@ Results [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, ma (4) Exchange Input [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31] -Arguments: hashpartitioning(ss_sold_date_sk#9, 5), ENSURE_REQUIREMENTS, [id=#32] +Arguments: hashpartitioning(ss_sold_date_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) HashAggregate [codegen id : 2] Input [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31] @@ -40,17 +40,17 @@ Results [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, ma Input [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31] Keys: [] Functions [12]: [merge_count(1), merge_count(ss_sold_date_sk#9), merge_max(ss_sold_date_sk#9), merge_max(ss_sold_time_sk#1), merge_max(ss_item_sk#2), merge_max(ss_customer_sk#3), merge_max(ss_cdemo_sk#4), merge_max(ss_hdemo_sk#5), merge_max(ss_addr_sk#6), merge_max(ss_store_sk#7), merge_max(ss_promo_sk#8), partial_count(distinct ss_sold_date_sk#9)] -Aggregate Attributes [12]: [count(1)#10, count(ss_sold_date_sk#9)#11, max(ss_sold_date_sk#9)#12, max(ss_sold_time_sk#1)#13, max(ss_item_sk#2)#14, max(ss_customer_sk#3)#15, max(ss_cdemo_sk#4)#16, max(ss_hdemo_sk#5)#17, max(ss_addr_sk#6)#18, max(ss_store_sk#7)#19, max(ss_promo_sk#8)#20, count(ss_sold_date_sk#9)#33] -Results [12]: [count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31, count#34] +Aggregate Attributes [12]: [count(1)#10, count(ss_sold_date_sk#9)#11, max(ss_sold_date_sk#9)#12, max(ss_sold_time_sk#1)#13, max(ss_item_sk#2)#14, max(ss_customer_sk#3)#15, max(ss_cdemo_sk#4)#16, max(ss_hdemo_sk#5)#17, max(ss_addr_sk#6)#18, max(ss_store_sk#7)#19, max(ss_promo_sk#8)#20, count(ss_sold_date_sk#9)#32] +Results [12]: [count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31, count#33] (7) Exchange -Input [12]: [count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31, count#34] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#35] +Input [12]: [count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31, count#33] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2] (8) HashAggregate [codegen id : 3] -Input [12]: [count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31, count#34] +Input [12]: [count#21, count#22, max#23, max#24, max#25, max#26, max#27, max#28, max#29, max#30, max#31, count#33] Keys: [] Functions [12]: [count(1), count(ss_sold_date_sk#9), max(ss_sold_date_sk#9), max(ss_sold_time_sk#1), max(ss_item_sk#2), max(ss_customer_sk#3), max(ss_cdemo_sk#4), max(ss_hdemo_sk#5), max(ss_addr_sk#6), max(ss_store_sk#7), max(ss_promo_sk#8), count(distinct ss_sold_date_sk#9)] -Aggregate Attributes [12]: [count(1)#10, count(ss_sold_date_sk#9)#11, max(ss_sold_date_sk#9)#12, max(ss_sold_time_sk#1)#13, max(ss_item_sk#2)#14, max(ss_customer_sk#3)#15, max(ss_cdemo_sk#4)#16, max(ss_hdemo_sk#5)#17, max(ss_addr_sk#6)#18, max(ss_store_sk#7)#19, max(ss_promo_sk#8)#20, count(ss_sold_date_sk#9)#33] -Results [12]: [count(1)#10 AS total#36, count(ss_sold_date_sk#9)#11 AS not_null_total#37, count(ss_sold_date_sk#9)#33 AS unique_days#38, max(ss_sold_date_sk#9)#12 AS max_ss_sold_date_sk#39, max(ss_sold_time_sk#1)#13 AS max_ss_sold_time_sk#40, max(ss_item_sk#2)#14 AS max_ss_item_sk#41, max(ss_customer_sk#3)#15 AS max_ss_customer_sk#42, max(ss_cdemo_sk#4)#16 AS max_ss_cdemo_sk#43, max(ss_hdemo_sk#5)#17 AS max_ss_hdemo_sk#44, max(ss_addr_sk#6)#18 AS max_ss_addr_sk#45, max(ss_store_sk#7)#19 AS max_ss_store_sk#46, max(ss_promo_sk#8)#20 AS max_ss_promo_sk#47] +Aggregate Attributes [12]: [count(1)#10, count(ss_sold_date_sk#9)#11, max(ss_sold_date_sk#9)#12, max(ss_sold_time_sk#1)#13, max(ss_item_sk#2)#14, max(ss_customer_sk#3)#15, max(ss_cdemo_sk#4)#16, max(ss_hdemo_sk#5)#17, max(ss_addr_sk#6)#18, max(ss_store_sk#7)#19, max(ss_promo_sk#8)#20, count(ss_sold_date_sk#9)#32] +Results [12]: [count(1)#10 AS total#34, count(ss_sold_date_sk#9)#11 AS not_null_total#35, count(ss_sold_date_sk#9)#32 AS unique_days#36, max(ss_sold_date_sk#9)#12 AS max_ss_sold_date_sk#37, max(ss_sold_time_sk#1)#13 AS max_ss_sold_time_sk#38, max(ss_item_sk#2)#14 AS max_ss_item_sk#39, max(ss_customer_sk#3)#15 AS max_ss_customer_sk#40, max(ss_cdemo_sk#4)#16 AS max_ss_cdemo_sk#41, max(ss_hdemo_sk#5)#17 AS max_ss_hdemo_sk#42, max(ss_addr_sk#6)#18 AS max_ss_addr_sk#43, max(ss_store_sk#7)#19 AS max_ss_store_sk#44, max(ss_promo_sk#8)#20 AS max_ss_promo_sk#45] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q1.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q1.sf100/explain.txt index 0ac812675e8f5..abc24d2519c68 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q1.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q1.sf100/explain.txt @@ -80,18 +80,18 @@ Results [3]: [sr_customer_sk#1, sr_store_sk#2, sum#8] (8) Exchange Input [3]: [sr_customer_sk#1, sr_store_sk#2, sum#8] -Arguments: hashpartitioning(sr_customer_sk#1, sr_store_sk#2, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(sr_customer_sk#1, sr_store_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=1] (9) HashAggregate [codegen id : 8] Input [3]: [sr_customer_sk#1, sr_store_sk#2, sum#8] Keys [2]: [sr_customer_sk#1, sr_store_sk#2] Functions [1]: [sum(UnscaledValue(sr_return_amt#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(sr_return_amt#3))#10] -Results [3]: [sr_customer_sk#1 AS ctr_customer_sk#11, sr_store_sk#2 AS ctr_store_sk#12, MakeDecimal(sum(UnscaledValue(sr_return_amt#3))#10,17,2) AS ctr_total_return#13] +Aggregate Attributes [1]: [sum(UnscaledValue(sr_return_amt#3))#9] +Results [3]: [sr_customer_sk#1 AS ctr_customer_sk#10, sr_store_sk#2 AS ctr_store_sk#11, MakeDecimal(sum(UnscaledValue(sr_return_amt#3))#9,17,2) AS ctr_total_return#12] (10) Filter [codegen id : 8] -Input [3]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13] -Condition : isnotnull(ctr_total_return#13) +Input [3]: [ctr_customer_sk#10, ctr_store_sk#11, ctr_total_return#12] +Condition : isnotnull(ctr_total_return#12) (11) Scan parquet default.store_returns Output [4]: [sr_customer_sk#1, sr_store_sk#2, sr_return_amt#3, sr_returned_date_sk#4] @@ -124,128 +124,128 @@ Input [5]: [sr_customer_sk#1, sr_store_sk#2, sr_return_amt#3, sr_returned_date_s Input [3]: [sr_customer_sk#1, sr_store_sk#2, sr_return_amt#3] Keys [2]: [sr_customer_sk#1, sr_store_sk#2] Functions [1]: [partial_sum(UnscaledValue(sr_return_amt#3))] -Aggregate Attributes [1]: [sum#14] -Results [3]: [sr_customer_sk#1, sr_store_sk#2, sum#15] +Aggregate Attributes [1]: [sum#13] +Results [3]: [sr_customer_sk#1, sr_store_sk#2, sum#14] (18) Exchange -Input [3]: [sr_customer_sk#1, sr_store_sk#2, sum#15] -Arguments: hashpartitioning(sr_customer_sk#1, sr_store_sk#2, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [3]: [sr_customer_sk#1, sr_store_sk#2, sum#14] +Arguments: hashpartitioning(sr_customer_sk#1, sr_store_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=2] (19) HashAggregate [codegen id : 5] -Input [3]: [sr_customer_sk#1, sr_store_sk#2, sum#15] +Input [3]: [sr_customer_sk#1, sr_store_sk#2, sum#14] Keys [2]: [sr_customer_sk#1, sr_store_sk#2] Functions [1]: [sum(UnscaledValue(sr_return_amt#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(sr_return_amt#3))#10] -Results [2]: [sr_store_sk#2 AS ctr_store_sk#12, MakeDecimal(sum(UnscaledValue(sr_return_amt#3))#10,17,2) AS ctr_total_return#13] +Aggregate Attributes [1]: [sum(UnscaledValue(sr_return_amt#3))#9] +Results [2]: [sr_store_sk#2 AS ctr_store_sk#11, MakeDecimal(sum(UnscaledValue(sr_return_amt#3))#9,17,2) AS ctr_total_return#12] (20) HashAggregate [codegen id : 5] -Input [2]: [ctr_store_sk#12, ctr_total_return#13] -Keys [1]: [ctr_store_sk#12] -Functions [1]: [partial_avg(ctr_total_return#13)] -Aggregate Attributes [2]: [sum#17, count#18] -Results [3]: [ctr_store_sk#12, sum#19, count#20] +Input [2]: [ctr_store_sk#11, ctr_total_return#12] +Keys [1]: [ctr_store_sk#11] +Functions [1]: [partial_avg(ctr_total_return#12)] +Aggregate Attributes [2]: [sum#15, count#16] +Results [3]: [ctr_store_sk#11, sum#17, count#18] (21) Exchange -Input [3]: [ctr_store_sk#12, sum#19, count#20] -Arguments: hashpartitioning(ctr_store_sk#12, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [3]: [ctr_store_sk#11, sum#17, count#18] +Arguments: hashpartitioning(ctr_store_sk#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 6] -Input [3]: [ctr_store_sk#12, sum#19, count#20] -Keys [1]: [ctr_store_sk#12] -Functions [1]: [avg(ctr_total_return#13)] -Aggregate Attributes [1]: [avg(ctr_total_return#13)#22] -Results [2]: [CheckOverflow((promote_precision(avg(ctr_total_return#13)#22) * 1.200000), DecimalType(24,7)) AS (avg(ctr_total_return) * 1.2)#23, ctr_store_sk#12 AS ctr_store_sk#12#24] +Input [3]: [ctr_store_sk#11, sum#17, count#18] +Keys [1]: [ctr_store_sk#11] +Functions [1]: [avg(ctr_total_return#12)] +Aggregate Attributes [1]: [avg(ctr_total_return#12)#19] +Results [2]: [CheckOverflow((promote_precision(avg(ctr_total_return#12)#19) * 1.200000), DecimalType(24,7)) AS (avg(ctr_total_return) * 1.2)#20, ctr_store_sk#11 AS ctr_store_sk#11#21] (23) Filter [codegen id : 6] -Input [2]: [(avg(ctr_total_return) * 1.2)#23, ctr_store_sk#12#24] -Condition : isnotnull((avg(ctr_total_return) * 1.2)#23) +Input [2]: [(avg(ctr_total_return) * 1.2)#20, ctr_store_sk#11#21] +Condition : isnotnull((avg(ctr_total_return) * 1.2)#20) (24) BroadcastExchange -Input [2]: [(avg(ctr_total_return) * 1.2)#23, ctr_store_sk#12#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#25] +Input [2]: [(avg(ctr_total_return) * 1.2)#20, ctr_store_sk#11#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [plan_id=4] (25) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ctr_store_sk#12] -Right keys [1]: [ctr_store_sk#12#24] -Join condition: (cast(ctr_total_return#13 as decimal(24,7)) > (avg(ctr_total_return) * 1.2)#23) +Left keys [1]: [ctr_store_sk#11] +Right keys [1]: [ctr_store_sk#11#21] +Join condition: (cast(ctr_total_return#12 as decimal(24,7)) > (avg(ctr_total_return) * 1.2)#20) (26) Project [codegen id : 8] -Output [2]: [ctr_customer_sk#11, ctr_store_sk#12] -Input [5]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13, (avg(ctr_total_return) * 1.2)#23, ctr_store_sk#12#24] +Output [2]: [ctr_customer_sk#10, ctr_store_sk#11] +Input [5]: [ctr_customer_sk#10, ctr_store_sk#11, ctr_total_return#12, (avg(ctr_total_return) * 1.2)#20, ctr_store_sk#11#21] (27) Scan parquet default.store -Output [2]: [s_store_sk#26, s_state#27] +Output [2]: [s_store_sk#22, s_state#23] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_state), EqualTo(s_state,TN), IsNotNull(s_store_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 7] -Input [2]: [s_store_sk#26, s_state#27] +Input [2]: [s_store_sk#22, s_state#23] (29) Filter [codegen id : 7] -Input [2]: [s_store_sk#26, s_state#27] -Condition : ((isnotnull(s_state#27) AND (s_state#27 = TN)) AND isnotnull(s_store_sk#26)) +Input [2]: [s_store_sk#22, s_state#23] +Condition : ((isnotnull(s_state#23) AND (s_state#23 = TN)) AND isnotnull(s_store_sk#22)) (30) Project [codegen id : 7] -Output [1]: [s_store_sk#26] -Input [2]: [s_store_sk#26, s_state#27] +Output [1]: [s_store_sk#22] +Input [2]: [s_store_sk#22, s_state#23] (31) BroadcastExchange -Input [1]: [s_store_sk#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#28] +Input [1]: [s_store_sk#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (32) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ctr_store_sk#12] -Right keys [1]: [s_store_sk#26] +Left keys [1]: [ctr_store_sk#11] +Right keys [1]: [s_store_sk#22] Join condition: None (33) Project [codegen id : 8] -Output [1]: [ctr_customer_sk#11] -Input [3]: [ctr_customer_sk#11, ctr_store_sk#12, s_store_sk#26] +Output [1]: [ctr_customer_sk#10] +Input [3]: [ctr_customer_sk#10, ctr_store_sk#11, s_store_sk#22] (34) Exchange -Input [1]: [ctr_customer_sk#11] -Arguments: hashpartitioning(ctr_customer_sk#11, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [1]: [ctr_customer_sk#10] +Arguments: hashpartitioning(ctr_customer_sk#10, 5), ENSURE_REQUIREMENTS, [plan_id=6] (35) Sort [codegen id : 9] -Input [1]: [ctr_customer_sk#11] -Arguments: [ctr_customer_sk#11 ASC NULLS FIRST], false, 0 +Input [1]: [ctr_customer_sk#10] +Arguments: [ctr_customer_sk#10 ASC NULLS FIRST], false, 0 (36) Scan parquet default.customer -Output [2]: [c_customer_sk#30, c_customer_id#31] +Output [2]: [c_customer_sk#24, c_customer_id#25] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 10] -Input [2]: [c_customer_sk#30, c_customer_id#31] +Input [2]: [c_customer_sk#24, c_customer_id#25] (38) Filter [codegen id : 10] -Input [2]: [c_customer_sk#30, c_customer_id#31] -Condition : isnotnull(c_customer_sk#30) +Input [2]: [c_customer_sk#24, c_customer_id#25] +Condition : isnotnull(c_customer_sk#24) (39) Exchange -Input [2]: [c_customer_sk#30, c_customer_id#31] -Arguments: hashpartitioning(c_customer_sk#30, 5), ENSURE_REQUIREMENTS, [id=#32] +Input [2]: [c_customer_sk#24, c_customer_id#25] +Arguments: hashpartitioning(c_customer_sk#24, 5), ENSURE_REQUIREMENTS, [plan_id=7] (40) Sort [codegen id : 11] -Input [2]: [c_customer_sk#30, c_customer_id#31] -Arguments: [c_customer_sk#30 ASC NULLS FIRST], false, 0 +Input [2]: [c_customer_sk#24, c_customer_id#25] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (41) SortMergeJoin [codegen id : 12] -Left keys [1]: [ctr_customer_sk#11] -Right keys [1]: [c_customer_sk#30] +Left keys [1]: [ctr_customer_sk#10] +Right keys [1]: [c_customer_sk#24] Join condition: None (42) Project [codegen id : 12] -Output [1]: [c_customer_id#31] -Input [3]: [ctr_customer_sk#11, c_customer_sk#30, c_customer_id#31] +Output [1]: [c_customer_id#25] +Input [3]: [ctr_customer_sk#10, c_customer_sk#24, c_customer_id#25] (43) TakeOrderedAndProject -Input [1]: [c_customer_id#31] -Arguments: 100, [c_customer_id#31 ASC NULLS FIRST], [c_customer_id#31] +Input [1]: [c_customer_id#25] +Arguments: 100, [c_customer_id#25 ASC NULLS FIRST], [c_customer_id#25] ===== Subqueries ===== @@ -258,26 +258,26 @@ BroadcastExchange (48) (44) Scan parquet default.date_dim -Output [2]: [d_date_sk#6, d_year#33] +Output [2]: [d_date_sk#6, d_year#26] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#6, d_year#33] +Input [2]: [d_date_sk#6, d_year#26] (46) Filter [codegen id : 1] -Input [2]: [d_date_sk#6, d_year#33] -Condition : ((isnotnull(d_year#33) AND (d_year#33 = 2000)) AND isnotnull(d_date_sk#6)) +Input [2]: [d_date_sk#6, d_year#26] +Condition : ((isnotnull(d_year#26) AND (d_year#26 = 2000)) AND isnotnull(d_date_sk#6)) (47) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [2]: [d_date_sk#6, d_year#33] +Input [2]: [d_date_sk#6, d_year#26] (48) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#34] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] Subquery:2 Hosting operator id = 11 Hosting Expression = sr_returned_date_sk#4 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q1/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q1/explain.txt index bfdc1e926597b..4d620e81d9998 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q1/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q1/explain.txt @@ -77,18 +77,18 @@ Results [3]: [sr_customer_sk#1, sr_store_sk#2, sum#8] (8) Exchange Input [3]: [sr_customer_sk#1, sr_store_sk#2, sum#8] -Arguments: hashpartitioning(sr_customer_sk#1, sr_store_sk#2, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(sr_customer_sk#1, sr_store_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=1] (9) HashAggregate [codegen id : 9] Input [3]: [sr_customer_sk#1, sr_store_sk#2, sum#8] Keys [2]: [sr_customer_sk#1, sr_store_sk#2] Functions [1]: [sum(UnscaledValue(sr_return_amt#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(sr_return_amt#3))#10] -Results [3]: [sr_customer_sk#1 AS ctr_customer_sk#11, sr_store_sk#2 AS ctr_store_sk#12, MakeDecimal(sum(UnscaledValue(sr_return_amt#3))#10,17,2) AS ctr_total_return#13] +Aggregate Attributes [1]: [sum(UnscaledValue(sr_return_amt#3))#9] +Results [3]: [sr_customer_sk#1 AS ctr_customer_sk#10, sr_store_sk#2 AS ctr_store_sk#11, MakeDecimal(sum(UnscaledValue(sr_return_amt#3))#9,17,2) AS ctr_total_return#12] (10) Filter [codegen id : 9] -Input [3]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13] -Condition : isnotnull(ctr_total_return#13) +Input [3]: [ctr_customer_sk#10, ctr_store_sk#11, ctr_total_return#12] +Condition : isnotnull(ctr_total_return#12) (11) Scan parquet default.store_returns Output [4]: [sr_customer_sk#1, sr_store_sk#2, sr_return_amt#3, sr_returned_date_sk#4] @@ -121,116 +121,116 @@ Input [5]: [sr_customer_sk#1, sr_store_sk#2, sr_return_amt#3, sr_returned_date_s Input [3]: [sr_customer_sk#1, sr_store_sk#2, sr_return_amt#3] Keys [2]: [sr_customer_sk#1, sr_store_sk#2] Functions [1]: [partial_sum(UnscaledValue(sr_return_amt#3))] -Aggregate Attributes [1]: [sum#14] -Results [3]: [sr_customer_sk#1, sr_store_sk#2, sum#15] +Aggregate Attributes [1]: [sum#13] +Results [3]: [sr_customer_sk#1, sr_store_sk#2, sum#14] (18) Exchange -Input [3]: [sr_customer_sk#1, sr_store_sk#2, sum#15] -Arguments: hashpartitioning(sr_customer_sk#1, sr_store_sk#2, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [3]: [sr_customer_sk#1, sr_store_sk#2, sum#14] +Arguments: hashpartitioning(sr_customer_sk#1, sr_store_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=2] (19) HashAggregate [codegen id : 5] -Input [3]: [sr_customer_sk#1, sr_store_sk#2, sum#15] +Input [3]: [sr_customer_sk#1, sr_store_sk#2, sum#14] Keys [2]: [sr_customer_sk#1, sr_store_sk#2] Functions [1]: [sum(UnscaledValue(sr_return_amt#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(sr_return_amt#3))#10] -Results [2]: [sr_store_sk#2 AS ctr_store_sk#12, MakeDecimal(sum(UnscaledValue(sr_return_amt#3))#10,17,2) AS ctr_total_return#13] +Aggregate Attributes [1]: [sum(UnscaledValue(sr_return_amt#3))#9] +Results [2]: [sr_store_sk#2 AS ctr_store_sk#11, MakeDecimal(sum(UnscaledValue(sr_return_amt#3))#9,17,2) AS ctr_total_return#12] (20) HashAggregate [codegen id : 5] -Input [2]: [ctr_store_sk#12, ctr_total_return#13] -Keys [1]: [ctr_store_sk#12] -Functions [1]: [partial_avg(ctr_total_return#13)] -Aggregate Attributes [2]: [sum#17, count#18] -Results [3]: [ctr_store_sk#12, sum#19, count#20] +Input [2]: [ctr_store_sk#11, ctr_total_return#12] +Keys [1]: [ctr_store_sk#11] +Functions [1]: [partial_avg(ctr_total_return#12)] +Aggregate Attributes [2]: [sum#15, count#16] +Results [3]: [ctr_store_sk#11, sum#17, count#18] (21) Exchange -Input [3]: [ctr_store_sk#12, sum#19, count#20] -Arguments: hashpartitioning(ctr_store_sk#12, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [3]: [ctr_store_sk#11, sum#17, count#18] +Arguments: hashpartitioning(ctr_store_sk#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 6] -Input [3]: [ctr_store_sk#12, sum#19, count#20] -Keys [1]: [ctr_store_sk#12] -Functions [1]: [avg(ctr_total_return#13)] -Aggregate Attributes [1]: [avg(ctr_total_return#13)#22] -Results [2]: [CheckOverflow((promote_precision(avg(ctr_total_return#13)#22) * 1.200000), DecimalType(24,7)) AS (avg(ctr_total_return) * 1.2)#23, ctr_store_sk#12 AS ctr_store_sk#12#24] +Input [3]: [ctr_store_sk#11, sum#17, count#18] +Keys [1]: [ctr_store_sk#11] +Functions [1]: [avg(ctr_total_return#12)] +Aggregate Attributes [1]: [avg(ctr_total_return#12)#19] +Results [2]: [CheckOverflow((promote_precision(avg(ctr_total_return#12)#19) * 1.200000), DecimalType(24,7)) AS (avg(ctr_total_return) * 1.2)#20, ctr_store_sk#11 AS ctr_store_sk#11#21] (23) Filter [codegen id : 6] -Input [2]: [(avg(ctr_total_return) * 1.2)#23, ctr_store_sk#12#24] -Condition : isnotnull((avg(ctr_total_return) * 1.2)#23) +Input [2]: [(avg(ctr_total_return) * 1.2)#20, ctr_store_sk#11#21] +Condition : isnotnull((avg(ctr_total_return) * 1.2)#20) (24) BroadcastExchange -Input [2]: [(avg(ctr_total_return) * 1.2)#23, ctr_store_sk#12#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#25] +Input [2]: [(avg(ctr_total_return) * 1.2)#20, ctr_store_sk#11#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [plan_id=4] (25) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [ctr_store_sk#12] -Right keys [1]: [ctr_store_sk#12#24] -Join condition: (cast(ctr_total_return#13 as decimal(24,7)) > (avg(ctr_total_return) * 1.2)#23) +Left keys [1]: [ctr_store_sk#11] +Right keys [1]: [ctr_store_sk#11#21] +Join condition: (cast(ctr_total_return#12 as decimal(24,7)) > (avg(ctr_total_return) * 1.2)#20) (26) Project [codegen id : 9] -Output [2]: [ctr_customer_sk#11, ctr_store_sk#12] -Input [5]: [ctr_customer_sk#11, ctr_store_sk#12, ctr_total_return#13, (avg(ctr_total_return) * 1.2)#23, ctr_store_sk#12#24] +Output [2]: [ctr_customer_sk#10, ctr_store_sk#11] +Input [5]: [ctr_customer_sk#10, ctr_store_sk#11, ctr_total_return#12, (avg(ctr_total_return) * 1.2)#20, ctr_store_sk#11#21] (27) Scan parquet default.store -Output [2]: [s_store_sk#26, s_state#27] +Output [2]: [s_store_sk#22, s_state#23] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_state), EqualTo(s_state,TN), IsNotNull(s_store_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 7] -Input [2]: [s_store_sk#26, s_state#27] +Input [2]: [s_store_sk#22, s_state#23] (29) Filter [codegen id : 7] -Input [2]: [s_store_sk#26, s_state#27] -Condition : ((isnotnull(s_state#27) AND (s_state#27 = TN)) AND isnotnull(s_store_sk#26)) +Input [2]: [s_store_sk#22, s_state#23] +Condition : ((isnotnull(s_state#23) AND (s_state#23 = TN)) AND isnotnull(s_store_sk#22)) (30) Project [codegen id : 7] -Output [1]: [s_store_sk#26] -Input [2]: [s_store_sk#26, s_state#27] +Output [1]: [s_store_sk#22] +Input [2]: [s_store_sk#22, s_state#23] (31) BroadcastExchange -Input [1]: [s_store_sk#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#28] +Input [1]: [s_store_sk#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (32) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [ctr_store_sk#12] -Right keys [1]: [s_store_sk#26] +Left keys [1]: [ctr_store_sk#11] +Right keys [1]: [s_store_sk#22] Join condition: None (33) Project [codegen id : 9] -Output [1]: [ctr_customer_sk#11] -Input [3]: [ctr_customer_sk#11, ctr_store_sk#12, s_store_sk#26] +Output [1]: [ctr_customer_sk#10] +Input [3]: [ctr_customer_sk#10, ctr_store_sk#11, s_store_sk#22] (34) Scan parquet default.customer -Output [2]: [c_customer_sk#29, c_customer_id#30] +Output [2]: [c_customer_sk#24, c_customer_id#25] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 8] -Input [2]: [c_customer_sk#29, c_customer_id#30] +Input [2]: [c_customer_sk#24, c_customer_id#25] (36) Filter [codegen id : 8] -Input [2]: [c_customer_sk#29, c_customer_id#30] -Condition : isnotnull(c_customer_sk#29) +Input [2]: [c_customer_sk#24, c_customer_id#25] +Condition : isnotnull(c_customer_sk#24) (37) BroadcastExchange -Input [2]: [c_customer_sk#29, c_customer_id#30] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#31] +Input [2]: [c_customer_sk#24, c_customer_id#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] (38) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [ctr_customer_sk#11] -Right keys [1]: [c_customer_sk#29] +Left keys [1]: [ctr_customer_sk#10] +Right keys [1]: [c_customer_sk#24] Join condition: None (39) Project [codegen id : 9] -Output [1]: [c_customer_id#30] -Input [3]: [ctr_customer_sk#11, c_customer_sk#29, c_customer_id#30] +Output [1]: [c_customer_id#25] +Input [3]: [ctr_customer_sk#10, c_customer_sk#24, c_customer_id#25] (40) TakeOrderedAndProject -Input [1]: [c_customer_id#30] -Arguments: 100, [c_customer_id#30 ASC NULLS FIRST], [c_customer_id#30] +Input [1]: [c_customer_id#25] +Arguments: 100, [c_customer_id#25 ASC NULLS FIRST], [c_customer_id#25] ===== Subqueries ===== @@ -243,26 +243,26 @@ BroadcastExchange (45) (41) Scan parquet default.date_dim -Output [2]: [d_date_sk#6, d_year#32] +Output [2]: [d_date_sk#6, d_year#26] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (42) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#6, d_year#32] +Input [2]: [d_date_sk#6, d_year#26] (43) Filter [codegen id : 1] -Input [2]: [d_date_sk#6, d_year#32] -Condition : ((isnotnull(d_year#32) AND (d_year#32 = 2000)) AND isnotnull(d_date_sk#6)) +Input [2]: [d_date_sk#6, d_year#26] +Condition : ((isnotnull(d_year#26) AND (d_year#26 = 2000)) AND isnotnull(d_date_sk#6)) (44) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [2]: [d_date_sk#6, d_year#32] +Input [2]: [d_date_sk#6, d_year#26] (45) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#33] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] Subquery:2 Hosting operator id = 11 Hosting Expression = sr_returned_date_sk#4 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10.sf100/explain.txt index e3090fa38cb10..5c9276d202cc7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10.sf100/explain.txt @@ -68,115 +68,115 @@ Condition : ((isnotnull(c_current_addr_sk#5) AND isnotnull(c_current_cdemo_sk#4) (4) Exchange Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] -Arguments: hashpartitioning(c_customer_sk#3, 5), ENSURE_REQUIREMENTS, [id=#8] +Arguments: hashpartitioning(c_customer_sk#3, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Arguments: [c_customer_sk#3 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_sales -Output [2]: [ss_customer_sk#9, ss_sold_date_sk#10] +Output [2]: [ss_customer_sk#8, ss_sold_date_sk#9] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#10), dynamicpruningexpression(ss_sold_date_sk#10 IN dynamicpruning#11)] +PartitionFilters: [isnotnull(ss_sold_date_sk#9), dynamicpruningexpression(ss_sold_date_sk#9 IN dynamicpruning#10)] ReadSchema: struct (7) ColumnarToRow [codegen id : 4] -Input [2]: [ss_customer_sk#9, ss_sold_date_sk#10] +Input [2]: [ss_customer_sk#8, ss_sold_date_sk#9] (8) ReusedExchange [Reuses operator id: 63] -Output [1]: [d_date_sk#12] +Output [1]: [d_date_sk#11] (9) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#10] -Right keys [1]: [d_date_sk#12] +Left keys [1]: [ss_sold_date_sk#9] +Right keys [1]: [d_date_sk#11] Join condition: None (10) Project [codegen id : 4] -Output [1]: [ss_customer_sk#9] -Input [3]: [ss_customer_sk#9, ss_sold_date_sk#10, d_date_sk#12] +Output [1]: [ss_customer_sk#8] +Input [3]: [ss_customer_sk#8, ss_sold_date_sk#9, d_date_sk#11] (11) Exchange -Input [1]: [ss_customer_sk#9] -Arguments: hashpartitioning(ss_customer_sk#9, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [1]: [ss_customer_sk#8] +Arguments: hashpartitioning(ss_customer_sk#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 5] -Input [1]: [ss_customer_sk#9] -Arguments: [ss_customer_sk#9 ASC NULLS FIRST], false, 0 +Input [1]: [ss_customer_sk#8] +Arguments: [ss_customer_sk#8 ASC NULLS FIRST], false, 0 (13) SortMergeJoin [codegen id : 6] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [ss_customer_sk#9] +Right keys [1]: [ss_customer_sk#8] Join condition: None (14) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#14, ws_sold_date_sk#15] +Output [2]: [ws_bill_customer_sk#12, ws_sold_date_sk#13] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#15), dynamicpruningexpression(ws_sold_date_sk#15 IN dynamicpruning#11)] +PartitionFilters: [isnotnull(ws_sold_date_sk#13), dynamicpruningexpression(ws_sold_date_sk#13 IN dynamicpruning#10)] ReadSchema: struct (15) ColumnarToRow [codegen id : 8] -Input [2]: [ws_bill_customer_sk#14, ws_sold_date_sk#15] +Input [2]: [ws_bill_customer_sk#12, ws_sold_date_sk#13] (16) ReusedExchange [Reuses operator id: 63] -Output [1]: [d_date_sk#16] +Output [1]: [d_date_sk#14] (17) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ws_sold_date_sk#15] -Right keys [1]: [d_date_sk#16] +Left keys [1]: [ws_sold_date_sk#13] +Right keys [1]: [d_date_sk#14] Join condition: None (18) Project [codegen id : 8] -Output [1]: [ws_bill_customer_sk#14] -Input [3]: [ws_bill_customer_sk#14, ws_sold_date_sk#15, d_date_sk#16] +Output [1]: [ws_bill_customer_sk#12] +Input [3]: [ws_bill_customer_sk#12, ws_sold_date_sk#13, d_date_sk#14] (19) Exchange -Input [1]: [ws_bill_customer_sk#14] -Arguments: hashpartitioning(ws_bill_customer_sk#14, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [1]: [ws_bill_customer_sk#12] +Arguments: hashpartitioning(ws_bill_customer_sk#12, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) Sort [codegen id : 9] -Input [1]: [ws_bill_customer_sk#14] -Arguments: [ws_bill_customer_sk#14 ASC NULLS FIRST], false, 0 +Input [1]: [ws_bill_customer_sk#12] +Arguments: [ws_bill_customer_sk#12 ASC NULLS FIRST], false, 0 (21) SortMergeJoin [codegen id : 10] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [ws_bill_customer_sk#14] +Right keys [1]: [ws_bill_customer_sk#12] Join condition: None (22) Scan parquet default.catalog_sales -Output [2]: [cs_ship_customer_sk#18, cs_sold_date_sk#19] +Output [2]: [cs_ship_customer_sk#15, cs_sold_date_sk#16] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#19), dynamicpruningexpression(cs_sold_date_sk#19 IN dynamicpruning#11)] +PartitionFilters: [isnotnull(cs_sold_date_sk#16), dynamicpruningexpression(cs_sold_date_sk#16 IN dynamicpruning#10)] ReadSchema: struct (23) ColumnarToRow [codegen id : 12] -Input [2]: [cs_ship_customer_sk#18, cs_sold_date_sk#19] +Input [2]: [cs_ship_customer_sk#15, cs_sold_date_sk#16] (24) ReusedExchange [Reuses operator id: 63] -Output [1]: [d_date_sk#20] +Output [1]: [d_date_sk#17] (25) BroadcastHashJoin [codegen id : 12] -Left keys [1]: [cs_sold_date_sk#19] -Right keys [1]: [d_date_sk#20] +Left keys [1]: [cs_sold_date_sk#16] +Right keys [1]: [d_date_sk#17] Join condition: None (26) Project [codegen id : 12] -Output [1]: [cs_ship_customer_sk#18] -Input [3]: [cs_ship_customer_sk#18, cs_sold_date_sk#19, d_date_sk#20] +Output [1]: [cs_ship_customer_sk#15] +Input [3]: [cs_ship_customer_sk#15, cs_sold_date_sk#16, d_date_sk#17] (27) Exchange -Input [1]: [cs_ship_customer_sk#18] -Arguments: hashpartitioning(cs_ship_customer_sk#18, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [1]: [cs_ship_customer_sk#15] +Arguments: hashpartitioning(cs_ship_customer_sk#15, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) Sort [codegen id : 13] -Input [1]: [cs_ship_customer_sk#18] -Arguments: [cs_ship_customer_sk#18 ASC NULLS FIRST], false, 0 +Input [1]: [cs_ship_customer_sk#15] +Arguments: [cs_ship_customer_sk#15 ASC NULLS FIRST], false, 0 (29) SortMergeJoin [codegen id : 15] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [cs_ship_customer_sk#18] +Right keys [1]: [cs_ship_customer_sk#15] Join condition: None (30) Filter [codegen id : 15] @@ -188,96 +188,96 @@ Output [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5] Input [5]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5, exists#2, exists#1] (32) Scan parquet default.customer_address -Output [2]: [ca_address_sk#22, ca_county#23] +Output [2]: [ca_address_sk#18, ca_county#19] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Jefferson County,La Porte County,Rush County,Toole County]), IsNotNull(ca_address_sk)] ReadSchema: struct (33) ColumnarToRow [codegen id : 14] -Input [2]: [ca_address_sk#22, ca_county#23] +Input [2]: [ca_address_sk#18, ca_county#19] (34) Filter [codegen id : 14] -Input [2]: [ca_address_sk#22, ca_county#23] -Condition : (ca_county#23 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County) AND isnotnull(ca_address_sk#22)) +Input [2]: [ca_address_sk#18, ca_county#19] +Condition : (ca_county#19 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County) AND isnotnull(ca_address_sk#18)) (35) Project [codegen id : 14] -Output [1]: [ca_address_sk#22] -Input [2]: [ca_address_sk#22, ca_county#23] +Output [1]: [ca_address_sk#18] +Input [2]: [ca_address_sk#18, ca_county#19] (36) BroadcastExchange -Input [1]: [ca_address_sk#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#24] +Input [1]: [ca_address_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (37) BroadcastHashJoin [codegen id : 15] Left keys [1]: [c_current_addr_sk#5] -Right keys [1]: [ca_address_sk#22] +Right keys [1]: [ca_address_sk#18] Join condition: None (38) Project [codegen id : 15] Output [1]: [c_current_cdemo_sk#4] -Input [3]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#22] +Input [3]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#18] (39) Exchange Input [1]: [c_current_cdemo_sk#4] -Arguments: hashpartitioning(c_current_cdemo_sk#4, 5), ENSURE_REQUIREMENTS, [id=#25] +Arguments: hashpartitioning(c_current_cdemo_sk#4, 5), ENSURE_REQUIREMENTS, [plan_id=6] (40) Sort [codegen id : 16] Input [1]: [c_current_cdemo_sk#4] Arguments: [c_current_cdemo_sk#4 ASC NULLS FIRST], false, 0 (41) Scan parquet default.customer_demographics -Output [9]: [cd_demo_sk#26, cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] +Output [9]: [cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (42) ColumnarToRow [codegen id : 17] -Input [9]: [cd_demo_sk#26, cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] +Input [9]: [cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] (43) Filter [codegen id : 17] -Input [9]: [cd_demo_sk#26, cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] -Condition : isnotnull(cd_demo_sk#26) +Input [9]: [cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] +Condition : isnotnull(cd_demo_sk#20) (44) Exchange -Input [9]: [cd_demo_sk#26, cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] -Arguments: hashpartitioning(cd_demo_sk#26, 5), ENSURE_REQUIREMENTS, [id=#35] +Input [9]: [cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] +Arguments: hashpartitioning(cd_demo_sk#20, 5), ENSURE_REQUIREMENTS, [plan_id=7] (45) Sort [codegen id : 18] -Input [9]: [cd_demo_sk#26, cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] -Arguments: [cd_demo_sk#26 ASC NULLS FIRST], false, 0 +Input [9]: [cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] +Arguments: [cd_demo_sk#20 ASC NULLS FIRST], false, 0 (46) SortMergeJoin [codegen id : 19] Left keys [1]: [c_current_cdemo_sk#4] -Right keys [1]: [cd_demo_sk#26] +Right keys [1]: [cd_demo_sk#20] Join condition: None (47) Project [codegen id : 19] -Output [8]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] -Input [10]: [c_current_cdemo_sk#4, cd_demo_sk#26, cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] +Output [8]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] +Input [10]: [c_current_cdemo_sk#4, cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] (48) HashAggregate [codegen id : 19] -Input [8]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] -Keys [8]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] +Input [8]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] +Keys [8]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#36] -Results [9]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34, count#37] +Aggregate Attributes [1]: [count#29] +Results [9]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28, count#30] (49) Exchange -Input [9]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34, count#37] -Arguments: hashpartitioning(cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [9]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28, count#30] +Arguments: hashpartitioning(cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28, 5), ENSURE_REQUIREMENTS, [plan_id=8] (50) HashAggregate [codegen id : 20] -Input [9]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34, count#37] -Keys [8]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cd_purchase_estimate#30, cd_credit_rating#31, cd_dep_count#32, cd_dep_employed_count#33, cd_dep_college_count#34] +Input [9]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28, count#30] +Keys [8]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#39] -Results [14]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, count(1)#39 AS cnt1#40, cd_purchase_estimate#30, count(1)#39 AS cnt2#41, cd_credit_rating#31, count(1)#39 AS cnt3#42, cd_dep_count#32, count(1)#39 AS cnt4#43, cd_dep_employed_count#33, count(1)#39 AS cnt5#44, cd_dep_college_count#34, count(1)#39 AS cnt6#45] +Aggregate Attributes [1]: [count(1)#31] +Results [14]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, count(1)#31 AS cnt1#32, cd_purchase_estimate#24, count(1)#31 AS cnt2#33, cd_credit_rating#25, count(1)#31 AS cnt3#34, cd_dep_count#26, count(1)#31 AS cnt4#35, cd_dep_employed_count#27, count(1)#31 AS cnt5#36, cd_dep_college_count#28, count(1)#31 AS cnt6#37] (51) TakeOrderedAndProject -Input [14]: [cd_gender#27, cd_marital_status#28, cd_education_status#29, cnt1#40, cd_purchase_estimate#30, cnt2#41, cd_credit_rating#31, cnt3#42, cd_dep_count#32, cnt4#43, cd_dep_employed_count#33, cnt5#44, cd_dep_college_count#34, cnt6#45] -Arguments: 100, [cd_gender#27 ASC NULLS FIRST, cd_marital_status#28 ASC NULLS FIRST, cd_education_status#29 ASC NULLS FIRST, cd_purchase_estimate#30 ASC NULLS FIRST, cd_credit_rating#31 ASC NULLS FIRST, cd_dep_count#32 ASC NULLS FIRST, cd_dep_employed_count#33 ASC NULLS FIRST, cd_dep_college_count#34 ASC NULLS FIRST], [cd_gender#27, cd_marital_status#28, cd_education_status#29, cnt1#40, cd_purchase_estimate#30, cnt2#41, cd_credit_rating#31, cnt3#42, cd_dep_count#32, cnt4#43, cd_dep_employed_count#33, cnt5#44, cd_dep_college_count#34, cnt6#45] +Input [14]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cnt1#32, cd_purchase_estimate#24, cnt2#33, cd_credit_rating#25, cnt3#34, cd_dep_count#26, cnt4#35, cd_dep_employed_count#27, cnt5#36, cd_dep_college_count#28, cnt6#37] +Arguments: 100, [cd_gender#21 ASC NULLS FIRST, cd_marital_status#22 ASC NULLS FIRST, cd_education_status#23 ASC NULLS FIRST, cd_purchase_estimate#24 ASC NULLS FIRST, cd_credit_rating#25 ASC NULLS FIRST, cd_dep_count#26 ASC NULLS FIRST, cd_dep_employed_count#27 ASC NULLS FIRST, cd_dep_college_count#28 ASC NULLS FIRST], [cd_gender#21, cd_marital_status#22, cd_education_status#23, cnt1#32, cd_purchase_estimate#24, cnt2#33, cd_credit_rating#25, cnt3#34, cd_dep_count#26, cnt4#35, cd_dep_employed_count#27, cnt5#36, cd_dep_college_count#28, cnt6#37] ===== Subqueries ===== @@ -292,42 +292,42 @@ ObjectHashAggregate (58) (52) Scan parquet default.customer_address -Output [2]: [ca_address_sk#22, ca_county#23] +Output [2]: [ca_address_sk#18, ca_county#19] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Jefferson County,La Porte County,Rush County,Toole County]), IsNotNull(ca_address_sk)] ReadSchema: struct (53) ColumnarToRow [codegen id : 1] -Input [2]: [ca_address_sk#22, ca_county#23] +Input [2]: [ca_address_sk#18, ca_county#19] (54) Filter [codegen id : 1] -Input [2]: [ca_address_sk#22, ca_county#23] -Condition : (ca_county#23 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County) AND isnotnull(ca_address_sk#22)) +Input [2]: [ca_address_sk#18, ca_county#19] +Condition : (ca_county#19 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County) AND isnotnull(ca_address_sk#18)) (55) Project [codegen id : 1] -Output [1]: [ca_address_sk#22] -Input [2]: [ca_address_sk#22, ca_county#23] +Output [1]: [ca_address_sk#18] +Input [2]: [ca_address_sk#18, ca_county#19] (56) ObjectHashAggregate -Input [1]: [ca_address_sk#22] +Input [1]: [ca_address_sk#18] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#22, 42), 2555, 20440, 0, 0)] -Aggregate Attributes [1]: [buf#46] -Results [1]: [buf#47] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#18, 42), 2555, 20440, 0, 0)] +Aggregate Attributes [1]: [buf#38] +Results [1]: [buf#39] (57) Exchange -Input [1]: [buf#47] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#48] +Input [1]: [buf#39] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=9] (58) ObjectHashAggregate -Input [1]: [buf#47] +Input [1]: [buf#39] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#22, 42), 2555, 20440, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#22, 42), 2555, 20440, 0, 0)#49] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#22, 42), 2555, 20440, 0, 0)#49 AS bloomFilter#50] +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#18, 42), 2555, 20440, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#18, 42), 2555, 20440, 0, 0)#40] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#18, 42), 2555, 20440, 0, 0)#40 AS bloomFilter#41] -Subquery:2 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#10 IN dynamicpruning#11 +Subquery:2 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#9 IN dynamicpruning#10 BroadcastExchange (63) +- * Project (62) +- * Filter (61) @@ -336,29 +336,29 @@ BroadcastExchange (63) (59) Scan parquet default.date_dim -Output [3]: [d_date_sk#12, d_year#51, d_moy#52] +Output [3]: [d_date_sk#11, d_year#42, d_moy#43] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,1), LessThanOrEqual(d_moy,4), IsNotNull(d_date_sk)] ReadSchema: struct (60) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#12, d_year#51, d_moy#52] +Input [3]: [d_date_sk#11, d_year#42, d_moy#43] (61) Filter [codegen id : 1] -Input [3]: [d_date_sk#12, d_year#51, d_moy#52] -Condition : (((((isnotnull(d_year#51) AND isnotnull(d_moy#52)) AND (d_year#51 = 2002)) AND (d_moy#52 >= 1)) AND (d_moy#52 <= 4)) AND isnotnull(d_date_sk#12)) +Input [3]: [d_date_sk#11, d_year#42, d_moy#43] +Condition : (((((isnotnull(d_year#42) AND isnotnull(d_moy#43)) AND (d_year#42 = 2002)) AND (d_moy#43 >= 1)) AND (d_moy#43 <= 4)) AND isnotnull(d_date_sk#11)) (62) Project [codegen id : 1] -Output [1]: [d_date_sk#12] -Input [3]: [d_date_sk#12, d_year#51, d_moy#52] +Output [1]: [d_date_sk#11] +Input [3]: [d_date_sk#11, d_year#42, d_moy#43] (63) BroadcastExchange -Input [1]: [d_date_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#53] +Input [1]: [d_date_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -Subquery:3 Hosting operator id = 14 Hosting Expression = ws_sold_date_sk#15 IN dynamicpruning#11 +Subquery:3 Hosting operator id = 14 Hosting Expression = ws_sold_date_sk#13 IN dynamicpruning#10 -Subquery:4 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#19 IN dynamicpruning#11 +Subquery:4 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#16 IN dynamicpruning#10 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10/explain.txt index 80c23b3f113a0..2496ee87e6c25 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q10/explain.txt @@ -82,7 +82,7 @@ Input [3]: [ss_customer_sk#6, ss_sold_date_sk#7, d_date_sk#9] (9) BroadcastExchange Input [1]: [ss_customer_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#3] @@ -90,65 +90,65 @@ Right keys [1]: [ss_customer_sk#6] Join condition: None (11) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#11, ws_sold_date_sk#12] +Output [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#12), dynamicpruningexpression(ws_sold_date_sk#12 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ws_sold_date_sk#11), dynamicpruningexpression(ws_sold_date_sk#11 IN dynamicpruning#8)] ReadSchema: struct (12) ColumnarToRow [codegen id : 4] -Input [2]: [ws_bill_customer_sk#11, ws_sold_date_sk#12] +Input [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] (13) ReusedExchange [Reuses operator id: 48] -Output [1]: [d_date_sk#13] +Output [1]: [d_date_sk#12] (14) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ws_sold_date_sk#12] -Right keys [1]: [d_date_sk#13] +Left keys [1]: [ws_sold_date_sk#11] +Right keys [1]: [d_date_sk#12] Join condition: None (15) Project [codegen id : 4] -Output [1]: [ws_bill_customer_sk#11] -Input [3]: [ws_bill_customer_sk#11, ws_sold_date_sk#12, d_date_sk#13] +Output [1]: [ws_bill_customer_sk#10] +Input [3]: [ws_bill_customer_sk#10, ws_sold_date_sk#11, d_date_sk#12] (16) BroadcastExchange -Input [1]: [ws_bill_customer_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Input [1]: [ws_bill_customer_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [ws_bill_customer_sk#11] +Right keys [1]: [ws_bill_customer_sk#10] Join condition: None (18) Scan parquet default.catalog_sales -Output [2]: [cs_ship_customer_sk#15, cs_sold_date_sk#16] +Output [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#16), dynamicpruningexpression(cs_sold_date_sk#16 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(cs_sold_date_sk#14), dynamicpruningexpression(cs_sold_date_sk#14 IN dynamicpruning#8)] ReadSchema: struct (19) ColumnarToRow [codegen id : 6] -Input [2]: [cs_ship_customer_sk#15, cs_sold_date_sk#16] +Input [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] (20) ReusedExchange [Reuses operator id: 48] -Output [1]: [d_date_sk#17] +Output [1]: [d_date_sk#15] (21) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [cs_sold_date_sk#16] -Right keys [1]: [d_date_sk#17] +Left keys [1]: [cs_sold_date_sk#14] +Right keys [1]: [d_date_sk#15] Join condition: None (22) Project [codegen id : 6] -Output [1]: [cs_ship_customer_sk#15] -Input [3]: [cs_ship_customer_sk#15, cs_sold_date_sk#16, d_date_sk#17] +Output [1]: [cs_ship_customer_sk#13] +Input [3]: [cs_ship_customer_sk#13, cs_sold_date_sk#14, d_date_sk#15] (23) BroadcastExchange -Input [1]: [cs_ship_customer_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [1]: [cs_ship_customer_sk#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [cs_ship_customer_sk#15] +Right keys [1]: [cs_ship_customer_sk#13] Join condition: None (25) Filter [codegen id : 9] @@ -160,84 +160,84 @@ Output [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5] Input [5]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5, exists#2, exists#1] (27) Scan parquet default.customer_address -Output [2]: [ca_address_sk#19, ca_county#20] +Output [2]: [ca_address_sk#16, ca_county#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Jefferson County,La Porte County,Rush County,Toole County]), IsNotNull(ca_address_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 7] -Input [2]: [ca_address_sk#19, ca_county#20] +Input [2]: [ca_address_sk#16, ca_county#17] (29) Filter [codegen id : 7] -Input [2]: [ca_address_sk#19, ca_county#20] -Condition : (ca_county#20 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County) AND isnotnull(ca_address_sk#19)) +Input [2]: [ca_address_sk#16, ca_county#17] +Condition : (ca_county#17 IN (Rush County,Toole County,Jefferson County,Dona Ana County,La Porte County) AND isnotnull(ca_address_sk#16)) (30) Project [codegen id : 7] -Output [1]: [ca_address_sk#19] -Input [2]: [ca_address_sk#19, ca_county#20] +Output [1]: [ca_address_sk#16] +Input [2]: [ca_address_sk#16, ca_county#17] (31) BroadcastExchange -Input [1]: [ca_address_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#21] +Input [1]: [ca_address_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (32) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_current_addr_sk#5] -Right keys [1]: [ca_address_sk#19] +Right keys [1]: [ca_address_sk#16] Join condition: None (33) Project [codegen id : 9] Output [1]: [c_current_cdemo_sk#4] -Input [3]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#19] +Input [3]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#16] (34) Scan parquet default.customer_demographics -Output [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Output [9]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 8] -Input [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Input [9]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] (36) Filter [codegen id : 8] -Input [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Condition : isnotnull(cd_demo_sk#22) +Input [9]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] +Condition : isnotnull(cd_demo_sk#18) (37) BroadcastExchange -Input [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#31] +Input [9]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (38) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_current_cdemo_sk#4] -Right keys [1]: [cd_demo_sk#22] +Right keys [1]: [cd_demo_sk#18] Join condition: None (39) Project [codegen id : 9] -Output [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Input [10]: [c_current_cdemo_sk#4, cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Output [8]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] +Input [10]: [c_current_cdemo_sk#4, cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] (40) HashAggregate [codegen id : 9] -Input [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Keys [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Input [8]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] +Keys [8]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#32] -Results [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#33] +Aggregate Attributes [1]: [count#27] +Results [9]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26, count#28] (41) Exchange -Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#33] -Arguments: hashpartitioning(cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [9]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26, count#28] +Arguments: hashpartitioning(cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26, 5), ENSURE_REQUIREMENTS, [plan_id=6] (42) HashAggregate [codegen id : 10] -Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#33] -Keys [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Input [9]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26, count#28] +Keys [8]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#35] -Results [14]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, count(1)#35 AS cnt1#36, cd_purchase_estimate#26, count(1)#35 AS cnt2#37, cd_credit_rating#27, count(1)#35 AS cnt3#38, cd_dep_count#28, count(1)#35 AS cnt4#39, cd_dep_employed_count#29, count(1)#35 AS cnt5#40, cd_dep_college_count#30, count(1)#35 AS cnt6#41] +Aggregate Attributes [1]: [count(1)#29] +Results [14]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, count(1)#29 AS cnt1#30, cd_purchase_estimate#22, count(1)#29 AS cnt2#31, cd_credit_rating#23, count(1)#29 AS cnt3#32, cd_dep_count#24, count(1)#29 AS cnt4#33, cd_dep_employed_count#25, count(1)#29 AS cnt5#34, cd_dep_college_count#26, count(1)#29 AS cnt6#35] (43) TakeOrderedAndProject -Input [14]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cnt1#36, cd_purchase_estimate#26, cnt2#37, cd_credit_rating#27, cnt3#38, cd_dep_count#28, cnt4#39, cd_dep_employed_count#29, cnt5#40, cd_dep_college_count#30, cnt6#41] -Arguments: 100, [cd_gender#23 ASC NULLS FIRST, cd_marital_status#24 ASC NULLS FIRST, cd_education_status#25 ASC NULLS FIRST, cd_purchase_estimate#26 ASC NULLS FIRST, cd_credit_rating#27 ASC NULLS FIRST, cd_dep_count#28 ASC NULLS FIRST, cd_dep_employed_count#29 ASC NULLS FIRST, cd_dep_college_count#30 ASC NULLS FIRST], [cd_gender#23, cd_marital_status#24, cd_education_status#25, cnt1#36, cd_purchase_estimate#26, cnt2#37, cd_credit_rating#27, cnt3#38, cd_dep_count#28, cnt4#39, cd_dep_employed_count#29, cnt5#40, cd_dep_college_count#30, cnt6#41] +Input [14]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cnt1#30, cd_purchase_estimate#22, cnt2#31, cd_credit_rating#23, cnt3#32, cd_dep_count#24, cnt4#33, cd_dep_employed_count#25, cnt5#34, cd_dep_college_count#26, cnt6#35] +Arguments: 100, [cd_gender#19 ASC NULLS FIRST, cd_marital_status#20 ASC NULLS FIRST, cd_education_status#21 ASC NULLS FIRST, cd_purchase_estimate#22 ASC NULLS FIRST, cd_credit_rating#23 ASC NULLS FIRST, cd_dep_count#24 ASC NULLS FIRST, cd_dep_employed_count#25 ASC NULLS FIRST, cd_dep_college_count#26 ASC NULLS FIRST], [cd_gender#19, cd_marital_status#20, cd_education_status#21, cnt1#30, cd_purchase_estimate#22, cnt2#31, cd_credit_rating#23, cnt3#32, cd_dep_count#24, cnt4#33, cd_dep_employed_count#25, cnt5#34, cd_dep_college_count#26, cnt6#35] ===== Subqueries ===== @@ -250,29 +250,29 @@ BroadcastExchange (48) (44) Scan parquet default.date_dim -Output [3]: [d_date_sk#9, d_year#42, d_moy#43] +Output [3]: [d_date_sk#9, d_year#36, d_moy#37] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,1), LessThanOrEqual(d_moy,4), IsNotNull(d_date_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#9, d_year#42, d_moy#43] +Input [3]: [d_date_sk#9, d_year#36, d_moy#37] (46) Filter [codegen id : 1] -Input [3]: [d_date_sk#9, d_year#42, d_moy#43] -Condition : (((((isnotnull(d_year#42) AND isnotnull(d_moy#43)) AND (d_year#42 = 2002)) AND (d_moy#43 >= 1)) AND (d_moy#43 <= 4)) AND isnotnull(d_date_sk#9)) +Input [3]: [d_date_sk#9, d_year#36, d_moy#37] +Condition : (((((isnotnull(d_year#36) AND isnotnull(d_moy#37)) AND (d_year#36 = 2002)) AND (d_moy#37 >= 1)) AND (d_moy#37 <= 4)) AND isnotnull(d_date_sk#9)) (47) Project [codegen id : 1] Output [1]: [d_date_sk#9] -Input [3]: [d_date_sk#9, d_year#42, d_moy#43] +Input [3]: [d_date_sk#9, d_year#36, d_moy#37] (48) BroadcastExchange Input [1]: [d_date_sk#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#44] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:2 Hosting operator id = 11 Hosting Expression = ws_sold_date_sk#12 IN dynamicpruning#8 +Subquery:2 Hosting operator id = 11 Hosting Expression = ws_sold_date_sk#11 IN dynamicpruning#8 -Subquery:3 Hosting operator id = 18 Hosting Expression = cs_sold_date_sk#16 IN dynamicpruning#8 +Subquery:3 Hosting operator id = 18 Hosting Expression = cs_sold_date_sk#14 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q11.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q11.sf100/explain.txt index 4d8179a75c6ea..796c9fc63a0a3 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q11.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q11.sf100/explain.txt @@ -110,338 +110,338 @@ Input [6]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_list_price#3, ss_sol (7) Exchange Input [4]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7] -Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#8] +Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (8) Sort [codegen id : 3] Input [4]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7] Arguments: [ss_customer_sk#1 ASC NULLS FIRST], false, 0 (9) Scan parquet default.customer -Output [8]: [c_customer_sk#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] +Output [8]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (10) ColumnarToRow [codegen id : 4] -Input [8]: [c_customer_sk#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] +Input [8]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] (11) Filter [codegen id : 4] -Input [8]: [c_customer_sk#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] -Condition : (isnotnull(c_customer_sk#9) AND isnotnull(c_customer_id#10)) +Input [8]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] +Condition : (isnotnull(c_customer_sk#8) AND isnotnull(c_customer_id#9)) (12) Exchange -Input [8]: [c_customer_sk#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] -Arguments: hashpartitioning(c_customer_sk#9, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [8]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] +Arguments: hashpartitioning(c_customer_sk#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (13) Sort [codegen id : 5] -Input [8]: [c_customer_sk#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] -Arguments: [c_customer_sk#9 ASC NULLS FIRST], false, 0 +Input [8]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] +Arguments: [c_customer_sk#8 ASC NULLS FIRST], false, 0 (14) SortMergeJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#9] +Right keys [1]: [c_customer_sk#8] Join condition: None (15) Project [codegen id : 6] -Output [10]: [c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7] -Input [12]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7, c_customer_sk#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] +Output [10]: [c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7] +Input [12]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7, c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] (16) HashAggregate [codegen id : 6] -Input [10]: [c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7] -Keys [8]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] +Input [10]: [c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7] +Keys [8]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#7, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#3 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#18] -Results [9]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum#19] +Aggregate Attributes [1]: [sum#16] +Results [9]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#7, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15, sum#17] (17) Exchange -Input [9]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum#19] -Arguments: hashpartitioning(c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [9]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#7, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15, sum#17] +Arguments: hashpartitioning(c_customer_id#9, c_first_name#10, c_last_name#11, d_year#7, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 7] -Input [9]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum#19] -Keys [8]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] +Input [9]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#7, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15, sum#17] +Keys [8]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#7, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#3 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#3 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(8,2)))), DecimalType(8,2))))#21] -Results [2]: [c_customer_id#10 AS customer_id#22, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#3 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(8,2)))), DecimalType(8,2))))#21,18,2) AS year_total#23] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#3 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(8,2)))), DecimalType(8,2))))#18] +Results [2]: [c_customer_id#9 AS customer_id#19, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#3 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(8,2)))), DecimalType(8,2))))#18,18,2) AS year_total#20] (19) Filter [codegen id : 7] -Input [2]: [customer_id#22, year_total#23] -Condition : (isnotnull(year_total#23) AND (year_total#23 > 0.00)) +Input [2]: [customer_id#19, year_total#20] +Condition : (isnotnull(year_total#20) AND (year_total#20 > 0.00)) (20) Exchange -Input [2]: [customer_id#22, year_total#23] -Arguments: hashpartitioning(customer_id#22, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [2]: [customer_id#19, year_total#20] +Arguments: hashpartitioning(customer_id#19, 5), ENSURE_REQUIREMENTS, [plan_id=4] (21) Sort [codegen id : 8] -Input [2]: [customer_id#22, year_total#23] -Arguments: [customer_id#22 ASC NULLS FIRST], false, 0 +Input [2]: [customer_id#19, year_total#20] +Arguments: [customer_id#19 ASC NULLS FIRST], false, 0 (22) Scan parquet default.store_sales -Output [4]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, ss_sold_date_sk#28] +Output [4]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, ss_sold_date_sk#24] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#28), dynamicpruningexpression(ss_sold_date_sk#28 IN dynamicpruning#29)] +PartitionFilters: [isnotnull(ss_sold_date_sk#24), dynamicpruningexpression(ss_sold_date_sk#24 IN dynamicpruning#25)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 10] -Input [4]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, ss_sold_date_sk#28] +Input [4]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, ss_sold_date_sk#24] (24) Filter [codegen id : 10] -Input [4]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, ss_sold_date_sk#28] -Condition : isnotnull(ss_customer_sk#25) +Input [4]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, ss_sold_date_sk#24] +Condition : isnotnull(ss_customer_sk#21) (25) ReusedExchange [Reuses operator id: 88] -Output [2]: [d_date_sk#30, d_year#31] +Output [2]: [d_date_sk#26, d_year#27] (26) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_sold_date_sk#28] -Right keys [1]: [d_date_sk#30] +Left keys [1]: [ss_sold_date_sk#24] +Right keys [1]: [d_date_sk#26] Join condition: None (27) Project [codegen id : 10] -Output [4]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, d_year#31] -Input [6]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, ss_sold_date_sk#28, d_date_sk#30, d_year#31] +Output [4]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, d_year#27] +Input [6]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, ss_sold_date_sk#24, d_date_sk#26, d_year#27] (28) Exchange -Input [4]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, d_year#31] -Arguments: hashpartitioning(ss_customer_sk#25, 5), ENSURE_REQUIREMENTS, [id=#32] +Input [4]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, d_year#27] +Arguments: hashpartitioning(ss_customer_sk#21, 5), ENSURE_REQUIREMENTS, [plan_id=5] (29) Sort [codegen id : 11] -Input [4]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, d_year#31] -Arguments: [ss_customer_sk#25 ASC NULLS FIRST], false, 0 +Input [4]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, d_year#27] +Arguments: [ss_customer_sk#21 ASC NULLS FIRST], false, 0 (30) ReusedExchange [Reuses operator id: 12] -Output [8]: [c_customer_sk#33, c_customer_id#34, c_first_name#35, c_last_name#36, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40] +Output [8]: [c_customer_sk#28, c_customer_id#29, c_first_name#30, c_last_name#31, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35] (31) Sort [codegen id : 13] -Input [8]: [c_customer_sk#33, c_customer_id#34, c_first_name#35, c_last_name#36, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40] -Arguments: [c_customer_sk#33 ASC NULLS FIRST], false, 0 +Input [8]: [c_customer_sk#28, c_customer_id#29, c_first_name#30, c_last_name#31, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35] +Arguments: [c_customer_sk#28 ASC NULLS FIRST], false, 0 (32) SortMergeJoin [codegen id : 14] -Left keys [1]: [ss_customer_sk#25] -Right keys [1]: [c_customer_sk#33] +Left keys [1]: [ss_customer_sk#21] +Right keys [1]: [c_customer_sk#28] Join condition: None (33) Project [codegen id : 14] -Output [10]: [c_customer_id#34, c_first_name#35, c_last_name#36, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40, ss_ext_discount_amt#26, ss_ext_list_price#27, d_year#31] -Input [12]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, d_year#31, c_customer_sk#33, c_customer_id#34, c_first_name#35, c_last_name#36, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40] +Output [10]: [c_customer_id#29, c_first_name#30, c_last_name#31, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35, ss_ext_discount_amt#22, ss_ext_list_price#23, d_year#27] +Input [12]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, d_year#27, c_customer_sk#28, c_customer_id#29, c_first_name#30, c_last_name#31, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35] (34) HashAggregate [codegen id : 14] -Input [10]: [c_customer_id#34, c_first_name#35, c_last_name#36, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40, ss_ext_discount_amt#26, ss_ext_list_price#27, d_year#31] -Keys [8]: [c_customer_id#34, c_first_name#35, c_last_name#36, d_year#31, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40] -Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#27 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#26 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#41] -Results [9]: [c_customer_id#34, c_first_name#35, c_last_name#36, d_year#31, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40, sum#42] +Input [10]: [c_customer_id#29, c_first_name#30, c_last_name#31, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35, ss_ext_discount_amt#22, ss_ext_list_price#23, d_year#27] +Keys [8]: [c_customer_id#29, c_first_name#30, c_last_name#31, d_year#27, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35] +Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#23 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#22 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum#36] +Results [9]: [c_customer_id#29, c_first_name#30, c_last_name#31, d_year#27, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35, sum#37] (35) Exchange -Input [9]: [c_customer_id#34, c_first_name#35, c_last_name#36, d_year#31, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40, sum#42] -Arguments: hashpartitioning(c_customer_id#34, c_first_name#35, c_last_name#36, d_year#31, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40, 5), ENSURE_REQUIREMENTS, [id=#43] +Input [9]: [c_customer_id#29, c_first_name#30, c_last_name#31, d_year#27, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35, sum#37] +Arguments: hashpartitioning(c_customer_id#29, c_first_name#30, c_last_name#31, d_year#27, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35, 5), ENSURE_REQUIREMENTS, [plan_id=6] (36) HashAggregate [codegen id : 15] -Input [9]: [c_customer_id#34, c_first_name#35, c_last_name#36, d_year#31, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40, sum#42] -Keys [8]: [c_customer_id#34, c_first_name#35, c_last_name#36, d_year#31, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40] -Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#27 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#26 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#27 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#26 as decimal(8,2)))), DecimalType(8,2))))#21] -Results [3]: [c_customer_id#34 AS customer_id#44, c_preferred_cust_flag#37 AS customer_preferred_cust_flag#45, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#27 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#26 as decimal(8,2)))), DecimalType(8,2))))#21,18,2) AS year_total#46] +Input [9]: [c_customer_id#29, c_first_name#30, c_last_name#31, d_year#27, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35, sum#37] +Keys [8]: [c_customer_id#29, c_first_name#30, c_last_name#31, d_year#27, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35] +Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#23 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#22 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#23 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#22 as decimal(8,2)))), DecimalType(8,2))))#18] +Results [3]: [c_customer_id#29 AS customer_id#38, c_preferred_cust_flag#32 AS customer_preferred_cust_flag#39, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#23 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#22 as decimal(8,2)))), DecimalType(8,2))))#18,18,2) AS year_total#40] (37) Exchange -Input [3]: [customer_id#44, customer_preferred_cust_flag#45, year_total#46] -Arguments: hashpartitioning(customer_id#44, 5), ENSURE_REQUIREMENTS, [id=#47] +Input [3]: [customer_id#38, customer_preferred_cust_flag#39, year_total#40] +Arguments: hashpartitioning(customer_id#38, 5), ENSURE_REQUIREMENTS, [plan_id=7] (38) Sort [codegen id : 16] -Input [3]: [customer_id#44, customer_preferred_cust_flag#45, year_total#46] -Arguments: [customer_id#44 ASC NULLS FIRST], false, 0 +Input [3]: [customer_id#38, customer_preferred_cust_flag#39, year_total#40] +Arguments: [customer_id#38 ASC NULLS FIRST], false, 0 (39) SortMergeJoin [codegen id : 17] -Left keys [1]: [customer_id#22] -Right keys [1]: [customer_id#44] +Left keys [1]: [customer_id#19] +Right keys [1]: [customer_id#38] Join condition: None (40) Project [codegen id : 17] -Output [4]: [customer_id#22, year_total#23, customer_preferred_cust_flag#45, year_total#46] -Input [5]: [customer_id#22, year_total#23, customer_id#44, customer_preferred_cust_flag#45, year_total#46] +Output [4]: [customer_id#19, year_total#20, customer_preferred_cust_flag#39, year_total#40] +Input [5]: [customer_id#19, year_total#20, customer_id#38, customer_preferred_cust_flag#39, year_total#40] (41) Scan parquet default.web_sales -Output [4]: [ws_bill_customer_sk#48, ws_ext_discount_amt#49, ws_ext_list_price#50, ws_sold_date_sk#51] +Output [4]: [ws_bill_customer_sk#41, ws_ext_discount_amt#42, ws_ext_list_price#43, ws_sold_date_sk#44] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#51), dynamicpruningexpression(ws_sold_date_sk#51 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#44), dynamicpruningexpression(ws_sold_date_sk#44 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (42) ColumnarToRow [codegen id : 19] -Input [4]: [ws_bill_customer_sk#48, ws_ext_discount_amt#49, ws_ext_list_price#50, ws_sold_date_sk#51] +Input [4]: [ws_bill_customer_sk#41, ws_ext_discount_amt#42, ws_ext_list_price#43, ws_sold_date_sk#44] (43) Filter [codegen id : 19] -Input [4]: [ws_bill_customer_sk#48, ws_ext_discount_amt#49, ws_ext_list_price#50, ws_sold_date_sk#51] -Condition : isnotnull(ws_bill_customer_sk#48) +Input [4]: [ws_bill_customer_sk#41, ws_ext_discount_amt#42, ws_ext_list_price#43, ws_sold_date_sk#44] +Condition : isnotnull(ws_bill_customer_sk#41) (44) ReusedExchange [Reuses operator id: 84] -Output [2]: [d_date_sk#52, d_year#53] +Output [2]: [d_date_sk#45, d_year#46] (45) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [ws_sold_date_sk#51] -Right keys [1]: [d_date_sk#52] +Left keys [1]: [ws_sold_date_sk#44] +Right keys [1]: [d_date_sk#45] Join condition: None (46) Project [codegen id : 19] -Output [4]: [ws_bill_customer_sk#48, ws_ext_discount_amt#49, ws_ext_list_price#50, d_year#53] -Input [6]: [ws_bill_customer_sk#48, ws_ext_discount_amt#49, ws_ext_list_price#50, ws_sold_date_sk#51, d_date_sk#52, d_year#53] +Output [4]: [ws_bill_customer_sk#41, ws_ext_discount_amt#42, ws_ext_list_price#43, d_year#46] +Input [6]: [ws_bill_customer_sk#41, ws_ext_discount_amt#42, ws_ext_list_price#43, ws_sold_date_sk#44, d_date_sk#45, d_year#46] (47) Exchange -Input [4]: [ws_bill_customer_sk#48, ws_ext_discount_amt#49, ws_ext_list_price#50, d_year#53] -Arguments: hashpartitioning(ws_bill_customer_sk#48, 5), ENSURE_REQUIREMENTS, [id=#54] +Input [4]: [ws_bill_customer_sk#41, ws_ext_discount_amt#42, ws_ext_list_price#43, d_year#46] +Arguments: hashpartitioning(ws_bill_customer_sk#41, 5), ENSURE_REQUIREMENTS, [plan_id=8] (48) Sort [codegen id : 20] -Input [4]: [ws_bill_customer_sk#48, ws_ext_discount_amt#49, ws_ext_list_price#50, d_year#53] -Arguments: [ws_bill_customer_sk#48 ASC NULLS FIRST], false, 0 +Input [4]: [ws_bill_customer_sk#41, ws_ext_discount_amt#42, ws_ext_list_price#43, d_year#46] +Arguments: [ws_bill_customer_sk#41 ASC NULLS FIRST], false, 0 (49) ReusedExchange [Reuses operator id: 12] -Output [8]: [c_customer_sk#55, c_customer_id#56, c_first_name#57, c_last_name#58, c_preferred_cust_flag#59, c_birth_country#60, c_login#61, c_email_address#62] +Output [8]: [c_customer_sk#47, c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54] (50) Sort [codegen id : 22] -Input [8]: [c_customer_sk#55, c_customer_id#56, c_first_name#57, c_last_name#58, c_preferred_cust_flag#59, c_birth_country#60, c_login#61, c_email_address#62] -Arguments: [c_customer_sk#55 ASC NULLS FIRST], false, 0 +Input [8]: [c_customer_sk#47, c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54] +Arguments: [c_customer_sk#47 ASC NULLS FIRST], false, 0 (51) SortMergeJoin [codegen id : 23] -Left keys [1]: [ws_bill_customer_sk#48] -Right keys [1]: [c_customer_sk#55] +Left keys [1]: [ws_bill_customer_sk#41] +Right keys [1]: [c_customer_sk#47] Join condition: None (52) Project [codegen id : 23] -Output [10]: [c_customer_id#56, c_first_name#57, c_last_name#58, c_preferred_cust_flag#59, c_birth_country#60, c_login#61, c_email_address#62, ws_ext_discount_amt#49, ws_ext_list_price#50, d_year#53] -Input [12]: [ws_bill_customer_sk#48, ws_ext_discount_amt#49, ws_ext_list_price#50, d_year#53, c_customer_sk#55, c_customer_id#56, c_first_name#57, c_last_name#58, c_preferred_cust_flag#59, c_birth_country#60, c_login#61, c_email_address#62] +Output [10]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, ws_ext_discount_amt#42, ws_ext_list_price#43, d_year#46] +Input [12]: [ws_bill_customer_sk#41, ws_ext_discount_amt#42, ws_ext_list_price#43, d_year#46, c_customer_sk#47, c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54] (53) HashAggregate [codegen id : 23] -Input [10]: [c_customer_id#56, c_first_name#57, c_last_name#58, c_preferred_cust_flag#59, c_birth_country#60, c_login#61, c_email_address#62, ws_ext_discount_amt#49, ws_ext_list_price#50, d_year#53] -Keys [8]: [c_customer_id#56, c_first_name#57, c_last_name#58, c_preferred_cust_flag#59, c_birth_country#60, c_login#61, c_email_address#62, d_year#53] -Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#50 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#49 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#63] -Results [9]: [c_customer_id#56, c_first_name#57, c_last_name#58, c_preferred_cust_flag#59, c_birth_country#60, c_login#61, c_email_address#62, d_year#53, sum#64] +Input [10]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, ws_ext_discount_amt#42, ws_ext_list_price#43, d_year#46] +Keys [8]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#46] +Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#43 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#42 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum#55] +Results [9]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#46, sum#56] (54) Exchange -Input [9]: [c_customer_id#56, c_first_name#57, c_last_name#58, c_preferred_cust_flag#59, c_birth_country#60, c_login#61, c_email_address#62, d_year#53, sum#64] -Arguments: hashpartitioning(c_customer_id#56, c_first_name#57, c_last_name#58, c_preferred_cust_flag#59, c_birth_country#60, c_login#61, c_email_address#62, d_year#53, 5), ENSURE_REQUIREMENTS, [id=#65] +Input [9]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#46, sum#56] +Arguments: hashpartitioning(c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#46, 5), ENSURE_REQUIREMENTS, [plan_id=9] (55) HashAggregate [codegen id : 24] -Input [9]: [c_customer_id#56, c_first_name#57, c_last_name#58, c_preferred_cust_flag#59, c_birth_country#60, c_login#61, c_email_address#62, d_year#53, sum#64] -Keys [8]: [c_customer_id#56, c_first_name#57, c_last_name#58, c_preferred_cust_flag#59, c_birth_country#60, c_login#61, c_email_address#62, d_year#53] -Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#50 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#49 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#50 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#49 as decimal(8,2)))), DecimalType(8,2))))#66] -Results [2]: [c_customer_id#56 AS customer_id#67, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#50 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#49 as decimal(8,2)))), DecimalType(8,2))))#66,18,2) AS year_total#68] +Input [9]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#46, sum#56] +Keys [8]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#46] +Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#43 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#42 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#43 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#42 as decimal(8,2)))), DecimalType(8,2))))#57] +Results [2]: [c_customer_id#48 AS customer_id#58, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#43 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#42 as decimal(8,2)))), DecimalType(8,2))))#57,18,2) AS year_total#59] (56) Filter [codegen id : 24] -Input [2]: [customer_id#67, year_total#68] -Condition : (isnotnull(year_total#68) AND (year_total#68 > 0.00)) +Input [2]: [customer_id#58, year_total#59] +Condition : (isnotnull(year_total#59) AND (year_total#59 > 0.00)) (57) Exchange -Input [2]: [customer_id#67, year_total#68] -Arguments: hashpartitioning(customer_id#67, 5), ENSURE_REQUIREMENTS, [id=#69] +Input [2]: [customer_id#58, year_total#59] +Arguments: hashpartitioning(customer_id#58, 5), ENSURE_REQUIREMENTS, [plan_id=10] (58) Sort [codegen id : 25] -Input [2]: [customer_id#67, year_total#68] -Arguments: [customer_id#67 ASC NULLS FIRST], false, 0 +Input [2]: [customer_id#58, year_total#59] +Arguments: [customer_id#58 ASC NULLS FIRST], false, 0 (59) SortMergeJoin [codegen id : 26] -Left keys [1]: [customer_id#22] -Right keys [1]: [customer_id#67] +Left keys [1]: [customer_id#19] +Right keys [1]: [customer_id#58] Join condition: None (60) Project [codegen id : 26] -Output [5]: [customer_id#22, year_total#23, customer_preferred_cust_flag#45, year_total#46, year_total#68] -Input [6]: [customer_id#22, year_total#23, customer_preferred_cust_flag#45, year_total#46, customer_id#67, year_total#68] +Output [5]: [customer_id#19, year_total#20, customer_preferred_cust_flag#39, year_total#40, year_total#59] +Input [6]: [customer_id#19, year_total#20, customer_preferred_cust_flag#39, year_total#40, customer_id#58, year_total#59] (61) Scan parquet default.web_sales -Output [4]: [ws_bill_customer_sk#70, ws_ext_discount_amt#71, ws_ext_list_price#72, ws_sold_date_sk#73] +Output [4]: [ws_bill_customer_sk#60, ws_ext_discount_amt#61, ws_ext_list_price#62, ws_sold_date_sk#63] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#73), dynamicpruningexpression(ws_sold_date_sk#73 IN dynamicpruning#29)] +PartitionFilters: [isnotnull(ws_sold_date_sk#63), dynamicpruningexpression(ws_sold_date_sk#63 IN dynamicpruning#25)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (62) ColumnarToRow [codegen id : 28] -Input [4]: [ws_bill_customer_sk#70, ws_ext_discount_amt#71, ws_ext_list_price#72, ws_sold_date_sk#73] +Input [4]: [ws_bill_customer_sk#60, ws_ext_discount_amt#61, ws_ext_list_price#62, ws_sold_date_sk#63] (63) Filter [codegen id : 28] -Input [4]: [ws_bill_customer_sk#70, ws_ext_discount_amt#71, ws_ext_list_price#72, ws_sold_date_sk#73] -Condition : isnotnull(ws_bill_customer_sk#70) +Input [4]: [ws_bill_customer_sk#60, ws_ext_discount_amt#61, ws_ext_list_price#62, ws_sold_date_sk#63] +Condition : isnotnull(ws_bill_customer_sk#60) (64) ReusedExchange [Reuses operator id: 88] -Output [2]: [d_date_sk#74, d_year#75] +Output [2]: [d_date_sk#64, d_year#65] (65) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [ws_sold_date_sk#73] -Right keys [1]: [d_date_sk#74] +Left keys [1]: [ws_sold_date_sk#63] +Right keys [1]: [d_date_sk#64] Join condition: None (66) Project [codegen id : 28] -Output [4]: [ws_bill_customer_sk#70, ws_ext_discount_amt#71, ws_ext_list_price#72, d_year#75] -Input [6]: [ws_bill_customer_sk#70, ws_ext_discount_amt#71, ws_ext_list_price#72, ws_sold_date_sk#73, d_date_sk#74, d_year#75] +Output [4]: [ws_bill_customer_sk#60, ws_ext_discount_amt#61, ws_ext_list_price#62, d_year#65] +Input [6]: [ws_bill_customer_sk#60, ws_ext_discount_amt#61, ws_ext_list_price#62, ws_sold_date_sk#63, d_date_sk#64, d_year#65] (67) Exchange -Input [4]: [ws_bill_customer_sk#70, ws_ext_discount_amt#71, ws_ext_list_price#72, d_year#75] -Arguments: hashpartitioning(ws_bill_customer_sk#70, 5), ENSURE_REQUIREMENTS, [id=#76] +Input [4]: [ws_bill_customer_sk#60, ws_ext_discount_amt#61, ws_ext_list_price#62, d_year#65] +Arguments: hashpartitioning(ws_bill_customer_sk#60, 5), ENSURE_REQUIREMENTS, [plan_id=11] (68) Sort [codegen id : 29] -Input [4]: [ws_bill_customer_sk#70, ws_ext_discount_amt#71, ws_ext_list_price#72, d_year#75] -Arguments: [ws_bill_customer_sk#70 ASC NULLS FIRST], false, 0 +Input [4]: [ws_bill_customer_sk#60, ws_ext_discount_amt#61, ws_ext_list_price#62, d_year#65] +Arguments: [ws_bill_customer_sk#60 ASC NULLS FIRST], false, 0 (69) ReusedExchange [Reuses operator id: 12] -Output [8]: [c_customer_sk#77, c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84] +Output [8]: [c_customer_sk#66, c_customer_id#67, c_first_name#68, c_last_name#69, c_preferred_cust_flag#70, c_birth_country#71, c_login#72, c_email_address#73] (70) Sort [codegen id : 31] -Input [8]: [c_customer_sk#77, c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84] -Arguments: [c_customer_sk#77 ASC NULLS FIRST], false, 0 +Input [8]: [c_customer_sk#66, c_customer_id#67, c_first_name#68, c_last_name#69, c_preferred_cust_flag#70, c_birth_country#71, c_login#72, c_email_address#73] +Arguments: [c_customer_sk#66 ASC NULLS FIRST], false, 0 (71) SortMergeJoin [codegen id : 32] -Left keys [1]: [ws_bill_customer_sk#70] -Right keys [1]: [c_customer_sk#77] +Left keys [1]: [ws_bill_customer_sk#60] +Right keys [1]: [c_customer_sk#66] Join condition: None (72) Project [codegen id : 32] -Output [10]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, ws_ext_discount_amt#71, ws_ext_list_price#72, d_year#75] -Input [12]: [ws_bill_customer_sk#70, ws_ext_discount_amt#71, ws_ext_list_price#72, d_year#75, c_customer_sk#77, c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84] +Output [10]: [c_customer_id#67, c_first_name#68, c_last_name#69, c_preferred_cust_flag#70, c_birth_country#71, c_login#72, c_email_address#73, ws_ext_discount_amt#61, ws_ext_list_price#62, d_year#65] +Input [12]: [ws_bill_customer_sk#60, ws_ext_discount_amt#61, ws_ext_list_price#62, d_year#65, c_customer_sk#66, c_customer_id#67, c_first_name#68, c_last_name#69, c_preferred_cust_flag#70, c_birth_country#71, c_login#72, c_email_address#73] (73) HashAggregate [codegen id : 32] -Input [10]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, ws_ext_discount_amt#71, ws_ext_list_price#72, d_year#75] -Keys [8]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, d_year#75] -Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#72 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#71 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#85] -Results [9]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, d_year#75, sum#86] +Input [10]: [c_customer_id#67, c_first_name#68, c_last_name#69, c_preferred_cust_flag#70, c_birth_country#71, c_login#72, c_email_address#73, ws_ext_discount_amt#61, ws_ext_list_price#62, d_year#65] +Keys [8]: [c_customer_id#67, c_first_name#68, c_last_name#69, c_preferred_cust_flag#70, c_birth_country#71, c_login#72, c_email_address#73, d_year#65] +Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#62 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#61 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum#74] +Results [9]: [c_customer_id#67, c_first_name#68, c_last_name#69, c_preferred_cust_flag#70, c_birth_country#71, c_login#72, c_email_address#73, d_year#65, sum#75] (74) Exchange -Input [9]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, d_year#75, sum#86] -Arguments: hashpartitioning(c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, d_year#75, 5), ENSURE_REQUIREMENTS, [id=#87] +Input [9]: [c_customer_id#67, c_first_name#68, c_last_name#69, c_preferred_cust_flag#70, c_birth_country#71, c_login#72, c_email_address#73, d_year#65, sum#75] +Arguments: hashpartitioning(c_customer_id#67, c_first_name#68, c_last_name#69, c_preferred_cust_flag#70, c_birth_country#71, c_login#72, c_email_address#73, d_year#65, 5), ENSURE_REQUIREMENTS, [plan_id=12] (75) HashAggregate [codegen id : 33] -Input [9]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, d_year#75, sum#86] -Keys [8]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, d_year#75] -Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#72 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#71 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#72 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#71 as decimal(8,2)))), DecimalType(8,2))))#66] -Results [2]: [c_customer_id#78 AS customer_id#88, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#72 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#71 as decimal(8,2)))), DecimalType(8,2))))#66,18,2) AS year_total#89] +Input [9]: [c_customer_id#67, c_first_name#68, c_last_name#69, c_preferred_cust_flag#70, c_birth_country#71, c_login#72, c_email_address#73, d_year#65, sum#75] +Keys [8]: [c_customer_id#67, c_first_name#68, c_last_name#69, c_preferred_cust_flag#70, c_birth_country#71, c_login#72, c_email_address#73, d_year#65] +Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#62 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#61 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#62 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#61 as decimal(8,2)))), DecimalType(8,2))))#57] +Results [2]: [c_customer_id#67 AS customer_id#76, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#62 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#61 as decimal(8,2)))), DecimalType(8,2))))#57,18,2) AS year_total#77] (76) Exchange -Input [2]: [customer_id#88, year_total#89] -Arguments: hashpartitioning(customer_id#88, 5), ENSURE_REQUIREMENTS, [id=#90] +Input [2]: [customer_id#76, year_total#77] +Arguments: hashpartitioning(customer_id#76, 5), ENSURE_REQUIREMENTS, [plan_id=13] (77) Sort [codegen id : 34] -Input [2]: [customer_id#88, year_total#89] -Arguments: [customer_id#88 ASC NULLS FIRST], false, 0 +Input [2]: [customer_id#76, year_total#77] +Arguments: [customer_id#76 ASC NULLS FIRST], false, 0 (78) SortMergeJoin [codegen id : 35] -Left keys [1]: [customer_id#22] -Right keys [1]: [customer_id#88] -Join condition: (CASE WHEN (year_total#68 > 0.00) THEN CheckOverflow((promote_precision(year_total#89) / promote_precision(year_total#68)), DecimalType(38,20)) END > CASE WHEN (year_total#23 > 0.00) THEN CheckOverflow((promote_precision(year_total#46) / promote_precision(year_total#23)), DecimalType(38,20)) END) +Left keys [1]: [customer_id#19] +Right keys [1]: [customer_id#76] +Join condition: (CASE WHEN (year_total#59 > 0.00) THEN CheckOverflow((promote_precision(year_total#77) / promote_precision(year_total#59)), DecimalType(38,20)) END > CASE WHEN (year_total#20 > 0.00) THEN CheckOverflow((promote_precision(year_total#40) / promote_precision(year_total#20)), DecimalType(38,20)) END) (79) Project [codegen id : 35] -Output [1]: [customer_preferred_cust_flag#45] -Input [7]: [customer_id#22, year_total#23, customer_preferred_cust_flag#45, year_total#46, year_total#68, customer_id#88, year_total#89] +Output [1]: [customer_preferred_cust_flag#39] +Input [7]: [customer_id#19, year_total#20, customer_preferred_cust_flag#39, year_total#40, year_total#59, customer_id#76, year_total#77] (80) TakeOrderedAndProject -Input [1]: [customer_preferred_cust_flag#45] -Arguments: 100, [customer_preferred_cust_flag#45 ASC NULLS FIRST], [customer_preferred_cust_flag#45] +Input [1]: [customer_preferred_cust_flag#39] +Arguments: 100, [customer_preferred_cust_flag#39 ASC NULLS FIRST], [customer_preferred_cust_flag#39] ===== Subqueries ===== @@ -468,9 +468,9 @@ Condition : ((isnotnull(d_year#7) AND (d_year#7 = 2001)) AND isnotnull(d_date_sk (84) BroadcastExchange Input [2]: [d_date_sk#6, d_year#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#91] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=14] -Subquery:2 Hosting operator id = 22 Hosting Expression = ss_sold_date_sk#28 IN dynamicpruning#29 +Subquery:2 Hosting operator id = 22 Hosting Expression = ss_sold_date_sk#24 IN dynamicpruning#25 BroadcastExchange (88) +- * Filter (87) +- * ColumnarToRow (86) @@ -478,25 +478,25 @@ BroadcastExchange (88) (85) Scan parquet default.date_dim -Output [2]: [d_date_sk#30, d_year#31] +Output [2]: [d_date_sk#26, d_year#27] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)] ReadSchema: struct (86) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#30, d_year#31] +Input [2]: [d_date_sk#26, d_year#27] (87) Filter [codegen id : 1] -Input [2]: [d_date_sk#30, d_year#31] -Condition : ((isnotnull(d_year#31) AND (d_year#31 = 2002)) AND isnotnull(d_date_sk#30)) +Input [2]: [d_date_sk#26, d_year#27] +Condition : ((isnotnull(d_year#27) AND (d_year#27 = 2002)) AND isnotnull(d_date_sk#26)) (88) BroadcastExchange -Input [2]: [d_date_sk#30, d_year#31] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#92] +Input [2]: [d_date_sk#26, d_year#27] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15] -Subquery:3 Hosting operator id = 41 Hosting Expression = ws_sold_date_sk#51 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 41 Hosting Expression = ws_sold_date_sk#44 IN dynamicpruning#5 -Subquery:4 Hosting operator id = 61 Hosting Expression = ws_sold_date_sk#73 IN dynamicpruning#29 +Subquery:4 Hosting operator id = 61 Hosting Expression = ws_sold_date_sk#63 IN dynamicpruning#25 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q11/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q11/explain.txt index 8cb7c021fb3ea..9fc721d003998 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q11/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q11/explain.txt @@ -104,7 +104,7 @@ Condition : isnotnull(ss_customer_sk#9) (7) BroadcastExchange Input [4]: [ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [c_customer_sk#1] @@ -116,301 +116,301 @@ Output [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_f Input [12]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12] (10) ReusedExchange [Reuses operator id: 76] -Output [2]: [d_date_sk#15, d_year#16] +Output [2]: [d_date_sk#14, d_year#15] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_sold_date_sk#12] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (12) Project [codegen id : 3] -Output [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_list_price#11, d_year#16] -Input [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12, d_date_sk#15, d_year#16] +Output [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_list_price#11, d_year#15] +Input [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12, d_date_sk#14, d_year#15] (13) HashAggregate [codegen id : 3] -Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_list_price#11, d_year#16] -Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#16, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8] +Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_list_price#11, d_year#15] +Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8] Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#11 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#17] -Results [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#16, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18] +Aggregate Attributes [1]: [sum#16] +Results [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#17] (14) Exchange -Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#16, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18] -Arguments: hashpartitioning(c_customer_id#2, c_first_name#3, c_last_name#4, d_year#16, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#17] +Arguments: hashpartitioning(c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 16] -Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#16, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18] -Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#16, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8] +Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#17] +Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8] Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#11 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#11 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(8,2)))), DecimalType(8,2))))#20] -Results [2]: [c_customer_id#2 AS customer_id#21, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#11 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(8,2)))), DecimalType(8,2))))#20,18,2) AS year_total#22] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#11 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(8,2)))), DecimalType(8,2))))#18] +Results [2]: [c_customer_id#2 AS customer_id#19, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#11 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(8,2)))), DecimalType(8,2))))#18,18,2) AS year_total#20] (16) Filter [codegen id : 16] -Input [2]: [customer_id#21, year_total#22] -Condition : (isnotnull(year_total#22) AND (year_total#22 > 0.00)) +Input [2]: [customer_id#19, year_total#20] +Condition : (isnotnull(year_total#20) AND (year_total#20 > 0.00)) (17) Scan parquet default.customer -Output [8]: [c_customer_sk#23, c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30] +Output [8]: [c_customer_sk#21, c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (18) ColumnarToRow [codegen id : 6] -Input [8]: [c_customer_sk#23, c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30] +Input [8]: [c_customer_sk#21, c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28] (19) Filter [codegen id : 6] -Input [8]: [c_customer_sk#23, c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30] -Condition : (isnotnull(c_customer_sk#23) AND isnotnull(c_customer_id#24)) +Input [8]: [c_customer_sk#21, c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28] +Condition : (isnotnull(c_customer_sk#21) AND isnotnull(c_customer_id#22)) (20) Scan parquet default.store_sales -Output [4]: [ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34] +Output [4]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_list_price#31, ss_sold_date_sk#32] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#34), dynamicpruningexpression(ss_sold_date_sk#34 IN dynamicpruning#35)] +PartitionFilters: [isnotnull(ss_sold_date_sk#32), dynamicpruningexpression(ss_sold_date_sk#32 IN dynamicpruning#33)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [4]: [ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34] +Input [4]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_list_price#31, ss_sold_date_sk#32] (22) Filter [codegen id : 4] -Input [4]: [ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34] -Condition : isnotnull(ss_customer_sk#31) +Input [4]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_list_price#31, ss_sold_date_sk#32] +Condition : isnotnull(ss_customer_sk#29) (23) BroadcastExchange -Input [4]: [ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#36] +Input [4]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_list_price#31, ss_sold_date_sk#32] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [c_customer_sk#23] -Right keys [1]: [ss_customer_sk#31] +Left keys [1]: [c_customer_sk#21] +Right keys [1]: [ss_customer_sk#29] Join condition: None (25) Project [codegen id : 6] -Output [10]: [c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34] -Input [12]: [c_customer_sk#23, c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34] +Output [10]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_list_price#31, ss_sold_date_sk#32] +Input [12]: [c_customer_sk#21, c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_list_price#31, ss_sold_date_sk#32] (26) ReusedExchange [Reuses operator id: 80] -Output [2]: [d_date_sk#37, d_year#38] +Output [2]: [d_date_sk#34, d_year#35] (27) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ss_sold_date_sk#34] -Right keys [1]: [d_date_sk#37] +Left keys [1]: [ss_sold_date_sk#32] +Right keys [1]: [d_date_sk#34] Join condition: None (28) Project [codegen id : 6] -Output [10]: [c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, ss_ext_discount_amt#32, ss_ext_list_price#33, d_year#38] -Input [12]: [c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34, d_date_sk#37, d_year#38] +Output [10]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_list_price#31, d_year#35] +Input [12]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_list_price#31, ss_sold_date_sk#32, d_date_sk#34, d_year#35] (29) HashAggregate [codegen id : 6] -Input [10]: [c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, ss_ext_discount_amt#32, ss_ext_list_price#33, d_year#38] -Keys [8]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#38, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30] -Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#33 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#32 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#39] -Results [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#38, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40] +Input [10]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_list_price#31, d_year#35] +Keys [8]: [c_customer_id#22, c_first_name#23, c_last_name#24, d_year#35, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28] +Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#31 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#30 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum#36] +Results [9]: [c_customer_id#22, c_first_name#23, c_last_name#24, d_year#35, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, sum#37] (30) Exchange -Input [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#38, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40] -Arguments: hashpartitioning(c_customer_id#24, c_first_name#25, c_last_name#26, d_year#38, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, 5), ENSURE_REQUIREMENTS, [id=#41] +Input [9]: [c_customer_id#22, c_first_name#23, c_last_name#24, d_year#35, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, sum#37] +Arguments: hashpartitioning(c_customer_id#22, c_first_name#23, c_last_name#24, d_year#35, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, 5), ENSURE_REQUIREMENTS, [plan_id=4] (31) HashAggregate [codegen id : 7] -Input [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#38, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40] -Keys [8]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#38, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30] -Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#33 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#32 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#33 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#32 as decimal(8,2)))), DecimalType(8,2))))#20] -Results [3]: [c_customer_id#24 AS customer_id#42, c_preferred_cust_flag#27 AS customer_preferred_cust_flag#43, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#33 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#32 as decimal(8,2)))), DecimalType(8,2))))#20,18,2) AS year_total#44] +Input [9]: [c_customer_id#22, c_first_name#23, c_last_name#24, d_year#35, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, sum#37] +Keys [8]: [c_customer_id#22, c_first_name#23, c_last_name#24, d_year#35, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28] +Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#31 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#30 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#31 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#30 as decimal(8,2)))), DecimalType(8,2))))#18] +Results [3]: [c_customer_id#22 AS customer_id#38, c_preferred_cust_flag#25 AS customer_preferred_cust_flag#39, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#31 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#30 as decimal(8,2)))), DecimalType(8,2))))#18,18,2) AS year_total#40] (32) BroadcastExchange -Input [3]: [customer_id#42, customer_preferred_cust_flag#43, year_total#44] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#45] +Input [3]: [customer_id#38, customer_preferred_cust_flag#39, year_total#40] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=5] (33) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [customer_id#21] -Right keys [1]: [customer_id#42] +Left keys [1]: [customer_id#19] +Right keys [1]: [customer_id#38] Join condition: None (34) Project [codegen id : 16] -Output [4]: [customer_id#21, year_total#22, customer_preferred_cust_flag#43, year_total#44] -Input [5]: [customer_id#21, year_total#22, customer_id#42, customer_preferred_cust_flag#43, year_total#44] +Output [4]: [customer_id#19, year_total#20, customer_preferred_cust_flag#39, year_total#40] +Input [5]: [customer_id#19, year_total#20, customer_id#38, customer_preferred_cust_flag#39, year_total#40] (35) Scan parquet default.customer -Output [8]: [c_customer_sk#46, c_customer_id#47, c_first_name#48, c_last_name#49, c_preferred_cust_flag#50, c_birth_country#51, c_login#52, c_email_address#53] +Output [8]: [c_customer_sk#41, c_customer_id#42, c_first_name#43, c_last_name#44, c_preferred_cust_flag#45, c_birth_country#46, c_login#47, c_email_address#48] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (36) ColumnarToRow [codegen id : 10] -Input [8]: [c_customer_sk#46, c_customer_id#47, c_first_name#48, c_last_name#49, c_preferred_cust_flag#50, c_birth_country#51, c_login#52, c_email_address#53] +Input [8]: [c_customer_sk#41, c_customer_id#42, c_first_name#43, c_last_name#44, c_preferred_cust_flag#45, c_birth_country#46, c_login#47, c_email_address#48] (37) Filter [codegen id : 10] -Input [8]: [c_customer_sk#46, c_customer_id#47, c_first_name#48, c_last_name#49, c_preferred_cust_flag#50, c_birth_country#51, c_login#52, c_email_address#53] -Condition : (isnotnull(c_customer_sk#46) AND isnotnull(c_customer_id#47)) +Input [8]: [c_customer_sk#41, c_customer_id#42, c_first_name#43, c_last_name#44, c_preferred_cust_flag#45, c_birth_country#46, c_login#47, c_email_address#48] +Condition : (isnotnull(c_customer_sk#41) AND isnotnull(c_customer_id#42)) (38) Scan parquet default.web_sales -Output [4]: [ws_bill_customer_sk#54, ws_ext_discount_amt#55, ws_ext_list_price#56, ws_sold_date_sk#57] +Output [4]: [ws_bill_customer_sk#49, ws_ext_discount_amt#50, ws_ext_list_price#51, ws_sold_date_sk#52] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#57), dynamicpruningexpression(ws_sold_date_sk#57 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ws_sold_date_sk#52), dynamicpruningexpression(ws_sold_date_sk#52 IN dynamicpruning#13)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (39) ColumnarToRow [codegen id : 8] -Input [4]: [ws_bill_customer_sk#54, ws_ext_discount_amt#55, ws_ext_list_price#56, ws_sold_date_sk#57] +Input [4]: [ws_bill_customer_sk#49, ws_ext_discount_amt#50, ws_ext_list_price#51, ws_sold_date_sk#52] (40) Filter [codegen id : 8] -Input [4]: [ws_bill_customer_sk#54, ws_ext_discount_amt#55, ws_ext_list_price#56, ws_sold_date_sk#57] -Condition : isnotnull(ws_bill_customer_sk#54) +Input [4]: [ws_bill_customer_sk#49, ws_ext_discount_amt#50, ws_ext_list_price#51, ws_sold_date_sk#52] +Condition : isnotnull(ws_bill_customer_sk#49) (41) BroadcastExchange -Input [4]: [ws_bill_customer_sk#54, ws_ext_discount_amt#55, ws_ext_list_price#56, ws_sold_date_sk#57] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#58] +Input [4]: [ws_bill_customer_sk#49, ws_ext_discount_amt#50, ws_ext_list_price#51, ws_sold_date_sk#52] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] (42) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [c_customer_sk#46] -Right keys [1]: [ws_bill_customer_sk#54] +Left keys [1]: [c_customer_sk#41] +Right keys [1]: [ws_bill_customer_sk#49] Join condition: None (43) Project [codegen id : 10] -Output [10]: [c_customer_id#47, c_first_name#48, c_last_name#49, c_preferred_cust_flag#50, c_birth_country#51, c_login#52, c_email_address#53, ws_ext_discount_amt#55, ws_ext_list_price#56, ws_sold_date_sk#57] -Input [12]: [c_customer_sk#46, c_customer_id#47, c_first_name#48, c_last_name#49, c_preferred_cust_flag#50, c_birth_country#51, c_login#52, c_email_address#53, ws_bill_customer_sk#54, ws_ext_discount_amt#55, ws_ext_list_price#56, ws_sold_date_sk#57] +Output [10]: [c_customer_id#42, c_first_name#43, c_last_name#44, c_preferred_cust_flag#45, c_birth_country#46, c_login#47, c_email_address#48, ws_ext_discount_amt#50, ws_ext_list_price#51, ws_sold_date_sk#52] +Input [12]: [c_customer_sk#41, c_customer_id#42, c_first_name#43, c_last_name#44, c_preferred_cust_flag#45, c_birth_country#46, c_login#47, c_email_address#48, ws_bill_customer_sk#49, ws_ext_discount_amt#50, ws_ext_list_price#51, ws_sold_date_sk#52] (44) ReusedExchange [Reuses operator id: 76] -Output [2]: [d_date_sk#59, d_year#60] +Output [2]: [d_date_sk#53, d_year#54] (45) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ws_sold_date_sk#57] -Right keys [1]: [d_date_sk#59] +Left keys [1]: [ws_sold_date_sk#52] +Right keys [1]: [d_date_sk#53] Join condition: None (46) Project [codegen id : 10] -Output [10]: [c_customer_id#47, c_first_name#48, c_last_name#49, c_preferred_cust_flag#50, c_birth_country#51, c_login#52, c_email_address#53, ws_ext_discount_amt#55, ws_ext_list_price#56, d_year#60] -Input [12]: [c_customer_id#47, c_first_name#48, c_last_name#49, c_preferred_cust_flag#50, c_birth_country#51, c_login#52, c_email_address#53, ws_ext_discount_amt#55, ws_ext_list_price#56, ws_sold_date_sk#57, d_date_sk#59, d_year#60] +Output [10]: [c_customer_id#42, c_first_name#43, c_last_name#44, c_preferred_cust_flag#45, c_birth_country#46, c_login#47, c_email_address#48, ws_ext_discount_amt#50, ws_ext_list_price#51, d_year#54] +Input [12]: [c_customer_id#42, c_first_name#43, c_last_name#44, c_preferred_cust_flag#45, c_birth_country#46, c_login#47, c_email_address#48, ws_ext_discount_amt#50, ws_ext_list_price#51, ws_sold_date_sk#52, d_date_sk#53, d_year#54] (47) HashAggregate [codegen id : 10] -Input [10]: [c_customer_id#47, c_first_name#48, c_last_name#49, c_preferred_cust_flag#50, c_birth_country#51, c_login#52, c_email_address#53, ws_ext_discount_amt#55, ws_ext_list_price#56, d_year#60] -Keys [8]: [c_customer_id#47, c_first_name#48, c_last_name#49, c_preferred_cust_flag#50, c_birth_country#51, c_login#52, c_email_address#53, d_year#60] -Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#56 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#55 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#61] -Results [9]: [c_customer_id#47, c_first_name#48, c_last_name#49, c_preferred_cust_flag#50, c_birth_country#51, c_login#52, c_email_address#53, d_year#60, sum#62] +Input [10]: [c_customer_id#42, c_first_name#43, c_last_name#44, c_preferred_cust_flag#45, c_birth_country#46, c_login#47, c_email_address#48, ws_ext_discount_amt#50, ws_ext_list_price#51, d_year#54] +Keys [8]: [c_customer_id#42, c_first_name#43, c_last_name#44, c_preferred_cust_flag#45, c_birth_country#46, c_login#47, c_email_address#48, d_year#54] +Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#51 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#50 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum#55] +Results [9]: [c_customer_id#42, c_first_name#43, c_last_name#44, c_preferred_cust_flag#45, c_birth_country#46, c_login#47, c_email_address#48, d_year#54, sum#56] (48) Exchange -Input [9]: [c_customer_id#47, c_first_name#48, c_last_name#49, c_preferred_cust_flag#50, c_birth_country#51, c_login#52, c_email_address#53, d_year#60, sum#62] -Arguments: hashpartitioning(c_customer_id#47, c_first_name#48, c_last_name#49, c_preferred_cust_flag#50, c_birth_country#51, c_login#52, c_email_address#53, d_year#60, 5), ENSURE_REQUIREMENTS, [id=#63] +Input [9]: [c_customer_id#42, c_first_name#43, c_last_name#44, c_preferred_cust_flag#45, c_birth_country#46, c_login#47, c_email_address#48, d_year#54, sum#56] +Arguments: hashpartitioning(c_customer_id#42, c_first_name#43, c_last_name#44, c_preferred_cust_flag#45, c_birth_country#46, c_login#47, c_email_address#48, d_year#54, 5), ENSURE_REQUIREMENTS, [plan_id=7] (49) HashAggregate [codegen id : 11] -Input [9]: [c_customer_id#47, c_first_name#48, c_last_name#49, c_preferred_cust_flag#50, c_birth_country#51, c_login#52, c_email_address#53, d_year#60, sum#62] -Keys [8]: [c_customer_id#47, c_first_name#48, c_last_name#49, c_preferred_cust_flag#50, c_birth_country#51, c_login#52, c_email_address#53, d_year#60] -Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#56 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#55 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#56 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#55 as decimal(8,2)))), DecimalType(8,2))))#64] -Results [2]: [c_customer_id#47 AS customer_id#65, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#56 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#55 as decimal(8,2)))), DecimalType(8,2))))#64,18,2) AS year_total#66] +Input [9]: [c_customer_id#42, c_first_name#43, c_last_name#44, c_preferred_cust_flag#45, c_birth_country#46, c_login#47, c_email_address#48, d_year#54, sum#56] +Keys [8]: [c_customer_id#42, c_first_name#43, c_last_name#44, c_preferred_cust_flag#45, c_birth_country#46, c_login#47, c_email_address#48, d_year#54] +Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#51 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#50 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#51 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#50 as decimal(8,2)))), DecimalType(8,2))))#57] +Results [2]: [c_customer_id#42 AS customer_id#58, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#51 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#50 as decimal(8,2)))), DecimalType(8,2))))#57,18,2) AS year_total#59] (50) Filter [codegen id : 11] -Input [2]: [customer_id#65, year_total#66] -Condition : (isnotnull(year_total#66) AND (year_total#66 > 0.00)) +Input [2]: [customer_id#58, year_total#59] +Condition : (isnotnull(year_total#59) AND (year_total#59 > 0.00)) (51) BroadcastExchange -Input [2]: [customer_id#65, year_total#66] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#67] +Input [2]: [customer_id#58, year_total#59] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=8] (52) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [customer_id#21] -Right keys [1]: [customer_id#65] +Left keys [1]: [customer_id#19] +Right keys [1]: [customer_id#58] Join condition: None (53) Project [codegen id : 16] -Output [5]: [customer_id#21, year_total#22, customer_preferred_cust_flag#43, year_total#44, year_total#66] -Input [6]: [customer_id#21, year_total#22, customer_preferred_cust_flag#43, year_total#44, customer_id#65, year_total#66] +Output [5]: [customer_id#19, year_total#20, customer_preferred_cust_flag#39, year_total#40, year_total#59] +Input [6]: [customer_id#19, year_total#20, customer_preferred_cust_flag#39, year_total#40, customer_id#58, year_total#59] (54) Scan parquet default.customer -Output [8]: [c_customer_sk#68, c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75] +Output [8]: [c_customer_sk#60, c_customer_id#61, c_first_name#62, c_last_name#63, c_preferred_cust_flag#64, c_birth_country#65, c_login#66, c_email_address#67] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (55) ColumnarToRow [codegen id : 14] -Input [8]: [c_customer_sk#68, c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75] +Input [8]: [c_customer_sk#60, c_customer_id#61, c_first_name#62, c_last_name#63, c_preferred_cust_flag#64, c_birth_country#65, c_login#66, c_email_address#67] (56) Filter [codegen id : 14] -Input [8]: [c_customer_sk#68, c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75] -Condition : (isnotnull(c_customer_sk#68) AND isnotnull(c_customer_id#69)) +Input [8]: [c_customer_sk#60, c_customer_id#61, c_first_name#62, c_last_name#63, c_preferred_cust_flag#64, c_birth_country#65, c_login#66, c_email_address#67] +Condition : (isnotnull(c_customer_sk#60) AND isnotnull(c_customer_id#61)) (57) Scan parquet default.web_sales -Output [4]: [ws_bill_customer_sk#76, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79] +Output [4]: [ws_bill_customer_sk#68, ws_ext_discount_amt#69, ws_ext_list_price#70, ws_sold_date_sk#71] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#79), dynamicpruningexpression(ws_sold_date_sk#79 IN dynamicpruning#35)] +PartitionFilters: [isnotnull(ws_sold_date_sk#71), dynamicpruningexpression(ws_sold_date_sk#71 IN dynamicpruning#33)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (58) ColumnarToRow [codegen id : 12] -Input [4]: [ws_bill_customer_sk#76, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79] +Input [4]: [ws_bill_customer_sk#68, ws_ext_discount_amt#69, ws_ext_list_price#70, ws_sold_date_sk#71] (59) Filter [codegen id : 12] -Input [4]: [ws_bill_customer_sk#76, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79] -Condition : isnotnull(ws_bill_customer_sk#76) +Input [4]: [ws_bill_customer_sk#68, ws_ext_discount_amt#69, ws_ext_list_price#70, ws_sold_date_sk#71] +Condition : isnotnull(ws_bill_customer_sk#68) (60) BroadcastExchange -Input [4]: [ws_bill_customer_sk#76, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#80] +Input [4]: [ws_bill_customer_sk#68, ws_ext_discount_amt#69, ws_ext_list_price#70, ws_sold_date_sk#71] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] (61) BroadcastHashJoin [codegen id : 14] -Left keys [1]: [c_customer_sk#68] -Right keys [1]: [ws_bill_customer_sk#76] +Left keys [1]: [c_customer_sk#60] +Right keys [1]: [ws_bill_customer_sk#68] Join condition: None (62) Project [codegen id : 14] -Output [10]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79] -Input [12]: [c_customer_sk#68, c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, ws_bill_customer_sk#76, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79] +Output [10]: [c_customer_id#61, c_first_name#62, c_last_name#63, c_preferred_cust_flag#64, c_birth_country#65, c_login#66, c_email_address#67, ws_ext_discount_amt#69, ws_ext_list_price#70, ws_sold_date_sk#71] +Input [12]: [c_customer_sk#60, c_customer_id#61, c_first_name#62, c_last_name#63, c_preferred_cust_flag#64, c_birth_country#65, c_login#66, c_email_address#67, ws_bill_customer_sk#68, ws_ext_discount_amt#69, ws_ext_list_price#70, ws_sold_date_sk#71] (63) ReusedExchange [Reuses operator id: 80] -Output [2]: [d_date_sk#81, d_year#82] +Output [2]: [d_date_sk#72, d_year#73] (64) BroadcastHashJoin [codegen id : 14] -Left keys [1]: [ws_sold_date_sk#79] -Right keys [1]: [d_date_sk#81] +Left keys [1]: [ws_sold_date_sk#71] +Right keys [1]: [d_date_sk#72] Join condition: None (65) Project [codegen id : 14] -Output [10]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, ws_ext_discount_amt#77, ws_ext_list_price#78, d_year#82] -Input [12]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79, d_date_sk#81, d_year#82] +Output [10]: [c_customer_id#61, c_first_name#62, c_last_name#63, c_preferred_cust_flag#64, c_birth_country#65, c_login#66, c_email_address#67, ws_ext_discount_amt#69, ws_ext_list_price#70, d_year#73] +Input [12]: [c_customer_id#61, c_first_name#62, c_last_name#63, c_preferred_cust_flag#64, c_birth_country#65, c_login#66, c_email_address#67, ws_ext_discount_amt#69, ws_ext_list_price#70, ws_sold_date_sk#71, d_date_sk#72, d_year#73] (66) HashAggregate [codegen id : 14] -Input [10]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, ws_ext_discount_amt#77, ws_ext_list_price#78, d_year#82] -Keys [8]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#82] -Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#78 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#77 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#83] -Results [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#82, sum#84] +Input [10]: [c_customer_id#61, c_first_name#62, c_last_name#63, c_preferred_cust_flag#64, c_birth_country#65, c_login#66, c_email_address#67, ws_ext_discount_amt#69, ws_ext_list_price#70, d_year#73] +Keys [8]: [c_customer_id#61, c_first_name#62, c_last_name#63, c_preferred_cust_flag#64, c_birth_country#65, c_login#66, c_email_address#67, d_year#73] +Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#70 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#69 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum#74] +Results [9]: [c_customer_id#61, c_first_name#62, c_last_name#63, c_preferred_cust_flag#64, c_birth_country#65, c_login#66, c_email_address#67, d_year#73, sum#75] (67) Exchange -Input [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#82, sum#84] -Arguments: hashpartitioning(c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#82, 5), ENSURE_REQUIREMENTS, [id=#85] +Input [9]: [c_customer_id#61, c_first_name#62, c_last_name#63, c_preferred_cust_flag#64, c_birth_country#65, c_login#66, c_email_address#67, d_year#73, sum#75] +Arguments: hashpartitioning(c_customer_id#61, c_first_name#62, c_last_name#63, c_preferred_cust_flag#64, c_birth_country#65, c_login#66, c_email_address#67, d_year#73, 5), ENSURE_REQUIREMENTS, [plan_id=10] (68) HashAggregate [codegen id : 15] -Input [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#82, sum#84] -Keys [8]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#82] -Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#78 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#77 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#78 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#77 as decimal(8,2)))), DecimalType(8,2))))#64] -Results [2]: [c_customer_id#69 AS customer_id#86, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#78 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#77 as decimal(8,2)))), DecimalType(8,2))))#64,18,2) AS year_total#87] +Input [9]: [c_customer_id#61, c_first_name#62, c_last_name#63, c_preferred_cust_flag#64, c_birth_country#65, c_login#66, c_email_address#67, d_year#73, sum#75] +Keys [8]: [c_customer_id#61, c_first_name#62, c_last_name#63, c_preferred_cust_flag#64, c_birth_country#65, c_login#66, c_email_address#67, d_year#73] +Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#70 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#69 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#70 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#69 as decimal(8,2)))), DecimalType(8,2))))#57] +Results [2]: [c_customer_id#61 AS customer_id#76, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#70 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#69 as decimal(8,2)))), DecimalType(8,2))))#57,18,2) AS year_total#77] (69) BroadcastExchange -Input [2]: [customer_id#86, year_total#87] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#88] +Input [2]: [customer_id#76, year_total#77] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=11] (70) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [customer_id#21] -Right keys [1]: [customer_id#86] -Join condition: (CASE WHEN (year_total#66 > 0.00) THEN CheckOverflow((promote_precision(year_total#87) / promote_precision(year_total#66)), DecimalType(38,20)) END > CASE WHEN (year_total#22 > 0.00) THEN CheckOverflow((promote_precision(year_total#44) / promote_precision(year_total#22)), DecimalType(38,20)) END) +Left keys [1]: [customer_id#19] +Right keys [1]: [customer_id#76] +Join condition: (CASE WHEN (year_total#59 > 0.00) THEN CheckOverflow((promote_precision(year_total#77) / promote_precision(year_total#59)), DecimalType(38,20)) END > CASE WHEN (year_total#20 > 0.00) THEN CheckOverflow((promote_precision(year_total#40) / promote_precision(year_total#20)), DecimalType(38,20)) END) (71) Project [codegen id : 16] -Output [1]: [customer_preferred_cust_flag#43] -Input [7]: [customer_id#21, year_total#22, customer_preferred_cust_flag#43, year_total#44, year_total#66, customer_id#86, year_total#87] +Output [1]: [customer_preferred_cust_flag#39] +Input [7]: [customer_id#19, year_total#20, customer_preferred_cust_flag#39, year_total#40, year_total#59, customer_id#76, year_total#77] (72) TakeOrderedAndProject -Input [1]: [customer_preferred_cust_flag#43] -Arguments: 100, [customer_preferred_cust_flag#43 ASC NULLS FIRST], [customer_preferred_cust_flag#43] +Input [1]: [customer_preferred_cust_flag#39] +Arguments: 100, [customer_preferred_cust_flag#39 ASC NULLS FIRST], [customer_preferred_cust_flag#39] ===== Subqueries ===== @@ -422,24 +422,24 @@ BroadcastExchange (76) (73) Scan parquet default.date_dim -Output [2]: [d_date_sk#15, d_year#16] +Output [2]: [d_date_sk#14, d_year#15] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (74) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#16] +Input [2]: [d_date_sk#14, d_year#15] (75) Filter [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#16] -Condition : ((isnotnull(d_year#16) AND (d_year#16 = 2001)) AND isnotnull(d_date_sk#15)) +Input [2]: [d_date_sk#14, d_year#15] +Condition : ((isnotnull(d_year#15) AND (d_year#15 = 2001)) AND isnotnull(d_date_sk#14)) (76) BroadcastExchange -Input [2]: [d_date_sk#15, d_year#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#89] +Input [2]: [d_date_sk#14, d_year#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=12] -Subquery:2 Hosting operator id = 20 Hosting Expression = ss_sold_date_sk#34 IN dynamicpruning#35 +Subquery:2 Hosting operator id = 20 Hosting Expression = ss_sold_date_sk#32 IN dynamicpruning#33 BroadcastExchange (80) +- * Filter (79) +- * ColumnarToRow (78) @@ -447,25 +447,25 @@ BroadcastExchange (80) (77) Scan parquet default.date_dim -Output [2]: [d_date_sk#37, d_year#38] +Output [2]: [d_date_sk#34, d_year#35] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)] ReadSchema: struct (78) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#37, d_year#38] +Input [2]: [d_date_sk#34, d_year#35] (79) Filter [codegen id : 1] -Input [2]: [d_date_sk#37, d_year#38] -Condition : ((isnotnull(d_year#38) AND (d_year#38 = 2002)) AND isnotnull(d_date_sk#37)) +Input [2]: [d_date_sk#34, d_year#35] +Condition : ((isnotnull(d_year#35) AND (d_year#35 = 2002)) AND isnotnull(d_date_sk#34)) (80) BroadcastExchange -Input [2]: [d_date_sk#37, d_year#38] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#90] +Input [2]: [d_date_sk#34, d_year#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=13] -Subquery:3 Hosting operator id = 38 Hosting Expression = ws_sold_date_sk#57 IN dynamicpruning#13 +Subquery:3 Hosting operator id = 38 Hosting Expression = ws_sold_date_sk#52 IN dynamicpruning#13 -Subquery:4 Hosting operator id = 57 Hosting Expression = ws_sold_date_sk#79 IN dynamicpruning#35 +Subquery:4 Hosting operator id = 57 Hosting Expression = ws_sold_date_sk#71 IN dynamicpruning#33 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q12.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q12.sf100/explain.txt index 0f0b678bb7074..71275fad79347 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q12.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q12.sf100/explain.txt @@ -41,92 +41,92 @@ Condition : isnotnull(ws_item_sk#1) (4) Exchange Input [3]: [ws_item_sk#1, ws_ext_sales_price#2, ws_sold_date_sk#3] -Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#5] +Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [3]: [ws_item_sk#1, ws_ext_sales_price#2, ws_sold_date_sk#3] Arguments: [ws_item_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.item -Output [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Output [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [In(i_category, [Books ,Home ,Sports ]), IsNotNull(i_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (8) Filter [codegen id : 3] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Condition : (i_category#11 IN (Sports ,Books ,Home ) AND isnotnull(i_item_sk#6)) +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Condition : (i_category#10 IN (Sports ,Books ,Home ) AND isnotnull(i_item_sk#5)) (9) Exchange -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Arguments: hashpartitioning(i_item_sk#6, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Arguments: hashpartitioning(i_item_sk#5, 5), ENSURE_REQUIREMENTS, [plan_id=2] (10) Sort [codegen id : 4] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Arguments: [i_item_sk#6 ASC NULLS FIRST], false, 0 +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Arguments: [i_item_sk#5 ASC NULLS FIRST], false, 0 (11) SortMergeJoin [codegen id : 6] Left keys [1]: [ws_item_sk#1] -Right keys [1]: [i_item_sk#6] +Right keys [1]: [i_item_sk#5] Join condition: None (12) Project [codegen id : 6] -Output [7]: [ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Input [9]: [ws_item_sk#1, ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Output [7]: [ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Input [9]: [ws_item_sk#1, ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (13) ReusedExchange [Reuses operator id: 28] -Output [1]: [d_date_sk#13] +Output [1]: [d_date_sk#11] (14) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ws_sold_date_sk#3] -Right keys [1]: [d_date_sk#13] +Right keys [1]: [d_date_sk#11] Join condition: None (15) Project [codegen id : 6] -Output [6]: [ws_ext_sales_price#2, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Input [8]: [ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11, d_date_sk#13] +Output [6]: [ws_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Input [8]: [ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#11] (16) HashAggregate [codegen id : 6] -Input [6]: [ws_ext_sales_price#2, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Keys [5]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9] +Input [6]: [ws_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#14] -Results [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] +Aggregate Attributes [1]: [sum#12] +Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] (17) Exchange -Input [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] -Arguments: hashpartitioning(i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 7] -Input [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] -Keys [5]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#2))#17] -Results [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#17,17,2) AS itemrevenue#18, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#17,17,2) AS _w0#19, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#17,17,2) AS _w1#20, i_item_id#7] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#2))#14] +Results [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#14,17,2) AS itemrevenue#15, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#14,17,2) AS _w0#16, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#14,17,2) AS _w1#17, i_item_id#6] (19) Exchange -Input [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, i_item_id#7] -Arguments: hashpartitioning(i_class#10, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=4] (20) Sort [codegen id : 8] -Input [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, i_item_id#7] -Arguments: [i_class#10 ASC NULLS FIRST], false, 0 +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: [i_class#9 ASC NULLS FIRST], false, 0 (21) Window -Input [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, i_item_id#7] -Arguments: [sum(_w1#20) windowspecdefinition(i_class#10, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#22], [i_class#10] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: [sum(_w1#17) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#9] (22) Project [codegen id : 9] -Output [7]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#19) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#22)), DecimalType(38,17)) AS revenueratio#23, i_item_id#7] -Input [9]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, i_item_id#7, _we0#22] +Output [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#16) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#18)), DecimalType(38,17)) AS revenueratio#19, i_item_id#6] +Input [9]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6, _we0#18] (23) TakeOrderedAndProject -Input [7]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, revenueratio#23, i_item_id#7] -Arguments: 100, [i_category#11 ASC NULLS FIRST, i_class#10 ASC NULLS FIRST, i_item_id#7 ASC NULLS FIRST, i_item_desc#8 ASC NULLS FIRST, revenueratio#23 ASC NULLS FIRST], [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, revenueratio#23] +Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19, i_item_id#6] +Arguments: 100, [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] ===== Subqueries ===== @@ -139,25 +139,25 @@ BroadcastExchange (28) (24) Scan parquet default.date_dim -Output [2]: [d_date_sk#13, d_date#24] +Output [2]: [d_date_sk#11, d_date#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-22), LessThanOrEqual(d_date,1999-03-24), IsNotNull(d_date_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#13, d_date#24] +Input [2]: [d_date_sk#11, d_date#20] (26) Filter [codegen id : 1] -Input [2]: [d_date_sk#13, d_date#24] -Condition : (((isnotnull(d_date#24) AND (d_date#24 >= 1999-02-22)) AND (d_date#24 <= 1999-03-24)) AND isnotnull(d_date_sk#13)) +Input [2]: [d_date_sk#11, d_date#20] +Condition : (((isnotnull(d_date#20) AND (d_date#20 >= 1999-02-22)) AND (d_date#20 <= 1999-03-24)) AND isnotnull(d_date_sk#11)) (27) Project [codegen id : 1] -Output [1]: [d_date_sk#13] -Input [2]: [d_date_sk#13, d_date#24] +Output [1]: [d_date_sk#11] +Input [2]: [d_date_sk#11, d_date#20] (28) BroadcastExchange -Input [1]: [d_date_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [d_date_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q12/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q12/explain.txt index 0b4dfea762918..a82f017df7c11 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q12/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q12/explain.txt @@ -52,7 +52,7 @@ Condition : (i_category#10 IN (Sports (7) BroadcastExchange Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ws_item_sk#1] @@ -64,54 +64,54 @@ Output [7]: [ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_id#6, i_item_desc#7 Input [9]: [ws_item_sk#1, ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (10) ReusedExchange [Reuses operator id: 25] -Output [1]: [d_date_sk#12] +Output [1]: [d_date_sk#11] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ws_sold_date_sk#3] -Right keys [1]: [d_date_sk#12] +Right keys [1]: [d_date_sk#11] Join condition: None (12) Project [codegen id : 3] Output [6]: [ws_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] -Input [8]: [ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#12] +Input [8]: [ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#11] (13) HashAggregate [codegen id : 3] Input [6]: [ws_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#13] -Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] +Aggregate Attributes [1]: [sum#12] +Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] (14) Exchange -Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] -Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 4] -Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#2))#16] -Results [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#16,17,2) AS itemrevenue#17, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#16,17,2) AS _w0#18, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#16,17,2) AS _w1#19, i_item_id#6] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#2))#14] +Results [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#14,17,2) AS itemrevenue#15, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#14,17,2) AS _w0#16, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#14,17,2) AS _w1#17, i_item_id#6] (16) Exchange -Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6] -Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (17) Sort [codegen id : 5] -Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] Arguments: [i_class#9 ASC NULLS FIRST], false, 0 (18) Window -Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6] -Arguments: [sum(_w1#19) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#21], [i_class#9] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: [sum(_w1#17) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#9] (19) Project [codegen id : 6] -Output [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#18) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#21)), DecimalType(38,17)) AS revenueratio#22, i_item_id#6] -Input [9]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6, _we0#21] +Output [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#16) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#18)), DecimalType(38,17)) AS revenueratio#19, i_item_id#6] +Input [9]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6, _we0#18] (20) TakeOrderedAndProject -Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22, i_item_id#6] -Arguments: 100, [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#22 ASC NULLS FIRST], [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22] +Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19, i_item_id#6] +Arguments: 100, [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] ===== Subqueries ===== @@ -124,25 +124,25 @@ BroadcastExchange (25) (21) Scan parquet default.date_dim -Output [2]: [d_date_sk#12, d_date#23] +Output [2]: [d_date_sk#11, d_date#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-22), LessThanOrEqual(d_date,1999-03-24), IsNotNull(d_date_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#12, d_date#23] +Input [2]: [d_date_sk#11, d_date#20] (23) Filter [codegen id : 1] -Input [2]: [d_date_sk#12, d_date#23] -Condition : (((isnotnull(d_date#23) AND (d_date#23 >= 1999-02-22)) AND (d_date#23 <= 1999-03-24)) AND isnotnull(d_date_sk#12)) +Input [2]: [d_date_sk#11, d_date#20] +Condition : (((isnotnull(d_date#20) AND (d_date#20 >= 1999-02-22)) AND (d_date#20 <= 1999-03-24)) AND isnotnull(d_date_sk#11)) (24) Project [codegen id : 1] -Output [1]: [d_date_sk#12] -Input [2]: [d_date_sk#12, d_date#23] +Output [1]: [d_date_sk#11] +Input [2]: [d_date_sk#11, d_date#20] (25) BroadcastExchange -Input [1]: [d_date_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#24] +Input [1]: [d_date_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q13.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q13.sf100/explain.txt index 9d6b17e613ef1..8c4cdad53f666 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q13.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q13.sf100/explain.txt @@ -66,7 +66,7 @@ Condition : (isnotnull(cd_demo_sk#12) AND ((((cd_marital_status#13 = M) AND (cd_ (7) BroadcastExchange Input [3]: [cd_demo_sk#12, cd_marital_status#13, cd_education_status#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_cdemo_sk#1] @@ -78,119 +78,119 @@ Output [11]: [ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_quantity#5, ss_sale Input [13]: [ss_cdemo_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9, ss_sold_date_sk#10, cd_demo_sk#12, cd_marital_status#13, cd_education_status#14] (10) Scan parquet default.household_demographics -Output [2]: [hd_demo_sk#16, hd_dep_count#17] +Output [2]: [hd_demo_sk#15, hd_dep_count#16] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_demo_sk), Or(EqualTo(hd_dep_count,3),EqualTo(hd_dep_count,1))] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [2]: [hd_demo_sk#16, hd_dep_count#17] +Input [2]: [hd_demo_sk#15, hd_dep_count#16] (12) Filter [codegen id : 2] -Input [2]: [hd_demo_sk#16, hd_dep_count#17] -Condition : (isnotnull(hd_demo_sk#16) AND ((hd_dep_count#17 = 3) OR (hd_dep_count#17 = 1))) +Input [2]: [hd_demo_sk#15, hd_dep_count#16] +Condition : (isnotnull(hd_demo_sk#15) AND ((hd_dep_count#16 = 3) OR (hd_dep_count#16 = 1))) (13) BroadcastExchange -Input [2]: [hd_demo_sk#16, hd_dep_count#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#18] +Input [2]: [hd_demo_sk#15, hd_dep_count#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#16] -Join condition: (((((((cd_marital_status#13 = M) AND (cd_education_status#14 = Advanced Degree )) AND (ss_sales_price#6 >= 100.00)) AND (ss_sales_price#6 <= 150.00)) AND (hd_dep_count#17 = 3)) OR (((((cd_marital_status#13 = S) AND (cd_education_status#14 = College )) AND (ss_sales_price#6 >= 50.00)) AND (ss_sales_price#6 <= 100.00)) AND (hd_dep_count#17 = 1))) OR (((((cd_marital_status#13 = W) AND (cd_education_status#14 = 2 yr Degree )) AND (ss_sales_price#6 >= 150.00)) AND (ss_sales_price#6 <= 200.00)) AND (hd_dep_count#17 = 1))) +Right keys [1]: [hd_demo_sk#15] +Join condition: (((((((cd_marital_status#13 = M) AND (cd_education_status#14 = Advanced Degree )) AND (ss_sales_price#6 >= 100.00)) AND (ss_sales_price#6 <= 150.00)) AND (hd_dep_count#16 = 3)) OR (((((cd_marital_status#13 = S) AND (cd_education_status#14 = College )) AND (ss_sales_price#6 >= 50.00)) AND (ss_sales_price#6 <= 100.00)) AND (hd_dep_count#16 = 1))) OR (((((cd_marital_status#13 = W) AND (cd_education_status#14 = 2 yr Degree )) AND (ss_sales_price#6 >= 150.00)) AND (ss_sales_price#6 <= 200.00)) AND (hd_dep_count#16 = 1))) (15) Project [codegen id : 6] Output [7]: [ss_addr_sk#3, ss_store_sk#4, ss_quantity#5, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9, ss_sold_date_sk#10] -Input [13]: [ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9, ss_sold_date_sk#10, cd_marital_status#13, cd_education_status#14, hd_demo_sk#16, hd_dep_count#17] +Input [13]: [ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9, ss_sold_date_sk#10, cd_marital_status#13, cd_education_status#14, hd_demo_sk#15, hd_dep_count#16] (16) ReusedExchange [Reuses operator id: 39] -Output [1]: [d_date_sk#19] +Output [1]: [d_date_sk#17] (17) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_sold_date_sk#10] -Right keys [1]: [d_date_sk#19] +Right keys [1]: [d_date_sk#17] Join condition: None (18) Project [codegen id : 6] Output [6]: [ss_addr_sk#3, ss_store_sk#4, ss_quantity#5, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9] -Input [8]: [ss_addr_sk#3, ss_store_sk#4, ss_quantity#5, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9, ss_sold_date_sk#10, d_date_sk#19] +Input [8]: [ss_addr_sk#3, ss_store_sk#4, ss_quantity#5, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9, ss_sold_date_sk#10, d_date_sk#17] (19) Scan parquet default.store -Output [1]: [s_store_sk#20] +Output [1]: [s_store_sk#18] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 4] -Input [1]: [s_store_sk#20] +Input [1]: [s_store_sk#18] (21) Filter [codegen id : 4] -Input [1]: [s_store_sk#20] -Condition : isnotnull(s_store_sk#20) +Input [1]: [s_store_sk#18] +Condition : isnotnull(s_store_sk#18) (22) BroadcastExchange -Input [1]: [s_store_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21] +Input [1]: [s_store_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (23) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_store_sk#4] -Right keys [1]: [s_store_sk#20] +Right keys [1]: [s_store_sk#18] Join condition: None (24) Project [codegen id : 6] Output [5]: [ss_addr_sk#3, ss_quantity#5, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9] -Input [7]: [ss_addr_sk#3, ss_store_sk#4, ss_quantity#5, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9, s_store_sk#20] +Input [7]: [ss_addr_sk#3, ss_store_sk#4, ss_quantity#5, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9, s_store_sk#18] (25) Scan parquet default.customer_address -Output [3]: [ca_address_sk#22, ca_state#23, ca_country#24] +Output [3]: [ca_address_sk#19, ca_state#20, ca_country#21] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), EqualTo(ca_country,United States), IsNotNull(ca_address_sk), Or(Or(In(ca_state, [OH,TX]),In(ca_state, [KY,NM,OR])),In(ca_state, [MS,TX,VA]))] ReadSchema: struct (26) ColumnarToRow [codegen id : 5] -Input [3]: [ca_address_sk#22, ca_state#23, ca_country#24] +Input [3]: [ca_address_sk#19, ca_state#20, ca_country#21] (27) Filter [codegen id : 5] -Input [3]: [ca_address_sk#22, ca_state#23, ca_country#24] -Condition : (((isnotnull(ca_country#24) AND (ca_country#24 = United States)) AND isnotnull(ca_address_sk#22)) AND ((ca_state#23 IN (TX,OH) OR ca_state#23 IN (OR,NM,KY)) OR ca_state#23 IN (VA,TX,MS))) +Input [3]: [ca_address_sk#19, ca_state#20, ca_country#21] +Condition : (((isnotnull(ca_country#21) AND (ca_country#21 = United States)) AND isnotnull(ca_address_sk#19)) AND ((ca_state#20 IN (TX,OH) OR ca_state#20 IN (OR,NM,KY)) OR ca_state#20 IN (VA,TX,MS))) (28) Project [codegen id : 5] -Output [2]: [ca_address_sk#22, ca_state#23] -Input [3]: [ca_address_sk#22, ca_state#23, ca_country#24] +Output [2]: [ca_address_sk#19, ca_state#20] +Input [3]: [ca_address_sk#19, ca_state#20, ca_country#21] (29) BroadcastExchange -Input [2]: [ca_address_sk#22, ca_state#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [2]: [ca_address_sk#19, ca_state#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (30) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_addr_sk#3] -Right keys [1]: [ca_address_sk#22] -Join condition: ((((ca_state#23 IN (TX,OH) AND (ss_net_profit#9 >= 100.00)) AND (ss_net_profit#9 <= 200.00)) OR ((ca_state#23 IN (OR,NM,KY) AND (ss_net_profit#9 >= 150.00)) AND (ss_net_profit#9 <= 300.00))) OR ((ca_state#23 IN (VA,TX,MS) AND (ss_net_profit#9 >= 50.00)) AND (ss_net_profit#9 <= 250.00))) +Right keys [1]: [ca_address_sk#19] +Join condition: ((((ca_state#20 IN (TX,OH) AND (ss_net_profit#9 >= 100.00)) AND (ss_net_profit#9 <= 200.00)) OR ((ca_state#20 IN (OR,NM,KY) AND (ss_net_profit#9 >= 150.00)) AND (ss_net_profit#9 <= 300.00))) OR ((ca_state#20 IN (VA,TX,MS) AND (ss_net_profit#9 >= 50.00)) AND (ss_net_profit#9 <= 250.00))) (31) Project [codegen id : 6] Output [3]: [ss_quantity#5, ss_ext_sales_price#7, ss_ext_wholesale_cost#8] -Input [7]: [ss_addr_sk#3, ss_quantity#5, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9, ca_address_sk#22, ca_state#23] +Input [7]: [ss_addr_sk#3, ss_quantity#5, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9, ca_address_sk#19, ca_state#20] (32) HashAggregate [codegen id : 6] Input [3]: [ss_quantity#5, ss_ext_sales_price#7, ss_ext_wholesale_cost#8] Keys: [] Functions [4]: [partial_avg(ss_quantity#5), partial_avg(UnscaledValue(ss_ext_sales_price#7)), partial_avg(UnscaledValue(ss_ext_wholesale_cost#8)), partial_sum(UnscaledValue(ss_ext_wholesale_cost#8))] -Aggregate Attributes [7]: [sum#26, count#27, sum#28, count#29, sum#30, count#31, sum#32] -Results [7]: [sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39] +Aggregate Attributes [7]: [sum#22, count#23, sum#24, count#25, sum#26, count#27, sum#28] +Results [7]: [sum#29, count#30, sum#31, count#32, sum#33, count#34, sum#35] (33) Exchange -Input [7]: [sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#40] +Input [7]: [sum#29, count#30, sum#31, count#32, sum#33, count#34, sum#35] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5] (34) HashAggregate [codegen id : 7] -Input [7]: [sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39] +Input [7]: [sum#29, count#30, sum#31, count#32, sum#33, count#34, sum#35] Keys: [] Functions [4]: [avg(ss_quantity#5), avg(UnscaledValue(ss_ext_sales_price#7)), avg(UnscaledValue(ss_ext_wholesale_cost#8)), sum(UnscaledValue(ss_ext_wholesale_cost#8))] -Aggregate Attributes [4]: [avg(ss_quantity#5)#41, avg(UnscaledValue(ss_ext_sales_price#7))#42, avg(UnscaledValue(ss_ext_wholesale_cost#8))#43, sum(UnscaledValue(ss_ext_wholesale_cost#8))#44] -Results [4]: [avg(ss_quantity#5)#41 AS avg(ss_quantity)#45, cast((avg(UnscaledValue(ss_ext_sales_price#7))#42 / 100.0) as decimal(11,6)) AS avg(ss_ext_sales_price)#46, cast((avg(UnscaledValue(ss_ext_wholesale_cost#8))#43 / 100.0) as decimal(11,6)) AS avg(ss_ext_wholesale_cost)#47, MakeDecimal(sum(UnscaledValue(ss_ext_wholesale_cost#8))#44,17,2) AS sum(ss_ext_wholesale_cost)#48] +Aggregate Attributes [4]: [avg(ss_quantity#5)#36, avg(UnscaledValue(ss_ext_sales_price#7))#37, avg(UnscaledValue(ss_ext_wholesale_cost#8))#38, sum(UnscaledValue(ss_ext_wholesale_cost#8))#39] +Results [4]: [avg(ss_quantity#5)#36 AS avg(ss_quantity)#40, cast((avg(UnscaledValue(ss_ext_sales_price#7))#37 / 100.0) as decimal(11,6)) AS avg(ss_ext_sales_price)#41, cast((avg(UnscaledValue(ss_ext_wholesale_cost#8))#38 / 100.0) as decimal(11,6)) AS avg(ss_ext_wholesale_cost)#42, MakeDecimal(sum(UnscaledValue(ss_ext_wholesale_cost#8))#39,17,2) AS sum(ss_ext_wholesale_cost)#43] ===== Subqueries ===== @@ -203,25 +203,25 @@ BroadcastExchange (39) (35) Scan parquet default.date_dim -Output [2]: [d_date_sk#19, d_year#49] +Output [2]: [d_date_sk#17, d_year#44] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (36) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#19, d_year#49] +Input [2]: [d_date_sk#17, d_year#44] (37) Filter [codegen id : 1] -Input [2]: [d_date_sk#19, d_year#49] -Condition : ((isnotnull(d_year#49) AND (d_year#49 = 2001)) AND isnotnull(d_date_sk#19)) +Input [2]: [d_date_sk#17, d_year#44] +Condition : ((isnotnull(d_year#44) AND (d_year#44 = 2001)) AND isnotnull(d_date_sk#17)) (38) Project [codegen id : 1] -Output [1]: [d_date_sk#19] -Input [2]: [d_date_sk#19, d_year#49] +Output [1]: [d_date_sk#17] +Input [2]: [d_date_sk#17, d_year#44] (39) BroadcastExchange -Input [1]: [d_date_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#50] +Input [1]: [d_date_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q13/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q13/explain.txt index 59e8cf7c4d063..2fe09e98424a7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q13/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q13/explain.txt @@ -66,7 +66,7 @@ Condition : isnotnull(s_store_sk#12) (7) BroadcastExchange Input [1]: [s_store_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_store_sk#4] @@ -78,119 +78,119 @@ Output [9]: [ss_cdemo_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_quantity#5, ss_sales Input [11]: [ss_cdemo_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9, ss_sold_date_sk#10, s_store_sk#12] (10) Scan parquet default.customer_address -Output [3]: [ca_address_sk#14, ca_state#15, ca_country#16] +Output [3]: [ca_address_sk#13, ca_state#14, ca_country#15] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), EqualTo(ca_country,United States), IsNotNull(ca_address_sk), Or(Or(In(ca_state, [OH,TX]),In(ca_state, [KY,NM,OR])),In(ca_state, [MS,TX,VA]))] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [3]: [ca_address_sk#14, ca_state#15, ca_country#16] +Input [3]: [ca_address_sk#13, ca_state#14, ca_country#15] (12) Filter [codegen id : 2] -Input [3]: [ca_address_sk#14, ca_state#15, ca_country#16] -Condition : (((isnotnull(ca_country#16) AND (ca_country#16 = United States)) AND isnotnull(ca_address_sk#14)) AND ((ca_state#15 IN (TX,OH) OR ca_state#15 IN (OR,NM,KY)) OR ca_state#15 IN (VA,TX,MS))) +Input [3]: [ca_address_sk#13, ca_state#14, ca_country#15] +Condition : (((isnotnull(ca_country#15) AND (ca_country#15 = United States)) AND isnotnull(ca_address_sk#13)) AND ((ca_state#14 IN (TX,OH) OR ca_state#14 IN (OR,NM,KY)) OR ca_state#14 IN (VA,TX,MS))) (13) Project [codegen id : 2] -Output [2]: [ca_address_sk#14, ca_state#15] -Input [3]: [ca_address_sk#14, ca_state#15, ca_country#16] +Output [2]: [ca_address_sk#13, ca_state#14] +Input [3]: [ca_address_sk#13, ca_state#14, ca_country#15] (14) BroadcastExchange -Input [2]: [ca_address_sk#14, ca_state#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Input [2]: [ca_address_sk#13, ca_state#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_addr_sk#3] -Right keys [1]: [ca_address_sk#14] -Join condition: ((((ca_state#15 IN (TX,OH) AND (ss_net_profit#9 >= 100.00)) AND (ss_net_profit#9 <= 200.00)) OR ((ca_state#15 IN (OR,NM,KY) AND (ss_net_profit#9 >= 150.00)) AND (ss_net_profit#9 <= 300.00))) OR ((ca_state#15 IN (VA,TX,MS) AND (ss_net_profit#9 >= 50.00)) AND (ss_net_profit#9 <= 250.00))) +Right keys [1]: [ca_address_sk#13] +Join condition: ((((ca_state#14 IN (TX,OH) AND (ss_net_profit#9 >= 100.00)) AND (ss_net_profit#9 <= 200.00)) OR ((ca_state#14 IN (OR,NM,KY) AND (ss_net_profit#9 >= 150.00)) AND (ss_net_profit#9 <= 300.00))) OR ((ca_state#14 IN (VA,TX,MS) AND (ss_net_profit#9 >= 50.00)) AND (ss_net_profit#9 <= 250.00))) (16) Project [codegen id : 6] Output [7]: [ss_cdemo_sk#1, ss_hdemo_sk#2, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_sold_date_sk#10] -Input [11]: [ss_cdemo_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9, ss_sold_date_sk#10, ca_address_sk#14, ca_state#15] +Input [11]: [ss_cdemo_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_net_profit#9, ss_sold_date_sk#10, ca_address_sk#13, ca_state#14] (17) ReusedExchange [Reuses operator id: 39] -Output [1]: [d_date_sk#18] +Output [1]: [d_date_sk#16] (18) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_sold_date_sk#10] -Right keys [1]: [d_date_sk#18] +Right keys [1]: [d_date_sk#16] Join condition: None (19) Project [codegen id : 6] Output [6]: [ss_cdemo_sk#1, ss_hdemo_sk#2, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8] -Input [8]: [ss_cdemo_sk#1, ss_hdemo_sk#2, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_sold_date_sk#10, d_date_sk#18] +Input [8]: [ss_cdemo_sk#1, ss_hdemo_sk#2, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, ss_sold_date_sk#10, d_date_sk#16] (20) Scan parquet default.customer_demographics -Output [3]: [cd_demo_sk#19, cd_marital_status#20, cd_education_status#21] +Output [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), Or(Or(And(EqualTo(cd_marital_status,M),EqualTo(cd_education_status,Advanced Degree )),And(EqualTo(cd_marital_status,S),EqualTo(cd_education_status,College ))),And(EqualTo(cd_marital_status,W),EqualTo(cd_education_status,2 yr Degree )))] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [3]: [cd_demo_sk#19, cd_marital_status#20, cd_education_status#21] +Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19] (22) Filter [codegen id : 4] -Input [3]: [cd_demo_sk#19, cd_marital_status#20, cd_education_status#21] -Condition : (isnotnull(cd_demo_sk#19) AND ((((cd_marital_status#20 = M) AND (cd_education_status#21 = Advanced Degree )) OR ((cd_marital_status#20 = S) AND (cd_education_status#21 = College ))) OR ((cd_marital_status#20 = W) AND (cd_education_status#21 = 2 yr Degree )))) +Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19] +Condition : (isnotnull(cd_demo_sk#17) AND ((((cd_marital_status#18 = M) AND (cd_education_status#19 = Advanced Degree )) OR ((cd_marital_status#18 = S) AND (cd_education_status#19 = College ))) OR ((cd_marital_status#18 = W) AND (cd_education_status#19 = 2 yr Degree )))) (23) BroadcastExchange -Input [3]: [cd_demo_sk#19, cd_marital_status#20, cd_education_status#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#22] +Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_cdemo_sk#1] -Right keys [1]: [cd_demo_sk#19] -Join condition: ((((((cd_marital_status#20 = M) AND (cd_education_status#21 = Advanced Degree )) AND (ss_sales_price#6 >= 100.00)) AND (ss_sales_price#6 <= 150.00)) OR ((((cd_marital_status#20 = S) AND (cd_education_status#21 = College )) AND (ss_sales_price#6 >= 50.00)) AND (ss_sales_price#6 <= 100.00))) OR ((((cd_marital_status#20 = W) AND (cd_education_status#21 = 2 yr Degree )) AND (ss_sales_price#6 >= 150.00)) AND (ss_sales_price#6 <= 200.00))) +Right keys [1]: [cd_demo_sk#17] +Join condition: ((((((cd_marital_status#18 = M) AND (cd_education_status#19 = Advanced Degree )) AND (ss_sales_price#6 >= 100.00)) AND (ss_sales_price#6 <= 150.00)) OR ((((cd_marital_status#18 = S) AND (cd_education_status#19 = College )) AND (ss_sales_price#6 >= 50.00)) AND (ss_sales_price#6 <= 100.00))) OR ((((cd_marital_status#18 = W) AND (cd_education_status#19 = 2 yr Degree )) AND (ss_sales_price#6 >= 150.00)) AND (ss_sales_price#6 <= 200.00))) (25) Project [codegen id : 6] -Output [7]: [ss_hdemo_sk#2, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, cd_marital_status#20, cd_education_status#21] -Input [9]: [ss_cdemo_sk#1, ss_hdemo_sk#2, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, cd_demo_sk#19, cd_marital_status#20, cd_education_status#21] +Output [7]: [ss_hdemo_sk#2, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, cd_marital_status#18, cd_education_status#19] +Input [9]: [ss_cdemo_sk#1, ss_hdemo_sk#2, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, cd_demo_sk#17, cd_marital_status#18, cd_education_status#19] (26) Scan parquet default.household_demographics -Output [2]: [hd_demo_sk#23, hd_dep_count#24] +Output [2]: [hd_demo_sk#20, hd_dep_count#21] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_demo_sk), Or(EqualTo(hd_dep_count,3),EqualTo(hd_dep_count,1))] ReadSchema: struct (27) ColumnarToRow [codegen id : 5] -Input [2]: [hd_demo_sk#23, hd_dep_count#24] +Input [2]: [hd_demo_sk#20, hd_dep_count#21] (28) Filter [codegen id : 5] -Input [2]: [hd_demo_sk#23, hd_dep_count#24] -Condition : (isnotnull(hd_demo_sk#23) AND ((hd_dep_count#24 = 3) OR (hd_dep_count#24 = 1))) +Input [2]: [hd_demo_sk#20, hd_dep_count#21] +Condition : (isnotnull(hd_demo_sk#20) AND ((hd_dep_count#21 = 3) OR (hd_dep_count#21 = 1))) (29) BroadcastExchange -Input [2]: [hd_demo_sk#23, hd_dep_count#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#25] +Input [2]: [hd_demo_sk#20, hd_dep_count#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (30) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#23] -Join condition: (((((((cd_marital_status#20 = M) AND (cd_education_status#21 = Advanced Degree )) AND (ss_sales_price#6 >= 100.00)) AND (ss_sales_price#6 <= 150.00)) AND (hd_dep_count#24 = 3)) OR (((((cd_marital_status#20 = S) AND (cd_education_status#21 = College )) AND (ss_sales_price#6 >= 50.00)) AND (ss_sales_price#6 <= 100.00)) AND (hd_dep_count#24 = 1))) OR (((((cd_marital_status#20 = W) AND (cd_education_status#21 = 2 yr Degree )) AND (ss_sales_price#6 >= 150.00)) AND (ss_sales_price#6 <= 200.00)) AND (hd_dep_count#24 = 1))) +Right keys [1]: [hd_demo_sk#20] +Join condition: (((((((cd_marital_status#18 = M) AND (cd_education_status#19 = Advanced Degree )) AND (ss_sales_price#6 >= 100.00)) AND (ss_sales_price#6 <= 150.00)) AND (hd_dep_count#21 = 3)) OR (((((cd_marital_status#18 = S) AND (cd_education_status#19 = College )) AND (ss_sales_price#6 >= 50.00)) AND (ss_sales_price#6 <= 100.00)) AND (hd_dep_count#21 = 1))) OR (((((cd_marital_status#18 = W) AND (cd_education_status#19 = 2 yr Degree )) AND (ss_sales_price#6 >= 150.00)) AND (ss_sales_price#6 <= 200.00)) AND (hd_dep_count#21 = 1))) (31) Project [codegen id : 6] Output [3]: [ss_quantity#5, ss_ext_sales_price#7, ss_ext_wholesale_cost#8] -Input [9]: [ss_hdemo_sk#2, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, cd_marital_status#20, cd_education_status#21, hd_demo_sk#23, hd_dep_count#24] +Input [9]: [ss_hdemo_sk#2, ss_quantity#5, ss_sales_price#6, ss_ext_sales_price#7, ss_ext_wholesale_cost#8, cd_marital_status#18, cd_education_status#19, hd_demo_sk#20, hd_dep_count#21] (32) HashAggregate [codegen id : 6] Input [3]: [ss_quantity#5, ss_ext_sales_price#7, ss_ext_wholesale_cost#8] Keys: [] Functions [4]: [partial_avg(ss_quantity#5), partial_avg(UnscaledValue(ss_ext_sales_price#7)), partial_avg(UnscaledValue(ss_ext_wholesale_cost#8)), partial_sum(UnscaledValue(ss_ext_wholesale_cost#8))] -Aggregate Attributes [7]: [sum#26, count#27, sum#28, count#29, sum#30, count#31, sum#32] -Results [7]: [sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39] +Aggregate Attributes [7]: [sum#22, count#23, sum#24, count#25, sum#26, count#27, sum#28] +Results [7]: [sum#29, count#30, sum#31, count#32, sum#33, count#34, sum#35] (33) Exchange -Input [7]: [sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#40] +Input [7]: [sum#29, count#30, sum#31, count#32, sum#33, count#34, sum#35] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5] (34) HashAggregate [codegen id : 7] -Input [7]: [sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39] +Input [7]: [sum#29, count#30, sum#31, count#32, sum#33, count#34, sum#35] Keys: [] Functions [4]: [avg(ss_quantity#5), avg(UnscaledValue(ss_ext_sales_price#7)), avg(UnscaledValue(ss_ext_wholesale_cost#8)), sum(UnscaledValue(ss_ext_wholesale_cost#8))] -Aggregate Attributes [4]: [avg(ss_quantity#5)#41, avg(UnscaledValue(ss_ext_sales_price#7))#42, avg(UnscaledValue(ss_ext_wholesale_cost#8))#43, sum(UnscaledValue(ss_ext_wholesale_cost#8))#44] -Results [4]: [avg(ss_quantity#5)#41 AS avg(ss_quantity)#45, cast((avg(UnscaledValue(ss_ext_sales_price#7))#42 / 100.0) as decimal(11,6)) AS avg(ss_ext_sales_price)#46, cast((avg(UnscaledValue(ss_ext_wholesale_cost#8))#43 / 100.0) as decimal(11,6)) AS avg(ss_ext_wholesale_cost)#47, MakeDecimal(sum(UnscaledValue(ss_ext_wholesale_cost#8))#44,17,2) AS sum(ss_ext_wholesale_cost)#48] +Aggregate Attributes [4]: [avg(ss_quantity#5)#36, avg(UnscaledValue(ss_ext_sales_price#7))#37, avg(UnscaledValue(ss_ext_wholesale_cost#8))#38, sum(UnscaledValue(ss_ext_wholesale_cost#8))#39] +Results [4]: [avg(ss_quantity#5)#36 AS avg(ss_quantity)#40, cast((avg(UnscaledValue(ss_ext_sales_price#7))#37 / 100.0) as decimal(11,6)) AS avg(ss_ext_sales_price)#41, cast((avg(UnscaledValue(ss_ext_wholesale_cost#8))#38 / 100.0) as decimal(11,6)) AS avg(ss_ext_wholesale_cost)#42, MakeDecimal(sum(UnscaledValue(ss_ext_wholesale_cost#8))#39,17,2) AS sum(ss_ext_wholesale_cost)#43] ===== Subqueries ===== @@ -203,25 +203,25 @@ BroadcastExchange (39) (35) Scan parquet default.date_dim -Output [2]: [d_date_sk#18, d_year#49] +Output [2]: [d_date_sk#16, d_year#44] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (36) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#18, d_year#49] +Input [2]: [d_date_sk#16, d_year#44] (37) Filter [codegen id : 1] -Input [2]: [d_date_sk#18, d_year#49] -Condition : ((isnotnull(d_year#49) AND (d_year#49 = 2001)) AND isnotnull(d_date_sk#18)) +Input [2]: [d_date_sk#16, d_year#44] +Condition : ((isnotnull(d_year#44) AND (d_year#44 = 2001)) AND isnotnull(d_date_sk#16)) (38) Project [codegen id : 1] -Output [1]: [d_date_sk#18] -Input [2]: [d_date_sk#18, d_year#49] +Output [1]: [d_date_sk#16] +Input [2]: [d_date_sk#16, d_year#44] (39) BroadcastExchange -Input [1]: [d_date_sk#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#50] +Input [1]: [d_date_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a.sf100/explain.txt index 4105a94131dda..f5b3161c7e777 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a.sf100/explain.txt @@ -141,545 +141,545 @@ Condition : isnotnull(ss_item_sk#1) (4) Exchange Input [4]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [4]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.item -Output [4]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10] +Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)] ReadSchema: struct (7) ColumnarToRow [codegen id : 19] -Input [4]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10] +Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] (8) Filter [codegen id : 19] -Input [4]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10] -Condition : ((isnotnull(i_brand_id#8) AND isnotnull(i_class_id#9)) AND isnotnull(i_category_id#10)) +Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] +Condition : ((isnotnull(i_brand_id#7) AND isnotnull(i_class_id#8)) AND isnotnull(i_category_id#9)) (9) Scan parquet default.store_sales -Output [2]: [ss_item_sk#11, ss_sold_date_sk#12] +Output [2]: [ss_item_sk#10, ss_sold_date_sk#11] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#12), dynamicpruningexpression(ss_sold_date_sk#12 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ss_sold_date_sk#11), dynamicpruningexpression(ss_sold_date_sk#11 IN dynamicpruning#12)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (10) ColumnarToRow [codegen id : 11] -Input [2]: [ss_item_sk#11, ss_sold_date_sk#12] +Input [2]: [ss_item_sk#10, ss_sold_date_sk#11] (11) Filter [codegen id : 11] -Input [2]: [ss_item_sk#11, ss_sold_date_sk#12] -Condition : isnotnull(ss_item_sk#11) +Input [2]: [ss_item_sk#10, ss_sold_date_sk#11] +Condition : isnotnull(ss_item_sk#10) (12) ReusedExchange [Reuses operator id: 152] -Output [1]: [d_date_sk#14] +Output [1]: [d_date_sk#13] (13) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [ss_sold_date_sk#12] -Right keys [1]: [d_date_sk#14] +Left keys [1]: [ss_sold_date_sk#11] +Right keys [1]: [d_date_sk#13] Join condition: None (14) Project [codegen id : 11] -Output [1]: [ss_item_sk#11] -Input [3]: [ss_item_sk#11, ss_sold_date_sk#12, d_date_sk#14] +Output [1]: [ss_item_sk#10] +Input [3]: [ss_item_sk#10, ss_sold_date_sk#11, d_date_sk#13] (15) Scan parquet default.item -Output [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] +Output [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)] ReadSchema: struct (16) ColumnarToRow [codegen id : 4] -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] (17) Filter [codegen id : 4] -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Condition : (((isnotnull(i_item_sk#15) AND isnotnull(i_brand_id#16)) AND isnotnull(i_class_id#17)) AND isnotnull(i_category_id#18)) +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Condition : (((isnotnull(i_item_sk#14) AND isnotnull(i_brand_id#15)) AND isnotnull(i_class_id#16)) AND isnotnull(i_category_id#17)) (18) Exchange -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Arguments: hashpartitioning(coalesce(i_brand_id#16, 0), isnull(i_brand_id#16), coalesce(i_class_id#17, 0), isnull(i_class_id#17), coalesce(i_category_id#18, 0), isnull(i_category_id#18), 5), ENSURE_REQUIREMENTS, [id=#19] +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Arguments: hashpartitioning(coalesce(i_brand_id#15, 0), isnull(i_brand_id#15), coalesce(i_class_id#16, 0), isnull(i_class_id#16), coalesce(i_category_id#17, 0), isnull(i_category_id#17), 5), ENSURE_REQUIREMENTS, [plan_id=2] (19) Sort [codegen id : 5] -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Arguments: [coalesce(i_brand_id#16, 0) ASC NULLS FIRST, isnull(i_brand_id#16) ASC NULLS FIRST, coalesce(i_class_id#17, 0) ASC NULLS FIRST, isnull(i_class_id#17) ASC NULLS FIRST, coalesce(i_category_id#18, 0) ASC NULLS FIRST, isnull(i_category_id#18) ASC NULLS FIRST], false, 0 +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Arguments: [coalesce(i_brand_id#15, 0) ASC NULLS FIRST, isnull(i_brand_id#15) ASC NULLS FIRST, coalesce(i_class_id#16, 0) ASC NULLS FIRST, isnull(i_class_id#16) ASC NULLS FIRST, coalesce(i_category_id#17, 0) ASC NULLS FIRST, isnull(i_category_id#17) ASC NULLS FIRST], false, 0 (20) Scan parquet default.catalog_sales -Output [2]: [cs_item_sk#20, cs_sold_date_sk#21] +Output [2]: [cs_item_sk#18, cs_sold_date_sk#19] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#21), dynamicpruningexpression(cs_sold_date_sk#21 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(cs_sold_date_sk#19), dynamicpruningexpression(cs_sold_date_sk#19 IN dynamicpruning#12)] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 8] -Input [2]: [cs_item_sk#20, cs_sold_date_sk#21] +Input [2]: [cs_item_sk#18, cs_sold_date_sk#19] (22) Filter [codegen id : 8] -Input [2]: [cs_item_sk#20, cs_sold_date_sk#21] -Condition : isnotnull(cs_item_sk#20) +Input [2]: [cs_item_sk#18, cs_sold_date_sk#19] +Condition : isnotnull(cs_item_sk#18) (23) ReusedExchange [Reuses operator id: 152] -Output [1]: [d_date_sk#22] +Output [1]: [d_date_sk#20] (24) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_sold_date_sk#21] -Right keys [1]: [d_date_sk#22] +Left keys [1]: [cs_sold_date_sk#19] +Right keys [1]: [d_date_sk#20] Join condition: None (25) Project [codegen id : 8] -Output [1]: [cs_item_sk#20] -Input [3]: [cs_item_sk#20, cs_sold_date_sk#21, d_date_sk#22] +Output [1]: [cs_item_sk#18] +Input [3]: [cs_item_sk#18, cs_sold_date_sk#19, d_date_sk#20] (26) Scan parquet default.item -Output [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] +Output [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 7] -Input [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] +Input [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] (28) Filter [codegen id : 7] -Input [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] -Condition : isnotnull(i_item_sk#23) +Input [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] +Condition : isnotnull(i_item_sk#21) (29) BroadcastExchange -Input [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#27] +Input [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (30) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_item_sk#20] -Right keys [1]: [i_item_sk#23] +Left keys [1]: [cs_item_sk#18] +Right keys [1]: [i_item_sk#21] Join condition: None (31) Project [codegen id : 8] -Output [3]: [i_brand_id#24, i_class_id#25, i_category_id#26] -Input [5]: [cs_item_sk#20, i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] +Output [3]: [i_brand_id#22, i_class_id#23, i_category_id#24] +Input [5]: [cs_item_sk#18, i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] (32) Exchange -Input [3]: [i_brand_id#24, i_class_id#25, i_category_id#26] -Arguments: hashpartitioning(coalesce(i_brand_id#24, 0), isnull(i_brand_id#24), coalesce(i_class_id#25, 0), isnull(i_class_id#25), coalesce(i_category_id#26, 0), isnull(i_category_id#26), 5), ENSURE_REQUIREMENTS, [id=#28] +Input [3]: [i_brand_id#22, i_class_id#23, i_category_id#24] +Arguments: hashpartitioning(coalesce(i_brand_id#22, 0), isnull(i_brand_id#22), coalesce(i_class_id#23, 0), isnull(i_class_id#23), coalesce(i_category_id#24, 0), isnull(i_category_id#24), 5), ENSURE_REQUIREMENTS, [plan_id=4] (33) Sort [codegen id : 9] -Input [3]: [i_brand_id#24, i_class_id#25, i_category_id#26] -Arguments: [coalesce(i_brand_id#24, 0) ASC NULLS FIRST, isnull(i_brand_id#24) ASC NULLS FIRST, coalesce(i_class_id#25, 0) ASC NULLS FIRST, isnull(i_class_id#25) ASC NULLS FIRST, coalesce(i_category_id#26, 0) ASC NULLS FIRST, isnull(i_category_id#26) ASC NULLS FIRST], false, 0 +Input [3]: [i_brand_id#22, i_class_id#23, i_category_id#24] +Arguments: [coalesce(i_brand_id#22, 0) ASC NULLS FIRST, isnull(i_brand_id#22) ASC NULLS FIRST, coalesce(i_class_id#23, 0) ASC NULLS FIRST, isnull(i_class_id#23) ASC NULLS FIRST, coalesce(i_category_id#24, 0) ASC NULLS FIRST, isnull(i_category_id#24) ASC NULLS FIRST], false, 0 (34) SortMergeJoin [codegen id : 10] -Left keys [6]: [coalesce(i_brand_id#16, 0), isnull(i_brand_id#16), coalesce(i_class_id#17, 0), isnull(i_class_id#17), coalesce(i_category_id#18, 0), isnull(i_category_id#18)] -Right keys [6]: [coalesce(i_brand_id#24, 0), isnull(i_brand_id#24), coalesce(i_class_id#25, 0), isnull(i_class_id#25), coalesce(i_category_id#26, 0), isnull(i_category_id#26)] +Left keys [6]: [coalesce(i_brand_id#15, 0), isnull(i_brand_id#15), coalesce(i_class_id#16, 0), isnull(i_class_id#16), coalesce(i_category_id#17, 0), isnull(i_category_id#17)] +Right keys [6]: [coalesce(i_brand_id#22, 0), isnull(i_brand_id#22), coalesce(i_class_id#23, 0), isnull(i_class_id#23), coalesce(i_category_id#24, 0), isnull(i_category_id#24)] Join condition: None (35) BroadcastExchange -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#29] +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (36) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [ss_item_sk#11] -Right keys [1]: [i_item_sk#15] +Left keys [1]: [ss_item_sk#10] +Right keys [1]: [i_item_sk#14] Join condition: None (37) Project [codegen id : 11] -Output [3]: [i_brand_id#16 AS brand_id#30, i_class_id#17 AS class_id#31, i_category_id#18 AS category_id#32] -Input [5]: [ss_item_sk#11, i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] +Output [3]: [i_brand_id#15 AS brand_id#25, i_class_id#16 AS class_id#26, i_category_id#17 AS category_id#27] +Input [5]: [ss_item_sk#10, i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] (38) HashAggregate [codegen id : 11] -Input [3]: [brand_id#30, class_id#31, category_id#32] -Keys [3]: [brand_id#30, class_id#31, category_id#32] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#30, class_id#31, category_id#32] +Results [3]: [brand_id#25, class_id#26, category_id#27] (39) Exchange -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: hashpartitioning(brand_id#30, class_id#31, category_id#32, 5), ENSURE_REQUIREMENTS, [id=#33] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: hashpartitioning(brand_id#25, class_id#26, category_id#27, 5), ENSURE_REQUIREMENTS, [plan_id=6] (40) HashAggregate [codegen id : 12] -Input [3]: [brand_id#30, class_id#31, category_id#32] -Keys [3]: [brand_id#30, class_id#31, category_id#32] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#30, class_id#31, category_id#32] +Results [3]: [brand_id#25, class_id#26, category_id#27] (41) Exchange -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: hashpartitioning(coalesce(brand_id#30, 0), isnull(brand_id#30), coalesce(class_id#31, 0), isnull(class_id#31), coalesce(category_id#32, 0), isnull(category_id#32), 5), ENSURE_REQUIREMENTS, [id=#34] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: hashpartitioning(coalesce(brand_id#25, 0), isnull(brand_id#25), coalesce(class_id#26, 0), isnull(class_id#26), coalesce(category_id#27, 0), isnull(category_id#27), 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) Sort [codegen id : 13] -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: [coalesce(brand_id#30, 0) ASC NULLS FIRST, isnull(brand_id#30) ASC NULLS FIRST, coalesce(class_id#31, 0) ASC NULLS FIRST, isnull(class_id#31) ASC NULLS FIRST, coalesce(category_id#32, 0) ASC NULLS FIRST, isnull(category_id#32) ASC NULLS FIRST], false, 0 +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: [coalesce(brand_id#25, 0) ASC NULLS FIRST, isnull(brand_id#25) ASC NULLS FIRST, coalesce(class_id#26, 0) ASC NULLS FIRST, isnull(class_id#26) ASC NULLS FIRST, coalesce(category_id#27, 0) ASC NULLS FIRST, isnull(category_id#27) ASC NULLS FIRST], false, 0 (43) Scan parquet default.web_sales -Output [2]: [ws_item_sk#35, ws_sold_date_sk#36] +Output [2]: [ws_item_sk#28, ws_sold_date_sk#29] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#36), dynamicpruningexpression(ws_sold_date_sk#36 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ws_sold_date_sk#29), dynamicpruningexpression(ws_sold_date_sk#29 IN dynamicpruning#12)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 16] -Input [2]: [ws_item_sk#35, ws_sold_date_sk#36] +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] (45) Filter [codegen id : 16] -Input [2]: [ws_item_sk#35, ws_sold_date_sk#36] -Condition : isnotnull(ws_item_sk#35) +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] +Condition : isnotnull(ws_item_sk#28) (46) ReusedExchange [Reuses operator id: 152] -Output [1]: [d_date_sk#37] +Output [1]: [d_date_sk#30] (47) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [ws_sold_date_sk#36] -Right keys [1]: [d_date_sk#37] +Left keys [1]: [ws_sold_date_sk#29] +Right keys [1]: [d_date_sk#30] Join condition: None (48) Project [codegen id : 16] -Output [1]: [ws_item_sk#35] -Input [3]: [ws_item_sk#35, ws_sold_date_sk#36, d_date_sk#37] +Output [1]: [ws_item_sk#28] +Input [3]: [ws_item_sk#28, ws_sold_date_sk#29, d_date_sk#30] (49) ReusedExchange [Reuses operator id: 29] -Output [4]: [i_item_sk#38, i_brand_id#39, i_class_id#40, i_category_id#41] +Output [4]: [i_item_sk#31, i_brand_id#32, i_class_id#33, i_category_id#34] (50) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [ws_item_sk#35] -Right keys [1]: [i_item_sk#38] +Left keys [1]: [ws_item_sk#28] +Right keys [1]: [i_item_sk#31] Join condition: None (51) Project [codegen id : 16] -Output [3]: [i_brand_id#39, i_class_id#40, i_category_id#41] -Input [5]: [ws_item_sk#35, i_item_sk#38, i_brand_id#39, i_class_id#40, i_category_id#41] +Output [3]: [i_brand_id#32, i_class_id#33, i_category_id#34] +Input [5]: [ws_item_sk#28, i_item_sk#31, i_brand_id#32, i_class_id#33, i_category_id#34] (52) Exchange -Input [3]: [i_brand_id#39, i_class_id#40, i_category_id#41] -Arguments: hashpartitioning(coalesce(i_brand_id#39, 0), isnull(i_brand_id#39), coalesce(i_class_id#40, 0), isnull(i_class_id#40), coalesce(i_category_id#41, 0), isnull(i_category_id#41), 5), ENSURE_REQUIREMENTS, [id=#42] +Input [3]: [i_brand_id#32, i_class_id#33, i_category_id#34] +Arguments: hashpartitioning(coalesce(i_brand_id#32, 0), isnull(i_brand_id#32), coalesce(i_class_id#33, 0), isnull(i_class_id#33), coalesce(i_category_id#34, 0), isnull(i_category_id#34), 5), ENSURE_REQUIREMENTS, [plan_id=8] (53) Sort [codegen id : 17] -Input [3]: [i_brand_id#39, i_class_id#40, i_category_id#41] -Arguments: [coalesce(i_brand_id#39, 0) ASC NULLS FIRST, isnull(i_brand_id#39) ASC NULLS FIRST, coalesce(i_class_id#40, 0) ASC NULLS FIRST, isnull(i_class_id#40) ASC NULLS FIRST, coalesce(i_category_id#41, 0) ASC NULLS FIRST, isnull(i_category_id#41) ASC NULLS FIRST], false, 0 +Input [3]: [i_brand_id#32, i_class_id#33, i_category_id#34] +Arguments: [coalesce(i_brand_id#32, 0) ASC NULLS FIRST, isnull(i_brand_id#32) ASC NULLS FIRST, coalesce(i_class_id#33, 0) ASC NULLS FIRST, isnull(i_class_id#33) ASC NULLS FIRST, coalesce(i_category_id#34, 0) ASC NULLS FIRST, isnull(i_category_id#34) ASC NULLS FIRST], false, 0 (54) SortMergeJoin [codegen id : 18] -Left keys [6]: [coalesce(brand_id#30, 0), isnull(brand_id#30), coalesce(class_id#31, 0), isnull(class_id#31), coalesce(category_id#32, 0), isnull(category_id#32)] -Right keys [6]: [coalesce(i_brand_id#39, 0), isnull(i_brand_id#39), coalesce(i_class_id#40, 0), isnull(i_class_id#40), coalesce(i_category_id#41, 0), isnull(i_category_id#41)] +Left keys [6]: [coalesce(brand_id#25, 0), isnull(brand_id#25), coalesce(class_id#26, 0), isnull(class_id#26), coalesce(category_id#27, 0), isnull(category_id#27)] +Right keys [6]: [coalesce(i_brand_id#32, 0), isnull(i_brand_id#32), coalesce(i_class_id#33, 0), isnull(i_class_id#33), coalesce(i_category_id#34, 0), isnull(i_category_id#34)] Join condition: None (55) BroadcastExchange -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [id=#43] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [plan_id=9] (56) BroadcastHashJoin [codegen id : 19] -Left keys [3]: [i_brand_id#8, i_class_id#9, i_category_id#10] -Right keys [3]: [brand_id#30, class_id#31, category_id#32] +Left keys [3]: [i_brand_id#7, i_class_id#8, i_category_id#9] +Right keys [3]: [brand_id#25, class_id#26, category_id#27] Join condition: None (57) Project [codegen id : 19] -Output [1]: [i_item_sk#7 AS ss_item_sk#44] -Input [7]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, brand_id#30, class_id#31, category_id#32] +Output [1]: [i_item_sk#6 AS ss_item_sk#35] +Input [7]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9, brand_id#25, class_id#26, category_id#27] (58) Exchange -Input [1]: [ss_item_sk#44] -Arguments: hashpartitioning(ss_item_sk#44, 5), ENSURE_REQUIREMENTS, [id=#45] +Input [1]: [ss_item_sk#35] +Arguments: hashpartitioning(ss_item_sk#35, 5), ENSURE_REQUIREMENTS, [plan_id=10] (59) Sort [codegen id : 20] -Input [1]: [ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#35] +Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0 (60) SortMergeJoin [codegen id : 43] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [ss_item_sk#44] +Right keys [1]: [ss_item_sk#35] Join condition: None (61) ReusedExchange [Reuses operator id: 147] -Output [1]: [d_date_sk#46] +Output [1]: [d_date_sk#36] (62) BroadcastHashJoin [codegen id : 43] Left keys [1]: [ss_sold_date_sk#4] -Right keys [1]: [d_date_sk#46] +Right keys [1]: [d_date_sk#36] Join condition: None (63) Project [codegen id : 43] Output [3]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3] -Input [5]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, d_date_sk#46] +Input [5]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, d_date_sk#36] (64) Scan parquet default.item -Output [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] +Output [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (65) ColumnarToRow [codegen id : 22] -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] (66) Filter [codegen id : 22] -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Condition : isnotnull(i_item_sk#47) +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Condition : isnotnull(i_item_sk#37) (67) Exchange -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Arguments: hashpartitioning(i_item_sk#47, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Arguments: hashpartitioning(i_item_sk#37, 5), ENSURE_REQUIREMENTS, [plan_id=11] (68) Sort [codegen id : 23] -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Arguments: [i_item_sk#47 ASC NULLS FIRST], false, 0 +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Arguments: [i_item_sk#37 ASC NULLS FIRST], false, 0 (69) ReusedExchange [Reuses operator id: 58] -Output [1]: [ss_item_sk#44] +Output [1]: [ss_item_sk#35] (70) Sort [codegen id : 41] -Input [1]: [ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#35] +Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0 (71) SortMergeJoin [codegen id : 42] -Left keys [1]: [i_item_sk#47] -Right keys [1]: [ss_item_sk#44] +Left keys [1]: [i_item_sk#37] +Right keys [1]: [ss_item_sk#35] Join condition: None (72) BroadcastExchange -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#52] +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=12] (73) BroadcastHashJoin [codegen id : 43] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#47] +Right keys [1]: [i_item_sk#37] Join condition: None (74) Project [codegen id : 43] -Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#48, i_class_id#49, i_category_id#50] -Input [7]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] +Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#38, i_class_id#39, i_category_id#40] +Input [7]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] (75) HashAggregate [codegen id : 43] -Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#48, i_class_id#49, i_category_id#50] -Keys [3]: [i_brand_id#48, i_class_id#49, i_category_id#50] +Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#38, i_class_id#39, i_category_id#40] +Keys [3]: [i_brand_id#38, i_class_id#39, i_category_id#40] Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#53, isEmpty#54, count#55] -Results [6]: [i_brand_id#48, i_class_id#49, i_category_id#50, sum#56, isEmpty#57, count#58] +Aggregate Attributes [3]: [sum#41, isEmpty#42, count#43] +Results [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#44, isEmpty#45, count#46] (76) Exchange -Input [6]: [i_brand_id#48, i_class_id#49, i_category_id#50, sum#56, isEmpty#57, count#58] -Arguments: hashpartitioning(i_brand_id#48, i_class_id#49, i_category_id#50, 5), ENSURE_REQUIREMENTS, [id=#59] +Input [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#44, isEmpty#45, count#46] +Arguments: hashpartitioning(i_brand_id#38, i_class_id#39, i_category_id#40, 5), ENSURE_REQUIREMENTS, [plan_id=13] (77) HashAggregate [codegen id : 44] -Input [6]: [i_brand_id#48, i_class_id#49, i_category_id#50, sum#56, isEmpty#57, count#58] -Keys [3]: [i_brand_id#48, i_class_id#49, i_category_id#50] +Input [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#44, isEmpty#45, count#46] +Keys [3]: [i_brand_id#38, i_class_id#39, i_category_id#40] Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#60, count(1)#61] -Results [5]: [i_brand_id#48, i_class_id#49, i_category_id#50, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#60 AS sales#62, count(1)#61 AS number_sales#63] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47, count(1)#48] +Results [5]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47 AS sales#49, count(1)#48 AS number_sales#50] (78) Filter [codegen id : 44] -Input [5]: [i_brand_id#48, i_class_id#49, i_category_id#50, sales#62, number_sales#63] -Condition : (isnotnull(sales#62) AND (cast(sales#62 as decimal(32,6)) > cast(Subquery scalar-subquery#64, [id=#65] as decimal(32,6)))) +Input [5]: [i_brand_id#38, i_class_id#39, i_category_id#40, sales#49, number_sales#50] +Condition : (isnotnull(sales#49) AND (cast(sales#49 as decimal(32,6)) > cast(Subquery scalar-subquery#51, [id=#52] as decimal(32,6)))) (79) Project [codegen id : 44] -Output [6]: [sales#62, number_sales#63, store AS channel#66, i_brand_id#48, i_class_id#49, i_category_id#50] -Input [5]: [i_brand_id#48, i_class_id#49, i_category_id#50, sales#62, number_sales#63] +Output [6]: [sales#49, number_sales#50, store AS channel#53, i_brand_id#38, i_class_id#39, i_category_id#40] +Input [5]: [i_brand_id#38, i_class_id#39, i_category_id#40, sales#49, number_sales#50] (80) Scan parquet default.catalog_sales -Output [4]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69, cs_sold_date_sk#70] +Output [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#70), dynamicpruningexpression(cs_sold_date_sk#70 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#57), dynamicpruningexpression(cs_sold_date_sk#57 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (81) ColumnarToRow [codegen id : 45] -Input [4]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69, cs_sold_date_sk#70] +Input [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] (82) Filter [codegen id : 45] -Input [4]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69, cs_sold_date_sk#70] -Condition : isnotnull(cs_item_sk#67) +Input [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] +Condition : isnotnull(cs_item_sk#54) (83) Exchange -Input [4]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69, cs_sold_date_sk#70] -Arguments: hashpartitioning(cs_item_sk#67, 5), ENSURE_REQUIREMENTS, [id=#71] +Input [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] +Arguments: hashpartitioning(cs_item_sk#54, 5), ENSURE_REQUIREMENTS, [plan_id=14] (84) Sort [codegen id : 46] -Input [4]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69, cs_sold_date_sk#70] -Arguments: [cs_item_sk#67 ASC NULLS FIRST], false, 0 +Input [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] +Arguments: [cs_item_sk#54 ASC NULLS FIRST], false, 0 (85) ReusedExchange [Reuses operator id: 58] -Output [1]: [ss_item_sk#44] +Output [1]: [ss_item_sk#35] (86) Sort [codegen id : 64] -Input [1]: [ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#35] +Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0 (87) SortMergeJoin [codegen id : 87] -Left keys [1]: [cs_item_sk#67] -Right keys [1]: [ss_item_sk#44] +Left keys [1]: [cs_item_sk#54] +Right keys [1]: [ss_item_sk#35] Join condition: None (88) ReusedExchange [Reuses operator id: 147] -Output [1]: [d_date_sk#72] +Output [1]: [d_date_sk#58] (89) BroadcastHashJoin [codegen id : 87] -Left keys [1]: [cs_sold_date_sk#70] -Right keys [1]: [d_date_sk#72] +Left keys [1]: [cs_sold_date_sk#57] +Right keys [1]: [d_date_sk#58] Join condition: None (90) Project [codegen id : 87] -Output [3]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69] -Input [5]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69, cs_sold_date_sk#70, d_date_sk#72] +Output [3]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56] +Input [5]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57, d_date_sk#58] (91) ReusedExchange [Reuses operator id: 72] -Output [4]: [i_item_sk#73, i_brand_id#74, i_class_id#75, i_category_id#76] +Output [4]: [i_item_sk#59, i_brand_id#60, i_class_id#61, i_category_id#62] (92) BroadcastHashJoin [codegen id : 87] -Left keys [1]: [cs_item_sk#67] -Right keys [1]: [i_item_sk#73] +Left keys [1]: [cs_item_sk#54] +Right keys [1]: [i_item_sk#59] Join condition: None (93) Project [codegen id : 87] -Output [5]: [cs_quantity#68, cs_list_price#69, i_brand_id#74, i_class_id#75, i_category_id#76] -Input [7]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69, i_item_sk#73, i_brand_id#74, i_class_id#75, i_category_id#76] +Output [5]: [cs_quantity#55, cs_list_price#56, i_brand_id#60, i_class_id#61, i_category_id#62] +Input [7]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, i_item_sk#59, i_brand_id#60, i_class_id#61, i_category_id#62] (94) HashAggregate [codegen id : 87] -Input [5]: [cs_quantity#68, cs_list_price#69, i_brand_id#74, i_class_id#75, i_category_id#76] -Keys [3]: [i_brand_id#74, i_class_id#75, i_category_id#76] -Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(cs_quantity#68 as decimal(12,2))) * promote_precision(cast(cs_list_price#69 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#77, isEmpty#78, count#79] -Results [6]: [i_brand_id#74, i_class_id#75, i_category_id#76, sum#80, isEmpty#81, count#82] +Input [5]: [cs_quantity#55, cs_list_price#56, i_brand_id#60, i_class_id#61, i_category_id#62] +Keys [3]: [i_brand_id#60, i_class_id#61, i_category_id#62] +Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] +Aggregate Attributes [3]: [sum#63, isEmpty#64, count#65] +Results [6]: [i_brand_id#60, i_class_id#61, i_category_id#62, sum#66, isEmpty#67, count#68] (95) Exchange -Input [6]: [i_brand_id#74, i_class_id#75, i_category_id#76, sum#80, isEmpty#81, count#82] -Arguments: hashpartitioning(i_brand_id#74, i_class_id#75, i_category_id#76, 5), ENSURE_REQUIREMENTS, [id=#83] +Input [6]: [i_brand_id#60, i_class_id#61, i_category_id#62, sum#66, isEmpty#67, count#68] +Arguments: hashpartitioning(i_brand_id#60, i_class_id#61, i_category_id#62, 5), ENSURE_REQUIREMENTS, [plan_id=15] (96) HashAggregate [codegen id : 88] -Input [6]: [i_brand_id#74, i_class_id#75, i_category_id#76, sum#80, isEmpty#81, count#82] -Keys [3]: [i_brand_id#74, i_class_id#75, i_category_id#76] -Functions [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#68 as decimal(12,2))) * promote_precision(cast(cs_list_price#69 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#68 as decimal(12,2))) * promote_precision(cast(cs_list_price#69 as decimal(12,2)))), DecimalType(18,2)))#84, count(1)#85] -Results [5]: [i_brand_id#74, i_class_id#75, i_category_id#76, sum(CheckOverflow((promote_precision(cast(cs_quantity#68 as decimal(12,2))) * promote_precision(cast(cs_list_price#69 as decimal(12,2)))), DecimalType(18,2)))#84 AS sales#86, count(1)#85 AS number_sales#87] +Input [6]: [i_brand_id#60, i_class_id#61, i_category_id#62, sum#66, isEmpty#67, count#68] +Keys [3]: [i_brand_id#60, i_class_id#61, i_category_id#62] +Functions [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2))), count(1)] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#69, count(1)#70] +Results [5]: [i_brand_id#60, i_class_id#61, i_category_id#62, sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#69 AS sales#71, count(1)#70 AS number_sales#72] (97) Filter [codegen id : 88] -Input [5]: [i_brand_id#74, i_class_id#75, i_category_id#76, sales#86, number_sales#87] -Condition : (isnotnull(sales#86) AND (cast(sales#86 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#64, [id=#65] as decimal(32,6)))) +Input [5]: [i_brand_id#60, i_class_id#61, i_category_id#62, sales#71, number_sales#72] +Condition : (isnotnull(sales#71) AND (cast(sales#71 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#51, [id=#52] as decimal(32,6)))) (98) Project [codegen id : 88] -Output [6]: [sales#86, number_sales#87, catalog AS channel#88, i_brand_id#74, i_class_id#75, i_category_id#76] -Input [5]: [i_brand_id#74, i_class_id#75, i_category_id#76, sales#86, number_sales#87] +Output [6]: [sales#71, number_sales#72, catalog AS channel#73, i_brand_id#60, i_class_id#61, i_category_id#62] +Input [5]: [i_brand_id#60, i_class_id#61, i_category_id#62, sales#71, number_sales#72] (99) Scan parquet default.web_sales -Output [4]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91, ws_sold_date_sk#92] +Output [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#92), dynamicpruningexpression(ws_sold_date_sk#92 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#77), dynamicpruningexpression(ws_sold_date_sk#77 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (100) ColumnarToRow [codegen id : 89] -Input [4]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91, ws_sold_date_sk#92] +Input [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] (101) Filter [codegen id : 89] -Input [4]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91, ws_sold_date_sk#92] -Condition : isnotnull(ws_item_sk#89) +Input [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] +Condition : isnotnull(ws_item_sk#74) (102) Exchange -Input [4]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91, ws_sold_date_sk#92] -Arguments: hashpartitioning(ws_item_sk#89, 5), ENSURE_REQUIREMENTS, [id=#93] +Input [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] +Arguments: hashpartitioning(ws_item_sk#74, 5), ENSURE_REQUIREMENTS, [plan_id=16] (103) Sort [codegen id : 90] -Input [4]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91, ws_sold_date_sk#92] -Arguments: [ws_item_sk#89 ASC NULLS FIRST], false, 0 +Input [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] +Arguments: [ws_item_sk#74 ASC NULLS FIRST], false, 0 (104) ReusedExchange [Reuses operator id: 58] -Output [1]: [ss_item_sk#44] +Output [1]: [ss_item_sk#35] (105) Sort [codegen id : 108] -Input [1]: [ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#35] +Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0 (106) SortMergeJoin [codegen id : 131] -Left keys [1]: [ws_item_sk#89] -Right keys [1]: [ss_item_sk#44] +Left keys [1]: [ws_item_sk#74] +Right keys [1]: [ss_item_sk#35] Join condition: None (107) ReusedExchange [Reuses operator id: 147] -Output [1]: [d_date_sk#94] +Output [1]: [d_date_sk#78] (108) BroadcastHashJoin [codegen id : 131] -Left keys [1]: [ws_sold_date_sk#92] -Right keys [1]: [d_date_sk#94] +Left keys [1]: [ws_sold_date_sk#77] +Right keys [1]: [d_date_sk#78] Join condition: None (109) Project [codegen id : 131] -Output [3]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91] -Input [5]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91, ws_sold_date_sk#92, d_date_sk#94] +Output [3]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76] +Input [5]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77, d_date_sk#78] (110) ReusedExchange [Reuses operator id: 72] -Output [4]: [i_item_sk#95, i_brand_id#96, i_class_id#97, i_category_id#98] +Output [4]: [i_item_sk#79, i_brand_id#80, i_class_id#81, i_category_id#82] (111) BroadcastHashJoin [codegen id : 131] -Left keys [1]: [ws_item_sk#89] -Right keys [1]: [i_item_sk#95] +Left keys [1]: [ws_item_sk#74] +Right keys [1]: [i_item_sk#79] Join condition: None (112) Project [codegen id : 131] -Output [5]: [ws_quantity#90, ws_list_price#91, i_brand_id#96, i_class_id#97, i_category_id#98] -Input [7]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91, i_item_sk#95, i_brand_id#96, i_class_id#97, i_category_id#98] +Output [5]: [ws_quantity#75, ws_list_price#76, i_brand_id#80, i_class_id#81, i_category_id#82] +Input [7]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, i_item_sk#79, i_brand_id#80, i_class_id#81, i_category_id#82] (113) HashAggregate [codegen id : 131] -Input [5]: [ws_quantity#90, ws_list_price#91, i_brand_id#96, i_class_id#97, i_category_id#98] -Keys [3]: [i_brand_id#96, i_class_id#97, i_category_id#98] -Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ws_quantity#90 as decimal(12,2))) * promote_precision(cast(ws_list_price#91 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#99, isEmpty#100, count#101] -Results [6]: [i_brand_id#96, i_class_id#97, i_category_id#98, sum#102, isEmpty#103, count#104] +Input [5]: [ws_quantity#75, ws_list_price#76, i_brand_id#80, i_class_id#81, i_category_id#82] +Keys [3]: [i_brand_id#80, i_class_id#81, i_category_id#82] +Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] +Aggregate Attributes [3]: [sum#83, isEmpty#84, count#85] +Results [6]: [i_brand_id#80, i_class_id#81, i_category_id#82, sum#86, isEmpty#87, count#88] (114) Exchange -Input [6]: [i_brand_id#96, i_class_id#97, i_category_id#98, sum#102, isEmpty#103, count#104] -Arguments: hashpartitioning(i_brand_id#96, i_class_id#97, i_category_id#98, 5), ENSURE_REQUIREMENTS, [id=#105] +Input [6]: [i_brand_id#80, i_class_id#81, i_category_id#82, sum#86, isEmpty#87, count#88] +Arguments: hashpartitioning(i_brand_id#80, i_class_id#81, i_category_id#82, 5), ENSURE_REQUIREMENTS, [plan_id=17] (115) HashAggregate [codegen id : 132] -Input [6]: [i_brand_id#96, i_class_id#97, i_category_id#98, sum#102, isEmpty#103, count#104] -Keys [3]: [i_brand_id#96, i_class_id#97, i_category_id#98] -Functions [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#90 as decimal(12,2))) * promote_precision(cast(ws_list_price#91 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#90 as decimal(12,2))) * promote_precision(cast(ws_list_price#91 as decimal(12,2)))), DecimalType(18,2)))#106, count(1)#107] -Results [5]: [i_brand_id#96, i_class_id#97, i_category_id#98, sum(CheckOverflow((promote_precision(cast(ws_quantity#90 as decimal(12,2))) * promote_precision(cast(ws_list_price#91 as decimal(12,2)))), DecimalType(18,2)))#106 AS sales#108, count(1)#107 AS number_sales#109] +Input [6]: [i_brand_id#80, i_class_id#81, i_category_id#82, sum#86, isEmpty#87, count#88] +Keys [3]: [i_brand_id#80, i_class_id#81, i_category_id#82] +Functions [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2))), count(1)] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2)))#89, count(1)#90] +Results [5]: [i_brand_id#80, i_class_id#81, i_category_id#82, sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2)))#89 AS sales#91, count(1)#90 AS number_sales#92] (116) Filter [codegen id : 132] -Input [5]: [i_brand_id#96, i_class_id#97, i_category_id#98, sales#108, number_sales#109] -Condition : (isnotnull(sales#108) AND (cast(sales#108 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#64, [id=#65] as decimal(32,6)))) +Input [5]: [i_brand_id#80, i_class_id#81, i_category_id#82, sales#91, number_sales#92] +Condition : (isnotnull(sales#91) AND (cast(sales#91 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#51, [id=#52] as decimal(32,6)))) (117) Project [codegen id : 132] -Output [6]: [sales#108, number_sales#109, web AS channel#110, i_brand_id#96, i_class_id#97, i_category_id#98] -Input [5]: [i_brand_id#96, i_class_id#97, i_category_id#98, sales#108, number_sales#109] +Output [6]: [sales#91, number_sales#92, web AS channel#93, i_brand_id#80, i_class_id#81, i_category_id#82] +Input [5]: [i_brand_id#80, i_class_id#81, i_category_id#82, sales#91, number_sales#92] (118) Union (119) Expand [codegen id : 133] -Input [6]: [sales#62, number_sales#63, channel#66, i_brand_id#48, i_class_id#49, i_category_id#50] -Arguments: [[sales#62, number_sales#63, channel#66, i_brand_id#48, i_class_id#49, i_category_id#50, 0], [sales#62, number_sales#63, channel#66, i_brand_id#48, i_class_id#49, null, 1], [sales#62, number_sales#63, channel#66, i_brand_id#48, null, null, 3], [sales#62, number_sales#63, channel#66, null, null, null, 7], [sales#62, number_sales#63, null, null, null, null, 15]], [sales#62, number_sales#63, channel#111, i_brand_id#112, i_class_id#113, i_category_id#114, spark_grouping_id#115] +Input [6]: [sales#49, number_sales#50, channel#53, i_brand_id#38, i_class_id#39, i_category_id#40] +Arguments: [[sales#49, number_sales#50, channel#53, i_brand_id#38, i_class_id#39, i_category_id#40, 0], [sales#49, number_sales#50, channel#53, i_brand_id#38, i_class_id#39, null, 1], [sales#49, number_sales#50, channel#53, i_brand_id#38, null, null, 3], [sales#49, number_sales#50, channel#53, null, null, null, 7], [sales#49, number_sales#50, null, null, null, null, 15]], [sales#49, number_sales#50, channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98] (120) HashAggregate [codegen id : 133] -Input [7]: [sales#62, number_sales#63, channel#111, i_brand_id#112, i_class_id#113, i_category_id#114, spark_grouping_id#115] -Keys [5]: [channel#111, i_brand_id#112, i_class_id#113, i_category_id#114, spark_grouping_id#115] -Functions [2]: [partial_sum(sales#62), partial_sum(number_sales#63)] -Aggregate Attributes [3]: [sum#116, isEmpty#117, sum#118] -Results [8]: [channel#111, i_brand_id#112, i_class_id#113, i_category_id#114, spark_grouping_id#115, sum#119, isEmpty#120, sum#121] +Input [7]: [sales#49, number_sales#50, channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98] +Keys [5]: [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98] +Functions [2]: [partial_sum(sales#49), partial_sum(number_sales#50)] +Aggregate Attributes [3]: [sum#99, isEmpty#100, sum#101] +Results [8]: [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98, sum#102, isEmpty#103, sum#104] (121) Exchange -Input [8]: [channel#111, i_brand_id#112, i_class_id#113, i_category_id#114, spark_grouping_id#115, sum#119, isEmpty#120, sum#121] -Arguments: hashpartitioning(channel#111, i_brand_id#112, i_class_id#113, i_category_id#114, spark_grouping_id#115, 5), ENSURE_REQUIREMENTS, [id=#122] +Input [8]: [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98, sum#102, isEmpty#103, sum#104] +Arguments: hashpartitioning(channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98, 5), ENSURE_REQUIREMENTS, [plan_id=18] (122) HashAggregate [codegen id : 134] -Input [8]: [channel#111, i_brand_id#112, i_class_id#113, i_category_id#114, spark_grouping_id#115, sum#119, isEmpty#120, sum#121] -Keys [5]: [channel#111, i_brand_id#112, i_class_id#113, i_category_id#114, spark_grouping_id#115] -Functions [2]: [sum(sales#62), sum(number_sales#63)] -Aggregate Attributes [2]: [sum(sales#62)#123, sum(number_sales#63)#124] -Results [6]: [channel#111, i_brand_id#112, i_class_id#113, i_category_id#114, sum(sales#62)#123 AS sum(sales)#125, sum(number_sales#63)#124 AS sum(number_sales)#126] +Input [8]: [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98, sum#102, isEmpty#103, sum#104] +Keys [5]: [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98] +Functions [2]: [sum(sales#49), sum(number_sales#50)] +Aggregate Attributes [2]: [sum(sales#49)#105, sum(number_sales#50)#106] +Results [6]: [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, sum(sales#49)#105 AS sum(sales)#107, sum(number_sales#50)#106 AS sum(number_sales)#108] (123) TakeOrderedAndProject -Input [6]: [channel#111, i_brand_id#112, i_class_id#113, i_category_id#114, sum(sales)#125, sum(number_sales)#126] -Arguments: 100, [channel#111 ASC NULLS FIRST, i_brand_id#112 ASC NULLS FIRST, i_class_id#113 ASC NULLS FIRST, i_category_id#114 ASC NULLS FIRST], [channel#111, i_brand_id#112, i_class_id#113, i_category_id#114, sum(sales)#125, sum(number_sales)#126] +Input [6]: [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, sum(sales)#107, sum(number_sales)#108] +Arguments: 100, [channel#94 ASC NULLS FIRST, i_brand_id#95 ASC NULLS FIRST, i_class_id#96 ASC NULLS FIRST, i_category_id#97 ASC NULLS FIRST], [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, sum(sales)#107, sum(number_sales)#108] ===== Subqueries ===== -Subquery:1 Hosting operator id = 78 Hosting Expression = Subquery scalar-subquery#64, [id=#65] +Subquery:1 Hosting operator id = 78 Hosting Expression = Subquery scalar-subquery#51, [id=#52] * HashAggregate (142) +- Exchange (141) +- * HashAggregate (140) @@ -702,96 +702,96 @@ Subquery:1 Hosting operator id = 78 Hosting Expression = Subquery scalar-subquer (124) Scan parquet default.store_sales -Output [3]: [ss_quantity#127, ss_list_price#128, ss_sold_date_sk#129] +Output [3]: [ss_quantity#109, ss_list_price#110, ss_sold_date_sk#111] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#129), dynamicpruningexpression(ss_sold_date_sk#129 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ss_sold_date_sk#111), dynamicpruningexpression(ss_sold_date_sk#111 IN dynamicpruning#12)] ReadSchema: struct (125) ColumnarToRow [codegen id : 2] -Input [3]: [ss_quantity#127, ss_list_price#128, ss_sold_date_sk#129] +Input [3]: [ss_quantity#109, ss_list_price#110, ss_sold_date_sk#111] (126) ReusedExchange [Reuses operator id: 152] -Output [1]: [d_date_sk#130] +Output [1]: [d_date_sk#112] (127) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [ss_sold_date_sk#129] -Right keys [1]: [d_date_sk#130] +Left keys [1]: [ss_sold_date_sk#111] +Right keys [1]: [d_date_sk#112] Join condition: None (128) Project [codegen id : 2] -Output [2]: [ss_quantity#127 AS quantity#131, ss_list_price#128 AS list_price#132] -Input [4]: [ss_quantity#127, ss_list_price#128, ss_sold_date_sk#129, d_date_sk#130] +Output [2]: [ss_quantity#109 AS quantity#113, ss_list_price#110 AS list_price#114] +Input [4]: [ss_quantity#109, ss_list_price#110, ss_sold_date_sk#111, d_date_sk#112] (129) Scan parquet default.catalog_sales -Output [3]: [cs_quantity#133, cs_list_price#134, cs_sold_date_sk#135] +Output [3]: [cs_quantity#115, cs_list_price#116, cs_sold_date_sk#117] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#135), dynamicpruningexpression(cs_sold_date_sk#135 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(cs_sold_date_sk#117), dynamicpruningexpression(cs_sold_date_sk#117 IN dynamicpruning#12)] ReadSchema: struct (130) ColumnarToRow [codegen id : 4] -Input [3]: [cs_quantity#133, cs_list_price#134, cs_sold_date_sk#135] +Input [3]: [cs_quantity#115, cs_list_price#116, cs_sold_date_sk#117] (131) ReusedExchange [Reuses operator id: 152] -Output [1]: [d_date_sk#136] +Output [1]: [d_date_sk#118] (132) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [cs_sold_date_sk#135] -Right keys [1]: [d_date_sk#136] +Left keys [1]: [cs_sold_date_sk#117] +Right keys [1]: [d_date_sk#118] Join condition: None (133) Project [codegen id : 4] -Output [2]: [cs_quantity#133 AS quantity#137, cs_list_price#134 AS list_price#138] -Input [4]: [cs_quantity#133, cs_list_price#134, cs_sold_date_sk#135, d_date_sk#136] +Output [2]: [cs_quantity#115 AS quantity#119, cs_list_price#116 AS list_price#120] +Input [4]: [cs_quantity#115, cs_list_price#116, cs_sold_date_sk#117, d_date_sk#118] (134) Scan parquet default.web_sales -Output [3]: [ws_quantity#139, ws_list_price#140, ws_sold_date_sk#141] +Output [3]: [ws_quantity#121, ws_list_price#122, ws_sold_date_sk#123] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#141), dynamicpruningexpression(ws_sold_date_sk#141 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ws_sold_date_sk#123), dynamicpruningexpression(ws_sold_date_sk#123 IN dynamicpruning#12)] ReadSchema: struct (135) ColumnarToRow [codegen id : 6] -Input [3]: [ws_quantity#139, ws_list_price#140, ws_sold_date_sk#141] +Input [3]: [ws_quantity#121, ws_list_price#122, ws_sold_date_sk#123] (136) ReusedExchange [Reuses operator id: 152] -Output [1]: [d_date_sk#142] +Output [1]: [d_date_sk#124] (137) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ws_sold_date_sk#141] -Right keys [1]: [d_date_sk#142] +Left keys [1]: [ws_sold_date_sk#123] +Right keys [1]: [d_date_sk#124] Join condition: None (138) Project [codegen id : 6] -Output [2]: [ws_quantity#139 AS quantity#143, ws_list_price#140 AS list_price#144] -Input [4]: [ws_quantity#139, ws_list_price#140, ws_sold_date_sk#141, d_date_sk#142] +Output [2]: [ws_quantity#121 AS quantity#125, ws_list_price#122 AS list_price#126] +Input [4]: [ws_quantity#121, ws_list_price#122, ws_sold_date_sk#123, d_date_sk#124] (139) Union (140) HashAggregate [codegen id : 7] -Input [2]: [quantity#131, list_price#132] +Input [2]: [quantity#113, list_price#114] Keys: [] -Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#131 as decimal(12,2))) * promote_precision(cast(list_price#132 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#145, count#146] -Results [2]: [sum#147, count#148] +Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#113 as decimal(12,2))) * promote_precision(cast(list_price#114 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#127, count#128] +Results [2]: [sum#129, count#130] (141) Exchange -Input [2]: [sum#147, count#148] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#149] +Input [2]: [sum#129, count#130] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=19] (142) HashAggregate [codegen id : 8] -Input [2]: [sum#147, count#148] +Input [2]: [sum#129, count#130] Keys: [] -Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#131 as decimal(12,2))) * promote_precision(cast(list_price#132 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#131 as decimal(12,2))) * promote_precision(cast(list_price#132 as decimal(12,2)))), DecimalType(18,2)))#150] -Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#131 as decimal(12,2))) * promote_precision(cast(list_price#132 as decimal(12,2)))), DecimalType(18,2)))#150 AS average_sales#151] +Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#113 as decimal(12,2))) * promote_precision(cast(list_price#114 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#113 as decimal(12,2))) * promote_precision(cast(list_price#114 as decimal(12,2)))), DecimalType(18,2)))#131] +Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#113 as decimal(12,2))) * promote_precision(cast(list_price#114 as decimal(12,2)))), DecimalType(18,2)))#131 AS average_sales#132] -Subquery:2 Hosting operator id = 124 Hosting Expression = ss_sold_date_sk#129 IN dynamicpruning#13 +Subquery:2 Hosting operator id = 124 Hosting Expression = ss_sold_date_sk#111 IN dynamicpruning#12 -Subquery:3 Hosting operator id = 129 Hosting Expression = cs_sold_date_sk#135 IN dynamicpruning#13 +Subquery:3 Hosting operator id = 129 Hosting Expression = cs_sold_date_sk#117 IN dynamicpruning#12 -Subquery:4 Hosting operator id = 134 Hosting Expression = ws_sold_date_sk#141 IN dynamicpruning#13 +Subquery:4 Hosting operator id = 134 Hosting Expression = ws_sold_date_sk#123 IN dynamicpruning#12 Subquery:5 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5 BroadcastExchange (147) @@ -802,28 +802,28 @@ BroadcastExchange (147) (143) Scan parquet default.date_dim -Output [3]: [d_date_sk#46, d_year#152, d_moy#153] +Output [3]: [d_date_sk#36, d_year#133, d_moy#134] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,11), IsNotNull(d_date_sk)] ReadSchema: struct (144) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#46, d_year#152, d_moy#153] +Input [3]: [d_date_sk#36, d_year#133, d_moy#134] (145) Filter [codegen id : 1] -Input [3]: [d_date_sk#46, d_year#152, d_moy#153] -Condition : ((((isnotnull(d_year#152) AND isnotnull(d_moy#153)) AND (d_year#152 = 2001)) AND (d_moy#153 = 11)) AND isnotnull(d_date_sk#46)) +Input [3]: [d_date_sk#36, d_year#133, d_moy#134] +Condition : ((((isnotnull(d_year#133) AND isnotnull(d_moy#134)) AND (d_year#133 = 2001)) AND (d_moy#134 = 11)) AND isnotnull(d_date_sk#36)) (146) Project [codegen id : 1] -Output [1]: [d_date_sk#46] -Input [3]: [d_date_sk#46, d_year#152, d_moy#153] +Output [1]: [d_date_sk#36] +Input [3]: [d_date_sk#36, d_year#133, d_moy#134] (147) BroadcastExchange -Input [1]: [d_date_sk#46] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#154] +Input [1]: [d_date_sk#36] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=20] -Subquery:6 Hosting operator id = 9 Hosting Expression = ss_sold_date_sk#12 IN dynamicpruning#13 +Subquery:6 Hosting operator id = 9 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#12 BroadcastExchange (152) +- * Project (151) +- * Filter (150) @@ -832,37 +832,37 @@ BroadcastExchange (152) (148) Scan parquet default.date_dim -Output [2]: [d_date_sk#14, d_year#155] +Output [2]: [d_date_sk#13, d_year#135] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (149) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#155] +Input [2]: [d_date_sk#13, d_year#135] (150) Filter [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#155] -Condition : (((isnotnull(d_year#155) AND (d_year#155 >= 1999)) AND (d_year#155 <= 2001)) AND isnotnull(d_date_sk#14)) +Input [2]: [d_date_sk#13, d_year#135] +Condition : (((isnotnull(d_year#135) AND (d_year#135 >= 1999)) AND (d_year#135 <= 2001)) AND isnotnull(d_date_sk#13)) (151) Project [codegen id : 1] -Output [1]: [d_date_sk#14] -Input [2]: [d_date_sk#14, d_year#155] +Output [1]: [d_date_sk#13] +Input [2]: [d_date_sk#13, d_year#135] (152) BroadcastExchange -Input [1]: [d_date_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#156] +Input [1]: [d_date_sk#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=21] -Subquery:7 Hosting operator id = 20 Hosting Expression = cs_sold_date_sk#21 IN dynamicpruning#13 +Subquery:7 Hosting operator id = 20 Hosting Expression = cs_sold_date_sk#19 IN dynamicpruning#12 -Subquery:8 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#36 IN dynamicpruning#13 +Subquery:8 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#29 IN dynamicpruning#12 -Subquery:9 Hosting operator id = 97 Hosting Expression = ReusedSubquery Subquery scalar-subquery#64, [id=#65] +Subquery:9 Hosting operator id = 97 Hosting Expression = ReusedSubquery Subquery scalar-subquery#51, [id=#52] -Subquery:10 Hosting operator id = 80 Hosting Expression = cs_sold_date_sk#70 IN dynamicpruning#5 +Subquery:10 Hosting operator id = 80 Hosting Expression = cs_sold_date_sk#57 IN dynamicpruning#5 -Subquery:11 Hosting operator id = 116 Hosting Expression = ReusedSubquery Subquery scalar-subquery#64, [id=#65] +Subquery:11 Hosting operator id = 116 Hosting Expression = ReusedSubquery Subquery scalar-subquery#51, [id=#52] -Subquery:12 Hosting operator id = 99 Hosting Expression = ws_sold_date_sk#92 IN dynamicpruning#5 +Subquery:12 Hosting operator id = 99 Hosting Expression = ws_sold_date_sk#77 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a/explain.txt index 300cfd7ccbb21..fd17c5d762e21 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14a/explain.txt @@ -195,7 +195,7 @@ Condition : isnotnull(i_item_sk#19) (19) BroadcastExchange Input [4]: [i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (20) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_item_sk#17] @@ -207,20 +207,20 @@ Output [4]: [cs_sold_date_sk#18, i_brand_id#20, i_class_id#21, i_category_id#22] Input [6]: [cs_item_sk#17, cs_sold_date_sk#18, i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22] (22) ReusedExchange [Reuses operator id: 134] -Output [1]: [d_date_sk#24] +Output [1]: [d_date_sk#23] (23) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_sold_date_sk#18] -Right keys [1]: [d_date_sk#24] +Right keys [1]: [d_date_sk#23] Join condition: None (24) Project [codegen id : 3] Output [3]: [i_brand_id#20, i_class_id#21, i_category_id#22] -Input [5]: [cs_sold_date_sk#18, i_brand_id#20, i_class_id#21, i_category_id#22, d_date_sk#24] +Input [5]: [cs_sold_date_sk#18, i_brand_id#20, i_class_id#21, i_category_id#22, d_date_sk#23] (25) BroadcastExchange Input [3]: [i_brand_id#20, i_class_id#21, i_category_id#22] -Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [id=#25] +Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [plan_id=2] (26) BroadcastHashJoin [codegen id : 4] Left keys [6]: [coalesce(i_brand_id#14, 0), isnull(i_brand_id#14), coalesce(i_class_id#15, 0), isnull(i_class_id#15), coalesce(i_category_id#16, 0), isnull(i_category_id#16)] @@ -229,7 +229,7 @@ Join condition: None (27) BroadcastExchange Input [4]: [i_item_sk#13, i_brand_id#14, i_class_id#15, i_category_id#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (28) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_item_sk#10] @@ -241,355 +241,355 @@ Output [4]: [ss_sold_date_sk#11, i_brand_id#14, i_class_id#15, i_category_id#16] Input [6]: [ss_item_sk#10, ss_sold_date_sk#11, i_item_sk#13, i_brand_id#14, i_class_id#15, i_category_id#16] (30) ReusedExchange [Reuses operator id: 134] -Output [1]: [d_date_sk#27] +Output [1]: [d_date_sk#24] (31) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_sold_date_sk#11] -Right keys [1]: [d_date_sk#27] +Right keys [1]: [d_date_sk#24] Join condition: None (32) Project [codegen id : 6] -Output [3]: [i_brand_id#14 AS brand_id#28, i_class_id#15 AS class_id#29, i_category_id#16 AS category_id#30] -Input [5]: [ss_sold_date_sk#11, i_brand_id#14, i_class_id#15, i_category_id#16, d_date_sk#27] +Output [3]: [i_brand_id#14 AS brand_id#25, i_class_id#15 AS class_id#26, i_category_id#16 AS category_id#27] +Input [5]: [ss_sold_date_sk#11, i_brand_id#14, i_class_id#15, i_category_id#16, d_date_sk#24] (33) HashAggregate [codegen id : 6] -Input [3]: [brand_id#28, class_id#29, category_id#30] -Keys [3]: [brand_id#28, class_id#29, category_id#30] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#28, class_id#29, category_id#30] +Results [3]: [brand_id#25, class_id#26, category_id#27] (34) Exchange -Input [3]: [brand_id#28, class_id#29, category_id#30] -Arguments: hashpartitioning(brand_id#28, class_id#29, category_id#30, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: hashpartitioning(brand_id#25, class_id#26, category_id#27, 5), ENSURE_REQUIREMENTS, [plan_id=4] (35) HashAggregate [codegen id : 10] -Input [3]: [brand_id#28, class_id#29, category_id#30] -Keys [3]: [brand_id#28, class_id#29, category_id#30] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#28, class_id#29, category_id#30] +Results [3]: [brand_id#25, class_id#26, category_id#27] (36) Scan parquet default.web_sales -Output [2]: [ws_item_sk#32, ws_sold_date_sk#33] +Output [2]: [ws_item_sk#28, ws_sold_date_sk#29] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#33), dynamicpruningexpression(ws_sold_date_sk#33 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(ws_sold_date_sk#29), dynamicpruningexpression(ws_sold_date_sk#29 IN dynamicpruning#12)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 9] -Input [2]: [ws_item_sk#32, ws_sold_date_sk#33] +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] (38) Filter [codegen id : 9] -Input [2]: [ws_item_sk#32, ws_sold_date_sk#33] -Condition : isnotnull(ws_item_sk#32) +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] +Condition : isnotnull(ws_item_sk#28) (39) ReusedExchange [Reuses operator id: 19] -Output [4]: [i_item_sk#34, i_brand_id#35, i_class_id#36, i_category_id#37] +Output [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33] (40) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [ws_item_sk#32] -Right keys [1]: [i_item_sk#34] +Left keys [1]: [ws_item_sk#28] +Right keys [1]: [i_item_sk#30] Join condition: None (41) Project [codegen id : 9] -Output [4]: [ws_sold_date_sk#33, i_brand_id#35, i_class_id#36, i_category_id#37] -Input [6]: [ws_item_sk#32, ws_sold_date_sk#33, i_item_sk#34, i_brand_id#35, i_class_id#36, i_category_id#37] +Output [4]: [ws_sold_date_sk#29, i_brand_id#31, i_class_id#32, i_category_id#33] +Input [6]: [ws_item_sk#28, ws_sold_date_sk#29, i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33] (42) ReusedExchange [Reuses operator id: 134] -Output [1]: [d_date_sk#38] +Output [1]: [d_date_sk#34] (43) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [ws_sold_date_sk#33] -Right keys [1]: [d_date_sk#38] +Left keys [1]: [ws_sold_date_sk#29] +Right keys [1]: [d_date_sk#34] Join condition: None (44) Project [codegen id : 9] -Output [3]: [i_brand_id#35, i_class_id#36, i_category_id#37] -Input [5]: [ws_sold_date_sk#33, i_brand_id#35, i_class_id#36, i_category_id#37, d_date_sk#38] +Output [3]: [i_brand_id#31, i_class_id#32, i_category_id#33] +Input [5]: [ws_sold_date_sk#29, i_brand_id#31, i_class_id#32, i_category_id#33, d_date_sk#34] (45) BroadcastExchange -Input [3]: [i_brand_id#35, i_class_id#36, i_category_id#37] -Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [id=#39] +Input [3]: [i_brand_id#31, i_class_id#32, i_category_id#33] +Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [plan_id=5] (46) BroadcastHashJoin [codegen id : 10] -Left keys [6]: [coalesce(brand_id#28, 0), isnull(brand_id#28), coalesce(class_id#29, 0), isnull(class_id#29), coalesce(category_id#30, 0), isnull(category_id#30)] -Right keys [6]: [coalesce(i_brand_id#35, 0), isnull(i_brand_id#35), coalesce(i_class_id#36, 0), isnull(i_class_id#36), coalesce(i_category_id#37, 0), isnull(i_category_id#37)] +Left keys [6]: [coalesce(brand_id#25, 0), isnull(brand_id#25), coalesce(class_id#26, 0), isnull(class_id#26), coalesce(category_id#27, 0), isnull(category_id#27)] +Right keys [6]: [coalesce(i_brand_id#31, 0), isnull(i_brand_id#31), coalesce(i_class_id#32, 0), isnull(i_class_id#32), coalesce(i_category_id#33, 0), isnull(i_category_id#33)] Join condition: None (47) BroadcastExchange -Input [3]: [brand_id#28, class_id#29, category_id#30] -Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [id=#40] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [plan_id=6] (48) BroadcastHashJoin [codegen id : 11] Left keys [3]: [i_brand_id#7, i_class_id#8, i_category_id#9] -Right keys [3]: [brand_id#28, class_id#29, category_id#30] +Right keys [3]: [brand_id#25, class_id#26, category_id#27] Join condition: None (49) Project [codegen id : 11] -Output [1]: [i_item_sk#6 AS ss_item_sk#41] -Input [7]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9, brand_id#28, class_id#29, category_id#30] +Output [1]: [i_item_sk#6 AS ss_item_sk#35] +Input [7]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9, brand_id#25, class_id#26, category_id#27] (50) BroadcastExchange -Input [1]: [ss_item_sk#41] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#42] +Input [1]: [ss_item_sk#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] (51) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [ss_item_sk#41] +Right keys [1]: [ss_item_sk#35] Join condition: None (52) Scan parquet default.item -Output [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] +Output [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (53) ColumnarToRow [codegen id : 23] -Input [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] +Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] (54) Filter [codegen id : 23] -Input [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] -Condition : isnotnull(i_item_sk#43) +Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] +Condition : isnotnull(i_item_sk#36) (55) ReusedExchange [Reuses operator id: 50] -Output [1]: [ss_item_sk#41] +Output [1]: [ss_item_sk#35] (56) BroadcastHashJoin [codegen id : 23] -Left keys [1]: [i_item_sk#43] -Right keys [1]: [ss_item_sk#41] +Left keys [1]: [i_item_sk#36] +Right keys [1]: [ss_item_sk#35] Join condition: None (57) BroadcastExchange -Input [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#47] +Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] (58) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#43] +Right keys [1]: [i_item_sk#36] Join condition: None (59) Project [codegen id : 25] -Output [6]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#44, i_class_id#45, i_category_id#46] -Input [8]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] +Output [6]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#37, i_class_id#38, i_category_id#39] +Input [8]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] (60) ReusedExchange [Reuses operator id: 129] -Output [1]: [d_date_sk#48] +Output [1]: [d_date_sk#40] (61) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_sold_date_sk#4] -Right keys [1]: [d_date_sk#48] +Right keys [1]: [d_date_sk#40] Join condition: None (62) Project [codegen id : 25] -Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#44, i_class_id#45, i_category_id#46] -Input [7]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#44, i_class_id#45, i_category_id#46, d_date_sk#48] +Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#37, i_class_id#38, i_category_id#39] +Input [7]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#37, i_class_id#38, i_category_id#39, d_date_sk#40] (63) HashAggregate [codegen id : 25] -Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#44, i_class_id#45, i_category_id#46] -Keys [3]: [i_brand_id#44, i_class_id#45, i_category_id#46] +Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#37, i_class_id#38, i_category_id#39] +Keys [3]: [i_brand_id#37, i_class_id#38, i_category_id#39] Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#49, isEmpty#50, count#51] -Results [6]: [i_brand_id#44, i_class_id#45, i_category_id#46, sum#52, isEmpty#53, count#54] +Aggregate Attributes [3]: [sum#41, isEmpty#42, count#43] +Results [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#44, isEmpty#45, count#46] (64) Exchange -Input [6]: [i_brand_id#44, i_class_id#45, i_category_id#46, sum#52, isEmpty#53, count#54] -Arguments: hashpartitioning(i_brand_id#44, i_class_id#45, i_category_id#46, 5), ENSURE_REQUIREMENTS, [id=#55] +Input [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#44, isEmpty#45, count#46] +Arguments: hashpartitioning(i_brand_id#37, i_class_id#38, i_category_id#39, 5), ENSURE_REQUIREMENTS, [plan_id=9] (65) HashAggregate [codegen id : 26] -Input [6]: [i_brand_id#44, i_class_id#45, i_category_id#46, sum#52, isEmpty#53, count#54] -Keys [3]: [i_brand_id#44, i_class_id#45, i_category_id#46] +Input [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#44, isEmpty#45, count#46] +Keys [3]: [i_brand_id#37, i_class_id#38, i_category_id#39] Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#56, count(1)#57] -Results [5]: [i_brand_id#44, i_class_id#45, i_category_id#46, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#56 AS sales#58, count(1)#57 AS number_sales#59] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47, count(1)#48] +Results [5]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47 AS sales#49, count(1)#48 AS number_sales#50] (66) Filter [codegen id : 26] -Input [5]: [i_brand_id#44, i_class_id#45, i_category_id#46, sales#58, number_sales#59] -Condition : (isnotnull(sales#58) AND (cast(sales#58 as decimal(32,6)) > cast(Subquery scalar-subquery#60, [id=#61] as decimal(32,6)))) +Input [5]: [i_brand_id#37, i_class_id#38, i_category_id#39, sales#49, number_sales#50] +Condition : (isnotnull(sales#49) AND (cast(sales#49 as decimal(32,6)) > cast(Subquery scalar-subquery#51, [id=#52] as decimal(32,6)))) (67) Project [codegen id : 26] -Output [6]: [sales#58, number_sales#59, store AS channel#62, i_brand_id#44, i_class_id#45, i_category_id#46] -Input [5]: [i_brand_id#44, i_class_id#45, i_category_id#46, sales#58, number_sales#59] +Output [6]: [sales#49, number_sales#50, store AS channel#53, i_brand_id#37, i_class_id#38, i_category_id#39] +Input [5]: [i_brand_id#37, i_class_id#38, i_category_id#39, sales#49, number_sales#50] (68) Scan parquet default.catalog_sales -Output [4]: [cs_item_sk#63, cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66] +Output [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#66), dynamicpruningexpression(cs_sold_date_sk#66 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#57), dynamicpruningexpression(cs_sold_date_sk#57 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (69) ColumnarToRow [codegen id : 51] -Input [4]: [cs_item_sk#63, cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66] +Input [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] (70) Filter [codegen id : 51] -Input [4]: [cs_item_sk#63, cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66] -Condition : isnotnull(cs_item_sk#63) +Input [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] +Condition : isnotnull(cs_item_sk#54) (71) ReusedExchange [Reuses operator id: 50] -Output [1]: [ss_item_sk#41] +Output [1]: [ss_item_sk#35] (72) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [cs_item_sk#63] -Right keys [1]: [ss_item_sk#41] +Left keys [1]: [cs_item_sk#54] +Right keys [1]: [ss_item_sk#35] Join condition: None (73) ReusedExchange [Reuses operator id: 57] -Output [4]: [i_item_sk#67, i_brand_id#68, i_class_id#69, i_category_id#70] +Output [4]: [i_item_sk#58, i_brand_id#59, i_class_id#60, i_category_id#61] (74) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [cs_item_sk#63] -Right keys [1]: [i_item_sk#67] +Left keys [1]: [cs_item_sk#54] +Right keys [1]: [i_item_sk#58] Join condition: None (75) Project [codegen id : 51] -Output [6]: [cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66, i_brand_id#68, i_class_id#69, i_category_id#70] -Input [8]: [cs_item_sk#63, cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66, i_item_sk#67, i_brand_id#68, i_class_id#69, i_category_id#70] +Output [6]: [cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57, i_brand_id#59, i_class_id#60, i_category_id#61] +Input [8]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57, i_item_sk#58, i_brand_id#59, i_class_id#60, i_category_id#61] (76) ReusedExchange [Reuses operator id: 129] -Output [1]: [d_date_sk#71] +Output [1]: [d_date_sk#62] (77) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [cs_sold_date_sk#66] -Right keys [1]: [d_date_sk#71] +Left keys [1]: [cs_sold_date_sk#57] +Right keys [1]: [d_date_sk#62] Join condition: None (78) Project [codegen id : 51] -Output [5]: [cs_quantity#64, cs_list_price#65, i_brand_id#68, i_class_id#69, i_category_id#70] -Input [7]: [cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66, i_brand_id#68, i_class_id#69, i_category_id#70, d_date_sk#71] +Output [5]: [cs_quantity#55, cs_list_price#56, i_brand_id#59, i_class_id#60, i_category_id#61] +Input [7]: [cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57, i_brand_id#59, i_class_id#60, i_category_id#61, d_date_sk#62] (79) HashAggregate [codegen id : 51] -Input [5]: [cs_quantity#64, cs_list_price#65, i_brand_id#68, i_class_id#69, i_category_id#70] -Keys [3]: [i_brand_id#68, i_class_id#69, i_category_id#70] -Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(cs_quantity#64 as decimal(12,2))) * promote_precision(cast(cs_list_price#65 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#72, isEmpty#73, count#74] -Results [6]: [i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77] +Input [5]: [cs_quantity#55, cs_list_price#56, i_brand_id#59, i_class_id#60, i_category_id#61] +Keys [3]: [i_brand_id#59, i_class_id#60, i_category_id#61] +Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] +Aggregate Attributes [3]: [sum#63, isEmpty#64, count#65] +Results [6]: [i_brand_id#59, i_class_id#60, i_category_id#61, sum#66, isEmpty#67, count#68] (80) Exchange -Input [6]: [i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77] -Arguments: hashpartitioning(i_brand_id#68, i_class_id#69, i_category_id#70, 5), ENSURE_REQUIREMENTS, [id=#78] +Input [6]: [i_brand_id#59, i_class_id#60, i_category_id#61, sum#66, isEmpty#67, count#68] +Arguments: hashpartitioning(i_brand_id#59, i_class_id#60, i_category_id#61, 5), ENSURE_REQUIREMENTS, [plan_id=10] (81) HashAggregate [codegen id : 52] -Input [6]: [i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77] -Keys [3]: [i_brand_id#68, i_class_id#69, i_category_id#70] -Functions [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#64 as decimal(12,2))) * promote_precision(cast(cs_list_price#65 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#64 as decimal(12,2))) * promote_precision(cast(cs_list_price#65 as decimal(12,2)))), DecimalType(18,2)))#79, count(1)#80] -Results [5]: [i_brand_id#68, i_class_id#69, i_category_id#70, sum(CheckOverflow((promote_precision(cast(cs_quantity#64 as decimal(12,2))) * promote_precision(cast(cs_list_price#65 as decimal(12,2)))), DecimalType(18,2)))#79 AS sales#81, count(1)#80 AS number_sales#82] +Input [6]: [i_brand_id#59, i_class_id#60, i_category_id#61, sum#66, isEmpty#67, count#68] +Keys [3]: [i_brand_id#59, i_class_id#60, i_category_id#61] +Functions [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2))), count(1)] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#69, count(1)#70] +Results [5]: [i_brand_id#59, i_class_id#60, i_category_id#61, sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#69 AS sales#71, count(1)#70 AS number_sales#72] (82) Filter [codegen id : 52] -Input [5]: [i_brand_id#68, i_class_id#69, i_category_id#70, sales#81, number_sales#82] -Condition : (isnotnull(sales#81) AND (cast(sales#81 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#60, [id=#61] as decimal(32,6)))) +Input [5]: [i_brand_id#59, i_class_id#60, i_category_id#61, sales#71, number_sales#72] +Condition : (isnotnull(sales#71) AND (cast(sales#71 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#51, [id=#52] as decimal(32,6)))) (83) Project [codegen id : 52] -Output [6]: [sales#81, number_sales#82, catalog AS channel#83, i_brand_id#68, i_class_id#69, i_category_id#70] -Input [5]: [i_brand_id#68, i_class_id#69, i_category_id#70, sales#81, number_sales#82] +Output [6]: [sales#71, number_sales#72, catalog AS channel#73, i_brand_id#59, i_class_id#60, i_category_id#61] +Input [5]: [i_brand_id#59, i_class_id#60, i_category_id#61, sales#71, number_sales#72] (84) Scan parquet default.web_sales -Output [4]: [ws_item_sk#84, ws_quantity#85, ws_list_price#86, ws_sold_date_sk#87] +Output [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#87), dynamicpruningexpression(ws_sold_date_sk#87 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#77), dynamicpruningexpression(ws_sold_date_sk#77 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (85) ColumnarToRow [codegen id : 77] -Input [4]: [ws_item_sk#84, ws_quantity#85, ws_list_price#86, ws_sold_date_sk#87] +Input [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] (86) Filter [codegen id : 77] -Input [4]: [ws_item_sk#84, ws_quantity#85, ws_list_price#86, ws_sold_date_sk#87] -Condition : isnotnull(ws_item_sk#84) +Input [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] +Condition : isnotnull(ws_item_sk#74) (87) ReusedExchange [Reuses operator id: 50] -Output [1]: [ss_item_sk#41] +Output [1]: [ss_item_sk#35] (88) BroadcastHashJoin [codegen id : 77] -Left keys [1]: [ws_item_sk#84] -Right keys [1]: [ss_item_sk#41] +Left keys [1]: [ws_item_sk#74] +Right keys [1]: [ss_item_sk#35] Join condition: None (89) ReusedExchange [Reuses operator id: 57] -Output [4]: [i_item_sk#88, i_brand_id#89, i_class_id#90, i_category_id#91] +Output [4]: [i_item_sk#78, i_brand_id#79, i_class_id#80, i_category_id#81] (90) BroadcastHashJoin [codegen id : 77] -Left keys [1]: [ws_item_sk#84] -Right keys [1]: [i_item_sk#88] +Left keys [1]: [ws_item_sk#74] +Right keys [1]: [i_item_sk#78] Join condition: None (91) Project [codegen id : 77] -Output [6]: [ws_quantity#85, ws_list_price#86, ws_sold_date_sk#87, i_brand_id#89, i_class_id#90, i_category_id#91] -Input [8]: [ws_item_sk#84, ws_quantity#85, ws_list_price#86, ws_sold_date_sk#87, i_item_sk#88, i_brand_id#89, i_class_id#90, i_category_id#91] +Output [6]: [ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77, i_brand_id#79, i_class_id#80, i_category_id#81] +Input [8]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77, i_item_sk#78, i_brand_id#79, i_class_id#80, i_category_id#81] (92) ReusedExchange [Reuses operator id: 129] -Output [1]: [d_date_sk#92] +Output [1]: [d_date_sk#82] (93) BroadcastHashJoin [codegen id : 77] -Left keys [1]: [ws_sold_date_sk#87] -Right keys [1]: [d_date_sk#92] +Left keys [1]: [ws_sold_date_sk#77] +Right keys [1]: [d_date_sk#82] Join condition: None (94) Project [codegen id : 77] -Output [5]: [ws_quantity#85, ws_list_price#86, i_brand_id#89, i_class_id#90, i_category_id#91] -Input [7]: [ws_quantity#85, ws_list_price#86, ws_sold_date_sk#87, i_brand_id#89, i_class_id#90, i_category_id#91, d_date_sk#92] +Output [5]: [ws_quantity#75, ws_list_price#76, i_brand_id#79, i_class_id#80, i_category_id#81] +Input [7]: [ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77, i_brand_id#79, i_class_id#80, i_category_id#81, d_date_sk#82] (95) HashAggregate [codegen id : 77] -Input [5]: [ws_quantity#85, ws_list_price#86, i_brand_id#89, i_class_id#90, i_category_id#91] -Keys [3]: [i_brand_id#89, i_class_id#90, i_category_id#91] -Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ws_quantity#85 as decimal(12,2))) * promote_precision(cast(ws_list_price#86 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#93, isEmpty#94, count#95] -Results [6]: [i_brand_id#89, i_class_id#90, i_category_id#91, sum#96, isEmpty#97, count#98] +Input [5]: [ws_quantity#75, ws_list_price#76, i_brand_id#79, i_class_id#80, i_category_id#81] +Keys [3]: [i_brand_id#79, i_class_id#80, i_category_id#81] +Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] +Aggregate Attributes [3]: [sum#83, isEmpty#84, count#85] +Results [6]: [i_brand_id#79, i_class_id#80, i_category_id#81, sum#86, isEmpty#87, count#88] (96) Exchange -Input [6]: [i_brand_id#89, i_class_id#90, i_category_id#91, sum#96, isEmpty#97, count#98] -Arguments: hashpartitioning(i_brand_id#89, i_class_id#90, i_category_id#91, 5), ENSURE_REQUIREMENTS, [id=#99] +Input [6]: [i_brand_id#79, i_class_id#80, i_category_id#81, sum#86, isEmpty#87, count#88] +Arguments: hashpartitioning(i_brand_id#79, i_class_id#80, i_category_id#81, 5), ENSURE_REQUIREMENTS, [plan_id=11] (97) HashAggregate [codegen id : 78] -Input [6]: [i_brand_id#89, i_class_id#90, i_category_id#91, sum#96, isEmpty#97, count#98] -Keys [3]: [i_brand_id#89, i_class_id#90, i_category_id#91] -Functions [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#85 as decimal(12,2))) * promote_precision(cast(ws_list_price#86 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#85 as decimal(12,2))) * promote_precision(cast(ws_list_price#86 as decimal(12,2)))), DecimalType(18,2)))#100, count(1)#101] -Results [5]: [i_brand_id#89, i_class_id#90, i_category_id#91, sum(CheckOverflow((promote_precision(cast(ws_quantity#85 as decimal(12,2))) * promote_precision(cast(ws_list_price#86 as decimal(12,2)))), DecimalType(18,2)))#100 AS sales#102, count(1)#101 AS number_sales#103] +Input [6]: [i_brand_id#79, i_class_id#80, i_category_id#81, sum#86, isEmpty#87, count#88] +Keys [3]: [i_brand_id#79, i_class_id#80, i_category_id#81] +Functions [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2))), count(1)] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2)))#89, count(1)#90] +Results [5]: [i_brand_id#79, i_class_id#80, i_category_id#81, sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2)))#89 AS sales#91, count(1)#90 AS number_sales#92] (98) Filter [codegen id : 78] -Input [5]: [i_brand_id#89, i_class_id#90, i_category_id#91, sales#102, number_sales#103] -Condition : (isnotnull(sales#102) AND (cast(sales#102 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#60, [id=#61] as decimal(32,6)))) +Input [5]: [i_brand_id#79, i_class_id#80, i_category_id#81, sales#91, number_sales#92] +Condition : (isnotnull(sales#91) AND (cast(sales#91 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#51, [id=#52] as decimal(32,6)))) (99) Project [codegen id : 78] -Output [6]: [sales#102, number_sales#103, web AS channel#104, i_brand_id#89, i_class_id#90, i_category_id#91] -Input [5]: [i_brand_id#89, i_class_id#90, i_category_id#91, sales#102, number_sales#103] +Output [6]: [sales#91, number_sales#92, web AS channel#93, i_brand_id#79, i_class_id#80, i_category_id#81] +Input [5]: [i_brand_id#79, i_class_id#80, i_category_id#81, sales#91, number_sales#92] (100) Union (101) Expand [codegen id : 79] -Input [6]: [sales#58, number_sales#59, channel#62, i_brand_id#44, i_class_id#45, i_category_id#46] -Arguments: [[sales#58, number_sales#59, channel#62, i_brand_id#44, i_class_id#45, i_category_id#46, 0], [sales#58, number_sales#59, channel#62, i_brand_id#44, i_class_id#45, null, 1], [sales#58, number_sales#59, channel#62, i_brand_id#44, null, null, 3], [sales#58, number_sales#59, channel#62, null, null, null, 7], [sales#58, number_sales#59, null, null, null, null, 15]], [sales#58, number_sales#59, channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109] +Input [6]: [sales#49, number_sales#50, channel#53, i_brand_id#37, i_class_id#38, i_category_id#39] +Arguments: [[sales#49, number_sales#50, channel#53, i_brand_id#37, i_class_id#38, i_category_id#39, 0], [sales#49, number_sales#50, channel#53, i_brand_id#37, i_class_id#38, null, 1], [sales#49, number_sales#50, channel#53, i_brand_id#37, null, null, 3], [sales#49, number_sales#50, channel#53, null, null, null, 7], [sales#49, number_sales#50, null, null, null, null, 15]], [sales#49, number_sales#50, channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98] (102) HashAggregate [codegen id : 79] -Input [7]: [sales#58, number_sales#59, channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109] -Keys [5]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109] -Functions [2]: [partial_sum(sales#58), partial_sum(number_sales#59)] -Aggregate Attributes [3]: [sum#110, isEmpty#111, sum#112] -Results [8]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum#113, isEmpty#114, sum#115] +Input [7]: [sales#49, number_sales#50, channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98] +Keys [5]: [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98] +Functions [2]: [partial_sum(sales#49), partial_sum(number_sales#50)] +Aggregate Attributes [3]: [sum#99, isEmpty#100, sum#101] +Results [8]: [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98, sum#102, isEmpty#103, sum#104] (103) Exchange -Input [8]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum#113, isEmpty#114, sum#115] -Arguments: hashpartitioning(channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, 5), ENSURE_REQUIREMENTS, [id=#116] +Input [8]: [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98, sum#102, isEmpty#103, sum#104] +Arguments: hashpartitioning(channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98, 5), ENSURE_REQUIREMENTS, [plan_id=12] (104) HashAggregate [codegen id : 80] -Input [8]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum#113, isEmpty#114, sum#115] -Keys [5]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109] -Functions [2]: [sum(sales#58), sum(number_sales#59)] -Aggregate Attributes [2]: [sum(sales#58)#117, sum(number_sales#59)#118] -Results [6]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, sum(sales#58)#117 AS sum(sales)#119, sum(number_sales#59)#118 AS sum(number_sales)#120] +Input [8]: [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98, sum#102, isEmpty#103, sum#104] +Keys [5]: [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, spark_grouping_id#98] +Functions [2]: [sum(sales#49), sum(number_sales#50)] +Aggregate Attributes [2]: [sum(sales#49)#105, sum(number_sales#50)#106] +Results [6]: [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, sum(sales#49)#105 AS sum(sales)#107, sum(number_sales#50)#106 AS sum(number_sales)#108] (105) TakeOrderedAndProject -Input [6]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, sum(sales)#119, sum(number_sales)#120] -Arguments: 100, [channel#105 ASC NULLS FIRST, i_brand_id#106 ASC NULLS FIRST, i_class_id#107 ASC NULLS FIRST, i_category_id#108 ASC NULLS FIRST], [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, sum(sales)#119, sum(number_sales)#120] +Input [6]: [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, sum(sales)#107, sum(number_sales)#108] +Arguments: 100, [channel#94 ASC NULLS FIRST, i_brand_id#95 ASC NULLS FIRST, i_class_id#96 ASC NULLS FIRST, i_category_id#97 ASC NULLS FIRST], [channel#94, i_brand_id#95, i_class_id#96, i_category_id#97, sum(sales)#107, sum(number_sales)#108] ===== Subqueries ===== -Subquery:1 Hosting operator id = 66 Hosting Expression = Subquery scalar-subquery#60, [id=#61] +Subquery:1 Hosting operator id = 66 Hosting Expression = Subquery scalar-subquery#51, [id=#52] * HashAggregate (124) +- Exchange (123) +- * HashAggregate (122) @@ -612,96 +612,96 @@ Subquery:1 Hosting operator id = 66 Hosting Expression = Subquery scalar-subquer (106) Scan parquet default.store_sales -Output [3]: [ss_quantity#121, ss_list_price#122, ss_sold_date_sk#123] +Output [3]: [ss_quantity#109, ss_list_price#110, ss_sold_date_sk#111] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#123), dynamicpruningexpression(ss_sold_date_sk#123 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(ss_sold_date_sk#111), dynamicpruningexpression(ss_sold_date_sk#111 IN dynamicpruning#12)] ReadSchema: struct (107) ColumnarToRow [codegen id : 2] -Input [3]: [ss_quantity#121, ss_list_price#122, ss_sold_date_sk#123] +Input [3]: [ss_quantity#109, ss_list_price#110, ss_sold_date_sk#111] (108) ReusedExchange [Reuses operator id: 134] -Output [1]: [d_date_sk#124] +Output [1]: [d_date_sk#112] (109) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [ss_sold_date_sk#123] -Right keys [1]: [d_date_sk#124] +Left keys [1]: [ss_sold_date_sk#111] +Right keys [1]: [d_date_sk#112] Join condition: None (110) Project [codegen id : 2] -Output [2]: [ss_quantity#121 AS quantity#125, ss_list_price#122 AS list_price#126] -Input [4]: [ss_quantity#121, ss_list_price#122, ss_sold_date_sk#123, d_date_sk#124] +Output [2]: [ss_quantity#109 AS quantity#113, ss_list_price#110 AS list_price#114] +Input [4]: [ss_quantity#109, ss_list_price#110, ss_sold_date_sk#111, d_date_sk#112] (111) Scan parquet default.catalog_sales -Output [3]: [cs_quantity#127, cs_list_price#128, cs_sold_date_sk#129] +Output [3]: [cs_quantity#115, cs_list_price#116, cs_sold_date_sk#117] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#129), dynamicpruningexpression(cs_sold_date_sk#129 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(cs_sold_date_sk#117), dynamicpruningexpression(cs_sold_date_sk#117 IN dynamicpruning#12)] ReadSchema: struct (112) ColumnarToRow [codegen id : 4] -Input [3]: [cs_quantity#127, cs_list_price#128, cs_sold_date_sk#129] +Input [3]: [cs_quantity#115, cs_list_price#116, cs_sold_date_sk#117] (113) ReusedExchange [Reuses operator id: 134] -Output [1]: [d_date_sk#130] +Output [1]: [d_date_sk#118] (114) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [cs_sold_date_sk#129] -Right keys [1]: [d_date_sk#130] +Left keys [1]: [cs_sold_date_sk#117] +Right keys [1]: [d_date_sk#118] Join condition: None (115) Project [codegen id : 4] -Output [2]: [cs_quantity#127 AS quantity#131, cs_list_price#128 AS list_price#132] -Input [4]: [cs_quantity#127, cs_list_price#128, cs_sold_date_sk#129, d_date_sk#130] +Output [2]: [cs_quantity#115 AS quantity#119, cs_list_price#116 AS list_price#120] +Input [4]: [cs_quantity#115, cs_list_price#116, cs_sold_date_sk#117, d_date_sk#118] (116) Scan parquet default.web_sales -Output [3]: [ws_quantity#133, ws_list_price#134, ws_sold_date_sk#135] +Output [3]: [ws_quantity#121, ws_list_price#122, ws_sold_date_sk#123] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#135), dynamicpruningexpression(ws_sold_date_sk#135 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(ws_sold_date_sk#123), dynamicpruningexpression(ws_sold_date_sk#123 IN dynamicpruning#12)] ReadSchema: struct (117) ColumnarToRow [codegen id : 6] -Input [3]: [ws_quantity#133, ws_list_price#134, ws_sold_date_sk#135] +Input [3]: [ws_quantity#121, ws_list_price#122, ws_sold_date_sk#123] (118) ReusedExchange [Reuses operator id: 134] -Output [1]: [d_date_sk#136] +Output [1]: [d_date_sk#124] (119) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ws_sold_date_sk#135] -Right keys [1]: [d_date_sk#136] +Left keys [1]: [ws_sold_date_sk#123] +Right keys [1]: [d_date_sk#124] Join condition: None (120) Project [codegen id : 6] -Output [2]: [ws_quantity#133 AS quantity#137, ws_list_price#134 AS list_price#138] -Input [4]: [ws_quantity#133, ws_list_price#134, ws_sold_date_sk#135, d_date_sk#136] +Output [2]: [ws_quantity#121 AS quantity#125, ws_list_price#122 AS list_price#126] +Input [4]: [ws_quantity#121, ws_list_price#122, ws_sold_date_sk#123, d_date_sk#124] (121) Union (122) HashAggregate [codegen id : 7] -Input [2]: [quantity#125, list_price#126] +Input [2]: [quantity#113, list_price#114] Keys: [] -Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#125 as decimal(12,2))) * promote_precision(cast(list_price#126 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#139, count#140] -Results [2]: [sum#141, count#142] +Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#113 as decimal(12,2))) * promote_precision(cast(list_price#114 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#127, count#128] +Results [2]: [sum#129, count#130] (123) Exchange -Input [2]: [sum#141, count#142] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#143] +Input [2]: [sum#129, count#130] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=13] (124) HashAggregate [codegen id : 8] -Input [2]: [sum#141, count#142] +Input [2]: [sum#129, count#130] Keys: [] -Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#125 as decimal(12,2))) * promote_precision(cast(list_price#126 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#125 as decimal(12,2))) * promote_precision(cast(list_price#126 as decimal(12,2)))), DecimalType(18,2)))#144] -Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#125 as decimal(12,2))) * promote_precision(cast(list_price#126 as decimal(12,2)))), DecimalType(18,2)))#144 AS average_sales#145] +Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#113 as decimal(12,2))) * promote_precision(cast(list_price#114 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#113 as decimal(12,2))) * promote_precision(cast(list_price#114 as decimal(12,2)))), DecimalType(18,2)))#131] +Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#113 as decimal(12,2))) * promote_precision(cast(list_price#114 as decimal(12,2)))), DecimalType(18,2)))#131 AS average_sales#132] -Subquery:2 Hosting operator id = 106 Hosting Expression = ss_sold_date_sk#123 IN dynamicpruning#12 +Subquery:2 Hosting operator id = 106 Hosting Expression = ss_sold_date_sk#111 IN dynamicpruning#12 -Subquery:3 Hosting operator id = 111 Hosting Expression = cs_sold_date_sk#129 IN dynamicpruning#12 +Subquery:3 Hosting operator id = 111 Hosting Expression = cs_sold_date_sk#117 IN dynamicpruning#12 -Subquery:4 Hosting operator id = 116 Hosting Expression = ws_sold_date_sk#135 IN dynamicpruning#12 +Subquery:4 Hosting operator id = 116 Hosting Expression = ws_sold_date_sk#123 IN dynamicpruning#12 Subquery:5 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5 BroadcastExchange (129) @@ -712,26 +712,26 @@ BroadcastExchange (129) (125) Scan parquet default.date_dim -Output [3]: [d_date_sk#48, d_year#146, d_moy#147] +Output [3]: [d_date_sk#40, d_year#133, d_moy#134] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,11), IsNotNull(d_date_sk)] ReadSchema: struct (126) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#48, d_year#146, d_moy#147] +Input [3]: [d_date_sk#40, d_year#133, d_moy#134] (127) Filter [codegen id : 1] -Input [3]: [d_date_sk#48, d_year#146, d_moy#147] -Condition : ((((isnotnull(d_year#146) AND isnotnull(d_moy#147)) AND (d_year#146 = 2001)) AND (d_moy#147 = 11)) AND isnotnull(d_date_sk#48)) +Input [3]: [d_date_sk#40, d_year#133, d_moy#134] +Condition : ((((isnotnull(d_year#133) AND isnotnull(d_moy#134)) AND (d_year#133 = 2001)) AND (d_moy#134 = 11)) AND isnotnull(d_date_sk#40)) (128) Project [codegen id : 1] -Output [1]: [d_date_sk#48] -Input [3]: [d_date_sk#48, d_year#146, d_moy#147] +Output [1]: [d_date_sk#40] +Input [3]: [d_date_sk#40, d_year#133, d_moy#134] (129) BroadcastExchange -Input [1]: [d_date_sk#48] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#148] +Input [1]: [d_date_sk#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=14] Subquery:6 Hosting operator id = 7 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#12 BroadcastExchange (134) @@ -742,37 +742,37 @@ BroadcastExchange (134) (130) Scan parquet default.date_dim -Output [2]: [d_date_sk#27, d_year#149] +Output [2]: [d_date_sk#24, d_year#135] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (131) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#27, d_year#149] +Input [2]: [d_date_sk#24, d_year#135] (132) Filter [codegen id : 1] -Input [2]: [d_date_sk#27, d_year#149] -Condition : (((isnotnull(d_year#149) AND (d_year#149 >= 1999)) AND (d_year#149 <= 2001)) AND isnotnull(d_date_sk#27)) +Input [2]: [d_date_sk#24, d_year#135] +Condition : (((isnotnull(d_year#135) AND (d_year#135 >= 1999)) AND (d_year#135 <= 2001)) AND isnotnull(d_date_sk#24)) (133) Project [codegen id : 1] -Output [1]: [d_date_sk#27] -Input [2]: [d_date_sk#27, d_year#149] +Output [1]: [d_date_sk#24] +Input [2]: [d_date_sk#24, d_year#135] (134) BroadcastExchange -Input [1]: [d_date_sk#27] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#150] +Input [1]: [d_date_sk#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=15] Subquery:7 Hosting operator id = 13 Hosting Expression = cs_sold_date_sk#18 IN dynamicpruning#12 -Subquery:8 Hosting operator id = 36 Hosting Expression = ws_sold_date_sk#33 IN dynamicpruning#12 +Subquery:8 Hosting operator id = 36 Hosting Expression = ws_sold_date_sk#29 IN dynamicpruning#12 -Subquery:9 Hosting operator id = 82 Hosting Expression = ReusedSubquery Subquery scalar-subquery#60, [id=#61] +Subquery:9 Hosting operator id = 82 Hosting Expression = ReusedSubquery Subquery scalar-subquery#51, [id=#52] -Subquery:10 Hosting operator id = 68 Hosting Expression = cs_sold_date_sk#66 IN dynamicpruning#5 +Subquery:10 Hosting operator id = 68 Hosting Expression = cs_sold_date_sk#57 IN dynamicpruning#5 -Subquery:11 Hosting operator id = 98 Hosting Expression = ReusedSubquery Subquery scalar-subquery#60, [id=#61] +Subquery:11 Hosting operator id = 98 Hosting Expression = ReusedSubquery Subquery scalar-subquery#51, [id=#52] -Subquery:12 Hosting operator id = 84 Hosting Expression = ws_sold_date_sk#87 IN dynamicpruning#5 +Subquery:12 Hosting operator id = 84 Hosting Expression = ws_sold_date_sk#77 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b.sf100/explain.txt index 3f0acc0ea73be..20e5edb303893 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b.sf100/explain.txt @@ -117,437 +117,437 @@ Condition : isnotnull(ss_item_sk#1) (4) Exchange Input [4]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [4]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.item -Output [4]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10] +Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)] ReadSchema: struct (7) ColumnarToRow [codegen id : 19] -Input [4]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10] +Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] (8) Filter [codegen id : 19] -Input [4]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10] -Condition : ((isnotnull(i_brand_id#8) AND isnotnull(i_class_id#9)) AND isnotnull(i_category_id#10)) +Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] +Condition : ((isnotnull(i_brand_id#7) AND isnotnull(i_class_id#8)) AND isnotnull(i_category_id#9)) (9) Scan parquet default.store_sales -Output [2]: [ss_item_sk#11, ss_sold_date_sk#12] +Output [2]: [ss_item_sk#10, ss_sold_date_sk#11] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#12), dynamicpruningexpression(ss_sold_date_sk#12 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ss_sold_date_sk#11), dynamicpruningexpression(ss_sold_date_sk#11 IN dynamicpruning#12)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (10) ColumnarToRow [codegen id : 11] -Input [2]: [ss_item_sk#11, ss_sold_date_sk#12] +Input [2]: [ss_item_sk#10, ss_sold_date_sk#11] (11) Filter [codegen id : 11] -Input [2]: [ss_item_sk#11, ss_sold_date_sk#12] -Condition : isnotnull(ss_item_sk#11) +Input [2]: [ss_item_sk#10, ss_sold_date_sk#11] +Condition : isnotnull(ss_item_sk#10) (12) ReusedExchange [Reuses operator id: 132] -Output [1]: [d_date_sk#14] +Output [1]: [d_date_sk#13] (13) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [ss_sold_date_sk#12] -Right keys [1]: [d_date_sk#14] +Left keys [1]: [ss_sold_date_sk#11] +Right keys [1]: [d_date_sk#13] Join condition: None (14) Project [codegen id : 11] -Output [1]: [ss_item_sk#11] -Input [3]: [ss_item_sk#11, ss_sold_date_sk#12, d_date_sk#14] +Output [1]: [ss_item_sk#10] +Input [3]: [ss_item_sk#10, ss_sold_date_sk#11, d_date_sk#13] (15) Scan parquet default.item -Output [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] +Output [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)] ReadSchema: struct (16) ColumnarToRow [codegen id : 4] -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] (17) Filter [codegen id : 4] -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Condition : (((isnotnull(i_item_sk#15) AND isnotnull(i_brand_id#16)) AND isnotnull(i_class_id#17)) AND isnotnull(i_category_id#18)) +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Condition : (((isnotnull(i_item_sk#14) AND isnotnull(i_brand_id#15)) AND isnotnull(i_class_id#16)) AND isnotnull(i_category_id#17)) (18) Exchange -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Arguments: hashpartitioning(coalesce(i_brand_id#16, 0), isnull(i_brand_id#16), coalesce(i_class_id#17, 0), isnull(i_class_id#17), coalesce(i_category_id#18, 0), isnull(i_category_id#18), 5), ENSURE_REQUIREMENTS, [id=#19] +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Arguments: hashpartitioning(coalesce(i_brand_id#15, 0), isnull(i_brand_id#15), coalesce(i_class_id#16, 0), isnull(i_class_id#16), coalesce(i_category_id#17, 0), isnull(i_category_id#17), 5), ENSURE_REQUIREMENTS, [plan_id=2] (19) Sort [codegen id : 5] -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Arguments: [coalesce(i_brand_id#16, 0) ASC NULLS FIRST, isnull(i_brand_id#16) ASC NULLS FIRST, coalesce(i_class_id#17, 0) ASC NULLS FIRST, isnull(i_class_id#17) ASC NULLS FIRST, coalesce(i_category_id#18, 0) ASC NULLS FIRST, isnull(i_category_id#18) ASC NULLS FIRST], false, 0 +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Arguments: [coalesce(i_brand_id#15, 0) ASC NULLS FIRST, isnull(i_brand_id#15) ASC NULLS FIRST, coalesce(i_class_id#16, 0) ASC NULLS FIRST, isnull(i_class_id#16) ASC NULLS FIRST, coalesce(i_category_id#17, 0) ASC NULLS FIRST, isnull(i_category_id#17) ASC NULLS FIRST], false, 0 (20) Scan parquet default.catalog_sales -Output [2]: [cs_item_sk#20, cs_sold_date_sk#21] +Output [2]: [cs_item_sk#18, cs_sold_date_sk#19] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#21), dynamicpruningexpression(cs_sold_date_sk#21 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(cs_sold_date_sk#19), dynamicpruningexpression(cs_sold_date_sk#19 IN dynamicpruning#12)] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 8] -Input [2]: [cs_item_sk#20, cs_sold_date_sk#21] +Input [2]: [cs_item_sk#18, cs_sold_date_sk#19] (22) Filter [codegen id : 8] -Input [2]: [cs_item_sk#20, cs_sold_date_sk#21] -Condition : isnotnull(cs_item_sk#20) +Input [2]: [cs_item_sk#18, cs_sold_date_sk#19] +Condition : isnotnull(cs_item_sk#18) (23) ReusedExchange [Reuses operator id: 132] -Output [1]: [d_date_sk#22] +Output [1]: [d_date_sk#20] (24) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_sold_date_sk#21] -Right keys [1]: [d_date_sk#22] +Left keys [1]: [cs_sold_date_sk#19] +Right keys [1]: [d_date_sk#20] Join condition: None (25) Project [codegen id : 8] -Output [1]: [cs_item_sk#20] -Input [3]: [cs_item_sk#20, cs_sold_date_sk#21, d_date_sk#22] +Output [1]: [cs_item_sk#18] +Input [3]: [cs_item_sk#18, cs_sold_date_sk#19, d_date_sk#20] (26) Scan parquet default.item -Output [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] +Output [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 7] -Input [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] +Input [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] (28) Filter [codegen id : 7] -Input [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] -Condition : isnotnull(i_item_sk#23) +Input [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] +Condition : isnotnull(i_item_sk#21) (29) BroadcastExchange -Input [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#27] +Input [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (30) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_item_sk#20] -Right keys [1]: [i_item_sk#23] +Left keys [1]: [cs_item_sk#18] +Right keys [1]: [i_item_sk#21] Join condition: None (31) Project [codegen id : 8] -Output [3]: [i_brand_id#24, i_class_id#25, i_category_id#26] -Input [5]: [cs_item_sk#20, i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] +Output [3]: [i_brand_id#22, i_class_id#23, i_category_id#24] +Input [5]: [cs_item_sk#18, i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] (32) Exchange -Input [3]: [i_brand_id#24, i_class_id#25, i_category_id#26] -Arguments: hashpartitioning(coalesce(i_brand_id#24, 0), isnull(i_brand_id#24), coalesce(i_class_id#25, 0), isnull(i_class_id#25), coalesce(i_category_id#26, 0), isnull(i_category_id#26), 5), ENSURE_REQUIREMENTS, [id=#28] +Input [3]: [i_brand_id#22, i_class_id#23, i_category_id#24] +Arguments: hashpartitioning(coalesce(i_brand_id#22, 0), isnull(i_brand_id#22), coalesce(i_class_id#23, 0), isnull(i_class_id#23), coalesce(i_category_id#24, 0), isnull(i_category_id#24), 5), ENSURE_REQUIREMENTS, [plan_id=4] (33) Sort [codegen id : 9] -Input [3]: [i_brand_id#24, i_class_id#25, i_category_id#26] -Arguments: [coalesce(i_brand_id#24, 0) ASC NULLS FIRST, isnull(i_brand_id#24) ASC NULLS FIRST, coalesce(i_class_id#25, 0) ASC NULLS FIRST, isnull(i_class_id#25) ASC NULLS FIRST, coalesce(i_category_id#26, 0) ASC NULLS FIRST, isnull(i_category_id#26) ASC NULLS FIRST], false, 0 +Input [3]: [i_brand_id#22, i_class_id#23, i_category_id#24] +Arguments: [coalesce(i_brand_id#22, 0) ASC NULLS FIRST, isnull(i_brand_id#22) ASC NULLS FIRST, coalesce(i_class_id#23, 0) ASC NULLS FIRST, isnull(i_class_id#23) ASC NULLS FIRST, coalesce(i_category_id#24, 0) ASC NULLS FIRST, isnull(i_category_id#24) ASC NULLS FIRST], false, 0 (34) SortMergeJoin [codegen id : 10] -Left keys [6]: [coalesce(i_brand_id#16, 0), isnull(i_brand_id#16), coalesce(i_class_id#17, 0), isnull(i_class_id#17), coalesce(i_category_id#18, 0), isnull(i_category_id#18)] -Right keys [6]: [coalesce(i_brand_id#24, 0), isnull(i_brand_id#24), coalesce(i_class_id#25, 0), isnull(i_class_id#25), coalesce(i_category_id#26, 0), isnull(i_category_id#26)] +Left keys [6]: [coalesce(i_brand_id#15, 0), isnull(i_brand_id#15), coalesce(i_class_id#16, 0), isnull(i_class_id#16), coalesce(i_category_id#17, 0), isnull(i_category_id#17)] +Right keys [6]: [coalesce(i_brand_id#22, 0), isnull(i_brand_id#22), coalesce(i_class_id#23, 0), isnull(i_class_id#23), coalesce(i_category_id#24, 0), isnull(i_category_id#24)] Join condition: None (35) BroadcastExchange -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#29] +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (36) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [ss_item_sk#11] -Right keys [1]: [i_item_sk#15] +Left keys [1]: [ss_item_sk#10] +Right keys [1]: [i_item_sk#14] Join condition: None (37) Project [codegen id : 11] -Output [3]: [i_brand_id#16 AS brand_id#30, i_class_id#17 AS class_id#31, i_category_id#18 AS category_id#32] -Input [5]: [ss_item_sk#11, i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] +Output [3]: [i_brand_id#15 AS brand_id#25, i_class_id#16 AS class_id#26, i_category_id#17 AS category_id#27] +Input [5]: [ss_item_sk#10, i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] (38) HashAggregate [codegen id : 11] -Input [3]: [brand_id#30, class_id#31, category_id#32] -Keys [3]: [brand_id#30, class_id#31, category_id#32] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#30, class_id#31, category_id#32] +Results [3]: [brand_id#25, class_id#26, category_id#27] (39) Exchange -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: hashpartitioning(brand_id#30, class_id#31, category_id#32, 5), ENSURE_REQUIREMENTS, [id=#33] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: hashpartitioning(brand_id#25, class_id#26, category_id#27, 5), ENSURE_REQUIREMENTS, [plan_id=6] (40) HashAggregate [codegen id : 12] -Input [3]: [brand_id#30, class_id#31, category_id#32] -Keys [3]: [brand_id#30, class_id#31, category_id#32] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#30, class_id#31, category_id#32] +Results [3]: [brand_id#25, class_id#26, category_id#27] (41) Exchange -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: hashpartitioning(coalesce(brand_id#30, 0), isnull(brand_id#30), coalesce(class_id#31, 0), isnull(class_id#31), coalesce(category_id#32, 0), isnull(category_id#32), 5), ENSURE_REQUIREMENTS, [id=#34] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: hashpartitioning(coalesce(brand_id#25, 0), isnull(brand_id#25), coalesce(class_id#26, 0), isnull(class_id#26), coalesce(category_id#27, 0), isnull(category_id#27), 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) Sort [codegen id : 13] -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: [coalesce(brand_id#30, 0) ASC NULLS FIRST, isnull(brand_id#30) ASC NULLS FIRST, coalesce(class_id#31, 0) ASC NULLS FIRST, isnull(class_id#31) ASC NULLS FIRST, coalesce(category_id#32, 0) ASC NULLS FIRST, isnull(category_id#32) ASC NULLS FIRST], false, 0 +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: [coalesce(brand_id#25, 0) ASC NULLS FIRST, isnull(brand_id#25) ASC NULLS FIRST, coalesce(class_id#26, 0) ASC NULLS FIRST, isnull(class_id#26) ASC NULLS FIRST, coalesce(category_id#27, 0) ASC NULLS FIRST, isnull(category_id#27) ASC NULLS FIRST], false, 0 (43) Scan parquet default.web_sales -Output [2]: [ws_item_sk#35, ws_sold_date_sk#36] +Output [2]: [ws_item_sk#28, ws_sold_date_sk#29] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#36), dynamicpruningexpression(ws_sold_date_sk#36 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ws_sold_date_sk#29), dynamicpruningexpression(ws_sold_date_sk#29 IN dynamicpruning#12)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 16] -Input [2]: [ws_item_sk#35, ws_sold_date_sk#36] +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] (45) Filter [codegen id : 16] -Input [2]: [ws_item_sk#35, ws_sold_date_sk#36] -Condition : isnotnull(ws_item_sk#35) +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] +Condition : isnotnull(ws_item_sk#28) (46) ReusedExchange [Reuses operator id: 132] -Output [1]: [d_date_sk#37] +Output [1]: [d_date_sk#30] (47) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [ws_sold_date_sk#36] -Right keys [1]: [d_date_sk#37] +Left keys [1]: [ws_sold_date_sk#29] +Right keys [1]: [d_date_sk#30] Join condition: None (48) Project [codegen id : 16] -Output [1]: [ws_item_sk#35] -Input [3]: [ws_item_sk#35, ws_sold_date_sk#36, d_date_sk#37] +Output [1]: [ws_item_sk#28] +Input [3]: [ws_item_sk#28, ws_sold_date_sk#29, d_date_sk#30] (49) ReusedExchange [Reuses operator id: 29] -Output [4]: [i_item_sk#38, i_brand_id#39, i_class_id#40, i_category_id#41] +Output [4]: [i_item_sk#31, i_brand_id#32, i_class_id#33, i_category_id#34] (50) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [ws_item_sk#35] -Right keys [1]: [i_item_sk#38] +Left keys [1]: [ws_item_sk#28] +Right keys [1]: [i_item_sk#31] Join condition: None (51) Project [codegen id : 16] -Output [3]: [i_brand_id#39, i_class_id#40, i_category_id#41] -Input [5]: [ws_item_sk#35, i_item_sk#38, i_brand_id#39, i_class_id#40, i_category_id#41] +Output [3]: [i_brand_id#32, i_class_id#33, i_category_id#34] +Input [5]: [ws_item_sk#28, i_item_sk#31, i_brand_id#32, i_class_id#33, i_category_id#34] (52) Exchange -Input [3]: [i_brand_id#39, i_class_id#40, i_category_id#41] -Arguments: hashpartitioning(coalesce(i_brand_id#39, 0), isnull(i_brand_id#39), coalesce(i_class_id#40, 0), isnull(i_class_id#40), coalesce(i_category_id#41, 0), isnull(i_category_id#41), 5), ENSURE_REQUIREMENTS, [id=#42] +Input [3]: [i_brand_id#32, i_class_id#33, i_category_id#34] +Arguments: hashpartitioning(coalesce(i_brand_id#32, 0), isnull(i_brand_id#32), coalesce(i_class_id#33, 0), isnull(i_class_id#33), coalesce(i_category_id#34, 0), isnull(i_category_id#34), 5), ENSURE_REQUIREMENTS, [plan_id=8] (53) Sort [codegen id : 17] -Input [3]: [i_brand_id#39, i_class_id#40, i_category_id#41] -Arguments: [coalesce(i_brand_id#39, 0) ASC NULLS FIRST, isnull(i_brand_id#39) ASC NULLS FIRST, coalesce(i_class_id#40, 0) ASC NULLS FIRST, isnull(i_class_id#40) ASC NULLS FIRST, coalesce(i_category_id#41, 0) ASC NULLS FIRST, isnull(i_category_id#41) ASC NULLS FIRST], false, 0 +Input [3]: [i_brand_id#32, i_class_id#33, i_category_id#34] +Arguments: [coalesce(i_brand_id#32, 0) ASC NULLS FIRST, isnull(i_brand_id#32) ASC NULLS FIRST, coalesce(i_class_id#33, 0) ASC NULLS FIRST, isnull(i_class_id#33) ASC NULLS FIRST, coalesce(i_category_id#34, 0) ASC NULLS FIRST, isnull(i_category_id#34) ASC NULLS FIRST], false, 0 (54) SortMergeJoin [codegen id : 18] -Left keys [6]: [coalesce(brand_id#30, 0), isnull(brand_id#30), coalesce(class_id#31, 0), isnull(class_id#31), coalesce(category_id#32, 0), isnull(category_id#32)] -Right keys [6]: [coalesce(i_brand_id#39, 0), isnull(i_brand_id#39), coalesce(i_class_id#40, 0), isnull(i_class_id#40), coalesce(i_category_id#41, 0), isnull(i_category_id#41)] +Left keys [6]: [coalesce(brand_id#25, 0), isnull(brand_id#25), coalesce(class_id#26, 0), isnull(class_id#26), coalesce(category_id#27, 0), isnull(category_id#27)] +Right keys [6]: [coalesce(i_brand_id#32, 0), isnull(i_brand_id#32), coalesce(i_class_id#33, 0), isnull(i_class_id#33), coalesce(i_category_id#34, 0), isnull(i_category_id#34)] Join condition: None (55) BroadcastExchange -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [id=#43] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [plan_id=9] (56) BroadcastHashJoin [codegen id : 19] -Left keys [3]: [i_brand_id#8, i_class_id#9, i_category_id#10] -Right keys [3]: [brand_id#30, class_id#31, category_id#32] +Left keys [3]: [i_brand_id#7, i_class_id#8, i_category_id#9] +Right keys [3]: [brand_id#25, class_id#26, category_id#27] Join condition: None (57) Project [codegen id : 19] -Output [1]: [i_item_sk#7 AS ss_item_sk#44] -Input [7]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, brand_id#30, class_id#31, category_id#32] +Output [1]: [i_item_sk#6 AS ss_item_sk#35] +Input [7]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9, brand_id#25, class_id#26, category_id#27] (58) Exchange -Input [1]: [ss_item_sk#44] -Arguments: hashpartitioning(ss_item_sk#44, 5), ENSURE_REQUIREMENTS, [id=#45] +Input [1]: [ss_item_sk#35] +Arguments: hashpartitioning(ss_item_sk#35, 5), ENSURE_REQUIREMENTS, [plan_id=10] (59) Sort [codegen id : 20] -Input [1]: [ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#35] +Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0 (60) SortMergeJoin [codegen id : 43] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [ss_item_sk#44] +Right keys [1]: [ss_item_sk#35] Join condition: None (61) ReusedExchange [Reuses operator id: 123] -Output [1]: [d_date_sk#46] +Output [1]: [d_date_sk#36] (62) BroadcastHashJoin [codegen id : 43] Left keys [1]: [ss_sold_date_sk#4] -Right keys [1]: [d_date_sk#46] +Right keys [1]: [d_date_sk#36] Join condition: None (63) Project [codegen id : 43] Output [3]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3] -Input [5]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, d_date_sk#46] +Input [5]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, d_date_sk#36] (64) Scan parquet default.item -Output [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] +Output [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)] ReadSchema: struct (65) ColumnarToRow [codegen id : 22] -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] (66) Filter [codegen id : 22] -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Condition : (((isnotnull(i_item_sk#47) AND isnotnull(i_brand_id#48)) AND isnotnull(i_class_id#49)) AND isnotnull(i_category_id#50)) +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Condition : (((isnotnull(i_item_sk#37) AND isnotnull(i_brand_id#38)) AND isnotnull(i_class_id#39)) AND isnotnull(i_category_id#40)) (67) Exchange -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Arguments: hashpartitioning(i_item_sk#47, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Arguments: hashpartitioning(i_item_sk#37, 5), ENSURE_REQUIREMENTS, [plan_id=11] (68) Sort [codegen id : 23] -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Arguments: [i_item_sk#47 ASC NULLS FIRST], false, 0 +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Arguments: [i_item_sk#37 ASC NULLS FIRST], false, 0 (69) ReusedExchange [Reuses operator id: 58] -Output [1]: [ss_item_sk#44] +Output [1]: [ss_item_sk#35] (70) Sort [codegen id : 41] -Input [1]: [ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#35] +Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0 (71) SortMergeJoin [codegen id : 42] -Left keys [1]: [i_item_sk#47] -Right keys [1]: [ss_item_sk#44] +Left keys [1]: [i_item_sk#37] +Right keys [1]: [ss_item_sk#35] Join condition: None (72) BroadcastExchange -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#52] +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=12] (73) BroadcastHashJoin [codegen id : 43] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#47] +Right keys [1]: [i_item_sk#37] Join condition: None (74) Project [codegen id : 43] -Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#48, i_class_id#49, i_category_id#50] -Input [7]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] +Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#38, i_class_id#39, i_category_id#40] +Input [7]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] (75) HashAggregate [codegen id : 43] -Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#48, i_class_id#49, i_category_id#50] -Keys [3]: [i_brand_id#48, i_class_id#49, i_category_id#50] +Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#38, i_class_id#39, i_category_id#40] +Keys [3]: [i_brand_id#38, i_class_id#39, i_category_id#40] Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#53, isEmpty#54, count#55] -Results [6]: [i_brand_id#48, i_class_id#49, i_category_id#50, sum#56, isEmpty#57, count#58] +Aggregate Attributes [3]: [sum#41, isEmpty#42, count#43] +Results [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#44, isEmpty#45, count#46] (76) Exchange -Input [6]: [i_brand_id#48, i_class_id#49, i_category_id#50, sum#56, isEmpty#57, count#58] -Arguments: hashpartitioning(i_brand_id#48, i_class_id#49, i_category_id#50, 5), ENSURE_REQUIREMENTS, [id=#59] +Input [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#44, isEmpty#45, count#46] +Arguments: hashpartitioning(i_brand_id#38, i_class_id#39, i_category_id#40, 5), ENSURE_REQUIREMENTS, [plan_id=13] (77) HashAggregate [codegen id : 88] -Input [6]: [i_brand_id#48, i_class_id#49, i_category_id#50, sum#56, isEmpty#57, count#58] -Keys [3]: [i_brand_id#48, i_class_id#49, i_category_id#50] +Input [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#44, isEmpty#45, count#46] +Keys [3]: [i_brand_id#38, i_class_id#39, i_category_id#40] Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#60, count(1)#61] -Results [6]: [store AS channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#60 AS sales#63, count(1)#61 AS number_sales#64] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47, count(1)#48] +Results [6]: [store AS channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47 AS sales#50, count(1)#48 AS number_sales#51] (78) Filter [codegen id : 88] -Input [6]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sales#63, number_sales#64] -Condition : (isnotnull(sales#63) AND (cast(sales#63 as decimal(32,6)) > cast(Subquery scalar-subquery#65, [id=#66] as decimal(32,6)))) +Input [6]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sales#50, number_sales#51] +Condition : (isnotnull(sales#50) AND (cast(sales#50 as decimal(32,6)) > cast(Subquery scalar-subquery#52, [id=#53] as decimal(32,6)))) (79) Scan parquet default.store_sales -Output [4]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69, ss_sold_date_sk#70] +Output [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#70), dynamicpruningexpression(ss_sold_date_sk#70 IN dynamicpruning#71)] +PartitionFilters: [isnotnull(ss_sold_date_sk#57), dynamicpruningexpression(ss_sold_date_sk#57 IN dynamicpruning#58)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (80) ColumnarToRow [codegen id : 44] -Input [4]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69, ss_sold_date_sk#70] +Input [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] (81) Filter [codegen id : 44] -Input [4]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69, ss_sold_date_sk#70] -Condition : isnotnull(ss_item_sk#67) +Input [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] +Condition : isnotnull(ss_item_sk#54) (82) Exchange -Input [4]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69, ss_sold_date_sk#70] -Arguments: hashpartitioning(ss_item_sk#67, 5), ENSURE_REQUIREMENTS, [id=#72] +Input [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] +Arguments: hashpartitioning(ss_item_sk#54, 5), ENSURE_REQUIREMENTS, [plan_id=14] (83) Sort [codegen id : 45] -Input [4]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69, ss_sold_date_sk#70] -Arguments: [ss_item_sk#67 ASC NULLS FIRST], false, 0 +Input [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] +Arguments: [ss_item_sk#54 ASC NULLS FIRST], false, 0 (84) ReusedExchange [Reuses operator id: 58] -Output [1]: [ss_item_sk#44] +Output [1]: [ss_item_sk#35] (85) Sort [codegen id : 63] -Input [1]: [ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#35] +Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0 (86) SortMergeJoin [codegen id : 86] -Left keys [1]: [ss_item_sk#67] -Right keys [1]: [ss_item_sk#44] +Left keys [1]: [ss_item_sk#54] +Right keys [1]: [ss_item_sk#35] Join condition: None (87) ReusedExchange [Reuses operator id: 137] -Output [1]: [d_date_sk#73] +Output [1]: [d_date_sk#59] (88) BroadcastHashJoin [codegen id : 86] -Left keys [1]: [ss_sold_date_sk#70] -Right keys [1]: [d_date_sk#73] +Left keys [1]: [ss_sold_date_sk#57] +Right keys [1]: [d_date_sk#59] Join condition: None (89) Project [codegen id : 86] -Output [3]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69] -Input [5]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69, ss_sold_date_sk#70, d_date_sk#73] +Output [3]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56] +Input [5]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57, d_date_sk#59] (90) ReusedExchange [Reuses operator id: 72] -Output [4]: [i_item_sk#74, i_brand_id#75, i_class_id#76, i_category_id#77] +Output [4]: [i_item_sk#60, i_brand_id#61, i_class_id#62, i_category_id#63] (91) BroadcastHashJoin [codegen id : 86] -Left keys [1]: [ss_item_sk#67] -Right keys [1]: [i_item_sk#74] +Left keys [1]: [ss_item_sk#54] +Right keys [1]: [i_item_sk#60] Join condition: None (92) Project [codegen id : 86] -Output [5]: [ss_quantity#68, ss_list_price#69, i_brand_id#75, i_class_id#76, i_category_id#77] -Input [7]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69, i_item_sk#74, i_brand_id#75, i_class_id#76, i_category_id#77] +Output [5]: [ss_quantity#55, ss_list_price#56, i_brand_id#61, i_class_id#62, i_category_id#63] +Input [7]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, i_item_sk#60, i_brand_id#61, i_class_id#62, i_category_id#63] (93) HashAggregate [codegen id : 86] -Input [5]: [ss_quantity#68, ss_list_price#69, i_brand_id#75, i_class_id#76, i_category_id#77] -Keys [3]: [i_brand_id#75, i_class_id#76, i_category_id#77] -Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#68 as decimal(12,2))) * promote_precision(cast(ss_list_price#69 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#78, isEmpty#79, count#80] -Results [6]: [i_brand_id#75, i_class_id#76, i_category_id#77, sum#81, isEmpty#82, count#83] +Input [5]: [ss_quantity#55, ss_list_price#56, i_brand_id#61, i_class_id#62, i_category_id#63] +Keys [3]: [i_brand_id#61, i_class_id#62, i_category_id#63] +Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] +Aggregate Attributes [3]: [sum#64, isEmpty#65, count#66] +Results [6]: [i_brand_id#61, i_class_id#62, i_category_id#63, sum#67, isEmpty#68, count#69] (94) Exchange -Input [6]: [i_brand_id#75, i_class_id#76, i_category_id#77, sum#81, isEmpty#82, count#83] -Arguments: hashpartitioning(i_brand_id#75, i_class_id#76, i_category_id#77, 5), ENSURE_REQUIREMENTS, [id=#84] +Input [6]: [i_brand_id#61, i_class_id#62, i_category_id#63, sum#67, isEmpty#68, count#69] +Arguments: hashpartitioning(i_brand_id#61, i_class_id#62, i_category_id#63, 5), ENSURE_REQUIREMENTS, [plan_id=15] (95) HashAggregate [codegen id : 87] -Input [6]: [i_brand_id#75, i_class_id#76, i_category_id#77, sum#81, isEmpty#82, count#83] -Keys [3]: [i_brand_id#75, i_class_id#76, i_category_id#77] -Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#68 as decimal(12,2))) * promote_precision(cast(ss_list_price#69 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#68 as decimal(12,2))) * promote_precision(cast(ss_list_price#69 as decimal(12,2)))), DecimalType(18,2)))#85, count(1)#86] -Results [6]: [store AS channel#87, i_brand_id#75, i_class_id#76, i_category_id#77, sum(CheckOverflow((promote_precision(cast(ss_quantity#68 as decimal(12,2))) * promote_precision(cast(ss_list_price#69 as decimal(12,2)))), DecimalType(18,2)))#85 AS sales#88, count(1)#86 AS number_sales#89] +Input [6]: [i_brand_id#61, i_class_id#62, i_category_id#63, sum#67, isEmpty#68, count#69] +Keys [3]: [i_brand_id#61, i_class_id#62, i_category_id#63] +Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2))), count(1)] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#70, count(1)#71] +Results [6]: [store AS channel#72, i_brand_id#61, i_class_id#62, i_category_id#63, sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#70 AS sales#73, count(1)#71 AS number_sales#74] (96) Filter [codegen id : 87] -Input [6]: [channel#87, i_brand_id#75, i_class_id#76, i_category_id#77, sales#88, number_sales#89] -Condition : (isnotnull(sales#88) AND (cast(sales#88 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#65, [id=#66] as decimal(32,6)))) +Input [6]: [channel#72, i_brand_id#61, i_class_id#62, i_category_id#63, sales#73, number_sales#74] +Condition : (isnotnull(sales#73) AND (cast(sales#73 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#52, [id=#53] as decimal(32,6)))) (97) BroadcastExchange -Input [6]: [channel#87, i_brand_id#75, i_class_id#76, i_category_id#77, sales#88, number_sales#89] -Arguments: HashedRelationBroadcastMode(List(input[1, int, true], input[2, int, true], input[3, int, true]),false), [id=#90] +Input [6]: [channel#72, i_brand_id#61, i_class_id#62, i_category_id#63, sales#73, number_sales#74] +Arguments: HashedRelationBroadcastMode(List(input[1, int, true], input[2, int, true], input[3, int, true]),false), [plan_id=16] (98) BroadcastHashJoin [codegen id : 88] -Left keys [3]: [i_brand_id#48, i_class_id#49, i_category_id#50] -Right keys [3]: [i_brand_id#75, i_class_id#76, i_category_id#77] +Left keys [3]: [i_brand_id#38, i_class_id#39, i_category_id#40] +Right keys [3]: [i_brand_id#61, i_class_id#62, i_category_id#63] Join condition: None (99) TakeOrderedAndProject -Input [12]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sales#63, number_sales#64, channel#87, i_brand_id#75, i_class_id#76, i_category_id#77, sales#88, number_sales#89] -Arguments: 100, [i_brand_id#48 ASC NULLS FIRST, i_class_id#49 ASC NULLS FIRST, i_category_id#50 ASC NULLS FIRST], [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sales#63, number_sales#64, channel#87, i_brand_id#75, i_class_id#76, i_category_id#77, sales#88, number_sales#89] +Input [12]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sales#50, number_sales#51, channel#72, i_brand_id#61, i_class_id#62, i_category_id#63, sales#73, number_sales#74] +Arguments: 100, [i_brand_id#38 ASC NULLS FIRST, i_class_id#39 ASC NULLS FIRST, i_category_id#40 ASC NULLS FIRST], [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sales#50, number_sales#51, channel#72, i_brand_id#61, i_class_id#62, i_category_id#63, sales#73, number_sales#74] ===== Subqueries ===== -Subquery:1 Hosting operator id = 78 Hosting Expression = Subquery scalar-subquery#65, [id=#66] +Subquery:1 Hosting operator id = 78 Hosting Expression = Subquery scalar-subquery#52, [id=#53] * HashAggregate (118) +- Exchange (117) +- * HashAggregate (116) @@ -570,96 +570,96 @@ Subquery:1 Hosting operator id = 78 Hosting Expression = Subquery scalar-subquer (100) Scan parquet default.store_sales -Output [3]: [ss_quantity#91, ss_list_price#92, ss_sold_date_sk#93] +Output [3]: [ss_quantity#75, ss_list_price#76, ss_sold_date_sk#77] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#93), dynamicpruningexpression(ss_sold_date_sk#93 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ss_sold_date_sk#77), dynamicpruningexpression(ss_sold_date_sk#77 IN dynamicpruning#12)] ReadSchema: struct (101) ColumnarToRow [codegen id : 2] -Input [3]: [ss_quantity#91, ss_list_price#92, ss_sold_date_sk#93] +Input [3]: [ss_quantity#75, ss_list_price#76, ss_sold_date_sk#77] (102) ReusedExchange [Reuses operator id: 132] -Output [1]: [d_date_sk#94] +Output [1]: [d_date_sk#78] (103) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [ss_sold_date_sk#93] -Right keys [1]: [d_date_sk#94] +Left keys [1]: [ss_sold_date_sk#77] +Right keys [1]: [d_date_sk#78] Join condition: None (104) Project [codegen id : 2] -Output [2]: [ss_quantity#91 AS quantity#95, ss_list_price#92 AS list_price#96] -Input [4]: [ss_quantity#91, ss_list_price#92, ss_sold_date_sk#93, d_date_sk#94] +Output [2]: [ss_quantity#75 AS quantity#79, ss_list_price#76 AS list_price#80] +Input [4]: [ss_quantity#75, ss_list_price#76, ss_sold_date_sk#77, d_date_sk#78] (105) Scan parquet default.catalog_sales -Output [3]: [cs_quantity#97, cs_list_price#98, cs_sold_date_sk#99] +Output [3]: [cs_quantity#81, cs_list_price#82, cs_sold_date_sk#83] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#99), dynamicpruningexpression(cs_sold_date_sk#99 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(cs_sold_date_sk#83), dynamicpruningexpression(cs_sold_date_sk#83 IN dynamicpruning#12)] ReadSchema: struct (106) ColumnarToRow [codegen id : 4] -Input [3]: [cs_quantity#97, cs_list_price#98, cs_sold_date_sk#99] +Input [3]: [cs_quantity#81, cs_list_price#82, cs_sold_date_sk#83] (107) ReusedExchange [Reuses operator id: 132] -Output [1]: [d_date_sk#100] +Output [1]: [d_date_sk#84] (108) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [cs_sold_date_sk#99] -Right keys [1]: [d_date_sk#100] +Left keys [1]: [cs_sold_date_sk#83] +Right keys [1]: [d_date_sk#84] Join condition: None (109) Project [codegen id : 4] -Output [2]: [cs_quantity#97 AS quantity#101, cs_list_price#98 AS list_price#102] -Input [4]: [cs_quantity#97, cs_list_price#98, cs_sold_date_sk#99, d_date_sk#100] +Output [2]: [cs_quantity#81 AS quantity#85, cs_list_price#82 AS list_price#86] +Input [4]: [cs_quantity#81, cs_list_price#82, cs_sold_date_sk#83, d_date_sk#84] (110) Scan parquet default.web_sales -Output [3]: [ws_quantity#103, ws_list_price#104, ws_sold_date_sk#105] +Output [3]: [ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#105), dynamicpruningexpression(ws_sold_date_sk#105 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ws_sold_date_sk#89), dynamicpruningexpression(ws_sold_date_sk#89 IN dynamicpruning#12)] ReadSchema: struct (111) ColumnarToRow [codegen id : 6] -Input [3]: [ws_quantity#103, ws_list_price#104, ws_sold_date_sk#105] +Input [3]: [ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89] (112) ReusedExchange [Reuses operator id: 132] -Output [1]: [d_date_sk#106] +Output [1]: [d_date_sk#90] (113) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ws_sold_date_sk#105] -Right keys [1]: [d_date_sk#106] +Left keys [1]: [ws_sold_date_sk#89] +Right keys [1]: [d_date_sk#90] Join condition: None (114) Project [codegen id : 6] -Output [2]: [ws_quantity#103 AS quantity#107, ws_list_price#104 AS list_price#108] -Input [4]: [ws_quantity#103, ws_list_price#104, ws_sold_date_sk#105, d_date_sk#106] +Output [2]: [ws_quantity#87 AS quantity#91, ws_list_price#88 AS list_price#92] +Input [4]: [ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89, d_date_sk#90] (115) Union (116) HashAggregate [codegen id : 7] -Input [2]: [quantity#95, list_price#96] +Input [2]: [quantity#79, list_price#80] Keys: [] -Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#95 as decimal(12,2))) * promote_precision(cast(list_price#96 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#109, count#110] -Results [2]: [sum#111, count#112] +Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#93, count#94] +Results [2]: [sum#95, count#96] (117) Exchange -Input [2]: [sum#111, count#112] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#113] +Input [2]: [sum#95, count#96] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=17] (118) HashAggregate [codegen id : 8] -Input [2]: [sum#111, count#112] +Input [2]: [sum#95, count#96] Keys: [] -Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#95 as decimal(12,2))) * promote_precision(cast(list_price#96 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#95 as decimal(12,2))) * promote_precision(cast(list_price#96 as decimal(12,2)))), DecimalType(18,2)))#114] -Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#95 as decimal(12,2))) * promote_precision(cast(list_price#96 as decimal(12,2)))), DecimalType(18,2)))#114 AS average_sales#115] +Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))#97] +Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))#97 AS average_sales#98] -Subquery:2 Hosting operator id = 100 Hosting Expression = ss_sold_date_sk#93 IN dynamicpruning#13 +Subquery:2 Hosting operator id = 100 Hosting Expression = ss_sold_date_sk#77 IN dynamicpruning#12 -Subquery:3 Hosting operator id = 105 Hosting Expression = cs_sold_date_sk#99 IN dynamicpruning#13 +Subquery:3 Hosting operator id = 105 Hosting Expression = cs_sold_date_sk#83 IN dynamicpruning#12 -Subquery:4 Hosting operator id = 110 Hosting Expression = ws_sold_date_sk#105 IN dynamicpruning#13 +Subquery:4 Hosting operator id = 110 Hosting Expression = ws_sold_date_sk#89 IN dynamicpruning#12 Subquery:5 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5 BroadcastExchange (123) @@ -670,28 +670,28 @@ BroadcastExchange (123) (119) Scan parquet default.date_dim -Output [2]: [d_date_sk#46, d_week_seq#116] +Output [2]: [d_date_sk#36, d_week_seq#99] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date_sk)] ReadSchema: struct (120) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#46, d_week_seq#116] +Input [2]: [d_date_sk#36, d_week_seq#99] (121) Filter [codegen id : 1] -Input [2]: [d_date_sk#46, d_week_seq#116] -Condition : ((isnotnull(d_week_seq#116) AND (d_week_seq#116 = Subquery scalar-subquery#117, [id=#118])) AND isnotnull(d_date_sk#46)) +Input [2]: [d_date_sk#36, d_week_seq#99] +Condition : ((isnotnull(d_week_seq#99) AND (d_week_seq#99 = Subquery scalar-subquery#100, [id=#101])) AND isnotnull(d_date_sk#36)) (122) Project [codegen id : 1] -Output [1]: [d_date_sk#46] -Input [2]: [d_date_sk#46, d_week_seq#116] +Output [1]: [d_date_sk#36] +Input [2]: [d_date_sk#36, d_week_seq#99] (123) BroadcastExchange -Input [1]: [d_date_sk#46] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#119] +Input [1]: [d_date_sk#36] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=18] -Subquery:6 Hosting operator id = 121 Hosting Expression = Subquery scalar-subquery#117, [id=#118] +Subquery:6 Hosting operator id = 121 Hosting Expression = Subquery scalar-subquery#100, [id=#101] * Project (127) +- * Filter (126) +- * ColumnarToRow (125) @@ -699,24 +699,24 @@ Subquery:6 Hosting operator id = 121 Hosting Expression = Subquery scalar-subque (124) Scan parquet default.date_dim -Output [4]: [d_week_seq#120, d_year#121, d_moy#122, d_dom#123] +Output [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), IsNotNull(d_dom), EqualTo(d_year,2000), EqualTo(d_moy,12), EqualTo(d_dom,11)] ReadSchema: struct (125) ColumnarToRow [codegen id : 1] -Input [4]: [d_week_seq#120, d_year#121, d_moy#122, d_dom#123] +Input [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] (126) Filter [codegen id : 1] -Input [4]: [d_week_seq#120, d_year#121, d_moy#122, d_dom#123] -Condition : (((((isnotnull(d_year#121) AND isnotnull(d_moy#122)) AND isnotnull(d_dom#123)) AND (d_year#121 = 2000)) AND (d_moy#122 = 12)) AND (d_dom#123 = 11)) +Input [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] +Condition : (((((isnotnull(d_year#103) AND isnotnull(d_moy#104)) AND isnotnull(d_dom#105)) AND (d_year#103 = 2000)) AND (d_moy#104 = 12)) AND (d_dom#105 = 11)) (127) Project [codegen id : 1] -Output [1]: [d_week_seq#120] -Input [4]: [d_week_seq#120, d_year#121, d_moy#122, d_dom#123] +Output [1]: [d_week_seq#102] +Input [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] -Subquery:7 Hosting operator id = 9 Hosting Expression = ss_sold_date_sk#12 IN dynamicpruning#13 +Subquery:7 Hosting operator id = 9 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#12 BroadcastExchange (132) +- * Project (131) +- * Filter (130) @@ -725,34 +725,34 @@ BroadcastExchange (132) (128) Scan parquet default.date_dim -Output [2]: [d_date_sk#14, d_year#124] +Output [2]: [d_date_sk#13, d_year#106] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (129) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#124] +Input [2]: [d_date_sk#13, d_year#106] (130) Filter [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#124] -Condition : (((isnotnull(d_year#124) AND (d_year#124 >= 1999)) AND (d_year#124 <= 2001)) AND isnotnull(d_date_sk#14)) +Input [2]: [d_date_sk#13, d_year#106] +Condition : (((isnotnull(d_year#106) AND (d_year#106 >= 1999)) AND (d_year#106 <= 2001)) AND isnotnull(d_date_sk#13)) (131) Project [codegen id : 1] -Output [1]: [d_date_sk#14] -Input [2]: [d_date_sk#14, d_year#124] +Output [1]: [d_date_sk#13] +Input [2]: [d_date_sk#13, d_year#106] (132) BroadcastExchange -Input [1]: [d_date_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#125] +Input [1]: [d_date_sk#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=19] -Subquery:8 Hosting operator id = 20 Hosting Expression = cs_sold_date_sk#21 IN dynamicpruning#13 +Subquery:8 Hosting operator id = 20 Hosting Expression = cs_sold_date_sk#19 IN dynamicpruning#12 -Subquery:9 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#36 IN dynamicpruning#13 +Subquery:9 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#29 IN dynamicpruning#12 -Subquery:10 Hosting operator id = 96 Hosting Expression = ReusedSubquery Subquery scalar-subquery#65, [id=#66] +Subquery:10 Hosting operator id = 96 Hosting Expression = ReusedSubquery Subquery scalar-subquery#52, [id=#53] -Subquery:11 Hosting operator id = 79 Hosting Expression = ss_sold_date_sk#70 IN dynamicpruning#71 +Subquery:11 Hosting operator id = 79 Hosting Expression = ss_sold_date_sk#57 IN dynamicpruning#58 BroadcastExchange (137) +- * Project (136) +- * Filter (135) @@ -761,28 +761,28 @@ BroadcastExchange (137) (133) Scan parquet default.date_dim -Output [2]: [d_date_sk#73, d_week_seq#126] +Output [2]: [d_date_sk#59, d_week_seq#107] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date_sk)] ReadSchema: struct (134) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#73, d_week_seq#126] +Input [2]: [d_date_sk#59, d_week_seq#107] (135) Filter [codegen id : 1] -Input [2]: [d_date_sk#73, d_week_seq#126] -Condition : ((isnotnull(d_week_seq#126) AND (d_week_seq#126 = Subquery scalar-subquery#127, [id=#128])) AND isnotnull(d_date_sk#73)) +Input [2]: [d_date_sk#59, d_week_seq#107] +Condition : ((isnotnull(d_week_seq#107) AND (d_week_seq#107 = Subquery scalar-subquery#108, [id=#109])) AND isnotnull(d_date_sk#59)) (136) Project [codegen id : 1] -Output [1]: [d_date_sk#73] -Input [2]: [d_date_sk#73, d_week_seq#126] +Output [1]: [d_date_sk#59] +Input [2]: [d_date_sk#59, d_week_seq#107] (137) BroadcastExchange -Input [1]: [d_date_sk#73] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#129] +Input [1]: [d_date_sk#59] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=20] -Subquery:12 Hosting operator id = 135 Hosting Expression = Subquery scalar-subquery#127, [id=#128] +Subquery:12 Hosting operator id = 135 Hosting Expression = Subquery scalar-subquery#108, [id=#109] * Project (141) +- * Filter (140) +- * ColumnarToRow (139) @@ -790,21 +790,21 @@ Subquery:12 Hosting operator id = 135 Hosting Expression = Subquery scalar-subqu (138) Scan parquet default.date_dim -Output [4]: [d_week_seq#130, d_year#131, d_moy#132, d_dom#133] +Output [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), IsNotNull(d_dom), EqualTo(d_year,1999), EqualTo(d_moy,12), EqualTo(d_dom,11)] ReadSchema: struct (139) ColumnarToRow [codegen id : 1] -Input [4]: [d_week_seq#130, d_year#131, d_moy#132, d_dom#133] +Input [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] (140) Filter [codegen id : 1] -Input [4]: [d_week_seq#130, d_year#131, d_moy#132, d_dom#133] -Condition : (((((isnotnull(d_year#131) AND isnotnull(d_moy#132)) AND isnotnull(d_dom#133)) AND (d_year#131 = 1999)) AND (d_moy#132 = 12)) AND (d_dom#133 = 11)) +Input [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] +Condition : (((((isnotnull(d_year#111) AND isnotnull(d_moy#112)) AND isnotnull(d_dom#113)) AND (d_year#111 = 1999)) AND (d_moy#112 = 12)) AND (d_dom#113 = 11)) (141) Project [codegen id : 1] -Output [1]: [d_week_seq#130] -Input [4]: [d_week_seq#130, d_year#131, d_moy#132, d_dom#133] +Output [1]: [d_week_seq#110] +Input [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b/explain.txt index 69be776d2ac28..1972d6840d1ee 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q14b/explain.txt @@ -174,7 +174,7 @@ Condition : isnotnull(i_item_sk#19) (19) BroadcastExchange Input [4]: [i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (20) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_item_sk#17] @@ -186,20 +186,20 @@ Output [4]: [cs_sold_date_sk#18, i_brand_id#20, i_class_id#21, i_category_id#22] Input [6]: [cs_item_sk#17, cs_sold_date_sk#18, i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22] (22) ReusedExchange [Reuses operator id: 117] -Output [1]: [d_date_sk#24] +Output [1]: [d_date_sk#23] (23) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_sold_date_sk#18] -Right keys [1]: [d_date_sk#24] +Right keys [1]: [d_date_sk#23] Join condition: None (24) Project [codegen id : 3] Output [3]: [i_brand_id#20, i_class_id#21, i_category_id#22] -Input [5]: [cs_sold_date_sk#18, i_brand_id#20, i_class_id#21, i_category_id#22, d_date_sk#24] +Input [5]: [cs_sold_date_sk#18, i_brand_id#20, i_class_id#21, i_category_id#22, d_date_sk#23] (25) BroadcastExchange Input [3]: [i_brand_id#20, i_class_id#21, i_category_id#22] -Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [id=#25] +Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [plan_id=2] (26) BroadcastHashJoin [codegen id : 4] Left keys [6]: [coalesce(i_brand_id#14, 0), isnull(i_brand_id#14), coalesce(i_class_id#15, 0), isnull(i_class_id#15), coalesce(i_category_id#16, 0), isnull(i_category_id#16)] @@ -208,7 +208,7 @@ Join condition: None (27) BroadcastExchange Input [4]: [i_item_sk#13, i_brand_id#14, i_class_id#15, i_category_id#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (28) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_item_sk#10] @@ -220,259 +220,259 @@ Output [4]: [ss_sold_date_sk#11, i_brand_id#14, i_class_id#15, i_category_id#16] Input [6]: [ss_item_sk#10, ss_sold_date_sk#11, i_item_sk#13, i_brand_id#14, i_class_id#15, i_category_id#16] (30) ReusedExchange [Reuses operator id: 117] -Output [1]: [d_date_sk#27] +Output [1]: [d_date_sk#24] (31) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_sold_date_sk#11] -Right keys [1]: [d_date_sk#27] +Right keys [1]: [d_date_sk#24] Join condition: None (32) Project [codegen id : 6] -Output [3]: [i_brand_id#14 AS brand_id#28, i_class_id#15 AS class_id#29, i_category_id#16 AS category_id#30] -Input [5]: [ss_sold_date_sk#11, i_brand_id#14, i_class_id#15, i_category_id#16, d_date_sk#27] +Output [3]: [i_brand_id#14 AS brand_id#25, i_class_id#15 AS class_id#26, i_category_id#16 AS category_id#27] +Input [5]: [ss_sold_date_sk#11, i_brand_id#14, i_class_id#15, i_category_id#16, d_date_sk#24] (33) HashAggregate [codegen id : 6] -Input [3]: [brand_id#28, class_id#29, category_id#30] -Keys [3]: [brand_id#28, class_id#29, category_id#30] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#28, class_id#29, category_id#30] +Results [3]: [brand_id#25, class_id#26, category_id#27] (34) Exchange -Input [3]: [brand_id#28, class_id#29, category_id#30] -Arguments: hashpartitioning(brand_id#28, class_id#29, category_id#30, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: hashpartitioning(brand_id#25, class_id#26, category_id#27, 5), ENSURE_REQUIREMENTS, [plan_id=4] (35) HashAggregate [codegen id : 10] -Input [3]: [brand_id#28, class_id#29, category_id#30] -Keys [3]: [brand_id#28, class_id#29, category_id#30] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#28, class_id#29, category_id#30] +Results [3]: [brand_id#25, class_id#26, category_id#27] (36) Scan parquet default.web_sales -Output [2]: [ws_item_sk#32, ws_sold_date_sk#33] +Output [2]: [ws_item_sk#28, ws_sold_date_sk#29] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#33), dynamicpruningexpression(ws_sold_date_sk#33 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(ws_sold_date_sk#29), dynamicpruningexpression(ws_sold_date_sk#29 IN dynamicpruning#12)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 9] -Input [2]: [ws_item_sk#32, ws_sold_date_sk#33] +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] (38) Filter [codegen id : 9] -Input [2]: [ws_item_sk#32, ws_sold_date_sk#33] -Condition : isnotnull(ws_item_sk#32) +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] +Condition : isnotnull(ws_item_sk#28) (39) ReusedExchange [Reuses operator id: 19] -Output [4]: [i_item_sk#34, i_brand_id#35, i_class_id#36, i_category_id#37] +Output [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33] (40) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [ws_item_sk#32] -Right keys [1]: [i_item_sk#34] +Left keys [1]: [ws_item_sk#28] +Right keys [1]: [i_item_sk#30] Join condition: None (41) Project [codegen id : 9] -Output [4]: [ws_sold_date_sk#33, i_brand_id#35, i_class_id#36, i_category_id#37] -Input [6]: [ws_item_sk#32, ws_sold_date_sk#33, i_item_sk#34, i_brand_id#35, i_class_id#36, i_category_id#37] +Output [4]: [ws_sold_date_sk#29, i_brand_id#31, i_class_id#32, i_category_id#33] +Input [6]: [ws_item_sk#28, ws_sold_date_sk#29, i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33] (42) ReusedExchange [Reuses operator id: 117] -Output [1]: [d_date_sk#38] +Output [1]: [d_date_sk#34] (43) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [ws_sold_date_sk#33] -Right keys [1]: [d_date_sk#38] +Left keys [1]: [ws_sold_date_sk#29] +Right keys [1]: [d_date_sk#34] Join condition: None (44) Project [codegen id : 9] -Output [3]: [i_brand_id#35, i_class_id#36, i_category_id#37] -Input [5]: [ws_sold_date_sk#33, i_brand_id#35, i_class_id#36, i_category_id#37, d_date_sk#38] +Output [3]: [i_brand_id#31, i_class_id#32, i_category_id#33] +Input [5]: [ws_sold_date_sk#29, i_brand_id#31, i_class_id#32, i_category_id#33, d_date_sk#34] (45) BroadcastExchange -Input [3]: [i_brand_id#35, i_class_id#36, i_category_id#37] -Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [id=#39] +Input [3]: [i_brand_id#31, i_class_id#32, i_category_id#33] +Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [plan_id=5] (46) BroadcastHashJoin [codegen id : 10] -Left keys [6]: [coalesce(brand_id#28, 0), isnull(brand_id#28), coalesce(class_id#29, 0), isnull(class_id#29), coalesce(category_id#30, 0), isnull(category_id#30)] -Right keys [6]: [coalesce(i_brand_id#35, 0), isnull(i_brand_id#35), coalesce(i_class_id#36, 0), isnull(i_class_id#36), coalesce(i_category_id#37, 0), isnull(i_category_id#37)] +Left keys [6]: [coalesce(brand_id#25, 0), isnull(brand_id#25), coalesce(class_id#26, 0), isnull(class_id#26), coalesce(category_id#27, 0), isnull(category_id#27)] +Right keys [6]: [coalesce(i_brand_id#31, 0), isnull(i_brand_id#31), coalesce(i_class_id#32, 0), isnull(i_class_id#32), coalesce(i_category_id#33, 0), isnull(i_category_id#33)] Join condition: None (47) BroadcastExchange -Input [3]: [brand_id#28, class_id#29, category_id#30] -Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [id=#40] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [plan_id=6] (48) BroadcastHashJoin [codegen id : 11] Left keys [3]: [i_brand_id#7, i_class_id#8, i_category_id#9] -Right keys [3]: [brand_id#28, class_id#29, category_id#30] +Right keys [3]: [brand_id#25, class_id#26, category_id#27] Join condition: None (49) Project [codegen id : 11] -Output [1]: [i_item_sk#6 AS ss_item_sk#41] -Input [7]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9, brand_id#28, class_id#29, category_id#30] +Output [1]: [i_item_sk#6 AS ss_item_sk#35] +Input [7]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9, brand_id#25, class_id#26, category_id#27] (50) BroadcastExchange -Input [1]: [ss_item_sk#41] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#42] +Input [1]: [ss_item_sk#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] (51) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [ss_item_sk#41] +Right keys [1]: [ss_item_sk#35] Join condition: None (52) Scan parquet default.item -Output [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] +Output [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)] ReadSchema: struct (53) ColumnarToRow [codegen id : 23] -Input [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] +Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] (54) Filter [codegen id : 23] -Input [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] -Condition : (((isnotnull(i_item_sk#43) AND isnotnull(i_brand_id#44)) AND isnotnull(i_class_id#45)) AND isnotnull(i_category_id#46)) +Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] +Condition : (((isnotnull(i_item_sk#36) AND isnotnull(i_brand_id#37)) AND isnotnull(i_class_id#38)) AND isnotnull(i_category_id#39)) (55) ReusedExchange [Reuses operator id: 50] -Output [1]: [ss_item_sk#41] +Output [1]: [ss_item_sk#35] (56) BroadcastHashJoin [codegen id : 23] -Left keys [1]: [i_item_sk#43] -Right keys [1]: [ss_item_sk#41] +Left keys [1]: [i_item_sk#36] +Right keys [1]: [ss_item_sk#35] Join condition: None (57) BroadcastExchange -Input [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#47] +Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] (58) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#43] +Right keys [1]: [i_item_sk#36] Join condition: None (59) Project [codegen id : 25] -Output [6]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#44, i_class_id#45, i_category_id#46] -Input [8]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] +Output [6]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#37, i_class_id#38, i_category_id#39] +Input [8]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] (60) ReusedExchange [Reuses operator id: 108] -Output [1]: [d_date_sk#48] +Output [1]: [d_date_sk#40] (61) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_sold_date_sk#4] -Right keys [1]: [d_date_sk#48] +Right keys [1]: [d_date_sk#40] Join condition: None (62) Project [codegen id : 25] -Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#44, i_class_id#45, i_category_id#46] -Input [7]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#44, i_class_id#45, i_category_id#46, d_date_sk#48] +Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#37, i_class_id#38, i_category_id#39] +Input [7]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#37, i_class_id#38, i_category_id#39, d_date_sk#40] (63) HashAggregate [codegen id : 25] -Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#44, i_class_id#45, i_category_id#46] -Keys [3]: [i_brand_id#44, i_class_id#45, i_category_id#46] +Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#37, i_class_id#38, i_category_id#39] +Keys [3]: [i_brand_id#37, i_class_id#38, i_category_id#39] Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#49, isEmpty#50, count#51] -Results [6]: [i_brand_id#44, i_class_id#45, i_category_id#46, sum#52, isEmpty#53, count#54] +Aggregate Attributes [3]: [sum#41, isEmpty#42, count#43] +Results [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#44, isEmpty#45, count#46] (64) Exchange -Input [6]: [i_brand_id#44, i_class_id#45, i_category_id#46, sum#52, isEmpty#53, count#54] -Arguments: hashpartitioning(i_brand_id#44, i_class_id#45, i_category_id#46, 5), ENSURE_REQUIREMENTS, [id=#55] +Input [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#44, isEmpty#45, count#46] +Arguments: hashpartitioning(i_brand_id#37, i_class_id#38, i_category_id#39, 5), ENSURE_REQUIREMENTS, [plan_id=9] (65) HashAggregate [codegen id : 52] -Input [6]: [i_brand_id#44, i_class_id#45, i_category_id#46, sum#52, isEmpty#53, count#54] -Keys [3]: [i_brand_id#44, i_class_id#45, i_category_id#46] +Input [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#44, isEmpty#45, count#46] +Keys [3]: [i_brand_id#37, i_class_id#38, i_category_id#39] Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#56, count(1)#57] -Results [6]: [store AS channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#56 AS sales#59, count(1)#57 AS number_sales#60] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47, count(1)#48] +Results [6]: [store AS channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47 AS sales#50, count(1)#48 AS number_sales#51] (66) Filter [codegen id : 52] -Input [6]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sales#59, number_sales#60] -Condition : (isnotnull(sales#59) AND (cast(sales#59 as decimal(32,6)) > cast(Subquery scalar-subquery#61, [id=#62] as decimal(32,6)))) +Input [6]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sales#50, number_sales#51] +Condition : (isnotnull(sales#50) AND (cast(sales#50 as decimal(32,6)) > cast(Subquery scalar-subquery#52, [id=#53] as decimal(32,6)))) (67) Scan parquet default.store_sales -Output [4]: [ss_item_sk#63, ss_quantity#64, ss_list_price#65, ss_sold_date_sk#66] +Output [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#66), dynamicpruningexpression(ss_sold_date_sk#66 IN dynamicpruning#67)] +PartitionFilters: [isnotnull(ss_sold_date_sk#57), dynamicpruningexpression(ss_sold_date_sk#57 IN dynamicpruning#58)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (68) ColumnarToRow [codegen id : 50] -Input [4]: [ss_item_sk#63, ss_quantity#64, ss_list_price#65, ss_sold_date_sk#66] +Input [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] (69) Filter [codegen id : 50] -Input [4]: [ss_item_sk#63, ss_quantity#64, ss_list_price#65, ss_sold_date_sk#66] -Condition : isnotnull(ss_item_sk#63) +Input [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] +Condition : isnotnull(ss_item_sk#54) (70) ReusedExchange [Reuses operator id: 50] -Output [1]: [ss_item_sk#41] +Output [1]: [ss_item_sk#35] (71) BroadcastHashJoin [codegen id : 50] -Left keys [1]: [ss_item_sk#63] -Right keys [1]: [ss_item_sk#41] +Left keys [1]: [ss_item_sk#54] +Right keys [1]: [ss_item_sk#35] Join condition: None (72) ReusedExchange [Reuses operator id: 57] -Output [4]: [i_item_sk#68, i_brand_id#69, i_class_id#70, i_category_id#71] +Output [4]: [i_item_sk#59, i_brand_id#60, i_class_id#61, i_category_id#62] (73) BroadcastHashJoin [codegen id : 50] -Left keys [1]: [ss_item_sk#63] -Right keys [1]: [i_item_sk#68] +Left keys [1]: [ss_item_sk#54] +Right keys [1]: [i_item_sk#59] Join condition: None (74) Project [codegen id : 50] -Output [6]: [ss_quantity#64, ss_list_price#65, ss_sold_date_sk#66, i_brand_id#69, i_class_id#70, i_category_id#71] -Input [8]: [ss_item_sk#63, ss_quantity#64, ss_list_price#65, ss_sold_date_sk#66, i_item_sk#68, i_brand_id#69, i_class_id#70, i_category_id#71] +Output [6]: [ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57, i_brand_id#60, i_class_id#61, i_category_id#62] +Input [8]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57, i_item_sk#59, i_brand_id#60, i_class_id#61, i_category_id#62] (75) ReusedExchange [Reuses operator id: 122] -Output [1]: [d_date_sk#72] +Output [1]: [d_date_sk#63] (76) BroadcastHashJoin [codegen id : 50] -Left keys [1]: [ss_sold_date_sk#66] -Right keys [1]: [d_date_sk#72] +Left keys [1]: [ss_sold_date_sk#57] +Right keys [1]: [d_date_sk#63] Join condition: None (77) Project [codegen id : 50] -Output [5]: [ss_quantity#64, ss_list_price#65, i_brand_id#69, i_class_id#70, i_category_id#71] -Input [7]: [ss_quantity#64, ss_list_price#65, ss_sold_date_sk#66, i_brand_id#69, i_class_id#70, i_category_id#71, d_date_sk#72] +Output [5]: [ss_quantity#55, ss_list_price#56, i_brand_id#60, i_class_id#61, i_category_id#62] +Input [7]: [ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57, i_brand_id#60, i_class_id#61, i_category_id#62, d_date_sk#63] (78) HashAggregate [codegen id : 50] -Input [5]: [ss_quantity#64, ss_list_price#65, i_brand_id#69, i_class_id#70, i_category_id#71] -Keys [3]: [i_brand_id#69, i_class_id#70, i_category_id#71] -Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_list_price#65 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#73, isEmpty#74, count#75] -Results [6]: [i_brand_id#69, i_class_id#70, i_category_id#71, sum#76, isEmpty#77, count#78] +Input [5]: [ss_quantity#55, ss_list_price#56, i_brand_id#60, i_class_id#61, i_category_id#62] +Keys [3]: [i_brand_id#60, i_class_id#61, i_category_id#62] +Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] +Aggregate Attributes [3]: [sum#64, isEmpty#65, count#66] +Results [6]: [i_brand_id#60, i_class_id#61, i_category_id#62, sum#67, isEmpty#68, count#69] (79) Exchange -Input [6]: [i_brand_id#69, i_class_id#70, i_category_id#71, sum#76, isEmpty#77, count#78] -Arguments: hashpartitioning(i_brand_id#69, i_class_id#70, i_category_id#71, 5), ENSURE_REQUIREMENTS, [id=#79] +Input [6]: [i_brand_id#60, i_class_id#61, i_category_id#62, sum#67, isEmpty#68, count#69] +Arguments: hashpartitioning(i_brand_id#60, i_class_id#61, i_category_id#62, 5), ENSURE_REQUIREMENTS, [plan_id=10] (80) HashAggregate [codegen id : 51] -Input [6]: [i_brand_id#69, i_class_id#70, i_category_id#71, sum#76, isEmpty#77, count#78] -Keys [3]: [i_brand_id#69, i_class_id#70, i_category_id#71] -Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_list_price#65 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_list_price#65 as decimal(12,2)))), DecimalType(18,2)))#80, count(1)#81] -Results [6]: [store AS channel#82, i_brand_id#69, i_class_id#70, i_category_id#71, sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_list_price#65 as decimal(12,2)))), DecimalType(18,2)))#80 AS sales#83, count(1)#81 AS number_sales#84] +Input [6]: [i_brand_id#60, i_class_id#61, i_category_id#62, sum#67, isEmpty#68, count#69] +Keys [3]: [i_brand_id#60, i_class_id#61, i_category_id#62] +Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2))), count(1)] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#70, count(1)#71] +Results [6]: [store AS channel#72, i_brand_id#60, i_class_id#61, i_category_id#62, sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#70 AS sales#73, count(1)#71 AS number_sales#74] (81) Filter [codegen id : 51] -Input [6]: [channel#82, i_brand_id#69, i_class_id#70, i_category_id#71, sales#83, number_sales#84] -Condition : (isnotnull(sales#83) AND (cast(sales#83 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#61, [id=#62] as decimal(32,6)))) +Input [6]: [channel#72, i_brand_id#60, i_class_id#61, i_category_id#62, sales#73, number_sales#74] +Condition : (isnotnull(sales#73) AND (cast(sales#73 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#52, [id=#53] as decimal(32,6)))) (82) BroadcastExchange -Input [6]: [channel#82, i_brand_id#69, i_class_id#70, i_category_id#71, sales#83, number_sales#84] -Arguments: HashedRelationBroadcastMode(List(input[1, int, true], input[2, int, true], input[3, int, true]),false), [id=#85] +Input [6]: [channel#72, i_brand_id#60, i_class_id#61, i_category_id#62, sales#73, number_sales#74] +Arguments: HashedRelationBroadcastMode(List(input[1, int, true], input[2, int, true], input[3, int, true]),false), [plan_id=11] (83) BroadcastHashJoin [codegen id : 52] -Left keys [3]: [i_brand_id#44, i_class_id#45, i_category_id#46] -Right keys [3]: [i_brand_id#69, i_class_id#70, i_category_id#71] +Left keys [3]: [i_brand_id#37, i_class_id#38, i_category_id#39] +Right keys [3]: [i_brand_id#60, i_class_id#61, i_category_id#62] Join condition: None (84) TakeOrderedAndProject -Input [12]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sales#59, number_sales#60, channel#82, i_brand_id#69, i_class_id#70, i_category_id#71, sales#83, number_sales#84] -Arguments: 100, [i_brand_id#44 ASC NULLS FIRST, i_class_id#45 ASC NULLS FIRST, i_category_id#46 ASC NULLS FIRST], [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sales#59, number_sales#60, channel#82, i_brand_id#69, i_class_id#70, i_category_id#71, sales#83, number_sales#84] +Input [12]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sales#50, number_sales#51, channel#72, i_brand_id#60, i_class_id#61, i_category_id#62, sales#73, number_sales#74] +Arguments: 100, [i_brand_id#37 ASC NULLS FIRST, i_class_id#38 ASC NULLS FIRST, i_category_id#39 ASC NULLS FIRST], [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sales#50, number_sales#51, channel#72, i_brand_id#60, i_class_id#61, i_category_id#62, sales#73, number_sales#74] ===== Subqueries ===== -Subquery:1 Hosting operator id = 66 Hosting Expression = Subquery scalar-subquery#61, [id=#62] +Subquery:1 Hosting operator id = 66 Hosting Expression = Subquery scalar-subquery#52, [id=#53] * HashAggregate (103) +- Exchange (102) +- * HashAggregate (101) @@ -495,96 +495,96 @@ Subquery:1 Hosting operator id = 66 Hosting Expression = Subquery scalar-subquer (85) Scan parquet default.store_sales -Output [3]: [ss_quantity#86, ss_list_price#87, ss_sold_date_sk#88] +Output [3]: [ss_quantity#75, ss_list_price#76, ss_sold_date_sk#77] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#88), dynamicpruningexpression(ss_sold_date_sk#88 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(ss_sold_date_sk#77), dynamicpruningexpression(ss_sold_date_sk#77 IN dynamicpruning#12)] ReadSchema: struct (86) ColumnarToRow [codegen id : 2] -Input [3]: [ss_quantity#86, ss_list_price#87, ss_sold_date_sk#88] +Input [3]: [ss_quantity#75, ss_list_price#76, ss_sold_date_sk#77] (87) ReusedExchange [Reuses operator id: 117] -Output [1]: [d_date_sk#89] +Output [1]: [d_date_sk#78] (88) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [ss_sold_date_sk#88] -Right keys [1]: [d_date_sk#89] +Left keys [1]: [ss_sold_date_sk#77] +Right keys [1]: [d_date_sk#78] Join condition: None (89) Project [codegen id : 2] -Output [2]: [ss_quantity#86 AS quantity#90, ss_list_price#87 AS list_price#91] -Input [4]: [ss_quantity#86, ss_list_price#87, ss_sold_date_sk#88, d_date_sk#89] +Output [2]: [ss_quantity#75 AS quantity#79, ss_list_price#76 AS list_price#80] +Input [4]: [ss_quantity#75, ss_list_price#76, ss_sold_date_sk#77, d_date_sk#78] (90) Scan parquet default.catalog_sales -Output [3]: [cs_quantity#92, cs_list_price#93, cs_sold_date_sk#94] +Output [3]: [cs_quantity#81, cs_list_price#82, cs_sold_date_sk#83] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#94), dynamicpruningexpression(cs_sold_date_sk#94 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(cs_sold_date_sk#83), dynamicpruningexpression(cs_sold_date_sk#83 IN dynamicpruning#12)] ReadSchema: struct (91) ColumnarToRow [codegen id : 4] -Input [3]: [cs_quantity#92, cs_list_price#93, cs_sold_date_sk#94] +Input [3]: [cs_quantity#81, cs_list_price#82, cs_sold_date_sk#83] (92) ReusedExchange [Reuses operator id: 117] -Output [1]: [d_date_sk#95] +Output [1]: [d_date_sk#84] (93) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [cs_sold_date_sk#94] -Right keys [1]: [d_date_sk#95] +Left keys [1]: [cs_sold_date_sk#83] +Right keys [1]: [d_date_sk#84] Join condition: None (94) Project [codegen id : 4] -Output [2]: [cs_quantity#92 AS quantity#96, cs_list_price#93 AS list_price#97] -Input [4]: [cs_quantity#92, cs_list_price#93, cs_sold_date_sk#94, d_date_sk#95] +Output [2]: [cs_quantity#81 AS quantity#85, cs_list_price#82 AS list_price#86] +Input [4]: [cs_quantity#81, cs_list_price#82, cs_sold_date_sk#83, d_date_sk#84] (95) Scan parquet default.web_sales -Output [3]: [ws_quantity#98, ws_list_price#99, ws_sold_date_sk#100] +Output [3]: [ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#100), dynamicpruningexpression(ws_sold_date_sk#100 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(ws_sold_date_sk#89), dynamicpruningexpression(ws_sold_date_sk#89 IN dynamicpruning#12)] ReadSchema: struct (96) ColumnarToRow [codegen id : 6] -Input [3]: [ws_quantity#98, ws_list_price#99, ws_sold_date_sk#100] +Input [3]: [ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89] (97) ReusedExchange [Reuses operator id: 117] -Output [1]: [d_date_sk#101] +Output [1]: [d_date_sk#90] (98) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ws_sold_date_sk#100] -Right keys [1]: [d_date_sk#101] +Left keys [1]: [ws_sold_date_sk#89] +Right keys [1]: [d_date_sk#90] Join condition: None (99) Project [codegen id : 6] -Output [2]: [ws_quantity#98 AS quantity#102, ws_list_price#99 AS list_price#103] -Input [4]: [ws_quantity#98, ws_list_price#99, ws_sold_date_sk#100, d_date_sk#101] +Output [2]: [ws_quantity#87 AS quantity#91, ws_list_price#88 AS list_price#92] +Input [4]: [ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89, d_date_sk#90] (100) Union (101) HashAggregate [codegen id : 7] -Input [2]: [quantity#90, list_price#91] +Input [2]: [quantity#79, list_price#80] Keys: [] -Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#90 as decimal(12,2))) * promote_precision(cast(list_price#91 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#104, count#105] -Results [2]: [sum#106, count#107] +Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#93, count#94] +Results [2]: [sum#95, count#96] (102) Exchange -Input [2]: [sum#106, count#107] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#108] +Input [2]: [sum#95, count#96] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12] (103) HashAggregate [codegen id : 8] -Input [2]: [sum#106, count#107] +Input [2]: [sum#95, count#96] Keys: [] -Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#90 as decimal(12,2))) * promote_precision(cast(list_price#91 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#90 as decimal(12,2))) * promote_precision(cast(list_price#91 as decimal(12,2)))), DecimalType(18,2)))#109] -Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#90 as decimal(12,2))) * promote_precision(cast(list_price#91 as decimal(12,2)))), DecimalType(18,2)))#109 AS average_sales#110] +Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))#97] +Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))#97 AS average_sales#98] -Subquery:2 Hosting operator id = 85 Hosting Expression = ss_sold_date_sk#88 IN dynamicpruning#12 +Subquery:2 Hosting operator id = 85 Hosting Expression = ss_sold_date_sk#77 IN dynamicpruning#12 -Subquery:3 Hosting operator id = 90 Hosting Expression = cs_sold_date_sk#94 IN dynamicpruning#12 +Subquery:3 Hosting operator id = 90 Hosting Expression = cs_sold_date_sk#83 IN dynamicpruning#12 -Subquery:4 Hosting operator id = 95 Hosting Expression = ws_sold_date_sk#100 IN dynamicpruning#12 +Subquery:4 Hosting operator id = 95 Hosting Expression = ws_sold_date_sk#89 IN dynamicpruning#12 Subquery:5 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5 BroadcastExchange (108) @@ -595,28 +595,28 @@ BroadcastExchange (108) (104) Scan parquet default.date_dim -Output [2]: [d_date_sk#48, d_week_seq#111] +Output [2]: [d_date_sk#40, d_week_seq#99] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date_sk)] ReadSchema: struct (105) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#48, d_week_seq#111] +Input [2]: [d_date_sk#40, d_week_seq#99] (106) Filter [codegen id : 1] -Input [2]: [d_date_sk#48, d_week_seq#111] -Condition : ((isnotnull(d_week_seq#111) AND (d_week_seq#111 = Subquery scalar-subquery#112, [id=#113])) AND isnotnull(d_date_sk#48)) +Input [2]: [d_date_sk#40, d_week_seq#99] +Condition : ((isnotnull(d_week_seq#99) AND (d_week_seq#99 = Subquery scalar-subquery#100, [id=#101])) AND isnotnull(d_date_sk#40)) (107) Project [codegen id : 1] -Output [1]: [d_date_sk#48] -Input [2]: [d_date_sk#48, d_week_seq#111] +Output [1]: [d_date_sk#40] +Input [2]: [d_date_sk#40, d_week_seq#99] (108) BroadcastExchange -Input [1]: [d_date_sk#48] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#114] +Input [1]: [d_date_sk#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=13] -Subquery:6 Hosting operator id = 106 Hosting Expression = Subquery scalar-subquery#112, [id=#113] +Subquery:6 Hosting operator id = 106 Hosting Expression = Subquery scalar-subquery#100, [id=#101] * Project (112) +- * Filter (111) +- * ColumnarToRow (110) @@ -624,22 +624,22 @@ Subquery:6 Hosting operator id = 106 Hosting Expression = Subquery scalar-subque (109) Scan parquet default.date_dim -Output [4]: [d_week_seq#115, d_year#116, d_moy#117, d_dom#118] +Output [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), IsNotNull(d_dom), EqualTo(d_year,2000), EqualTo(d_moy,12), EqualTo(d_dom,11)] ReadSchema: struct (110) ColumnarToRow [codegen id : 1] -Input [4]: [d_week_seq#115, d_year#116, d_moy#117, d_dom#118] +Input [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] (111) Filter [codegen id : 1] -Input [4]: [d_week_seq#115, d_year#116, d_moy#117, d_dom#118] -Condition : (((((isnotnull(d_year#116) AND isnotnull(d_moy#117)) AND isnotnull(d_dom#118)) AND (d_year#116 = 2000)) AND (d_moy#117 = 12)) AND (d_dom#118 = 11)) +Input [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] +Condition : (((((isnotnull(d_year#103) AND isnotnull(d_moy#104)) AND isnotnull(d_dom#105)) AND (d_year#103 = 2000)) AND (d_moy#104 = 12)) AND (d_dom#105 = 11)) (112) Project [codegen id : 1] -Output [1]: [d_week_seq#115] -Input [4]: [d_week_seq#115, d_year#116, d_moy#117, d_dom#118] +Output [1]: [d_week_seq#102] +Input [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] Subquery:7 Hosting operator id = 7 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#12 BroadcastExchange (117) @@ -650,34 +650,34 @@ BroadcastExchange (117) (113) Scan parquet default.date_dim -Output [2]: [d_date_sk#27, d_year#119] +Output [2]: [d_date_sk#24, d_year#106] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (114) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#27, d_year#119] +Input [2]: [d_date_sk#24, d_year#106] (115) Filter [codegen id : 1] -Input [2]: [d_date_sk#27, d_year#119] -Condition : (((isnotnull(d_year#119) AND (d_year#119 >= 1999)) AND (d_year#119 <= 2001)) AND isnotnull(d_date_sk#27)) +Input [2]: [d_date_sk#24, d_year#106] +Condition : (((isnotnull(d_year#106) AND (d_year#106 >= 1999)) AND (d_year#106 <= 2001)) AND isnotnull(d_date_sk#24)) (116) Project [codegen id : 1] -Output [1]: [d_date_sk#27] -Input [2]: [d_date_sk#27, d_year#119] +Output [1]: [d_date_sk#24] +Input [2]: [d_date_sk#24, d_year#106] (117) BroadcastExchange -Input [1]: [d_date_sk#27] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#120] +Input [1]: [d_date_sk#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=14] Subquery:8 Hosting operator id = 13 Hosting Expression = cs_sold_date_sk#18 IN dynamicpruning#12 -Subquery:9 Hosting operator id = 36 Hosting Expression = ws_sold_date_sk#33 IN dynamicpruning#12 +Subquery:9 Hosting operator id = 36 Hosting Expression = ws_sold_date_sk#29 IN dynamicpruning#12 -Subquery:10 Hosting operator id = 81 Hosting Expression = ReusedSubquery Subquery scalar-subquery#61, [id=#62] +Subquery:10 Hosting operator id = 81 Hosting Expression = ReusedSubquery Subquery scalar-subquery#52, [id=#53] -Subquery:11 Hosting operator id = 67 Hosting Expression = ss_sold_date_sk#66 IN dynamicpruning#67 +Subquery:11 Hosting operator id = 67 Hosting Expression = ss_sold_date_sk#57 IN dynamicpruning#58 BroadcastExchange (122) +- * Project (121) +- * Filter (120) @@ -686,28 +686,28 @@ BroadcastExchange (122) (118) Scan parquet default.date_dim -Output [2]: [d_date_sk#72, d_week_seq#121] +Output [2]: [d_date_sk#63, d_week_seq#107] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date_sk)] ReadSchema: struct (119) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#72, d_week_seq#121] +Input [2]: [d_date_sk#63, d_week_seq#107] (120) Filter [codegen id : 1] -Input [2]: [d_date_sk#72, d_week_seq#121] -Condition : ((isnotnull(d_week_seq#121) AND (d_week_seq#121 = Subquery scalar-subquery#122, [id=#123])) AND isnotnull(d_date_sk#72)) +Input [2]: [d_date_sk#63, d_week_seq#107] +Condition : ((isnotnull(d_week_seq#107) AND (d_week_seq#107 = Subquery scalar-subquery#108, [id=#109])) AND isnotnull(d_date_sk#63)) (121) Project [codegen id : 1] -Output [1]: [d_date_sk#72] -Input [2]: [d_date_sk#72, d_week_seq#121] +Output [1]: [d_date_sk#63] +Input [2]: [d_date_sk#63, d_week_seq#107] (122) BroadcastExchange -Input [1]: [d_date_sk#72] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#124] +Input [1]: [d_date_sk#63] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=15] -Subquery:12 Hosting operator id = 120 Hosting Expression = Subquery scalar-subquery#122, [id=#123] +Subquery:12 Hosting operator id = 120 Hosting Expression = Subquery scalar-subquery#108, [id=#109] * Project (126) +- * Filter (125) +- * ColumnarToRow (124) @@ -715,21 +715,21 @@ Subquery:12 Hosting operator id = 120 Hosting Expression = Subquery scalar-subqu (123) Scan parquet default.date_dim -Output [4]: [d_week_seq#125, d_year#126, d_moy#127, d_dom#128] +Output [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), IsNotNull(d_dom), EqualTo(d_year,1999), EqualTo(d_moy,12), EqualTo(d_dom,11)] ReadSchema: struct (124) ColumnarToRow [codegen id : 1] -Input [4]: [d_week_seq#125, d_year#126, d_moy#127, d_dom#128] +Input [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] (125) Filter [codegen id : 1] -Input [4]: [d_week_seq#125, d_year#126, d_moy#127, d_dom#128] -Condition : (((((isnotnull(d_year#126) AND isnotnull(d_moy#127)) AND isnotnull(d_dom#128)) AND (d_year#126 = 1999)) AND (d_moy#127 = 12)) AND (d_dom#128 = 11)) +Input [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] +Condition : (((((isnotnull(d_year#111) AND isnotnull(d_moy#112)) AND isnotnull(d_dom#113)) AND (d_year#111 = 1999)) AND (d_moy#112 = 12)) AND (d_dom#113 = 11)) (126) Project [codegen id : 1] -Output [1]: [d_week_seq#125] -Input [4]: [d_week_seq#125, d_year#126, d_moy#127, d_dom#128] +Output [1]: [d_week_seq#110] +Input [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q15.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q15.sf100/explain.txt index 55c39ed2e3288..b87297409526a 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q15.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q15.sf100/explain.txt @@ -58,103 +58,103 @@ Input [4]: [cs_bill_customer_sk#1, cs_sales_price#2, cs_sold_date_sk#3, d_date_s (7) Exchange Input [2]: [cs_bill_customer_sk#1, cs_sales_price#2] -Arguments: hashpartitioning(cs_bill_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(cs_bill_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (8) Sort [codegen id : 3] Input [2]: [cs_bill_customer_sk#1, cs_sales_price#2] Arguments: [cs_bill_customer_sk#1 ASC NULLS FIRST], false, 0 (9) Scan parquet default.customer -Output [2]: [c_customer_sk#7, c_current_addr_sk#8] +Output [2]: [c_customer_sk#6, c_current_addr_sk#7] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (10) ColumnarToRow [codegen id : 4] -Input [2]: [c_customer_sk#7, c_current_addr_sk#8] +Input [2]: [c_customer_sk#6, c_current_addr_sk#7] (11) Filter [codegen id : 4] -Input [2]: [c_customer_sk#7, c_current_addr_sk#8] -Condition : (isnotnull(c_customer_sk#7) AND isnotnull(c_current_addr_sk#8)) +Input [2]: [c_customer_sk#6, c_current_addr_sk#7] +Condition : (isnotnull(c_customer_sk#6) AND isnotnull(c_current_addr_sk#7)) (12) Exchange -Input [2]: [c_customer_sk#7, c_current_addr_sk#8] -Arguments: hashpartitioning(c_current_addr_sk#8, 5), ENSURE_REQUIREMENTS, [id=#9] +Input [2]: [c_customer_sk#6, c_current_addr_sk#7] +Arguments: hashpartitioning(c_current_addr_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (13) Sort [codegen id : 5] -Input [2]: [c_customer_sk#7, c_current_addr_sk#8] -Arguments: [c_current_addr_sk#8 ASC NULLS FIRST], false, 0 +Input [2]: [c_customer_sk#6, c_current_addr_sk#7] +Arguments: [c_current_addr_sk#7 ASC NULLS FIRST], false, 0 (14) Scan parquet default.customer_address -Output [3]: [ca_address_sk#10, ca_state#11, ca_zip#12] +Output [3]: [ca_address_sk#8, ca_state#9, ca_zip#10] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 6] -Input [3]: [ca_address_sk#10, ca_state#11, ca_zip#12] +Input [3]: [ca_address_sk#8, ca_state#9, ca_zip#10] (16) Filter [codegen id : 6] -Input [3]: [ca_address_sk#10, ca_state#11, ca_zip#12] -Condition : isnotnull(ca_address_sk#10) +Input [3]: [ca_address_sk#8, ca_state#9, ca_zip#10] +Condition : isnotnull(ca_address_sk#8) (17) Exchange -Input [3]: [ca_address_sk#10, ca_state#11, ca_zip#12] -Arguments: hashpartitioning(ca_address_sk#10, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [3]: [ca_address_sk#8, ca_state#9, ca_zip#10] +Arguments: hashpartitioning(ca_address_sk#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) Sort [codegen id : 7] -Input [3]: [ca_address_sk#10, ca_state#11, ca_zip#12] -Arguments: [ca_address_sk#10 ASC NULLS FIRST], false, 0 +Input [3]: [ca_address_sk#8, ca_state#9, ca_zip#10] +Arguments: [ca_address_sk#8 ASC NULLS FIRST], false, 0 (19) SortMergeJoin [codegen id : 8] -Left keys [1]: [c_current_addr_sk#8] -Right keys [1]: [ca_address_sk#10] +Left keys [1]: [c_current_addr_sk#7] +Right keys [1]: [ca_address_sk#8] Join condition: None (20) Project [codegen id : 8] -Output [3]: [c_customer_sk#7, ca_state#11, ca_zip#12] -Input [5]: [c_customer_sk#7, c_current_addr_sk#8, ca_address_sk#10, ca_state#11, ca_zip#12] +Output [3]: [c_customer_sk#6, ca_state#9, ca_zip#10] +Input [5]: [c_customer_sk#6, c_current_addr_sk#7, ca_address_sk#8, ca_state#9, ca_zip#10] (21) Exchange -Input [3]: [c_customer_sk#7, ca_state#11, ca_zip#12] -Arguments: hashpartitioning(c_customer_sk#7, 5), ENSURE_REQUIREMENTS, [id=#14] +Input [3]: [c_customer_sk#6, ca_state#9, ca_zip#10] +Arguments: hashpartitioning(c_customer_sk#6, 5), ENSURE_REQUIREMENTS, [plan_id=4] (22) Sort [codegen id : 9] -Input [3]: [c_customer_sk#7, ca_state#11, ca_zip#12] -Arguments: [c_customer_sk#7 ASC NULLS FIRST], false, 0 +Input [3]: [c_customer_sk#6, ca_state#9, ca_zip#10] +Arguments: [c_customer_sk#6 ASC NULLS FIRST], false, 0 (23) SortMergeJoin [codegen id : 10] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#7] -Join condition: ((substr(ca_zip#12, 1, 5) IN (85669,86197,88274,83405,86475,85392,85460,80348,81792) OR ca_state#11 IN (CA,WA,GA)) OR (cs_sales_price#2 > 500.00)) +Right keys [1]: [c_customer_sk#6] +Join condition: ((substr(ca_zip#10, 1, 5) IN (85669,86197,88274,83405,86475,85392,85460,80348,81792) OR ca_state#9 IN (CA,WA,GA)) OR (cs_sales_price#2 > 500.00)) (24) Project [codegen id : 10] -Output [2]: [cs_sales_price#2, ca_zip#12] -Input [5]: [cs_bill_customer_sk#1, cs_sales_price#2, c_customer_sk#7, ca_state#11, ca_zip#12] +Output [2]: [cs_sales_price#2, ca_zip#10] +Input [5]: [cs_bill_customer_sk#1, cs_sales_price#2, c_customer_sk#6, ca_state#9, ca_zip#10] (25) HashAggregate [codegen id : 10] -Input [2]: [cs_sales_price#2, ca_zip#12] -Keys [1]: [ca_zip#12] +Input [2]: [cs_sales_price#2, ca_zip#10] +Keys [1]: [ca_zip#10] Functions [1]: [partial_sum(UnscaledValue(cs_sales_price#2))] -Aggregate Attributes [1]: [sum#15] -Results [2]: [ca_zip#12, sum#16] +Aggregate Attributes [1]: [sum#11] +Results [2]: [ca_zip#10, sum#12] (26) Exchange -Input [2]: [ca_zip#12, sum#16] -Arguments: hashpartitioning(ca_zip#12, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [2]: [ca_zip#10, sum#12] +Arguments: hashpartitioning(ca_zip#10, 5), ENSURE_REQUIREMENTS, [plan_id=5] (27) HashAggregate [codegen id : 11] -Input [2]: [ca_zip#12, sum#16] -Keys [1]: [ca_zip#12] +Input [2]: [ca_zip#10, sum#12] +Keys [1]: [ca_zip#10] Functions [1]: [sum(UnscaledValue(cs_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#2))#18] -Results [2]: [ca_zip#12, MakeDecimal(sum(UnscaledValue(cs_sales_price#2))#18,17,2) AS sum(cs_sales_price)#19] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#2))#13] +Results [2]: [ca_zip#10, MakeDecimal(sum(UnscaledValue(cs_sales_price#2))#13,17,2) AS sum(cs_sales_price)#14] (28) TakeOrderedAndProject -Input [2]: [ca_zip#12, sum(cs_sales_price)#19] -Arguments: 100, [ca_zip#12 ASC NULLS FIRST], [ca_zip#12, sum(cs_sales_price)#19] +Input [2]: [ca_zip#10, sum(cs_sales_price)#14] +Arguments: 100, [ca_zip#10 ASC NULLS FIRST], [ca_zip#10, sum(cs_sales_price)#14] ===== Subqueries ===== @@ -167,25 +167,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [3]: [d_date_sk#5, d_year#20, d_qoy#21] +Output [3]: [d_date_sk#5, d_year#15, d_qoy#16] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,2), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#5, d_year#20, d_qoy#21] +Input [3]: [d_date_sk#5, d_year#15, d_qoy#16] (31) Filter [codegen id : 1] -Input [3]: [d_date_sk#5, d_year#20, d_qoy#21] -Condition : ((((isnotnull(d_qoy#21) AND isnotnull(d_year#20)) AND (d_qoy#21 = 2)) AND (d_year#20 = 2001)) AND isnotnull(d_date_sk#5)) +Input [3]: [d_date_sk#5, d_year#15, d_qoy#16] +Condition : ((((isnotnull(d_qoy#16) AND isnotnull(d_year#15)) AND (d_qoy#16 = 2)) AND (d_year#15 = 2001)) AND isnotnull(d_date_sk#5)) (32) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [3]: [d_date_sk#5, d_year#20, d_qoy#21] +Input [3]: [d_date_sk#5, d_year#15, d_qoy#16] (33) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q15/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q15/explain.txt index fabc11130f172..47e84bc6e570f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q15/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q15/explain.txt @@ -54,7 +54,7 @@ Condition : (isnotnull(c_customer_sk#5) AND isnotnull(c_current_addr_sk#6)) (7) BroadcastExchange Input [2]: [c_customer_sk#5, c_current_addr_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_bill_customer_sk#1] @@ -66,65 +66,65 @@ Output [3]: [cs_sales_price#2, cs_sold_date_sk#3, c_current_addr_sk#6] Input [5]: [cs_bill_customer_sk#1, cs_sales_price#2, cs_sold_date_sk#3, c_customer_sk#5, c_current_addr_sk#6] (10) Scan parquet default.customer_address -Output [3]: [ca_address_sk#8, ca_state#9, ca_zip#10] +Output [3]: [ca_address_sk#7, ca_state#8, ca_zip#9] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [3]: [ca_address_sk#8, ca_state#9, ca_zip#10] +Input [3]: [ca_address_sk#7, ca_state#8, ca_zip#9] (12) Filter [codegen id : 2] -Input [3]: [ca_address_sk#8, ca_state#9, ca_zip#10] -Condition : isnotnull(ca_address_sk#8) +Input [3]: [ca_address_sk#7, ca_state#8, ca_zip#9] +Condition : isnotnull(ca_address_sk#7) (13) BroadcastExchange -Input [3]: [ca_address_sk#8, ca_state#9, ca_zip#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Input [3]: [ca_address_sk#7, ca_state#8, ca_zip#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 4] Left keys [1]: [c_current_addr_sk#6] -Right keys [1]: [ca_address_sk#8] -Join condition: ((substr(ca_zip#10, 1, 5) IN (85669,86197,88274,83405,86475,85392,85460,80348,81792) OR ca_state#9 IN (CA,WA,GA)) OR (cs_sales_price#2 > 500.00)) +Right keys [1]: [ca_address_sk#7] +Join condition: ((substr(ca_zip#9, 1, 5) IN (85669,86197,88274,83405,86475,85392,85460,80348,81792) OR ca_state#8 IN (CA,WA,GA)) OR (cs_sales_price#2 > 500.00)) (15) Project [codegen id : 4] -Output [3]: [cs_sales_price#2, cs_sold_date_sk#3, ca_zip#10] -Input [6]: [cs_sales_price#2, cs_sold_date_sk#3, c_current_addr_sk#6, ca_address_sk#8, ca_state#9, ca_zip#10] +Output [3]: [cs_sales_price#2, cs_sold_date_sk#3, ca_zip#9] +Input [6]: [cs_sales_price#2, cs_sold_date_sk#3, c_current_addr_sk#6, ca_address_sk#7, ca_state#8, ca_zip#9] (16) ReusedExchange [Reuses operator id: 27] -Output [1]: [d_date_sk#12] +Output [1]: [d_date_sk#10] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_sold_date_sk#3] -Right keys [1]: [d_date_sk#12] +Right keys [1]: [d_date_sk#10] Join condition: None (18) Project [codegen id : 4] -Output [2]: [cs_sales_price#2, ca_zip#10] -Input [4]: [cs_sales_price#2, cs_sold_date_sk#3, ca_zip#10, d_date_sk#12] +Output [2]: [cs_sales_price#2, ca_zip#9] +Input [4]: [cs_sales_price#2, cs_sold_date_sk#3, ca_zip#9, d_date_sk#10] (19) HashAggregate [codegen id : 4] -Input [2]: [cs_sales_price#2, ca_zip#10] -Keys [1]: [ca_zip#10] +Input [2]: [cs_sales_price#2, ca_zip#9] +Keys [1]: [ca_zip#9] Functions [1]: [partial_sum(UnscaledValue(cs_sales_price#2))] -Aggregate Attributes [1]: [sum#13] -Results [2]: [ca_zip#10, sum#14] +Aggregate Attributes [1]: [sum#11] +Results [2]: [ca_zip#9, sum#12] (20) Exchange -Input [2]: [ca_zip#10, sum#14] -Arguments: hashpartitioning(ca_zip#10, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [2]: [ca_zip#9, sum#12] +Arguments: hashpartitioning(ca_zip#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 5] -Input [2]: [ca_zip#10, sum#14] -Keys [1]: [ca_zip#10] +Input [2]: [ca_zip#9, sum#12] +Keys [1]: [ca_zip#9] Functions [1]: [sum(UnscaledValue(cs_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#2))#16] -Results [2]: [ca_zip#10, MakeDecimal(sum(UnscaledValue(cs_sales_price#2))#16,17,2) AS sum(cs_sales_price)#17] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#2))#13] +Results [2]: [ca_zip#9, MakeDecimal(sum(UnscaledValue(cs_sales_price#2))#13,17,2) AS sum(cs_sales_price)#14] (22) TakeOrderedAndProject -Input [2]: [ca_zip#10, sum(cs_sales_price)#17] -Arguments: 100, [ca_zip#10 ASC NULLS FIRST], [ca_zip#10, sum(cs_sales_price)#17] +Input [2]: [ca_zip#9, sum(cs_sales_price)#14] +Arguments: 100, [ca_zip#9 ASC NULLS FIRST], [ca_zip#9, sum(cs_sales_price)#14] ===== Subqueries ===== @@ -137,25 +137,25 @@ BroadcastExchange (27) (23) Scan parquet default.date_dim -Output [3]: [d_date_sk#12, d_year#18, d_qoy#19] +Output [3]: [d_date_sk#10, d_year#15, d_qoy#16] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,2), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (24) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#12, d_year#18, d_qoy#19] +Input [3]: [d_date_sk#10, d_year#15, d_qoy#16] (25) Filter [codegen id : 1] -Input [3]: [d_date_sk#12, d_year#18, d_qoy#19] -Condition : ((((isnotnull(d_qoy#19) AND isnotnull(d_year#18)) AND (d_qoy#19 = 2)) AND (d_year#18 = 2001)) AND isnotnull(d_date_sk#12)) +Input [3]: [d_date_sk#10, d_year#15, d_qoy#16] +Condition : ((((isnotnull(d_qoy#16) AND isnotnull(d_year#15)) AND (d_qoy#16 = 2)) AND (d_year#15 = 2001)) AND isnotnull(d_date_sk#10)) (26) Project [codegen id : 1] -Output [1]: [d_date_sk#12] -Input [3]: [d_date_sk#12, d_year#18, d_qoy#19] +Output [1]: [d_date_sk#10] +Input [3]: [d_date_sk#10, d_year#15, d_qoy#16] (27) BroadcastExchange -Input [1]: [d_date_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20] +Input [1]: [d_date_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16.sf100/explain.txt index 3fb379f7e5efd..23de7a5ed6748 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16.sf100/explain.txt @@ -66,192 +66,192 @@ Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_wareho (5) Exchange Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] -Arguments: hashpartitioning(cs_order_number#5, 5), ENSURE_REQUIREMENTS, [id=#15] +Arguments: hashpartitioning(cs_order_number#5, 5), ENSURE_REQUIREMENTS, [plan_id=1] (6) Sort [codegen id : 2] Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Arguments: [cs_order_number#5 ASC NULLS FIRST], false, 0 (7) Scan parquet default.catalog_sales -Output [3]: [cs_warehouse_sk#16, cs_order_number#17, cs_sold_date_sk#18] +Output [3]: [cs_warehouse_sk#15, cs_order_number#16, cs_sold_date_sk#17] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] ReadSchema: struct (8) ColumnarToRow [codegen id : 3] -Input [3]: [cs_warehouse_sk#16, cs_order_number#17, cs_sold_date_sk#18] +Input [3]: [cs_warehouse_sk#15, cs_order_number#16, cs_sold_date_sk#17] (9) Project [codegen id : 3] -Output [2]: [cs_warehouse_sk#16, cs_order_number#17] -Input [3]: [cs_warehouse_sk#16, cs_order_number#17, cs_sold_date_sk#18] +Output [2]: [cs_warehouse_sk#15, cs_order_number#16] +Input [3]: [cs_warehouse_sk#15, cs_order_number#16, cs_sold_date_sk#17] (10) Exchange -Input [2]: [cs_warehouse_sk#16, cs_order_number#17] -Arguments: hashpartitioning(cs_order_number#17, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [2]: [cs_warehouse_sk#15, cs_order_number#16] +Arguments: hashpartitioning(cs_order_number#16, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [2]: [cs_warehouse_sk#16, cs_order_number#17] -Arguments: [cs_order_number#17 ASC NULLS FIRST], false, 0 +Input [2]: [cs_warehouse_sk#15, cs_order_number#16] +Arguments: [cs_order_number#16 ASC NULLS FIRST], false, 0 (12) SortMergeJoin [codegen id : 5] Left keys [1]: [cs_order_number#5] -Right keys [1]: [cs_order_number#17] -Join condition: NOT (cs_warehouse_sk#4 = cs_warehouse_sk#16) +Right keys [1]: [cs_order_number#16] +Join condition: NOT (cs_warehouse_sk#4 = cs_warehouse_sk#15) (13) Project [codegen id : 5] Output [6]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] (14) Scan parquet default.catalog_returns -Output [2]: [cr_order_number#20, cr_returned_date_sk#21] +Output [2]: [cr_order_number#18, cr_returned_date_sk#19] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] ReadSchema: struct (15) ColumnarToRow [codegen id : 6] -Input [2]: [cr_order_number#20, cr_returned_date_sk#21] +Input [2]: [cr_order_number#18, cr_returned_date_sk#19] (16) Project [codegen id : 6] -Output [1]: [cr_order_number#20] -Input [2]: [cr_order_number#20, cr_returned_date_sk#21] +Output [1]: [cr_order_number#18] +Input [2]: [cr_order_number#18, cr_returned_date_sk#19] (17) Exchange -Input [1]: [cr_order_number#20] -Arguments: hashpartitioning(cr_order_number#20, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [1]: [cr_order_number#18] +Arguments: hashpartitioning(cr_order_number#18, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) Sort [codegen id : 7] -Input [1]: [cr_order_number#20] -Arguments: [cr_order_number#20 ASC NULLS FIRST], false, 0 +Input [1]: [cr_order_number#18] +Arguments: [cr_order_number#18 ASC NULLS FIRST], false, 0 (19) SortMergeJoin [codegen id : 11] Left keys [1]: [cs_order_number#5] -Right keys [1]: [cr_order_number#20] +Right keys [1]: [cr_order_number#18] Join condition: None (20) Scan parquet default.customer_address -Output [2]: [ca_address_sk#23, ca_state#24] +Output [2]: [ca_address_sk#20, ca_state#21] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,GA), IsNotNull(ca_address_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 8] -Input [2]: [ca_address_sk#23, ca_state#24] +Input [2]: [ca_address_sk#20, ca_state#21] (22) Filter [codegen id : 8] -Input [2]: [ca_address_sk#23, ca_state#24] -Condition : ((isnotnull(ca_state#24) AND (ca_state#24 = GA)) AND isnotnull(ca_address_sk#23)) +Input [2]: [ca_address_sk#20, ca_state#21] +Condition : ((isnotnull(ca_state#21) AND (ca_state#21 = GA)) AND isnotnull(ca_address_sk#20)) (23) Project [codegen id : 8] -Output [1]: [ca_address_sk#23] -Input [2]: [ca_address_sk#23, ca_state#24] +Output [1]: [ca_address_sk#20] +Input [2]: [ca_address_sk#20, ca_state#21] (24) BroadcastExchange -Input [1]: [ca_address_sk#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [ca_address_sk#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (25) BroadcastHashJoin [codegen id : 11] Left keys [1]: [cs_ship_addr_sk#2] -Right keys [1]: [ca_address_sk#23] +Right keys [1]: [ca_address_sk#20] Join condition: None (26) Project [codegen id : 11] Output [5]: [cs_ship_date_sk#1, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] -Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, ca_address_sk#23] +Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, ca_address_sk#20] (27) Scan parquet default.call_center -Output [2]: [cc_call_center_sk#26, cc_county#27] +Output [2]: [cc_call_center_sk#22, cc_county#23] Batched: true Location [not included in comparison]/{warehouse_dir}/call_center] PushedFilters: [IsNotNull(cc_county), EqualTo(cc_county,Williamson County), IsNotNull(cc_call_center_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 9] -Input [2]: [cc_call_center_sk#26, cc_county#27] +Input [2]: [cc_call_center_sk#22, cc_county#23] (29) Filter [codegen id : 9] -Input [2]: [cc_call_center_sk#26, cc_county#27] -Condition : ((isnotnull(cc_county#27) AND (cc_county#27 = Williamson County)) AND isnotnull(cc_call_center_sk#26)) +Input [2]: [cc_call_center_sk#22, cc_county#23] +Condition : ((isnotnull(cc_county#23) AND (cc_county#23 = Williamson County)) AND isnotnull(cc_call_center_sk#22)) (30) Project [codegen id : 9] -Output [1]: [cc_call_center_sk#26] -Input [2]: [cc_call_center_sk#26, cc_county#27] +Output [1]: [cc_call_center_sk#22] +Input [2]: [cc_call_center_sk#22, cc_county#23] (31) BroadcastExchange -Input [1]: [cc_call_center_sk#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#28] +Input [1]: [cc_call_center_sk#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (32) BroadcastHashJoin [codegen id : 11] Left keys [1]: [cs_call_center_sk#3] -Right keys [1]: [cc_call_center_sk#26] +Right keys [1]: [cc_call_center_sk#22] Join condition: None (33) Project [codegen id : 11] Output [4]: [cs_ship_date_sk#1, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] -Input [6]: [cs_ship_date_sk#1, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cc_call_center_sk#26] +Input [6]: [cs_ship_date_sk#1, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cc_call_center_sk#22] (34) Scan parquet default.date_dim -Output [2]: [d_date_sk#29, d_date#30] +Output [2]: [d_date_sk#24, d_date#25] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2002-02-01), LessThanOrEqual(d_date,2002-04-02), IsNotNull(d_date_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 10] -Input [2]: [d_date_sk#29, d_date#30] +Input [2]: [d_date_sk#24, d_date#25] (36) Filter [codegen id : 10] -Input [2]: [d_date_sk#29, d_date#30] -Condition : (((isnotnull(d_date#30) AND (d_date#30 >= 2002-02-01)) AND (d_date#30 <= 2002-04-02)) AND isnotnull(d_date_sk#29)) +Input [2]: [d_date_sk#24, d_date#25] +Condition : (((isnotnull(d_date#25) AND (d_date#25 >= 2002-02-01)) AND (d_date#25 <= 2002-04-02)) AND isnotnull(d_date_sk#24)) (37) Project [codegen id : 10] -Output [1]: [d_date_sk#29] -Input [2]: [d_date_sk#29, d_date#30] +Output [1]: [d_date_sk#24] +Input [2]: [d_date_sk#24, d_date#25] (38) BroadcastExchange -Input [1]: [d_date_sk#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#31] +Input [1]: [d_date_sk#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] (39) BroadcastHashJoin [codegen id : 11] Left keys [1]: [cs_ship_date_sk#1] -Right keys [1]: [d_date_sk#29] +Right keys [1]: [d_date_sk#24] Join condition: None (40) Project [codegen id : 11] Output [3]: [cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] -Input [5]: [cs_ship_date_sk#1, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, d_date_sk#29] +Input [5]: [cs_ship_date_sk#1, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, d_date_sk#24] (41) HashAggregate [codegen id : 11] Input [3]: [cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Keys [1]: [cs_order_number#5] Functions [2]: [partial_sum(UnscaledValue(cs_ext_ship_cost#6)), partial_sum(UnscaledValue(cs_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#32, sum(UnscaledValue(cs_net_profit#7))#33] -Results [3]: [cs_order_number#5, sum#34, sum#35] +Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#26, sum(UnscaledValue(cs_net_profit#7))#27] +Results [3]: [cs_order_number#5, sum#28, sum#29] (42) HashAggregate [codegen id : 11] -Input [3]: [cs_order_number#5, sum#34, sum#35] +Input [3]: [cs_order_number#5, sum#28, sum#29] Keys [1]: [cs_order_number#5] Functions [2]: [merge_sum(UnscaledValue(cs_ext_ship_cost#6)), merge_sum(UnscaledValue(cs_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#32, sum(UnscaledValue(cs_net_profit#7))#33] -Results [3]: [cs_order_number#5, sum#34, sum#35] +Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#26, sum(UnscaledValue(cs_net_profit#7))#27] +Results [3]: [cs_order_number#5, sum#28, sum#29] (43) HashAggregate [codegen id : 11] -Input [3]: [cs_order_number#5, sum#34, sum#35] +Input [3]: [cs_order_number#5, sum#28, sum#29] Keys: [] Functions [3]: [merge_sum(UnscaledValue(cs_ext_ship_cost#6)), merge_sum(UnscaledValue(cs_net_profit#7)), partial_count(distinct cs_order_number#5)] -Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#32, sum(UnscaledValue(cs_net_profit#7))#33, count(cs_order_number#5)#36] -Results [3]: [sum#34, sum#35, count#37] +Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#26, sum(UnscaledValue(cs_net_profit#7))#27, count(cs_order_number#5)#30] +Results [3]: [sum#28, sum#29, count#31] (44) Exchange -Input [3]: [sum#34, sum#35, count#37] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#38] +Input [3]: [sum#28, sum#29, count#31] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (45) HashAggregate [codegen id : 12] -Input [3]: [sum#34, sum#35, count#37] +Input [3]: [sum#28, sum#29, count#31] Keys: [] Functions [3]: [sum(UnscaledValue(cs_ext_ship_cost#6)), sum(UnscaledValue(cs_net_profit#7)), count(distinct cs_order_number#5)] -Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#32, sum(UnscaledValue(cs_net_profit#7))#33, count(cs_order_number#5)#36] -Results [3]: [count(cs_order_number#5)#36 AS order count #39, MakeDecimal(sum(UnscaledValue(cs_ext_ship_cost#6))#32,17,2) AS total shipping cost #40, MakeDecimal(sum(UnscaledValue(cs_net_profit#7))#33,17,2) AS total net profit #41] +Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#26, sum(UnscaledValue(cs_net_profit#7))#27, count(cs_order_number#5)#30] +Results [3]: [count(cs_order_number#5)#30 AS order count #32, MakeDecimal(sum(UnscaledValue(cs_ext_ship_cost#6))#26,17,2) AS total shipping cost #33, MakeDecimal(sum(UnscaledValue(cs_net_profit#7))#27,17,2) AS total net profit #34] ===== Subqueries ===== @@ -266,40 +266,40 @@ ObjectHashAggregate (52) (46) Scan parquet default.customer_address -Output [2]: [ca_address_sk#23, ca_state#24] +Output [2]: [ca_address_sk#20, ca_state#21] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,GA), IsNotNull(ca_address_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 1] -Input [2]: [ca_address_sk#23, ca_state#24] +Input [2]: [ca_address_sk#20, ca_state#21] (48) Filter [codegen id : 1] -Input [2]: [ca_address_sk#23, ca_state#24] -Condition : ((isnotnull(ca_state#24) AND (ca_state#24 = GA)) AND isnotnull(ca_address_sk#23)) +Input [2]: [ca_address_sk#20, ca_state#21] +Condition : ((isnotnull(ca_state#21) AND (ca_state#21 = GA)) AND isnotnull(ca_address_sk#20)) (49) Project [codegen id : 1] -Output [1]: [ca_address_sk#23] -Input [2]: [ca_address_sk#23, ca_state#24] +Output [1]: [ca_address_sk#20] +Input [2]: [ca_address_sk#20, ca_state#21] (50) ObjectHashAggregate -Input [1]: [ca_address_sk#23] +Input [1]: [ca_address_sk#20] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#23, 42), 17961, 143688, 0, 0)] -Aggregate Attributes [1]: [buf#42] -Results [1]: [buf#43] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 143688, 0, 0)] +Aggregate Attributes [1]: [buf#35] +Results [1]: [buf#36] (51) Exchange -Input [1]: [buf#43] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#44] +Input [1]: [buf#36] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8] (52) ObjectHashAggregate -Input [1]: [buf#43] +Input [1]: [buf#36] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#23, 42), 17961, 143688, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#23, 42), 17961, 143688, 0, 0)#45] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#23, 42), 17961, 143688, 0, 0)#45 AS bloomFilter#46] +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 143688, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 143688, 0, 0)#37] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 143688, 0, 0)#37 AS bloomFilter#38] Subquery:2 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#11, [id=#12] ObjectHashAggregate (59) @@ -312,40 +312,40 @@ ObjectHashAggregate (59) (53) Scan parquet default.call_center -Output [2]: [cc_call_center_sk#26, cc_county#27] +Output [2]: [cc_call_center_sk#22, cc_county#23] Batched: true Location [not included in comparison]/{warehouse_dir}/call_center] PushedFilters: [IsNotNull(cc_county), EqualTo(cc_county,Williamson County), IsNotNull(cc_call_center_sk)] ReadSchema: struct (54) ColumnarToRow [codegen id : 1] -Input [2]: [cc_call_center_sk#26, cc_county#27] +Input [2]: [cc_call_center_sk#22, cc_county#23] (55) Filter [codegen id : 1] -Input [2]: [cc_call_center_sk#26, cc_county#27] -Condition : ((isnotnull(cc_county#27) AND (cc_county#27 = Williamson County)) AND isnotnull(cc_call_center_sk#26)) +Input [2]: [cc_call_center_sk#22, cc_county#23] +Condition : ((isnotnull(cc_county#23) AND (cc_county#23 = Williamson County)) AND isnotnull(cc_call_center_sk#22)) (56) Project [codegen id : 1] -Output [1]: [cc_call_center_sk#26] -Input [2]: [cc_call_center_sk#26, cc_county#27] +Output [1]: [cc_call_center_sk#22] +Input [2]: [cc_call_center_sk#22, cc_county#23] (57) ObjectHashAggregate -Input [1]: [cc_call_center_sk#26] +Input [1]: [cc_call_center_sk#22] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(cc_call_center_sk#26, 42), 4, 32, 0, 0)] -Aggregate Attributes [1]: [buf#47] -Results [1]: [buf#48] +Functions [1]: [partial_bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 32, 0, 0)] +Aggregate Attributes [1]: [buf#39] +Results [1]: [buf#40] (58) Exchange -Input [1]: [buf#48] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#49] +Input [1]: [buf#40] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=9] (59) ObjectHashAggregate -Input [1]: [buf#48] +Input [1]: [buf#40] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#26, 42), 4, 32, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#26, 42), 4, 32, 0, 0)#50] -Results [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#26, 42), 4, 32, 0, 0)#50 AS bloomFilter#51] +Functions [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 32, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 32, 0, 0)#41] +Results [1]: [bloom_filter_agg(xxhash64(cc_call_center_sk#22, 42), 4, 32, 0, 0)#41 AS bloomFilter#42] Subquery:3 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#13, [id=#14] ObjectHashAggregate (66) @@ -358,39 +358,39 @@ ObjectHashAggregate (66) (60) Scan parquet default.date_dim -Output [2]: [d_date_sk#29, d_date#30] +Output [2]: [d_date_sk#24, d_date#25] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2002-02-01), LessThanOrEqual(d_date,2002-04-02), IsNotNull(d_date_sk)] ReadSchema: struct (61) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#29, d_date#30] +Input [2]: [d_date_sk#24, d_date#25] (62) Filter [codegen id : 1] -Input [2]: [d_date_sk#29, d_date#30] -Condition : (((isnotnull(d_date#30) AND (d_date#30 >= 2002-02-01)) AND (d_date#30 <= 2002-04-02)) AND isnotnull(d_date_sk#29)) +Input [2]: [d_date_sk#24, d_date#25] +Condition : (((isnotnull(d_date#25) AND (d_date#25 >= 2002-02-01)) AND (d_date#25 <= 2002-04-02)) AND isnotnull(d_date_sk#24)) (63) Project [codegen id : 1] -Output [1]: [d_date_sk#29] -Input [2]: [d_date_sk#29, d_date#30] +Output [1]: [d_date_sk#24] +Input [2]: [d_date_sk#24, d_date#25] (64) ObjectHashAggregate -Input [1]: [d_date_sk#29] +Input [1]: [d_date_sk#24] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 584392, 0, 0)] -Aggregate Attributes [1]: [buf#52] -Results [1]: [buf#53] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 584392, 0, 0)] +Aggregate Attributes [1]: [buf#43] +Results [1]: [buf#44] (65) Exchange -Input [1]: [buf#53] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#54] +Input [1]: [buf#44] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10] (66) ObjectHashAggregate -Input [1]: [buf#53] +Input [1]: [buf#44] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 584392, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 584392, 0, 0)#55] -Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 584392, 0, 0)#55 AS bloomFilter#56] +Functions [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 584392, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 584392, 0, 0)#45] +Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 584392, 0, 0)#45 AS bloomFilter#46] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16/explain.txt index 210be116962bb..a88526686772c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q16/explain.txt @@ -66,190 +66,190 @@ Input [8]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_wareho (5) Exchange Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] -Arguments: hashpartitioning(cs_order_number#5, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(cs_order_number#5, 5), ENSURE_REQUIREMENTS, [plan_id=1] (6) Sort [codegen id : 2] Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Arguments: [cs_order_number#5 ASC NULLS FIRST], false, 0 (7) Scan parquet default.catalog_sales -Output [3]: [cs_warehouse_sk#10, cs_order_number#11, cs_sold_date_sk#12] +Output [3]: [cs_warehouse_sk#9, cs_order_number#10, cs_sold_date_sk#11] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] ReadSchema: struct (8) ColumnarToRow [codegen id : 3] -Input [3]: [cs_warehouse_sk#10, cs_order_number#11, cs_sold_date_sk#12] +Input [3]: [cs_warehouse_sk#9, cs_order_number#10, cs_sold_date_sk#11] (9) Project [codegen id : 3] -Output [2]: [cs_warehouse_sk#10, cs_order_number#11] -Input [3]: [cs_warehouse_sk#10, cs_order_number#11, cs_sold_date_sk#12] +Output [2]: [cs_warehouse_sk#9, cs_order_number#10] +Input [3]: [cs_warehouse_sk#9, cs_order_number#10, cs_sold_date_sk#11] (10) Exchange -Input [2]: [cs_warehouse_sk#10, cs_order_number#11] -Arguments: hashpartitioning(cs_order_number#11, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [2]: [cs_warehouse_sk#9, cs_order_number#10] +Arguments: hashpartitioning(cs_order_number#10, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [2]: [cs_warehouse_sk#10, cs_order_number#11] -Arguments: [cs_order_number#11 ASC NULLS FIRST], false, 0 +Input [2]: [cs_warehouse_sk#9, cs_order_number#10] +Arguments: [cs_order_number#10 ASC NULLS FIRST], false, 0 (12) SortMergeJoin [codegen id : 5] Left keys [1]: [cs_order_number#5] -Right keys [1]: [cs_order_number#11] -Join condition: NOT (cs_warehouse_sk#4 = cs_warehouse_sk#10) +Right keys [1]: [cs_order_number#10] +Join condition: NOT (cs_warehouse_sk#4 = cs_warehouse_sk#9) (13) Project [codegen id : 5] Output [6]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_warehouse_sk#4, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] (14) Scan parquet default.catalog_returns -Output [2]: [cr_order_number#14, cr_returned_date_sk#15] +Output [2]: [cr_order_number#12, cr_returned_date_sk#13] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] ReadSchema: struct (15) ColumnarToRow [codegen id : 6] -Input [2]: [cr_order_number#14, cr_returned_date_sk#15] +Input [2]: [cr_order_number#12, cr_returned_date_sk#13] (16) Project [codegen id : 6] -Output [1]: [cr_order_number#14] -Input [2]: [cr_order_number#14, cr_returned_date_sk#15] +Output [1]: [cr_order_number#12] +Input [2]: [cr_order_number#12, cr_returned_date_sk#13] (17) Exchange -Input [1]: [cr_order_number#14] -Arguments: hashpartitioning(cr_order_number#14, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [1]: [cr_order_number#12] +Arguments: hashpartitioning(cr_order_number#12, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) Sort [codegen id : 7] -Input [1]: [cr_order_number#14] -Arguments: [cr_order_number#14 ASC NULLS FIRST], false, 0 +Input [1]: [cr_order_number#12] +Arguments: [cr_order_number#12 ASC NULLS FIRST], false, 0 (19) SortMergeJoin [codegen id : 11] Left keys [1]: [cs_order_number#5] -Right keys [1]: [cr_order_number#14] +Right keys [1]: [cr_order_number#12] Join condition: None (20) Scan parquet default.date_dim -Output [2]: [d_date_sk#17, d_date#18] +Output [2]: [d_date_sk#14, d_date#15] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2002-02-01), LessThanOrEqual(d_date,2002-04-02), IsNotNull(d_date_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 8] -Input [2]: [d_date_sk#17, d_date#18] +Input [2]: [d_date_sk#14, d_date#15] (22) Filter [codegen id : 8] -Input [2]: [d_date_sk#17, d_date#18] -Condition : (((isnotnull(d_date#18) AND (d_date#18 >= 2002-02-01)) AND (d_date#18 <= 2002-04-02)) AND isnotnull(d_date_sk#17)) +Input [2]: [d_date_sk#14, d_date#15] +Condition : (((isnotnull(d_date#15) AND (d_date#15 >= 2002-02-01)) AND (d_date#15 <= 2002-04-02)) AND isnotnull(d_date_sk#14)) (23) Project [codegen id : 8] -Output [1]: [d_date_sk#17] -Input [2]: [d_date_sk#17, d_date#18] +Output [1]: [d_date_sk#14] +Input [2]: [d_date_sk#14, d_date#15] (24) BroadcastExchange -Input [1]: [d_date_sk#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#19] +Input [1]: [d_date_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (25) BroadcastHashJoin [codegen id : 11] Left keys [1]: [cs_ship_date_sk#1] -Right keys [1]: [d_date_sk#17] +Right keys [1]: [d_date_sk#14] Join condition: None (26) Project [codegen id : 11] Output [5]: [cs_ship_addr_sk#2, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] -Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, d_date_sk#17] +Input [7]: [cs_ship_date_sk#1, cs_ship_addr_sk#2, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, d_date_sk#14] (27) Scan parquet default.customer_address -Output [2]: [ca_address_sk#20, ca_state#21] +Output [2]: [ca_address_sk#16, ca_state#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,GA), IsNotNull(ca_address_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 9] -Input [2]: [ca_address_sk#20, ca_state#21] +Input [2]: [ca_address_sk#16, ca_state#17] (29) Filter [codegen id : 9] -Input [2]: [ca_address_sk#20, ca_state#21] -Condition : ((isnotnull(ca_state#21) AND (ca_state#21 = GA)) AND isnotnull(ca_address_sk#20)) +Input [2]: [ca_address_sk#16, ca_state#17] +Condition : ((isnotnull(ca_state#17) AND (ca_state#17 = GA)) AND isnotnull(ca_address_sk#16)) (30) Project [codegen id : 9] -Output [1]: [ca_address_sk#20] -Input [2]: [ca_address_sk#20, ca_state#21] +Output [1]: [ca_address_sk#16] +Input [2]: [ca_address_sk#16, ca_state#17] (31) BroadcastExchange -Input [1]: [ca_address_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [ca_address_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (32) BroadcastHashJoin [codegen id : 11] Left keys [1]: [cs_ship_addr_sk#2] -Right keys [1]: [ca_address_sk#20] +Right keys [1]: [ca_address_sk#16] Join condition: None (33) Project [codegen id : 11] Output [4]: [cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] -Input [6]: [cs_ship_addr_sk#2, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, ca_address_sk#20] +Input [6]: [cs_ship_addr_sk#2, cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, ca_address_sk#16] (34) Scan parquet default.call_center -Output [2]: [cc_call_center_sk#23, cc_county#24] +Output [2]: [cc_call_center_sk#18, cc_county#19] Batched: true Location [not included in comparison]/{warehouse_dir}/call_center] PushedFilters: [IsNotNull(cc_county), EqualTo(cc_county,Williamson County), IsNotNull(cc_call_center_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 10] -Input [2]: [cc_call_center_sk#23, cc_county#24] +Input [2]: [cc_call_center_sk#18, cc_county#19] (36) Filter [codegen id : 10] -Input [2]: [cc_call_center_sk#23, cc_county#24] -Condition : ((isnotnull(cc_county#24) AND (cc_county#24 = Williamson County)) AND isnotnull(cc_call_center_sk#23)) +Input [2]: [cc_call_center_sk#18, cc_county#19] +Condition : ((isnotnull(cc_county#19) AND (cc_county#19 = Williamson County)) AND isnotnull(cc_call_center_sk#18)) (37) Project [codegen id : 10] -Output [1]: [cc_call_center_sk#23] -Input [2]: [cc_call_center_sk#23, cc_county#24] +Output [1]: [cc_call_center_sk#18] +Input [2]: [cc_call_center_sk#18, cc_county#19] (38) BroadcastExchange -Input [1]: [cc_call_center_sk#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [cc_call_center_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] (39) BroadcastHashJoin [codegen id : 11] Left keys [1]: [cs_call_center_sk#3] -Right keys [1]: [cc_call_center_sk#23] +Right keys [1]: [cc_call_center_sk#18] Join condition: None (40) Project [codegen id : 11] Output [3]: [cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] -Input [5]: [cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cc_call_center_sk#23] +Input [5]: [cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7, cc_call_center_sk#18] (41) HashAggregate [codegen id : 11] Input [3]: [cs_order_number#5, cs_ext_ship_cost#6, cs_net_profit#7] Keys [1]: [cs_order_number#5] Functions [2]: [partial_sum(UnscaledValue(cs_ext_ship_cost#6)), partial_sum(UnscaledValue(cs_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#26, sum(UnscaledValue(cs_net_profit#7))#27] -Results [3]: [cs_order_number#5, sum#28, sum#29] +Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#20, sum(UnscaledValue(cs_net_profit#7))#21] +Results [3]: [cs_order_number#5, sum#22, sum#23] (42) HashAggregate [codegen id : 11] -Input [3]: [cs_order_number#5, sum#28, sum#29] +Input [3]: [cs_order_number#5, sum#22, sum#23] Keys [1]: [cs_order_number#5] Functions [2]: [merge_sum(UnscaledValue(cs_ext_ship_cost#6)), merge_sum(UnscaledValue(cs_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#26, sum(UnscaledValue(cs_net_profit#7))#27] -Results [3]: [cs_order_number#5, sum#28, sum#29] +Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#20, sum(UnscaledValue(cs_net_profit#7))#21] +Results [3]: [cs_order_number#5, sum#22, sum#23] (43) HashAggregate [codegen id : 11] -Input [3]: [cs_order_number#5, sum#28, sum#29] +Input [3]: [cs_order_number#5, sum#22, sum#23] Keys: [] Functions [3]: [merge_sum(UnscaledValue(cs_ext_ship_cost#6)), merge_sum(UnscaledValue(cs_net_profit#7)), partial_count(distinct cs_order_number#5)] -Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#26, sum(UnscaledValue(cs_net_profit#7))#27, count(cs_order_number#5)#30] -Results [3]: [sum#28, sum#29, count#31] +Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#20, sum(UnscaledValue(cs_net_profit#7))#21, count(cs_order_number#5)#24] +Results [3]: [sum#22, sum#23, count#25] (44) Exchange -Input [3]: [sum#28, sum#29, count#31] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#32] +Input [3]: [sum#22, sum#23, count#25] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (45) HashAggregate [codegen id : 12] -Input [3]: [sum#28, sum#29, count#31] +Input [3]: [sum#22, sum#23, count#25] Keys: [] Functions [3]: [sum(UnscaledValue(cs_ext_ship_cost#6)), sum(UnscaledValue(cs_net_profit#7)), count(distinct cs_order_number#5)] -Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#26, sum(UnscaledValue(cs_net_profit#7))#27, count(cs_order_number#5)#30] -Results [3]: [count(cs_order_number#5)#30 AS order count #33, MakeDecimal(sum(UnscaledValue(cs_ext_ship_cost#6))#26,17,2) AS total shipping cost #34, MakeDecimal(sum(UnscaledValue(cs_net_profit#7))#27,17,2) AS total net profit #35] +Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_ship_cost#6))#20, sum(UnscaledValue(cs_net_profit#7))#21, count(cs_order_number#5)#24] +Results [3]: [count(cs_order_number#5)#24 AS order count #26, MakeDecimal(sum(UnscaledValue(cs_ext_ship_cost#6))#20,17,2) AS total shipping cost #27, MakeDecimal(sum(UnscaledValue(cs_net_profit#7))#21,17,2) AS total net profit #28] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q17.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q17.sf100/explain.txt index d61798f6ad06e..53df5af321707 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q17.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q17.sf100/explain.txt @@ -93,7 +93,7 @@ Condition : isnotnull(s_store_sk#9) (10) BroadcastExchange Input [2]: [s_store_sk#9, s_state#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_store_sk#3] @@ -106,168 +106,168 @@ Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, s (13) Exchange Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_state#10] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#12] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) Sort [codegen id : 4] Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_state#10] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (15) Scan parquet default.item -Output [3]: [i_item_sk#13, i_item_id#14, i_item_desc#15] +Output [3]: [i_item_sk#11, i_item_id#12, i_item_desc#13] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [3]: [i_item_sk#13, i_item_id#14, i_item_desc#15] +Input [3]: [i_item_sk#11, i_item_id#12, i_item_desc#13] (17) Filter [codegen id : 5] -Input [3]: [i_item_sk#13, i_item_id#14, i_item_desc#15] -Condition : isnotnull(i_item_sk#13) +Input [3]: [i_item_sk#11, i_item_id#12, i_item_desc#13] +Condition : isnotnull(i_item_sk#11) (18) Exchange -Input [3]: [i_item_sk#13, i_item_id#14, i_item_desc#15] -Arguments: hashpartitioning(i_item_sk#13, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [3]: [i_item_sk#11, i_item_id#12, i_item_desc#13] +Arguments: hashpartitioning(i_item_sk#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 6] -Input [3]: [i_item_sk#13, i_item_id#14, i_item_desc#15] -Arguments: [i_item_sk#13 ASC NULLS FIRST], false, 0 +Input [3]: [i_item_sk#11, i_item_id#12, i_item_desc#13] +Arguments: [i_item_sk#11 ASC NULLS FIRST], false, 0 (20) SortMergeJoin [codegen id : 7] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#13] +Right keys [1]: [i_item_sk#11] Join condition: None (21) Project [codegen id : 7] -Output [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_state#10, i_item_id#14, i_item_desc#15] -Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_state#10, i_item_sk#13, i_item_id#14, i_item_desc#15] +Output [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_state#10, i_item_id#12, i_item_desc#13] +Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_state#10, i_item_sk#11, i_item_id#12, i_item_desc#13] (22) Exchange -Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_state#10, i_item_id#14, i_item_desc#15] -Arguments: hashpartitioning(ss_customer_sk#2, ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_state#10, i_item_id#12, i_item_desc#13] +Arguments: hashpartitioning(ss_customer_sk#2, ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) Sort [codegen id : 8] -Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_state#10, i_item_id#14, i_item_desc#15] +Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_state#10, i_item_id#12, i_item_desc#13] Arguments: [ss_customer_sk#2 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST, ss_ticket_number#4 ASC NULLS FIRST], false, 0 (24) Scan parquet default.store_returns -Output [5]: [sr_item_sk#18, sr_customer_sk#19, sr_ticket_number#20, sr_return_quantity#21, sr_returned_date_sk#22] +Output [5]: [sr_item_sk#14, sr_customer_sk#15, sr_ticket_number#16, sr_return_quantity#17, sr_returned_date_sk#18] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(sr_returned_date_sk#22), dynamicpruningexpression(sr_returned_date_sk#22 IN dynamicpruning#23)] +PartitionFilters: [isnotnull(sr_returned_date_sk#18), dynamicpruningexpression(sr_returned_date_sk#18 IN dynamicpruning#19)] PushedFilters: [IsNotNull(sr_customer_sk), IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct (25) ColumnarToRow [codegen id : 10] -Input [5]: [sr_item_sk#18, sr_customer_sk#19, sr_ticket_number#20, sr_return_quantity#21, sr_returned_date_sk#22] +Input [5]: [sr_item_sk#14, sr_customer_sk#15, sr_ticket_number#16, sr_return_quantity#17, sr_returned_date_sk#18] (26) Filter [codegen id : 10] -Input [5]: [sr_item_sk#18, sr_customer_sk#19, sr_ticket_number#20, sr_return_quantity#21, sr_returned_date_sk#22] -Condition : ((isnotnull(sr_customer_sk#19) AND isnotnull(sr_item_sk#18)) AND isnotnull(sr_ticket_number#20)) +Input [5]: [sr_item_sk#14, sr_customer_sk#15, sr_ticket_number#16, sr_return_quantity#17, sr_returned_date_sk#18] +Condition : ((isnotnull(sr_customer_sk#15) AND isnotnull(sr_item_sk#14)) AND isnotnull(sr_ticket_number#16)) (27) ReusedExchange [Reuses operator id: 59] -Output [1]: [d_date_sk#24] +Output [1]: [d_date_sk#20] (28) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [sr_returned_date_sk#22] -Right keys [1]: [d_date_sk#24] +Left keys [1]: [sr_returned_date_sk#18] +Right keys [1]: [d_date_sk#20] Join condition: None (29) Project [codegen id : 10] -Output [4]: [sr_item_sk#18, sr_customer_sk#19, sr_ticket_number#20, sr_return_quantity#21] -Input [6]: [sr_item_sk#18, sr_customer_sk#19, sr_ticket_number#20, sr_return_quantity#21, sr_returned_date_sk#22, d_date_sk#24] +Output [4]: [sr_item_sk#14, sr_customer_sk#15, sr_ticket_number#16, sr_return_quantity#17] +Input [6]: [sr_item_sk#14, sr_customer_sk#15, sr_ticket_number#16, sr_return_quantity#17, sr_returned_date_sk#18, d_date_sk#20] (30) Exchange -Input [4]: [sr_item_sk#18, sr_customer_sk#19, sr_ticket_number#20, sr_return_quantity#21] -Arguments: hashpartitioning(sr_customer_sk#19, sr_item_sk#18, sr_ticket_number#20, 5), ENSURE_REQUIREMENTS, [id=#25] +Input [4]: [sr_item_sk#14, sr_customer_sk#15, sr_ticket_number#16, sr_return_quantity#17] +Arguments: hashpartitioning(sr_customer_sk#15, sr_item_sk#14, sr_ticket_number#16, 5), ENSURE_REQUIREMENTS, [plan_id=5] (31) Sort [codegen id : 11] -Input [4]: [sr_item_sk#18, sr_customer_sk#19, sr_ticket_number#20, sr_return_quantity#21] -Arguments: [sr_customer_sk#19 ASC NULLS FIRST, sr_item_sk#18 ASC NULLS FIRST, sr_ticket_number#20 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#14, sr_customer_sk#15, sr_ticket_number#16, sr_return_quantity#17] +Arguments: [sr_customer_sk#15 ASC NULLS FIRST, sr_item_sk#14 ASC NULLS FIRST, sr_ticket_number#16 ASC NULLS FIRST], false, 0 (32) SortMergeJoin [codegen id : 12] Left keys [3]: [ss_customer_sk#2, ss_item_sk#1, ss_ticket_number#4] -Right keys [3]: [sr_customer_sk#19, sr_item_sk#18, sr_ticket_number#20] +Right keys [3]: [sr_customer_sk#15, sr_item_sk#14, sr_ticket_number#16] Join condition: None (33) Project [codegen id : 12] -Output [7]: [ss_quantity#5, s_state#10, i_item_id#14, i_item_desc#15, sr_item_sk#18, sr_customer_sk#19, sr_return_quantity#21] -Input [11]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_state#10, i_item_id#14, i_item_desc#15, sr_item_sk#18, sr_customer_sk#19, sr_ticket_number#20, sr_return_quantity#21] +Output [7]: [ss_quantity#5, s_state#10, i_item_id#12, i_item_desc#13, sr_item_sk#14, sr_customer_sk#15, sr_return_quantity#17] +Input [11]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_state#10, i_item_id#12, i_item_desc#13, sr_item_sk#14, sr_customer_sk#15, sr_ticket_number#16, sr_return_quantity#17] (34) Exchange -Input [7]: [ss_quantity#5, s_state#10, i_item_id#14, i_item_desc#15, sr_item_sk#18, sr_customer_sk#19, sr_return_quantity#21] -Arguments: hashpartitioning(sr_customer_sk#19, sr_item_sk#18, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [7]: [ss_quantity#5, s_state#10, i_item_id#12, i_item_desc#13, sr_item_sk#14, sr_customer_sk#15, sr_return_quantity#17] +Arguments: hashpartitioning(sr_customer_sk#15, sr_item_sk#14, 5), ENSURE_REQUIREMENTS, [plan_id=6] (35) Sort [codegen id : 13] -Input [7]: [ss_quantity#5, s_state#10, i_item_id#14, i_item_desc#15, sr_item_sk#18, sr_customer_sk#19, sr_return_quantity#21] -Arguments: [sr_customer_sk#19 ASC NULLS FIRST, sr_item_sk#18 ASC NULLS FIRST], false, 0 +Input [7]: [ss_quantity#5, s_state#10, i_item_id#12, i_item_desc#13, sr_item_sk#14, sr_customer_sk#15, sr_return_quantity#17] +Arguments: [sr_customer_sk#15 ASC NULLS FIRST, sr_item_sk#14 ASC NULLS FIRST], false, 0 (36) Scan parquet default.catalog_sales -Output [4]: [cs_bill_customer_sk#27, cs_item_sk#28, cs_quantity#29, cs_sold_date_sk#30] +Output [4]: [cs_bill_customer_sk#21, cs_item_sk#22, cs_quantity#23, cs_sold_date_sk#24] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#30), dynamicpruningexpression(cs_sold_date_sk#30 IN dynamicpruning#23)] +PartitionFilters: [isnotnull(cs_sold_date_sk#24), dynamicpruningexpression(cs_sold_date_sk#24 IN dynamicpruning#19)] PushedFilters: [IsNotNull(cs_bill_customer_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 15] -Input [4]: [cs_bill_customer_sk#27, cs_item_sk#28, cs_quantity#29, cs_sold_date_sk#30] +Input [4]: [cs_bill_customer_sk#21, cs_item_sk#22, cs_quantity#23, cs_sold_date_sk#24] (38) Filter [codegen id : 15] -Input [4]: [cs_bill_customer_sk#27, cs_item_sk#28, cs_quantity#29, cs_sold_date_sk#30] -Condition : (isnotnull(cs_bill_customer_sk#27) AND isnotnull(cs_item_sk#28)) +Input [4]: [cs_bill_customer_sk#21, cs_item_sk#22, cs_quantity#23, cs_sold_date_sk#24] +Condition : (isnotnull(cs_bill_customer_sk#21) AND isnotnull(cs_item_sk#22)) (39) ReusedExchange [Reuses operator id: 59] -Output [1]: [d_date_sk#31] +Output [1]: [d_date_sk#25] (40) BroadcastHashJoin [codegen id : 15] -Left keys [1]: [cs_sold_date_sk#30] -Right keys [1]: [d_date_sk#31] +Left keys [1]: [cs_sold_date_sk#24] +Right keys [1]: [d_date_sk#25] Join condition: None (41) Project [codegen id : 15] -Output [3]: [cs_bill_customer_sk#27, cs_item_sk#28, cs_quantity#29] -Input [5]: [cs_bill_customer_sk#27, cs_item_sk#28, cs_quantity#29, cs_sold_date_sk#30, d_date_sk#31] +Output [3]: [cs_bill_customer_sk#21, cs_item_sk#22, cs_quantity#23] +Input [5]: [cs_bill_customer_sk#21, cs_item_sk#22, cs_quantity#23, cs_sold_date_sk#24, d_date_sk#25] (42) Exchange -Input [3]: [cs_bill_customer_sk#27, cs_item_sk#28, cs_quantity#29] -Arguments: hashpartitioning(cs_bill_customer_sk#27, cs_item_sk#28, 5), ENSURE_REQUIREMENTS, [id=#32] +Input [3]: [cs_bill_customer_sk#21, cs_item_sk#22, cs_quantity#23] +Arguments: hashpartitioning(cs_bill_customer_sk#21, cs_item_sk#22, 5), ENSURE_REQUIREMENTS, [plan_id=7] (43) Sort [codegen id : 16] -Input [3]: [cs_bill_customer_sk#27, cs_item_sk#28, cs_quantity#29] -Arguments: [cs_bill_customer_sk#27 ASC NULLS FIRST, cs_item_sk#28 ASC NULLS FIRST], false, 0 +Input [3]: [cs_bill_customer_sk#21, cs_item_sk#22, cs_quantity#23] +Arguments: [cs_bill_customer_sk#21 ASC NULLS FIRST, cs_item_sk#22 ASC NULLS FIRST], false, 0 (44) SortMergeJoin [codegen id : 17] -Left keys [2]: [sr_customer_sk#19, sr_item_sk#18] -Right keys [2]: [cs_bill_customer_sk#27, cs_item_sk#28] +Left keys [2]: [sr_customer_sk#15, sr_item_sk#14] +Right keys [2]: [cs_bill_customer_sk#21, cs_item_sk#22] Join condition: None (45) Project [codegen id : 17] -Output [6]: [ss_quantity#5, sr_return_quantity#21, cs_quantity#29, s_state#10, i_item_id#14, i_item_desc#15] -Input [10]: [ss_quantity#5, s_state#10, i_item_id#14, i_item_desc#15, sr_item_sk#18, sr_customer_sk#19, sr_return_quantity#21, cs_bill_customer_sk#27, cs_item_sk#28, cs_quantity#29] +Output [6]: [ss_quantity#5, sr_return_quantity#17, cs_quantity#23, s_state#10, i_item_id#12, i_item_desc#13] +Input [10]: [ss_quantity#5, s_state#10, i_item_id#12, i_item_desc#13, sr_item_sk#14, sr_customer_sk#15, sr_return_quantity#17, cs_bill_customer_sk#21, cs_item_sk#22, cs_quantity#23] (46) HashAggregate [codegen id : 17] -Input [6]: [ss_quantity#5, sr_return_quantity#21, cs_quantity#29, s_state#10, i_item_id#14, i_item_desc#15] -Keys [3]: [i_item_id#14, i_item_desc#15, s_state#10] -Functions [9]: [partial_count(ss_quantity#5), partial_avg(ss_quantity#5), partial_stddev_samp(cast(ss_quantity#5 as double)), partial_count(sr_return_quantity#21), partial_avg(sr_return_quantity#21), partial_stddev_samp(cast(sr_return_quantity#21 as double)), partial_count(cs_quantity#29), partial_avg(cs_quantity#29), partial_stddev_samp(cast(cs_quantity#29 as double))] -Aggregate Attributes [18]: [count#33, sum#34, count#35, n#36, avg#37, m2#38, count#39, sum#40, count#41, n#42, avg#43, m2#44, count#45, sum#46, count#47, n#48, avg#49, m2#50] -Results [21]: [i_item_id#14, i_item_desc#15, s_state#10, count#51, sum#52, count#53, n#54, avg#55, m2#56, count#57, sum#58, count#59, n#60, avg#61, m2#62, count#63, sum#64, count#65, n#66, avg#67, m2#68] +Input [6]: [ss_quantity#5, sr_return_quantity#17, cs_quantity#23, s_state#10, i_item_id#12, i_item_desc#13] +Keys [3]: [i_item_id#12, i_item_desc#13, s_state#10] +Functions [9]: [partial_count(ss_quantity#5), partial_avg(ss_quantity#5), partial_stddev_samp(cast(ss_quantity#5 as double)), partial_count(sr_return_quantity#17), partial_avg(sr_return_quantity#17), partial_stddev_samp(cast(sr_return_quantity#17 as double)), partial_count(cs_quantity#23), partial_avg(cs_quantity#23), partial_stddev_samp(cast(cs_quantity#23 as double))] +Aggregate Attributes [18]: [count#26, sum#27, count#28, n#29, avg#30, m2#31, count#32, sum#33, count#34, n#35, avg#36, m2#37, count#38, sum#39, count#40, n#41, avg#42, m2#43] +Results [21]: [i_item_id#12, i_item_desc#13, s_state#10, count#44, sum#45, count#46, n#47, avg#48, m2#49, count#50, sum#51, count#52, n#53, avg#54, m2#55, count#56, sum#57, count#58, n#59, avg#60, m2#61] (47) Exchange -Input [21]: [i_item_id#14, i_item_desc#15, s_state#10, count#51, sum#52, count#53, n#54, avg#55, m2#56, count#57, sum#58, count#59, n#60, avg#61, m2#62, count#63, sum#64, count#65, n#66, avg#67, m2#68] -Arguments: hashpartitioning(i_item_id#14, i_item_desc#15, s_state#10, 5), ENSURE_REQUIREMENTS, [id=#69] +Input [21]: [i_item_id#12, i_item_desc#13, s_state#10, count#44, sum#45, count#46, n#47, avg#48, m2#49, count#50, sum#51, count#52, n#53, avg#54, m2#55, count#56, sum#57, count#58, n#59, avg#60, m2#61] +Arguments: hashpartitioning(i_item_id#12, i_item_desc#13, s_state#10, 5), ENSURE_REQUIREMENTS, [plan_id=8] (48) HashAggregate [codegen id : 18] -Input [21]: [i_item_id#14, i_item_desc#15, s_state#10, count#51, sum#52, count#53, n#54, avg#55, m2#56, count#57, sum#58, count#59, n#60, avg#61, m2#62, count#63, sum#64, count#65, n#66, avg#67, m2#68] -Keys [3]: [i_item_id#14, i_item_desc#15, s_state#10] -Functions [9]: [count(ss_quantity#5), avg(ss_quantity#5), stddev_samp(cast(ss_quantity#5 as double)), count(sr_return_quantity#21), avg(sr_return_quantity#21), stddev_samp(cast(sr_return_quantity#21 as double)), count(cs_quantity#29), avg(cs_quantity#29), stddev_samp(cast(cs_quantity#29 as double))] -Aggregate Attributes [9]: [count(ss_quantity#5)#70, avg(ss_quantity#5)#71, stddev_samp(cast(ss_quantity#5 as double))#72, count(sr_return_quantity#21)#73, avg(sr_return_quantity#21)#74, stddev_samp(cast(sr_return_quantity#21 as double))#75, count(cs_quantity#29)#76, avg(cs_quantity#29)#77, stddev_samp(cast(cs_quantity#29 as double))#78] -Results [15]: [i_item_id#14, i_item_desc#15, s_state#10, count(ss_quantity#5)#70 AS store_sales_quantitycount#79, avg(ss_quantity#5)#71 AS store_sales_quantityave#80, stddev_samp(cast(ss_quantity#5 as double))#72 AS store_sales_quantitystdev#81, (stddev_samp(cast(ss_quantity#5 as double))#72 / avg(ss_quantity#5)#71) AS store_sales_quantitycov#82, count(sr_return_quantity#21)#73 AS as_store_returns_quantitycount#83, avg(sr_return_quantity#21)#74 AS as_store_returns_quantityave#84, stddev_samp(cast(sr_return_quantity#21 as double))#75 AS as_store_returns_quantitystdev#85, (stddev_samp(cast(sr_return_quantity#21 as double))#75 / avg(sr_return_quantity#21)#74) AS store_returns_quantitycov#86, count(cs_quantity#29)#76 AS catalog_sales_quantitycount#87, avg(cs_quantity#29)#77 AS catalog_sales_quantityave#88, (stddev_samp(cast(cs_quantity#29 as double))#78 / avg(cs_quantity#29)#77) AS catalog_sales_quantitystdev#89, (stddev_samp(cast(cs_quantity#29 as double))#78 / avg(cs_quantity#29)#77) AS catalog_sales_quantitycov#90] +Input [21]: [i_item_id#12, i_item_desc#13, s_state#10, count#44, sum#45, count#46, n#47, avg#48, m2#49, count#50, sum#51, count#52, n#53, avg#54, m2#55, count#56, sum#57, count#58, n#59, avg#60, m2#61] +Keys [3]: [i_item_id#12, i_item_desc#13, s_state#10] +Functions [9]: [count(ss_quantity#5), avg(ss_quantity#5), stddev_samp(cast(ss_quantity#5 as double)), count(sr_return_quantity#17), avg(sr_return_quantity#17), stddev_samp(cast(sr_return_quantity#17 as double)), count(cs_quantity#23), avg(cs_quantity#23), stddev_samp(cast(cs_quantity#23 as double))] +Aggregate Attributes [9]: [count(ss_quantity#5)#62, avg(ss_quantity#5)#63, stddev_samp(cast(ss_quantity#5 as double))#64, count(sr_return_quantity#17)#65, avg(sr_return_quantity#17)#66, stddev_samp(cast(sr_return_quantity#17 as double))#67, count(cs_quantity#23)#68, avg(cs_quantity#23)#69, stddev_samp(cast(cs_quantity#23 as double))#70] +Results [15]: [i_item_id#12, i_item_desc#13, s_state#10, count(ss_quantity#5)#62 AS store_sales_quantitycount#71, avg(ss_quantity#5)#63 AS store_sales_quantityave#72, stddev_samp(cast(ss_quantity#5 as double))#64 AS store_sales_quantitystdev#73, (stddev_samp(cast(ss_quantity#5 as double))#64 / avg(ss_quantity#5)#63) AS store_sales_quantitycov#74, count(sr_return_quantity#17)#65 AS as_store_returns_quantitycount#75, avg(sr_return_quantity#17)#66 AS as_store_returns_quantityave#76, stddev_samp(cast(sr_return_quantity#17 as double))#67 AS as_store_returns_quantitystdev#77, (stddev_samp(cast(sr_return_quantity#17 as double))#67 / avg(sr_return_quantity#17)#66) AS store_returns_quantitycov#78, count(cs_quantity#23)#68 AS catalog_sales_quantitycount#79, avg(cs_quantity#23)#69 AS catalog_sales_quantityave#80, (stddev_samp(cast(cs_quantity#23 as double))#70 / avg(cs_quantity#23)#69) AS catalog_sales_quantitystdev#81, (stddev_samp(cast(cs_quantity#23 as double))#70 / avg(cs_quantity#23)#69) AS catalog_sales_quantitycov#82] (49) TakeOrderedAndProject -Input [15]: [i_item_id#14, i_item_desc#15, s_state#10, store_sales_quantitycount#79, store_sales_quantityave#80, store_sales_quantitystdev#81, store_sales_quantitycov#82, as_store_returns_quantitycount#83, as_store_returns_quantityave#84, as_store_returns_quantitystdev#85, store_returns_quantitycov#86, catalog_sales_quantitycount#87, catalog_sales_quantityave#88, catalog_sales_quantitystdev#89, catalog_sales_quantitycov#90] -Arguments: 100, [i_item_id#14 ASC NULLS FIRST, i_item_desc#15 ASC NULLS FIRST, s_state#10 ASC NULLS FIRST], [i_item_id#14, i_item_desc#15, s_state#10, store_sales_quantitycount#79, store_sales_quantityave#80, store_sales_quantitystdev#81, store_sales_quantitycov#82, as_store_returns_quantitycount#83, as_store_returns_quantityave#84, as_store_returns_quantitystdev#85, store_returns_quantitycov#86, catalog_sales_quantitycount#87, catalog_sales_quantityave#88, catalog_sales_quantitystdev#89, catalog_sales_quantitycov#90] +Input [15]: [i_item_id#12, i_item_desc#13, s_state#10, store_sales_quantitycount#71, store_sales_quantityave#72, store_sales_quantitystdev#73, store_sales_quantitycov#74, as_store_returns_quantitycount#75, as_store_returns_quantityave#76, as_store_returns_quantitystdev#77, store_returns_quantitycov#78, catalog_sales_quantitycount#79, catalog_sales_quantityave#80, catalog_sales_quantitystdev#81, catalog_sales_quantitycov#82] +Arguments: 100, [i_item_id#12 ASC NULLS FIRST, i_item_desc#13 ASC NULLS FIRST, s_state#10 ASC NULLS FIRST], [i_item_id#12, i_item_desc#13, s_state#10, store_sales_quantitycount#71, store_sales_quantityave#72, store_sales_quantitystdev#73, store_sales_quantitycov#74, as_store_returns_quantitycount#75, as_store_returns_quantityave#76, as_store_returns_quantitystdev#77, store_returns_quantitycov#78, catalog_sales_quantitycount#79, catalog_sales_quantityave#80, catalog_sales_quantitystdev#81, catalog_sales_quantitycov#82] ===== Subqueries ===== @@ -280,28 +280,28 @@ BroadcastExchange (54) (50) Scan parquet default.date_dim -Output [2]: [d_date_sk#8, d_quarter_name#91] +Output [2]: [d_date_sk#8, d_quarter_name#83] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_quarter_name), EqualTo(d_quarter_name,2001Q1), IsNotNull(d_date_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#8, d_quarter_name#91] +Input [2]: [d_date_sk#8, d_quarter_name#83] (52) Filter [codegen id : 1] -Input [2]: [d_date_sk#8, d_quarter_name#91] -Condition : ((isnotnull(d_quarter_name#91) AND (d_quarter_name#91 = 2001Q1)) AND isnotnull(d_date_sk#8)) +Input [2]: [d_date_sk#8, d_quarter_name#83] +Condition : ((isnotnull(d_quarter_name#83) AND (d_quarter_name#83 = 2001Q1)) AND isnotnull(d_date_sk#8)) (53) Project [codegen id : 1] Output [1]: [d_date_sk#8] -Input [2]: [d_date_sk#8, d_quarter_name#91] +Input [2]: [d_date_sk#8, d_quarter_name#83] (54) BroadcastExchange Input [1]: [d_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#92] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:2 Hosting operator id = 24 Hosting Expression = sr_returned_date_sk#22 IN dynamicpruning#23 +Subquery:2 Hosting operator id = 24 Hosting Expression = sr_returned_date_sk#18 IN dynamicpruning#19 BroadcastExchange (59) +- * Project (58) +- * Filter (57) @@ -310,27 +310,27 @@ BroadcastExchange (59) (55) Scan parquet default.date_dim -Output [2]: [d_date_sk#24, d_quarter_name#93] +Output [2]: [d_date_sk#20, d_quarter_name#84] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_quarter_name, [2001Q1,2001Q2,2001Q3]), IsNotNull(d_date_sk)] ReadSchema: struct (56) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#24, d_quarter_name#93] +Input [2]: [d_date_sk#20, d_quarter_name#84] (57) Filter [codegen id : 1] -Input [2]: [d_date_sk#24, d_quarter_name#93] -Condition : (d_quarter_name#93 IN (2001Q1,2001Q2,2001Q3) AND isnotnull(d_date_sk#24)) +Input [2]: [d_date_sk#20, d_quarter_name#84] +Condition : (d_quarter_name#84 IN (2001Q1,2001Q2,2001Q3) AND isnotnull(d_date_sk#20)) (58) Project [codegen id : 1] -Output [1]: [d_date_sk#24] -Input [2]: [d_date_sk#24, d_quarter_name#93] +Output [1]: [d_date_sk#20] +Input [2]: [d_date_sk#20, d_quarter_name#84] (59) BroadcastExchange -Input [1]: [d_date_sk#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#94] +Input [1]: [d_date_sk#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -Subquery:3 Hosting operator id = 36 Hosting Expression = cs_sold_date_sk#30 IN dynamicpruning#23 +Subquery:3 Hosting operator id = 36 Hosting Expression = cs_sold_date_sk#24 IN dynamicpruning#19 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q17/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q17/explain.txt index d63f34438d5da..ba615c26f227d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q17/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q17/explain.txt @@ -73,7 +73,7 @@ Condition : ((isnotnull(sr_customer_sk#9) AND isnotnull(sr_item_sk#8)) AND isnot (7) BroadcastExchange Input [5]: [sr_item_sk#8, sr_customer_sk#9, sr_ticket_number#10, sr_return_quantity#11, sr_returned_date_sk#12] -Arguments: HashedRelationBroadcastMode(List(input[1, int, false], input[0, int, false], input[2, int, false]),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(input[1, int, false], input[0, int, false], input[2, int, false]),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 8] Left keys [3]: [ss_customer_sk#2, ss_item_sk#1, ss_ticket_number#4] @@ -85,144 +85,144 @@ Output [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, ss_sold_date_sk#6, sr_i Input [11]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_quantity#5, ss_sold_date_sk#6, sr_item_sk#8, sr_customer_sk#9, sr_ticket_number#10, sr_return_quantity#11, sr_returned_date_sk#12] (10) Scan parquet default.catalog_sales -Output [4]: [cs_bill_customer_sk#15, cs_item_sk#16, cs_quantity#17, cs_sold_date_sk#18] +Output [4]: [cs_bill_customer_sk#14, cs_item_sk#15, cs_quantity#16, cs_sold_date_sk#17] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#18), dynamicpruningexpression(cs_sold_date_sk#18 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(cs_sold_date_sk#17), dynamicpruningexpression(cs_sold_date_sk#17 IN dynamicpruning#13)] PushedFilters: [IsNotNull(cs_bill_customer_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [4]: [cs_bill_customer_sk#15, cs_item_sk#16, cs_quantity#17, cs_sold_date_sk#18] +Input [4]: [cs_bill_customer_sk#14, cs_item_sk#15, cs_quantity#16, cs_sold_date_sk#17] (12) Filter [codegen id : 2] -Input [4]: [cs_bill_customer_sk#15, cs_item_sk#16, cs_quantity#17, cs_sold_date_sk#18] -Condition : (isnotnull(cs_bill_customer_sk#15) AND isnotnull(cs_item_sk#16)) +Input [4]: [cs_bill_customer_sk#14, cs_item_sk#15, cs_quantity#16, cs_sold_date_sk#17] +Condition : (isnotnull(cs_bill_customer_sk#14) AND isnotnull(cs_item_sk#15)) (13) BroadcastExchange -Input [4]: [cs_bill_customer_sk#15, cs_item_sk#16, cs_quantity#17, cs_sold_date_sk#18] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, false] as bigint), 32) | (cast(input[1, int, false] as bigint) & 4294967295))),false), [id=#19] +Input [4]: [cs_bill_customer_sk#14, cs_item_sk#15, cs_quantity#16, cs_sold_date_sk#17] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, false] as bigint), 32) | (cast(input[1, int, false] as bigint) & 4294967295))),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 8] Left keys [2]: [sr_customer_sk#9, sr_item_sk#8] -Right keys [2]: [cs_bill_customer_sk#15, cs_item_sk#16] +Right keys [2]: [cs_bill_customer_sk#14, cs_item_sk#15] Join condition: None (15) Project [codegen id : 8] -Output [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, ss_sold_date_sk#6, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#17, cs_sold_date_sk#18] -Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, ss_sold_date_sk#6, sr_item_sk#8, sr_customer_sk#9, sr_return_quantity#11, sr_returned_date_sk#12, cs_bill_customer_sk#15, cs_item_sk#16, cs_quantity#17, cs_sold_date_sk#18] +Output [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, ss_sold_date_sk#6, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#16, cs_sold_date_sk#17] +Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, ss_sold_date_sk#6, sr_item_sk#8, sr_customer_sk#9, sr_return_quantity#11, sr_returned_date_sk#12, cs_bill_customer_sk#14, cs_item_sk#15, cs_quantity#16, cs_sold_date_sk#17] (16) ReusedExchange [Reuses operator id: 45] -Output [1]: [d_date_sk#20] +Output [1]: [d_date_sk#18] (17) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_sold_date_sk#6] -Right keys [1]: [d_date_sk#20] +Right keys [1]: [d_date_sk#18] Join condition: None (18) Project [codegen id : 8] -Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#17, cs_sold_date_sk#18] -Input [9]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, ss_sold_date_sk#6, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#17, cs_sold_date_sk#18, d_date_sk#20] +Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#16, cs_sold_date_sk#17] +Input [9]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, ss_sold_date_sk#6, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#16, cs_sold_date_sk#17, d_date_sk#18] (19) ReusedExchange [Reuses operator id: 50] -Output [1]: [d_date_sk#21] +Output [1]: [d_date_sk#19] (20) BroadcastHashJoin [codegen id : 8] Left keys [1]: [sr_returned_date_sk#12] -Right keys [1]: [d_date_sk#21] +Right keys [1]: [d_date_sk#19] Join condition: None (21) Project [codegen id : 8] -Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#17, cs_sold_date_sk#18] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#17, cs_sold_date_sk#18, d_date_sk#21] +Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#16, cs_sold_date_sk#17] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#16, cs_sold_date_sk#17, d_date_sk#19] (22) ReusedExchange [Reuses operator id: 50] -Output [1]: [d_date_sk#22] +Output [1]: [d_date_sk#20] (23) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_sold_date_sk#18] -Right keys [1]: [d_date_sk#22] +Left keys [1]: [cs_sold_date_sk#17] +Right keys [1]: [d_date_sk#20] Join condition: None (24) Project [codegen id : 8] -Output [5]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#17] -Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#17, cs_sold_date_sk#18, d_date_sk#22] +Output [5]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#16] +Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#16, cs_sold_date_sk#17, d_date_sk#20] (25) Scan parquet default.store -Output [2]: [s_store_sk#23, s_state#24] +Output [2]: [s_store_sk#21, s_state#22] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 6] -Input [2]: [s_store_sk#23, s_state#24] +Input [2]: [s_store_sk#21, s_state#22] (27) Filter [codegen id : 6] -Input [2]: [s_store_sk#23, s_state#24] -Condition : isnotnull(s_store_sk#23) +Input [2]: [s_store_sk#21, s_state#22] +Condition : isnotnull(s_store_sk#21) (28) BroadcastExchange -Input [2]: [s_store_sk#23, s_state#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#25] +Input [2]: [s_store_sk#21, s_state#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (29) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#23] +Right keys [1]: [s_store_sk#21] Join condition: None (30) Project [codegen id : 8] -Output [5]: [ss_item_sk#1, ss_quantity#5, sr_return_quantity#11, cs_quantity#17, s_state#24] -Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#17, s_store_sk#23, s_state#24] +Output [5]: [ss_item_sk#1, ss_quantity#5, sr_return_quantity#11, cs_quantity#16, s_state#22] +Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#16, s_store_sk#21, s_state#22] (31) Scan parquet default.item -Output [3]: [i_item_sk#26, i_item_id#27, i_item_desc#28] +Output [3]: [i_item_sk#23, i_item_id#24, i_item_desc#25] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 7] -Input [3]: [i_item_sk#26, i_item_id#27, i_item_desc#28] +Input [3]: [i_item_sk#23, i_item_id#24, i_item_desc#25] (33) Filter [codegen id : 7] -Input [3]: [i_item_sk#26, i_item_id#27, i_item_desc#28] -Condition : isnotnull(i_item_sk#26) +Input [3]: [i_item_sk#23, i_item_id#24, i_item_desc#25] +Condition : isnotnull(i_item_sk#23) (34) BroadcastExchange -Input [3]: [i_item_sk#26, i_item_id#27, i_item_desc#28] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#29] +Input [3]: [i_item_sk#23, i_item_id#24, i_item_desc#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (35) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#26] +Right keys [1]: [i_item_sk#23] Join condition: None (36) Project [codegen id : 8] -Output [6]: [ss_quantity#5, sr_return_quantity#11, cs_quantity#17, s_state#24, i_item_id#27, i_item_desc#28] -Input [8]: [ss_item_sk#1, ss_quantity#5, sr_return_quantity#11, cs_quantity#17, s_state#24, i_item_sk#26, i_item_id#27, i_item_desc#28] +Output [6]: [ss_quantity#5, sr_return_quantity#11, cs_quantity#16, s_state#22, i_item_id#24, i_item_desc#25] +Input [8]: [ss_item_sk#1, ss_quantity#5, sr_return_quantity#11, cs_quantity#16, s_state#22, i_item_sk#23, i_item_id#24, i_item_desc#25] (37) HashAggregate [codegen id : 8] -Input [6]: [ss_quantity#5, sr_return_quantity#11, cs_quantity#17, s_state#24, i_item_id#27, i_item_desc#28] -Keys [3]: [i_item_id#27, i_item_desc#28, s_state#24] -Functions [9]: [partial_count(ss_quantity#5), partial_avg(ss_quantity#5), partial_stddev_samp(cast(ss_quantity#5 as double)), partial_count(sr_return_quantity#11), partial_avg(sr_return_quantity#11), partial_stddev_samp(cast(sr_return_quantity#11 as double)), partial_count(cs_quantity#17), partial_avg(cs_quantity#17), partial_stddev_samp(cast(cs_quantity#17 as double))] -Aggregate Attributes [18]: [count#30, sum#31, count#32, n#33, avg#34, m2#35, count#36, sum#37, count#38, n#39, avg#40, m2#41, count#42, sum#43, count#44, n#45, avg#46, m2#47] -Results [21]: [i_item_id#27, i_item_desc#28, s_state#24, count#48, sum#49, count#50, n#51, avg#52, m2#53, count#54, sum#55, count#56, n#57, avg#58, m2#59, count#60, sum#61, count#62, n#63, avg#64, m2#65] +Input [6]: [ss_quantity#5, sr_return_quantity#11, cs_quantity#16, s_state#22, i_item_id#24, i_item_desc#25] +Keys [3]: [i_item_id#24, i_item_desc#25, s_state#22] +Functions [9]: [partial_count(ss_quantity#5), partial_avg(ss_quantity#5), partial_stddev_samp(cast(ss_quantity#5 as double)), partial_count(sr_return_quantity#11), partial_avg(sr_return_quantity#11), partial_stddev_samp(cast(sr_return_quantity#11 as double)), partial_count(cs_quantity#16), partial_avg(cs_quantity#16), partial_stddev_samp(cast(cs_quantity#16 as double))] +Aggregate Attributes [18]: [count#26, sum#27, count#28, n#29, avg#30, m2#31, count#32, sum#33, count#34, n#35, avg#36, m2#37, count#38, sum#39, count#40, n#41, avg#42, m2#43] +Results [21]: [i_item_id#24, i_item_desc#25, s_state#22, count#44, sum#45, count#46, n#47, avg#48, m2#49, count#50, sum#51, count#52, n#53, avg#54, m2#55, count#56, sum#57, count#58, n#59, avg#60, m2#61] (38) Exchange -Input [21]: [i_item_id#27, i_item_desc#28, s_state#24, count#48, sum#49, count#50, n#51, avg#52, m2#53, count#54, sum#55, count#56, n#57, avg#58, m2#59, count#60, sum#61, count#62, n#63, avg#64, m2#65] -Arguments: hashpartitioning(i_item_id#27, i_item_desc#28, s_state#24, 5), ENSURE_REQUIREMENTS, [id=#66] +Input [21]: [i_item_id#24, i_item_desc#25, s_state#22, count#44, sum#45, count#46, n#47, avg#48, m2#49, count#50, sum#51, count#52, n#53, avg#54, m2#55, count#56, sum#57, count#58, n#59, avg#60, m2#61] +Arguments: hashpartitioning(i_item_id#24, i_item_desc#25, s_state#22, 5), ENSURE_REQUIREMENTS, [plan_id=5] (39) HashAggregate [codegen id : 9] -Input [21]: [i_item_id#27, i_item_desc#28, s_state#24, count#48, sum#49, count#50, n#51, avg#52, m2#53, count#54, sum#55, count#56, n#57, avg#58, m2#59, count#60, sum#61, count#62, n#63, avg#64, m2#65] -Keys [3]: [i_item_id#27, i_item_desc#28, s_state#24] -Functions [9]: [count(ss_quantity#5), avg(ss_quantity#5), stddev_samp(cast(ss_quantity#5 as double)), count(sr_return_quantity#11), avg(sr_return_quantity#11), stddev_samp(cast(sr_return_quantity#11 as double)), count(cs_quantity#17), avg(cs_quantity#17), stddev_samp(cast(cs_quantity#17 as double))] -Aggregate Attributes [9]: [count(ss_quantity#5)#67, avg(ss_quantity#5)#68, stddev_samp(cast(ss_quantity#5 as double))#69, count(sr_return_quantity#11)#70, avg(sr_return_quantity#11)#71, stddev_samp(cast(sr_return_quantity#11 as double))#72, count(cs_quantity#17)#73, avg(cs_quantity#17)#74, stddev_samp(cast(cs_quantity#17 as double))#75] -Results [15]: [i_item_id#27, i_item_desc#28, s_state#24, count(ss_quantity#5)#67 AS store_sales_quantitycount#76, avg(ss_quantity#5)#68 AS store_sales_quantityave#77, stddev_samp(cast(ss_quantity#5 as double))#69 AS store_sales_quantitystdev#78, (stddev_samp(cast(ss_quantity#5 as double))#69 / avg(ss_quantity#5)#68) AS store_sales_quantitycov#79, count(sr_return_quantity#11)#70 AS as_store_returns_quantitycount#80, avg(sr_return_quantity#11)#71 AS as_store_returns_quantityave#81, stddev_samp(cast(sr_return_quantity#11 as double))#72 AS as_store_returns_quantitystdev#82, (stddev_samp(cast(sr_return_quantity#11 as double))#72 / avg(sr_return_quantity#11)#71) AS store_returns_quantitycov#83, count(cs_quantity#17)#73 AS catalog_sales_quantitycount#84, avg(cs_quantity#17)#74 AS catalog_sales_quantityave#85, (stddev_samp(cast(cs_quantity#17 as double))#75 / avg(cs_quantity#17)#74) AS catalog_sales_quantitystdev#86, (stddev_samp(cast(cs_quantity#17 as double))#75 / avg(cs_quantity#17)#74) AS catalog_sales_quantitycov#87] +Input [21]: [i_item_id#24, i_item_desc#25, s_state#22, count#44, sum#45, count#46, n#47, avg#48, m2#49, count#50, sum#51, count#52, n#53, avg#54, m2#55, count#56, sum#57, count#58, n#59, avg#60, m2#61] +Keys [3]: [i_item_id#24, i_item_desc#25, s_state#22] +Functions [9]: [count(ss_quantity#5), avg(ss_quantity#5), stddev_samp(cast(ss_quantity#5 as double)), count(sr_return_quantity#11), avg(sr_return_quantity#11), stddev_samp(cast(sr_return_quantity#11 as double)), count(cs_quantity#16), avg(cs_quantity#16), stddev_samp(cast(cs_quantity#16 as double))] +Aggregate Attributes [9]: [count(ss_quantity#5)#62, avg(ss_quantity#5)#63, stddev_samp(cast(ss_quantity#5 as double))#64, count(sr_return_quantity#11)#65, avg(sr_return_quantity#11)#66, stddev_samp(cast(sr_return_quantity#11 as double))#67, count(cs_quantity#16)#68, avg(cs_quantity#16)#69, stddev_samp(cast(cs_quantity#16 as double))#70] +Results [15]: [i_item_id#24, i_item_desc#25, s_state#22, count(ss_quantity#5)#62 AS store_sales_quantitycount#71, avg(ss_quantity#5)#63 AS store_sales_quantityave#72, stddev_samp(cast(ss_quantity#5 as double))#64 AS store_sales_quantitystdev#73, (stddev_samp(cast(ss_quantity#5 as double))#64 / avg(ss_quantity#5)#63) AS store_sales_quantitycov#74, count(sr_return_quantity#11)#65 AS as_store_returns_quantitycount#75, avg(sr_return_quantity#11)#66 AS as_store_returns_quantityave#76, stddev_samp(cast(sr_return_quantity#11 as double))#67 AS as_store_returns_quantitystdev#77, (stddev_samp(cast(sr_return_quantity#11 as double))#67 / avg(sr_return_quantity#11)#66) AS store_returns_quantitycov#78, count(cs_quantity#16)#68 AS catalog_sales_quantitycount#79, avg(cs_quantity#16)#69 AS catalog_sales_quantityave#80, (stddev_samp(cast(cs_quantity#16 as double))#70 / avg(cs_quantity#16)#69) AS catalog_sales_quantitystdev#81, (stddev_samp(cast(cs_quantity#16 as double))#70 / avg(cs_quantity#16)#69) AS catalog_sales_quantitycov#82] (40) TakeOrderedAndProject -Input [15]: [i_item_id#27, i_item_desc#28, s_state#24, store_sales_quantitycount#76, store_sales_quantityave#77, store_sales_quantitystdev#78, store_sales_quantitycov#79, as_store_returns_quantitycount#80, as_store_returns_quantityave#81, as_store_returns_quantitystdev#82, store_returns_quantitycov#83, catalog_sales_quantitycount#84, catalog_sales_quantityave#85, catalog_sales_quantitystdev#86, catalog_sales_quantitycov#87] -Arguments: 100, [i_item_id#27 ASC NULLS FIRST, i_item_desc#28 ASC NULLS FIRST, s_state#24 ASC NULLS FIRST], [i_item_id#27, i_item_desc#28, s_state#24, store_sales_quantitycount#76, store_sales_quantityave#77, store_sales_quantitystdev#78, store_sales_quantitycov#79, as_store_returns_quantitycount#80, as_store_returns_quantityave#81, as_store_returns_quantitystdev#82, store_returns_quantitycov#83, catalog_sales_quantitycount#84, catalog_sales_quantityave#85, catalog_sales_quantitystdev#86, catalog_sales_quantitycov#87] +Input [15]: [i_item_id#24, i_item_desc#25, s_state#22, store_sales_quantitycount#71, store_sales_quantityave#72, store_sales_quantitystdev#73, store_sales_quantitycov#74, as_store_returns_quantitycount#75, as_store_returns_quantityave#76, as_store_returns_quantitystdev#77, store_returns_quantitycov#78, catalog_sales_quantitycount#79, catalog_sales_quantityave#80, catalog_sales_quantitystdev#81, catalog_sales_quantitycov#82] +Arguments: 100, [i_item_id#24 ASC NULLS FIRST, i_item_desc#25 ASC NULLS FIRST, s_state#22 ASC NULLS FIRST], [i_item_id#24, i_item_desc#25, s_state#22, store_sales_quantitycount#71, store_sales_quantityave#72, store_sales_quantitystdev#73, store_sales_quantitycov#74, as_store_returns_quantitycount#75, as_store_returns_quantityave#76, as_store_returns_quantitystdev#77, store_returns_quantitycov#78, catalog_sales_quantitycount#79, catalog_sales_quantityave#80, catalog_sales_quantitystdev#81, catalog_sales_quantitycov#82] ===== Subqueries ===== @@ -235,26 +235,26 @@ BroadcastExchange (45) (41) Scan parquet default.date_dim -Output [2]: [d_date_sk#20, d_quarter_name#88] +Output [2]: [d_date_sk#18, d_quarter_name#83] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_quarter_name), EqualTo(d_quarter_name,2001Q1), IsNotNull(d_date_sk)] ReadSchema: struct (42) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#20, d_quarter_name#88] +Input [2]: [d_date_sk#18, d_quarter_name#83] (43) Filter [codegen id : 1] -Input [2]: [d_date_sk#20, d_quarter_name#88] -Condition : ((isnotnull(d_quarter_name#88) AND (d_quarter_name#88 = 2001Q1)) AND isnotnull(d_date_sk#20)) +Input [2]: [d_date_sk#18, d_quarter_name#83] +Condition : ((isnotnull(d_quarter_name#83) AND (d_quarter_name#83 = 2001Q1)) AND isnotnull(d_date_sk#18)) (44) Project [codegen id : 1] -Output [1]: [d_date_sk#20] -Input [2]: [d_date_sk#20, d_quarter_name#88] +Output [1]: [d_date_sk#18] +Input [2]: [d_date_sk#18, d_quarter_name#83] (45) BroadcastExchange -Input [1]: [d_date_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#89] +Input [1]: [d_date_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] Subquery:2 Hosting operator id = 4 Hosting Expression = sr_returned_date_sk#12 IN dynamicpruning#13 BroadcastExchange (50) @@ -265,27 +265,27 @@ BroadcastExchange (50) (46) Scan parquet default.date_dim -Output [2]: [d_date_sk#21, d_quarter_name#90] +Output [2]: [d_date_sk#19, d_quarter_name#84] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_quarter_name, [2001Q1,2001Q2,2001Q3]), IsNotNull(d_date_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#21, d_quarter_name#90] +Input [2]: [d_date_sk#19, d_quarter_name#84] (48) Filter [codegen id : 1] -Input [2]: [d_date_sk#21, d_quarter_name#90] -Condition : (d_quarter_name#90 IN (2001Q1,2001Q2,2001Q3) AND isnotnull(d_date_sk#21)) +Input [2]: [d_date_sk#19, d_quarter_name#84] +Condition : (d_quarter_name#84 IN (2001Q1,2001Q2,2001Q3) AND isnotnull(d_date_sk#19)) (49) Project [codegen id : 1] -Output [1]: [d_date_sk#21] -Input [2]: [d_date_sk#21, d_quarter_name#90] +Output [1]: [d_date_sk#19] +Input [2]: [d_date_sk#19, d_quarter_name#84] (50) BroadcastExchange -Input [1]: [d_date_sk#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#91] +Input [1]: [d_date_sk#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:3 Hosting operator id = 10 Hosting Expression = cs_sold_date_sk#18 IN dynamicpruning#13 +Subquery:3 Hosting operator id = 10 Hosting Expression = cs_sold_date_sk#17 IN dynamicpruning#13 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q18.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q18.sf100/explain.txt index 242ef26397ae2..ad8b313ee1daf 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q18.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q18.sf100/explain.txt @@ -85,7 +85,7 @@ Input [4]: [cd_demo_sk#11, cd_gender#12, cd_education_status#13, cd_dep_count#14 (8) BroadcastExchange Input [2]: [cd_demo_sk#11, cd_dep_count#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_bill_cdemo_sk#2] @@ -97,178 +97,178 @@ Output [9]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5 Input [11]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_demo_sk#11, cd_dep_count#14] (11) ReusedExchange [Reuses operator id: 54] -Output [1]: [d_date_sk#16] +Output [1]: [d_date_sk#15] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_sold_date_sk#9] -Right keys [1]: [d_date_sk#16] +Right keys [1]: [d_date_sk#15] Join condition: None (13) Project [codegen id : 4] Output [8]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14] -Input [10]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, d_date_sk#16] +Input [10]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, d_date_sk#15] (14) Scan parquet default.item -Output [2]: [i_item_sk#17, i_item_id#18] +Output [2]: [i_item_sk#16, i_item_id#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [2]: [i_item_sk#17, i_item_id#18] +Input [2]: [i_item_sk#16, i_item_id#17] (16) Filter [codegen id : 3] -Input [2]: [i_item_sk#17, i_item_id#18] -Condition : isnotnull(i_item_sk#17) +Input [2]: [i_item_sk#16, i_item_id#17] +Condition : isnotnull(i_item_sk#16) (17) BroadcastExchange -Input [2]: [i_item_sk#17, i_item_id#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19] +Input [2]: [i_item_sk#16, i_item_id#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_item_sk#3] -Right keys [1]: [i_item_sk#17] +Right keys [1]: [i_item_sk#16] Join condition: None (19) Project [codegen id : 4] -Output [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#18] -Input [10]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_sk#17, i_item_id#18] +Output [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#17] +Input [10]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_sk#16, i_item_id#17] (20) Exchange -Input [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#18] -Arguments: hashpartitioning(cs_bill_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#17] +Arguments: hashpartitioning(cs_bill_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) Sort [codegen id : 5] -Input [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#18] +Input [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#17] Arguments: [cs_bill_customer_sk#1 ASC NULLS FIRST], false, 0 (22) Scan parquet default.customer -Output [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Output [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [In(c_birth_month, [1,12,2,6,8,9]), IsNotNull(c_customer_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 7] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] (24) Filter [codegen id : 7] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] -Condition : (((c_birth_month#24 IN (1,6,8,9,12,2) AND isnotnull(c_customer_sk#21)) AND isnotnull(c_current_cdemo_sk#22)) AND isnotnull(c_current_addr_sk#23)) +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] +Condition : (((c_birth_month#21 IN (1,6,8,9,12,2) AND isnotnull(c_customer_sk#18)) AND isnotnull(c_current_cdemo_sk#19)) AND isnotnull(c_current_addr_sk#20)) (25) Project [codegen id : 7] -Output [4]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_year#25] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Output [4]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_year#22] +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] (26) Scan parquet default.customer_address -Output [4]: [ca_address_sk#26, ca_county#27, ca_state#28, ca_country#29] +Output [4]: [ca_address_sk#23, ca_county#24, ca_state#25, ca_country#26] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [IN,MS,ND,NM,OK,VA]), IsNotNull(ca_address_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 6] -Input [4]: [ca_address_sk#26, ca_county#27, ca_state#28, ca_country#29] +Input [4]: [ca_address_sk#23, ca_county#24, ca_state#25, ca_country#26] (28) Filter [codegen id : 6] -Input [4]: [ca_address_sk#26, ca_county#27, ca_state#28, ca_country#29] -Condition : (ca_state#28 IN (MS,IN,ND,OK,NM,VA) AND isnotnull(ca_address_sk#26)) +Input [4]: [ca_address_sk#23, ca_county#24, ca_state#25, ca_country#26] +Condition : (ca_state#25 IN (MS,IN,ND,OK,NM,VA) AND isnotnull(ca_address_sk#23)) (29) BroadcastExchange -Input [4]: [ca_address_sk#26, ca_county#27, ca_state#28, ca_country#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#30] +Input [4]: [ca_address_sk#23, ca_county#24, ca_state#25, ca_country#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (30) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [c_current_addr_sk#23] -Right keys [1]: [ca_address_sk#26] +Left keys [1]: [c_current_addr_sk#20] +Right keys [1]: [ca_address_sk#23] Join condition: None (31) Project [codegen id : 7] -Output [6]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29] -Input [8]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_year#25, ca_address_sk#26, ca_county#27, ca_state#28, ca_country#29] +Output [6]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26] +Input [8]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_year#22, ca_address_sk#23, ca_county#24, ca_state#25, ca_country#26] (32) Exchange -Input [6]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29] -Arguments: hashpartitioning(c_current_cdemo_sk#22, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [6]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26] +Arguments: hashpartitioning(c_current_cdemo_sk#19, 5), ENSURE_REQUIREMENTS, [plan_id=5] (33) Sort [codegen id : 8] -Input [6]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29] -Arguments: [c_current_cdemo_sk#22 ASC NULLS FIRST], false, 0 +Input [6]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26] +Arguments: [c_current_cdemo_sk#19 ASC NULLS FIRST], false, 0 (34) Scan parquet default.customer_demographics -Output [1]: [cd_demo_sk#32] +Output [1]: [cd_demo_sk#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 9] -Input [1]: [cd_demo_sk#32] +Input [1]: [cd_demo_sk#27] (36) Filter [codegen id : 9] -Input [1]: [cd_demo_sk#32] -Condition : isnotnull(cd_demo_sk#32) +Input [1]: [cd_demo_sk#27] +Condition : isnotnull(cd_demo_sk#27) (37) Exchange -Input [1]: [cd_demo_sk#32] -Arguments: hashpartitioning(cd_demo_sk#32, 5), ENSURE_REQUIREMENTS, [id=#33] +Input [1]: [cd_demo_sk#27] +Arguments: hashpartitioning(cd_demo_sk#27, 5), ENSURE_REQUIREMENTS, [plan_id=6] (38) Sort [codegen id : 10] -Input [1]: [cd_demo_sk#32] -Arguments: [cd_demo_sk#32 ASC NULLS FIRST], false, 0 +Input [1]: [cd_demo_sk#27] +Arguments: [cd_demo_sk#27 ASC NULLS FIRST], false, 0 (39) SortMergeJoin [codegen id : 11] -Left keys [1]: [c_current_cdemo_sk#22] -Right keys [1]: [cd_demo_sk#32] +Left keys [1]: [c_current_cdemo_sk#19] +Right keys [1]: [cd_demo_sk#27] Join condition: None (40) Project [codegen id : 11] -Output [5]: [c_customer_sk#21, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29] -Input [7]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29, cd_demo_sk#32] +Output [5]: [c_customer_sk#18, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26] +Input [7]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26, cd_demo_sk#27] (41) Exchange -Input [5]: [c_customer_sk#21, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29] -Arguments: hashpartitioning(c_customer_sk#21, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [5]: [c_customer_sk#18, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26] +Arguments: hashpartitioning(c_customer_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) Sort [codegen id : 12] -Input [5]: [c_customer_sk#21, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29] -Arguments: [c_customer_sk#21 ASC NULLS FIRST], false, 0 +Input [5]: [c_customer_sk#18, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26] +Arguments: [c_customer_sk#18 ASC NULLS FIRST], false, 0 (43) SortMergeJoin [codegen id : 13] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#21] +Right keys [1]: [c_customer_sk#18] Join condition: None (44) Project [codegen id : 13] -Output [11]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#25, i_item_id#18, ca_country#29, ca_state#28, ca_county#27] -Input [13]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#18, c_customer_sk#21, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29] +Output [11]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#22, i_item_id#17, ca_country#26, ca_state#25, ca_county#24] +Input [13]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#17, c_customer_sk#18, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26] (45) Expand [codegen id : 13] -Input [11]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#25, i_item_id#18, ca_country#29, ca_state#28, ca_county#27] -Arguments: [[cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#25, i_item_id#18, ca_country#29, ca_state#28, ca_county#27, 0], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#25, i_item_id#18, ca_country#29, ca_state#28, null, 1], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#25, i_item_id#18, ca_country#29, null, null, 3], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#25, i_item_id#18, null, null, null, 7], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#25, null, null, null, null, 15]], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#25, i_item_id#35, ca_country#36, ca_state#37, ca_county#38, spark_grouping_id#39] +Input [11]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#22, i_item_id#17, ca_country#26, ca_state#25, ca_county#24] +Arguments: [[cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#22, i_item_id#17, ca_country#26, ca_state#25, ca_county#24, 0], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#22, i_item_id#17, ca_country#26, ca_state#25, null, 1], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#22, i_item_id#17, ca_country#26, null, null, 3], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#22, i_item_id#17, null, null, null, 7], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#22, null, null, null, null, 15]], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#22, i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32] (46) HashAggregate [codegen id : 13] -Input [12]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#25, i_item_id#35, ca_country#36, ca_state#37, ca_county#38, spark_grouping_id#39] -Keys [5]: [i_item_id#35, ca_country#36, ca_state#37, ca_county#38, spark_grouping_id#39] -Functions [7]: [partial_avg(cast(cs_quantity#4 as decimal(12,2))), partial_avg(cast(cs_list_price#5 as decimal(12,2))), partial_avg(cast(cs_coupon_amt#7 as decimal(12,2))), partial_avg(cast(cs_sales_price#6 as decimal(12,2))), partial_avg(cast(cs_net_profit#8 as decimal(12,2))), partial_avg(cast(c_birth_year#25 as decimal(12,2))), partial_avg(cast(cd_dep_count#14 as decimal(12,2)))] -Aggregate Attributes [14]: [sum#40, count#41, sum#42, count#43, sum#44, count#45, sum#46, count#47, sum#48, count#49, sum#50, count#51, sum#52, count#53] -Results [19]: [i_item_id#35, ca_country#36, ca_state#37, ca_county#38, spark_grouping_id#39, sum#54, count#55, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63, sum#64, count#65, sum#66, count#67] +Input [12]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#22, i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32] +Keys [5]: [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32] +Functions [7]: [partial_avg(cast(cs_quantity#4 as decimal(12,2))), partial_avg(cast(cs_list_price#5 as decimal(12,2))), partial_avg(cast(cs_coupon_amt#7 as decimal(12,2))), partial_avg(cast(cs_sales_price#6 as decimal(12,2))), partial_avg(cast(cs_net_profit#8 as decimal(12,2))), partial_avg(cast(c_birth_year#22 as decimal(12,2))), partial_avg(cast(cd_dep_count#14 as decimal(12,2)))] +Aggregate Attributes [14]: [sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39, count#40, sum#41, count#42, sum#43, count#44, sum#45, count#46] +Results [19]: [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32, sum#47, count#48, sum#49, count#50, sum#51, count#52, sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60] (47) Exchange -Input [19]: [i_item_id#35, ca_country#36, ca_state#37, ca_county#38, spark_grouping_id#39, sum#54, count#55, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63, sum#64, count#65, sum#66, count#67] -Arguments: hashpartitioning(i_item_id#35, ca_country#36, ca_state#37, ca_county#38, spark_grouping_id#39, 5), ENSURE_REQUIREMENTS, [id=#68] +Input [19]: [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32, sum#47, count#48, sum#49, count#50, sum#51, count#52, sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60] +Arguments: hashpartitioning(i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32, 5), ENSURE_REQUIREMENTS, [plan_id=8] (48) HashAggregate [codegen id : 14] -Input [19]: [i_item_id#35, ca_country#36, ca_state#37, ca_county#38, spark_grouping_id#39, sum#54, count#55, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63, sum#64, count#65, sum#66, count#67] -Keys [5]: [i_item_id#35, ca_country#36, ca_state#37, ca_county#38, spark_grouping_id#39] -Functions [7]: [avg(cast(cs_quantity#4 as decimal(12,2))), avg(cast(cs_list_price#5 as decimal(12,2))), avg(cast(cs_coupon_amt#7 as decimal(12,2))), avg(cast(cs_sales_price#6 as decimal(12,2))), avg(cast(cs_net_profit#8 as decimal(12,2))), avg(cast(c_birth_year#25 as decimal(12,2))), avg(cast(cd_dep_count#14 as decimal(12,2)))] -Aggregate Attributes [7]: [avg(cast(cs_quantity#4 as decimal(12,2)))#69, avg(cast(cs_list_price#5 as decimal(12,2)))#70, avg(cast(cs_coupon_amt#7 as decimal(12,2)))#71, avg(cast(cs_sales_price#6 as decimal(12,2)))#72, avg(cast(cs_net_profit#8 as decimal(12,2)))#73, avg(cast(c_birth_year#25 as decimal(12,2)))#74, avg(cast(cd_dep_count#14 as decimal(12,2)))#75] -Results [11]: [i_item_id#35, ca_country#36, ca_state#37, ca_county#38, avg(cast(cs_quantity#4 as decimal(12,2)))#69 AS agg1#76, avg(cast(cs_list_price#5 as decimal(12,2)))#70 AS agg2#77, avg(cast(cs_coupon_amt#7 as decimal(12,2)))#71 AS agg3#78, avg(cast(cs_sales_price#6 as decimal(12,2)))#72 AS agg4#79, avg(cast(cs_net_profit#8 as decimal(12,2)))#73 AS agg5#80, avg(cast(c_birth_year#25 as decimal(12,2)))#74 AS agg6#81, avg(cast(cd_dep_count#14 as decimal(12,2)))#75 AS agg7#82] +Input [19]: [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32, sum#47, count#48, sum#49, count#50, sum#51, count#52, sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60] +Keys [5]: [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32] +Functions [7]: [avg(cast(cs_quantity#4 as decimal(12,2))), avg(cast(cs_list_price#5 as decimal(12,2))), avg(cast(cs_coupon_amt#7 as decimal(12,2))), avg(cast(cs_sales_price#6 as decimal(12,2))), avg(cast(cs_net_profit#8 as decimal(12,2))), avg(cast(c_birth_year#22 as decimal(12,2))), avg(cast(cd_dep_count#14 as decimal(12,2)))] +Aggregate Attributes [7]: [avg(cast(cs_quantity#4 as decimal(12,2)))#61, avg(cast(cs_list_price#5 as decimal(12,2)))#62, avg(cast(cs_coupon_amt#7 as decimal(12,2)))#63, avg(cast(cs_sales_price#6 as decimal(12,2)))#64, avg(cast(cs_net_profit#8 as decimal(12,2)))#65, avg(cast(c_birth_year#22 as decimal(12,2)))#66, avg(cast(cd_dep_count#14 as decimal(12,2)))#67] +Results [11]: [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, avg(cast(cs_quantity#4 as decimal(12,2)))#61 AS agg1#68, avg(cast(cs_list_price#5 as decimal(12,2)))#62 AS agg2#69, avg(cast(cs_coupon_amt#7 as decimal(12,2)))#63 AS agg3#70, avg(cast(cs_sales_price#6 as decimal(12,2)))#64 AS agg4#71, avg(cast(cs_net_profit#8 as decimal(12,2)))#65 AS agg5#72, avg(cast(c_birth_year#22 as decimal(12,2)))#66 AS agg6#73, avg(cast(cd_dep_count#14 as decimal(12,2)))#67 AS agg7#74] (49) TakeOrderedAndProject -Input [11]: [i_item_id#35, ca_country#36, ca_state#37, ca_county#38, agg1#76, agg2#77, agg3#78, agg4#79, agg5#80, agg6#81, agg7#82] -Arguments: 100, [ca_country#36 ASC NULLS FIRST, ca_state#37 ASC NULLS FIRST, ca_county#38 ASC NULLS FIRST, i_item_id#35 ASC NULLS FIRST], [i_item_id#35, ca_country#36, ca_state#37, ca_county#38, agg1#76, agg2#77, agg3#78, agg4#79, agg5#80, agg6#81, agg7#82] +Input [11]: [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, agg1#68, agg2#69, agg3#70, agg4#71, agg5#72, agg6#73, agg7#74] +Arguments: 100, [ca_country#29 ASC NULLS FIRST, ca_state#30 ASC NULLS FIRST, ca_county#31 ASC NULLS FIRST, i_item_id#28 ASC NULLS FIRST], [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, agg1#68, agg2#69, agg3#70, agg4#71, agg5#72, agg6#73, agg7#74] ===== Subqueries ===== @@ -281,25 +281,25 @@ BroadcastExchange (54) (50) Scan parquet default.date_dim -Output [2]: [d_date_sk#16, d_year#83] +Output [2]: [d_date_sk#15, d_year#75] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1998), IsNotNull(d_date_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#16, d_year#83] +Input [2]: [d_date_sk#15, d_year#75] (52) Filter [codegen id : 1] -Input [2]: [d_date_sk#16, d_year#83] -Condition : ((isnotnull(d_year#83) AND (d_year#83 = 1998)) AND isnotnull(d_date_sk#16)) +Input [2]: [d_date_sk#15, d_year#75] +Condition : ((isnotnull(d_year#75) AND (d_year#75 = 1998)) AND isnotnull(d_date_sk#15)) (53) Project [codegen id : 1] -Output [1]: [d_date_sk#16] -Input [2]: [d_date_sk#16, d_year#83] +Output [1]: [d_date_sk#15] +Input [2]: [d_date_sk#15, d_year#75] (54) BroadcastExchange -Input [1]: [d_date_sk#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#84] +Input [1]: [d_date_sk#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q18/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q18/explain.txt index d1b5044290a25..4d7f4d7e976b6 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q18/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q18/explain.txt @@ -79,7 +79,7 @@ Input [4]: [cd_demo_sk#11, cd_gender#12, cd_education_status#13, cd_dep_count#14 (8) BroadcastExchange Input [2]: [cd_demo_sk#11, cd_dep_count#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 7] Left keys [1]: [cs_bill_cdemo_sk#2] @@ -91,154 +91,154 @@ Output [9]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5 Input [11]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_demo_sk#11, cd_dep_count#14] (11) Scan parquet default.customer -Output [5]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_month#19, c_birth_year#20] +Output [5]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_month#18, c_birth_year#19] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [In(c_birth_month, [1,12,2,6,8,9]), IsNotNull(c_customer_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [5]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_month#19, c_birth_year#20] +Input [5]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_month#18, c_birth_year#19] (13) Filter [codegen id : 2] -Input [5]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_month#19, c_birth_year#20] -Condition : (((c_birth_month#19 IN (1,6,8,9,12,2) AND isnotnull(c_customer_sk#16)) AND isnotnull(c_current_cdemo_sk#17)) AND isnotnull(c_current_addr_sk#18)) +Input [5]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_month#18, c_birth_year#19] +Condition : (((c_birth_month#18 IN (1,6,8,9,12,2) AND isnotnull(c_customer_sk#15)) AND isnotnull(c_current_cdemo_sk#16)) AND isnotnull(c_current_addr_sk#17)) (14) Project [codegen id : 2] -Output [4]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] -Input [5]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_month#19, c_birth_year#20] +Output [4]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] +Input [5]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_month#18, c_birth_year#19] (15) BroadcastExchange -Input [4]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#21] +Input [4]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 7] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#16] +Right keys [1]: [c_customer_sk#15] Join condition: None (17) Project [codegen id : 7] -Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] -Input [13]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] +Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] +Input [13]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] (18) Scan parquet default.customer_demographics -Output [1]: [cd_demo_sk#22] +Output [1]: [cd_demo_sk#20] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (19) ColumnarToRow [codegen id : 3] -Input [1]: [cd_demo_sk#22] +Input [1]: [cd_demo_sk#20] (20) Filter [codegen id : 3] -Input [1]: [cd_demo_sk#22] -Condition : isnotnull(cd_demo_sk#22) +Input [1]: [cd_demo_sk#20] +Condition : isnotnull(cd_demo_sk#20) (21) BroadcastExchange -Input [1]: [cd_demo_sk#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23] +Input [1]: [cd_demo_sk#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (22) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [c_current_cdemo_sk#17] -Right keys [1]: [cd_demo_sk#22] +Left keys [1]: [c_current_cdemo_sk#16] +Right keys [1]: [cd_demo_sk#20] Join condition: None (23) Project [codegen id : 7] -Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#18, c_birth_year#20] -Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20, cd_demo_sk#22] +Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#17, c_birth_year#19] +Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19, cd_demo_sk#20] (24) Scan parquet default.customer_address -Output [4]: [ca_address_sk#24, ca_county#25, ca_state#26, ca_country#27] +Output [4]: [ca_address_sk#21, ca_county#22, ca_state#23, ca_country#24] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [IN,MS,ND,NM,OK,VA]), IsNotNull(ca_address_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 4] -Input [4]: [ca_address_sk#24, ca_county#25, ca_state#26, ca_country#27] +Input [4]: [ca_address_sk#21, ca_county#22, ca_state#23, ca_country#24] (26) Filter [codegen id : 4] -Input [4]: [ca_address_sk#24, ca_county#25, ca_state#26, ca_country#27] -Condition : (ca_state#26 IN (MS,IN,ND,OK,NM,VA) AND isnotnull(ca_address_sk#24)) +Input [4]: [ca_address_sk#21, ca_county#22, ca_state#23, ca_country#24] +Condition : (ca_state#23 IN (MS,IN,ND,OK,NM,VA) AND isnotnull(ca_address_sk#21)) (27) BroadcastExchange -Input [4]: [ca_address_sk#24, ca_county#25, ca_state#26, ca_country#27] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#28] +Input [4]: [ca_address_sk#21, ca_county#22, ca_state#23, ca_country#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (28) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [c_current_addr_sk#18] -Right keys [1]: [ca_address_sk#24] +Left keys [1]: [c_current_addr_sk#17] +Right keys [1]: [ca_address_sk#21] Join condition: None (29) Project [codegen id : 7] -Output [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#20, ca_county#25, ca_state#26, ca_country#27] -Input [14]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#18, c_birth_year#20, ca_address_sk#24, ca_county#25, ca_state#26, ca_country#27] +Output [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#19, ca_county#22, ca_state#23, ca_country#24] +Input [14]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#17, c_birth_year#19, ca_address_sk#21, ca_county#22, ca_state#23, ca_country#24] (30) ReusedExchange [Reuses operator id: 48] -Output [1]: [d_date_sk#29] +Output [1]: [d_date_sk#25] (31) BroadcastHashJoin [codegen id : 7] Left keys [1]: [cs_sold_date_sk#9] -Right keys [1]: [d_date_sk#29] +Right keys [1]: [d_date_sk#25] Join condition: None (32) Project [codegen id : 7] -Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, ca_county#25, ca_state#26, ca_country#27] -Input [13]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#20, ca_county#25, ca_state#26, ca_country#27, d_date_sk#29] +Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, ca_county#22, ca_state#23, ca_country#24] +Input [13]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#19, ca_county#22, ca_state#23, ca_country#24, d_date_sk#25] (33) Scan parquet default.item -Output [2]: [i_item_sk#30, i_item_id#31] +Output [2]: [i_item_sk#26, i_item_id#27] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 6] -Input [2]: [i_item_sk#30, i_item_id#31] +Input [2]: [i_item_sk#26, i_item_id#27] (35) Filter [codegen id : 6] -Input [2]: [i_item_sk#30, i_item_id#31] -Condition : isnotnull(i_item_sk#30) +Input [2]: [i_item_sk#26, i_item_id#27] +Condition : isnotnull(i_item_sk#26) (36) BroadcastExchange -Input [2]: [i_item_sk#30, i_item_id#31] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#32] +Input [2]: [i_item_sk#26, i_item_id#27] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (37) BroadcastHashJoin [codegen id : 7] Left keys [1]: [cs_item_sk#3] -Right keys [1]: [i_item_sk#30] +Right keys [1]: [i_item_sk#26] Join condition: None (38) Project [codegen id : 7] -Output [11]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, i_item_id#31, ca_country#27, ca_state#26, ca_county#25] -Input [13]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, ca_county#25, ca_state#26, ca_country#27, i_item_sk#30, i_item_id#31] +Output [11]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, i_item_id#27, ca_country#24, ca_state#23, ca_county#22] +Input [13]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, ca_county#22, ca_state#23, ca_country#24, i_item_sk#26, i_item_id#27] (39) Expand [codegen id : 7] -Input [11]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, i_item_id#31, ca_country#27, ca_state#26, ca_county#25] -Arguments: [[cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, i_item_id#31, ca_country#27, ca_state#26, ca_county#25, 0], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, i_item_id#31, ca_country#27, ca_state#26, null, 1], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, i_item_id#31, ca_country#27, null, null, 3], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, i_item_id#31, null, null, null, 7], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, null, null, null, null, 15]], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, i_item_id#33, ca_country#34, ca_state#35, ca_county#36, spark_grouping_id#37] +Input [11]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, i_item_id#27, ca_country#24, ca_state#23, ca_county#22] +Arguments: [[cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, i_item_id#27, ca_country#24, ca_state#23, ca_county#22, 0], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, i_item_id#27, ca_country#24, ca_state#23, null, 1], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, i_item_id#27, ca_country#24, null, null, 3], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, i_item_id#27, null, null, null, 7], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, null, null, null, null, 15]], [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32] (40) HashAggregate [codegen id : 7] -Input [12]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, i_item_id#33, ca_country#34, ca_state#35, ca_county#36, spark_grouping_id#37] -Keys [5]: [i_item_id#33, ca_country#34, ca_state#35, ca_county#36, spark_grouping_id#37] -Functions [7]: [partial_avg(cast(cs_quantity#4 as decimal(12,2))), partial_avg(cast(cs_list_price#5 as decimal(12,2))), partial_avg(cast(cs_coupon_amt#7 as decimal(12,2))), partial_avg(cast(cs_sales_price#6 as decimal(12,2))), partial_avg(cast(cs_net_profit#8 as decimal(12,2))), partial_avg(cast(c_birth_year#20 as decimal(12,2))), partial_avg(cast(cd_dep_count#14 as decimal(12,2)))] -Aggregate Attributes [14]: [sum#38, count#39, sum#40, count#41, sum#42, count#43, sum#44, count#45, sum#46, count#47, sum#48, count#49, sum#50, count#51] -Results [19]: [i_item_id#33, ca_country#34, ca_state#35, ca_county#36, spark_grouping_id#37, sum#52, count#53, sum#54, count#55, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63, sum#64, count#65] +Input [12]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32] +Keys [5]: [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32] +Functions [7]: [partial_avg(cast(cs_quantity#4 as decimal(12,2))), partial_avg(cast(cs_list_price#5 as decimal(12,2))), partial_avg(cast(cs_coupon_amt#7 as decimal(12,2))), partial_avg(cast(cs_sales_price#6 as decimal(12,2))), partial_avg(cast(cs_net_profit#8 as decimal(12,2))), partial_avg(cast(c_birth_year#19 as decimal(12,2))), partial_avg(cast(cd_dep_count#14 as decimal(12,2)))] +Aggregate Attributes [14]: [sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39, count#40, sum#41, count#42, sum#43, count#44, sum#45, count#46] +Results [19]: [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32, sum#47, count#48, sum#49, count#50, sum#51, count#52, sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60] (41) Exchange -Input [19]: [i_item_id#33, ca_country#34, ca_state#35, ca_county#36, spark_grouping_id#37, sum#52, count#53, sum#54, count#55, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63, sum#64, count#65] -Arguments: hashpartitioning(i_item_id#33, ca_country#34, ca_state#35, ca_county#36, spark_grouping_id#37, 5), ENSURE_REQUIREMENTS, [id=#66] +Input [19]: [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32, sum#47, count#48, sum#49, count#50, sum#51, count#52, sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60] +Arguments: hashpartitioning(i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32, 5), ENSURE_REQUIREMENTS, [plan_id=6] (42) HashAggregate [codegen id : 8] -Input [19]: [i_item_id#33, ca_country#34, ca_state#35, ca_county#36, spark_grouping_id#37, sum#52, count#53, sum#54, count#55, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63, sum#64, count#65] -Keys [5]: [i_item_id#33, ca_country#34, ca_state#35, ca_county#36, spark_grouping_id#37] -Functions [7]: [avg(cast(cs_quantity#4 as decimal(12,2))), avg(cast(cs_list_price#5 as decimal(12,2))), avg(cast(cs_coupon_amt#7 as decimal(12,2))), avg(cast(cs_sales_price#6 as decimal(12,2))), avg(cast(cs_net_profit#8 as decimal(12,2))), avg(cast(c_birth_year#20 as decimal(12,2))), avg(cast(cd_dep_count#14 as decimal(12,2)))] -Aggregate Attributes [7]: [avg(cast(cs_quantity#4 as decimal(12,2)))#67, avg(cast(cs_list_price#5 as decimal(12,2)))#68, avg(cast(cs_coupon_amt#7 as decimal(12,2)))#69, avg(cast(cs_sales_price#6 as decimal(12,2)))#70, avg(cast(cs_net_profit#8 as decimal(12,2)))#71, avg(cast(c_birth_year#20 as decimal(12,2)))#72, avg(cast(cd_dep_count#14 as decimal(12,2)))#73] -Results [11]: [i_item_id#33, ca_country#34, ca_state#35, ca_county#36, avg(cast(cs_quantity#4 as decimal(12,2)))#67 AS agg1#74, avg(cast(cs_list_price#5 as decimal(12,2)))#68 AS agg2#75, avg(cast(cs_coupon_amt#7 as decimal(12,2)))#69 AS agg3#76, avg(cast(cs_sales_price#6 as decimal(12,2)))#70 AS agg4#77, avg(cast(cs_net_profit#8 as decimal(12,2)))#71 AS agg5#78, avg(cast(c_birth_year#20 as decimal(12,2)))#72 AS agg6#79, avg(cast(cd_dep_count#14 as decimal(12,2)))#73 AS agg7#80] +Input [19]: [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32, sum#47, count#48, sum#49, count#50, sum#51, count#52, sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60] +Keys [5]: [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, spark_grouping_id#32] +Functions [7]: [avg(cast(cs_quantity#4 as decimal(12,2))), avg(cast(cs_list_price#5 as decimal(12,2))), avg(cast(cs_coupon_amt#7 as decimal(12,2))), avg(cast(cs_sales_price#6 as decimal(12,2))), avg(cast(cs_net_profit#8 as decimal(12,2))), avg(cast(c_birth_year#19 as decimal(12,2))), avg(cast(cd_dep_count#14 as decimal(12,2)))] +Aggregate Attributes [7]: [avg(cast(cs_quantity#4 as decimal(12,2)))#61, avg(cast(cs_list_price#5 as decimal(12,2)))#62, avg(cast(cs_coupon_amt#7 as decimal(12,2)))#63, avg(cast(cs_sales_price#6 as decimal(12,2)))#64, avg(cast(cs_net_profit#8 as decimal(12,2)))#65, avg(cast(c_birth_year#19 as decimal(12,2)))#66, avg(cast(cd_dep_count#14 as decimal(12,2)))#67] +Results [11]: [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, avg(cast(cs_quantity#4 as decimal(12,2)))#61 AS agg1#68, avg(cast(cs_list_price#5 as decimal(12,2)))#62 AS agg2#69, avg(cast(cs_coupon_amt#7 as decimal(12,2)))#63 AS agg3#70, avg(cast(cs_sales_price#6 as decimal(12,2)))#64 AS agg4#71, avg(cast(cs_net_profit#8 as decimal(12,2)))#65 AS agg5#72, avg(cast(c_birth_year#19 as decimal(12,2)))#66 AS agg6#73, avg(cast(cd_dep_count#14 as decimal(12,2)))#67 AS agg7#74] (43) TakeOrderedAndProject -Input [11]: [i_item_id#33, ca_country#34, ca_state#35, ca_county#36, agg1#74, agg2#75, agg3#76, agg4#77, agg5#78, agg6#79, agg7#80] -Arguments: 100, [ca_country#34 ASC NULLS FIRST, ca_state#35 ASC NULLS FIRST, ca_county#36 ASC NULLS FIRST, i_item_id#33 ASC NULLS FIRST], [i_item_id#33, ca_country#34, ca_state#35, ca_county#36, agg1#74, agg2#75, agg3#76, agg4#77, agg5#78, agg6#79, agg7#80] +Input [11]: [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, agg1#68, agg2#69, agg3#70, agg4#71, agg5#72, agg6#73, agg7#74] +Arguments: 100, [ca_country#29 ASC NULLS FIRST, ca_state#30 ASC NULLS FIRST, ca_county#31 ASC NULLS FIRST, i_item_id#28 ASC NULLS FIRST], [i_item_id#28, ca_country#29, ca_state#30, ca_county#31, agg1#68, agg2#69, agg3#70, agg4#71, agg5#72, agg6#73, agg7#74] ===== Subqueries ===== @@ -251,25 +251,25 @@ BroadcastExchange (48) (44) Scan parquet default.date_dim -Output [2]: [d_date_sk#29, d_year#81] +Output [2]: [d_date_sk#25, d_year#75] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1998), IsNotNull(d_date_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#29, d_year#81] +Input [2]: [d_date_sk#25, d_year#75] (46) Filter [codegen id : 1] -Input [2]: [d_date_sk#29, d_year#81] -Condition : ((isnotnull(d_year#81) AND (d_year#81 = 1998)) AND isnotnull(d_date_sk#29)) +Input [2]: [d_date_sk#25, d_year#75] +Condition : ((isnotnull(d_year#75) AND (d_year#75 = 1998)) AND isnotnull(d_date_sk#25)) (47) Project [codegen id : 1] -Output [1]: [d_date_sk#29] -Input [2]: [d_date_sk#29, d_year#81] +Output [1]: [d_date_sk#25] +Input [2]: [d_date_sk#25, d_year#75] (48) BroadcastExchange -Input [1]: [d_date_sk#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#82] +Input [1]: [d_date_sk#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q19.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q19.sf100/explain.txt index 980ca7ba560c9..560d7c1a9c642 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q19.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q19.sf100/explain.txt @@ -77,7 +77,7 @@ Input [6]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#1 (8) BroadcastExchange Input [5]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_item_sk#1] @@ -89,143 +89,143 @@ Output [8]: [ss_customer_sk#2, ss_store_sk#3, ss_ext_sales_price#4, ss_sold_date Input [10]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ext_sales_price#4, ss_sold_date_sk#5, i_item_sk#7, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11] (11) ReusedExchange [Reuses operator id: 46] -Output [1]: [d_date_sk#14] +Output [1]: [d_date_sk#13] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_date_sk#5] -Right keys [1]: [d_date_sk#14] +Right keys [1]: [d_date_sk#13] Join condition: None (13) Project [codegen id : 4] Output [7]: [ss_customer_sk#2, ss_store_sk#3, ss_ext_sales_price#4, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11] -Input [9]: [ss_customer_sk#2, ss_store_sk#3, ss_ext_sales_price#4, ss_sold_date_sk#5, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11, d_date_sk#14] +Input [9]: [ss_customer_sk#2, ss_store_sk#3, ss_ext_sales_price#4, ss_sold_date_sk#5, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11, d_date_sk#13] (14) Scan parquet default.store -Output [2]: [s_store_sk#15, s_zip#16] +Output [2]: [s_store_sk#14, s_zip#15] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_zip), IsNotNull(s_store_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [2]: [s_store_sk#15, s_zip#16] +Input [2]: [s_store_sk#14, s_zip#15] (16) Filter [codegen id : 3] -Input [2]: [s_store_sk#15, s_zip#16] -Condition : (isnotnull(s_zip#16) AND isnotnull(s_store_sk#15)) +Input [2]: [s_store_sk#14, s_zip#15] +Condition : (isnotnull(s_zip#15) AND isnotnull(s_store_sk#14)) (17) BroadcastExchange -Input [2]: [s_store_sk#15, s_zip#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#17] +Input [2]: [s_store_sk#14, s_zip#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#15] +Right keys [1]: [s_store_sk#14] Join condition: None (19) Project [codegen id : 4] -Output [7]: [ss_customer_sk#2, ss_ext_sales_price#4, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11, s_zip#16] -Input [9]: [ss_customer_sk#2, ss_store_sk#3, ss_ext_sales_price#4, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11, s_store_sk#15, s_zip#16] +Output [7]: [ss_customer_sk#2, ss_ext_sales_price#4, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11, s_zip#15] +Input [9]: [ss_customer_sk#2, ss_store_sk#3, ss_ext_sales_price#4, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11, s_store_sk#14, s_zip#15] (20) Exchange -Input [7]: [ss_customer_sk#2, ss_ext_sales_price#4, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11, s_zip#16] -Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [7]: [ss_customer_sk#2, ss_ext_sales_price#4, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11, s_zip#15] +Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) Sort [codegen id : 5] -Input [7]: [ss_customer_sk#2, ss_ext_sales_price#4, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11, s_zip#16] +Input [7]: [ss_customer_sk#2, ss_ext_sales_price#4, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11, s_zip#15] Arguments: [ss_customer_sk#2 ASC NULLS FIRST], false, 0 (22) Scan parquet default.customer -Output [2]: [c_customer_sk#19, c_current_addr_sk#20] +Output [2]: [c_customer_sk#16, c_current_addr_sk#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 6] -Input [2]: [c_customer_sk#19, c_current_addr_sk#20] +Input [2]: [c_customer_sk#16, c_current_addr_sk#17] (24) Filter [codegen id : 6] -Input [2]: [c_customer_sk#19, c_current_addr_sk#20] -Condition : (isnotnull(c_customer_sk#19) AND isnotnull(c_current_addr_sk#20)) +Input [2]: [c_customer_sk#16, c_current_addr_sk#17] +Condition : (isnotnull(c_customer_sk#16) AND isnotnull(c_current_addr_sk#17)) (25) Exchange -Input [2]: [c_customer_sk#19, c_current_addr_sk#20] -Arguments: hashpartitioning(c_current_addr_sk#20, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [2]: [c_customer_sk#16, c_current_addr_sk#17] +Arguments: hashpartitioning(c_current_addr_sk#17, 5), ENSURE_REQUIREMENTS, [plan_id=4] (26) Sort [codegen id : 7] -Input [2]: [c_customer_sk#19, c_current_addr_sk#20] -Arguments: [c_current_addr_sk#20 ASC NULLS FIRST], false, 0 +Input [2]: [c_customer_sk#16, c_current_addr_sk#17] +Arguments: [c_current_addr_sk#17 ASC NULLS FIRST], false, 0 (27) Scan parquet default.customer_address -Output [2]: [ca_address_sk#22, ca_zip#23] +Output [2]: [ca_address_sk#18, ca_zip#19] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_zip)] ReadSchema: struct (28) ColumnarToRow [codegen id : 8] -Input [2]: [ca_address_sk#22, ca_zip#23] +Input [2]: [ca_address_sk#18, ca_zip#19] (29) Filter [codegen id : 8] -Input [2]: [ca_address_sk#22, ca_zip#23] -Condition : (isnotnull(ca_address_sk#22) AND isnotnull(ca_zip#23)) +Input [2]: [ca_address_sk#18, ca_zip#19] +Condition : (isnotnull(ca_address_sk#18) AND isnotnull(ca_zip#19)) (30) Exchange -Input [2]: [ca_address_sk#22, ca_zip#23] -Arguments: hashpartitioning(ca_address_sk#22, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [2]: [ca_address_sk#18, ca_zip#19] +Arguments: hashpartitioning(ca_address_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=5] (31) Sort [codegen id : 9] -Input [2]: [ca_address_sk#22, ca_zip#23] -Arguments: [ca_address_sk#22 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#18, ca_zip#19] +Arguments: [ca_address_sk#18 ASC NULLS FIRST], false, 0 (32) SortMergeJoin [codegen id : 10] -Left keys [1]: [c_current_addr_sk#20] -Right keys [1]: [ca_address_sk#22] +Left keys [1]: [c_current_addr_sk#17] +Right keys [1]: [ca_address_sk#18] Join condition: None (33) Project [codegen id : 10] -Output [2]: [c_customer_sk#19, ca_zip#23] -Input [4]: [c_customer_sk#19, c_current_addr_sk#20, ca_address_sk#22, ca_zip#23] +Output [2]: [c_customer_sk#16, ca_zip#19] +Input [4]: [c_customer_sk#16, c_current_addr_sk#17, ca_address_sk#18, ca_zip#19] (34) Exchange -Input [2]: [c_customer_sk#19, ca_zip#23] -Arguments: hashpartitioning(c_customer_sk#19, 5), ENSURE_REQUIREMENTS, [id=#25] +Input [2]: [c_customer_sk#16, ca_zip#19] +Arguments: hashpartitioning(c_customer_sk#16, 5), ENSURE_REQUIREMENTS, [plan_id=6] (35) Sort [codegen id : 11] -Input [2]: [c_customer_sk#19, ca_zip#23] -Arguments: [c_customer_sk#19 ASC NULLS FIRST], false, 0 +Input [2]: [c_customer_sk#16, ca_zip#19] +Arguments: [c_customer_sk#16 ASC NULLS FIRST], false, 0 (36) SortMergeJoin [codegen id : 12] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#19] -Join condition: NOT (substr(ca_zip#23, 1, 5) = substr(s_zip#16, 1, 5)) +Right keys [1]: [c_customer_sk#16] +Join condition: NOT (substr(ca_zip#19, 1, 5) = substr(s_zip#15, 1, 5)) (37) Project [codegen id : 12] Output [5]: [ss_ext_sales_price#4, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11] -Input [9]: [ss_customer_sk#2, ss_ext_sales_price#4, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11, s_zip#16, c_customer_sk#19, ca_zip#23] +Input [9]: [ss_customer_sk#2, ss_ext_sales_price#4, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11, s_zip#15, c_customer_sk#16, ca_zip#19] (38) HashAggregate [codegen id : 12] Input [5]: [ss_ext_sales_price#4, i_brand_id#8, i_brand#9, i_manufact_id#10, i_manufact#11] Keys [4]: [i_brand#9, i_brand_id#8, i_manufact_id#10, i_manufact#11] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#4))] -Aggregate Attributes [1]: [sum#26] -Results [5]: [i_brand#9, i_brand_id#8, i_manufact_id#10, i_manufact#11, sum#27] +Aggregate Attributes [1]: [sum#20] +Results [5]: [i_brand#9, i_brand_id#8, i_manufact_id#10, i_manufact#11, sum#21] (39) Exchange -Input [5]: [i_brand#9, i_brand_id#8, i_manufact_id#10, i_manufact#11, sum#27] -Arguments: hashpartitioning(i_brand#9, i_brand_id#8, i_manufact_id#10, i_manufact#11, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [5]: [i_brand#9, i_brand_id#8, i_manufact_id#10, i_manufact#11, sum#21] +Arguments: hashpartitioning(i_brand#9, i_brand_id#8, i_manufact_id#10, i_manufact#11, 5), ENSURE_REQUIREMENTS, [plan_id=7] (40) HashAggregate [codegen id : 13] -Input [5]: [i_brand#9, i_brand_id#8, i_manufact_id#10, i_manufact#11, sum#27] +Input [5]: [i_brand#9, i_brand_id#8, i_manufact_id#10, i_manufact#11, sum#21] Keys [4]: [i_brand#9, i_brand_id#8, i_manufact_id#10, i_manufact#11] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#4))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#4))#29] -Results [5]: [i_brand_id#8 AS brand_id#30, i_brand#9 AS brand#31, i_manufact_id#10, i_manufact#11, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#4))#29,17,2) AS ext_price#32] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#4))#22] +Results [5]: [i_brand_id#8 AS brand_id#23, i_brand#9 AS brand#24, i_manufact_id#10, i_manufact#11, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#4))#22,17,2) AS ext_price#25] (41) TakeOrderedAndProject -Input [5]: [brand_id#30, brand#31, i_manufact_id#10, i_manufact#11, ext_price#32] -Arguments: 100, [ext_price#32 DESC NULLS LAST, brand#31 ASC NULLS FIRST, brand_id#30 ASC NULLS FIRST, i_manufact_id#10 ASC NULLS FIRST, i_manufact#11 ASC NULLS FIRST], [brand_id#30, brand#31, i_manufact_id#10, i_manufact#11, ext_price#32] +Input [5]: [brand_id#23, brand#24, i_manufact_id#10, i_manufact#11, ext_price#25] +Arguments: 100, [ext_price#25 DESC NULLS LAST, brand#24 ASC NULLS FIRST, brand_id#23 ASC NULLS FIRST, i_manufact_id#10 ASC NULLS FIRST, i_manufact#11 ASC NULLS FIRST], [brand_id#23, brand#24, i_manufact_id#10, i_manufact#11, ext_price#25] ===== Subqueries ===== @@ -238,25 +238,25 @@ BroadcastExchange (46) (42) Scan parquet default.date_dim -Output [3]: [d_date_sk#14, d_year#33, d_moy#34] +Output [3]: [d_date_sk#13, d_year#26, d_moy#27] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_moy,11), EqualTo(d_year,1998), IsNotNull(d_date_sk)] ReadSchema: struct (43) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#14, d_year#33, d_moy#34] +Input [3]: [d_date_sk#13, d_year#26, d_moy#27] (44) Filter [codegen id : 1] -Input [3]: [d_date_sk#14, d_year#33, d_moy#34] -Condition : ((((isnotnull(d_moy#34) AND isnotnull(d_year#33)) AND (d_moy#34 = 11)) AND (d_year#33 = 1998)) AND isnotnull(d_date_sk#14)) +Input [3]: [d_date_sk#13, d_year#26, d_moy#27] +Condition : ((((isnotnull(d_moy#27) AND isnotnull(d_year#26)) AND (d_moy#27 = 11)) AND (d_year#26 = 1998)) AND isnotnull(d_date_sk#13)) (45) Project [codegen id : 1] -Output [1]: [d_date_sk#14] -Input [3]: [d_date_sk#14, d_year#33, d_moy#34] +Output [1]: [d_date_sk#13] +Input [3]: [d_date_sk#13, d_year#26, d_moy#27] (46) BroadcastExchange -Input [1]: [d_date_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#35] +Input [1]: [d_date_sk#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q19/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q19/explain.txt index e321ddc156860..34a1f715bda37 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q19/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q19/explain.txt @@ -75,7 +75,7 @@ Condition : ((isnotnull(ss_item_sk#4) AND isnotnull(ss_customer_sk#5)) AND isnot (8) BroadcastExchange Input [5]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, ss_sold_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[4, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[4, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 6] Left keys [1]: [d_date_sk#1] @@ -87,136 +87,136 @@ Output [4]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7 Input [6]: [d_date_sk#1, ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, ss_sold_date_sk#8] (11) Scan parquet default.item -Output [6]: [i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, i_manager_id#15] +Output [6]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, i_manager_id#14] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,8), IsNotNull(i_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [6]: [i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, i_manager_id#15] +Input [6]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, i_manager_id#14] (13) Filter [codegen id : 2] -Input [6]: [i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, i_manager_id#15] -Condition : ((isnotnull(i_manager_id#15) AND (i_manager_id#15 = 8)) AND isnotnull(i_item_sk#10)) +Input [6]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, i_manager_id#14] +Condition : ((isnotnull(i_manager_id#14) AND (i_manager_id#14 = 8)) AND isnotnull(i_item_sk#9)) (14) Project [codegen id : 2] -Output [5]: [i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14] -Input [6]: [i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, i_manager_id#15] +Output [5]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13] +Input [6]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, i_manager_id#14] (15) BroadcastExchange -Input [5]: [i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16] +Input [5]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_item_sk#4] -Right keys [1]: [i_item_sk#10] +Right keys [1]: [i_item_sk#9] Join condition: None (17) Project [codegen id : 6] -Output [7]: [ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14] -Input [9]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14] +Output [7]: [ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13] +Input [9]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_item_sk#9, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13] (18) Scan parquet default.customer -Output [2]: [c_customer_sk#17, c_current_addr_sk#18] +Output [2]: [c_customer_sk#15, c_current_addr_sk#16] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (19) ColumnarToRow [codegen id : 3] -Input [2]: [c_customer_sk#17, c_current_addr_sk#18] +Input [2]: [c_customer_sk#15, c_current_addr_sk#16] (20) Filter [codegen id : 3] -Input [2]: [c_customer_sk#17, c_current_addr_sk#18] -Condition : (isnotnull(c_customer_sk#17) AND isnotnull(c_current_addr_sk#18)) +Input [2]: [c_customer_sk#15, c_current_addr_sk#16] +Condition : (isnotnull(c_customer_sk#15) AND isnotnull(c_current_addr_sk#16)) (21) BroadcastExchange -Input [2]: [c_customer_sk#17, c_current_addr_sk#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19] +Input [2]: [c_customer_sk#15, c_current_addr_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (22) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#5] -Right keys [1]: [c_customer_sk#17] +Right keys [1]: [c_customer_sk#15] Join condition: None (23) Project [codegen id : 6] -Output [7]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, c_current_addr_sk#18] -Input [9]: [ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, c_customer_sk#17, c_current_addr_sk#18] +Output [7]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, c_current_addr_sk#16] +Input [9]: [ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, c_customer_sk#15, c_current_addr_sk#16] (24) Scan parquet default.customer_address -Output [2]: [ca_address_sk#20, ca_zip#21] +Output [2]: [ca_address_sk#17, ca_zip#18] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_zip)] ReadSchema: struct (25) ColumnarToRow [codegen id : 4] -Input [2]: [ca_address_sk#20, ca_zip#21] +Input [2]: [ca_address_sk#17, ca_zip#18] (26) Filter [codegen id : 4] -Input [2]: [ca_address_sk#20, ca_zip#21] -Condition : (isnotnull(ca_address_sk#20) AND isnotnull(ca_zip#21)) +Input [2]: [ca_address_sk#17, ca_zip#18] +Condition : (isnotnull(ca_address_sk#17) AND isnotnull(ca_zip#18)) (27) BroadcastExchange -Input [2]: [ca_address_sk#20, ca_zip#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#22] +Input [2]: [ca_address_sk#17, ca_zip#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (28) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [c_current_addr_sk#18] -Right keys [1]: [ca_address_sk#20] +Left keys [1]: [c_current_addr_sk#16] +Right keys [1]: [ca_address_sk#17] Join condition: None (29) Project [codegen id : 6] -Output [7]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, ca_zip#21] -Input [9]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, c_current_addr_sk#18, ca_address_sk#20, ca_zip#21] +Output [7]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, ca_zip#18] +Input [9]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, c_current_addr_sk#16, ca_address_sk#17, ca_zip#18] (30) Scan parquet default.store -Output [2]: [s_store_sk#23, s_zip#24] +Output [2]: [s_store_sk#19, s_zip#20] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_zip), IsNotNull(s_store_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 5] -Input [2]: [s_store_sk#23, s_zip#24] +Input [2]: [s_store_sk#19, s_zip#20] (32) Filter [codegen id : 5] -Input [2]: [s_store_sk#23, s_zip#24] -Condition : (isnotnull(s_zip#24) AND isnotnull(s_store_sk#23)) +Input [2]: [s_store_sk#19, s_zip#20] +Condition : (isnotnull(s_zip#20) AND isnotnull(s_store_sk#19)) (33) BroadcastExchange -Input [2]: [s_store_sk#23, s_zip#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#25] +Input [2]: [s_store_sk#19, s_zip#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_store_sk#6] -Right keys [1]: [s_store_sk#23] -Join condition: NOT (substr(ca_zip#21, 1, 5) = substr(s_zip#24, 1, 5)) +Right keys [1]: [s_store_sk#19] +Join condition: NOT (substr(ca_zip#18, 1, 5) = substr(s_zip#20, 1, 5)) (35) Project [codegen id : 6] -Output [5]: [ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14] -Input [9]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, ca_zip#21, s_store_sk#23, s_zip#24] +Output [5]: [ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13] +Input [9]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13, ca_zip#18, s_store_sk#19, s_zip#20] (36) HashAggregate [codegen id : 6] -Input [5]: [ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14] -Keys [4]: [i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14] +Input [5]: [ss_ext_sales_price#7, i_brand_id#10, i_brand#11, i_manufact_id#12, i_manufact#13] +Keys [4]: [i_brand#11, i_brand_id#10, i_manufact_id#12, i_manufact#13] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#7))] -Aggregate Attributes [1]: [sum#26] -Results [5]: [i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14, sum#27] +Aggregate Attributes [1]: [sum#21] +Results [5]: [i_brand#11, i_brand_id#10, i_manufact_id#12, i_manufact#13, sum#22] (37) Exchange -Input [5]: [i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14, sum#27] -Arguments: hashpartitioning(i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [5]: [i_brand#11, i_brand_id#10, i_manufact_id#12, i_manufact#13, sum#22] +Arguments: hashpartitioning(i_brand#11, i_brand_id#10, i_manufact_id#12, i_manufact#13, 5), ENSURE_REQUIREMENTS, [plan_id=6] (38) HashAggregate [codegen id : 7] -Input [5]: [i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14, sum#27] -Keys [4]: [i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14] +Input [5]: [i_brand#11, i_brand_id#10, i_manufact_id#12, i_manufact#13, sum#22] +Keys [4]: [i_brand#11, i_brand_id#10, i_manufact_id#12, i_manufact#13] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#7))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#7))#29] -Results [5]: [i_brand_id#11 AS brand_id#30, i_brand#12 AS brand#31, i_manufact_id#13, i_manufact#14, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#7))#29,17,2) AS ext_price#32] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#7))#23] +Results [5]: [i_brand_id#10 AS brand_id#24, i_brand#11 AS brand#25, i_manufact_id#12, i_manufact#13, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#7))#23,17,2) AS ext_price#26] (39) TakeOrderedAndProject -Input [5]: [brand_id#30, brand#31, i_manufact_id#13, i_manufact#14, ext_price#32] -Arguments: 100, [ext_price#32 DESC NULLS LAST, brand#31 ASC NULLS FIRST, brand_id#30 ASC NULLS FIRST, i_manufact_id#13 ASC NULLS FIRST, i_manufact#14 ASC NULLS FIRST], [brand_id#30, brand#31, i_manufact_id#13, i_manufact#14, ext_price#32] +Input [5]: [brand_id#24, brand#25, i_manufact_id#12, i_manufact#13, ext_price#26] +Arguments: 100, [ext_price#26 DESC NULLS LAST, brand#25 ASC NULLS FIRST, brand_id#24 ASC NULLS FIRST, i_manufact_id#12 ASC NULLS FIRST, i_manufact#13 ASC NULLS FIRST], [brand_id#24, brand#25, i_manufact_id#12, i_manufact#13, ext_price#26] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q2.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q2.sf100/explain.txt index 16748b178c3fb..5e2e350d0f280 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q2.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q2.sf100/explain.txt @@ -98,7 +98,7 @@ Condition : ((isnotnull(d_date_sk#9) AND isnotnull(d_week_seq#10)) AND might_con (11) BroadcastExchange Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [sold_date_sk#3] @@ -113,50 +113,50 @@ Input [5]: [sold_date_sk#3, sales_price#4, d_date_sk#9, d_week_seq#10, d_day_nam Input [3]: [sales_price#4, d_week_seq#10, d_day_name#11] Keys [1]: [d_week_seq#10] Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))] -Aggregate Attributes [7]: [sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21] -Results [8]: [d_week_seq#10, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] +Aggregate Attributes [7]: [sum#14, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20] +Results [8]: [d_week_seq#10, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27] (15) Exchange -Input [8]: [d_week_seq#10, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] -Arguments: hashpartitioning(d_week_seq#10, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [8]: [d_week_seq#10, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27] +Arguments: hashpartitioning(d_week_seq#10, 5), ENSURE_REQUIREMENTS, [plan_id=2] (16) HashAggregate [codegen id : 12] -Input [8]: [d_week_seq#10, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27, sum#28] +Input [8]: [d_week_seq#10, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27] Keys [1]: [d_week_seq#10] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))] -Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#36] -Results [8]: [d_week_seq#10, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#30,17,2) AS sun_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#31,17,2) AS mon_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#32,17,2) AS tue_sales#39, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#33,17,2) AS wed_sales#40, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#34,17,2) AS thu_sales#41, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#35,17,2) AS fri_sales#42, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#36,17,2) AS sat_sales#43] +Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#34] +Results [8]: [d_week_seq#10, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#28,17,2) AS sun_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#29,17,2) AS mon_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#30,17,2) AS tue_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#31,17,2) AS wed_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#32,17,2) AS thu_sales#39, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#33,17,2) AS fri_sales#40, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#34,17,2) AS sat_sales#41] (17) Scan parquet default.date_dim -Output [2]: [d_week_seq#44, d_year#45] +Output [2]: [d_week_seq#42, d_year#43] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_week_seq)] ReadSchema: struct (18) ColumnarToRow [codegen id : 5] -Input [2]: [d_week_seq#44, d_year#45] +Input [2]: [d_week_seq#42, d_year#43] (19) Filter [codegen id : 5] -Input [2]: [d_week_seq#44, d_year#45] -Condition : ((isnotnull(d_year#45) AND (d_year#45 = 2001)) AND isnotnull(d_week_seq#44)) +Input [2]: [d_week_seq#42, d_year#43] +Condition : ((isnotnull(d_year#43) AND (d_year#43 = 2001)) AND isnotnull(d_week_seq#42)) (20) Project [codegen id : 5] -Output [1]: [d_week_seq#44] -Input [2]: [d_week_seq#44, d_year#45] +Output [1]: [d_week_seq#42] +Input [2]: [d_week_seq#42, d_year#43] (21) BroadcastExchange -Input [1]: [d_week_seq#44] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#46] +Input [1]: [d_week_seq#42] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (22) BroadcastHashJoin [codegen id : 12] Left keys [1]: [d_week_seq#10] -Right keys [1]: [d_week_seq#44] +Right keys [1]: [d_week_seq#42] Join condition: None (23) Project [codegen id : 12] -Output [8]: [d_week_seq#10 AS d_week_seq1#47, sun_sales#37 AS sun_sales1#48, mon_sales#38 AS mon_sales1#49, tue_sales#39 AS tue_sales1#50, wed_sales#40 AS wed_sales1#51, thu_sales#41 AS thu_sales1#52, fri_sales#42 AS fri_sales1#53, sat_sales#43 AS sat_sales1#54] -Input [9]: [d_week_seq#10, sun_sales#37, mon_sales#38, tue_sales#39, wed_sales#40, thu_sales#41, fri_sales#42, sat_sales#43, d_week_seq#44] +Output [8]: [d_week_seq#10 AS d_week_seq1#44, sun_sales#35 AS sun_sales1#45, mon_sales#36 AS mon_sales1#46, tue_sales#37 AS tue_sales1#47, wed_sales#38 AS wed_sales1#48, thu_sales#39 AS thu_sales1#49, fri_sales#40 AS fri_sales1#50, sat_sales#41 AS sat_sales1#51] +Input [9]: [d_week_seq#10, sun_sales#35, mon_sales#36, tue_sales#37, wed_sales#38, thu_sales#39, fri_sales#40, sat_sales#41, d_week_seq#42] (24) Scan parquet default.web_sales Output [2]: [ws_ext_sales_price#1, ws_sold_date_sk#2] @@ -200,11 +200,11 @@ Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] (33) Filter [codegen id : 8] Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] -Condition : ((isnotnull(d_date_sk#9) AND isnotnull(d_week_seq#10)) AND might_contain(Subquery scalar-subquery#55, [id=#56], xxhash64(d_week_seq#10, 42))) +Condition : ((isnotnull(d_date_sk#9) AND isnotnull(d_week_seq#10)) AND might_contain(Subquery scalar-subquery#52, [id=#53], xxhash64(d_week_seq#10, 42))) (34) BroadcastExchange Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#57] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (35) BroadcastHashJoin [codegen id : 9] Left keys [1]: [sold_date_sk#3] @@ -219,71 +219,71 @@ Input [5]: [sold_date_sk#3, sales_price#4, d_date_sk#9, d_week_seq#10, d_day_nam Input [3]: [sales_price#4, d_week_seq#10, d_day_name#11] Keys [1]: [d_week_seq#10] Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))] -Aggregate Attributes [7]: [sum#58, sum#59, sum#60, sum#61, sum#62, sum#63, sum#64] -Results [8]: [d_week_seq#10, sum#65, sum#66, sum#67, sum#68, sum#69, sum#70, sum#71] +Aggregate Attributes [7]: [sum#54, sum#55, sum#56, sum#57, sum#58, sum#59, sum#60] +Results [8]: [d_week_seq#10, sum#61, sum#62, sum#63, sum#64, sum#65, sum#66, sum#67] (38) Exchange -Input [8]: [d_week_seq#10, sum#65, sum#66, sum#67, sum#68, sum#69, sum#70, sum#71] -Arguments: hashpartitioning(d_week_seq#10, 5), ENSURE_REQUIREMENTS, [id=#72] +Input [8]: [d_week_seq#10, sum#61, sum#62, sum#63, sum#64, sum#65, sum#66, sum#67] +Arguments: hashpartitioning(d_week_seq#10, 5), ENSURE_REQUIREMENTS, [plan_id=5] (39) HashAggregate [codegen id : 11] -Input [8]: [d_week_seq#10, sum#65, sum#66, sum#67, sum#68, sum#69, sum#70, sum#71] +Input [8]: [d_week_seq#10, sum#61, sum#62, sum#63, sum#64, sum#65, sum#66, sum#67] Keys [1]: [d_week_seq#10] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))] -Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#35, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#36] -Results [8]: [d_week_seq#10, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#30,17,2) AS sun_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#31,17,2) AS mon_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#32,17,2) AS tue_sales#39, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#33,17,2) AS wed_sales#40, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#34,17,2) AS thu_sales#41, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#35,17,2) AS fri_sales#42, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#36,17,2) AS sat_sales#43] +Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#34] +Results [8]: [d_week_seq#10, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#28,17,2) AS sun_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#29,17,2) AS mon_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#30,17,2) AS tue_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#31,17,2) AS wed_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#32,17,2) AS thu_sales#39, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#33,17,2) AS fri_sales#40, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#34,17,2) AS sat_sales#41] (40) Scan parquet default.date_dim -Output [2]: [d_week_seq#73, d_year#74] +Output [2]: [d_week_seq#68, d_year#69] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_week_seq)] ReadSchema: struct (41) ColumnarToRow [codegen id : 10] -Input [2]: [d_week_seq#73, d_year#74] +Input [2]: [d_week_seq#68, d_year#69] (42) Filter [codegen id : 10] -Input [2]: [d_week_seq#73, d_year#74] -Condition : ((isnotnull(d_year#74) AND (d_year#74 = 2002)) AND isnotnull(d_week_seq#73)) +Input [2]: [d_week_seq#68, d_year#69] +Condition : ((isnotnull(d_year#69) AND (d_year#69 = 2002)) AND isnotnull(d_week_seq#68)) (43) Project [codegen id : 10] -Output [1]: [d_week_seq#73] -Input [2]: [d_week_seq#73, d_year#74] +Output [1]: [d_week_seq#68] +Input [2]: [d_week_seq#68, d_year#69] (44) BroadcastExchange -Input [1]: [d_week_seq#73] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#75] +Input [1]: [d_week_seq#68] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] (45) BroadcastHashJoin [codegen id : 11] Left keys [1]: [d_week_seq#10] -Right keys [1]: [d_week_seq#73] +Right keys [1]: [d_week_seq#68] Join condition: None (46) Project [codegen id : 11] -Output [8]: [d_week_seq#10 AS d_week_seq2#76, sun_sales#37 AS sun_sales2#77, mon_sales#38 AS mon_sales2#78, tue_sales#39 AS tue_sales2#79, wed_sales#40 AS wed_sales2#80, thu_sales#41 AS thu_sales2#81, fri_sales#42 AS fri_sales2#82, sat_sales#43 AS sat_sales2#83] -Input [9]: [d_week_seq#10, sun_sales#37, mon_sales#38, tue_sales#39, wed_sales#40, thu_sales#41, fri_sales#42, sat_sales#43, d_week_seq#73] +Output [8]: [d_week_seq#10 AS d_week_seq2#70, sun_sales#35 AS sun_sales2#71, mon_sales#36 AS mon_sales2#72, tue_sales#37 AS tue_sales2#73, wed_sales#38 AS wed_sales2#74, thu_sales#39 AS thu_sales2#75, fri_sales#40 AS fri_sales2#76, sat_sales#41 AS sat_sales2#77] +Input [9]: [d_week_seq#10, sun_sales#35, mon_sales#36, tue_sales#37, wed_sales#38, thu_sales#39, fri_sales#40, sat_sales#41, d_week_seq#68] (47) BroadcastExchange -Input [8]: [d_week_seq2#76, sun_sales2#77, mon_sales2#78, tue_sales2#79, wed_sales2#80, thu_sales2#81, fri_sales2#82, sat_sales2#83] -Arguments: HashedRelationBroadcastMode(List(cast((input[0, int, true] - 53) as bigint)),false), [id=#84] +Input [8]: [d_week_seq2#70, sun_sales2#71, mon_sales2#72, tue_sales2#73, wed_sales2#74, thu_sales2#75, fri_sales2#76, sat_sales2#77] +Arguments: HashedRelationBroadcastMode(List(cast((input[0, int, true] - 53) as bigint)),false), [plan_id=7] (48) BroadcastHashJoin [codegen id : 12] -Left keys [1]: [d_week_seq1#47] -Right keys [1]: [(d_week_seq2#76 - 53)] +Left keys [1]: [d_week_seq1#44] +Right keys [1]: [(d_week_seq2#70 - 53)] Join condition: None (49) Project [codegen id : 12] -Output [8]: [d_week_seq1#47, round(CheckOverflow((promote_precision(sun_sales1#48) / promote_precision(sun_sales2#77)), DecimalType(37,20)), 2) AS round((sun_sales1 / sun_sales2), 2)#85, round(CheckOverflow((promote_precision(mon_sales1#49) / promote_precision(mon_sales2#78)), DecimalType(37,20)), 2) AS round((mon_sales1 / mon_sales2), 2)#86, round(CheckOverflow((promote_precision(tue_sales1#50) / promote_precision(tue_sales2#79)), DecimalType(37,20)), 2) AS round((tue_sales1 / tue_sales2), 2)#87, round(CheckOverflow((promote_precision(wed_sales1#51) / promote_precision(wed_sales2#80)), DecimalType(37,20)), 2) AS round((wed_sales1 / wed_sales2), 2)#88, round(CheckOverflow((promote_precision(thu_sales1#52) / promote_precision(thu_sales2#81)), DecimalType(37,20)), 2) AS round((thu_sales1 / thu_sales2), 2)#89, round(CheckOverflow((promote_precision(fri_sales1#53) / promote_precision(fri_sales2#82)), DecimalType(37,20)), 2) AS round((fri_sales1 / fri_sales2), 2)#90, round(CheckOverflow((promote_precision(sat_sales1#54) / promote_precision(sat_sales2#83)), DecimalType(37,20)), 2) AS round((sat_sales1 / sat_sales2), 2)#91] -Input [16]: [d_week_seq1#47, sun_sales1#48, mon_sales1#49, tue_sales1#50, wed_sales1#51, thu_sales1#52, fri_sales1#53, sat_sales1#54, d_week_seq2#76, sun_sales2#77, mon_sales2#78, tue_sales2#79, wed_sales2#80, thu_sales2#81, fri_sales2#82, sat_sales2#83] +Output [8]: [d_week_seq1#44, round(CheckOverflow((promote_precision(sun_sales1#45) / promote_precision(sun_sales2#71)), DecimalType(37,20)), 2) AS round((sun_sales1 / sun_sales2), 2)#78, round(CheckOverflow((promote_precision(mon_sales1#46) / promote_precision(mon_sales2#72)), DecimalType(37,20)), 2) AS round((mon_sales1 / mon_sales2), 2)#79, round(CheckOverflow((promote_precision(tue_sales1#47) / promote_precision(tue_sales2#73)), DecimalType(37,20)), 2) AS round((tue_sales1 / tue_sales2), 2)#80, round(CheckOverflow((promote_precision(wed_sales1#48) / promote_precision(wed_sales2#74)), DecimalType(37,20)), 2) AS round((wed_sales1 / wed_sales2), 2)#81, round(CheckOverflow((promote_precision(thu_sales1#49) / promote_precision(thu_sales2#75)), DecimalType(37,20)), 2) AS round((thu_sales1 / thu_sales2), 2)#82, round(CheckOverflow((promote_precision(fri_sales1#50) / promote_precision(fri_sales2#76)), DecimalType(37,20)), 2) AS round((fri_sales1 / fri_sales2), 2)#83, round(CheckOverflow((promote_precision(sat_sales1#51) / promote_precision(sat_sales2#77)), DecimalType(37,20)), 2) AS round((sat_sales1 / sat_sales2), 2)#84] +Input [16]: [d_week_seq1#44, sun_sales1#45, mon_sales1#46, tue_sales1#47, wed_sales1#48, thu_sales1#49, fri_sales1#50, sat_sales1#51, d_week_seq2#70, sun_sales2#71, mon_sales2#72, tue_sales2#73, wed_sales2#74, thu_sales2#75, fri_sales2#76, sat_sales2#77] (50) Exchange -Input [8]: [d_week_seq1#47, round((sun_sales1 / sun_sales2), 2)#85, round((mon_sales1 / mon_sales2), 2)#86, round((tue_sales1 / tue_sales2), 2)#87, round((wed_sales1 / wed_sales2), 2)#88, round((thu_sales1 / thu_sales2), 2)#89, round((fri_sales1 / fri_sales2), 2)#90, round((sat_sales1 / sat_sales2), 2)#91] -Arguments: rangepartitioning(d_week_seq1#47 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#92] +Input [8]: [d_week_seq1#44, round((sun_sales1 / sun_sales2), 2)#78, round((mon_sales1 / mon_sales2), 2)#79, round((tue_sales1 / tue_sales2), 2)#80, round((wed_sales1 / wed_sales2), 2)#81, round((thu_sales1 / thu_sales2), 2)#82, round((fri_sales1 / fri_sales2), 2)#83, round((sat_sales1 / sat_sales2), 2)#84] +Arguments: rangepartitioning(d_week_seq1#44 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=8] (51) Sort [codegen id : 13] -Input [8]: [d_week_seq1#47, round((sun_sales1 / sun_sales2), 2)#85, round((mon_sales1 / mon_sales2), 2)#86, round((tue_sales1 / tue_sales2), 2)#87, round((wed_sales1 / wed_sales2), 2)#88, round((thu_sales1 / thu_sales2), 2)#89, round((fri_sales1 / fri_sales2), 2)#90, round((sat_sales1 / sat_sales2), 2)#91] -Arguments: [d_week_seq1#47 ASC NULLS FIRST], true, 0 +Input [8]: [d_week_seq1#44, round((sun_sales1 / sun_sales2), 2)#78, round((mon_sales1 / mon_sales2), 2)#79, round((tue_sales1 / tue_sales2), 2)#80, round((wed_sales1 / wed_sales2), 2)#81, round((thu_sales1 / thu_sales2), 2)#82, round((fri_sales1 / fri_sales2), 2)#83, round((sat_sales1 / sat_sales2), 2)#84] +Arguments: [d_week_seq1#44 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -298,42 +298,42 @@ ObjectHashAggregate (58) (52) Scan parquet default.date_dim -Output [2]: [d_week_seq#44, d_year#45] +Output [2]: [d_week_seq#42, d_year#43] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_week_seq)] ReadSchema: struct (53) ColumnarToRow [codegen id : 1] -Input [2]: [d_week_seq#44, d_year#45] +Input [2]: [d_week_seq#42, d_year#43] (54) Filter [codegen id : 1] -Input [2]: [d_week_seq#44, d_year#45] -Condition : ((isnotnull(d_year#45) AND (d_year#45 = 2001)) AND isnotnull(d_week_seq#44)) +Input [2]: [d_week_seq#42, d_year#43] +Condition : ((isnotnull(d_year#43) AND (d_year#43 = 2001)) AND isnotnull(d_week_seq#42)) (55) Project [codegen id : 1] -Output [1]: [d_week_seq#44] -Input [2]: [d_week_seq#44, d_year#45] +Output [1]: [d_week_seq#42] +Input [2]: [d_week_seq#42, d_year#43] (56) ObjectHashAggregate -Input [1]: [d_week_seq#44] +Input [1]: [d_week_seq#42] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#44, 42), 362, 2896, 0, 0)] -Aggregate Attributes [1]: [buf#93] -Results [1]: [buf#94] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#42, 42), 362, 2896, 0, 0)] +Aggregate Attributes [1]: [buf#85] +Results [1]: [buf#86] (57) Exchange -Input [1]: [buf#94] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#95] +Input [1]: [buf#86] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=9] (58) ObjectHashAggregate -Input [1]: [buf#94] +Input [1]: [buf#86] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#44, 42), 362, 2896, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#44, 42), 362, 2896, 0, 0)#96] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#44, 42), 362, 2896, 0, 0)#96 AS bloomFilter#97] +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#42, 42), 362, 2896, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#42, 42), 362, 2896, 0, 0)#87] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#42, 42), 362, 2896, 0, 0)#87 AS bloomFilter#88] -Subquery:2 Hosting operator id = 33 Hosting Expression = Subquery scalar-subquery#55, [id=#56] +Subquery:2 Hosting operator id = 33 Hosting Expression = Subquery scalar-subquery#52, [id=#53] ObjectHashAggregate (65) +- Exchange (64) +- ObjectHashAggregate (63) @@ -344,39 +344,39 @@ ObjectHashAggregate (65) (59) Scan parquet default.date_dim -Output [2]: [d_week_seq#73, d_year#74] +Output [2]: [d_week_seq#68, d_year#69] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_week_seq)] ReadSchema: struct (60) ColumnarToRow [codegen id : 1] -Input [2]: [d_week_seq#73, d_year#74] +Input [2]: [d_week_seq#68, d_year#69] (61) Filter [codegen id : 1] -Input [2]: [d_week_seq#73, d_year#74] -Condition : ((isnotnull(d_year#74) AND (d_year#74 = 2002)) AND isnotnull(d_week_seq#73)) +Input [2]: [d_week_seq#68, d_year#69] +Condition : ((isnotnull(d_year#69) AND (d_year#69 = 2002)) AND isnotnull(d_week_seq#68)) (62) Project [codegen id : 1] -Output [1]: [d_week_seq#73] -Input [2]: [d_week_seq#73, d_year#74] +Output [1]: [d_week_seq#68] +Input [2]: [d_week_seq#68, d_year#69] (63) ObjectHashAggregate -Input [1]: [d_week_seq#73] +Input [1]: [d_week_seq#68] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#73, 42), 362, 2896, 0, 0)] -Aggregate Attributes [1]: [buf#98] -Results [1]: [buf#99] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#68, 42), 362, 2896, 0, 0)] +Aggregate Attributes [1]: [buf#89] +Results [1]: [buf#90] (64) Exchange -Input [1]: [buf#99] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#100] +Input [1]: [buf#90] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10] (65) ObjectHashAggregate -Input [1]: [buf#99] +Input [1]: [buf#90] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#73, 42), 362, 2896, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#73, 42), 362, 2896, 0, 0)#101] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#73, 42), 362, 2896, 0, 0)#101 AS bloomFilter#102] +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#68, 42), 362, 2896, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#68, 42), 362, 2896, 0, 0)#91] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#68, 42), 362, 2896, 0, 0)#91 AS bloomFilter#92] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q2/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q2/explain.txt index 8f188db553004..031dc924069e6 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q2/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q2/explain.txt @@ -84,7 +84,7 @@ Condition : (isnotnull(d_date_sk#9) AND isnotnull(d_week_seq#10)) (11) BroadcastExchange Input [3]: [d_date_sk#9, d_week_seq#10, d_day_name#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [sold_date_sk#3] @@ -99,110 +99,110 @@ Input [5]: [sold_date_sk#3, sales_price#4, d_date_sk#9, d_week_seq#10, d_day_nam Input [3]: [sales_price#4, d_week_seq#10, d_day_name#11] Keys [1]: [d_week_seq#10] Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))] -Aggregate Attributes [7]: [sum#13, sum#14, sum#15, sum#16, sum#17, sum#18, sum#19] -Results [8]: [d_week_seq#10, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26] +Aggregate Attributes [7]: [sum#12, sum#13, sum#14, sum#15, sum#16, sum#17, sum#18] +Results [8]: [d_week_seq#10, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25] (15) Exchange -Input [8]: [d_week_seq#10, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26] -Arguments: hashpartitioning(d_week_seq#10, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [8]: [d_week_seq#10, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25] +Arguments: hashpartitioning(d_week_seq#10, 5), ENSURE_REQUIREMENTS, [plan_id=2] (16) HashAggregate [codegen id : 12] -Input [8]: [d_week_seq#10, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26] +Input [8]: [d_week_seq#10, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25] Keys [1]: [d_week_seq#10] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))] -Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#34] -Results [8]: [d_week_seq#10, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#28,17,2) AS sun_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#29,17,2) AS mon_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#30,17,2) AS tue_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#31,17,2) AS wed_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#32,17,2) AS thu_sales#39, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#33,17,2) AS fri_sales#40, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#34,17,2) AS sat_sales#41] +Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#32] +Results [8]: [d_week_seq#10, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#26,17,2) AS sun_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#27,17,2) AS mon_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#28,17,2) AS tue_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#29,17,2) AS wed_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#30,17,2) AS thu_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#31,17,2) AS fri_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#32,17,2) AS sat_sales#39] (17) Scan parquet default.date_dim -Output [2]: [d_week_seq#42, d_year#43] +Output [2]: [d_week_seq#40, d_year#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_week_seq)] ReadSchema: struct (18) ColumnarToRow [codegen id : 5] -Input [2]: [d_week_seq#42, d_year#43] +Input [2]: [d_week_seq#40, d_year#41] (19) Filter [codegen id : 5] -Input [2]: [d_week_seq#42, d_year#43] -Condition : ((isnotnull(d_year#43) AND (d_year#43 = 2001)) AND isnotnull(d_week_seq#42)) +Input [2]: [d_week_seq#40, d_year#41] +Condition : ((isnotnull(d_year#41) AND (d_year#41 = 2001)) AND isnotnull(d_week_seq#40)) (20) Project [codegen id : 5] -Output [1]: [d_week_seq#42] -Input [2]: [d_week_seq#42, d_year#43] +Output [1]: [d_week_seq#40] +Input [2]: [d_week_seq#40, d_year#41] (21) BroadcastExchange -Input [1]: [d_week_seq#42] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#44] +Input [1]: [d_week_seq#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (22) BroadcastHashJoin [codegen id : 12] Left keys [1]: [d_week_seq#10] -Right keys [1]: [d_week_seq#42] +Right keys [1]: [d_week_seq#40] Join condition: None (23) Project [codegen id : 12] -Output [8]: [d_week_seq#10 AS d_week_seq1#45, sun_sales#35 AS sun_sales1#46, mon_sales#36 AS mon_sales1#47, tue_sales#37 AS tue_sales1#48, wed_sales#38 AS wed_sales1#49, thu_sales#39 AS thu_sales1#50, fri_sales#40 AS fri_sales1#51, sat_sales#41 AS sat_sales1#52] -Input [9]: [d_week_seq#10, sun_sales#35, mon_sales#36, tue_sales#37, wed_sales#38, thu_sales#39, fri_sales#40, sat_sales#41, d_week_seq#42] +Output [8]: [d_week_seq#10 AS d_week_seq1#42, sun_sales#33 AS sun_sales1#43, mon_sales#34 AS mon_sales1#44, tue_sales#35 AS tue_sales1#45, wed_sales#36 AS wed_sales1#46, thu_sales#37 AS thu_sales1#47, fri_sales#38 AS fri_sales1#48, sat_sales#39 AS sat_sales1#49] +Input [9]: [d_week_seq#10, sun_sales#33, mon_sales#34, tue_sales#35, wed_sales#36, thu_sales#37, fri_sales#38, sat_sales#39, d_week_seq#40] (24) ReusedExchange [Reuses operator id: 15] -Output [8]: [d_week_seq#10, sum#53, sum#54, sum#55, sum#56, sum#57, sum#58, sum#59] +Output [8]: [d_week_seq#10, sum#50, sum#51, sum#52, sum#53, sum#54, sum#55, sum#56] (25) HashAggregate [codegen id : 11] -Input [8]: [d_week_seq#10, sum#53, sum#54, sum#55, sum#56, sum#57, sum#58, sum#59] +Input [8]: [d_week_seq#10, sum#50, sum#51, sum#52, sum#53, sum#54, sum#55, sum#56] Keys [1]: [d_week_seq#10] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END)), sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))] -Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#34] -Results [8]: [d_week_seq#10, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#28,17,2) AS sun_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#29,17,2) AS mon_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#30,17,2) AS tue_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#31,17,2) AS wed_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#32,17,2) AS thu_sales#39, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#33,17,2) AS fri_sales#40, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#34,17,2) AS sat_sales#41] +Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#32] +Results [8]: [d_week_seq#10, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Sunday ) THEN sales_price#4 END))#26,17,2) AS sun_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Monday ) THEN sales_price#4 END))#27,17,2) AS mon_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Tuesday ) THEN sales_price#4 END))#28,17,2) AS tue_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Wednesday) THEN sales_price#4 END))#29,17,2) AS wed_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Thursday ) THEN sales_price#4 END))#30,17,2) AS thu_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Friday ) THEN sales_price#4 END))#31,17,2) AS fri_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#11 = Saturday ) THEN sales_price#4 END))#32,17,2) AS sat_sales#39] (26) Scan parquet default.date_dim -Output [2]: [d_week_seq#60, d_year#61] +Output [2]: [d_week_seq#57, d_year#58] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_week_seq)] ReadSchema: struct (27) ColumnarToRow [codegen id : 10] -Input [2]: [d_week_seq#60, d_year#61] +Input [2]: [d_week_seq#57, d_year#58] (28) Filter [codegen id : 10] -Input [2]: [d_week_seq#60, d_year#61] -Condition : ((isnotnull(d_year#61) AND (d_year#61 = 2002)) AND isnotnull(d_week_seq#60)) +Input [2]: [d_week_seq#57, d_year#58] +Condition : ((isnotnull(d_year#58) AND (d_year#58 = 2002)) AND isnotnull(d_week_seq#57)) (29) Project [codegen id : 10] -Output [1]: [d_week_seq#60] -Input [2]: [d_week_seq#60, d_year#61] +Output [1]: [d_week_seq#57] +Input [2]: [d_week_seq#57, d_year#58] (30) BroadcastExchange -Input [1]: [d_week_seq#60] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#62] +Input [1]: [d_week_seq#57] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (31) BroadcastHashJoin [codegen id : 11] Left keys [1]: [d_week_seq#10] -Right keys [1]: [d_week_seq#60] +Right keys [1]: [d_week_seq#57] Join condition: None (32) Project [codegen id : 11] -Output [8]: [d_week_seq#10 AS d_week_seq2#63, sun_sales#35 AS sun_sales2#64, mon_sales#36 AS mon_sales2#65, tue_sales#37 AS tue_sales2#66, wed_sales#38 AS wed_sales2#67, thu_sales#39 AS thu_sales2#68, fri_sales#40 AS fri_sales2#69, sat_sales#41 AS sat_sales2#70] -Input [9]: [d_week_seq#10, sun_sales#35, mon_sales#36, tue_sales#37, wed_sales#38, thu_sales#39, fri_sales#40, sat_sales#41, d_week_seq#60] +Output [8]: [d_week_seq#10 AS d_week_seq2#59, sun_sales#33 AS sun_sales2#60, mon_sales#34 AS mon_sales2#61, tue_sales#35 AS tue_sales2#62, wed_sales#36 AS wed_sales2#63, thu_sales#37 AS thu_sales2#64, fri_sales#38 AS fri_sales2#65, sat_sales#39 AS sat_sales2#66] +Input [9]: [d_week_seq#10, sun_sales#33, mon_sales#34, tue_sales#35, wed_sales#36, thu_sales#37, fri_sales#38, sat_sales#39, d_week_seq#57] (33) BroadcastExchange -Input [8]: [d_week_seq2#63, sun_sales2#64, mon_sales2#65, tue_sales2#66, wed_sales2#67, thu_sales2#68, fri_sales2#69, sat_sales2#70] -Arguments: HashedRelationBroadcastMode(List(cast((input[0, int, true] - 53) as bigint)),false), [id=#71] +Input [8]: [d_week_seq2#59, sun_sales2#60, mon_sales2#61, tue_sales2#62, wed_sales2#63, thu_sales2#64, fri_sales2#65, sat_sales2#66] +Arguments: HashedRelationBroadcastMode(List(cast((input[0, int, true] - 53) as bigint)),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 12] -Left keys [1]: [d_week_seq1#45] -Right keys [1]: [(d_week_seq2#63 - 53)] +Left keys [1]: [d_week_seq1#42] +Right keys [1]: [(d_week_seq2#59 - 53)] Join condition: None (35) Project [codegen id : 12] -Output [8]: [d_week_seq1#45, round(CheckOverflow((promote_precision(sun_sales1#46) / promote_precision(sun_sales2#64)), DecimalType(37,20)), 2) AS round((sun_sales1 / sun_sales2), 2)#72, round(CheckOverflow((promote_precision(mon_sales1#47) / promote_precision(mon_sales2#65)), DecimalType(37,20)), 2) AS round((mon_sales1 / mon_sales2), 2)#73, round(CheckOverflow((promote_precision(tue_sales1#48) / promote_precision(tue_sales2#66)), DecimalType(37,20)), 2) AS round((tue_sales1 / tue_sales2), 2)#74, round(CheckOverflow((promote_precision(wed_sales1#49) / promote_precision(wed_sales2#67)), DecimalType(37,20)), 2) AS round((wed_sales1 / wed_sales2), 2)#75, round(CheckOverflow((promote_precision(thu_sales1#50) / promote_precision(thu_sales2#68)), DecimalType(37,20)), 2) AS round((thu_sales1 / thu_sales2), 2)#76, round(CheckOverflow((promote_precision(fri_sales1#51) / promote_precision(fri_sales2#69)), DecimalType(37,20)), 2) AS round((fri_sales1 / fri_sales2), 2)#77, round(CheckOverflow((promote_precision(sat_sales1#52) / promote_precision(sat_sales2#70)), DecimalType(37,20)), 2) AS round((sat_sales1 / sat_sales2), 2)#78] -Input [16]: [d_week_seq1#45, sun_sales1#46, mon_sales1#47, tue_sales1#48, wed_sales1#49, thu_sales1#50, fri_sales1#51, sat_sales1#52, d_week_seq2#63, sun_sales2#64, mon_sales2#65, tue_sales2#66, wed_sales2#67, thu_sales2#68, fri_sales2#69, sat_sales2#70] +Output [8]: [d_week_seq1#42, round(CheckOverflow((promote_precision(sun_sales1#43) / promote_precision(sun_sales2#60)), DecimalType(37,20)), 2) AS round((sun_sales1 / sun_sales2), 2)#67, round(CheckOverflow((promote_precision(mon_sales1#44) / promote_precision(mon_sales2#61)), DecimalType(37,20)), 2) AS round((mon_sales1 / mon_sales2), 2)#68, round(CheckOverflow((promote_precision(tue_sales1#45) / promote_precision(tue_sales2#62)), DecimalType(37,20)), 2) AS round((tue_sales1 / tue_sales2), 2)#69, round(CheckOverflow((promote_precision(wed_sales1#46) / promote_precision(wed_sales2#63)), DecimalType(37,20)), 2) AS round((wed_sales1 / wed_sales2), 2)#70, round(CheckOverflow((promote_precision(thu_sales1#47) / promote_precision(thu_sales2#64)), DecimalType(37,20)), 2) AS round((thu_sales1 / thu_sales2), 2)#71, round(CheckOverflow((promote_precision(fri_sales1#48) / promote_precision(fri_sales2#65)), DecimalType(37,20)), 2) AS round((fri_sales1 / fri_sales2), 2)#72, round(CheckOverflow((promote_precision(sat_sales1#49) / promote_precision(sat_sales2#66)), DecimalType(37,20)), 2) AS round((sat_sales1 / sat_sales2), 2)#73] +Input [16]: [d_week_seq1#42, sun_sales1#43, mon_sales1#44, tue_sales1#45, wed_sales1#46, thu_sales1#47, fri_sales1#48, sat_sales1#49, d_week_seq2#59, sun_sales2#60, mon_sales2#61, tue_sales2#62, wed_sales2#63, thu_sales2#64, fri_sales2#65, sat_sales2#66] (36) Exchange -Input [8]: [d_week_seq1#45, round((sun_sales1 / sun_sales2), 2)#72, round((mon_sales1 / mon_sales2), 2)#73, round((tue_sales1 / tue_sales2), 2)#74, round((wed_sales1 / wed_sales2), 2)#75, round((thu_sales1 / thu_sales2), 2)#76, round((fri_sales1 / fri_sales2), 2)#77, round((sat_sales1 / sat_sales2), 2)#78] -Arguments: rangepartitioning(d_week_seq1#45 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#79] +Input [8]: [d_week_seq1#42, round((sun_sales1 / sun_sales2), 2)#67, round((mon_sales1 / mon_sales2), 2)#68, round((tue_sales1 / tue_sales2), 2)#69, round((wed_sales1 / wed_sales2), 2)#70, round((thu_sales1 / thu_sales2), 2)#71, round((fri_sales1 / fri_sales2), 2)#72, round((sat_sales1 / sat_sales2), 2)#73] +Arguments: rangepartitioning(d_week_seq1#42 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=6] (37) Sort [codegen id : 13] -Input [8]: [d_week_seq1#45, round((sun_sales1 / sun_sales2), 2)#72, round((mon_sales1 / mon_sales2), 2)#73, round((tue_sales1 / tue_sales2), 2)#74, round((wed_sales1 / wed_sales2), 2)#75, round((thu_sales1 / thu_sales2), 2)#76, round((fri_sales1 / fri_sales2), 2)#77, round((sat_sales1 / sat_sales2), 2)#78] -Arguments: [d_week_seq1#45 ASC NULLS FIRST], true, 0 +Input [8]: [d_week_seq1#42, round((sun_sales1 / sun_sales2), 2)#67, round((mon_sales1 / mon_sales2), 2)#68, round((tue_sales1 / tue_sales2), 2)#69, round((wed_sales1 / wed_sales2), 2)#70, round((thu_sales1 / thu_sales2), 2)#71, round((fri_sales1 / fri_sales2), 2)#72, round((sat_sales1 / sat_sales2), 2)#73] +Arguments: [d_week_seq1#42 ASC NULLS FIRST], true, 0 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q20.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q20.sf100/explain.txt index 09e4cd2a57054..99d27cdf9cb6f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q20.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q20.sf100/explain.txt @@ -41,92 +41,92 @@ Condition : isnotnull(cs_item_sk#1) (4) Exchange Input [3]: [cs_item_sk#1, cs_ext_sales_price#2, cs_sold_date_sk#3] -Arguments: hashpartitioning(cs_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#5] +Arguments: hashpartitioning(cs_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [3]: [cs_item_sk#1, cs_ext_sales_price#2, cs_sold_date_sk#3] Arguments: [cs_item_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.item -Output [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Output [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [In(i_category, [Books ,Home ,Sports ]), IsNotNull(i_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (8) Filter [codegen id : 3] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Condition : (i_category#11 IN (Sports ,Books ,Home ) AND isnotnull(i_item_sk#6)) +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Condition : (i_category#10 IN (Sports ,Books ,Home ) AND isnotnull(i_item_sk#5)) (9) Exchange -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Arguments: hashpartitioning(i_item_sk#6, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Arguments: hashpartitioning(i_item_sk#5, 5), ENSURE_REQUIREMENTS, [plan_id=2] (10) Sort [codegen id : 4] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Arguments: [i_item_sk#6 ASC NULLS FIRST], false, 0 +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Arguments: [i_item_sk#5 ASC NULLS FIRST], false, 0 (11) SortMergeJoin [codegen id : 6] Left keys [1]: [cs_item_sk#1] -Right keys [1]: [i_item_sk#6] +Right keys [1]: [i_item_sk#5] Join condition: None (12) Project [codegen id : 6] -Output [7]: [cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Input [9]: [cs_item_sk#1, cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Output [7]: [cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Input [9]: [cs_item_sk#1, cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (13) ReusedExchange [Reuses operator id: 28] -Output [1]: [d_date_sk#13] +Output [1]: [d_date_sk#11] (14) BroadcastHashJoin [codegen id : 6] Left keys [1]: [cs_sold_date_sk#3] -Right keys [1]: [d_date_sk#13] +Right keys [1]: [d_date_sk#11] Join condition: None (15) Project [codegen id : 6] -Output [6]: [cs_ext_sales_price#2, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Input [8]: [cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11, d_date_sk#13] +Output [6]: [cs_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Input [8]: [cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#11] (16) HashAggregate [codegen id : 6] -Input [6]: [cs_ext_sales_price#2, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Keys [5]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9] +Input [6]: [cs_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#14] -Results [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] +Aggregate Attributes [1]: [sum#12] +Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] (17) Exchange -Input [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] -Arguments: hashpartitioning(i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 7] -Input [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] -Keys [5]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#2))#17] -Results [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#17,17,2) AS itemrevenue#18, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#17,17,2) AS _w0#19, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#17,17,2) AS _w1#20, i_item_id#7] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#2))#14] +Results [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#14,17,2) AS itemrevenue#15, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#14,17,2) AS _w0#16, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#14,17,2) AS _w1#17, i_item_id#6] (19) Exchange -Input [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, i_item_id#7] -Arguments: hashpartitioning(i_class#10, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=4] (20) Sort [codegen id : 8] -Input [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, i_item_id#7] -Arguments: [i_class#10 ASC NULLS FIRST], false, 0 +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: [i_class#9 ASC NULLS FIRST], false, 0 (21) Window -Input [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, i_item_id#7] -Arguments: [sum(_w1#20) windowspecdefinition(i_class#10, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#22], [i_class#10] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: [sum(_w1#17) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#9] (22) Project [codegen id : 9] -Output [7]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#19) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#22)), DecimalType(38,17)) AS revenueratio#23, i_item_id#7] -Input [9]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, i_item_id#7, _we0#22] +Output [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#16) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#18)), DecimalType(38,17)) AS revenueratio#19, i_item_id#6] +Input [9]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6, _we0#18] (23) TakeOrderedAndProject -Input [7]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, revenueratio#23, i_item_id#7] -Arguments: 100, [i_category#11 ASC NULLS FIRST, i_class#10 ASC NULLS FIRST, i_item_id#7 ASC NULLS FIRST, i_item_desc#8 ASC NULLS FIRST, revenueratio#23 ASC NULLS FIRST], [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, revenueratio#23] +Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19, i_item_id#6] +Arguments: 100, [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] ===== Subqueries ===== @@ -139,25 +139,25 @@ BroadcastExchange (28) (24) Scan parquet default.date_dim -Output [2]: [d_date_sk#13, d_date#24] +Output [2]: [d_date_sk#11, d_date#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-22), LessThanOrEqual(d_date,1999-03-24), IsNotNull(d_date_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#13, d_date#24] +Input [2]: [d_date_sk#11, d_date#20] (26) Filter [codegen id : 1] -Input [2]: [d_date_sk#13, d_date#24] -Condition : (((isnotnull(d_date#24) AND (d_date#24 >= 1999-02-22)) AND (d_date#24 <= 1999-03-24)) AND isnotnull(d_date_sk#13)) +Input [2]: [d_date_sk#11, d_date#20] +Condition : (((isnotnull(d_date#20) AND (d_date#20 >= 1999-02-22)) AND (d_date#20 <= 1999-03-24)) AND isnotnull(d_date_sk#11)) (27) Project [codegen id : 1] -Output [1]: [d_date_sk#13] -Input [2]: [d_date_sk#13, d_date#24] +Output [1]: [d_date_sk#11] +Input [2]: [d_date_sk#11, d_date#20] (28) BroadcastExchange -Input [1]: [d_date_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [d_date_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q20/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q20/explain.txt index 8b9d47316f293..775fba161d8f6 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q20/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q20/explain.txt @@ -52,7 +52,7 @@ Condition : (i_category#10 IN (Sports (7) BroadcastExchange Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_item_sk#1] @@ -64,54 +64,54 @@ Output [7]: [cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_id#6, i_item_desc#7 Input [9]: [cs_item_sk#1, cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (10) ReusedExchange [Reuses operator id: 25] -Output [1]: [d_date_sk#12] +Output [1]: [d_date_sk#11] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_sold_date_sk#3] -Right keys [1]: [d_date_sk#12] +Right keys [1]: [d_date_sk#11] Join condition: None (12) Project [codegen id : 3] Output [6]: [cs_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] -Input [8]: [cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#12] +Input [8]: [cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#11] (13) HashAggregate [codegen id : 3] Input [6]: [cs_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#13] -Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] +Aggregate Attributes [1]: [sum#12] +Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] (14) Exchange -Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] -Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 4] -Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#2))#16] -Results [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#16,17,2) AS itemrevenue#17, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#16,17,2) AS _w0#18, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#16,17,2) AS _w1#19, i_item_id#6] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#2))#14] +Results [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#14,17,2) AS itemrevenue#15, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#14,17,2) AS _w0#16, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#14,17,2) AS _w1#17, i_item_id#6] (16) Exchange -Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6] -Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (17) Sort [codegen id : 5] -Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] Arguments: [i_class#9 ASC NULLS FIRST], false, 0 (18) Window -Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6] -Arguments: [sum(_w1#19) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#21], [i_class#9] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: [sum(_w1#17) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#9] (19) Project [codegen id : 6] -Output [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#18) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#21)), DecimalType(38,17)) AS revenueratio#22, i_item_id#6] -Input [9]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6, _we0#21] +Output [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#16) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#18)), DecimalType(38,17)) AS revenueratio#19, i_item_id#6] +Input [9]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6, _we0#18] (20) TakeOrderedAndProject -Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22, i_item_id#6] -Arguments: 100, [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#22 ASC NULLS FIRST], [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22] +Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19, i_item_id#6] +Arguments: 100, [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] ===== Subqueries ===== @@ -124,25 +124,25 @@ BroadcastExchange (25) (21) Scan parquet default.date_dim -Output [2]: [d_date_sk#12, d_date#23] +Output [2]: [d_date_sk#11, d_date#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-22), LessThanOrEqual(d_date,1999-03-24), IsNotNull(d_date_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#12, d_date#23] +Input [2]: [d_date_sk#11, d_date#20] (23) Filter [codegen id : 1] -Input [2]: [d_date_sk#12, d_date#23] -Condition : (((isnotnull(d_date#23) AND (d_date#23 >= 1999-02-22)) AND (d_date#23 <= 1999-03-24)) AND isnotnull(d_date_sk#12)) +Input [2]: [d_date_sk#11, d_date#20] +Condition : (((isnotnull(d_date#20) AND (d_date#20 >= 1999-02-22)) AND (d_date#20 <= 1999-03-24)) AND isnotnull(d_date_sk#11)) (24) Project [codegen id : 1] -Output [1]: [d_date_sk#12] -Input [2]: [d_date_sk#12, d_date#23] +Output [1]: [d_date_sk#11] +Input [2]: [d_date_sk#11, d_date#20] (25) BroadcastExchange -Input [1]: [d_date_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#24] +Input [1]: [d_date_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q21.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q21.sf100/explain.txt index 96e1bacaa55ae..abc5b2a95fa69 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q21.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q21.sf100/explain.txt @@ -60,7 +60,7 @@ Input [3]: [i_item_sk#6, i_item_id#7, i_current_price#8] (8) BroadcastExchange Input [2]: [i_item_sk#6, i_item_id#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_item_sk#1] @@ -72,69 +72,69 @@ Output [4]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_i Input [6]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, i_item_id#7] (11) ReusedExchange [Reuses operator id: 28] -Output [2]: [d_date_sk#10, d_date#11] +Output [2]: [d_date_sk#9, d_date#10] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_date_sk#4] -Right keys [1]: [d_date_sk#10] +Right keys [1]: [d_date_sk#9] Join condition: None (13) Project [codegen id : 4] -Output [4]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, i_item_id#7, d_date#11] -Input [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_id#7, d_date_sk#10, d_date#11] +Output [4]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, i_item_id#7, d_date#10] +Input [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_id#7, d_date_sk#9, d_date#10] (14) Scan parquet default.warehouse -Output [2]: [w_warehouse_sk#12, w_warehouse_name#13] +Output [2]: [w_warehouse_sk#11, w_warehouse_name#12] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [2]: [w_warehouse_sk#12, w_warehouse_name#13] +Input [2]: [w_warehouse_sk#11, w_warehouse_name#12] (16) Filter [codegen id : 3] -Input [2]: [w_warehouse_sk#12, w_warehouse_name#13] -Condition : isnotnull(w_warehouse_sk#12) +Input [2]: [w_warehouse_sk#11, w_warehouse_name#12] +Condition : isnotnull(w_warehouse_sk#11) (17) BroadcastExchange -Input [2]: [w_warehouse_sk#12, w_warehouse_name#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Input [2]: [w_warehouse_sk#11, w_warehouse_name#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_warehouse_sk#2] -Right keys [1]: [w_warehouse_sk#12] +Right keys [1]: [w_warehouse_sk#11] Join condition: None (19) Project [codegen id : 4] -Output [4]: [inv_quantity_on_hand#3, w_warehouse_name#13, i_item_id#7, d_date#11] -Input [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, i_item_id#7, d_date#11, w_warehouse_sk#12, w_warehouse_name#13] +Output [4]: [inv_quantity_on_hand#3, w_warehouse_name#12, i_item_id#7, d_date#10] +Input [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, i_item_id#7, d_date#10, w_warehouse_sk#11, w_warehouse_name#12] (20) HashAggregate [codegen id : 4] -Input [4]: [inv_quantity_on_hand#3, w_warehouse_name#13, i_item_id#7, d_date#11] -Keys [2]: [w_warehouse_name#13, i_item_id#7] -Functions [2]: [partial_sum(CASE WHEN (d_date#11 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END), partial_sum(CASE WHEN (d_date#11 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)] -Aggregate Attributes [2]: [sum#15, sum#16] -Results [4]: [w_warehouse_name#13, i_item_id#7, sum#17, sum#18] +Input [4]: [inv_quantity_on_hand#3, w_warehouse_name#12, i_item_id#7, d_date#10] +Keys [2]: [w_warehouse_name#12, i_item_id#7] +Functions [2]: [partial_sum(CASE WHEN (d_date#10 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END), partial_sum(CASE WHEN (d_date#10 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)] +Aggregate Attributes [2]: [sum#13, sum#14] +Results [4]: [w_warehouse_name#12, i_item_id#7, sum#15, sum#16] (21) Exchange -Input [4]: [w_warehouse_name#13, i_item_id#7, sum#17, sum#18] -Arguments: hashpartitioning(w_warehouse_name#13, i_item_id#7, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [4]: [w_warehouse_name#12, i_item_id#7, sum#15, sum#16] +Arguments: hashpartitioning(w_warehouse_name#12, i_item_id#7, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 5] -Input [4]: [w_warehouse_name#13, i_item_id#7, sum#17, sum#18] -Keys [2]: [w_warehouse_name#13, i_item_id#7] -Functions [2]: [sum(CASE WHEN (d_date#11 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END), sum(CASE WHEN (d_date#11 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)] -Aggregate Attributes [2]: [sum(CASE WHEN (d_date#11 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#20, sum(CASE WHEN (d_date#11 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#21] -Results [4]: [w_warehouse_name#13, i_item_id#7, sum(CASE WHEN (d_date#11 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#20 AS inv_before#22, sum(CASE WHEN (d_date#11 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#21 AS inv_after#23] +Input [4]: [w_warehouse_name#12, i_item_id#7, sum#15, sum#16] +Keys [2]: [w_warehouse_name#12, i_item_id#7] +Functions [2]: [sum(CASE WHEN (d_date#10 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END), sum(CASE WHEN (d_date#10 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)] +Aggregate Attributes [2]: [sum(CASE WHEN (d_date#10 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#17, sum(CASE WHEN (d_date#10 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#18] +Results [4]: [w_warehouse_name#12, i_item_id#7, sum(CASE WHEN (d_date#10 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#17 AS inv_before#19, sum(CASE WHEN (d_date#10 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#18 AS inv_after#20] (23) Filter [codegen id : 5] -Input [4]: [w_warehouse_name#13, i_item_id#7, inv_before#22, inv_after#23] -Condition : ((isnotnull(inv_before#22) AND isnotnull(inv_after#23)) AND (((inv_before#22 > 0) AND ((cast(inv_after#23 as double) / cast(inv_before#22 as double)) >= 0.666667)) AND ((cast(inv_after#23 as double) / cast(inv_before#22 as double)) <= 1.5))) +Input [4]: [w_warehouse_name#12, i_item_id#7, inv_before#19, inv_after#20] +Condition : ((isnotnull(inv_before#19) AND isnotnull(inv_after#20)) AND (((inv_before#19 > 0) AND ((cast(inv_after#20 as double) / cast(inv_before#19 as double)) >= 0.666667)) AND ((cast(inv_after#20 as double) / cast(inv_before#19 as double)) <= 1.5))) (24) TakeOrderedAndProject -Input [4]: [w_warehouse_name#13, i_item_id#7, inv_before#22, inv_after#23] -Arguments: 100, [w_warehouse_name#13 ASC NULLS FIRST, i_item_id#7 ASC NULLS FIRST], [w_warehouse_name#13, i_item_id#7, inv_before#22, inv_after#23] +Input [4]: [w_warehouse_name#12, i_item_id#7, inv_before#19, inv_after#20] +Arguments: 100, [w_warehouse_name#12 ASC NULLS FIRST, i_item_id#7 ASC NULLS FIRST], [w_warehouse_name#12, i_item_id#7, inv_before#19, inv_after#20] ===== Subqueries ===== @@ -146,21 +146,21 @@ BroadcastExchange (28) (25) Scan parquet default.date_dim -Output [2]: [d_date_sk#10, d_date#11] +Output [2]: [d_date_sk#9, d_date#10] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-02-10), LessThanOrEqual(d_date,2000-04-10), IsNotNull(d_date_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#10, d_date#11] +Input [2]: [d_date_sk#9, d_date#10] (27) Filter [codegen id : 1] -Input [2]: [d_date_sk#10, d_date#11] -Condition : (((isnotnull(d_date#11) AND (d_date#11 >= 2000-02-10)) AND (d_date#11 <= 2000-04-10)) AND isnotnull(d_date_sk#10)) +Input [2]: [d_date_sk#9, d_date#10] +Condition : (((isnotnull(d_date#10) AND (d_date#10 >= 2000-02-10)) AND (d_date#10 <= 2000-04-10)) AND isnotnull(d_date_sk#9)) (28) BroadcastExchange -Input [2]: [d_date_sk#10, d_date#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#24] +Input [2]: [d_date_sk#9, d_date#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q21/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q21/explain.txt index 01bba5ee5f966..491d823d17a8a 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q21/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q21/explain.txt @@ -56,7 +56,7 @@ Condition : isnotnull(w_warehouse_sk#6) (7) BroadcastExchange Input [2]: [w_warehouse_sk#6, w_warehouse_name#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_warehouse_sk#2] @@ -68,73 +68,73 @@ Output [4]: [inv_item_sk#1, inv_quantity_on_hand#3, inv_date_sk#4, w_warehouse_n Input [6]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, w_warehouse_sk#6, w_warehouse_name#7] (10) Scan parquet default.item -Output [3]: [i_item_sk#9, i_item_id#10, i_current_price#11] +Output [3]: [i_item_sk#8, i_item_id#9, i_current_price#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThanOrEqual(i_current_price,0.99), LessThanOrEqual(i_current_price,1.49), IsNotNull(i_item_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [3]: [i_item_sk#9, i_item_id#10, i_current_price#11] +Input [3]: [i_item_sk#8, i_item_id#9, i_current_price#10] (12) Filter [codegen id : 2] -Input [3]: [i_item_sk#9, i_item_id#10, i_current_price#11] -Condition : (((isnotnull(i_current_price#11) AND (i_current_price#11 >= 0.99)) AND (i_current_price#11 <= 1.49)) AND isnotnull(i_item_sk#9)) +Input [3]: [i_item_sk#8, i_item_id#9, i_current_price#10] +Condition : (((isnotnull(i_current_price#10) AND (i_current_price#10 >= 0.99)) AND (i_current_price#10 <= 1.49)) AND isnotnull(i_item_sk#8)) (13) Project [codegen id : 2] -Output [2]: [i_item_sk#9, i_item_id#10] -Input [3]: [i_item_sk#9, i_item_id#10, i_current_price#11] +Output [2]: [i_item_sk#8, i_item_id#9] +Input [3]: [i_item_sk#8, i_item_id#9, i_current_price#10] (14) BroadcastExchange -Input [2]: [i_item_sk#9, i_item_id#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Input [2]: [i_item_sk#8, i_item_id#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_item_sk#1] -Right keys [1]: [i_item_sk#9] +Right keys [1]: [i_item_sk#8] Join condition: None (16) Project [codegen id : 4] -Output [4]: [inv_quantity_on_hand#3, inv_date_sk#4, w_warehouse_name#7, i_item_id#10] -Input [6]: [inv_item_sk#1, inv_quantity_on_hand#3, inv_date_sk#4, w_warehouse_name#7, i_item_sk#9, i_item_id#10] +Output [4]: [inv_quantity_on_hand#3, inv_date_sk#4, w_warehouse_name#7, i_item_id#9] +Input [6]: [inv_item_sk#1, inv_quantity_on_hand#3, inv_date_sk#4, w_warehouse_name#7, i_item_sk#8, i_item_id#9] (17) ReusedExchange [Reuses operator id: 28] -Output [2]: [d_date_sk#13, d_date#14] +Output [2]: [d_date_sk#11, d_date#12] (18) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_date_sk#4] -Right keys [1]: [d_date_sk#13] +Right keys [1]: [d_date_sk#11] Join condition: None (19) Project [codegen id : 4] -Output [4]: [inv_quantity_on_hand#3, w_warehouse_name#7, i_item_id#10, d_date#14] -Input [6]: [inv_quantity_on_hand#3, inv_date_sk#4, w_warehouse_name#7, i_item_id#10, d_date_sk#13, d_date#14] +Output [4]: [inv_quantity_on_hand#3, w_warehouse_name#7, i_item_id#9, d_date#12] +Input [6]: [inv_quantity_on_hand#3, inv_date_sk#4, w_warehouse_name#7, i_item_id#9, d_date_sk#11, d_date#12] (20) HashAggregate [codegen id : 4] -Input [4]: [inv_quantity_on_hand#3, w_warehouse_name#7, i_item_id#10, d_date#14] -Keys [2]: [w_warehouse_name#7, i_item_id#10] -Functions [2]: [partial_sum(CASE WHEN (d_date#14 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END), partial_sum(CASE WHEN (d_date#14 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)] -Aggregate Attributes [2]: [sum#15, sum#16] -Results [4]: [w_warehouse_name#7, i_item_id#10, sum#17, sum#18] +Input [4]: [inv_quantity_on_hand#3, w_warehouse_name#7, i_item_id#9, d_date#12] +Keys [2]: [w_warehouse_name#7, i_item_id#9] +Functions [2]: [partial_sum(CASE WHEN (d_date#12 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END), partial_sum(CASE WHEN (d_date#12 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)] +Aggregate Attributes [2]: [sum#13, sum#14] +Results [4]: [w_warehouse_name#7, i_item_id#9, sum#15, sum#16] (21) Exchange -Input [4]: [w_warehouse_name#7, i_item_id#10, sum#17, sum#18] -Arguments: hashpartitioning(w_warehouse_name#7, i_item_id#10, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [4]: [w_warehouse_name#7, i_item_id#9, sum#15, sum#16] +Arguments: hashpartitioning(w_warehouse_name#7, i_item_id#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 5] -Input [4]: [w_warehouse_name#7, i_item_id#10, sum#17, sum#18] -Keys [2]: [w_warehouse_name#7, i_item_id#10] -Functions [2]: [sum(CASE WHEN (d_date#14 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END), sum(CASE WHEN (d_date#14 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)] -Aggregate Attributes [2]: [sum(CASE WHEN (d_date#14 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#20, sum(CASE WHEN (d_date#14 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#21] -Results [4]: [w_warehouse_name#7, i_item_id#10, sum(CASE WHEN (d_date#14 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#20 AS inv_before#22, sum(CASE WHEN (d_date#14 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#21 AS inv_after#23] +Input [4]: [w_warehouse_name#7, i_item_id#9, sum#15, sum#16] +Keys [2]: [w_warehouse_name#7, i_item_id#9] +Functions [2]: [sum(CASE WHEN (d_date#12 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END), sum(CASE WHEN (d_date#12 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)] +Aggregate Attributes [2]: [sum(CASE WHEN (d_date#12 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#17, sum(CASE WHEN (d_date#12 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#18] +Results [4]: [w_warehouse_name#7, i_item_id#9, sum(CASE WHEN (d_date#12 < 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#17 AS inv_before#19, sum(CASE WHEN (d_date#12 >= 2000-03-11) THEN inv_quantity_on_hand#3 ELSE 0 END)#18 AS inv_after#20] (23) Filter [codegen id : 5] -Input [4]: [w_warehouse_name#7, i_item_id#10, inv_before#22, inv_after#23] -Condition : ((isnotnull(inv_before#22) AND isnotnull(inv_after#23)) AND (((inv_before#22 > 0) AND ((cast(inv_after#23 as double) / cast(inv_before#22 as double)) >= 0.666667)) AND ((cast(inv_after#23 as double) / cast(inv_before#22 as double)) <= 1.5))) +Input [4]: [w_warehouse_name#7, i_item_id#9, inv_before#19, inv_after#20] +Condition : ((isnotnull(inv_before#19) AND isnotnull(inv_after#20)) AND (((inv_before#19 > 0) AND ((cast(inv_after#20 as double) / cast(inv_before#19 as double)) >= 0.666667)) AND ((cast(inv_after#20 as double) / cast(inv_before#19 as double)) <= 1.5))) (24) TakeOrderedAndProject -Input [4]: [w_warehouse_name#7, i_item_id#10, inv_before#22, inv_after#23] -Arguments: 100, [w_warehouse_name#7 ASC NULLS FIRST, i_item_id#10 ASC NULLS FIRST], [w_warehouse_name#7, i_item_id#10, inv_before#22, inv_after#23] +Input [4]: [w_warehouse_name#7, i_item_id#9, inv_before#19, inv_after#20] +Arguments: 100, [w_warehouse_name#7 ASC NULLS FIRST, i_item_id#9 ASC NULLS FIRST], [w_warehouse_name#7, i_item_id#9, inv_before#19, inv_after#20] ===== Subqueries ===== @@ -146,21 +146,21 @@ BroadcastExchange (28) (25) Scan parquet default.date_dim -Output [2]: [d_date_sk#13, d_date#14] +Output [2]: [d_date_sk#11, d_date#12] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-02-10), LessThanOrEqual(d_date,2000-04-10), IsNotNull(d_date_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#13, d_date#14] +Input [2]: [d_date_sk#11, d_date#12] (27) Filter [codegen id : 1] -Input [2]: [d_date_sk#13, d_date#14] -Condition : (((isnotnull(d_date#14) AND (d_date#14 >= 2000-02-10)) AND (d_date#14 <= 2000-04-10)) AND isnotnull(d_date_sk#13)) +Input [2]: [d_date_sk#11, d_date#12] +Condition : (((isnotnull(d_date#12) AND (d_date#12 >= 2000-02-10)) AND (d_date#12 <= 2000-04-10)) AND isnotnull(d_date_sk#11)) (28) BroadcastExchange -Input [2]: [d_date_sk#13, d_date#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#24] +Input [2]: [d_date_sk#11, d_date#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q22.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q22.sf100/explain.txt index 4258a9c1a71c1..e8f1913db5c5d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q22.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q22.sf100/explain.txt @@ -58,7 +58,7 @@ Condition : isnotnull(w_warehouse_sk#6) (7) BroadcastExchange Input [1]: [w_warehouse_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [inv_warehouse_sk#2] @@ -70,81 +70,81 @@ Output [3]: [inv_item_sk#1, inv_quantity_on_hand#3, inv_date_sk#4] Input [5]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, w_warehouse_sk#6] (10) ReusedExchange [Reuses operator id: 31] -Output [1]: [d_date_sk#8] +Output [1]: [d_date_sk#7] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [inv_date_sk#4] -Right keys [1]: [d_date_sk#8] +Right keys [1]: [d_date_sk#7] Join condition: None (12) Project [codegen id : 3] Output [2]: [inv_item_sk#1, inv_quantity_on_hand#3] -Input [4]: [inv_item_sk#1, inv_quantity_on_hand#3, inv_date_sk#4, d_date_sk#8] +Input [4]: [inv_item_sk#1, inv_quantity_on_hand#3, inv_date_sk#4, d_date_sk#7] (13) Exchange Input [2]: [inv_item_sk#1, inv_quantity_on_hand#3] -Arguments: hashpartitioning(inv_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(inv_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) Sort [codegen id : 4] Input [2]: [inv_item_sk#1, inv_quantity_on_hand#3] Arguments: [inv_item_sk#1 ASC NULLS FIRST], false, 0 (15) Scan parquet default.item -Output [5]: [i_item_sk#10, i_brand#11, i_class#12, i_category#13, i_product_name#14] +Output [5]: [i_item_sk#8, i_brand#9, i_class#10, i_category#11, i_product_name#12] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [5]: [i_item_sk#10, i_brand#11, i_class#12, i_category#13, i_product_name#14] +Input [5]: [i_item_sk#8, i_brand#9, i_class#10, i_category#11, i_product_name#12] (17) Filter [codegen id : 5] -Input [5]: [i_item_sk#10, i_brand#11, i_class#12, i_category#13, i_product_name#14] -Condition : isnotnull(i_item_sk#10) +Input [5]: [i_item_sk#8, i_brand#9, i_class#10, i_category#11, i_product_name#12] +Condition : isnotnull(i_item_sk#8) (18) Exchange -Input [5]: [i_item_sk#10, i_brand#11, i_class#12, i_category#13, i_product_name#14] -Arguments: hashpartitioning(i_item_sk#10, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [5]: [i_item_sk#8, i_brand#9, i_class#10, i_category#11, i_product_name#12] +Arguments: hashpartitioning(i_item_sk#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 6] -Input [5]: [i_item_sk#10, i_brand#11, i_class#12, i_category#13, i_product_name#14] -Arguments: [i_item_sk#10 ASC NULLS FIRST], false, 0 +Input [5]: [i_item_sk#8, i_brand#9, i_class#10, i_category#11, i_product_name#12] +Arguments: [i_item_sk#8 ASC NULLS FIRST], false, 0 (20) SortMergeJoin [codegen id : 7] Left keys [1]: [inv_item_sk#1] -Right keys [1]: [i_item_sk#10] +Right keys [1]: [i_item_sk#8] Join condition: None (21) Project [codegen id : 7] -Output [5]: [inv_quantity_on_hand#3, i_product_name#14, i_brand#11, i_class#12, i_category#13] -Input [7]: [inv_item_sk#1, inv_quantity_on_hand#3, i_item_sk#10, i_brand#11, i_class#12, i_category#13, i_product_name#14] +Output [5]: [inv_quantity_on_hand#3, i_product_name#12, i_brand#9, i_class#10, i_category#11] +Input [7]: [inv_item_sk#1, inv_quantity_on_hand#3, i_item_sk#8, i_brand#9, i_class#10, i_category#11, i_product_name#12] (22) Expand [codegen id : 7] -Input [5]: [inv_quantity_on_hand#3, i_product_name#14, i_brand#11, i_class#12, i_category#13] -Arguments: [[inv_quantity_on_hand#3, i_product_name#14, i_brand#11, i_class#12, i_category#13, 0], [inv_quantity_on_hand#3, i_product_name#14, i_brand#11, i_class#12, null, 1], [inv_quantity_on_hand#3, i_product_name#14, i_brand#11, null, null, 3], [inv_quantity_on_hand#3, i_product_name#14, null, null, null, 7], [inv_quantity_on_hand#3, null, null, null, null, 15]], [inv_quantity_on_hand#3, i_product_name#16, i_brand#17, i_class#18, i_category#19, spark_grouping_id#20] +Input [5]: [inv_quantity_on_hand#3, i_product_name#12, i_brand#9, i_class#10, i_category#11] +Arguments: [[inv_quantity_on_hand#3, i_product_name#12, i_brand#9, i_class#10, i_category#11, 0], [inv_quantity_on_hand#3, i_product_name#12, i_brand#9, i_class#10, null, 1], [inv_quantity_on_hand#3, i_product_name#12, i_brand#9, null, null, 3], [inv_quantity_on_hand#3, i_product_name#12, null, null, null, 7], [inv_quantity_on_hand#3, null, null, null, null, 15]], [inv_quantity_on_hand#3, i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17] (23) HashAggregate [codegen id : 7] -Input [6]: [inv_quantity_on_hand#3, i_product_name#16, i_brand#17, i_class#18, i_category#19, spark_grouping_id#20] -Keys [5]: [i_product_name#16, i_brand#17, i_class#18, i_category#19, spark_grouping_id#20] +Input [6]: [inv_quantity_on_hand#3, i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17] +Keys [5]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17] Functions [1]: [partial_avg(inv_quantity_on_hand#3)] -Aggregate Attributes [2]: [sum#21, count#22] -Results [7]: [i_product_name#16, i_brand#17, i_class#18, i_category#19, spark_grouping_id#20, sum#23, count#24] +Aggregate Attributes [2]: [sum#18, count#19] +Results [7]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17, sum#20, count#21] (24) Exchange -Input [7]: [i_product_name#16, i_brand#17, i_class#18, i_category#19, spark_grouping_id#20, sum#23, count#24] -Arguments: hashpartitioning(i_product_name#16, i_brand#17, i_class#18, i_category#19, spark_grouping_id#20, 5), ENSURE_REQUIREMENTS, [id=#25] +Input [7]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17, sum#20, count#21] +Arguments: hashpartitioning(i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17, 5), ENSURE_REQUIREMENTS, [plan_id=4] (25) HashAggregate [codegen id : 8] -Input [7]: [i_product_name#16, i_brand#17, i_class#18, i_category#19, spark_grouping_id#20, sum#23, count#24] -Keys [5]: [i_product_name#16, i_brand#17, i_class#18, i_category#19, spark_grouping_id#20] +Input [7]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17, sum#20, count#21] +Keys [5]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17] Functions [1]: [avg(inv_quantity_on_hand#3)] -Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#26] -Results [5]: [i_product_name#16, i_brand#17, i_class#18, i_category#19, avg(inv_quantity_on_hand#3)#26 AS qoh#27] +Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#22] +Results [5]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, avg(inv_quantity_on_hand#3)#22 AS qoh#23] (26) TakeOrderedAndProject -Input [5]: [i_product_name#16, i_brand#17, i_class#18, i_category#19, qoh#27] -Arguments: 100, [qoh#27 ASC NULLS FIRST, i_product_name#16 ASC NULLS FIRST, i_brand#17 ASC NULLS FIRST, i_class#18 ASC NULLS FIRST, i_category#19 ASC NULLS FIRST], [i_product_name#16, i_brand#17, i_class#18, i_category#19, qoh#27] +Input [5]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, qoh#23] +Arguments: 100, [qoh#23 ASC NULLS FIRST, i_product_name#13 ASC NULLS FIRST, i_brand#14 ASC NULLS FIRST, i_class#15 ASC NULLS FIRST, i_category#16 ASC NULLS FIRST], [i_product_name#13, i_brand#14, i_class#15, i_category#16, qoh#23] ===== Subqueries ===== @@ -157,25 +157,25 @@ BroadcastExchange (31) (27) Scan parquet default.date_dim -Output [2]: [d_date_sk#8, d_month_seq#28] +Output [2]: [d_date_sk#7, d_month_seq#24] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#8, d_month_seq#28] +Input [2]: [d_date_sk#7, d_month_seq#24] (29) Filter [codegen id : 1] -Input [2]: [d_date_sk#8, d_month_seq#28] -Condition : (((isnotnull(d_month_seq#28) AND (d_month_seq#28 >= 1200)) AND (d_month_seq#28 <= 1211)) AND isnotnull(d_date_sk#8)) +Input [2]: [d_date_sk#7, d_month_seq#24] +Condition : (((isnotnull(d_month_seq#24) AND (d_month_seq#24 >= 1200)) AND (d_month_seq#24 <= 1211)) AND isnotnull(d_date_sk#7)) (30) Project [codegen id : 1] -Output [1]: [d_date_sk#8] -Input [2]: [d_date_sk#8, d_month_seq#28] +Output [1]: [d_date_sk#7] +Input [2]: [d_date_sk#7, d_month_seq#24] (31) BroadcastExchange -Input [1]: [d_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#29] +Input [1]: [d_date_sk#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q22/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q22/explain.txt index c1b0b42178114..9700943b1264d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q22/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q22/explain.txt @@ -67,7 +67,7 @@ Condition : isnotnull(i_item_sk#7) (10) BroadcastExchange Input [5]: [i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_item_sk#1] @@ -79,57 +79,57 @@ Output [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, i_brand#8, i_class#9, i Input [8]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11] (13) Scan parquet default.warehouse -Output [1]: [w_warehouse_sk#13] +Output [1]: [w_warehouse_sk#12] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [1]: [w_warehouse_sk#13] +Input [1]: [w_warehouse_sk#12] (15) Filter [codegen id : 3] -Input [1]: [w_warehouse_sk#13] -Condition : isnotnull(w_warehouse_sk#13) +Input [1]: [w_warehouse_sk#12] +Condition : isnotnull(w_warehouse_sk#12) (16) BroadcastExchange -Input [1]: [w_warehouse_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Input [1]: [w_warehouse_sk#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_warehouse_sk#2] -Right keys [1]: [w_warehouse_sk#13] +Right keys [1]: [w_warehouse_sk#12] Join condition: None (18) Project [codegen id : 4] Output [5]: [inv_quantity_on_hand#3, i_product_name#11, i_brand#8, i_class#9, i_category#10] -Input [7]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, i_brand#8, i_class#9, i_category#10, i_product_name#11, w_warehouse_sk#13] +Input [7]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, i_brand#8, i_class#9, i_category#10, i_product_name#11, w_warehouse_sk#12] (19) Expand [codegen id : 4] Input [5]: [inv_quantity_on_hand#3, i_product_name#11, i_brand#8, i_class#9, i_category#10] -Arguments: [[inv_quantity_on_hand#3, i_product_name#11, i_brand#8, i_class#9, i_category#10, 0], [inv_quantity_on_hand#3, i_product_name#11, i_brand#8, i_class#9, null, 1], [inv_quantity_on_hand#3, i_product_name#11, i_brand#8, null, null, 3], [inv_quantity_on_hand#3, i_product_name#11, null, null, null, 7], [inv_quantity_on_hand#3, null, null, null, null, 15]], [inv_quantity_on_hand#3, i_product_name#15, i_brand#16, i_class#17, i_category#18, spark_grouping_id#19] +Arguments: [[inv_quantity_on_hand#3, i_product_name#11, i_brand#8, i_class#9, i_category#10, 0], [inv_quantity_on_hand#3, i_product_name#11, i_brand#8, i_class#9, null, 1], [inv_quantity_on_hand#3, i_product_name#11, i_brand#8, null, null, 3], [inv_quantity_on_hand#3, i_product_name#11, null, null, null, 7], [inv_quantity_on_hand#3, null, null, null, null, 15]], [inv_quantity_on_hand#3, i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17] (20) HashAggregate [codegen id : 4] -Input [6]: [inv_quantity_on_hand#3, i_product_name#15, i_brand#16, i_class#17, i_category#18, spark_grouping_id#19] -Keys [5]: [i_product_name#15, i_brand#16, i_class#17, i_category#18, spark_grouping_id#19] +Input [6]: [inv_quantity_on_hand#3, i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17] +Keys [5]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17] Functions [1]: [partial_avg(inv_quantity_on_hand#3)] -Aggregate Attributes [2]: [sum#20, count#21] -Results [7]: [i_product_name#15, i_brand#16, i_class#17, i_category#18, spark_grouping_id#19, sum#22, count#23] +Aggregate Attributes [2]: [sum#18, count#19] +Results [7]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17, sum#20, count#21] (21) Exchange -Input [7]: [i_product_name#15, i_brand#16, i_class#17, i_category#18, spark_grouping_id#19, sum#22, count#23] -Arguments: hashpartitioning(i_product_name#15, i_brand#16, i_class#17, i_category#18, spark_grouping_id#19, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [7]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17, sum#20, count#21] +Arguments: hashpartitioning(i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 5] -Input [7]: [i_product_name#15, i_brand#16, i_class#17, i_category#18, spark_grouping_id#19, sum#22, count#23] -Keys [5]: [i_product_name#15, i_brand#16, i_class#17, i_category#18, spark_grouping_id#19] +Input [7]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17, sum#20, count#21] +Keys [5]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17] Functions [1]: [avg(inv_quantity_on_hand#3)] -Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#25] -Results [5]: [i_product_name#15, i_brand#16, i_class#17, i_category#18, avg(inv_quantity_on_hand#3)#25 AS qoh#26] +Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#22] +Results [5]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, avg(inv_quantity_on_hand#3)#22 AS qoh#23] (23) TakeOrderedAndProject -Input [5]: [i_product_name#15, i_brand#16, i_class#17, i_category#18, qoh#26] -Arguments: 100, [qoh#26 ASC NULLS FIRST, i_product_name#15 ASC NULLS FIRST, i_brand#16 ASC NULLS FIRST, i_class#17 ASC NULLS FIRST, i_category#18 ASC NULLS FIRST], [i_product_name#15, i_brand#16, i_class#17, i_category#18, qoh#26] +Input [5]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, qoh#23] +Arguments: 100, [qoh#23 ASC NULLS FIRST, i_product_name#13 ASC NULLS FIRST, i_brand#14 ASC NULLS FIRST, i_class#15 ASC NULLS FIRST, i_category#16 ASC NULLS FIRST], [i_product_name#13, i_brand#14, i_class#15, i_category#16, qoh#23] ===== Subqueries ===== @@ -142,25 +142,25 @@ BroadcastExchange (28) (24) Scan parquet default.date_dim -Output [2]: [d_date_sk#6, d_month_seq#27] +Output [2]: [d_date_sk#6, d_month_seq#24] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#6, d_month_seq#27] +Input [2]: [d_date_sk#6, d_month_seq#24] (26) Filter [codegen id : 1] -Input [2]: [d_date_sk#6, d_month_seq#27] -Condition : (((isnotnull(d_month_seq#27) AND (d_month_seq#27 >= 1200)) AND (d_month_seq#27 <= 1211)) AND isnotnull(d_date_sk#6)) +Input [2]: [d_date_sk#6, d_month_seq#24] +Condition : (((isnotnull(d_month_seq#24) AND (d_month_seq#24 >= 1200)) AND (d_month_seq#24 <= 1211)) AND isnotnull(d_date_sk#6)) (27) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [2]: [d_date_sk#6, d_month_seq#27] +Input [2]: [d_date_sk#6, d_month_seq#24] (28) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#28] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a.sf100/explain.txt index 7f419ce3eaf6d..84fdda1e313c6 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a.sf100/explain.txt @@ -103,107 +103,107 @@ Input [5]: [cs_bill_customer_sk#1, cs_item_sk#2, cs_quantity#3, cs_list_price#4, (3) Exchange Input [5]: [cs_bill_customer_sk#1, cs_item_sk#2, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] -Arguments: hashpartitioning(cs_item_sk#2, 5), ENSURE_REQUIREMENTS, [id=#7] +Arguments: hashpartitioning(cs_item_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=1] (4) Sort [codegen id : 2] Input [5]: [cs_bill_customer_sk#1, cs_item_sk#2, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] Arguments: [cs_item_sk#2 ASC NULLS FIRST], false, 0 (5) Scan parquet default.store_sales -Output [2]: [ss_item_sk#8, ss_sold_date_sk#9] +Output [2]: [ss_item_sk#7, ss_sold_date_sk#8] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#9), dynamicpruningexpression(ss_sold_date_sk#9 IN dynamicpruning#10)] +PartitionFilters: [isnotnull(ss_sold_date_sk#8), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (6) ColumnarToRow [codegen id : 4] -Input [2]: [ss_item_sk#8, ss_sold_date_sk#9] +Input [2]: [ss_item_sk#7, ss_sold_date_sk#8] (7) Filter [codegen id : 4] -Input [2]: [ss_item_sk#8, ss_sold_date_sk#9] -Condition : isnotnull(ss_item_sk#8) +Input [2]: [ss_item_sk#7, ss_sold_date_sk#8] +Condition : isnotnull(ss_item_sk#7) (8) ReusedExchange [Reuses operator id: 100] -Output [2]: [d_date_sk#11, d_date#12] +Output [2]: [d_date_sk#10, d_date#11] (9) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#9] -Right keys [1]: [d_date_sk#11] +Left keys [1]: [ss_sold_date_sk#8] +Right keys [1]: [d_date_sk#10] Join condition: None (10) Project [codegen id : 4] -Output [2]: [ss_item_sk#8, d_date#12] -Input [4]: [ss_item_sk#8, ss_sold_date_sk#9, d_date_sk#11, d_date#12] +Output [2]: [ss_item_sk#7, d_date#11] +Input [4]: [ss_item_sk#7, ss_sold_date_sk#8, d_date_sk#10, d_date#11] (11) Exchange -Input [2]: [ss_item_sk#8, d_date#12] -Arguments: hashpartitioning(ss_item_sk#8, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [2]: [ss_item_sk#7, d_date#11] +Arguments: hashpartitioning(ss_item_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 5] -Input [2]: [ss_item_sk#8, d_date#12] -Arguments: [ss_item_sk#8 ASC NULLS FIRST], false, 0 +Input [2]: [ss_item_sk#7, d_date#11] +Arguments: [ss_item_sk#7 ASC NULLS FIRST], false, 0 (13) Scan parquet default.item -Output [2]: [i_item_sk#14, i_item_desc#15] +Output [2]: [i_item_sk#12, i_item_desc#13] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 6] -Input [2]: [i_item_sk#14, i_item_desc#15] +Input [2]: [i_item_sk#12, i_item_desc#13] (15) Filter [codegen id : 6] -Input [2]: [i_item_sk#14, i_item_desc#15] -Condition : isnotnull(i_item_sk#14) +Input [2]: [i_item_sk#12, i_item_desc#13] +Condition : isnotnull(i_item_sk#12) (16) Exchange -Input [2]: [i_item_sk#14, i_item_desc#15] -Arguments: hashpartitioning(i_item_sk#14, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [2]: [i_item_sk#12, i_item_desc#13] +Arguments: hashpartitioning(i_item_sk#12, 5), ENSURE_REQUIREMENTS, [plan_id=3] (17) Sort [codegen id : 7] -Input [2]: [i_item_sk#14, i_item_desc#15] -Arguments: [i_item_sk#14 ASC NULLS FIRST], false, 0 +Input [2]: [i_item_sk#12, i_item_desc#13] +Arguments: [i_item_sk#12 ASC NULLS FIRST], false, 0 (18) SortMergeJoin [codegen id : 8] -Left keys [1]: [ss_item_sk#8] -Right keys [1]: [i_item_sk#14] +Left keys [1]: [ss_item_sk#7] +Right keys [1]: [i_item_sk#12] Join condition: None (19) Project [codegen id : 8] -Output [3]: [d_date#12, i_item_sk#14, substr(i_item_desc#15, 1, 30) AS _groupingexpression#17] -Input [4]: [ss_item_sk#8, d_date#12, i_item_sk#14, i_item_desc#15] +Output [3]: [d_date#11, i_item_sk#12, substr(i_item_desc#13, 1, 30) AS _groupingexpression#14] +Input [4]: [ss_item_sk#7, d_date#11, i_item_sk#12, i_item_desc#13] (20) HashAggregate [codegen id : 8] -Input [3]: [d_date#12, i_item_sk#14, _groupingexpression#17] -Keys [3]: [_groupingexpression#17, i_item_sk#14, d_date#12] +Input [3]: [d_date#11, i_item_sk#12, _groupingexpression#14] +Keys [3]: [_groupingexpression#14, i_item_sk#12, d_date#11] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#18] -Results [4]: [_groupingexpression#17, i_item_sk#14, d_date#12, count#19] +Aggregate Attributes [1]: [count#15] +Results [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16] (21) HashAggregate [codegen id : 8] -Input [4]: [_groupingexpression#17, i_item_sk#14, d_date#12, count#19] -Keys [3]: [_groupingexpression#17, i_item_sk#14, d_date#12] +Input [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16] +Keys [3]: [_groupingexpression#14, i_item_sk#12, d_date#11] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#20] -Results [2]: [i_item_sk#14 AS item_sk#21, count(1)#20 AS cnt#22] +Aggregate Attributes [1]: [count(1)#17] +Results [2]: [i_item_sk#12 AS item_sk#18, count(1)#17 AS cnt#19] (22) Filter [codegen id : 8] -Input [2]: [item_sk#21, cnt#22] -Condition : (cnt#22 > 4) +Input [2]: [item_sk#18, cnt#19] +Condition : (cnt#19 > 4) (23) Project [codegen id : 8] -Output [1]: [item_sk#21] -Input [2]: [item_sk#21, cnt#22] +Output [1]: [item_sk#18] +Input [2]: [item_sk#18, cnt#19] (24) Sort [codegen id : 8] -Input [1]: [item_sk#21] -Arguments: [item_sk#21 ASC NULLS FIRST], false, 0 +Input [1]: [item_sk#18] +Arguments: [item_sk#18 ASC NULLS FIRST], false, 0 (25) SortMergeJoin [codegen id : 9] Left keys [1]: [cs_item_sk#2] -Right keys [1]: [item_sk#21] +Right keys [1]: [item_sk#18] Join condition: None (26) Project [codegen id : 9] @@ -212,98 +212,98 @@ Input [5]: [cs_bill_customer_sk#1, cs_item_sk#2, cs_quantity#3, cs_list_price#4, (27) Exchange Input [4]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] -Arguments: hashpartitioning(cs_bill_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#23] +Arguments: hashpartitioning(cs_bill_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) Sort [codegen id : 10] Input [4]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] Arguments: [cs_bill_customer_sk#1 ASC NULLS FIRST], false, 0 (29) Scan parquet default.store_sales -Output [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] +Output [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 11] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] (31) Filter [codegen id : 11] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] -Condition : isnotnull(ss_customer_sk#24) +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] +Condition : isnotnull(ss_customer_sk#20) (32) Project [codegen id : 11] -Output [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] +Output [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] (33) Exchange -Input [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] -Arguments: hashpartitioning(ss_customer_sk#24, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] +Arguments: hashpartitioning(ss_customer_sk#20, 5), ENSURE_REQUIREMENTS, [plan_id=5] (34) Sort [codegen id : 12] -Input [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] -Arguments: [ss_customer_sk#24 ASC NULLS FIRST], false, 0 +Input [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] +Arguments: [ss_customer_sk#20 ASC NULLS FIRST], false, 0 (35) Scan parquet default.customer -Output [1]: [c_customer_sk#29] +Output [1]: [c_customer_sk#24] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (36) ColumnarToRow [codegen id : 13] -Input [1]: [c_customer_sk#29] +Input [1]: [c_customer_sk#24] (37) Filter [codegen id : 13] -Input [1]: [c_customer_sk#29] -Condition : isnotnull(c_customer_sk#29) +Input [1]: [c_customer_sk#24] +Condition : isnotnull(c_customer_sk#24) (38) Exchange -Input [1]: [c_customer_sk#29] -Arguments: hashpartitioning(c_customer_sk#29, 5), ENSURE_REQUIREMENTS, [id=#30] +Input [1]: [c_customer_sk#24] +Arguments: hashpartitioning(c_customer_sk#24, 5), ENSURE_REQUIREMENTS, [plan_id=6] (39) Sort [codegen id : 14] -Input [1]: [c_customer_sk#29] -Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (40) SortMergeJoin [codegen id : 15] -Left keys [1]: [ss_customer_sk#24] -Right keys [1]: [c_customer_sk#29] +Left keys [1]: [ss_customer_sk#20] +Right keys [1]: [c_customer_sk#24] Join condition: None (41) Project [codegen id : 15] -Output [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#29] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, c_customer_sk#29] +Output [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, c_customer_sk#24] (42) HashAggregate [codegen id : 15] -Input [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#29] -Keys [1]: [c_customer_sk#29] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#31, isEmpty#32] -Results [3]: [c_customer_sk#29, sum#33, isEmpty#34] +Input [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Keys [1]: [c_customer_sk#24] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#25, isEmpty#26] +Results [3]: [c_customer_sk#24, sum#27, isEmpty#28] (43) HashAggregate [codegen id : 15] -Input [3]: [c_customer_sk#29, sum#33, isEmpty#34] -Keys [1]: [c_customer_sk#29] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35] -Results [2]: [c_customer_sk#29, sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35 AS ssales#36] +Input [3]: [c_customer_sk#24, sum#27, isEmpty#28] +Keys [1]: [c_customer_sk#24] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29] +Results [2]: [c_customer_sk#24, sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29 AS ssales#30] (44) Filter [codegen id : 15] -Input [2]: [c_customer_sk#29, ssales#36] -Condition : (isnotnull(ssales#36) AND (cast(ssales#36 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(Subquery scalar-subquery#37, [id=#38] as decimal(32,6)))), DecimalType(38,8)))) +Input [2]: [c_customer_sk#24, ssales#30] +Condition : (isnotnull(ssales#30) AND (cast(ssales#30 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(Subquery scalar-subquery#31, [id=#32] as decimal(32,6)))), DecimalType(38,8)))) (45) Project [codegen id : 15] -Output [1]: [c_customer_sk#29] -Input [2]: [c_customer_sk#29, ssales#36] +Output [1]: [c_customer_sk#24] +Input [2]: [c_customer_sk#24, ssales#30] (46) Sort [codegen id : 15] -Input [1]: [c_customer_sk#29] -Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (47) SortMergeJoin [codegen id : 17] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#29] +Right keys [1]: [c_customer_sk#24] Join condition: None (48) Project [codegen id : 17] @@ -311,190 +311,190 @@ Output [3]: [cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] Input [4]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] (49) ReusedExchange [Reuses operator id: 95] -Output [1]: [d_date_sk#39] +Output [1]: [d_date_sk#33] (50) BroadcastHashJoin [codegen id : 17] Left keys [1]: [cs_sold_date_sk#5] -Right keys [1]: [d_date_sk#39] +Right keys [1]: [d_date_sk#33] Join condition: None (51) Project [codegen id : 17] -Output [1]: [CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)) AS sales#40] -Input [4]: [cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5, d_date_sk#39] +Output [1]: [CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)) AS sales#34] +Input [4]: [cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5, d_date_sk#33] (52) Scan parquet default.web_sales -Output [5]: [ws_item_sk#41, ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] +Output [5]: [ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#45), dynamicpruningexpression(ws_sold_date_sk#45 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(ws_sold_date_sk#39), dynamicpruningexpression(ws_sold_date_sk#39 IN dynamicpruning#6)] ReadSchema: struct (53) ColumnarToRow [codegen id : 18] -Input [5]: [ws_item_sk#41, ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] +Input [5]: [ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] (54) Exchange -Input [5]: [ws_item_sk#41, ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] -Arguments: hashpartitioning(ws_item_sk#41, 5), ENSURE_REQUIREMENTS, [id=#46] +Input [5]: [ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] +Arguments: hashpartitioning(ws_item_sk#35, 5), ENSURE_REQUIREMENTS, [plan_id=7] (55) Sort [codegen id : 19] -Input [5]: [ws_item_sk#41, ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] -Arguments: [ws_item_sk#41 ASC NULLS FIRST], false, 0 +Input [5]: [ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] +Arguments: [ws_item_sk#35 ASC NULLS FIRST], false, 0 (56) ReusedExchange [Reuses operator id: 11] -Output [2]: [ss_item_sk#8, d_date#12] +Output [2]: [ss_item_sk#7, d_date#11] (57) Sort [codegen id : 22] -Input [2]: [ss_item_sk#8, d_date#12] -Arguments: [ss_item_sk#8 ASC NULLS FIRST], false, 0 +Input [2]: [ss_item_sk#7, d_date#11] +Arguments: [ss_item_sk#7 ASC NULLS FIRST], false, 0 (58) ReusedExchange [Reuses operator id: 16] -Output [2]: [i_item_sk#14, i_item_desc#15] +Output [2]: [i_item_sk#12, i_item_desc#13] (59) Sort [codegen id : 24] -Input [2]: [i_item_sk#14, i_item_desc#15] -Arguments: [i_item_sk#14 ASC NULLS FIRST], false, 0 +Input [2]: [i_item_sk#12, i_item_desc#13] +Arguments: [i_item_sk#12 ASC NULLS FIRST], false, 0 (60) SortMergeJoin [codegen id : 25] -Left keys [1]: [ss_item_sk#8] -Right keys [1]: [i_item_sk#14] +Left keys [1]: [ss_item_sk#7] +Right keys [1]: [i_item_sk#12] Join condition: None (61) Project [codegen id : 25] -Output [3]: [d_date#12, i_item_sk#14, substr(i_item_desc#15, 1, 30) AS _groupingexpression#17] -Input [4]: [ss_item_sk#8, d_date#12, i_item_sk#14, i_item_desc#15] +Output [3]: [d_date#11, i_item_sk#12, substr(i_item_desc#13, 1, 30) AS _groupingexpression#14] +Input [4]: [ss_item_sk#7, d_date#11, i_item_sk#12, i_item_desc#13] (62) HashAggregate [codegen id : 25] -Input [3]: [d_date#12, i_item_sk#14, _groupingexpression#17] -Keys [3]: [_groupingexpression#17, i_item_sk#14, d_date#12] +Input [3]: [d_date#11, i_item_sk#12, _groupingexpression#14] +Keys [3]: [_groupingexpression#14, i_item_sk#12, d_date#11] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#18] -Results [4]: [_groupingexpression#17, i_item_sk#14, d_date#12, count#19] +Aggregate Attributes [1]: [count#15] +Results [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16] (63) HashAggregate [codegen id : 25] -Input [4]: [_groupingexpression#17, i_item_sk#14, d_date#12, count#19] -Keys [3]: [_groupingexpression#17, i_item_sk#14, d_date#12] +Input [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16] +Keys [3]: [_groupingexpression#14, i_item_sk#12, d_date#11] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#20] -Results [2]: [i_item_sk#14 AS item_sk#21, count(1)#20 AS cnt#22] +Aggregate Attributes [1]: [count(1)#17] +Results [2]: [i_item_sk#12 AS item_sk#18, count(1)#17 AS cnt#19] (64) Filter [codegen id : 25] -Input [2]: [item_sk#21, cnt#22] -Condition : (cnt#22 > 4) +Input [2]: [item_sk#18, cnt#19] +Condition : (cnt#19 > 4) (65) Project [codegen id : 25] -Output [1]: [item_sk#21] -Input [2]: [item_sk#21, cnt#22] +Output [1]: [item_sk#18] +Input [2]: [item_sk#18, cnt#19] (66) Sort [codegen id : 25] -Input [1]: [item_sk#21] -Arguments: [item_sk#21 ASC NULLS FIRST], false, 0 +Input [1]: [item_sk#18] +Arguments: [item_sk#18 ASC NULLS FIRST], false, 0 (67) SortMergeJoin [codegen id : 26] -Left keys [1]: [ws_item_sk#41] -Right keys [1]: [item_sk#21] +Left keys [1]: [ws_item_sk#35] +Right keys [1]: [item_sk#18] Join condition: None (68) Project [codegen id : 26] -Output [4]: [ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] -Input [5]: [ws_item_sk#41, ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] +Output [4]: [ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] +Input [5]: [ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] (69) Exchange -Input [4]: [ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] -Arguments: hashpartitioning(ws_bill_customer_sk#42, 5), ENSURE_REQUIREMENTS, [id=#47] +Input [4]: [ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] +Arguments: hashpartitioning(ws_bill_customer_sk#36, 5), ENSURE_REQUIREMENTS, [plan_id=8] (70) Sort [codegen id : 27] -Input [4]: [ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] -Arguments: [ws_bill_customer_sk#42 ASC NULLS FIRST], false, 0 +Input [4]: [ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] +Arguments: [ws_bill_customer_sk#36 ASC NULLS FIRST], false, 0 (71) ReusedExchange [Reuses operator id: 33] -Output [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] +Output [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] (72) Sort [codegen id : 29] -Input [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] -Arguments: [ss_customer_sk#24 ASC NULLS FIRST], false, 0 +Input [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] +Arguments: [ss_customer_sk#20 ASC NULLS FIRST], false, 0 (73) ReusedExchange [Reuses operator id: 38] -Output [1]: [c_customer_sk#29] +Output [1]: [c_customer_sk#24] (74) Sort [codegen id : 31] -Input [1]: [c_customer_sk#29] -Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (75) SortMergeJoin [codegen id : 32] -Left keys [1]: [ss_customer_sk#24] -Right keys [1]: [c_customer_sk#29] +Left keys [1]: [ss_customer_sk#20] +Right keys [1]: [c_customer_sk#24] Join condition: None (76) Project [codegen id : 32] -Output [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#29] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, c_customer_sk#29] +Output [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, c_customer_sk#24] (77) HashAggregate [codegen id : 32] -Input [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#29] -Keys [1]: [c_customer_sk#29] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#48, isEmpty#49] -Results [3]: [c_customer_sk#29, sum#50, isEmpty#51] +Input [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Keys [1]: [c_customer_sk#24] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#40, isEmpty#41] +Results [3]: [c_customer_sk#24, sum#42, isEmpty#43] (78) HashAggregate [codegen id : 32] -Input [3]: [c_customer_sk#29, sum#50, isEmpty#51] -Keys [1]: [c_customer_sk#29] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35] -Results [2]: [c_customer_sk#29, sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35 AS ssales#36] +Input [3]: [c_customer_sk#24, sum#42, isEmpty#43] +Keys [1]: [c_customer_sk#24] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29] +Results [2]: [c_customer_sk#24, sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29 AS ssales#30] (79) Filter [codegen id : 32] -Input [2]: [c_customer_sk#29, ssales#36] -Condition : (isnotnull(ssales#36) AND (cast(ssales#36 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(ReusedSubquery Subquery scalar-subquery#37, [id=#38] as decimal(32,6)))), DecimalType(38,8)))) +Input [2]: [c_customer_sk#24, ssales#30] +Condition : (isnotnull(ssales#30) AND (cast(ssales#30 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(ReusedSubquery Subquery scalar-subquery#31, [id=#32] as decimal(32,6)))), DecimalType(38,8)))) (80) Project [codegen id : 32] -Output [1]: [c_customer_sk#29] -Input [2]: [c_customer_sk#29, ssales#36] +Output [1]: [c_customer_sk#24] +Input [2]: [c_customer_sk#24, ssales#30] (81) Sort [codegen id : 32] -Input [1]: [c_customer_sk#29] -Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (82) SortMergeJoin [codegen id : 34] -Left keys [1]: [ws_bill_customer_sk#42] -Right keys [1]: [c_customer_sk#29] +Left keys [1]: [ws_bill_customer_sk#36] +Right keys [1]: [c_customer_sk#24] Join condition: None (83) Project [codegen id : 34] -Output [3]: [ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] -Input [4]: [ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] +Output [3]: [ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] +Input [4]: [ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] (84) ReusedExchange [Reuses operator id: 95] -Output [1]: [d_date_sk#52] +Output [1]: [d_date_sk#44] (85) BroadcastHashJoin [codegen id : 34] -Left keys [1]: [ws_sold_date_sk#45] -Right keys [1]: [d_date_sk#52] +Left keys [1]: [ws_sold_date_sk#39] +Right keys [1]: [d_date_sk#44] Join condition: None (86) Project [codegen id : 34] -Output [1]: [CheckOverflow((promote_precision(cast(ws_quantity#43 as decimal(12,2))) * promote_precision(cast(ws_list_price#44 as decimal(12,2)))), DecimalType(18,2)) AS sales#53] -Input [4]: [ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45, d_date_sk#52] +Output [1]: [CheckOverflow((promote_precision(cast(ws_quantity#37 as decimal(12,2))) * promote_precision(cast(ws_list_price#38 as decimal(12,2)))), DecimalType(18,2)) AS sales#45] +Input [4]: [ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39, d_date_sk#44] (87) Union (88) HashAggregate [codegen id : 35] -Input [1]: [sales#40] +Input [1]: [sales#34] Keys: [] -Functions [1]: [partial_sum(sales#40)] -Aggregate Attributes [2]: [sum#54, isEmpty#55] -Results [2]: [sum#56, isEmpty#57] +Functions [1]: [partial_sum(sales#34)] +Aggregate Attributes [2]: [sum#46, isEmpty#47] +Results [2]: [sum#48, isEmpty#49] (89) Exchange -Input [2]: [sum#56, isEmpty#57] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#58] +Input [2]: [sum#48, isEmpty#49] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=9] (90) HashAggregate [codegen id : 36] -Input [2]: [sum#56, isEmpty#57] +Input [2]: [sum#48, isEmpty#49] Keys: [] -Functions [1]: [sum(sales#40)] -Aggregate Attributes [1]: [sum(sales#40)#59] -Results [1]: [sum(sales#40)#59 AS sum(sales)#60] +Functions [1]: [sum(sales#34)] +Aggregate Attributes [1]: [sum(sales#34)#50] +Results [1]: [sum(sales#34)#50 AS sum(sales)#51] ===== Subqueries ===== @@ -507,28 +507,28 @@ BroadcastExchange (95) (91) Scan parquet default.date_dim -Output [3]: [d_date_sk#39, d_year#61, d_moy#62] +Output [3]: [d_date_sk#33, d_year#52, d_moy#53] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2000), EqualTo(d_moy,2), IsNotNull(d_date_sk)] ReadSchema: struct (92) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#39, d_year#61, d_moy#62] +Input [3]: [d_date_sk#33, d_year#52, d_moy#53] (93) Filter [codegen id : 1] -Input [3]: [d_date_sk#39, d_year#61, d_moy#62] -Condition : ((((isnotnull(d_year#61) AND isnotnull(d_moy#62)) AND (d_year#61 = 2000)) AND (d_moy#62 = 2)) AND isnotnull(d_date_sk#39)) +Input [3]: [d_date_sk#33, d_year#52, d_moy#53] +Condition : ((((isnotnull(d_year#52) AND isnotnull(d_moy#53)) AND (d_year#52 = 2000)) AND (d_moy#53 = 2)) AND isnotnull(d_date_sk#33)) (94) Project [codegen id : 1] -Output [1]: [d_date_sk#39] -Input [3]: [d_date_sk#39, d_year#61, d_moy#62] +Output [1]: [d_date_sk#33] +Input [3]: [d_date_sk#33, d_year#52, d_moy#53] (95) BroadcastExchange -Input [1]: [d_date_sk#39] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#63] +Input [1]: [d_date_sk#33] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -Subquery:2 Hosting operator id = 5 Hosting Expression = ss_sold_date_sk#9 IN dynamicpruning#10 +Subquery:2 Hosting operator id = 5 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 BroadcastExchange (100) +- * Project (99) +- * Filter (98) @@ -537,28 +537,28 @@ BroadcastExchange (100) (96) Scan parquet default.date_dim -Output [3]: [d_date_sk#11, d_date#12, d_year#64] +Output [3]: [d_date_sk#10, d_date#11, d_year#54] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_year, [2000,2001,2002,2003]), IsNotNull(d_date_sk)] ReadSchema: struct (97) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#11, d_date#12, d_year#64] +Input [3]: [d_date_sk#10, d_date#11, d_year#54] (98) Filter [codegen id : 1] -Input [3]: [d_date_sk#11, d_date#12, d_year#64] -Condition : (d_year#64 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#11)) +Input [3]: [d_date_sk#10, d_date#11, d_year#54] +Condition : (d_year#54 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#10)) (99) Project [codegen id : 1] -Output [2]: [d_date_sk#11, d_date#12] -Input [3]: [d_date_sk#11, d_date#12, d_year#64] +Output [2]: [d_date_sk#10, d_date#11] +Input [3]: [d_date_sk#10, d_date#11, d_year#54] (100) BroadcastExchange -Input [2]: [d_date_sk#11, d_date#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#65] +Input [2]: [d_date_sk#10, d_date#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11] -Subquery:3 Hosting operator id = 44 Hosting Expression = Subquery scalar-subquery#37, [id=#38] +Subquery:3 Hosting operator id = 44 Hosting Expression = Subquery scalar-subquery#31, [id=#32] * HashAggregate (117) +- Exchange (116) +- * HashAggregate (115) @@ -579,89 +579,89 @@ Subquery:3 Hosting operator id = 44 Hosting Expression = Subquery scalar-subquer (101) Scan parquet default.store_sales -Output [4]: [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68, ss_sold_date_sk#69] +Output [4]: [ss_customer_sk#55, ss_quantity#56, ss_sales_price#57, ss_sold_date_sk#58] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#69), dynamicpruningexpression(ss_sold_date_sk#69 IN dynamicpruning#70)] +PartitionFilters: [isnotnull(ss_sold_date_sk#58), dynamicpruningexpression(ss_sold_date_sk#58 IN dynamicpruning#59)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (102) ColumnarToRow [codegen id : 2] -Input [4]: [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68, ss_sold_date_sk#69] +Input [4]: [ss_customer_sk#55, ss_quantity#56, ss_sales_price#57, ss_sold_date_sk#58] (103) Filter [codegen id : 2] -Input [4]: [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68, ss_sold_date_sk#69] -Condition : isnotnull(ss_customer_sk#66) +Input [4]: [ss_customer_sk#55, ss_quantity#56, ss_sales_price#57, ss_sold_date_sk#58] +Condition : isnotnull(ss_customer_sk#55) (104) ReusedExchange [Reuses operator id: 122] -Output [1]: [d_date_sk#71] +Output [1]: [d_date_sk#60] (105) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [ss_sold_date_sk#69] -Right keys [1]: [d_date_sk#71] +Left keys [1]: [ss_sold_date_sk#58] +Right keys [1]: [d_date_sk#60] Join condition: None (106) Project [codegen id : 2] -Output [3]: [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68] -Input [5]: [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68, ss_sold_date_sk#69, d_date_sk#71] +Output [3]: [ss_customer_sk#55, ss_quantity#56, ss_sales_price#57] +Input [5]: [ss_customer_sk#55, ss_quantity#56, ss_sales_price#57, ss_sold_date_sk#58, d_date_sk#60] (107) Exchange -Input [3]: [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68] -Arguments: hashpartitioning(ss_customer_sk#66, 5), ENSURE_REQUIREMENTS, [id=#72] +Input [3]: [ss_customer_sk#55, ss_quantity#56, ss_sales_price#57] +Arguments: hashpartitioning(ss_customer_sk#55, 5), ENSURE_REQUIREMENTS, [plan_id=12] (108) Sort [codegen id : 3] -Input [3]: [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68] -Arguments: [ss_customer_sk#66 ASC NULLS FIRST], false, 0 +Input [3]: [ss_customer_sk#55, ss_quantity#56, ss_sales_price#57] +Arguments: [ss_customer_sk#55 ASC NULLS FIRST], false, 0 (109) ReusedExchange [Reuses operator id: 38] -Output [1]: [c_customer_sk#73] +Output [1]: [c_customer_sk#61] (110) Sort [codegen id : 5] -Input [1]: [c_customer_sk#73] -Arguments: [c_customer_sk#73 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#61] +Arguments: [c_customer_sk#61 ASC NULLS FIRST], false, 0 (111) SortMergeJoin [codegen id : 6] -Left keys [1]: [ss_customer_sk#66] -Right keys [1]: [c_customer_sk#73] +Left keys [1]: [ss_customer_sk#55] +Right keys [1]: [c_customer_sk#61] Join condition: None (112) Project [codegen id : 6] -Output [3]: [ss_quantity#67, ss_sales_price#68, c_customer_sk#73] -Input [4]: [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68, c_customer_sk#73] +Output [3]: [ss_quantity#56, ss_sales_price#57, c_customer_sk#61] +Input [4]: [ss_customer_sk#55, ss_quantity#56, ss_sales_price#57, c_customer_sk#61] (113) HashAggregate [codegen id : 6] -Input [3]: [ss_quantity#67, ss_sales_price#68, c_customer_sk#73] -Keys [1]: [c_customer_sk#73] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#67 as decimal(12,2))) * promote_precision(cast(ss_sales_price#68 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#74, isEmpty#75] -Results [3]: [c_customer_sk#73, sum#76, isEmpty#77] +Input [3]: [ss_quantity#56, ss_sales_price#57, c_customer_sk#61] +Keys [1]: [c_customer_sk#61] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#56 as decimal(12,2))) * promote_precision(cast(ss_sales_price#57 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#62, isEmpty#63] +Results [3]: [c_customer_sk#61, sum#64, isEmpty#65] (114) HashAggregate [codegen id : 6] -Input [3]: [c_customer_sk#73, sum#76, isEmpty#77] -Keys [1]: [c_customer_sk#73] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#67 as decimal(12,2))) * promote_precision(cast(ss_sales_price#68 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#67 as decimal(12,2))) * promote_precision(cast(ss_sales_price#68 as decimal(12,2)))), DecimalType(18,2)))#78] -Results [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#67 as decimal(12,2))) * promote_precision(cast(ss_sales_price#68 as decimal(12,2)))), DecimalType(18,2)))#78 AS csales#79] +Input [3]: [c_customer_sk#61, sum#64, isEmpty#65] +Keys [1]: [c_customer_sk#61] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#56 as decimal(12,2))) * promote_precision(cast(ss_sales_price#57 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#56 as decimal(12,2))) * promote_precision(cast(ss_sales_price#57 as decimal(12,2)))), DecimalType(18,2)))#66] +Results [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#56 as decimal(12,2))) * promote_precision(cast(ss_sales_price#57 as decimal(12,2)))), DecimalType(18,2)))#66 AS csales#67] (115) HashAggregate [codegen id : 6] -Input [1]: [csales#79] +Input [1]: [csales#67] Keys: [] -Functions [1]: [partial_max(csales#79)] -Aggregate Attributes [1]: [max#80] -Results [1]: [max#81] +Functions [1]: [partial_max(csales#67)] +Aggregate Attributes [1]: [max#68] +Results [1]: [max#69] (116) Exchange -Input [1]: [max#81] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#82] +Input [1]: [max#69] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=13] (117) HashAggregate [codegen id : 7] -Input [1]: [max#81] +Input [1]: [max#69] Keys: [] -Functions [1]: [max(csales#79)] -Aggregate Attributes [1]: [max(csales#79)#83] -Results [1]: [max(csales#79)#83 AS tpcds_cmax#84] +Functions [1]: [max(csales#67)] +Aggregate Attributes [1]: [max(csales#67)#70] +Results [1]: [max(csales#67)#70 AS tpcds_cmax#71] -Subquery:4 Hosting operator id = 101 Hosting Expression = ss_sold_date_sk#69 IN dynamicpruning#70 +Subquery:4 Hosting operator id = 101 Hosting Expression = ss_sold_date_sk#58 IN dynamicpruning#59 BroadcastExchange (122) +- * Project (121) +- * Filter (120) @@ -670,29 +670,29 @@ BroadcastExchange (122) (118) Scan parquet default.date_dim -Output [2]: [d_date_sk#71, d_year#85] +Output [2]: [d_date_sk#60, d_year#72] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_year, [2000,2001,2002,2003]), IsNotNull(d_date_sk)] ReadSchema: struct (119) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#71, d_year#85] +Input [2]: [d_date_sk#60, d_year#72] (120) Filter [codegen id : 1] -Input [2]: [d_date_sk#71, d_year#85] -Condition : (d_year#85 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#71)) +Input [2]: [d_date_sk#60, d_year#72] +Condition : (d_year#72 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#60)) (121) Project [codegen id : 1] -Output [1]: [d_date_sk#71] -Input [2]: [d_date_sk#71, d_year#85] +Output [1]: [d_date_sk#60] +Input [2]: [d_date_sk#60, d_year#72] (122) BroadcastExchange -Input [1]: [d_date_sk#71] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#86] +Input [1]: [d_date_sk#60] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=14] -Subquery:5 Hosting operator id = 52 Hosting Expression = ws_sold_date_sk#45 IN dynamicpruning#6 +Subquery:5 Hosting operator id = 52 Hosting Expression = ws_sold_date_sk#39 IN dynamicpruning#6 -Subquery:6 Hosting operator id = 79 Hosting Expression = ReusedSubquery Subquery scalar-subquery#37, [id=#38] +Subquery:6 Hosting operator id = 79 Hosting Expression = ReusedSubquery Subquery scalar-subquery#31, [id=#32] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a/explain.txt index 58d6c22f3fd05..8e372bc426361 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23a/explain.txt @@ -120,7 +120,7 @@ Condition : isnotnull(i_item_sk#12) (12) BroadcastExchange Input [2]: [i_item_sk#12, i_item_desc#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (13) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#7] @@ -128,42 +128,42 @@ Right keys [1]: [i_item_sk#12] Join condition: None (14) Project [codegen id : 3] -Output [3]: [d_date#11, i_item_sk#12, substr(i_item_desc#13, 1, 30) AS _groupingexpression#15] +Output [3]: [d_date#11, i_item_sk#12, substr(i_item_desc#13, 1, 30) AS _groupingexpression#14] Input [4]: [ss_item_sk#7, d_date#11, i_item_sk#12, i_item_desc#13] (15) HashAggregate [codegen id : 3] -Input [3]: [d_date#11, i_item_sk#12, _groupingexpression#15] -Keys [3]: [_groupingexpression#15, i_item_sk#12, d_date#11] +Input [3]: [d_date#11, i_item_sk#12, _groupingexpression#14] +Keys [3]: [_groupingexpression#14, i_item_sk#12, d_date#11] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#16] -Results [4]: [_groupingexpression#15, i_item_sk#12, d_date#11, count#17] +Aggregate Attributes [1]: [count#15] +Results [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16] (16) Exchange -Input [4]: [_groupingexpression#15, i_item_sk#12, d_date#11, count#17] -Arguments: hashpartitioning(_groupingexpression#15, i_item_sk#12, d_date#11, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16] +Arguments: hashpartitioning(_groupingexpression#14, i_item_sk#12, d_date#11, 5), ENSURE_REQUIREMENTS, [plan_id=2] (17) HashAggregate [codegen id : 4] -Input [4]: [_groupingexpression#15, i_item_sk#12, d_date#11, count#17] -Keys [3]: [_groupingexpression#15, i_item_sk#12, d_date#11] +Input [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16] +Keys [3]: [_groupingexpression#14, i_item_sk#12, d_date#11] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#19] -Results [2]: [i_item_sk#12 AS item_sk#20, count(1)#19 AS cnt#21] +Aggregate Attributes [1]: [count(1)#17] +Results [2]: [i_item_sk#12 AS item_sk#18, count(1)#17 AS cnt#19] (18) Filter [codegen id : 4] -Input [2]: [item_sk#20, cnt#21] -Condition : (cnt#21 > 4) +Input [2]: [item_sk#18, cnt#19] +Condition : (cnt#19 > 4) (19) Project [codegen id : 4] -Output [1]: [item_sk#20] -Input [2]: [item_sk#20, cnt#21] +Output [1]: [item_sk#18] +Input [2]: [item_sk#18, cnt#19] (20) BroadcastExchange -Input [1]: [item_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [item_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_item_sk#2] -Right keys [1]: [item_sk#20] +Right keys [1]: [item_sk#18] Join condition: None (22) Project [codegen id : 5] @@ -172,90 +172,90 @@ Input [5]: [cs_bill_customer_sk#1, cs_item_sk#2, cs_quantity#3, cs_list_price#4, (23) Exchange Input [4]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] -Arguments: hashpartitioning(cs_bill_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#23] +Arguments: hashpartitioning(cs_bill_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 6] Input [4]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] Arguments: [cs_bill_customer_sk#1 ASC NULLS FIRST], false, 0 (25) Scan parquet default.store_sales -Output [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] +Output [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 8] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] (27) Filter [codegen id : 8] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] -Condition : isnotnull(ss_customer_sk#24) +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] +Condition : isnotnull(ss_customer_sk#20) (28) Project [codegen id : 8] -Output [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] +Output [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] (29) Scan parquet default.customer -Output [1]: [c_customer_sk#28] +Output [1]: [c_customer_sk#24] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 7] -Input [1]: [c_customer_sk#28] +Input [1]: [c_customer_sk#24] (31) Filter [codegen id : 7] -Input [1]: [c_customer_sk#28] -Condition : isnotnull(c_customer_sk#28) +Input [1]: [c_customer_sk#24] +Condition : isnotnull(c_customer_sk#24) (32) BroadcastExchange -Input [1]: [c_customer_sk#28] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#29] +Input [1]: [c_customer_sk#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (33) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ss_customer_sk#24] -Right keys [1]: [c_customer_sk#28] +Left keys [1]: [ss_customer_sk#20] +Right keys [1]: [c_customer_sk#24] Join condition: None (34) Project [codegen id : 8] -Output [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#28] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, c_customer_sk#28] +Output [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, c_customer_sk#24] (35) HashAggregate [codegen id : 8] -Input [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#28] -Keys [1]: [c_customer_sk#28] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#30, isEmpty#31] -Results [3]: [c_customer_sk#28, sum#32, isEmpty#33] +Input [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Keys [1]: [c_customer_sk#24] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#25, isEmpty#26] +Results [3]: [c_customer_sk#24, sum#27, isEmpty#28] (36) Exchange -Input [3]: [c_customer_sk#28, sum#32, isEmpty#33] -Arguments: hashpartitioning(c_customer_sk#28, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [3]: [c_customer_sk#24, sum#27, isEmpty#28] +Arguments: hashpartitioning(c_customer_sk#24, 5), ENSURE_REQUIREMENTS, [plan_id=6] (37) HashAggregate [codegen id : 9] -Input [3]: [c_customer_sk#28, sum#32, isEmpty#33] -Keys [1]: [c_customer_sk#28] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35] -Results [2]: [c_customer_sk#28, sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35 AS ssales#36] +Input [3]: [c_customer_sk#24, sum#27, isEmpty#28] +Keys [1]: [c_customer_sk#24] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29] +Results [2]: [c_customer_sk#24, sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29 AS ssales#30] (38) Filter [codegen id : 9] -Input [2]: [c_customer_sk#28, ssales#36] -Condition : (isnotnull(ssales#36) AND (cast(ssales#36 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(Subquery scalar-subquery#37, [id=#38] as decimal(32,6)))), DecimalType(38,8)))) +Input [2]: [c_customer_sk#24, ssales#30] +Condition : (isnotnull(ssales#30) AND (cast(ssales#30 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(Subquery scalar-subquery#31, [id=#32] as decimal(32,6)))), DecimalType(38,8)))) (39) Project [codegen id : 9] -Output [1]: [c_customer_sk#28] -Input [2]: [c_customer_sk#28, ssales#36] +Output [1]: [c_customer_sk#24] +Input [2]: [c_customer_sk#24, ssales#30] (40) Sort [codegen id : 9] -Input [1]: [c_customer_sk#28] -Arguments: [c_customer_sk#28 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (41) SortMergeJoin [codegen id : 11] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#28] +Right keys [1]: [c_customer_sk#24] Join condition: None (42) Project [codegen id : 11] @@ -263,109 +263,109 @@ Output [3]: [cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] Input [4]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] (43) ReusedExchange [Reuses operator id: 71] -Output [1]: [d_date_sk#39] +Output [1]: [d_date_sk#33] (44) BroadcastHashJoin [codegen id : 11] Left keys [1]: [cs_sold_date_sk#5] -Right keys [1]: [d_date_sk#39] +Right keys [1]: [d_date_sk#33] Join condition: None (45) Project [codegen id : 11] -Output [1]: [CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)) AS sales#40] -Input [4]: [cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5, d_date_sk#39] +Output [1]: [CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)) AS sales#34] +Input [4]: [cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5, d_date_sk#33] (46) Scan parquet default.web_sales -Output [5]: [ws_item_sk#41, ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] +Output [5]: [ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#45), dynamicpruningexpression(ws_sold_date_sk#45 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(ws_sold_date_sk#39), dynamicpruningexpression(ws_sold_date_sk#39 IN dynamicpruning#6)] ReadSchema: struct (47) ColumnarToRow [codegen id : 16] -Input [5]: [ws_item_sk#41, ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] +Input [5]: [ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] (48) ReusedExchange [Reuses operator id: 20] -Output [1]: [item_sk#20] +Output [1]: [item_sk#18] (49) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [ws_item_sk#41] -Right keys [1]: [item_sk#20] +Left keys [1]: [ws_item_sk#35] +Right keys [1]: [item_sk#18] Join condition: None (50) Project [codegen id : 16] -Output [4]: [ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] -Input [5]: [ws_item_sk#41, ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] +Output [4]: [ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] +Input [5]: [ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] (51) Exchange -Input [4]: [ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] -Arguments: hashpartitioning(ws_bill_customer_sk#42, 5), ENSURE_REQUIREMENTS, [id=#46] +Input [4]: [ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] +Arguments: hashpartitioning(ws_bill_customer_sk#36, 5), ENSURE_REQUIREMENTS, [plan_id=7] (52) Sort [codegen id : 17] -Input [4]: [ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] -Arguments: [ws_bill_customer_sk#42 ASC NULLS FIRST], false, 0 +Input [4]: [ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] +Arguments: [ws_bill_customer_sk#36 ASC NULLS FIRST], false, 0 (53) ReusedExchange [Reuses operator id: 36] -Output [3]: [c_customer_sk#28, sum#47, isEmpty#48] +Output [3]: [c_customer_sk#24, sum#40, isEmpty#41] (54) HashAggregate [codegen id : 20] -Input [3]: [c_customer_sk#28, sum#47, isEmpty#48] -Keys [1]: [c_customer_sk#28] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35] -Results [2]: [c_customer_sk#28, sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35 AS ssales#36] +Input [3]: [c_customer_sk#24, sum#40, isEmpty#41] +Keys [1]: [c_customer_sk#24] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29] +Results [2]: [c_customer_sk#24, sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29 AS ssales#30] (55) Filter [codegen id : 20] -Input [2]: [c_customer_sk#28, ssales#36] -Condition : (isnotnull(ssales#36) AND (cast(ssales#36 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(ReusedSubquery Subquery scalar-subquery#37, [id=#38] as decimal(32,6)))), DecimalType(38,8)))) +Input [2]: [c_customer_sk#24, ssales#30] +Condition : (isnotnull(ssales#30) AND (cast(ssales#30 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(ReusedSubquery Subquery scalar-subquery#31, [id=#32] as decimal(32,6)))), DecimalType(38,8)))) (56) Project [codegen id : 20] -Output [1]: [c_customer_sk#28] -Input [2]: [c_customer_sk#28, ssales#36] +Output [1]: [c_customer_sk#24] +Input [2]: [c_customer_sk#24, ssales#30] (57) Sort [codegen id : 20] -Input [1]: [c_customer_sk#28] -Arguments: [c_customer_sk#28 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (58) SortMergeJoin [codegen id : 22] -Left keys [1]: [ws_bill_customer_sk#42] -Right keys [1]: [c_customer_sk#28] +Left keys [1]: [ws_bill_customer_sk#36] +Right keys [1]: [c_customer_sk#24] Join condition: None (59) Project [codegen id : 22] -Output [3]: [ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] -Input [4]: [ws_bill_customer_sk#42, ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45] +Output [3]: [ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] +Input [4]: [ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39] (60) ReusedExchange [Reuses operator id: 71] -Output [1]: [d_date_sk#49] +Output [1]: [d_date_sk#42] (61) BroadcastHashJoin [codegen id : 22] -Left keys [1]: [ws_sold_date_sk#45] -Right keys [1]: [d_date_sk#49] +Left keys [1]: [ws_sold_date_sk#39] +Right keys [1]: [d_date_sk#42] Join condition: None (62) Project [codegen id : 22] -Output [1]: [CheckOverflow((promote_precision(cast(ws_quantity#43 as decimal(12,2))) * promote_precision(cast(ws_list_price#44 as decimal(12,2)))), DecimalType(18,2)) AS sales#50] -Input [4]: [ws_quantity#43, ws_list_price#44, ws_sold_date_sk#45, d_date_sk#49] +Output [1]: [CheckOverflow((promote_precision(cast(ws_quantity#37 as decimal(12,2))) * promote_precision(cast(ws_list_price#38 as decimal(12,2)))), DecimalType(18,2)) AS sales#43] +Input [4]: [ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39, d_date_sk#42] (63) Union (64) HashAggregate [codegen id : 23] -Input [1]: [sales#40] +Input [1]: [sales#34] Keys: [] -Functions [1]: [partial_sum(sales#40)] -Aggregate Attributes [2]: [sum#51, isEmpty#52] -Results [2]: [sum#53, isEmpty#54] +Functions [1]: [partial_sum(sales#34)] +Aggregate Attributes [2]: [sum#44, isEmpty#45] +Results [2]: [sum#46, isEmpty#47] (65) Exchange -Input [2]: [sum#53, isEmpty#54] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#55] +Input [2]: [sum#46, isEmpty#47] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8] (66) HashAggregate [codegen id : 24] -Input [2]: [sum#53, isEmpty#54] +Input [2]: [sum#46, isEmpty#47] Keys: [] -Functions [1]: [sum(sales#40)] -Aggregate Attributes [1]: [sum(sales#40)#56] -Results [1]: [sum(sales#40)#56 AS sum(sales)#57] +Functions [1]: [sum(sales#34)] +Aggregate Attributes [1]: [sum(sales#34)#48] +Results [1]: [sum(sales#34)#48 AS sum(sales)#49] ===== Subqueries ===== @@ -378,26 +378,26 @@ BroadcastExchange (71) (67) Scan parquet default.date_dim -Output [3]: [d_date_sk#39, d_year#58, d_moy#59] +Output [3]: [d_date_sk#33, d_year#50, d_moy#51] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2000), EqualTo(d_moy,2), IsNotNull(d_date_sk)] ReadSchema: struct (68) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#39, d_year#58, d_moy#59] +Input [3]: [d_date_sk#33, d_year#50, d_moy#51] (69) Filter [codegen id : 1] -Input [3]: [d_date_sk#39, d_year#58, d_moy#59] -Condition : ((((isnotnull(d_year#58) AND isnotnull(d_moy#59)) AND (d_year#58 = 2000)) AND (d_moy#59 = 2)) AND isnotnull(d_date_sk#39)) +Input [3]: [d_date_sk#33, d_year#50, d_moy#51] +Condition : ((((isnotnull(d_year#50) AND isnotnull(d_moy#51)) AND (d_year#50 = 2000)) AND (d_moy#51 = 2)) AND isnotnull(d_date_sk#33)) (70) Project [codegen id : 1] -Output [1]: [d_date_sk#39] -Input [3]: [d_date_sk#39, d_year#58, d_moy#59] +Output [1]: [d_date_sk#33] +Input [3]: [d_date_sk#33, d_year#50, d_moy#51] (71) BroadcastExchange -Input [1]: [d_date_sk#39] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#60] +Input [1]: [d_date_sk#33] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] Subquery:2 Hosting operator id = 3 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 BroadcastExchange (76) @@ -408,28 +408,28 @@ BroadcastExchange (76) (72) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_date#11, d_year#61] +Output [3]: [d_date_sk#10, d_date#11, d_year#52] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_year, [2000,2001,2002,2003]), IsNotNull(d_date_sk)] ReadSchema: struct (73) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_date#11, d_year#61] +Input [3]: [d_date_sk#10, d_date#11, d_year#52] (74) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_date#11, d_year#61] -Condition : (d_year#61 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#10, d_date#11, d_year#52] +Condition : (d_year#52 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#10)) (75) Project [codegen id : 1] Output [2]: [d_date_sk#10, d_date#11] -Input [3]: [d_date_sk#10, d_date#11, d_year#61] +Input [3]: [d_date_sk#10, d_date#11, d_year#52] (76) BroadcastExchange Input [2]: [d_date_sk#10, d_date#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#62] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -Subquery:3 Hosting operator id = 38 Hosting Expression = Subquery scalar-subquery#37, [id=#38] +Subquery:3 Hosting operator id = 38 Hosting Expression = Subquery scalar-subquery#31, [id=#32] * HashAggregate (91) +- Exchange (90) +- * HashAggregate (89) @@ -448,81 +448,81 @@ Subquery:3 Hosting operator id = 38 Hosting Expression = Subquery scalar-subquer (77) Scan parquet default.store_sales -Output [4]: [ss_customer_sk#63, ss_quantity#64, ss_sales_price#65, ss_sold_date_sk#66] +Output [4]: [ss_customer_sk#53, ss_quantity#54, ss_sales_price#55, ss_sold_date_sk#56] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#66), dynamicpruningexpression(ss_sold_date_sk#66 IN dynamicpruning#67)] +PartitionFilters: [isnotnull(ss_sold_date_sk#56), dynamicpruningexpression(ss_sold_date_sk#56 IN dynamicpruning#57)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (78) ColumnarToRow [codegen id : 3] -Input [4]: [ss_customer_sk#63, ss_quantity#64, ss_sales_price#65, ss_sold_date_sk#66] +Input [4]: [ss_customer_sk#53, ss_quantity#54, ss_sales_price#55, ss_sold_date_sk#56] (79) Filter [codegen id : 3] -Input [4]: [ss_customer_sk#63, ss_quantity#64, ss_sales_price#65, ss_sold_date_sk#66] -Condition : isnotnull(ss_customer_sk#63) +Input [4]: [ss_customer_sk#53, ss_quantity#54, ss_sales_price#55, ss_sold_date_sk#56] +Condition : isnotnull(ss_customer_sk#53) (80) ReusedExchange [Reuses operator id: 32] -Output [1]: [c_customer_sk#68] +Output [1]: [c_customer_sk#58] (81) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [ss_customer_sk#63] -Right keys [1]: [c_customer_sk#68] +Left keys [1]: [ss_customer_sk#53] +Right keys [1]: [c_customer_sk#58] Join condition: None (82) Project [codegen id : 3] -Output [4]: [ss_quantity#64, ss_sales_price#65, ss_sold_date_sk#66, c_customer_sk#68] -Input [5]: [ss_customer_sk#63, ss_quantity#64, ss_sales_price#65, ss_sold_date_sk#66, c_customer_sk#68] +Output [4]: [ss_quantity#54, ss_sales_price#55, ss_sold_date_sk#56, c_customer_sk#58] +Input [5]: [ss_customer_sk#53, ss_quantity#54, ss_sales_price#55, ss_sold_date_sk#56, c_customer_sk#58] (83) ReusedExchange [Reuses operator id: 96] -Output [1]: [d_date_sk#69] +Output [1]: [d_date_sk#59] (84) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [ss_sold_date_sk#66] -Right keys [1]: [d_date_sk#69] +Left keys [1]: [ss_sold_date_sk#56] +Right keys [1]: [d_date_sk#59] Join condition: None (85) Project [codegen id : 3] -Output [3]: [ss_quantity#64, ss_sales_price#65, c_customer_sk#68] -Input [5]: [ss_quantity#64, ss_sales_price#65, ss_sold_date_sk#66, c_customer_sk#68, d_date_sk#69] +Output [3]: [ss_quantity#54, ss_sales_price#55, c_customer_sk#58] +Input [5]: [ss_quantity#54, ss_sales_price#55, ss_sold_date_sk#56, c_customer_sk#58, d_date_sk#59] (86) HashAggregate [codegen id : 3] -Input [3]: [ss_quantity#64, ss_sales_price#65, c_customer_sk#68] -Keys [1]: [c_customer_sk#68] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_sales_price#65 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#70, isEmpty#71] -Results [3]: [c_customer_sk#68, sum#72, isEmpty#73] +Input [3]: [ss_quantity#54, ss_sales_price#55, c_customer_sk#58] +Keys [1]: [c_customer_sk#58] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#54 as decimal(12,2))) * promote_precision(cast(ss_sales_price#55 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#60, isEmpty#61] +Results [3]: [c_customer_sk#58, sum#62, isEmpty#63] (87) Exchange -Input [3]: [c_customer_sk#68, sum#72, isEmpty#73] -Arguments: hashpartitioning(c_customer_sk#68, 5), ENSURE_REQUIREMENTS, [id=#74] +Input [3]: [c_customer_sk#58, sum#62, isEmpty#63] +Arguments: hashpartitioning(c_customer_sk#58, 5), ENSURE_REQUIREMENTS, [plan_id=11] (88) HashAggregate [codegen id : 4] -Input [3]: [c_customer_sk#68, sum#72, isEmpty#73] -Keys [1]: [c_customer_sk#68] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_sales_price#65 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_sales_price#65 as decimal(12,2)))), DecimalType(18,2)))#75] -Results [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_sales_price#65 as decimal(12,2)))), DecimalType(18,2)))#75 AS csales#76] +Input [3]: [c_customer_sk#58, sum#62, isEmpty#63] +Keys [1]: [c_customer_sk#58] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#54 as decimal(12,2))) * promote_precision(cast(ss_sales_price#55 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#54 as decimal(12,2))) * promote_precision(cast(ss_sales_price#55 as decimal(12,2)))), DecimalType(18,2)))#64] +Results [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#54 as decimal(12,2))) * promote_precision(cast(ss_sales_price#55 as decimal(12,2)))), DecimalType(18,2)))#64 AS csales#65] (89) HashAggregate [codegen id : 4] -Input [1]: [csales#76] +Input [1]: [csales#65] Keys: [] -Functions [1]: [partial_max(csales#76)] -Aggregate Attributes [1]: [max#77] -Results [1]: [max#78] +Functions [1]: [partial_max(csales#65)] +Aggregate Attributes [1]: [max#66] +Results [1]: [max#67] (90) Exchange -Input [1]: [max#78] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#79] +Input [1]: [max#67] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12] (91) HashAggregate [codegen id : 5] -Input [1]: [max#78] +Input [1]: [max#67] Keys: [] -Functions [1]: [max(csales#76)] -Aggregate Attributes [1]: [max(csales#76)#80] -Results [1]: [max(csales#76)#80 AS tpcds_cmax#81] +Functions [1]: [max(csales#65)] +Aggregate Attributes [1]: [max(csales#65)#68] +Results [1]: [max(csales#65)#68 AS tpcds_cmax#69] -Subquery:4 Hosting operator id = 77 Hosting Expression = ss_sold_date_sk#66 IN dynamicpruning#67 +Subquery:4 Hosting operator id = 77 Hosting Expression = ss_sold_date_sk#56 IN dynamicpruning#57 BroadcastExchange (96) +- * Project (95) +- * Filter (94) @@ -531,29 +531,29 @@ BroadcastExchange (96) (92) Scan parquet default.date_dim -Output [2]: [d_date_sk#69, d_year#82] +Output [2]: [d_date_sk#59, d_year#70] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_year, [2000,2001,2002,2003]), IsNotNull(d_date_sk)] ReadSchema: struct (93) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#69, d_year#82] +Input [2]: [d_date_sk#59, d_year#70] (94) Filter [codegen id : 1] -Input [2]: [d_date_sk#69, d_year#82] -Condition : (d_year#82 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#69)) +Input [2]: [d_date_sk#59, d_year#70] +Condition : (d_year#70 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#59)) (95) Project [codegen id : 1] -Output [1]: [d_date_sk#69] -Input [2]: [d_date_sk#69, d_year#82] +Output [1]: [d_date_sk#59] +Input [2]: [d_date_sk#59, d_year#70] (96) BroadcastExchange -Input [1]: [d_date_sk#69] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#83] +Input [1]: [d_date_sk#59] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=13] -Subquery:5 Hosting operator id = 46 Hosting Expression = ws_sold_date_sk#45 IN dynamicpruning#6 +Subquery:5 Hosting operator id = 46 Hosting Expression = ws_sold_date_sk#39 IN dynamicpruning#6 -Subquery:6 Hosting operator id = 55 Hosting Expression = ReusedSubquery Subquery scalar-subquery#37, [id=#38] +Subquery:6 Hosting operator id = 55 Hosting Expression = ReusedSubquery Subquery scalar-subquery#31, [id=#32] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b.sf100/explain.txt index 4d1109078e346..49fdf20838477 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b.sf100/explain.txt @@ -147,107 +147,107 @@ Condition : isnotnull(cs_bill_customer_sk#1) (4) Exchange Input [5]: [cs_bill_customer_sk#1, cs_item_sk#2, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] -Arguments: hashpartitioning(cs_item_sk#2, 5), ENSURE_REQUIREMENTS, [id=#7] +Arguments: hashpartitioning(cs_item_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [5]: [cs_bill_customer_sk#1, cs_item_sk#2, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] Arguments: [cs_item_sk#2 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_sales -Output [2]: [ss_item_sk#8, ss_sold_date_sk#9] +Output [2]: [ss_item_sk#7, ss_sold_date_sk#8] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#9), dynamicpruningexpression(ss_sold_date_sk#9 IN dynamicpruning#10)] +PartitionFilters: [isnotnull(ss_sold_date_sk#8), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 4] -Input [2]: [ss_item_sk#8, ss_sold_date_sk#9] +Input [2]: [ss_item_sk#7, ss_sold_date_sk#8] (8) Filter [codegen id : 4] -Input [2]: [ss_item_sk#8, ss_sold_date_sk#9] -Condition : isnotnull(ss_item_sk#8) +Input [2]: [ss_item_sk#7, ss_sold_date_sk#8] +Condition : isnotnull(ss_item_sk#7) (9) ReusedExchange [Reuses operator id: 139] -Output [2]: [d_date_sk#11, d_date#12] +Output [2]: [d_date_sk#10, d_date#11] (10) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#9] -Right keys [1]: [d_date_sk#11] +Left keys [1]: [ss_sold_date_sk#8] +Right keys [1]: [d_date_sk#10] Join condition: None (11) Project [codegen id : 4] -Output [2]: [ss_item_sk#8, d_date#12] -Input [4]: [ss_item_sk#8, ss_sold_date_sk#9, d_date_sk#11, d_date#12] +Output [2]: [ss_item_sk#7, d_date#11] +Input [4]: [ss_item_sk#7, ss_sold_date_sk#8, d_date_sk#10, d_date#11] (12) Exchange -Input [2]: [ss_item_sk#8, d_date#12] -Arguments: hashpartitioning(ss_item_sk#8, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [2]: [ss_item_sk#7, d_date#11] +Arguments: hashpartitioning(ss_item_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (13) Sort [codegen id : 5] -Input [2]: [ss_item_sk#8, d_date#12] -Arguments: [ss_item_sk#8 ASC NULLS FIRST], false, 0 +Input [2]: [ss_item_sk#7, d_date#11] +Arguments: [ss_item_sk#7 ASC NULLS FIRST], false, 0 (14) Scan parquet default.item -Output [2]: [i_item_sk#14, i_item_desc#15] +Output [2]: [i_item_sk#12, i_item_desc#13] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 6] -Input [2]: [i_item_sk#14, i_item_desc#15] +Input [2]: [i_item_sk#12, i_item_desc#13] (16) Filter [codegen id : 6] -Input [2]: [i_item_sk#14, i_item_desc#15] -Condition : isnotnull(i_item_sk#14) +Input [2]: [i_item_sk#12, i_item_desc#13] +Condition : isnotnull(i_item_sk#12) (17) Exchange -Input [2]: [i_item_sk#14, i_item_desc#15] -Arguments: hashpartitioning(i_item_sk#14, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [2]: [i_item_sk#12, i_item_desc#13] +Arguments: hashpartitioning(i_item_sk#12, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) Sort [codegen id : 7] -Input [2]: [i_item_sk#14, i_item_desc#15] -Arguments: [i_item_sk#14 ASC NULLS FIRST], false, 0 +Input [2]: [i_item_sk#12, i_item_desc#13] +Arguments: [i_item_sk#12 ASC NULLS FIRST], false, 0 (19) SortMergeJoin [codegen id : 8] -Left keys [1]: [ss_item_sk#8] -Right keys [1]: [i_item_sk#14] +Left keys [1]: [ss_item_sk#7] +Right keys [1]: [i_item_sk#12] Join condition: None (20) Project [codegen id : 8] -Output [3]: [d_date#12, i_item_sk#14, substr(i_item_desc#15, 1, 30) AS _groupingexpression#17] -Input [4]: [ss_item_sk#8, d_date#12, i_item_sk#14, i_item_desc#15] +Output [3]: [d_date#11, i_item_sk#12, substr(i_item_desc#13, 1, 30) AS _groupingexpression#14] +Input [4]: [ss_item_sk#7, d_date#11, i_item_sk#12, i_item_desc#13] (21) HashAggregate [codegen id : 8] -Input [3]: [d_date#12, i_item_sk#14, _groupingexpression#17] -Keys [3]: [_groupingexpression#17, i_item_sk#14, d_date#12] +Input [3]: [d_date#11, i_item_sk#12, _groupingexpression#14] +Keys [3]: [_groupingexpression#14, i_item_sk#12, d_date#11] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#18] -Results [4]: [_groupingexpression#17, i_item_sk#14, d_date#12, count#19] +Aggregate Attributes [1]: [count#15] +Results [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16] (22) HashAggregate [codegen id : 8] -Input [4]: [_groupingexpression#17, i_item_sk#14, d_date#12, count#19] -Keys [3]: [_groupingexpression#17, i_item_sk#14, d_date#12] +Input [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16] +Keys [3]: [_groupingexpression#14, i_item_sk#12, d_date#11] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#20] -Results [2]: [i_item_sk#14 AS item_sk#21, count(1)#20 AS cnt#22] +Aggregate Attributes [1]: [count(1)#17] +Results [2]: [i_item_sk#12 AS item_sk#18, count(1)#17 AS cnt#19] (23) Filter [codegen id : 8] -Input [2]: [item_sk#21, cnt#22] -Condition : (cnt#22 > 4) +Input [2]: [item_sk#18, cnt#19] +Condition : (cnt#19 > 4) (24) Project [codegen id : 8] -Output [1]: [item_sk#21] -Input [2]: [item_sk#21, cnt#22] +Output [1]: [item_sk#18] +Input [2]: [item_sk#18, cnt#19] (25) Sort [codegen id : 8] -Input [1]: [item_sk#21] -Arguments: [item_sk#21 ASC NULLS FIRST], false, 0 +Input [1]: [item_sk#18] +Arguments: [item_sk#18 ASC NULLS FIRST], false, 0 (26) SortMergeJoin [codegen id : 9] Left keys [1]: [cs_item_sk#2] -Right keys [1]: [item_sk#21] +Right keys [1]: [item_sk#18] Join condition: None (27) Project [codegen id : 9] @@ -256,463 +256,463 @@ Input [5]: [cs_bill_customer_sk#1, cs_item_sk#2, cs_quantity#3, cs_list_price#4, (28) Exchange Input [4]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] -Arguments: hashpartitioning(cs_bill_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#23] +Arguments: hashpartitioning(cs_bill_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) Sort [codegen id : 10] Input [4]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] Arguments: [cs_bill_customer_sk#1 ASC NULLS FIRST], false, 0 (30) Scan parquet default.store_sales -Output [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] +Output [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 11] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] (32) Filter [codegen id : 11] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] -Condition : isnotnull(ss_customer_sk#24) +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] +Condition : isnotnull(ss_customer_sk#20) (33) Project [codegen id : 11] -Output [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] +Output [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] (34) Exchange -Input [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] -Arguments: hashpartitioning(ss_customer_sk#24, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] +Arguments: hashpartitioning(ss_customer_sk#20, 5), ENSURE_REQUIREMENTS, [plan_id=5] (35) Sort [codegen id : 12] -Input [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] -Arguments: [ss_customer_sk#24 ASC NULLS FIRST], false, 0 +Input [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] +Arguments: [ss_customer_sk#20 ASC NULLS FIRST], false, 0 (36) Scan parquet default.customer -Output [1]: [c_customer_sk#29] +Output [1]: [c_customer_sk#24] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 13] -Input [1]: [c_customer_sk#29] +Input [1]: [c_customer_sk#24] (38) Filter [codegen id : 13] -Input [1]: [c_customer_sk#29] -Condition : isnotnull(c_customer_sk#29) +Input [1]: [c_customer_sk#24] +Condition : isnotnull(c_customer_sk#24) (39) Exchange -Input [1]: [c_customer_sk#29] -Arguments: hashpartitioning(c_customer_sk#29, 5), ENSURE_REQUIREMENTS, [id=#30] +Input [1]: [c_customer_sk#24] +Arguments: hashpartitioning(c_customer_sk#24, 5), ENSURE_REQUIREMENTS, [plan_id=6] (40) Sort [codegen id : 14] -Input [1]: [c_customer_sk#29] -Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (41) SortMergeJoin [codegen id : 15] -Left keys [1]: [ss_customer_sk#24] -Right keys [1]: [c_customer_sk#29] +Left keys [1]: [ss_customer_sk#20] +Right keys [1]: [c_customer_sk#24] Join condition: None (42) Project [codegen id : 15] -Output [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#29] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, c_customer_sk#29] +Output [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, c_customer_sk#24] (43) HashAggregate [codegen id : 15] -Input [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#29] -Keys [1]: [c_customer_sk#29] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#31, isEmpty#32] -Results [3]: [c_customer_sk#29, sum#33, isEmpty#34] +Input [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Keys [1]: [c_customer_sk#24] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#25, isEmpty#26] +Results [3]: [c_customer_sk#24, sum#27, isEmpty#28] (44) HashAggregate [codegen id : 15] -Input [3]: [c_customer_sk#29, sum#33, isEmpty#34] -Keys [1]: [c_customer_sk#29] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35] -Results [2]: [c_customer_sk#29, sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35 AS ssales#36] +Input [3]: [c_customer_sk#24, sum#27, isEmpty#28] +Keys [1]: [c_customer_sk#24] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29] +Results [2]: [c_customer_sk#24, sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29 AS ssales#30] (45) Filter [codegen id : 15] -Input [2]: [c_customer_sk#29, ssales#36] -Condition : (isnotnull(ssales#36) AND (cast(ssales#36 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(Subquery scalar-subquery#37, [id=#38] as decimal(32,6)))), DecimalType(38,8)))) +Input [2]: [c_customer_sk#24, ssales#30] +Condition : (isnotnull(ssales#30) AND (cast(ssales#30 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(Subquery scalar-subquery#31, [id=#32] as decimal(32,6)))), DecimalType(38,8)))) (46) Project [codegen id : 15] -Output [1]: [c_customer_sk#29] -Input [2]: [c_customer_sk#29, ssales#36] +Output [1]: [c_customer_sk#24] +Input [2]: [c_customer_sk#24, ssales#30] (47) Sort [codegen id : 15] -Input [1]: [c_customer_sk#29] -Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (48) SortMergeJoin [codegen id : 17] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#29] +Right keys [1]: [c_customer_sk#24] Join condition: None (49) ReusedExchange [Reuses operator id: 134] -Output [1]: [d_date_sk#39] +Output [1]: [d_date_sk#33] (50) BroadcastHashJoin [codegen id : 17] Left keys [1]: [cs_sold_date_sk#5] -Right keys [1]: [d_date_sk#39] +Right keys [1]: [d_date_sk#33] Join condition: None (51) Project [codegen id : 17] Output [3]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4] -Input [5]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5, d_date_sk#39] +Input [5]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5, d_date_sk#33] (52) Scan parquet default.customer -Output [3]: [c_customer_sk#40, c_first_name#41, c_last_name#42] +Output [3]: [c_customer_sk#34, c_first_name#35, c_last_name#36] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (53) ColumnarToRow [codegen id : 18] -Input [3]: [c_customer_sk#40, c_first_name#41, c_last_name#42] +Input [3]: [c_customer_sk#34, c_first_name#35, c_last_name#36] (54) Filter [codegen id : 18] -Input [3]: [c_customer_sk#40, c_first_name#41, c_last_name#42] -Condition : isnotnull(c_customer_sk#40) +Input [3]: [c_customer_sk#34, c_first_name#35, c_last_name#36] +Condition : isnotnull(c_customer_sk#34) (55) Exchange -Input [3]: [c_customer_sk#40, c_first_name#41, c_last_name#42] -Arguments: hashpartitioning(c_customer_sk#40, 5), ENSURE_REQUIREMENTS, [id=#43] +Input [3]: [c_customer_sk#34, c_first_name#35, c_last_name#36] +Arguments: hashpartitioning(c_customer_sk#34, 5), ENSURE_REQUIREMENTS, [plan_id=7] (56) Sort [codegen id : 19] -Input [3]: [c_customer_sk#40, c_first_name#41, c_last_name#42] -Arguments: [c_customer_sk#40 ASC NULLS FIRST], false, 0 +Input [3]: [c_customer_sk#34, c_first_name#35, c_last_name#36] +Arguments: [c_customer_sk#34 ASC NULLS FIRST], false, 0 (57) ReusedExchange [Reuses operator id: 34] -Output [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] +Output [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] (58) Sort [codegen id : 21] -Input [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] -Arguments: [ss_customer_sk#24 ASC NULLS FIRST], false, 0 +Input [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] +Arguments: [ss_customer_sk#20 ASC NULLS FIRST], false, 0 (59) ReusedExchange [Reuses operator id: 39] -Output [1]: [c_customer_sk#29] +Output [1]: [c_customer_sk#24] (60) Sort [codegen id : 23] -Input [1]: [c_customer_sk#29] -Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (61) SortMergeJoin [codegen id : 24] -Left keys [1]: [ss_customer_sk#24] -Right keys [1]: [c_customer_sk#29] +Left keys [1]: [ss_customer_sk#20] +Right keys [1]: [c_customer_sk#24] Join condition: None (62) Project [codegen id : 24] -Output [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#29] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, c_customer_sk#29] +Output [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, c_customer_sk#24] (63) HashAggregate [codegen id : 24] -Input [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#29] -Keys [1]: [c_customer_sk#29] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#31, isEmpty#32] -Results [3]: [c_customer_sk#29, sum#33, isEmpty#34] +Input [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Keys [1]: [c_customer_sk#24] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#25, isEmpty#26] +Results [3]: [c_customer_sk#24, sum#27, isEmpty#28] (64) HashAggregate [codegen id : 24] -Input [3]: [c_customer_sk#29, sum#33, isEmpty#34] -Keys [1]: [c_customer_sk#29] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35] -Results [2]: [c_customer_sk#29, sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35 AS ssales#36] +Input [3]: [c_customer_sk#24, sum#27, isEmpty#28] +Keys [1]: [c_customer_sk#24] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29] +Results [2]: [c_customer_sk#24, sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29 AS ssales#30] (65) Filter [codegen id : 24] -Input [2]: [c_customer_sk#29, ssales#36] -Condition : (isnotnull(ssales#36) AND (cast(ssales#36 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(ReusedSubquery Subquery scalar-subquery#37, [id=#38] as decimal(32,6)))), DecimalType(38,8)))) +Input [2]: [c_customer_sk#24, ssales#30] +Condition : (isnotnull(ssales#30) AND (cast(ssales#30 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(ReusedSubquery Subquery scalar-subquery#31, [id=#32] as decimal(32,6)))), DecimalType(38,8)))) (66) Project [codegen id : 24] -Output [1]: [c_customer_sk#29] -Input [2]: [c_customer_sk#29, ssales#36] +Output [1]: [c_customer_sk#24] +Input [2]: [c_customer_sk#24, ssales#30] (67) Sort [codegen id : 24] -Input [1]: [c_customer_sk#29] -Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (68) SortMergeJoin [codegen id : 25] -Left keys [1]: [c_customer_sk#40] -Right keys [1]: [c_customer_sk#29] +Left keys [1]: [c_customer_sk#34] +Right keys [1]: [c_customer_sk#24] Join condition: None (69) SortMergeJoin [codegen id : 26] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#40] +Right keys [1]: [c_customer_sk#34] Join condition: None (70) Project [codegen id : 26] -Output [4]: [cs_quantity#3, cs_list_price#4, c_first_name#41, c_last_name#42] -Input [6]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, c_customer_sk#40, c_first_name#41, c_last_name#42] +Output [4]: [cs_quantity#3, cs_list_price#4, c_first_name#35, c_last_name#36] +Input [6]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, c_customer_sk#34, c_first_name#35, c_last_name#36] (71) HashAggregate [codegen id : 26] -Input [4]: [cs_quantity#3, cs_list_price#4, c_first_name#41, c_last_name#42] -Keys [2]: [c_last_name#42, c_first_name#41] +Input [4]: [cs_quantity#3, cs_list_price#4, c_first_name#35, c_last_name#36] +Keys [2]: [c_last_name#36, c_first_name#35] Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#44, isEmpty#45] -Results [4]: [c_last_name#42, c_first_name#41, sum#46, isEmpty#47] +Aggregate Attributes [2]: [sum#37, isEmpty#38] +Results [4]: [c_last_name#36, c_first_name#35, sum#39, isEmpty#40] (72) Exchange -Input [4]: [c_last_name#42, c_first_name#41, sum#46, isEmpty#47] -Arguments: hashpartitioning(c_last_name#42, c_first_name#41, 5), ENSURE_REQUIREMENTS, [id=#48] +Input [4]: [c_last_name#36, c_first_name#35, sum#39, isEmpty#40] +Arguments: hashpartitioning(c_last_name#36, c_first_name#35, 5), ENSURE_REQUIREMENTS, [plan_id=8] (73) HashAggregate [codegen id : 27] -Input [4]: [c_last_name#42, c_first_name#41, sum#46, isEmpty#47] -Keys [2]: [c_last_name#42, c_first_name#41] +Input [4]: [c_last_name#36, c_first_name#35, sum#39, isEmpty#40] +Keys [2]: [c_last_name#36, c_first_name#35] Functions [1]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)))#49] -Results [3]: [c_last_name#42, c_first_name#41, sum(CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)))#49 AS sales#50] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)))#41] +Results [3]: [c_last_name#36, c_first_name#35, sum(CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)))#41 AS sales#42] (74) Scan parquet default.web_sales -Output [5]: [ws_item_sk#51, ws_bill_customer_sk#52, ws_quantity#53, ws_list_price#54, ws_sold_date_sk#55] +Output [5]: [ws_item_sk#43, ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#55), dynamicpruningexpression(ws_sold_date_sk#55 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(ws_sold_date_sk#47), dynamicpruningexpression(ws_sold_date_sk#47 IN dynamicpruning#6)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (75) ColumnarToRow [codegen id : 28] -Input [5]: [ws_item_sk#51, ws_bill_customer_sk#52, ws_quantity#53, ws_list_price#54, ws_sold_date_sk#55] +Input [5]: [ws_item_sk#43, ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] (76) Filter [codegen id : 28] -Input [5]: [ws_item_sk#51, ws_bill_customer_sk#52, ws_quantity#53, ws_list_price#54, ws_sold_date_sk#55] -Condition : isnotnull(ws_bill_customer_sk#52) +Input [5]: [ws_item_sk#43, ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] +Condition : isnotnull(ws_bill_customer_sk#44) (77) Exchange -Input [5]: [ws_item_sk#51, ws_bill_customer_sk#52, ws_quantity#53, ws_list_price#54, ws_sold_date_sk#55] -Arguments: hashpartitioning(ws_item_sk#51, 5), ENSURE_REQUIREMENTS, [id=#56] +Input [5]: [ws_item_sk#43, ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] +Arguments: hashpartitioning(ws_item_sk#43, 5), ENSURE_REQUIREMENTS, [plan_id=9] (78) Sort [codegen id : 29] -Input [5]: [ws_item_sk#51, ws_bill_customer_sk#52, ws_quantity#53, ws_list_price#54, ws_sold_date_sk#55] -Arguments: [ws_item_sk#51 ASC NULLS FIRST], false, 0 +Input [5]: [ws_item_sk#43, ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] +Arguments: [ws_item_sk#43 ASC NULLS FIRST], false, 0 (79) ReusedExchange [Reuses operator id: 12] -Output [2]: [ss_item_sk#8, d_date#12] +Output [2]: [ss_item_sk#7, d_date#11] (80) Sort [codegen id : 32] -Input [2]: [ss_item_sk#8, d_date#12] -Arguments: [ss_item_sk#8 ASC NULLS FIRST], false, 0 +Input [2]: [ss_item_sk#7, d_date#11] +Arguments: [ss_item_sk#7 ASC NULLS FIRST], false, 0 (81) ReusedExchange [Reuses operator id: 17] -Output [2]: [i_item_sk#14, i_item_desc#15] +Output [2]: [i_item_sk#12, i_item_desc#13] (82) Sort [codegen id : 34] -Input [2]: [i_item_sk#14, i_item_desc#15] -Arguments: [i_item_sk#14 ASC NULLS FIRST], false, 0 +Input [2]: [i_item_sk#12, i_item_desc#13] +Arguments: [i_item_sk#12 ASC NULLS FIRST], false, 0 (83) SortMergeJoin [codegen id : 35] -Left keys [1]: [ss_item_sk#8] -Right keys [1]: [i_item_sk#14] +Left keys [1]: [ss_item_sk#7] +Right keys [1]: [i_item_sk#12] Join condition: None (84) Project [codegen id : 35] -Output [3]: [d_date#12, i_item_sk#14, substr(i_item_desc#15, 1, 30) AS _groupingexpression#17] -Input [4]: [ss_item_sk#8, d_date#12, i_item_sk#14, i_item_desc#15] +Output [3]: [d_date#11, i_item_sk#12, substr(i_item_desc#13, 1, 30) AS _groupingexpression#14] +Input [4]: [ss_item_sk#7, d_date#11, i_item_sk#12, i_item_desc#13] (85) HashAggregate [codegen id : 35] -Input [3]: [d_date#12, i_item_sk#14, _groupingexpression#17] -Keys [3]: [_groupingexpression#17, i_item_sk#14, d_date#12] +Input [3]: [d_date#11, i_item_sk#12, _groupingexpression#14] +Keys [3]: [_groupingexpression#14, i_item_sk#12, d_date#11] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#18] -Results [4]: [_groupingexpression#17, i_item_sk#14, d_date#12, count#19] +Aggregate Attributes [1]: [count#15] +Results [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16] (86) HashAggregate [codegen id : 35] -Input [4]: [_groupingexpression#17, i_item_sk#14, d_date#12, count#19] -Keys [3]: [_groupingexpression#17, i_item_sk#14, d_date#12] +Input [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16] +Keys [3]: [_groupingexpression#14, i_item_sk#12, d_date#11] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#20] -Results [2]: [i_item_sk#14 AS item_sk#21, count(1)#20 AS cnt#22] +Aggregate Attributes [1]: [count(1)#17] +Results [2]: [i_item_sk#12 AS item_sk#18, count(1)#17 AS cnt#19] (87) Filter [codegen id : 35] -Input [2]: [item_sk#21, cnt#22] -Condition : (cnt#22 > 4) +Input [2]: [item_sk#18, cnt#19] +Condition : (cnt#19 > 4) (88) Project [codegen id : 35] -Output [1]: [item_sk#21] -Input [2]: [item_sk#21, cnt#22] +Output [1]: [item_sk#18] +Input [2]: [item_sk#18, cnt#19] (89) Sort [codegen id : 35] -Input [1]: [item_sk#21] -Arguments: [item_sk#21 ASC NULLS FIRST], false, 0 +Input [1]: [item_sk#18] +Arguments: [item_sk#18 ASC NULLS FIRST], false, 0 (90) SortMergeJoin [codegen id : 36] -Left keys [1]: [ws_item_sk#51] -Right keys [1]: [item_sk#21] +Left keys [1]: [ws_item_sk#43] +Right keys [1]: [item_sk#18] Join condition: None (91) Project [codegen id : 36] -Output [4]: [ws_bill_customer_sk#52, ws_quantity#53, ws_list_price#54, ws_sold_date_sk#55] -Input [5]: [ws_item_sk#51, ws_bill_customer_sk#52, ws_quantity#53, ws_list_price#54, ws_sold_date_sk#55] +Output [4]: [ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] +Input [5]: [ws_item_sk#43, ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] (92) Exchange -Input [4]: [ws_bill_customer_sk#52, ws_quantity#53, ws_list_price#54, ws_sold_date_sk#55] -Arguments: hashpartitioning(ws_bill_customer_sk#52, 5), ENSURE_REQUIREMENTS, [id=#57] +Input [4]: [ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] +Arguments: hashpartitioning(ws_bill_customer_sk#44, 5), ENSURE_REQUIREMENTS, [plan_id=10] (93) Sort [codegen id : 37] -Input [4]: [ws_bill_customer_sk#52, ws_quantity#53, ws_list_price#54, ws_sold_date_sk#55] -Arguments: [ws_bill_customer_sk#52 ASC NULLS FIRST], false, 0 +Input [4]: [ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] +Arguments: [ws_bill_customer_sk#44 ASC NULLS FIRST], false, 0 (94) ReusedExchange [Reuses operator id: 34] -Output [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] +Output [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] (95) Sort [codegen id : 39] -Input [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] -Arguments: [ss_customer_sk#24 ASC NULLS FIRST], false, 0 +Input [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] +Arguments: [ss_customer_sk#20 ASC NULLS FIRST], false, 0 (96) ReusedExchange [Reuses operator id: 39] -Output [1]: [c_customer_sk#29] +Output [1]: [c_customer_sk#24] (97) Sort [codegen id : 41] -Input [1]: [c_customer_sk#29] -Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (98) SortMergeJoin [codegen id : 42] -Left keys [1]: [ss_customer_sk#24] -Right keys [1]: [c_customer_sk#29] +Left keys [1]: [ss_customer_sk#20] +Right keys [1]: [c_customer_sk#24] Join condition: None (99) Project [codegen id : 42] -Output [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#29] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, c_customer_sk#29] +Output [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, c_customer_sk#24] (100) HashAggregate [codegen id : 42] -Input [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#29] -Keys [1]: [c_customer_sk#29] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#58, isEmpty#59] -Results [3]: [c_customer_sk#29, sum#60, isEmpty#61] +Input [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Keys [1]: [c_customer_sk#24] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#48, isEmpty#49] +Results [3]: [c_customer_sk#24, sum#50, isEmpty#51] (101) HashAggregate [codegen id : 42] -Input [3]: [c_customer_sk#29, sum#60, isEmpty#61] -Keys [1]: [c_customer_sk#29] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35] -Results [2]: [c_customer_sk#29, sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35 AS ssales#36] +Input [3]: [c_customer_sk#24, sum#50, isEmpty#51] +Keys [1]: [c_customer_sk#24] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29] +Results [2]: [c_customer_sk#24, sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29 AS ssales#30] (102) Filter [codegen id : 42] -Input [2]: [c_customer_sk#29, ssales#36] -Condition : (isnotnull(ssales#36) AND (cast(ssales#36 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(ReusedSubquery Subquery scalar-subquery#37, [id=#38] as decimal(32,6)))), DecimalType(38,8)))) +Input [2]: [c_customer_sk#24, ssales#30] +Condition : (isnotnull(ssales#30) AND (cast(ssales#30 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(ReusedSubquery Subquery scalar-subquery#31, [id=#32] as decimal(32,6)))), DecimalType(38,8)))) (103) Project [codegen id : 42] -Output [1]: [c_customer_sk#29] -Input [2]: [c_customer_sk#29, ssales#36] +Output [1]: [c_customer_sk#24] +Input [2]: [c_customer_sk#24, ssales#30] (104) Sort [codegen id : 42] -Input [1]: [c_customer_sk#29] -Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (105) SortMergeJoin [codegen id : 44] -Left keys [1]: [ws_bill_customer_sk#52] -Right keys [1]: [c_customer_sk#29] +Left keys [1]: [ws_bill_customer_sk#44] +Right keys [1]: [c_customer_sk#24] Join condition: None (106) ReusedExchange [Reuses operator id: 134] -Output [1]: [d_date_sk#62] +Output [1]: [d_date_sk#52] (107) BroadcastHashJoin [codegen id : 44] -Left keys [1]: [ws_sold_date_sk#55] -Right keys [1]: [d_date_sk#62] +Left keys [1]: [ws_sold_date_sk#47] +Right keys [1]: [d_date_sk#52] Join condition: None (108) Project [codegen id : 44] -Output [3]: [ws_bill_customer_sk#52, ws_quantity#53, ws_list_price#54] -Input [5]: [ws_bill_customer_sk#52, ws_quantity#53, ws_list_price#54, ws_sold_date_sk#55, d_date_sk#62] +Output [3]: [ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46] +Input [5]: [ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47, d_date_sk#52] (109) ReusedExchange [Reuses operator id: 55] -Output [3]: [c_customer_sk#63, c_first_name#64, c_last_name#65] +Output [3]: [c_customer_sk#53, c_first_name#54, c_last_name#55] (110) Sort [codegen id : 46] -Input [3]: [c_customer_sk#63, c_first_name#64, c_last_name#65] -Arguments: [c_customer_sk#63 ASC NULLS FIRST], false, 0 +Input [3]: [c_customer_sk#53, c_first_name#54, c_last_name#55] +Arguments: [c_customer_sk#53 ASC NULLS FIRST], false, 0 (111) ReusedExchange [Reuses operator id: 34] -Output [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] +Output [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] (112) Sort [codegen id : 48] -Input [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] -Arguments: [ss_customer_sk#24 ASC NULLS FIRST], false, 0 +Input [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] +Arguments: [ss_customer_sk#20 ASC NULLS FIRST], false, 0 (113) ReusedExchange [Reuses operator id: 39] -Output [1]: [c_customer_sk#29] +Output [1]: [c_customer_sk#24] (114) Sort [codegen id : 50] -Input [1]: [c_customer_sk#29] -Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (115) SortMergeJoin [codegen id : 51] -Left keys [1]: [ss_customer_sk#24] -Right keys [1]: [c_customer_sk#29] +Left keys [1]: [ss_customer_sk#20] +Right keys [1]: [c_customer_sk#24] Join condition: None (116) Project [codegen id : 51] -Output [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#29] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, c_customer_sk#29] +Output [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, c_customer_sk#24] (117) HashAggregate [codegen id : 51] -Input [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#29] -Keys [1]: [c_customer_sk#29] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#58, isEmpty#59] -Results [3]: [c_customer_sk#29, sum#60, isEmpty#61] +Input [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Keys [1]: [c_customer_sk#24] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#48, isEmpty#49] +Results [3]: [c_customer_sk#24, sum#50, isEmpty#51] (118) HashAggregate [codegen id : 51] -Input [3]: [c_customer_sk#29, sum#60, isEmpty#61] -Keys [1]: [c_customer_sk#29] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35] -Results [2]: [c_customer_sk#29, sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35 AS ssales#36] +Input [3]: [c_customer_sk#24, sum#50, isEmpty#51] +Keys [1]: [c_customer_sk#24] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29] +Results [2]: [c_customer_sk#24, sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29 AS ssales#30] (119) Filter [codegen id : 51] -Input [2]: [c_customer_sk#29, ssales#36] -Condition : (isnotnull(ssales#36) AND (cast(ssales#36 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(ReusedSubquery Subquery scalar-subquery#37, [id=#38] as decimal(32,6)))), DecimalType(38,8)))) +Input [2]: [c_customer_sk#24, ssales#30] +Condition : (isnotnull(ssales#30) AND (cast(ssales#30 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(ReusedSubquery Subquery scalar-subquery#31, [id=#32] as decimal(32,6)))), DecimalType(38,8)))) (120) Project [codegen id : 51] -Output [1]: [c_customer_sk#29] -Input [2]: [c_customer_sk#29, ssales#36] +Output [1]: [c_customer_sk#24] +Input [2]: [c_customer_sk#24, ssales#30] (121) Sort [codegen id : 51] -Input [1]: [c_customer_sk#29] -Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (122) SortMergeJoin [codegen id : 52] -Left keys [1]: [c_customer_sk#63] -Right keys [1]: [c_customer_sk#29] +Left keys [1]: [c_customer_sk#53] +Right keys [1]: [c_customer_sk#24] Join condition: None (123) SortMergeJoin [codegen id : 53] -Left keys [1]: [ws_bill_customer_sk#52] -Right keys [1]: [c_customer_sk#63] +Left keys [1]: [ws_bill_customer_sk#44] +Right keys [1]: [c_customer_sk#53] Join condition: None (124) Project [codegen id : 53] -Output [4]: [ws_quantity#53, ws_list_price#54, c_first_name#64, c_last_name#65] -Input [6]: [ws_bill_customer_sk#52, ws_quantity#53, ws_list_price#54, c_customer_sk#63, c_first_name#64, c_last_name#65] +Output [4]: [ws_quantity#45, ws_list_price#46, c_first_name#54, c_last_name#55] +Input [6]: [ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, c_customer_sk#53, c_first_name#54, c_last_name#55] (125) HashAggregate [codegen id : 53] -Input [4]: [ws_quantity#53, ws_list_price#54, c_first_name#64, c_last_name#65] -Keys [2]: [c_last_name#65, c_first_name#64] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ws_quantity#53 as decimal(12,2))) * promote_precision(cast(ws_list_price#54 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#66, isEmpty#67] -Results [4]: [c_last_name#65, c_first_name#64, sum#68, isEmpty#69] +Input [4]: [ws_quantity#45, ws_list_price#46, c_first_name#54, c_last_name#55] +Keys [2]: [c_last_name#55, c_first_name#54] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ws_quantity#45 as decimal(12,2))) * promote_precision(cast(ws_list_price#46 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#56, isEmpty#57] +Results [4]: [c_last_name#55, c_first_name#54, sum#58, isEmpty#59] (126) Exchange -Input [4]: [c_last_name#65, c_first_name#64, sum#68, isEmpty#69] -Arguments: hashpartitioning(c_last_name#65, c_first_name#64, 5), ENSURE_REQUIREMENTS, [id=#70] +Input [4]: [c_last_name#55, c_first_name#54, sum#58, isEmpty#59] +Arguments: hashpartitioning(c_last_name#55, c_first_name#54, 5), ENSURE_REQUIREMENTS, [plan_id=11] (127) HashAggregate [codegen id : 54] -Input [4]: [c_last_name#65, c_first_name#64, sum#68, isEmpty#69] -Keys [2]: [c_last_name#65, c_first_name#64] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#53 as decimal(12,2))) * promote_precision(cast(ws_list_price#54 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#53 as decimal(12,2))) * promote_precision(cast(ws_list_price#54 as decimal(12,2)))), DecimalType(18,2)))#71] -Results [3]: [c_last_name#65, c_first_name#64, sum(CheckOverflow((promote_precision(cast(ws_quantity#53 as decimal(12,2))) * promote_precision(cast(ws_list_price#54 as decimal(12,2)))), DecimalType(18,2)))#71 AS sales#72] +Input [4]: [c_last_name#55, c_first_name#54, sum#58, isEmpty#59] +Keys [2]: [c_last_name#55, c_first_name#54] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#45 as decimal(12,2))) * promote_precision(cast(ws_list_price#46 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#45 as decimal(12,2))) * promote_precision(cast(ws_list_price#46 as decimal(12,2)))), DecimalType(18,2)))#60] +Results [3]: [c_last_name#55, c_first_name#54, sum(CheckOverflow((promote_precision(cast(ws_quantity#45 as decimal(12,2))) * promote_precision(cast(ws_list_price#46 as decimal(12,2)))), DecimalType(18,2)))#60 AS sales#61] (128) Union (129) TakeOrderedAndProject -Input [3]: [c_last_name#42, c_first_name#41, sales#50] -Arguments: 100, [c_last_name#42 ASC NULLS FIRST, c_first_name#41 ASC NULLS FIRST, sales#50 ASC NULLS FIRST], [c_last_name#42, c_first_name#41, sales#50] +Input [3]: [c_last_name#36, c_first_name#35, sales#42] +Arguments: 100, [c_last_name#36 ASC NULLS FIRST, c_first_name#35 ASC NULLS FIRST, sales#42 ASC NULLS FIRST], [c_last_name#36, c_first_name#35, sales#42] ===== Subqueries ===== @@ -725,28 +725,28 @@ BroadcastExchange (134) (130) Scan parquet default.date_dim -Output [3]: [d_date_sk#39, d_year#73, d_moy#74] +Output [3]: [d_date_sk#33, d_year#62, d_moy#63] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2000), EqualTo(d_moy,2), IsNotNull(d_date_sk)] ReadSchema: struct (131) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#39, d_year#73, d_moy#74] +Input [3]: [d_date_sk#33, d_year#62, d_moy#63] (132) Filter [codegen id : 1] -Input [3]: [d_date_sk#39, d_year#73, d_moy#74] -Condition : ((((isnotnull(d_year#73) AND isnotnull(d_moy#74)) AND (d_year#73 = 2000)) AND (d_moy#74 = 2)) AND isnotnull(d_date_sk#39)) +Input [3]: [d_date_sk#33, d_year#62, d_moy#63] +Condition : ((((isnotnull(d_year#62) AND isnotnull(d_moy#63)) AND (d_year#62 = 2000)) AND (d_moy#63 = 2)) AND isnotnull(d_date_sk#33)) (133) Project [codegen id : 1] -Output [1]: [d_date_sk#39] -Input [3]: [d_date_sk#39, d_year#73, d_moy#74] +Output [1]: [d_date_sk#33] +Input [3]: [d_date_sk#33, d_year#62, d_moy#63] (134) BroadcastExchange -Input [1]: [d_date_sk#39] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#75] +Input [1]: [d_date_sk#33] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] -Subquery:2 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#9 IN dynamicpruning#10 +Subquery:2 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 BroadcastExchange (139) +- * Project (138) +- * Filter (137) @@ -755,28 +755,28 @@ BroadcastExchange (139) (135) Scan parquet default.date_dim -Output [3]: [d_date_sk#11, d_date#12, d_year#76] +Output [3]: [d_date_sk#10, d_date#11, d_year#64] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_year, [2000,2001,2002,2003]), IsNotNull(d_date_sk)] ReadSchema: struct (136) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#11, d_date#12, d_year#76] +Input [3]: [d_date_sk#10, d_date#11, d_year#64] (137) Filter [codegen id : 1] -Input [3]: [d_date_sk#11, d_date#12, d_year#76] -Condition : (d_year#76 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#11)) +Input [3]: [d_date_sk#10, d_date#11, d_year#64] +Condition : (d_year#64 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#10)) (138) Project [codegen id : 1] -Output [2]: [d_date_sk#11, d_date#12] -Input [3]: [d_date_sk#11, d_date#12, d_year#76] +Output [2]: [d_date_sk#10, d_date#11] +Input [3]: [d_date_sk#10, d_date#11, d_year#64] (139) BroadcastExchange -Input [2]: [d_date_sk#11, d_date#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#77] +Input [2]: [d_date_sk#10, d_date#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=13] -Subquery:3 Hosting operator id = 45 Hosting Expression = Subquery scalar-subquery#37, [id=#38] +Subquery:3 Hosting operator id = 45 Hosting Expression = Subquery scalar-subquery#31, [id=#32] * HashAggregate (156) +- Exchange (155) +- * HashAggregate (154) @@ -797,89 +797,89 @@ Subquery:3 Hosting operator id = 45 Hosting Expression = Subquery scalar-subquer (140) Scan parquet default.store_sales -Output [4]: [ss_customer_sk#78, ss_quantity#79, ss_sales_price#80, ss_sold_date_sk#81] +Output [4]: [ss_customer_sk#65, ss_quantity#66, ss_sales_price#67, ss_sold_date_sk#68] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#81), dynamicpruningexpression(ss_sold_date_sk#81 IN dynamicpruning#82)] +PartitionFilters: [isnotnull(ss_sold_date_sk#68), dynamicpruningexpression(ss_sold_date_sk#68 IN dynamicpruning#69)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (141) ColumnarToRow [codegen id : 2] -Input [4]: [ss_customer_sk#78, ss_quantity#79, ss_sales_price#80, ss_sold_date_sk#81] +Input [4]: [ss_customer_sk#65, ss_quantity#66, ss_sales_price#67, ss_sold_date_sk#68] (142) Filter [codegen id : 2] -Input [4]: [ss_customer_sk#78, ss_quantity#79, ss_sales_price#80, ss_sold_date_sk#81] -Condition : isnotnull(ss_customer_sk#78) +Input [4]: [ss_customer_sk#65, ss_quantity#66, ss_sales_price#67, ss_sold_date_sk#68] +Condition : isnotnull(ss_customer_sk#65) (143) ReusedExchange [Reuses operator id: 161] -Output [1]: [d_date_sk#83] +Output [1]: [d_date_sk#70] (144) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [ss_sold_date_sk#81] -Right keys [1]: [d_date_sk#83] +Left keys [1]: [ss_sold_date_sk#68] +Right keys [1]: [d_date_sk#70] Join condition: None (145) Project [codegen id : 2] -Output [3]: [ss_customer_sk#78, ss_quantity#79, ss_sales_price#80] -Input [5]: [ss_customer_sk#78, ss_quantity#79, ss_sales_price#80, ss_sold_date_sk#81, d_date_sk#83] +Output [3]: [ss_customer_sk#65, ss_quantity#66, ss_sales_price#67] +Input [5]: [ss_customer_sk#65, ss_quantity#66, ss_sales_price#67, ss_sold_date_sk#68, d_date_sk#70] (146) Exchange -Input [3]: [ss_customer_sk#78, ss_quantity#79, ss_sales_price#80] -Arguments: hashpartitioning(ss_customer_sk#78, 5), ENSURE_REQUIREMENTS, [id=#84] +Input [3]: [ss_customer_sk#65, ss_quantity#66, ss_sales_price#67] +Arguments: hashpartitioning(ss_customer_sk#65, 5), ENSURE_REQUIREMENTS, [plan_id=14] (147) Sort [codegen id : 3] -Input [3]: [ss_customer_sk#78, ss_quantity#79, ss_sales_price#80] -Arguments: [ss_customer_sk#78 ASC NULLS FIRST], false, 0 +Input [3]: [ss_customer_sk#65, ss_quantity#66, ss_sales_price#67] +Arguments: [ss_customer_sk#65 ASC NULLS FIRST], false, 0 (148) ReusedExchange [Reuses operator id: 39] -Output [1]: [c_customer_sk#85] +Output [1]: [c_customer_sk#71] (149) Sort [codegen id : 5] -Input [1]: [c_customer_sk#85] -Arguments: [c_customer_sk#85 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#71] +Arguments: [c_customer_sk#71 ASC NULLS FIRST], false, 0 (150) SortMergeJoin [codegen id : 6] -Left keys [1]: [ss_customer_sk#78] -Right keys [1]: [c_customer_sk#85] +Left keys [1]: [ss_customer_sk#65] +Right keys [1]: [c_customer_sk#71] Join condition: None (151) Project [codegen id : 6] -Output [3]: [ss_quantity#79, ss_sales_price#80, c_customer_sk#85] -Input [4]: [ss_customer_sk#78, ss_quantity#79, ss_sales_price#80, c_customer_sk#85] +Output [3]: [ss_quantity#66, ss_sales_price#67, c_customer_sk#71] +Input [4]: [ss_customer_sk#65, ss_quantity#66, ss_sales_price#67, c_customer_sk#71] (152) HashAggregate [codegen id : 6] -Input [3]: [ss_quantity#79, ss_sales_price#80, c_customer_sk#85] -Keys [1]: [c_customer_sk#85] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#79 as decimal(12,2))) * promote_precision(cast(ss_sales_price#80 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#86, isEmpty#87] -Results [3]: [c_customer_sk#85, sum#88, isEmpty#89] +Input [3]: [ss_quantity#66, ss_sales_price#67, c_customer_sk#71] +Keys [1]: [c_customer_sk#71] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#66 as decimal(12,2))) * promote_precision(cast(ss_sales_price#67 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#72, isEmpty#73] +Results [3]: [c_customer_sk#71, sum#74, isEmpty#75] (153) HashAggregate [codegen id : 6] -Input [3]: [c_customer_sk#85, sum#88, isEmpty#89] -Keys [1]: [c_customer_sk#85] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#79 as decimal(12,2))) * promote_precision(cast(ss_sales_price#80 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#79 as decimal(12,2))) * promote_precision(cast(ss_sales_price#80 as decimal(12,2)))), DecimalType(18,2)))#90] -Results [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#79 as decimal(12,2))) * promote_precision(cast(ss_sales_price#80 as decimal(12,2)))), DecimalType(18,2)))#90 AS csales#91] +Input [3]: [c_customer_sk#71, sum#74, isEmpty#75] +Keys [1]: [c_customer_sk#71] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#66 as decimal(12,2))) * promote_precision(cast(ss_sales_price#67 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#66 as decimal(12,2))) * promote_precision(cast(ss_sales_price#67 as decimal(12,2)))), DecimalType(18,2)))#76] +Results [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#66 as decimal(12,2))) * promote_precision(cast(ss_sales_price#67 as decimal(12,2)))), DecimalType(18,2)))#76 AS csales#77] (154) HashAggregate [codegen id : 6] -Input [1]: [csales#91] +Input [1]: [csales#77] Keys: [] -Functions [1]: [partial_max(csales#91)] -Aggregate Attributes [1]: [max#92] -Results [1]: [max#93] +Functions [1]: [partial_max(csales#77)] +Aggregate Attributes [1]: [max#78] +Results [1]: [max#79] (155) Exchange -Input [1]: [max#93] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#94] +Input [1]: [max#79] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=15] (156) HashAggregate [codegen id : 7] -Input [1]: [max#93] +Input [1]: [max#79] Keys: [] -Functions [1]: [max(csales#91)] -Aggregate Attributes [1]: [max(csales#91)#95] -Results [1]: [max(csales#91)#95 AS tpcds_cmax#96] +Functions [1]: [max(csales#77)] +Aggregate Attributes [1]: [max(csales#77)#80] +Results [1]: [max(csales#77)#80 AS tpcds_cmax#81] -Subquery:4 Hosting operator id = 140 Hosting Expression = ss_sold_date_sk#81 IN dynamicpruning#82 +Subquery:4 Hosting operator id = 140 Hosting Expression = ss_sold_date_sk#68 IN dynamicpruning#69 BroadcastExchange (161) +- * Project (160) +- * Filter (159) @@ -888,33 +888,33 @@ BroadcastExchange (161) (157) Scan parquet default.date_dim -Output [2]: [d_date_sk#83, d_year#97] +Output [2]: [d_date_sk#70, d_year#82] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_year, [2000,2001,2002,2003]), IsNotNull(d_date_sk)] ReadSchema: struct (158) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#83, d_year#97] +Input [2]: [d_date_sk#70, d_year#82] (159) Filter [codegen id : 1] -Input [2]: [d_date_sk#83, d_year#97] -Condition : (d_year#97 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#83)) +Input [2]: [d_date_sk#70, d_year#82] +Condition : (d_year#82 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#70)) (160) Project [codegen id : 1] -Output [1]: [d_date_sk#83] -Input [2]: [d_date_sk#83, d_year#97] +Output [1]: [d_date_sk#70] +Input [2]: [d_date_sk#70, d_year#82] (161) BroadcastExchange -Input [1]: [d_date_sk#83] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#98] +Input [1]: [d_date_sk#70] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=16] -Subquery:5 Hosting operator id = 65 Hosting Expression = ReusedSubquery Subquery scalar-subquery#37, [id=#38] +Subquery:5 Hosting operator id = 65 Hosting Expression = ReusedSubquery Subquery scalar-subquery#31, [id=#32] -Subquery:6 Hosting operator id = 74 Hosting Expression = ws_sold_date_sk#55 IN dynamicpruning#6 +Subquery:6 Hosting operator id = 74 Hosting Expression = ws_sold_date_sk#47 IN dynamicpruning#6 -Subquery:7 Hosting operator id = 102 Hosting Expression = ReusedSubquery Subquery scalar-subquery#37, [id=#38] +Subquery:7 Hosting operator id = 102 Hosting Expression = ReusedSubquery Subquery scalar-subquery#31, [id=#32] -Subquery:8 Hosting operator id = 119 Hosting Expression = ReusedSubquery Subquery scalar-subquery#37, [id=#38] +Subquery:8 Hosting operator id = 119 Hosting Expression = ReusedSubquery Subquery scalar-subquery#31, [id=#32] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b/explain.txt index bea457e24dca9..a688a3d70f2a0 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q23b/explain.txt @@ -146,7 +146,7 @@ Condition : isnotnull(i_item_sk#12) (13) BroadcastExchange Input [2]: [i_item_sk#12, i_item_desc#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (14) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#7] @@ -154,42 +154,42 @@ Right keys [1]: [i_item_sk#12] Join condition: None (15) Project [codegen id : 3] -Output [3]: [d_date#11, i_item_sk#12, substr(i_item_desc#13, 1, 30) AS _groupingexpression#15] +Output [3]: [d_date#11, i_item_sk#12, substr(i_item_desc#13, 1, 30) AS _groupingexpression#14] Input [4]: [ss_item_sk#7, d_date#11, i_item_sk#12, i_item_desc#13] (16) HashAggregate [codegen id : 3] -Input [3]: [d_date#11, i_item_sk#12, _groupingexpression#15] -Keys [3]: [_groupingexpression#15, i_item_sk#12, d_date#11] +Input [3]: [d_date#11, i_item_sk#12, _groupingexpression#14] +Keys [3]: [_groupingexpression#14, i_item_sk#12, d_date#11] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#16] -Results [4]: [_groupingexpression#15, i_item_sk#12, d_date#11, count#17] +Aggregate Attributes [1]: [count#15] +Results [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16] (17) Exchange -Input [4]: [_groupingexpression#15, i_item_sk#12, d_date#11, count#17] -Arguments: hashpartitioning(_groupingexpression#15, i_item_sk#12, d_date#11, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16] +Arguments: hashpartitioning(_groupingexpression#14, i_item_sk#12, d_date#11, 5), ENSURE_REQUIREMENTS, [plan_id=2] (18) HashAggregate [codegen id : 4] -Input [4]: [_groupingexpression#15, i_item_sk#12, d_date#11, count#17] -Keys [3]: [_groupingexpression#15, i_item_sk#12, d_date#11] +Input [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16] +Keys [3]: [_groupingexpression#14, i_item_sk#12, d_date#11] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#19] -Results [2]: [i_item_sk#12 AS item_sk#20, count(1)#19 AS cnt#21] +Aggregate Attributes [1]: [count(1)#17] +Results [2]: [i_item_sk#12 AS item_sk#18, count(1)#17 AS cnt#19] (19) Filter [codegen id : 4] -Input [2]: [item_sk#20, cnt#21] -Condition : (cnt#21 > 4) +Input [2]: [item_sk#18, cnt#19] +Condition : (cnt#19 > 4) (20) Project [codegen id : 4] -Output [1]: [item_sk#20] -Input [2]: [item_sk#20, cnt#21] +Output [1]: [item_sk#18] +Input [2]: [item_sk#18, cnt#19] (21) BroadcastExchange -Input [1]: [item_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [item_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (22) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_item_sk#2] -Right keys [1]: [item_sk#20] +Right keys [1]: [item_sk#18] Join condition: None (23) Project [codegen id : 5] @@ -198,293 +198,293 @@ Input [5]: [cs_bill_customer_sk#1, cs_item_sk#2, cs_quantity#3, cs_list_price#4, (24) Exchange Input [4]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] -Arguments: hashpartitioning(cs_bill_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#23] +Arguments: hashpartitioning(cs_bill_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=4] (25) Sort [codegen id : 6] Input [4]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5] Arguments: [cs_bill_customer_sk#1 ASC NULLS FIRST], false, 0 (26) Scan parquet default.store_sales -Output [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] +Output [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 8] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] (28) Filter [codegen id : 8] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] -Condition : isnotnull(ss_customer_sk#24) +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] +Condition : isnotnull(ss_customer_sk#20) (29) Project [codegen id : 8] -Output [3]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, ss_sold_date_sk#27] +Output [3]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, ss_sold_date_sk#23] (30) Scan parquet default.customer -Output [1]: [c_customer_sk#28] +Output [1]: [c_customer_sk#24] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 7] -Input [1]: [c_customer_sk#28] +Input [1]: [c_customer_sk#24] (32) Filter [codegen id : 7] -Input [1]: [c_customer_sk#28] -Condition : isnotnull(c_customer_sk#28) +Input [1]: [c_customer_sk#24] +Condition : isnotnull(c_customer_sk#24) (33) BroadcastExchange -Input [1]: [c_customer_sk#28] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#29] +Input [1]: [c_customer_sk#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ss_customer_sk#24] -Right keys [1]: [c_customer_sk#28] +Left keys [1]: [ss_customer_sk#20] +Right keys [1]: [c_customer_sk#24] Join condition: None (35) Project [codegen id : 8] -Output [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#28] -Input [4]: [ss_customer_sk#24, ss_quantity#25, ss_sales_price#26, c_customer_sk#28] +Output [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Input [4]: [ss_customer_sk#20, ss_quantity#21, ss_sales_price#22, c_customer_sk#24] (36) HashAggregate [codegen id : 8] -Input [3]: [ss_quantity#25, ss_sales_price#26, c_customer_sk#28] -Keys [1]: [c_customer_sk#28] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#30, isEmpty#31] -Results [3]: [c_customer_sk#28, sum#32, isEmpty#33] +Input [3]: [ss_quantity#21, ss_sales_price#22, c_customer_sk#24] +Keys [1]: [c_customer_sk#24] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#25, isEmpty#26] +Results [3]: [c_customer_sk#24, sum#27, isEmpty#28] (37) Exchange -Input [3]: [c_customer_sk#28, sum#32, isEmpty#33] -Arguments: hashpartitioning(c_customer_sk#28, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [3]: [c_customer_sk#24, sum#27, isEmpty#28] +Arguments: hashpartitioning(c_customer_sk#24, 5), ENSURE_REQUIREMENTS, [plan_id=6] (38) HashAggregate [codegen id : 9] -Input [3]: [c_customer_sk#28, sum#32, isEmpty#33] -Keys [1]: [c_customer_sk#28] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35] -Results [2]: [c_customer_sk#28, sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35 AS ssales#36] +Input [3]: [c_customer_sk#24, sum#27, isEmpty#28] +Keys [1]: [c_customer_sk#24] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29] +Results [2]: [c_customer_sk#24, sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29 AS ssales#30] (39) Filter [codegen id : 9] -Input [2]: [c_customer_sk#28, ssales#36] -Condition : (isnotnull(ssales#36) AND (cast(ssales#36 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(Subquery scalar-subquery#37, [id=#38] as decimal(32,6)))), DecimalType(38,8)))) +Input [2]: [c_customer_sk#24, ssales#30] +Condition : (isnotnull(ssales#30) AND (cast(ssales#30 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(Subquery scalar-subquery#31, [id=#32] as decimal(32,6)))), DecimalType(38,8)))) (40) Project [codegen id : 9] -Output [1]: [c_customer_sk#28] -Input [2]: [c_customer_sk#28, ssales#36] +Output [1]: [c_customer_sk#24] +Input [2]: [c_customer_sk#24, ssales#30] (41) Sort [codegen id : 9] -Input [1]: [c_customer_sk#28] -Arguments: [c_customer_sk#28 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (42) SortMergeJoin [codegen id : 17] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#28] +Right keys [1]: [c_customer_sk#24] Join condition: None (43) Scan parquet default.customer -Output [3]: [c_customer_sk#39, c_first_name#40, c_last_name#41] +Output [3]: [c_customer_sk#33, c_first_name#34, c_last_name#35] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 10] -Input [3]: [c_customer_sk#39, c_first_name#40, c_last_name#41] +Input [3]: [c_customer_sk#33, c_first_name#34, c_last_name#35] (45) Filter [codegen id : 10] -Input [3]: [c_customer_sk#39, c_first_name#40, c_last_name#41] -Condition : isnotnull(c_customer_sk#39) +Input [3]: [c_customer_sk#33, c_first_name#34, c_last_name#35] +Condition : isnotnull(c_customer_sk#33) (46) Exchange -Input [3]: [c_customer_sk#39, c_first_name#40, c_last_name#41] -Arguments: hashpartitioning(c_customer_sk#39, 5), ENSURE_REQUIREMENTS, [id=#42] +Input [3]: [c_customer_sk#33, c_first_name#34, c_last_name#35] +Arguments: hashpartitioning(c_customer_sk#33, 5), ENSURE_REQUIREMENTS, [plan_id=7] (47) Sort [codegen id : 11] -Input [3]: [c_customer_sk#39, c_first_name#40, c_last_name#41] -Arguments: [c_customer_sk#39 ASC NULLS FIRST], false, 0 +Input [3]: [c_customer_sk#33, c_first_name#34, c_last_name#35] +Arguments: [c_customer_sk#33 ASC NULLS FIRST], false, 0 (48) ReusedExchange [Reuses operator id: 37] -Output [3]: [c_customer_sk#28, sum#32, isEmpty#33] +Output [3]: [c_customer_sk#24, sum#27, isEmpty#28] (49) HashAggregate [codegen id : 14] -Input [3]: [c_customer_sk#28, sum#32, isEmpty#33] -Keys [1]: [c_customer_sk#28] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35] -Results [2]: [c_customer_sk#28, sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35 AS ssales#36] +Input [3]: [c_customer_sk#24, sum#27, isEmpty#28] +Keys [1]: [c_customer_sk#24] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29] +Results [2]: [c_customer_sk#24, sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29 AS ssales#30] (50) Filter [codegen id : 14] -Input [2]: [c_customer_sk#28, ssales#36] -Condition : (isnotnull(ssales#36) AND (cast(ssales#36 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(ReusedSubquery Subquery scalar-subquery#37, [id=#38] as decimal(32,6)))), DecimalType(38,8)))) +Input [2]: [c_customer_sk#24, ssales#30] +Condition : (isnotnull(ssales#30) AND (cast(ssales#30 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(ReusedSubquery Subquery scalar-subquery#31, [id=#32] as decimal(32,6)))), DecimalType(38,8)))) (51) Project [codegen id : 14] -Output [1]: [c_customer_sk#28] -Input [2]: [c_customer_sk#28, ssales#36] +Output [1]: [c_customer_sk#24] +Input [2]: [c_customer_sk#24, ssales#30] (52) Sort [codegen id : 14] -Input [1]: [c_customer_sk#28] -Arguments: [c_customer_sk#28 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (53) SortMergeJoin [codegen id : 15] -Left keys [1]: [c_customer_sk#39] -Right keys [1]: [c_customer_sk#28] +Left keys [1]: [c_customer_sk#33] +Right keys [1]: [c_customer_sk#24] Join condition: None (54) BroadcastExchange -Input [3]: [c_customer_sk#39, c_first_name#40, c_last_name#41] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#43] +Input [3]: [c_customer_sk#33, c_first_name#34, c_last_name#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] (55) BroadcastHashJoin [codegen id : 17] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#39] +Right keys [1]: [c_customer_sk#33] Join condition: None (56) Project [codegen id : 17] -Output [5]: [cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5, c_first_name#40, c_last_name#41] -Input [7]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5, c_customer_sk#39, c_first_name#40, c_last_name#41] +Output [5]: [cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5, c_first_name#34, c_last_name#35] +Input [7]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5, c_customer_sk#33, c_first_name#34, c_last_name#35] (57) ReusedExchange [Reuses operator id: 92] -Output [1]: [d_date_sk#44] +Output [1]: [d_date_sk#36] (58) BroadcastHashJoin [codegen id : 17] Left keys [1]: [cs_sold_date_sk#5] -Right keys [1]: [d_date_sk#44] +Right keys [1]: [d_date_sk#36] Join condition: None (59) Project [codegen id : 17] -Output [4]: [cs_quantity#3, cs_list_price#4, c_first_name#40, c_last_name#41] -Input [6]: [cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5, c_first_name#40, c_last_name#41, d_date_sk#44] +Output [4]: [cs_quantity#3, cs_list_price#4, c_first_name#34, c_last_name#35] +Input [6]: [cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5, c_first_name#34, c_last_name#35, d_date_sk#36] (60) HashAggregate [codegen id : 17] -Input [4]: [cs_quantity#3, cs_list_price#4, c_first_name#40, c_last_name#41] -Keys [2]: [c_last_name#41, c_first_name#40] +Input [4]: [cs_quantity#3, cs_list_price#4, c_first_name#34, c_last_name#35] +Keys [2]: [c_last_name#35, c_first_name#34] Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#45, isEmpty#46] -Results [4]: [c_last_name#41, c_first_name#40, sum#47, isEmpty#48] +Aggregate Attributes [2]: [sum#37, isEmpty#38] +Results [4]: [c_last_name#35, c_first_name#34, sum#39, isEmpty#40] (61) Exchange -Input [4]: [c_last_name#41, c_first_name#40, sum#47, isEmpty#48] -Arguments: hashpartitioning(c_last_name#41, c_first_name#40, 5), ENSURE_REQUIREMENTS, [id=#49] +Input [4]: [c_last_name#35, c_first_name#34, sum#39, isEmpty#40] +Arguments: hashpartitioning(c_last_name#35, c_first_name#34, 5), ENSURE_REQUIREMENTS, [plan_id=9] (62) HashAggregate [codegen id : 18] -Input [4]: [c_last_name#41, c_first_name#40, sum#47, isEmpty#48] -Keys [2]: [c_last_name#41, c_first_name#40] +Input [4]: [c_last_name#35, c_first_name#34, sum#39, isEmpty#40] +Keys [2]: [c_last_name#35, c_first_name#34] Functions [1]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)))#50] -Results [3]: [c_last_name#41, c_first_name#40, sum(CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)))#50 AS sales#51] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)))#41] +Results [3]: [c_last_name#35, c_first_name#34, sum(CheckOverflow((promote_precision(cast(cs_quantity#3 as decimal(12,2))) * promote_precision(cast(cs_list_price#4 as decimal(12,2)))), DecimalType(18,2)))#41 AS sales#42] (63) Scan parquet default.web_sales -Output [5]: [ws_item_sk#52, ws_bill_customer_sk#53, ws_quantity#54, ws_list_price#55, ws_sold_date_sk#56] +Output [5]: [ws_item_sk#43, ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#56), dynamicpruningexpression(ws_sold_date_sk#56 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(ws_sold_date_sk#47), dynamicpruningexpression(ws_sold_date_sk#47 IN dynamicpruning#6)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (64) ColumnarToRow [codegen id : 23] -Input [5]: [ws_item_sk#52, ws_bill_customer_sk#53, ws_quantity#54, ws_list_price#55, ws_sold_date_sk#56] +Input [5]: [ws_item_sk#43, ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] (65) Filter [codegen id : 23] -Input [5]: [ws_item_sk#52, ws_bill_customer_sk#53, ws_quantity#54, ws_list_price#55, ws_sold_date_sk#56] -Condition : isnotnull(ws_bill_customer_sk#53) +Input [5]: [ws_item_sk#43, ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] +Condition : isnotnull(ws_bill_customer_sk#44) (66) ReusedExchange [Reuses operator id: 21] -Output [1]: [item_sk#20] +Output [1]: [item_sk#18] (67) BroadcastHashJoin [codegen id : 23] -Left keys [1]: [ws_item_sk#52] -Right keys [1]: [item_sk#20] +Left keys [1]: [ws_item_sk#43] +Right keys [1]: [item_sk#18] Join condition: None (68) Project [codegen id : 23] -Output [4]: [ws_bill_customer_sk#53, ws_quantity#54, ws_list_price#55, ws_sold_date_sk#56] -Input [5]: [ws_item_sk#52, ws_bill_customer_sk#53, ws_quantity#54, ws_list_price#55, ws_sold_date_sk#56] +Output [4]: [ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] +Input [5]: [ws_item_sk#43, ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] (69) Exchange -Input [4]: [ws_bill_customer_sk#53, ws_quantity#54, ws_list_price#55, ws_sold_date_sk#56] -Arguments: hashpartitioning(ws_bill_customer_sk#53, 5), ENSURE_REQUIREMENTS, [id=#57] +Input [4]: [ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] +Arguments: hashpartitioning(ws_bill_customer_sk#44, 5), ENSURE_REQUIREMENTS, [plan_id=10] (70) Sort [codegen id : 24] -Input [4]: [ws_bill_customer_sk#53, ws_quantity#54, ws_list_price#55, ws_sold_date_sk#56] -Arguments: [ws_bill_customer_sk#53 ASC NULLS FIRST], false, 0 +Input [4]: [ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47] +Arguments: [ws_bill_customer_sk#44 ASC NULLS FIRST], false, 0 (71) ReusedExchange [Reuses operator id: 37] -Output [3]: [c_customer_sk#28, sum#58, isEmpty#59] +Output [3]: [c_customer_sk#24, sum#48, isEmpty#49] (72) HashAggregate [codegen id : 27] -Input [3]: [c_customer_sk#28, sum#58, isEmpty#59] -Keys [1]: [c_customer_sk#28] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35] -Results [2]: [c_customer_sk#28, sum(CheckOverflow((promote_precision(cast(ss_quantity#25 as decimal(12,2))) * promote_precision(cast(ss_sales_price#26 as decimal(12,2)))), DecimalType(18,2)))#35 AS ssales#36] +Input [3]: [c_customer_sk#24, sum#48, isEmpty#49] +Keys [1]: [c_customer_sk#24] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29] +Results [2]: [c_customer_sk#24, sum(CheckOverflow((promote_precision(cast(ss_quantity#21 as decimal(12,2))) * promote_precision(cast(ss_sales_price#22 as decimal(12,2)))), DecimalType(18,2)))#29 AS ssales#30] (73) Filter [codegen id : 27] -Input [2]: [c_customer_sk#28, ssales#36] -Condition : (isnotnull(ssales#36) AND (cast(ssales#36 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(ReusedSubquery Subquery scalar-subquery#37, [id=#38] as decimal(32,6)))), DecimalType(38,8)))) +Input [2]: [c_customer_sk#24, ssales#30] +Condition : (isnotnull(ssales#30) AND (cast(ssales#30 as decimal(38,8)) > CheckOverflow((0.500000 * promote_precision(cast(ReusedSubquery Subquery scalar-subquery#31, [id=#32] as decimal(32,6)))), DecimalType(38,8)))) (74) Project [codegen id : 27] -Output [1]: [c_customer_sk#28] -Input [2]: [c_customer_sk#28, ssales#36] +Output [1]: [c_customer_sk#24] +Input [2]: [c_customer_sk#24, ssales#30] (75) Sort [codegen id : 27] -Input [1]: [c_customer_sk#28] -Arguments: [c_customer_sk#28 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#24] +Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 (76) SortMergeJoin [codegen id : 35] -Left keys [1]: [ws_bill_customer_sk#53] -Right keys [1]: [c_customer_sk#28] +Left keys [1]: [ws_bill_customer_sk#44] +Right keys [1]: [c_customer_sk#24] Join condition: None (77) ReusedExchange [Reuses operator id: 54] -Output [3]: [c_customer_sk#60, c_first_name#61, c_last_name#62] +Output [3]: [c_customer_sk#50, c_first_name#51, c_last_name#52] (78) BroadcastHashJoin [codegen id : 35] -Left keys [1]: [ws_bill_customer_sk#53] -Right keys [1]: [c_customer_sk#60] +Left keys [1]: [ws_bill_customer_sk#44] +Right keys [1]: [c_customer_sk#50] Join condition: None (79) Project [codegen id : 35] -Output [5]: [ws_quantity#54, ws_list_price#55, ws_sold_date_sk#56, c_first_name#61, c_last_name#62] -Input [7]: [ws_bill_customer_sk#53, ws_quantity#54, ws_list_price#55, ws_sold_date_sk#56, c_customer_sk#60, c_first_name#61, c_last_name#62] +Output [5]: [ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47, c_first_name#51, c_last_name#52] +Input [7]: [ws_bill_customer_sk#44, ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47, c_customer_sk#50, c_first_name#51, c_last_name#52] (80) ReusedExchange [Reuses operator id: 92] -Output [1]: [d_date_sk#63] +Output [1]: [d_date_sk#53] (81) BroadcastHashJoin [codegen id : 35] -Left keys [1]: [ws_sold_date_sk#56] -Right keys [1]: [d_date_sk#63] +Left keys [1]: [ws_sold_date_sk#47] +Right keys [1]: [d_date_sk#53] Join condition: None (82) Project [codegen id : 35] -Output [4]: [ws_quantity#54, ws_list_price#55, c_first_name#61, c_last_name#62] -Input [6]: [ws_quantity#54, ws_list_price#55, ws_sold_date_sk#56, c_first_name#61, c_last_name#62, d_date_sk#63] +Output [4]: [ws_quantity#45, ws_list_price#46, c_first_name#51, c_last_name#52] +Input [6]: [ws_quantity#45, ws_list_price#46, ws_sold_date_sk#47, c_first_name#51, c_last_name#52, d_date_sk#53] (83) HashAggregate [codegen id : 35] -Input [4]: [ws_quantity#54, ws_list_price#55, c_first_name#61, c_last_name#62] -Keys [2]: [c_last_name#62, c_first_name#61] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ws_quantity#54 as decimal(12,2))) * promote_precision(cast(ws_list_price#55 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#64, isEmpty#65] -Results [4]: [c_last_name#62, c_first_name#61, sum#66, isEmpty#67] +Input [4]: [ws_quantity#45, ws_list_price#46, c_first_name#51, c_last_name#52] +Keys [2]: [c_last_name#52, c_first_name#51] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ws_quantity#45 as decimal(12,2))) * promote_precision(cast(ws_list_price#46 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#54, isEmpty#55] +Results [4]: [c_last_name#52, c_first_name#51, sum#56, isEmpty#57] (84) Exchange -Input [4]: [c_last_name#62, c_first_name#61, sum#66, isEmpty#67] -Arguments: hashpartitioning(c_last_name#62, c_first_name#61, 5), ENSURE_REQUIREMENTS, [id=#68] +Input [4]: [c_last_name#52, c_first_name#51, sum#56, isEmpty#57] +Arguments: hashpartitioning(c_last_name#52, c_first_name#51, 5), ENSURE_REQUIREMENTS, [plan_id=11] (85) HashAggregate [codegen id : 36] -Input [4]: [c_last_name#62, c_first_name#61, sum#66, isEmpty#67] -Keys [2]: [c_last_name#62, c_first_name#61] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#54 as decimal(12,2))) * promote_precision(cast(ws_list_price#55 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#54 as decimal(12,2))) * promote_precision(cast(ws_list_price#55 as decimal(12,2)))), DecimalType(18,2)))#69] -Results [3]: [c_last_name#62, c_first_name#61, sum(CheckOverflow((promote_precision(cast(ws_quantity#54 as decimal(12,2))) * promote_precision(cast(ws_list_price#55 as decimal(12,2)))), DecimalType(18,2)))#69 AS sales#70] +Input [4]: [c_last_name#52, c_first_name#51, sum#56, isEmpty#57] +Keys [2]: [c_last_name#52, c_first_name#51] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#45 as decimal(12,2))) * promote_precision(cast(ws_list_price#46 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#45 as decimal(12,2))) * promote_precision(cast(ws_list_price#46 as decimal(12,2)))), DecimalType(18,2)))#58] +Results [3]: [c_last_name#52, c_first_name#51, sum(CheckOverflow((promote_precision(cast(ws_quantity#45 as decimal(12,2))) * promote_precision(cast(ws_list_price#46 as decimal(12,2)))), DecimalType(18,2)))#58 AS sales#59] (86) Union (87) TakeOrderedAndProject -Input [3]: [c_last_name#41, c_first_name#40, sales#51] -Arguments: 100, [c_last_name#41 ASC NULLS FIRST, c_first_name#40 ASC NULLS FIRST, sales#51 ASC NULLS FIRST], [c_last_name#41, c_first_name#40, sales#51] +Input [3]: [c_last_name#35, c_first_name#34, sales#42] +Arguments: 100, [c_last_name#35 ASC NULLS FIRST, c_first_name#34 ASC NULLS FIRST, sales#42 ASC NULLS FIRST], [c_last_name#35, c_first_name#34, sales#42] ===== Subqueries ===== @@ -497,26 +497,26 @@ BroadcastExchange (92) (88) Scan parquet default.date_dim -Output [3]: [d_date_sk#44, d_year#71, d_moy#72] +Output [3]: [d_date_sk#36, d_year#60, d_moy#61] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2000), EqualTo(d_moy,2), IsNotNull(d_date_sk)] ReadSchema: struct (89) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#44, d_year#71, d_moy#72] +Input [3]: [d_date_sk#36, d_year#60, d_moy#61] (90) Filter [codegen id : 1] -Input [3]: [d_date_sk#44, d_year#71, d_moy#72] -Condition : ((((isnotnull(d_year#71) AND isnotnull(d_moy#72)) AND (d_year#71 = 2000)) AND (d_moy#72 = 2)) AND isnotnull(d_date_sk#44)) +Input [3]: [d_date_sk#36, d_year#60, d_moy#61] +Condition : ((((isnotnull(d_year#60) AND isnotnull(d_moy#61)) AND (d_year#60 = 2000)) AND (d_moy#61 = 2)) AND isnotnull(d_date_sk#36)) (91) Project [codegen id : 1] -Output [1]: [d_date_sk#44] -Input [3]: [d_date_sk#44, d_year#71, d_moy#72] +Output [1]: [d_date_sk#36] +Input [3]: [d_date_sk#36, d_year#60, d_moy#61] (92) BroadcastExchange -Input [1]: [d_date_sk#44] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#73] +Input [1]: [d_date_sk#36] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] Subquery:2 Hosting operator id = 4 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 BroadcastExchange (97) @@ -527,28 +527,28 @@ BroadcastExchange (97) (93) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_date#11, d_year#74] +Output [3]: [d_date_sk#10, d_date#11, d_year#62] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_year, [2000,2001,2002,2003]), IsNotNull(d_date_sk)] ReadSchema: struct (94) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_date#11, d_year#74] +Input [3]: [d_date_sk#10, d_date#11, d_year#62] (95) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_date#11, d_year#74] -Condition : (d_year#74 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#10, d_date#11, d_year#62] +Condition : (d_year#62 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#10)) (96) Project [codegen id : 1] Output [2]: [d_date_sk#10, d_date#11] -Input [3]: [d_date_sk#10, d_date#11, d_year#74] +Input [3]: [d_date_sk#10, d_date#11, d_year#62] (97) BroadcastExchange Input [2]: [d_date_sk#10, d_date#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#75] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=13] -Subquery:3 Hosting operator id = 39 Hosting Expression = Subquery scalar-subquery#37, [id=#38] +Subquery:3 Hosting operator id = 39 Hosting Expression = Subquery scalar-subquery#31, [id=#32] * HashAggregate (112) +- Exchange (111) +- * HashAggregate (110) @@ -567,81 +567,81 @@ Subquery:3 Hosting operator id = 39 Hosting Expression = Subquery scalar-subquer (98) Scan parquet default.store_sales -Output [4]: [ss_customer_sk#76, ss_quantity#77, ss_sales_price#78, ss_sold_date_sk#79] +Output [4]: [ss_customer_sk#63, ss_quantity#64, ss_sales_price#65, ss_sold_date_sk#66] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#79), dynamicpruningexpression(ss_sold_date_sk#79 IN dynamicpruning#80)] +PartitionFilters: [isnotnull(ss_sold_date_sk#66), dynamicpruningexpression(ss_sold_date_sk#66 IN dynamicpruning#67)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (99) ColumnarToRow [codegen id : 3] -Input [4]: [ss_customer_sk#76, ss_quantity#77, ss_sales_price#78, ss_sold_date_sk#79] +Input [4]: [ss_customer_sk#63, ss_quantity#64, ss_sales_price#65, ss_sold_date_sk#66] (100) Filter [codegen id : 3] -Input [4]: [ss_customer_sk#76, ss_quantity#77, ss_sales_price#78, ss_sold_date_sk#79] -Condition : isnotnull(ss_customer_sk#76) +Input [4]: [ss_customer_sk#63, ss_quantity#64, ss_sales_price#65, ss_sold_date_sk#66] +Condition : isnotnull(ss_customer_sk#63) (101) ReusedExchange [Reuses operator id: 33] -Output [1]: [c_customer_sk#81] +Output [1]: [c_customer_sk#68] (102) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [ss_customer_sk#76] -Right keys [1]: [c_customer_sk#81] +Left keys [1]: [ss_customer_sk#63] +Right keys [1]: [c_customer_sk#68] Join condition: None (103) Project [codegen id : 3] -Output [4]: [ss_quantity#77, ss_sales_price#78, ss_sold_date_sk#79, c_customer_sk#81] -Input [5]: [ss_customer_sk#76, ss_quantity#77, ss_sales_price#78, ss_sold_date_sk#79, c_customer_sk#81] +Output [4]: [ss_quantity#64, ss_sales_price#65, ss_sold_date_sk#66, c_customer_sk#68] +Input [5]: [ss_customer_sk#63, ss_quantity#64, ss_sales_price#65, ss_sold_date_sk#66, c_customer_sk#68] (104) ReusedExchange [Reuses operator id: 117] -Output [1]: [d_date_sk#82] +Output [1]: [d_date_sk#69] (105) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [ss_sold_date_sk#79] -Right keys [1]: [d_date_sk#82] +Left keys [1]: [ss_sold_date_sk#66] +Right keys [1]: [d_date_sk#69] Join condition: None (106) Project [codegen id : 3] -Output [3]: [ss_quantity#77, ss_sales_price#78, c_customer_sk#81] -Input [5]: [ss_quantity#77, ss_sales_price#78, ss_sold_date_sk#79, c_customer_sk#81, d_date_sk#82] +Output [3]: [ss_quantity#64, ss_sales_price#65, c_customer_sk#68] +Input [5]: [ss_quantity#64, ss_sales_price#65, ss_sold_date_sk#66, c_customer_sk#68, d_date_sk#69] (107) HashAggregate [codegen id : 3] -Input [3]: [ss_quantity#77, ss_sales_price#78, c_customer_sk#81] -Keys [1]: [c_customer_sk#81] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#77 as decimal(12,2))) * promote_precision(cast(ss_sales_price#78 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#83, isEmpty#84] -Results [3]: [c_customer_sk#81, sum#85, isEmpty#86] +Input [3]: [ss_quantity#64, ss_sales_price#65, c_customer_sk#68] +Keys [1]: [c_customer_sk#68] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_sales_price#65 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#70, isEmpty#71] +Results [3]: [c_customer_sk#68, sum#72, isEmpty#73] (108) Exchange -Input [3]: [c_customer_sk#81, sum#85, isEmpty#86] -Arguments: hashpartitioning(c_customer_sk#81, 5), ENSURE_REQUIREMENTS, [id=#87] +Input [3]: [c_customer_sk#68, sum#72, isEmpty#73] +Arguments: hashpartitioning(c_customer_sk#68, 5), ENSURE_REQUIREMENTS, [plan_id=14] (109) HashAggregate [codegen id : 4] -Input [3]: [c_customer_sk#81, sum#85, isEmpty#86] -Keys [1]: [c_customer_sk#81] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#77 as decimal(12,2))) * promote_precision(cast(ss_sales_price#78 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#77 as decimal(12,2))) * promote_precision(cast(ss_sales_price#78 as decimal(12,2)))), DecimalType(18,2)))#88] -Results [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#77 as decimal(12,2))) * promote_precision(cast(ss_sales_price#78 as decimal(12,2)))), DecimalType(18,2)))#88 AS csales#89] +Input [3]: [c_customer_sk#68, sum#72, isEmpty#73] +Keys [1]: [c_customer_sk#68] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_sales_price#65 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_sales_price#65 as decimal(12,2)))), DecimalType(18,2)))#74] +Results [1]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_sales_price#65 as decimal(12,2)))), DecimalType(18,2)))#74 AS csales#75] (110) HashAggregate [codegen id : 4] -Input [1]: [csales#89] +Input [1]: [csales#75] Keys: [] -Functions [1]: [partial_max(csales#89)] -Aggregate Attributes [1]: [max#90] -Results [1]: [max#91] +Functions [1]: [partial_max(csales#75)] +Aggregate Attributes [1]: [max#76] +Results [1]: [max#77] (111) Exchange -Input [1]: [max#91] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#92] +Input [1]: [max#77] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=15] (112) HashAggregate [codegen id : 5] -Input [1]: [max#91] +Input [1]: [max#77] Keys: [] -Functions [1]: [max(csales#89)] -Aggregate Attributes [1]: [max(csales#89)#93] -Results [1]: [max(csales#89)#93 AS tpcds_cmax#94] +Functions [1]: [max(csales#75)] +Aggregate Attributes [1]: [max(csales#75)#78] +Results [1]: [max(csales#75)#78 AS tpcds_cmax#79] -Subquery:4 Hosting operator id = 98 Hosting Expression = ss_sold_date_sk#79 IN dynamicpruning#80 +Subquery:4 Hosting operator id = 98 Hosting Expression = ss_sold_date_sk#66 IN dynamicpruning#67 BroadcastExchange (117) +- * Project (116) +- * Filter (115) @@ -650,31 +650,31 @@ BroadcastExchange (117) (113) Scan parquet default.date_dim -Output [2]: [d_date_sk#82, d_year#95] +Output [2]: [d_date_sk#69, d_year#80] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_year, [2000,2001,2002,2003]), IsNotNull(d_date_sk)] ReadSchema: struct (114) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#82, d_year#95] +Input [2]: [d_date_sk#69, d_year#80] (115) Filter [codegen id : 1] -Input [2]: [d_date_sk#82, d_year#95] -Condition : (d_year#95 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#82)) +Input [2]: [d_date_sk#69, d_year#80] +Condition : (d_year#80 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#69)) (116) Project [codegen id : 1] -Output [1]: [d_date_sk#82] -Input [2]: [d_date_sk#82, d_year#95] +Output [1]: [d_date_sk#69] +Input [2]: [d_date_sk#69, d_year#80] (117) BroadcastExchange -Input [1]: [d_date_sk#82] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#96] +Input [1]: [d_date_sk#69] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=16] -Subquery:5 Hosting operator id = 50 Hosting Expression = ReusedSubquery Subquery scalar-subquery#37, [id=#38] +Subquery:5 Hosting operator id = 50 Hosting Expression = ReusedSubquery Subquery scalar-subquery#31, [id=#32] -Subquery:6 Hosting operator id = 63 Hosting Expression = ws_sold_date_sk#56 IN dynamicpruning#6 +Subquery:6 Hosting operator id = 63 Hosting Expression = ws_sold_date_sk#47 IN dynamicpruning#6 -Subquery:7 Hosting operator id = 73 Hosting Expression = ReusedSubquery Subquery scalar-subquery#37, [id=#38] +Subquery:7 Hosting operator id = 73 Hosting Expression = ReusedSubquery Subquery scalar-subquery#31, [id=#32] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24a.sf100/explain.txt index 7b82aed515f39..5ee962f66e3b7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24a.sf100/explain.txt @@ -84,7 +84,7 @@ Condition : ((isnotnull(i_color#10) AND (i_color#10 = pale )) AND (8) BroadcastExchange Input [6]: [i_item_sk#7, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 2] Left keys [1]: [ss_item_sk#1] @@ -97,187 +97,187 @@ Input [11]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, (11) Exchange Input [10]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] -Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#14] +Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 3] Input [10]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] Arguments: [ss_customer_sk#2 ASC NULLS FIRST], false, 0 (13) Scan parquet default.customer -Output [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] +Output [4]: [c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_birth_country)] ReadSchema: struct (14) ColumnarToRow [codegen id : 4] -Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] +Input [4]: [c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] (15) Filter [codegen id : 4] -Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -Condition : (isnotnull(c_customer_sk#15) AND isnotnull(c_birth_country#18)) +Input [4]: [c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] +Condition : (isnotnull(c_customer_sk#13) AND isnotnull(c_birth_country#16)) (16) Exchange -Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -Arguments: hashpartitioning(c_customer_sk#15, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [4]: [c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] +Arguments: hashpartitioning(c_customer_sk#13, 5), ENSURE_REQUIREMENTS, [plan_id=3] (17) Sort [codegen id : 5] -Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -Arguments: [c_customer_sk#15 ASC NULLS FIRST], false, 0 +Input [4]: [c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] +Arguments: [c_customer_sk#13 ASC NULLS FIRST], false, 0 (18) SortMergeJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#15] +Right keys [1]: [c_customer_sk#13] Join condition: None (19) Project [codegen id : 6] -Output [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] +Output [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] (20) Exchange -Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=4] (21) Sort [codegen id : 7] -Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] +Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] Arguments: [ss_ticket_number#4 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST], false, 0 (22) Scan parquet default.store_returns -Output [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] +Output [3]: [sr_item_sk#17, sr_ticket_number#18, sr_returned_date_sk#19] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 8] -Input [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] +Input [3]: [sr_item_sk#17, sr_ticket_number#18, sr_returned_date_sk#19] (24) Filter [codegen id : 8] -Input [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] -Condition : (isnotnull(sr_ticket_number#22) AND isnotnull(sr_item_sk#21)) +Input [3]: [sr_item_sk#17, sr_ticket_number#18, sr_returned_date_sk#19] +Condition : (isnotnull(sr_ticket_number#18) AND isnotnull(sr_item_sk#17)) (25) Project [codegen id : 8] -Output [2]: [sr_item_sk#21, sr_ticket_number#22] -Input [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] +Output [2]: [sr_item_sk#17, sr_ticket_number#18] +Input [3]: [sr_item_sk#17, sr_ticket_number#18, sr_returned_date_sk#19] (26) Exchange -Input [2]: [sr_item_sk#21, sr_ticket_number#22] -Arguments: hashpartitioning(sr_ticket_number#22, sr_item_sk#21, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [2]: [sr_item_sk#17, sr_ticket_number#18] +Arguments: hashpartitioning(sr_ticket_number#18, sr_item_sk#17, 5), ENSURE_REQUIREMENTS, [plan_id=5] (27) Sort [codegen id : 9] -Input [2]: [sr_item_sk#21, sr_ticket_number#22] -Arguments: [sr_ticket_number#22 ASC NULLS FIRST, sr_item_sk#21 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#17, sr_ticket_number#18] +Arguments: [sr_ticket_number#18 ASC NULLS FIRST, sr_item_sk#17 ASC NULLS FIRST], false, 0 (28) SortMergeJoin [codegen id : 12] Left keys [2]: [ss_ticket_number#4, ss_item_sk#1] -Right keys [2]: [sr_ticket_number#22, sr_item_sk#21] +Right keys [2]: [sr_ticket_number#18, sr_item_sk#17] Join condition: None (29) Project [codegen id : 12] -Output [10]: [ss_store_sk#3, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Input [14]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18, sr_item_sk#21, sr_ticket_number#22] +Output [10]: [ss_store_sk#3, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Input [14]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16, sr_item_sk#17, sr_ticket_number#18] (30) Scan parquet default.store -Output [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] +Output [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct (31) ColumnarToRow [codegen id : 10] -Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] +Input [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] (32) Filter [codegen id : 10] -Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] -Condition : (((isnotnull(s_market_id#27) AND (s_market_id#27 = 8)) AND isnotnull(s_store_sk#25)) AND isnotnull(s_zip#29)) +Input [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] +Condition : (((isnotnull(s_market_id#22) AND (s_market_id#22 = 8)) AND isnotnull(s_store_sk#20)) AND isnotnull(s_zip#24)) (33) Project [codegen id : 10] -Output [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] +Output [4]: [s_store_sk#20, s_store_name#21, s_state#23, s_zip#24] +Input [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] (34) BroadcastExchange -Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -Arguments: HashedRelationBroadcastMode(List(input[3, string, true]),false), [id=#30] +Input [4]: [s_store_sk#20, s_store_name#21, s_state#23, s_zip#24] +Arguments: HashedRelationBroadcastMode(List(input[3, string, true]),false), [plan_id=6] (35) Scan parquet default.customer_address -Output [3]: [ca_state#31, ca_zip#32, ca_country#33] +Output [3]: [ca_state#25, ca_zip#26, ca_country#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct (36) ColumnarToRow -Input [3]: [ca_state#31, ca_zip#32, ca_country#33] +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] (37) Filter -Input [3]: [ca_state#31, ca_zip#32, ca_country#33] -Condition : (isnotnull(ca_country#33) AND isnotnull(ca_zip#32)) +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] +Condition : (isnotnull(ca_country#27) AND isnotnull(ca_zip#26)) (38) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [s_zip#29] -Right keys [1]: [ca_zip#32] +Left keys [1]: [s_zip#24] +Right keys [1]: [ca_zip#26] Join condition: None (39) Project [codegen id : 11] -Output [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#31, ca_country#33] -Input [7]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29, ca_state#31, ca_zip#32, ca_country#33] +Output [5]: [s_store_sk#20, s_store_name#21, s_state#23, ca_state#25, ca_country#27] +Input [7]: [s_store_sk#20, s_store_name#21, s_state#23, s_zip#24, ca_state#25, ca_zip#26, ca_country#27] (40) BroadcastExchange -Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#31, ca_country#33] -Arguments: HashedRelationBroadcastMode(List(input[0, int, true], upper(input[4, string, true])),false), [id=#34] +Input [5]: [s_store_sk#20, s_store_name#21, s_state#23, ca_state#25, ca_country#27] +Arguments: HashedRelationBroadcastMode(List(input[0, int, true], upper(input[4, string, true])),false), [plan_id=7] (41) BroadcastHashJoin [codegen id : 12] -Left keys [2]: [ss_store_sk#3, c_birth_country#18] -Right keys [2]: [s_store_sk#25, upper(ca_country#33)] +Left keys [2]: [ss_store_sk#3, c_birth_country#16] +Right keys [2]: [s_store_sk#20, upper(ca_country#27)] Join condition: None (42) Project [codegen id : 12] -Output [11]: [ss_net_paid#5, s_store_name#26, s_state#28, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, ca_state#31] -Input [15]: [ss_store_sk#3, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18, s_store_sk#25, s_store_name#26, s_state#28, ca_state#31, ca_country#33] +Output [11]: [ss_net_paid#5, s_store_name#21, s_state#23, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, ca_state#25] +Input [15]: [ss_store_sk#3, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16, s_store_sk#20, s_store_name#21, s_state#23, ca_state#25, ca_country#27] (43) HashAggregate [codegen id : 12] -Input [11]: [ss_net_paid#5, s_store_name#26, s_state#28, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, ca_state#31] -Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] +Input [11]: [ss_net_paid#5, s_store_name#21, s_state#23, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, ca_state#25] +Keys [10]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum#35] -Results [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#36] +Aggregate Attributes [1]: [sum#28] +Results [11]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#29] (44) Exchange -Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#36] -Arguments: hashpartitioning(c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, 5), ENSURE_REQUIREMENTS, [id=#37] +Input [11]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#29] +Arguments: hashpartitioning(c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, 5), ENSURE_REQUIREMENTS, [plan_id=8] (45) HashAggregate [codegen id : 13] -Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#36] -Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] +Input [11]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#29] +Keys [10]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] Functions [1]: [sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#38] -Results [4]: [c_last_name#17, c_first_name#16, s_store_name#26, MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#38,17,2) AS netpaid#39] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#30] +Results [4]: [c_last_name#15, c_first_name#14, s_store_name#21, MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#30,17,2) AS netpaid#31] (46) HashAggregate [codegen id : 13] -Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, netpaid#39] -Keys [3]: [c_last_name#17, c_first_name#16, s_store_name#26] -Functions [1]: [partial_sum(netpaid#39)] -Aggregate Attributes [2]: [sum#40, isEmpty#41] -Results [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#42, isEmpty#43] +Input [4]: [c_last_name#15, c_first_name#14, s_store_name#21, netpaid#31] +Keys [3]: [c_last_name#15, c_first_name#14, s_store_name#21] +Functions [1]: [partial_sum(netpaid#31)] +Aggregate Attributes [2]: [sum#32, isEmpty#33] +Results [5]: [c_last_name#15, c_first_name#14, s_store_name#21, sum#34, isEmpty#35] (47) Exchange -Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#42, isEmpty#43] -Arguments: hashpartitioning(c_last_name#17, c_first_name#16, s_store_name#26, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [5]: [c_last_name#15, c_first_name#14, s_store_name#21, sum#34, isEmpty#35] +Arguments: hashpartitioning(c_last_name#15, c_first_name#14, s_store_name#21, 5), ENSURE_REQUIREMENTS, [plan_id=9] (48) HashAggregate [codegen id : 14] -Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#42, isEmpty#43] -Keys [3]: [c_last_name#17, c_first_name#16, s_store_name#26] -Functions [1]: [sum(netpaid#39)] -Aggregate Attributes [1]: [sum(netpaid#39)#45] -Results [4]: [c_last_name#17, c_first_name#16, s_store_name#26, sum(netpaid#39)#45 AS paid#46] +Input [5]: [c_last_name#15, c_first_name#14, s_store_name#21, sum#34, isEmpty#35] +Keys [3]: [c_last_name#15, c_first_name#14, s_store_name#21] +Functions [1]: [sum(netpaid#31)] +Aggregate Attributes [1]: [sum(netpaid#31)#36] +Results [4]: [c_last_name#15, c_first_name#14, s_store_name#21, sum(netpaid#31)#36 AS paid#37] (49) Filter [codegen id : 14] -Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, paid#46] -Condition : (isnotnull(paid#46) AND (cast(paid#46 as decimal(33,8)) > cast(Subquery scalar-subquery#47, [id=#48] as decimal(33,8)))) +Input [4]: [c_last_name#15, c_first_name#14, s_store_name#21, paid#37] +Condition : (isnotnull(paid#37) AND (cast(paid#37 as decimal(33,8)) > cast(Subquery scalar-subquery#38, [id=#39] as decimal(33,8)))) ===== Subqueries ===== -Subquery:1 Hosting operator id = 49 Hosting Expression = Subquery scalar-subquery#47, [id=#48] +Subquery:1 Hosting operator id = 49 Hosting Expression = Subquery scalar-subquery#38, [id=#39] * HashAggregate (96) +- Exchange (95) +- * HashAggregate (94) @@ -346,42 +346,42 @@ Output [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] (54) Scan parquet default.store -Output [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] +Output [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct (55) ColumnarToRow [codegen id : 1] -Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] +Input [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] (56) Filter [codegen id : 1] -Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] -Condition : (((isnotnull(s_market_id#27) AND (s_market_id#27 = 8)) AND isnotnull(s_store_sk#25)) AND isnotnull(s_zip#29)) +Input [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] +Condition : (((isnotnull(s_market_id#22) AND (s_market_id#22 = 8)) AND isnotnull(s_store_sk#20)) AND isnotnull(s_zip#24)) (57) Project [codegen id : 1] -Output [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] +Output [4]: [s_store_sk#20, s_store_name#21, s_state#23, s_zip#24] +Input [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] (58) BroadcastExchange -Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#49] +Input [4]: [s_store_sk#20, s_store_name#21, s_state#23, s_zip#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] (59) BroadcastHashJoin [codegen id : 2] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#25] +Right keys [1]: [s_store_sk#20] Join condition: None (60) Project [codegen id : 2] -Output [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29] -Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] +Output [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24] +Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, s_store_sk#20, s_store_name#21, s_state#23, s_zip#24] (61) Exchange -Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#50] +Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=11] (62) Sort [codegen id : 3] -Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29] +Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (63) Scan parquet default.item @@ -400,7 +400,7 @@ Condition : isnotnull(i_item_sk#7) (66) Exchange Input [6]: [i_item_sk#7, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] -Arguments: hashpartitioning(i_item_sk#7, 5), ENSURE_REQUIREMENTS, [id=#51] +Arguments: hashpartitioning(i_item_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=12] (67) Sort [codegen id : 5] Input [6]: [i_item_sk#7, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] @@ -412,130 +412,130 @@ Right keys [1]: [i_item_sk#7] Join condition: None (69) Project [codegen id : 6] -Output [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] -Input [13]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_item_sk#7, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] +Output [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] +Input [13]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_item_sk#7, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] (70) Exchange -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] -Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#52] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] +Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=13] (71) Sort [codegen id : 7] -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] Arguments: [ss_customer_sk#2 ASC NULLS FIRST], false, 0 (72) ReusedExchange [Reuses operator id: 16] -Output [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] +Output [4]: [c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] (73) Sort [codegen id : 9] -Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -Arguments: [c_customer_sk#15 ASC NULLS FIRST], false, 0 +Input [4]: [c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] +Arguments: [c_customer_sk#13 ASC NULLS FIRST], false, 0 (74) SortMergeJoin [codegen id : 10] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#15] +Right keys [1]: [c_customer_sk#13] Join condition: None (75) Project [codegen id : 10] -Output [14]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Input [16]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] +Output [14]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Input [16]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] (76) Exchange -Input [14]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#53] +Input [14]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=14] (77) Sort [codegen id : 11] -Input [14]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] +Input [14]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] Arguments: [ss_ticket_number#4 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST], false, 0 (78) ReusedExchange [Reuses operator id: 26] -Output [2]: [sr_item_sk#21, sr_ticket_number#22] +Output [2]: [sr_item_sk#17, sr_ticket_number#18] (79) Sort [codegen id : 13] -Input [2]: [sr_item_sk#21, sr_ticket_number#22] -Arguments: [sr_ticket_number#22 ASC NULLS FIRST, sr_item_sk#21 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#17, sr_ticket_number#18] +Arguments: [sr_ticket_number#18 ASC NULLS FIRST, sr_item_sk#17 ASC NULLS FIRST], false, 0 (80) SortMergeJoin [codegen id : 14] Left keys [2]: [ss_ticket_number#4, ss_item_sk#1] -Right keys [2]: [sr_ticket_number#22, sr_item_sk#21] +Right keys [2]: [sr_ticket_number#18, sr_item_sk#17] Join condition: None (81) Project [codegen id : 14] -Output [12]: [ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Input [16]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18, sr_item_sk#21, sr_ticket_number#22] +Output [12]: [ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Input [16]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16, sr_item_sk#17, sr_ticket_number#18] (82) Exchange -Input [12]: [ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Arguments: hashpartitioning(c_birth_country#18, s_zip#29, 5), ENSURE_REQUIREMENTS, [id=#54] +Input [12]: [ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Arguments: hashpartitioning(c_birth_country#16, s_zip#24, 5), ENSURE_REQUIREMENTS, [plan_id=15] (83) Sort [codegen id : 15] -Input [12]: [ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Arguments: [c_birth_country#18 ASC NULLS FIRST, s_zip#29 ASC NULLS FIRST], false, 0 +Input [12]: [ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Arguments: [c_birth_country#16 ASC NULLS FIRST, s_zip#24 ASC NULLS FIRST], false, 0 (84) Scan parquet default.customer_address -Output [3]: [ca_state#31, ca_zip#32, ca_country#33] +Output [3]: [ca_state#25, ca_zip#26, ca_country#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct (85) ColumnarToRow [codegen id : 16] -Input [3]: [ca_state#31, ca_zip#32, ca_country#33] +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] (86) Filter [codegen id : 16] -Input [3]: [ca_state#31, ca_zip#32, ca_country#33] -Condition : (isnotnull(ca_country#33) AND isnotnull(ca_zip#32)) +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] +Condition : (isnotnull(ca_country#27) AND isnotnull(ca_zip#26)) (87) Exchange -Input [3]: [ca_state#31, ca_zip#32, ca_country#33] -Arguments: hashpartitioning(upper(ca_country#33), ca_zip#32, 5), ENSURE_REQUIREMENTS, [id=#55] +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] +Arguments: hashpartitioning(upper(ca_country#27), ca_zip#26, 5), ENSURE_REQUIREMENTS, [plan_id=16] (88) Sort [codegen id : 17] -Input [3]: [ca_state#31, ca_zip#32, ca_country#33] -Arguments: [upper(ca_country#33) ASC NULLS FIRST, ca_zip#32 ASC NULLS FIRST], false, 0 +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] +Arguments: [upper(ca_country#27) ASC NULLS FIRST, ca_zip#26 ASC NULLS FIRST], false, 0 (89) SortMergeJoin [codegen id : 18] -Left keys [2]: [c_birth_country#18, s_zip#29] -Right keys [2]: [upper(ca_country#33), ca_zip#32] +Left keys [2]: [c_birth_country#16, s_zip#24] +Right keys [2]: [upper(ca_country#27), ca_zip#26] Join condition: None (90) Project [codegen id : 18] -Output [11]: [ss_net_paid#5, s_store_name#26, s_state#28, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, ca_state#31] -Input [15]: [ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18, ca_state#31, ca_zip#32, ca_country#33] +Output [11]: [ss_net_paid#5, s_store_name#21, s_state#23, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, ca_state#25] +Input [15]: [ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16, ca_state#25, ca_zip#26, ca_country#27] (91) HashAggregate [codegen id : 18] -Input [11]: [ss_net_paid#5, s_store_name#26, s_state#28, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, ca_state#31] -Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] +Input [11]: [ss_net_paid#5, s_store_name#21, s_state#23, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, ca_state#25] +Keys [10]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum#56] -Results [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#57] +Aggregate Attributes [1]: [sum#40] +Results [11]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#41] (92) Exchange -Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#57] -Arguments: hashpartitioning(c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, 5), ENSURE_REQUIREMENTS, [id=#58] +Input [11]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#41] +Arguments: hashpartitioning(c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, 5), ENSURE_REQUIREMENTS, [plan_id=17] (93) HashAggregate [codegen id : 19] -Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#57] -Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] +Input [11]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#41] +Keys [10]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] Functions [1]: [sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#38] -Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#38,17,2) AS netpaid#39] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#30] +Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#30,17,2) AS netpaid#31] (94) HashAggregate [codegen id : 19] -Input [1]: [netpaid#39] +Input [1]: [netpaid#31] Keys: [] -Functions [1]: [partial_avg(netpaid#39)] -Aggregate Attributes [2]: [sum#59, count#60] -Results [2]: [sum#61, count#62] +Functions [1]: [partial_avg(netpaid#31)] +Aggregate Attributes [2]: [sum#42, count#43] +Results [2]: [sum#44, count#45] (95) Exchange -Input [2]: [sum#61, count#62] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#63] +Input [2]: [sum#44, count#45] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=18] (96) HashAggregate [codegen id : 20] -Input [2]: [sum#61, count#62] +Input [2]: [sum#44, count#45] Keys: [] -Functions [1]: [avg(netpaid#39)] -Aggregate Attributes [1]: [avg(netpaid#39)#64] -Results [1]: [CheckOverflow((0.050000 * promote_precision(avg(netpaid#39)#64)), DecimalType(24,8)) AS (0.05 * avg(netpaid))#65] +Functions [1]: [avg(netpaid#31)] +Aggregate Attributes [1]: [avg(netpaid#31)#46] +Results [1]: [CheckOverflow((0.050000 * promote_precision(avg(netpaid#31)#46)), DecimalType(24,8)) AS (0.05 * avg(netpaid))#47] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24a/explain.txt index d1fa0bd182199..0ee0f297a3e98 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24a/explain.txt @@ -67,202 +67,202 @@ Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, s (5) Exchange Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5] -Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#7] +Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (6) Sort [codegen id : 2] Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5] Arguments: [ss_ticket_number#4 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST], false, 0 (7) Scan parquet default.store_returns -Output [3]: [sr_item_sk#8, sr_ticket_number#9, sr_returned_date_sk#10] +Output [3]: [sr_item_sk#7, sr_ticket_number#8, sr_returned_date_sk#9] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct (8) ColumnarToRow [codegen id : 3] -Input [3]: [sr_item_sk#8, sr_ticket_number#9, sr_returned_date_sk#10] +Input [3]: [sr_item_sk#7, sr_ticket_number#8, sr_returned_date_sk#9] (9) Filter [codegen id : 3] -Input [3]: [sr_item_sk#8, sr_ticket_number#9, sr_returned_date_sk#10] -Condition : (isnotnull(sr_ticket_number#9) AND isnotnull(sr_item_sk#8)) +Input [3]: [sr_item_sk#7, sr_ticket_number#8, sr_returned_date_sk#9] +Condition : (isnotnull(sr_ticket_number#8) AND isnotnull(sr_item_sk#7)) (10) Project [codegen id : 3] -Output [2]: [sr_item_sk#8, sr_ticket_number#9] -Input [3]: [sr_item_sk#8, sr_ticket_number#9, sr_returned_date_sk#10] +Output [2]: [sr_item_sk#7, sr_ticket_number#8] +Input [3]: [sr_item_sk#7, sr_ticket_number#8, sr_returned_date_sk#9] (11) Exchange -Input [2]: [sr_item_sk#8, sr_ticket_number#9] -Arguments: hashpartitioning(sr_ticket_number#9, sr_item_sk#8, 5), ENSURE_REQUIREMENTS, [id=#11] +Input [2]: [sr_item_sk#7, sr_ticket_number#8] +Arguments: hashpartitioning(sr_ticket_number#8, sr_item_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 4] -Input [2]: [sr_item_sk#8, sr_ticket_number#9] -Arguments: [sr_ticket_number#9 ASC NULLS FIRST, sr_item_sk#8 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#7, sr_ticket_number#8] +Arguments: [sr_ticket_number#8 ASC NULLS FIRST, sr_item_sk#7 ASC NULLS FIRST], false, 0 (13) SortMergeJoin [codegen id : 9] Left keys [2]: [ss_ticket_number#4, ss_item_sk#1] -Right keys [2]: [sr_ticket_number#9, sr_item_sk#8] +Right keys [2]: [sr_ticket_number#8, sr_item_sk#7] Join condition: None (14) Project [codegen id : 9] Output [4]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5] -Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, sr_item_sk#8, sr_ticket_number#9] +Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, sr_item_sk#7, sr_ticket_number#8] (15) Scan parquet default.store -Output [5]: [s_store_sk#12, s_store_name#13, s_market_id#14, s_state#15, s_zip#16] +Output [5]: [s_store_sk#10, s_store_name#11, s_market_id#12, s_state#13, s_zip#14] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [5]: [s_store_sk#12, s_store_name#13, s_market_id#14, s_state#15, s_zip#16] +Input [5]: [s_store_sk#10, s_store_name#11, s_market_id#12, s_state#13, s_zip#14] (17) Filter [codegen id : 5] -Input [5]: [s_store_sk#12, s_store_name#13, s_market_id#14, s_state#15, s_zip#16] -Condition : (((isnotnull(s_market_id#14) AND (s_market_id#14 = 8)) AND isnotnull(s_store_sk#12)) AND isnotnull(s_zip#16)) +Input [5]: [s_store_sk#10, s_store_name#11, s_market_id#12, s_state#13, s_zip#14] +Condition : (((isnotnull(s_market_id#12) AND (s_market_id#12 = 8)) AND isnotnull(s_store_sk#10)) AND isnotnull(s_zip#14)) (18) Project [codegen id : 5] -Output [4]: [s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] -Input [5]: [s_store_sk#12, s_store_name#13, s_market_id#14, s_state#15, s_zip#16] +Output [4]: [s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] +Input [5]: [s_store_sk#10, s_store_name#11, s_market_id#12, s_state#13, s_zip#14] (19) BroadcastExchange -Input [4]: [s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Input [4]: [s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (20) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#12] +Right keys [1]: [s_store_sk#10] Join condition: None (21) Project [codegen id : 9] -Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16] -Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5, s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] +Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14] +Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5, s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] (22) Scan parquet default.item -Output [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Output [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_color), EqualTo(i_color,pale ), IsNotNull(i_item_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 6] -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] (24) Filter [codegen id : 6] -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Condition : ((isnotnull(i_color#21) AND (i_color#21 = pale )) AND isnotnull(i_item_sk#18)) +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Condition : ((isnotnull(i_color#18) AND (i_color#18 = pale )) AND isnotnull(i_item_sk#15)) (25) BroadcastExchange -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#24] +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (26) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#18] +Right keys [1]: [i_item_sk#15] Join condition: None (27) Project [codegen id : 9] -Output [10]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Output [10]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] (28) Scan parquet default.customer -Output [4]: [c_customer_sk#25, c_first_name#26, c_last_name#27, c_birth_country#28] +Output [4]: [c_customer_sk#21, c_first_name#22, c_last_name#23, c_birth_country#24] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_birth_country)] ReadSchema: struct (29) ColumnarToRow [codegen id : 7] -Input [4]: [c_customer_sk#25, c_first_name#26, c_last_name#27, c_birth_country#28] +Input [4]: [c_customer_sk#21, c_first_name#22, c_last_name#23, c_birth_country#24] (30) Filter [codegen id : 7] -Input [4]: [c_customer_sk#25, c_first_name#26, c_last_name#27, c_birth_country#28] -Condition : (isnotnull(c_customer_sk#25) AND isnotnull(c_birth_country#28)) +Input [4]: [c_customer_sk#21, c_first_name#22, c_last_name#23, c_birth_country#24] +Condition : (isnotnull(c_customer_sk#21) AND isnotnull(c_birth_country#24)) (31) BroadcastExchange -Input [4]: [c_customer_sk#25, c_first_name#26, c_last_name#27, c_birth_country#28] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#29] +Input [4]: [c_customer_sk#21, c_first_name#22, c_last_name#23, c_birth_country#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (32) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#25] +Right keys [1]: [c_customer_sk#21] Join condition: None (33) Project [codegen id : 9] -Output [12]: [ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, c_birth_country#28] -Input [14]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_customer_sk#25, c_first_name#26, c_last_name#27, c_birth_country#28] +Output [12]: [ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, c_birth_country#24] +Input [14]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_customer_sk#21, c_first_name#22, c_last_name#23, c_birth_country#24] (34) Scan parquet default.customer_address -Output [3]: [ca_state#30, ca_zip#31, ca_country#32] +Output [3]: [ca_state#25, ca_zip#26, ca_country#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct (35) ColumnarToRow [codegen id : 8] -Input [3]: [ca_state#30, ca_zip#31, ca_country#32] +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] (36) Filter [codegen id : 8] -Input [3]: [ca_state#30, ca_zip#31, ca_country#32] -Condition : (isnotnull(ca_country#32) AND isnotnull(ca_zip#31)) +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] +Condition : (isnotnull(ca_country#27) AND isnotnull(ca_zip#26)) (37) BroadcastExchange -Input [3]: [ca_state#30, ca_zip#31, ca_country#32] -Arguments: HashedRelationBroadcastMode(List(upper(input[2, string, false]), input[1, string, false]),false), [id=#33] +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] +Arguments: HashedRelationBroadcastMode(List(upper(input[2, string, false]), input[1, string, false]),false), [plan_id=6] (38) BroadcastHashJoin [codegen id : 9] -Left keys [2]: [c_birth_country#28, s_zip#16] -Right keys [2]: [upper(ca_country#32), ca_zip#31] +Left keys [2]: [c_birth_country#24, s_zip#14] +Right keys [2]: [upper(ca_country#27), ca_zip#26] Join condition: None (39) Project [codegen id : 9] -Output [11]: [ss_net_paid#5, s_store_name#13, s_state#15, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, ca_state#30] -Input [15]: [ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, c_birth_country#28, ca_state#30, ca_zip#31, ca_country#32] +Output [11]: [ss_net_paid#5, s_store_name#11, s_state#13, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, ca_state#25] +Input [15]: [ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, c_birth_country#24, ca_state#25, ca_zip#26, ca_country#27] (40) HashAggregate [codegen id : 9] -Input [11]: [ss_net_paid#5, s_store_name#13, s_state#15, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, ca_state#30] -Keys [10]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20] +Input [11]: [ss_net_paid#5, s_store_name#11, s_state#13, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, ca_state#25] +Keys [10]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17] Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum#34] -Results [11]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#35] +Aggregate Attributes [1]: [sum#28] +Results [11]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#29] (41) Exchange -Input [11]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#35] -Arguments: hashpartitioning(c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [11]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#29] +Arguments: hashpartitioning(c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) HashAggregate [codegen id : 10] -Input [11]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#35] -Keys [10]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20] +Input [11]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#29] +Keys [10]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17] Functions [1]: [sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#37] -Results [4]: [c_last_name#27, c_first_name#26, s_store_name#13, MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#37,17,2) AS netpaid#38] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#30] +Results [4]: [c_last_name#23, c_first_name#22, s_store_name#11, MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#30,17,2) AS netpaid#31] (43) HashAggregate [codegen id : 10] -Input [4]: [c_last_name#27, c_first_name#26, s_store_name#13, netpaid#38] -Keys [3]: [c_last_name#27, c_first_name#26, s_store_name#13] -Functions [1]: [partial_sum(netpaid#38)] -Aggregate Attributes [2]: [sum#39, isEmpty#40] -Results [5]: [c_last_name#27, c_first_name#26, s_store_name#13, sum#41, isEmpty#42] +Input [4]: [c_last_name#23, c_first_name#22, s_store_name#11, netpaid#31] +Keys [3]: [c_last_name#23, c_first_name#22, s_store_name#11] +Functions [1]: [partial_sum(netpaid#31)] +Aggregate Attributes [2]: [sum#32, isEmpty#33] +Results [5]: [c_last_name#23, c_first_name#22, s_store_name#11, sum#34, isEmpty#35] (44) Exchange -Input [5]: [c_last_name#27, c_first_name#26, s_store_name#13, sum#41, isEmpty#42] -Arguments: hashpartitioning(c_last_name#27, c_first_name#26, s_store_name#13, 5), ENSURE_REQUIREMENTS, [id=#43] +Input [5]: [c_last_name#23, c_first_name#22, s_store_name#11, sum#34, isEmpty#35] +Arguments: hashpartitioning(c_last_name#23, c_first_name#22, s_store_name#11, 5), ENSURE_REQUIREMENTS, [plan_id=8] (45) HashAggregate [codegen id : 11] -Input [5]: [c_last_name#27, c_first_name#26, s_store_name#13, sum#41, isEmpty#42] -Keys [3]: [c_last_name#27, c_first_name#26, s_store_name#13] -Functions [1]: [sum(netpaid#38)] -Aggregate Attributes [1]: [sum(netpaid#38)#44] -Results [4]: [c_last_name#27, c_first_name#26, s_store_name#13, sum(netpaid#38)#44 AS paid#45] +Input [5]: [c_last_name#23, c_first_name#22, s_store_name#11, sum#34, isEmpty#35] +Keys [3]: [c_last_name#23, c_first_name#22, s_store_name#11] +Functions [1]: [sum(netpaid#31)] +Aggregate Attributes [1]: [sum(netpaid#31)#36] +Results [4]: [c_last_name#23, c_first_name#22, s_store_name#11, sum(netpaid#31)#36 AS paid#37] (46) Filter [codegen id : 11] -Input [4]: [c_last_name#27, c_first_name#26, s_store_name#13, paid#45] -Condition : (isnotnull(paid#45) AND (cast(paid#45 as decimal(33,8)) > cast(Subquery scalar-subquery#46, [id=#47] as decimal(33,8)))) +Input [4]: [c_last_name#23, c_first_name#22, s_store_name#11, paid#37] +Condition : (isnotnull(paid#37) AND (cast(paid#37 as decimal(33,8)) > cast(Subquery scalar-subquery#38, [id=#39] as decimal(33,8)))) ===== Subqueries ===== -Subquery:1 Hosting operator id = 46 Hosting Expression = Subquery scalar-subquery#46, [id=#47] +Subquery:1 Hosting operator id = 46 Hosting Expression = Subquery scalar-subquery#38, [id=#39] * HashAggregate (73) +- Exchange (72) +- * HashAggregate (71) @@ -300,118 +300,118 @@ Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, s Arguments: [ss_ticket_number#4 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST], false, 0 (49) ReusedExchange [Reuses operator id: 11] -Output [2]: [sr_item_sk#8, sr_ticket_number#9] +Output [2]: [sr_item_sk#7, sr_ticket_number#8] (50) Sort [codegen id : 4] -Input [2]: [sr_item_sk#8, sr_ticket_number#9] -Arguments: [sr_ticket_number#9 ASC NULLS FIRST, sr_item_sk#8 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#7, sr_ticket_number#8] +Arguments: [sr_ticket_number#8 ASC NULLS FIRST, sr_item_sk#7 ASC NULLS FIRST], false, 0 (51) SortMergeJoin [codegen id : 9] Left keys [2]: [ss_ticket_number#4, ss_item_sk#1] -Right keys [2]: [sr_ticket_number#9, sr_item_sk#8] +Right keys [2]: [sr_ticket_number#8, sr_item_sk#7] Join condition: None (52) Project [codegen id : 9] Output [4]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5] -Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, sr_item_sk#8, sr_ticket_number#9] +Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, sr_item_sk#7, sr_ticket_number#8] (53) ReusedExchange [Reuses operator id: 19] -Output [4]: [s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] +Output [4]: [s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] (54) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#12] +Right keys [1]: [s_store_sk#10] Join condition: None (55) Project [codegen id : 9] -Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16] -Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5, s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] +Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14] +Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5, s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] (56) Scan parquet default.item -Output [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Output [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 6] -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] (58) Filter [codegen id : 6] -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Condition : isnotnull(i_item_sk#18) +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Condition : isnotnull(i_item_sk#15) (59) BroadcastExchange -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#48] +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] (60) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#18] +Right keys [1]: [i_item_sk#15] Join condition: None (61) Project [codegen id : 9] -Output [10]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Output [10]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] (62) ReusedExchange [Reuses operator id: 31] -Output [4]: [c_customer_sk#25, c_first_name#26, c_last_name#27, c_birth_country#28] +Output [4]: [c_customer_sk#21, c_first_name#22, c_last_name#23, c_birth_country#24] (63) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#25] +Right keys [1]: [c_customer_sk#21] Join condition: None (64) Project [codegen id : 9] -Output [12]: [ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, c_birth_country#28] -Input [14]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_customer_sk#25, c_first_name#26, c_last_name#27, c_birth_country#28] +Output [12]: [ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, c_birth_country#24] +Input [14]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_customer_sk#21, c_first_name#22, c_last_name#23, c_birth_country#24] (65) ReusedExchange [Reuses operator id: 37] -Output [3]: [ca_state#30, ca_zip#31, ca_country#32] +Output [3]: [ca_state#25, ca_zip#26, ca_country#27] (66) BroadcastHashJoin [codegen id : 9] -Left keys [2]: [c_birth_country#28, s_zip#16] -Right keys [2]: [upper(ca_country#32), ca_zip#31] +Left keys [2]: [c_birth_country#24, s_zip#14] +Right keys [2]: [upper(ca_country#27), ca_zip#26] Join condition: None (67) Project [codegen id : 9] -Output [11]: [ss_net_paid#5, s_store_name#13, s_state#15, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, ca_state#30] -Input [15]: [ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, c_birth_country#28, ca_state#30, ca_zip#31, ca_country#32] +Output [11]: [ss_net_paid#5, s_store_name#11, s_state#13, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, ca_state#25] +Input [15]: [ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, c_birth_country#24, ca_state#25, ca_zip#26, ca_country#27] (68) HashAggregate [codegen id : 9] -Input [11]: [ss_net_paid#5, s_store_name#13, s_state#15, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, ca_state#30] -Keys [10]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20] +Input [11]: [ss_net_paid#5, s_store_name#11, s_state#13, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, ca_state#25] +Keys [10]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17] Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum#49] -Results [11]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#50] +Aggregate Attributes [1]: [sum#40] +Results [11]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#41] (69) Exchange -Input [11]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#50] -Arguments: hashpartitioning(c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [11]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#41] +Arguments: hashpartitioning(c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, 5), ENSURE_REQUIREMENTS, [plan_id=10] (70) HashAggregate [codegen id : 10] -Input [11]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#50] -Keys [10]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20] +Input [11]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#41] +Keys [10]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17] Functions [1]: [sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#37] -Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#37,17,2) AS netpaid#38] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#30] +Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#30,17,2) AS netpaid#31] (71) HashAggregate [codegen id : 10] -Input [1]: [netpaid#38] +Input [1]: [netpaid#31] Keys: [] -Functions [1]: [partial_avg(netpaid#38)] -Aggregate Attributes [2]: [sum#52, count#53] -Results [2]: [sum#54, count#55] +Functions [1]: [partial_avg(netpaid#31)] +Aggregate Attributes [2]: [sum#42, count#43] +Results [2]: [sum#44, count#45] (72) Exchange -Input [2]: [sum#54, count#55] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#56] +Input [2]: [sum#44, count#45] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11] (73) HashAggregate [codegen id : 11] -Input [2]: [sum#54, count#55] +Input [2]: [sum#44, count#45] Keys: [] -Functions [1]: [avg(netpaid#38)] -Aggregate Attributes [1]: [avg(netpaid#38)#57] -Results [1]: [CheckOverflow((0.050000 * promote_precision(avg(netpaid#38)#57)), DecimalType(24,8)) AS (0.05 * avg(netpaid))#58] +Functions [1]: [avg(netpaid#31)] +Aggregate Attributes [1]: [avg(netpaid#31)#46] +Results [1]: [CheckOverflow((0.050000 * promote_precision(avg(netpaid#31)#46)), DecimalType(24,8)) AS (0.05 * avg(netpaid))#47] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24b.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24b.sf100/explain.txt index fa921b7f2b622..9511d6c4f8e31 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24b.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24b.sf100/explain.txt @@ -84,7 +84,7 @@ Condition : ((isnotnull(i_color#10) AND (i_color#10 = chiffon )) AND (8) BroadcastExchange Input [6]: [i_item_sk#7, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 2] Left keys [1]: [ss_item_sk#1] @@ -97,187 +97,187 @@ Input [11]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, (11) Exchange Input [10]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] -Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#14] +Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 3] Input [10]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] Arguments: [ss_customer_sk#2 ASC NULLS FIRST], false, 0 (13) Scan parquet default.customer -Output [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] +Output [4]: [c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_birth_country)] ReadSchema: struct (14) ColumnarToRow [codegen id : 4] -Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] +Input [4]: [c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] (15) Filter [codegen id : 4] -Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -Condition : (isnotnull(c_customer_sk#15) AND isnotnull(c_birth_country#18)) +Input [4]: [c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] +Condition : (isnotnull(c_customer_sk#13) AND isnotnull(c_birth_country#16)) (16) Exchange -Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -Arguments: hashpartitioning(c_customer_sk#15, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [4]: [c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] +Arguments: hashpartitioning(c_customer_sk#13, 5), ENSURE_REQUIREMENTS, [plan_id=3] (17) Sort [codegen id : 5] -Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -Arguments: [c_customer_sk#15 ASC NULLS FIRST], false, 0 +Input [4]: [c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] +Arguments: [c_customer_sk#13 ASC NULLS FIRST], false, 0 (18) SortMergeJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#15] +Right keys [1]: [c_customer_sk#13] Join condition: None (19) Project [codegen id : 6] -Output [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] +Output [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] (20) Exchange -Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=4] (21) Sort [codegen id : 7] -Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] +Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] Arguments: [ss_ticket_number#4 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST], false, 0 (22) Scan parquet default.store_returns -Output [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] +Output [3]: [sr_item_sk#17, sr_ticket_number#18, sr_returned_date_sk#19] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 8] -Input [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] +Input [3]: [sr_item_sk#17, sr_ticket_number#18, sr_returned_date_sk#19] (24) Filter [codegen id : 8] -Input [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] -Condition : (isnotnull(sr_ticket_number#22) AND isnotnull(sr_item_sk#21)) +Input [3]: [sr_item_sk#17, sr_ticket_number#18, sr_returned_date_sk#19] +Condition : (isnotnull(sr_ticket_number#18) AND isnotnull(sr_item_sk#17)) (25) Project [codegen id : 8] -Output [2]: [sr_item_sk#21, sr_ticket_number#22] -Input [3]: [sr_item_sk#21, sr_ticket_number#22, sr_returned_date_sk#23] +Output [2]: [sr_item_sk#17, sr_ticket_number#18] +Input [3]: [sr_item_sk#17, sr_ticket_number#18, sr_returned_date_sk#19] (26) Exchange -Input [2]: [sr_item_sk#21, sr_ticket_number#22] -Arguments: hashpartitioning(sr_ticket_number#22, sr_item_sk#21, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [2]: [sr_item_sk#17, sr_ticket_number#18] +Arguments: hashpartitioning(sr_ticket_number#18, sr_item_sk#17, 5), ENSURE_REQUIREMENTS, [plan_id=5] (27) Sort [codegen id : 9] -Input [2]: [sr_item_sk#21, sr_ticket_number#22] -Arguments: [sr_ticket_number#22 ASC NULLS FIRST, sr_item_sk#21 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#17, sr_ticket_number#18] +Arguments: [sr_ticket_number#18 ASC NULLS FIRST, sr_item_sk#17 ASC NULLS FIRST], false, 0 (28) SortMergeJoin [codegen id : 12] Left keys [2]: [ss_ticket_number#4, ss_item_sk#1] -Right keys [2]: [sr_ticket_number#22, sr_item_sk#21] +Right keys [2]: [sr_ticket_number#18, sr_item_sk#17] Join condition: None (29) Project [codegen id : 12] -Output [10]: [ss_store_sk#3, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Input [14]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18, sr_item_sk#21, sr_ticket_number#22] +Output [10]: [ss_store_sk#3, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Input [14]: [ss_item_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16, sr_item_sk#17, sr_ticket_number#18] (30) Scan parquet default.store -Output [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] +Output [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct (31) ColumnarToRow [codegen id : 10] -Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] +Input [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] (32) Filter [codegen id : 10] -Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] -Condition : (((isnotnull(s_market_id#27) AND (s_market_id#27 = 8)) AND isnotnull(s_store_sk#25)) AND isnotnull(s_zip#29)) +Input [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] +Condition : (((isnotnull(s_market_id#22) AND (s_market_id#22 = 8)) AND isnotnull(s_store_sk#20)) AND isnotnull(s_zip#24)) (33) Project [codegen id : 10] -Output [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] +Output [4]: [s_store_sk#20, s_store_name#21, s_state#23, s_zip#24] +Input [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] (34) BroadcastExchange -Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -Arguments: HashedRelationBroadcastMode(List(input[3, string, true]),false), [id=#30] +Input [4]: [s_store_sk#20, s_store_name#21, s_state#23, s_zip#24] +Arguments: HashedRelationBroadcastMode(List(input[3, string, true]),false), [plan_id=6] (35) Scan parquet default.customer_address -Output [3]: [ca_state#31, ca_zip#32, ca_country#33] +Output [3]: [ca_state#25, ca_zip#26, ca_country#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct (36) ColumnarToRow -Input [3]: [ca_state#31, ca_zip#32, ca_country#33] +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] (37) Filter -Input [3]: [ca_state#31, ca_zip#32, ca_country#33] -Condition : (isnotnull(ca_country#33) AND isnotnull(ca_zip#32)) +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] +Condition : (isnotnull(ca_country#27) AND isnotnull(ca_zip#26)) (38) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [s_zip#29] -Right keys [1]: [ca_zip#32] +Left keys [1]: [s_zip#24] +Right keys [1]: [ca_zip#26] Join condition: None (39) Project [codegen id : 11] -Output [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#31, ca_country#33] -Input [7]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29, ca_state#31, ca_zip#32, ca_country#33] +Output [5]: [s_store_sk#20, s_store_name#21, s_state#23, ca_state#25, ca_country#27] +Input [7]: [s_store_sk#20, s_store_name#21, s_state#23, s_zip#24, ca_state#25, ca_zip#26, ca_country#27] (40) BroadcastExchange -Input [5]: [s_store_sk#25, s_store_name#26, s_state#28, ca_state#31, ca_country#33] -Arguments: HashedRelationBroadcastMode(List(input[0, int, true], upper(input[4, string, true])),false), [id=#34] +Input [5]: [s_store_sk#20, s_store_name#21, s_state#23, ca_state#25, ca_country#27] +Arguments: HashedRelationBroadcastMode(List(input[0, int, true], upper(input[4, string, true])),false), [plan_id=7] (41) BroadcastHashJoin [codegen id : 12] -Left keys [2]: [ss_store_sk#3, c_birth_country#18] -Right keys [2]: [s_store_sk#25, upper(ca_country#33)] +Left keys [2]: [ss_store_sk#3, c_birth_country#16] +Right keys [2]: [s_store_sk#20, upper(ca_country#27)] Join condition: None (42) Project [codegen id : 12] -Output [11]: [ss_net_paid#5, s_store_name#26, s_state#28, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, ca_state#31] -Input [15]: [ss_store_sk#3, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18, s_store_sk#25, s_store_name#26, s_state#28, ca_state#31, ca_country#33] +Output [11]: [ss_net_paid#5, s_store_name#21, s_state#23, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, ca_state#25] +Input [15]: [ss_store_sk#3, ss_net_paid#5, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16, s_store_sk#20, s_store_name#21, s_state#23, ca_state#25, ca_country#27] (43) HashAggregate [codegen id : 12] -Input [11]: [ss_net_paid#5, s_store_name#26, s_state#28, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, ca_state#31] -Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] +Input [11]: [ss_net_paid#5, s_store_name#21, s_state#23, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, ca_state#25] +Keys [10]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum#35] -Results [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#36] +Aggregate Attributes [1]: [sum#28] +Results [11]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#29] (44) Exchange -Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#36] -Arguments: hashpartitioning(c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, 5), ENSURE_REQUIREMENTS, [id=#37] +Input [11]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#29] +Arguments: hashpartitioning(c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, 5), ENSURE_REQUIREMENTS, [plan_id=8] (45) HashAggregate [codegen id : 13] -Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#36] -Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] +Input [11]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#29] +Keys [10]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] Functions [1]: [sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#38] -Results [4]: [c_last_name#17, c_first_name#16, s_store_name#26, MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#38,17,2) AS netpaid#39] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#30] +Results [4]: [c_last_name#15, c_first_name#14, s_store_name#21, MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#30,17,2) AS netpaid#31] (46) HashAggregate [codegen id : 13] -Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, netpaid#39] -Keys [3]: [c_last_name#17, c_first_name#16, s_store_name#26] -Functions [1]: [partial_sum(netpaid#39)] -Aggregate Attributes [2]: [sum#40, isEmpty#41] -Results [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#42, isEmpty#43] +Input [4]: [c_last_name#15, c_first_name#14, s_store_name#21, netpaid#31] +Keys [3]: [c_last_name#15, c_first_name#14, s_store_name#21] +Functions [1]: [partial_sum(netpaid#31)] +Aggregate Attributes [2]: [sum#32, isEmpty#33] +Results [5]: [c_last_name#15, c_first_name#14, s_store_name#21, sum#34, isEmpty#35] (47) Exchange -Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#42, isEmpty#43] -Arguments: hashpartitioning(c_last_name#17, c_first_name#16, s_store_name#26, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [5]: [c_last_name#15, c_first_name#14, s_store_name#21, sum#34, isEmpty#35] +Arguments: hashpartitioning(c_last_name#15, c_first_name#14, s_store_name#21, 5), ENSURE_REQUIREMENTS, [plan_id=9] (48) HashAggregate [codegen id : 14] -Input [5]: [c_last_name#17, c_first_name#16, s_store_name#26, sum#42, isEmpty#43] -Keys [3]: [c_last_name#17, c_first_name#16, s_store_name#26] -Functions [1]: [sum(netpaid#39)] -Aggregate Attributes [1]: [sum(netpaid#39)#45] -Results [4]: [c_last_name#17, c_first_name#16, s_store_name#26, sum(netpaid#39)#45 AS paid#46] +Input [5]: [c_last_name#15, c_first_name#14, s_store_name#21, sum#34, isEmpty#35] +Keys [3]: [c_last_name#15, c_first_name#14, s_store_name#21] +Functions [1]: [sum(netpaid#31)] +Aggregate Attributes [1]: [sum(netpaid#31)#36] +Results [4]: [c_last_name#15, c_first_name#14, s_store_name#21, sum(netpaid#31)#36 AS paid#37] (49) Filter [codegen id : 14] -Input [4]: [c_last_name#17, c_first_name#16, s_store_name#26, paid#46] -Condition : (isnotnull(paid#46) AND (cast(paid#46 as decimal(33,8)) > cast(Subquery scalar-subquery#47, [id=#48] as decimal(33,8)))) +Input [4]: [c_last_name#15, c_first_name#14, s_store_name#21, paid#37] +Condition : (isnotnull(paid#37) AND (cast(paid#37 as decimal(33,8)) > cast(Subquery scalar-subquery#38, [id=#39] as decimal(33,8)))) ===== Subqueries ===== -Subquery:1 Hosting operator id = 49 Hosting Expression = Subquery scalar-subquery#47, [id=#48] +Subquery:1 Hosting operator id = 49 Hosting Expression = Subquery scalar-subquery#38, [id=#39] * HashAggregate (96) +- Exchange (95) +- * HashAggregate (94) @@ -346,42 +346,42 @@ Output [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, ss_sold_date_sk#6] (54) Scan parquet default.store -Output [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] +Output [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct (55) ColumnarToRow [codegen id : 1] -Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] +Input [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] (56) Filter [codegen id : 1] -Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] -Condition : (((isnotnull(s_market_id#27) AND (s_market_id#27 = 8)) AND isnotnull(s_store_sk#25)) AND isnotnull(s_zip#29)) +Input [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] +Condition : (((isnotnull(s_market_id#22) AND (s_market_id#22 = 8)) AND isnotnull(s_store_sk#20)) AND isnotnull(s_zip#24)) (57) Project [codegen id : 1] -Output [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -Input [5]: [s_store_sk#25, s_store_name#26, s_market_id#27, s_state#28, s_zip#29] +Output [4]: [s_store_sk#20, s_store_name#21, s_state#23, s_zip#24] +Input [5]: [s_store_sk#20, s_store_name#21, s_market_id#22, s_state#23, s_zip#24] (58) BroadcastExchange -Input [4]: [s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#49] +Input [4]: [s_store_sk#20, s_store_name#21, s_state#23, s_zip#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] (59) BroadcastHashJoin [codegen id : 2] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#25] +Right keys [1]: [s_store_sk#20] Join condition: None (60) Project [codegen id : 2] -Output [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29] -Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, s_store_sk#25, s_store_name#26, s_state#28, s_zip#29] +Output [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24] +Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, s_store_sk#20, s_store_name#21, s_state#23, s_zip#24] (61) Exchange -Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#50] +Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=11] (62) Sort [codegen id : 3] -Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29] +Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (63) Scan parquet default.item @@ -400,7 +400,7 @@ Condition : isnotnull(i_item_sk#7) (66) Exchange Input [6]: [i_item_sk#7, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] -Arguments: hashpartitioning(i_item_sk#7, 5), ENSURE_REQUIREMENTS, [id=#51] +Arguments: hashpartitioning(i_item_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=12] (67) Sort [codegen id : 5] Input [6]: [i_item_sk#7, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] @@ -412,130 +412,130 @@ Right keys [1]: [i_item_sk#7] Join condition: None (69) Project [codegen id : 6] -Output [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] -Input [13]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_item_sk#7, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] +Output [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] +Input [13]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_item_sk#7, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] (70) Exchange -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] -Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#52] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] +Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=13] (71) Sort [codegen id : 7] -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12] Arguments: [ss_customer_sk#2 ASC NULLS FIRST], false, 0 (72) ReusedExchange [Reuses operator id: 16] -Output [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] +Output [4]: [c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] (73) Sort [codegen id : 9] -Input [4]: [c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] -Arguments: [c_customer_sk#15 ASC NULLS FIRST], false, 0 +Input [4]: [c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] +Arguments: [c_customer_sk#13 ASC NULLS FIRST], false, 0 (74) SortMergeJoin [codegen id : 10] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#15] +Right keys [1]: [c_customer_sk#13] Join condition: None (75) Project [codegen id : 10] -Output [14]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Input [16]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_customer_sk#15, c_first_name#16, c_last_name#17, c_birth_country#18] +Output [14]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Input [16]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_customer_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] (76) Exchange -Input [14]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#53] +Input [14]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=14] (77) Sort [codegen id : 11] -Input [14]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] +Input [14]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] Arguments: [ss_ticket_number#4 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST], false, 0 (78) ReusedExchange [Reuses operator id: 26] -Output [2]: [sr_item_sk#21, sr_ticket_number#22] +Output [2]: [sr_item_sk#17, sr_ticket_number#18] (79) Sort [codegen id : 13] -Input [2]: [sr_item_sk#21, sr_ticket_number#22] -Arguments: [sr_ticket_number#22 ASC NULLS FIRST, sr_item_sk#21 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#17, sr_ticket_number#18] +Arguments: [sr_ticket_number#18 ASC NULLS FIRST, sr_item_sk#17 ASC NULLS FIRST], false, 0 (80) SortMergeJoin [codegen id : 14] Left keys [2]: [ss_ticket_number#4, ss_item_sk#1] -Right keys [2]: [sr_ticket_number#22, sr_item_sk#21] +Right keys [2]: [sr_ticket_number#18, sr_item_sk#17] Join condition: None (81) Project [codegen id : 14] -Output [12]: [ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Input [16]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18, sr_item_sk#21, sr_ticket_number#22] +Output [12]: [ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Input [16]: [ss_item_sk#1, ss_ticket_number#4, ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16, sr_item_sk#17, sr_ticket_number#18] (82) Exchange -Input [12]: [ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Arguments: hashpartitioning(c_birth_country#18, s_zip#29, 5), ENSURE_REQUIREMENTS, [id=#54] +Input [12]: [ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Arguments: hashpartitioning(c_birth_country#16, s_zip#24, 5), ENSURE_REQUIREMENTS, [plan_id=15] (83) Sort [codegen id : 15] -Input [12]: [ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18] -Arguments: [c_birth_country#18 ASC NULLS FIRST, s_zip#29 ASC NULLS FIRST], false, 0 +Input [12]: [ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16] +Arguments: [c_birth_country#16 ASC NULLS FIRST, s_zip#24 ASC NULLS FIRST], false, 0 (84) Scan parquet default.customer_address -Output [3]: [ca_state#31, ca_zip#32, ca_country#33] +Output [3]: [ca_state#25, ca_zip#26, ca_country#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct (85) ColumnarToRow [codegen id : 16] -Input [3]: [ca_state#31, ca_zip#32, ca_country#33] +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] (86) Filter [codegen id : 16] -Input [3]: [ca_state#31, ca_zip#32, ca_country#33] -Condition : (isnotnull(ca_country#33) AND isnotnull(ca_zip#32)) +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] +Condition : (isnotnull(ca_country#27) AND isnotnull(ca_zip#26)) (87) Exchange -Input [3]: [ca_state#31, ca_zip#32, ca_country#33] -Arguments: hashpartitioning(upper(ca_country#33), ca_zip#32, 5), ENSURE_REQUIREMENTS, [id=#55] +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] +Arguments: hashpartitioning(upper(ca_country#27), ca_zip#26, 5), ENSURE_REQUIREMENTS, [plan_id=16] (88) Sort [codegen id : 17] -Input [3]: [ca_state#31, ca_zip#32, ca_country#33] -Arguments: [upper(ca_country#33) ASC NULLS FIRST, ca_zip#32 ASC NULLS FIRST], false, 0 +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] +Arguments: [upper(ca_country#27) ASC NULLS FIRST, ca_zip#26 ASC NULLS FIRST], false, 0 (89) SortMergeJoin [codegen id : 18] -Left keys [2]: [c_birth_country#18, s_zip#29] -Right keys [2]: [upper(ca_country#33), ca_zip#32] +Left keys [2]: [c_birth_country#16, s_zip#24] +Right keys [2]: [upper(ca_country#27), ca_zip#26] Join condition: None (90) Project [codegen id : 18] -Output [11]: [ss_net_paid#5, s_store_name#26, s_state#28, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, ca_state#31] -Input [15]: [ss_net_paid#5, s_store_name#26, s_state#28, s_zip#29, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, c_birth_country#18, ca_state#31, ca_zip#32, ca_country#33] +Output [11]: [ss_net_paid#5, s_store_name#21, s_state#23, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, ca_state#25] +Input [15]: [ss_net_paid#5, s_store_name#21, s_state#23, s_zip#24, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, c_birth_country#16, ca_state#25, ca_zip#26, ca_country#27] (91) HashAggregate [codegen id : 18] -Input [11]: [ss_net_paid#5, s_store_name#26, s_state#28, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#16, c_last_name#17, ca_state#31] -Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] +Input [11]: [ss_net_paid#5, s_store_name#21, s_state#23, i_current_price#8, i_size#9, i_color#10, i_units#11, i_manager_id#12, c_first_name#14, c_last_name#15, ca_state#25] +Keys [10]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum#56] -Results [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#57] +Aggregate Attributes [1]: [sum#40] +Results [11]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#41] (92) Exchange -Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#57] -Arguments: hashpartitioning(c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, 5), ENSURE_REQUIREMENTS, [id=#58] +Input [11]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#41] +Arguments: hashpartitioning(c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, 5), ENSURE_REQUIREMENTS, [plan_id=17] (93) HashAggregate [codegen id : 19] -Input [11]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#57] -Keys [10]: [c_last_name#17, c_first_name#16, s_store_name#26, ca_state#31, s_state#28, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] +Input [11]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9, sum#41] +Keys [10]: [c_last_name#15, c_first_name#14, s_store_name#21, ca_state#25, s_state#23, i_color#10, i_current_price#8, i_manager_id#12, i_units#11, i_size#9] Functions [1]: [sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#38] -Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#38,17,2) AS netpaid#39] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#30] +Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#30,17,2) AS netpaid#31] (94) HashAggregate [codegen id : 19] -Input [1]: [netpaid#39] +Input [1]: [netpaid#31] Keys: [] -Functions [1]: [partial_avg(netpaid#39)] -Aggregate Attributes [2]: [sum#59, count#60] -Results [2]: [sum#61, count#62] +Functions [1]: [partial_avg(netpaid#31)] +Aggregate Attributes [2]: [sum#42, count#43] +Results [2]: [sum#44, count#45] (95) Exchange -Input [2]: [sum#61, count#62] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#63] +Input [2]: [sum#44, count#45] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=18] (96) HashAggregate [codegen id : 20] -Input [2]: [sum#61, count#62] +Input [2]: [sum#44, count#45] Keys: [] -Functions [1]: [avg(netpaid#39)] -Aggregate Attributes [1]: [avg(netpaid#39)#64] -Results [1]: [CheckOverflow((0.050000 * promote_precision(avg(netpaid#39)#64)), DecimalType(24,8)) AS (0.05 * avg(netpaid))#65] +Functions [1]: [avg(netpaid#31)] +Aggregate Attributes [1]: [avg(netpaid#31)#46] +Results [1]: [CheckOverflow((0.050000 * promote_precision(avg(netpaid#31)#46)), DecimalType(24,8)) AS (0.05 * avg(netpaid))#47] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24b/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24b/explain.txt index e1a6c33699efd..cb8f5a3ade315 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24b/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q24b/explain.txt @@ -67,202 +67,202 @@ Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, s (5) Exchange Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5] -Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#7] +Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (6) Sort [codegen id : 2] Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5] Arguments: [ss_ticket_number#4 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST], false, 0 (7) Scan parquet default.store_returns -Output [3]: [sr_item_sk#8, sr_ticket_number#9, sr_returned_date_sk#10] +Output [3]: [sr_item_sk#7, sr_ticket_number#8, sr_returned_date_sk#9] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct (8) ColumnarToRow [codegen id : 3] -Input [3]: [sr_item_sk#8, sr_ticket_number#9, sr_returned_date_sk#10] +Input [3]: [sr_item_sk#7, sr_ticket_number#8, sr_returned_date_sk#9] (9) Filter [codegen id : 3] -Input [3]: [sr_item_sk#8, sr_ticket_number#9, sr_returned_date_sk#10] -Condition : (isnotnull(sr_ticket_number#9) AND isnotnull(sr_item_sk#8)) +Input [3]: [sr_item_sk#7, sr_ticket_number#8, sr_returned_date_sk#9] +Condition : (isnotnull(sr_ticket_number#8) AND isnotnull(sr_item_sk#7)) (10) Project [codegen id : 3] -Output [2]: [sr_item_sk#8, sr_ticket_number#9] -Input [3]: [sr_item_sk#8, sr_ticket_number#9, sr_returned_date_sk#10] +Output [2]: [sr_item_sk#7, sr_ticket_number#8] +Input [3]: [sr_item_sk#7, sr_ticket_number#8, sr_returned_date_sk#9] (11) Exchange -Input [2]: [sr_item_sk#8, sr_ticket_number#9] -Arguments: hashpartitioning(sr_ticket_number#9, sr_item_sk#8, 5), ENSURE_REQUIREMENTS, [id=#11] +Input [2]: [sr_item_sk#7, sr_ticket_number#8] +Arguments: hashpartitioning(sr_ticket_number#8, sr_item_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 4] -Input [2]: [sr_item_sk#8, sr_ticket_number#9] -Arguments: [sr_ticket_number#9 ASC NULLS FIRST, sr_item_sk#8 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#7, sr_ticket_number#8] +Arguments: [sr_ticket_number#8 ASC NULLS FIRST, sr_item_sk#7 ASC NULLS FIRST], false, 0 (13) SortMergeJoin [codegen id : 9] Left keys [2]: [ss_ticket_number#4, ss_item_sk#1] -Right keys [2]: [sr_ticket_number#9, sr_item_sk#8] +Right keys [2]: [sr_ticket_number#8, sr_item_sk#7] Join condition: None (14) Project [codegen id : 9] Output [4]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5] -Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, sr_item_sk#8, sr_ticket_number#9] +Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, sr_item_sk#7, sr_ticket_number#8] (15) Scan parquet default.store -Output [5]: [s_store_sk#12, s_store_name#13, s_market_id#14, s_state#15, s_zip#16] +Output [5]: [s_store_sk#10, s_store_name#11, s_market_id#12, s_state#13, s_zip#14] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [5]: [s_store_sk#12, s_store_name#13, s_market_id#14, s_state#15, s_zip#16] +Input [5]: [s_store_sk#10, s_store_name#11, s_market_id#12, s_state#13, s_zip#14] (17) Filter [codegen id : 5] -Input [5]: [s_store_sk#12, s_store_name#13, s_market_id#14, s_state#15, s_zip#16] -Condition : (((isnotnull(s_market_id#14) AND (s_market_id#14 = 8)) AND isnotnull(s_store_sk#12)) AND isnotnull(s_zip#16)) +Input [5]: [s_store_sk#10, s_store_name#11, s_market_id#12, s_state#13, s_zip#14] +Condition : (((isnotnull(s_market_id#12) AND (s_market_id#12 = 8)) AND isnotnull(s_store_sk#10)) AND isnotnull(s_zip#14)) (18) Project [codegen id : 5] -Output [4]: [s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] -Input [5]: [s_store_sk#12, s_store_name#13, s_market_id#14, s_state#15, s_zip#16] +Output [4]: [s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] +Input [5]: [s_store_sk#10, s_store_name#11, s_market_id#12, s_state#13, s_zip#14] (19) BroadcastExchange -Input [4]: [s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Input [4]: [s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (20) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#12] +Right keys [1]: [s_store_sk#10] Join condition: None (21) Project [codegen id : 9] -Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16] -Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5, s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] +Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14] +Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5, s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] (22) Scan parquet default.item -Output [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Output [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_color), EqualTo(i_color,chiffon ), IsNotNull(i_item_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 6] -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] (24) Filter [codegen id : 6] -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Condition : ((isnotnull(i_color#21) AND (i_color#21 = chiffon )) AND isnotnull(i_item_sk#18)) +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Condition : ((isnotnull(i_color#18) AND (i_color#18 = chiffon )) AND isnotnull(i_item_sk#15)) (25) BroadcastExchange -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#24] +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (26) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#18] +Right keys [1]: [i_item_sk#15] Join condition: None (27) Project [codegen id : 9] -Output [10]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Output [10]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] (28) Scan parquet default.customer -Output [4]: [c_customer_sk#25, c_first_name#26, c_last_name#27, c_birth_country#28] +Output [4]: [c_customer_sk#21, c_first_name#22, c_last_name#23, c_birth_country#24] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_birth_country)] ReadSchema: struct (29) ColumnarToRow [codegen id : 7] -Input [4]: [c_customer_sk#25, c_first_name#26, c_last_name#27, c_birth_country#28] +Input [4]: [c_customer_sk#21, c_first_name#22, c_last_name#23, c_birth_country#24] (30) Filter [codegen id : 7] -Input [4]: [c_customer_sk#25, c_first_name#26, c_last_name#27, c_birth_country#28] -Condition : (isnotnull(c_customer_sk#25) AND isnotnull(c_birth_country#28)) +Input [4]: [c_customer_sk#21, c_first_name#22, c_last_name#23, c_birth_country#24] +Condition : (isnotnull(c_customer_sk#21) AND isnotnull(c_birth_country#24)) (31) BroadcastExchange -Input [4]: [c_customer_sk#25, c_first_name#26, c_last_name#27, c_birth_country#28] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#29] +Input [4]: [c_customer_sk#21, c_first_name#22, c_last_name#23, c_birth_country#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (32) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#25] +Right keys [1]: [c_customer_sk#21] Join condition: None (33) Project [codegen id : 9] -Output [12]: [ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, c_birth_country#28] -Input [14]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_customer_sk#25, c_first_name#26, c_last_name#27, c_birth_country#28] +Output [12]: [ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, c_birth_country#24] +Input [14]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_customer_sk#21, c_first_name#22, c_last_name#23, c_birth_country#24] (34) Scan parquet default.customer_address -Output [3]: [ca_state#30, ca_zip#31, ca_country#32] +Output [3]: [ca_state#25, ca_zip#26, ca_country#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct (35) ColumnarToRow [codegen id : 8] -Input [3]: [ca_state#30, ca_zip#31, ca_country#32] +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] (36) Filter [codegen id : 8] -Input [3]: [ca_state#30, ca_zip#31, ca_country#32] -Condition : (isnotnull(ca_country#32) AND isnotnull(ca_zip#31)) +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] +Condition : (isnotnull(ca_country#27) AND isnotnull(ca_zip#26)) (37) BroadcastExchange -Input [3]: [ca_state#30, ca_zip#31, ca_country#32] -Arguments: HashedRelationBroadcastMode(List(upper(input[2, string, false]), input[1, string, false]),false), [id=#33] +Input [3]: [ca_state#25, ca_zip#26, ca_country#27] +Arguments: HashedRelationBroadcastMode(List(upper(input[2, string, false]), input[1, string, false]),false), [plan_id=6] (38) BroadcastHashJoin [codegen id : 9] -Left keys [2]: [c_birth_country#28, s_zip#16] -Right keys [2]: [upper(ca_country#32), ca_zip#31] +Left keys [2]: [c_birth_country#24, s_zip#14] +Right keys [2]: [upper(ca_country#27), ca_zip#26] Join condition: None (39) Project [codegen id : 9] -Output [11]: [ss_net_paid#5, s_store_name#13, s_state#15, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, ca_state#30] -Input [15]: [ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, c_birth_country#28, ca_state#30, ca_zip#31, ca_country#32] +Output [11]: [ss_net_paid#5, s_store_name#11, s_state#13, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, ca_state#25] +Input [15]: [ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, c_birth_country#24, ca_state#25, ca_zip#26, ca_country#27] (40) HashAggregate [codegen id : 9] -Input [11]: [ss_net_paid#5, s_store_name#13, s_state#15, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, ca_state#30] -Keys [10]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20] +Input [11]: [ss_net_paid#5, s_store_name#11, s_state#13, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, ca_state#25] +Keys [10]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17] Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum#34] -Results [11]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#35] +Aggregate Attributes [1]: [sum#28] +Results [11]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#29] (41) Exchange -Input [11]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#35] -Arguments: hashpartitioning(c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [11]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#29] +Arguments: hashpartitioning(c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) HashAggregate [codegen id : 10] -Input [11]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#35] -Keys [10]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20] +Input [11]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#29] +Keys [10]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17] Functions [1]: [sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#37] -Results [4]: [c_last_name#27, c_first_name#26, s_store_name#13, MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#37,17,2) AS netpaid#38] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#30] +Results [4]: [c_last_name#23, c_first_name#22, s_store_name#11, MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#30,17,2) AS netpaid#31] (43) HashAggregate [codegen id : 10] -Input [4]: [c_last_name#27, c_first_name#26, s_store_name#13, netpaid#38] -Keys [3]: [c_last_name#27, c_first_name#26, s_store_name#13] -Functions [1]: [partial_sum(netpaid#38)] -Aggregate Attributes [2]: [sum#39, isEmpty#40] -Results [5]: [c_last_name#27, c_first_name#26, s_store_name#13, sum#41, isEmpty#42] +Input [4]: [c_last_name#23, c_first_name#22, s_store_name#11, netpaid#31] +Keys [3]: [c_last_name#23, c_first_name#22, s_store_name#11] +Functions [1]: [partial_sum(netpaid#31)] +Aggregate Attributes [2]: [sum#32, isEmpty#33] +Results [5]: [c_last_name#23, c_first_name#22, s_store_name#11, sum#34, isEmpty#35] (44) Exchange -Input [5]: [c_last_name#27, c_first_name#26, s_store_name#13, sum#41, isEmpty#42] -Arguments: hashpartitioning(c_last_name#27, c_first_name#26, s_store_name#13, 5), ENSURE_REQUIREMENTS, [id=#43] +Input [5]: [c_last_name#23, c_first_name#22, s_store_name#11, sum#34, isEmpty#35] +Arguments: hashpartitioning(c_last_name#23, c_first_name#22, s_store_name#11, 5), ENSURE_REQUIREMENTS, [plan_id=8] (45) HashAggregate [codegen id : 11] -Input [5]: [c_last_name#27, c_first_name#26, s_store_name#13, sum#41, isEmpty#42] -Keys [3]: [c_last_name#27, c_first_name#26, s_store_name#13] -Functions [1]: [sum(netpaid#38)] -Aggregate Attributes [1]: [sum(netpaid#38)#44] -Results [4]: [c_last_name#27, c_first_name#26, s_store_name#13, sum(netpaid#38)#44 AS paid#45] +Input [5]: [c_last_name#23, c_first_name#22, s_store_name#11, sum#34, isEmpty#35] +Keys [3]: [c_last_name#23, c_first_name#22, s_store_name#11] +Functions [1]: [sum(netpaid#31)] +Aggregate Attributes [1]: [sum(netpaid#31)#36] +Results [4]: [c_last_name#23, c_first_name#22, s_store_name#11, sum(netpaid#31)#36 AS paid#37] (46) Filter [codegen id : 11] -Input [4]: [c_last_name#27, c_first_name#26, s_store_name#13, paid#45] -Condition : (isnotnull(paid#45) AND (cast(paid#45 as decimal(33,8)) > cast(Subquery scalar-subquery#46, [id=#47] as decimal(33,8)))) +Input [4]: [c_last_name#23, c_first_name#22, s_store_name#11, paid#37] +Condition : (isnotnull(paid#37) AND (cast(paid#37 as decimal(33,8)) > cast(Subquery scalar-subquery#38, [id=#39] as decimal(33,8)))) ===== Subqueries ===== -Subquery:1 Hosting operator id = 46 Hosting Expression = Subquery scalar-subquery#46, [id=#47] +Subquery:1 Hosting operator id = 46 Hosting Expression = Subquery scalar-subquery#38, [id=#39] * HashAggregate (73) +- Exchange (72) +- * HashAggregate (71) @@ -300,118 +300,118 @@ Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, s Arguments: [ss_ticket_number#4 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST], false, 0 (49) ReusedExchange [Reuses operator id: 11] -Output [2]: [sr_item_sk#8, sr_ticket_number#9] +Output [2]: [sr_item_sk#7, sr_ticket_number#8] (50) Sort [codegen id : 4] -Input [2]: [sr_item_sk#8, sr_ticket_number#9] -Arguments: [sr_ticket_number#9 ASC NULLS FIRST, sr_item_sk#8 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#7, sr_ticket_number#8] +Arguments: [sr_ticket_number#8 ASC NULLS FIRST, sr_item_sk#7 ASC NULLS FIRST], false, 0 (51) SortMergeJoin [codegen id : 9] Left keys [2]: [ss_ticket_number#4, ss_item_sk#1] -Right keys [2]: [sr_ticket_number#9, sr_item_sk#8] +Right keys [2]: [sr_ticket_number#8, sr_item_sk#7] Join condition: None (52) Project [codegen id : 9] Output [4]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5] -Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, sr_item_sk#8, sr_ticket_number#9] +Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, sr_item_sk#7, sr_ticket_number#8] (53) ReusedExchange [Reuses operator id: 19] -Output [4]: [s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] +Output [4]: [s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] (54) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#12] +Right keys [1]: [s_store_sk#10] Join condition: None (55) Project [codegen id : 9] -Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16] -Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5, s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] +Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14] +Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5, s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] (56) Scan parquet default.item -Output [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Output [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 6] -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] (58) Filter [codegen id : 6] -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Condition : isnotnull(i_item_sk#18) +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Condition : isnotnull(i_item_sk#15) (59) BroadcastExchange -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#48] +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] (60) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#18] +Right keys [1]: [i_item_sk#15] Join condition: None (61) Project [codegen id : 9] -Output [10]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Output [10]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] (62) ReusedExchange [Reuses operator id: 31] -Output [4]: [c_customer_sk#25, c_first_name#26, c_last_name#27, c_birth_country#28] +Output [4]: [c_customer_sk#21, c_first_name#22, c_last_name#23, c_birth_country#24] (63) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#25] +Right keys [1]: [c_customer_sk#21] Join condition: None (64) Project [codegen id : 9] -Output [12]: [ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, c_birth_country#28] -Input [14]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_customer_sk#25, c_first_name#26, c_last_name#27, c_birth_country#28] +Output [12]: [ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, c_birth_country#24] +Input [14]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_customer_sk#21, c_first_name#22, c_last_name#23, c_birth_country#24] (65) ReusedExchange [Reuses operator id: 37] -Output [3]: [ca_state#30, ca_zip#31, ca_country#32] +Output [3]: [ca_state#25, ca_zip#26, ca_country#27] (66) BroadcastHashJoin [codegen id : 9] -Left keys [2]: [c_birth_country#28, s_zip#16] -Right keys [2]: [upper(ca_country#32), ca_zip#31] +Left keys [2]: [c_birth_country#24, s_zip#14] +Right keys [2]: [upper(ca_country#27), ca_zip#26] Join condition: None (67) Project [codegen id : 9] -Output [11]: [ss_net_paid#5, s_store_name#13, s_state#15, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, ca_state#30] -Input [15]: [ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, c_birth_country#28, ca_state#30, ca_zip#31, ca_country#32] +Output [11]: [ss_net_paid#5, s_store_name#11, s_state#13, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, ca_state#25] +Input [15]: [ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, c_birth_country#24, ca_state#25, ca_zip#26, ca_country#27] (68) HashAggregate [codegen id : 9] -Input [11]: [ss_net_paid#5, s_store_name#13, s_state#15, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#26, c_last_name#27, ca_state#30] -Keys [10]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20] +Input [11]: [ss_net_paid#5, s_store_name#11, s_state#13, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#22, c_last_name#23, ca_state#25] +Keys [10]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17] Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum#49] -Results [11]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#50] +Aggregate Attributes [1]: [sum#40] +Results [11]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#41] (69) Exchange -Input [11]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#50] -Arguments: hashpartitioning(c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [11]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#41] +Arguments: hashpartitioning(c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, 5), ENSURE_REQUIREMENTS, [plan_id=10] (70) HashAggregate [codegen id : 10] -Input [11]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#50] -Keys [10]: [c_last_name#27, c_first_name#26, s_store_name#13, ca_state#30, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20] +Input [11]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#41] +Keys [10]: [c_last_name#23, c_first_name#22, s_store_name#11, ca_state#25, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17] Functions [1]: [sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#37] -Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#37,17,2) AS netpaid#38] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#30] +Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#30,17,2) AS netpaid#31] (71) HashAggregate [codegen id : 10] -Input [1]: [netpaid#38] +Input [1]: [netpaid#31] Keys: [] -Functions [1]: [partial_avg(netpaid#38)] -Aggregate Attributes [2]: [sum#52, count#53] -Results [2]: [sum#54, count#55] +Functions [1]: [partial_avg(netpaid#31)] +Aggregate Attributes [2]: [sum#42, count#43] +Results [2]: [sum#44, count#45] (72) Exchange -Input [2]: [sum#54, count#55] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#56] +Input [2]: [sum#44, count#45] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11] (73) HashAggregate [codegen id : 11] -Input [2]: [sum#54, count#55] +Input [2]: [sum#44, count#45] Keys: [] -Functions [1]: [avg(netpaid#38)] -Aggregate Attributes [1]: [avg(netpaid#38)#57] -Results [1]: [CheckOverflow((0.050000 * promote_precision(avg(netpaid#38)#57)), DecimalType(24,8)) AS (0.05 * avg(netpaid))#58] +Functions [1]: [avg(netpaid#31)] +Aggregate Attributes [1]: [avg(netpaid#31)#46] +Results [1]: [CheckOverflow((0.050000 * promote_precision(avg(netpaid#31)#46)), DecimalType(24,8)) AS (0.05 * avg(netpaid))#47] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q25.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q25.sf100/explain.txt index fc55789fab16a..f30a62f5c1ace 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q25.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q25.sf100/explain.txt @@ -93,7 +93,7 @@ Condition : isnotnull(s_store_sk#9) (10) BroadcastExchange Input [3]: [s_store_sk#9, s_store_id#10, s_store_name#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_store_sk#3] @@ -106,168 +106,168 @@ Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, s (13) Exchange Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_profit#5, s_store_id#10, s_store_name#11] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#13] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) Sort [codegen id : 4] Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_profit#5, s_store_id#10, s_store_name#11] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (15) Scan parquet default.item -Output [3]: [i_item_sk#14, i_item_id#15, i_item_desc#16] +Output [3]: [i_item_sk#12, i_item_id#13, i_item_desc#14] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [3]: [i_item_sk#14, i_item_id#15, i_item_desc#16] +Input [3]: [i_item_sk#12, i_item_id#13, i_item_desc#14] (17) Filter [codegen id : 5] -Input [3]: [i_item_sk#14, i_item_id#15, i_item_desc#16] -Condition : isnotnull(i_item_sk#14) +Input [3]: [i_item_sk#12, i_item_id#13, i_item_desc#14] +Condition : isnotnull(i_item_sk#12) (18) Exchange -Input [3]: [i_item_sk#14, i_item_id#15, i_item_desc#16] -Arguments: hashpartitioning(i_item_sk#14, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [3]: [i_item_sk#12, i_item_id#13, i_item_desc#14] +Arguments: hashpartitioning(i_item_sk#12, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 6] -Input [3]: [i_item_sk#14, i_item_id#15, i_item_desc#16] -Arguments: [i_item_sk#14 ASC NULLS FIRST], false, 0 +Input [3]: [i_item_sk#12, i_item_id#13, i_item_desc#14] +Arguments: [i_item_sk#12 ASC NULLS FIRST], false, 0 (20) SortMergeJoin [codegen id : 7] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#14] +Right keys [1]: [i_item_sk#12] Join condition: None (21) Project [codegen id : 7] -Output [8]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16] -Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_sk#14, i_item_id#15, i_item_desc#16] +Output [8]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14] +Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_sk#12, i_item_id#13, i_item_desc#14] (22) Exchange -Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16] -Arguments: hashpartitioning(ss_customer_sk#2, ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14] +Arguments: hashpartitioning(ss_customer_sk#2, ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) Sort [codegen id : 8] -Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16] +Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14] Arguments: [ss_customer_sk#2 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST, ss_ticket_number#4 ASC NULLS FIRST], false, 0 (24) Scan parquet default.store_returns -Output [5]: [sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_net_loss#22, sr_returned_date_sk#23] +Output [5]: [sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_net_loss#18, sr_returned_date_sk#19] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(sr_returned_date_sk#23), dynamicpruningexpression(sr_returned_date_sk#23 IN dynamicpruning#24)] +PartitionFilters: [isnotnull(sr_returned_date_sk#19), dynamicpruningexpression(sr_returned_date_sk#19 IN dynamicpruning#20)] PushedFilters: [IsNotNull(sr_customer_sk), IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct (25) ColumnarToRow [codegen id : 10] -Input [5]: [sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_net_loss#22, sr_returned_date_sk#23] +Input [5]: [sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_net_loss#18, sr_returned_date_sk#19] (26) Filter [codegen id : 10] -Input [5]: [sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_net_loss#22, sr_returned_date_sk#23] -Condition : ((isnotnull(sr_customer_sk#20) AND isnotnull(sr_item_sk#19)) AND isnotnull(sr_ticket_number#21)) +Input [5]: [sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_net_loss#18, sr_returned_date_sk#19] +Condition : ((isnotnull(sr_customer_sk#16) AND isnotnull(sr_item_sk#15)) AND isnotnull(sr_ticket_number#17)) (27) ReusedExchange [Reuses operator id: 59] -Output [1]: [d_date_sk#25] +Output [1]: [d_date_sk#21] (28) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [sr_returned_date_sk#23] -Right keys [1]: [d_date_sk#25] +Left keys [1]: [sr_returned_date_sk#19] +Right keys [1]: [d_date_sk#21] Join condition: None (29) Project [codegen id : 10] -Output [4]: [sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_net_loss#22] -Input [6]: [sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_net_loss#22, sr_returned_date_sk#23, d_date_sk#25] +Output [4]: [sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_net_loss#18] +Input [6]: [sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_net_loss#18, sr_returned_date_sk#19, d_date_sk#21] (30) Exchange -Input [4]: [sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_net_loss#22] -Arguments: hashpartitioning(sr_customer_sk#20, sr_item_sk#19, sr_ticket_number#21, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [4]: [sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_net_loss#18] +Arguments: hashpartitioning(sr_customer_sk#16, sr_item_sk#15, sr_ticket_number#17, 5), ENSURE_REQUIREMENTS, [plan_id=5] (31) Sort [codegen id : 11] -Input [4]: [sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_net_loss#22] -Arguments: [sr_customer_sk#20 ASC NULLS FIRST, sr_item_sk#19 ASC NULLS FIRST, sr_ticket_number#21 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_net_loss#18] +Arguments: [sr_customer_sk#16 ASC NULLS FIRST, sr_item_sk#15 ASC NULLS FIRST, sr_ticket_number#17 ASC NULLS FIRST], false, 0 (32) SortMergeJoin [codegen id : 12] Left keys [3]: [ss_customer_sk#2, ss_item_sk#1, ss_ticket_number#4] -Right keys [3]: [sr_customer_sk#20, sr_item_sk#19, sr_ticket_number#21] +Right keys [3]: [sr_customer_sk#16, sr_item_sk#15, sr_ticket_number#17] Join condition: None (33) Project [codegen id : 12] -Output [8]: [ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16, sr_item_sk#19, sr_customer_sk#20, sr_net_loss#22] -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16, sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_net_loss#22] +Output [8]: [ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14, sr_item_sk#15, sr_customer_sk#16, sr_net_loss#18] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14, sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_net_loss#18] (34) Exchange -Input [8]: [ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16, sr_item_sk#19, sr_customer_sk#20, sr_net_loss#22] -Arguments: hashpartitioning(sr_customer_sk#20, sr_item_sk#19, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [8]: [ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14, sr_item_sk#15, sr_customer_sk#16, sr_net_loss#18] +Arguments: hashpartitioning(sr_customer_sk#16, sr_item_sk#15, 5), ENSURE_REQUIREMENTS, [plan_id=6] (35) Sort [codegen id : 13] -Input [8]: [ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16, sr_item_sk#19, sr_customer_sk#20, sr_net_loss#22] -Arguments: [sr_customer_sk#20 ASC NULLS FIRST, sr_item_sk#19 ASC NULLS FIRST], false, 0 +Input [8]: [ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14, sr_item_sk#15, sr_customer_sk#16, sr_net_loss#18] +Arguments: [sr_customer_sk#16 ASC NULLS FIRST, sr_item_sk#15 ASC NULLS FIRST], false, 0 (36) Scan parquet default.catalog_sales -Output [4]: [cs_bill_customer_sk#28, cs_item_sk#29, cs_net_profit#30, cs_sold_date_sk#31] +Output [4]: [cs_bill_customer_sk#22, cs_item_sk#23, cs_net_profit#24, cs_sold_date_sk#25] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#31), dynamicpruningexpression(cs_sold_date_sk#31 IN dynamicpruning#24)] +PartitionFilters: [isnotnull(cs_sold_date_sk#25), dynamicpruningexpression(cs_sold_date_sk#25 IN dynamicpruning#20)] PushedFilters: [IsNotNull(cs_bill_customer_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 15] -Input [4]: [cs_bill_customer_sk#28, cs_item_sk#29, cs_net_profit#30, cs_sold_date_sk#31] +Input [4]: [cs_bill_customer_sk#22, cs_item_sk#23, cs_net_profit#24, cs_sold_date_sk#25] (38) Filter [codegen id : 15] -Input [4]: [cs_bill_customer_sk#28, cs_item_sk#29, cs_net_profit#30, cs_sold_date_sk#31] -Condition : (isnotnull(cs_bill_customer_sk#28) AND isnotnull(cs_item_sk#29)) +Input [4]: [cs_bill_customer_sk#22, cs_item_sk#23, cs_net_profit#24, cs_sold_date_sk#25] +Condition : (isnotnull(cs_bill_customer_sk#22) AND isnotnull(cs_item_sk#23)) (39) ReusedExchange [Reuses operator id: 59] -Output [1]: [d_date_sk#32] +Output [1]: [d_date_sk#26] (40) BroadcastHashJoin [codegen id : 15] -Left keys [1]: [cs_sold_date_sk#31] -Right keys [1]: [d_date_sk#32] +Left keys [1]: [cs_sold_date_sk#25] +Right keys [1]: [d_date_sk#26] Join condition: None (41) Project [codegen id : 15] -Output [3]: [cs_bill_customer_sk#28, cs_item_sk#29, cs_net_profit#30] -Input [5]: [cs_bill_customer_sk#28, cs_item_sk#29, cs_net_profit#30, cs_sold_date_sk#31, d_date_sk#32] +Output [3]: [cs_bill_customer_sk#22, cs_item_sk#23, cs_net_profit#24] +Input [5]: [cs_bill_customer_sk#22, cs_item_sk#23, cs_net_profit#24, cs_sold_date_sk#25, d_date_sk#26] (42) Exchange -Input [3]: [cs_bill_customer_sk#28, cs_item_sk#29, cs_net_profit#30] -Arguments: hashpartitioning(cs_bill_customer_sk#28, cs_item_sk#29, 5), ENSURE_REQUIREMENTS, [id=#33] +Input [3]: [cs_bill_customer_sk#22, cs_item_sk#23, cs_net_profit#24] +Arguments: hashpartitioning(cs_bill_customer_sk#22, cs_item_sk#23, 5), ENSURE_REQUIREMENTS, [plan_id=7] (43) Sort [codegen id : 16] -Input [3]: [cs_bill_customer_sk#28, cs_item_sk#29, cs_net_profit#30] -Arguments: [cs_bill_customer_sk#28 ASC NULLS FIRST, cs_item_sk#29 ASC NULLS FIRST], false, 0 +Input [3]: [cs_bill_customer_sk#22, cs_item_sk#23, cs_net_profit#24] +Arguments: [cs_bill_customer_sk#22 ASC NULLS FIRST, cs_item_sk#23 ASC NULLS FIRST], false, 0 (44) SortMergeJoin [codegen id : 17] -Left keys [2]: [sr_customer_sk#20, sr_item_sk#19] -Right keys [2]: [cs_bill_customer_sk#28, cs_item_sk#29] +Left keys [2]: [sr_customer_sk#16, sr_item_sk#15] +Right keys [2]: [cs_bill_customer_sk#22, cs_item_sk#23] Join condition: None (45) Project [codegen id : 17] -Output [7]: [ss_net_profit#5, sr_net_loss#22, cs_net_profit#30, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16] -Input [11]: [ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16, sr_item_sk#19, sr_customer_sk#20, sr_net_loss#22, cs_bill_customer_sk#28, cs_item_sk#29, cs_net_profit#30] +Output [7]: [ss_net_profit#5, sr_net_loss#18, cs_net_profit#24, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14] +Input [11]: [ss_net_profit#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14, sr_item_sk#15, sr_customer_sk#16, sr_net_loss#18, cs_bill_customer_sk#22, cs_item_sk#23, cs_net_profit#24] (46) HashAggregate [codegen id : 17] -Input [7]: [ss_net_profit#5, sr_net_loss#22, cs_net_profit#30, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16] -Keys [4]: [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11] -Functions [3]: [partial_sum(UnscaledValue(ss_net_profit#5)), partial_sum(UnscaledValue(sr_net_loss#22)), partial_sum(UnscaledValue(cs_net_profit#30))] -Aggregate Attributes [3]: [sum#34, sum#35, sum#36] -Results [7]: [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11, sum#37, sum#38, sum#39] +Input [7]: [ss_net_profit#5, sr_net_loss#18, cs_net_profit#24, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14] +Keys [4]: [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11] +Functions [3]: [partial_sum(UnscaledValue(ss_net_profit#5)), partial_sum(UnscaledValue(sr_net_loss#18)), partial_sum(UnscaledValue(cs_net_profit#24))] +Aggregate Attributes [3]: [sum#27, sum#28, sum#29] +Results [7]: [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11, sum#30, sum#31, sum#32] (47) Exchange -Input [7]: [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11, sum#37, sum#38, sum#39] -Arguments: hashpartitioning(i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11, 5), ENSURE_REQUIREMENTS, [id=#40] +Input [7]: [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11, sum#30, sum#31, sum#32] +Arguments: hashpartitioning(i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11, 5), ENSURE_REQUIREMENTS, [plan_id=8] (48) HashAggregate [codegen id : 18] -Input [7]: [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11, sum#37, sum#38, sum#39] -Keys [4]: [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11] -Functions [3]: [sum(UnscaledValue(ss_net_profit#5)), sum(UnscaledValue(sr_net_loss#22)), sum(UnscaledValue(cs_net_profit#30))] -Aggregate Attributes [3]: [sum(UnscaledValue(ss_net_profit#5))#41, sum(UnscaledValue(sr_net_loss#22))#42, sum(UnscaledValue(cs_net_profit#30))#43] -Results [7]: [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11, MakeDecimal(sum(UnscaledValue(ss_net_profit#5))#41,17,2) AS store_sales_profit#44, MakeDecimal(sum(UnscaledValue(sr_net_loss#22))#42,17,2) AS store_returns_loss#45, MakeDecimal(sum(UnscaledValue(cs_net_profit#30))#43,17,2) AS catalog_sales_profit#46] +Input [7]: [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11, sum#30, sum#31, sum#32] +Keys [4]: [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11] +Functions [3]: [sum(UnscaledValue(ss_net_profit#5)), sum(UnscaledValue(sr_net_loss#18)), sum(UnscaledValue(cs_net_profit#24))] +Aggregate Attributes [3]: [sum(UnscaledValue(ss_net_profit#5))#33, sum(UnscaledValue(sr_net_loss#18))#34, sum(UnscaledValue(cs_net_profit#24))#35] +Results [7]: [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11, MakeDecimal(sum(UnscaledValue(ss_net_profit#5))#33,17,2) AS store_sales_profit#36, MakeDecimal(sum(UnscaledValue(sr_net_loss#18))#34,17,2) AS store_returns_loss#37, MakeDecimal(sum(UnscaledValue(cs_net_profit#24))#35,17,2) AS catalog_sales_profit#38] (49) TakeOrderedAndProject -Input [7]: [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11, store_sales_profit#44, store_returns_loss#45, catalog_sales_profit#46] -Arguments: 100, [i_item_id#15 ASC NULLS FIRST, i_item_desc#16 ASC NULLS FIRST, s_store_id#10 ASC NULLS FIRST, s_store_name#11 ASC NULLS FIRST], [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11, store_sales_profit#44, store_returns_loss#45, catalog_sales_profit#46] +Input [7]: [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11, store_sales_profit#36, store_returns_loss#37, catalog_sales_profit#38] +Arguments: 100, [i_item_id#13 ASC NULLS FIRST, i_item_desc#14 ASC NULLS FIRST, s_store_id#10 ASC NULLS FIRST, s_store_name#11 ASC NULLS FIRST], [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11, store_sales_profit#36, store_returns_loss#37, catalog_sales_profit#38] ===== Subqueries ===== @@ -280,28 +280,28 @@ BroadcastExchange (54) (50) Scan parquet default.date_dim -Output [3]: [d_date_sk#8, d_year#47, d_moy#48] +Output [3]: [d_date_sk#8, d_year#39, d_moy#40] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_moy,4), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#8, d_year#47, d_moy#48] +Input [3]: [d_date_sk#8, d_year#39, d_moy#40] (52) Filter [codegen id : 1] -Input [3]: [d_date_sk#8, d_year#47, d_moy#48] -Condition : ((((isnotnull(d_moy#48) AND isnotnull(d_year#47)) AND (d_moy#48 = 4)) AND (d_year#47 = 2001)) AND isnotnull(d_date_sk#8)) +Input [3]: [d_date_sk#8, d_year#39, d_moy#40] +Condition : ((((isnotnull(d_moy#40) AND isnotnull(d_year#39)) AND (d_moy#40 = 4)) AND (d_year#39 = 2001)) AND isnotnull(d_date_sk#8)) (53) Project [codegen id : 1] Output [1]: [d_date_sk#8] -Input [3]: [d_date_sk#8, d_year#47, d_moy#48] +Input [3]: [d_date_sk#8, d_year#39, d_moy#40] (54) BroadcastExchange Input [1]: [d_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#49] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:2 Hosting operator id = 24 Hosting Expression = sr_returned_date_sk#23 IN dynamicpruning#24 +Subquery:2 Hosting operator id = 24 Hosting Expression = sr_returned_date_sk#19 IN dynamicpruning#20 BroadcastExchange (59) +- * Project (58) +- * Filter (57) @@ -310,27 +310,27 @@ BroadcastExchange (59) (55) Scan parquet default.date_dim -Output [3]: [d_date_sk#25, d_year#50, d_moy#51] +Output [3]: [d_date_sk#21, d_year#41, d_moy#42] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,10), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (56) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#25, d_year#50, d_moy#51] +Input [3]: [d_date_sk#21, d_year#41, d_moy#42] (57) Filter [codegen id : 1] -Input [3]: [d_date_sk#25, d_year#50, d_moy#51] -Condition : (((((isnotnull(d_moy#51) AND isnotnull(d_year#50)) AND (d_moy#51 >= 4)) AND (d_moy#51 <= 10)) AND (d_year#50 = 2001)) AND isnotnull(d_date_sk#25)) +Input [3]: [d_date_sk#21, d_year#41, d_moy#42] +Condition : (((((isnotnull(d_moy#42) AND isnotnull(d_year#41)) AND (d_moy#42 >= 4)) AND (d_moy#42 <= 10)) AND (d_year#41 = 2001)) AND isnotnull(d_date_sk#21)) (58) Project [codegen id : 1] -Output [1]: [d_date_sk#25] -Input [3]: [d_date_sk#25, d_year#50, d_moy#51] +Output [1]: [d_date_sk#21] +Input [3]: [d_date_sk#21, d_year#41, d_moy#42] (59) BroadcastExchange -Input [1]: [d_date_sk#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#52] +Input [1]: [d_date_sk#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -Subquery:3 Hosting operator id = 36 Hosting Expression = cs_sold_date_sk#31 IN dynamicpruning#24 +Subquery:3 Hosting operator id = 36 Hosting Expression = cs_sold_date_sk#25 IN dynamicpruning#20 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q25/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q25/explain.txt index b9d08511b6dce..c97bce93b3140 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q25/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q25/explain.txt @@ -73,7 +73,7 @@ Condition : ((isnotnull(sr_customer_sk#9) AND isnotnull(sr_item_sk#8)) AND isnot (7) BroadcastExchange Input [5]: [sr_item_sk#8, sr_customer_sk#9, sr_ticket_number#10, sr_net_loss#11, sr_returned_date_sk#12] -Arguments: HashedRelationBroadcastMode(List(input[1, int, false], input[0, int, false], input[2, int, false]),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(input[1, int, false], input[0, int, false], input[2, int, false]),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 8] Left keys [3]: [ss_customer_sk#2, ss_item_sk#1, ss_ticket_number#4] @@ -85,144 +85,144 @@ Output [8]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, ss_sold_date_sk#6, sr Input [11]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_profit#5, ss_sold_date_sk#6, sr_item_sk#8, sr_customer_sk#9, sr_ticket_number#10, sr_net_loss#11, sr_returned_date_sk#12] (10) Scan parquet default.catalog_sales -Output [4]: [cs_bill_customer_sk#15, cs_item_sk#16, cs_net_profit#17, cs_sold_date_sk#18] +Output [4]: [cs_bill_customer_sk#14, cs_item_sk#15, cs_net_profit#16, cs_sold_date_sk#17] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#18), dynamicpruningexpression(cs_sold_date_sk#18 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(cs_sold_date_sk#17), dynamicpruningexpression(cs_sold_date_sk#17 IN dynamicpruning#13)] PushedFilters: [IsNotNull(cs_bill_customer_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [4]: [cs_bill_customer_sk#15, cs_item_sk#16, cs_net_profit#17, cs_sold_date_sk#18] +Input [4]: [cs_bill_customer_sk#14, cs_item_sk#15, cs_net_profit#16, cs_sold_date_sk#17] (12) Filter [codegen id : 2] -Input [4]: [cs_bill_customer_sk#15, cs_item_sk#16, cs_net_profit#17, cs_sold_date_sk#18] -Condition : (isnotnull(cs_bill_customer_sk#15) AND isnotnull(cs_item_sk#16)) +Input [4]: [cs_bill_customer_sk#14, cs_item_sk#15, cs_net_profit#16, cs_sold_date_sk#17] +Condition : (isnotnull(cs_bill_customer_sk#14) AND isnotnull(cs_item_sk#15)) (13) BroadcastExchange -Input [4]: [cs_bill_customer_sk#15, cs_item_sk#16, cs_net_profit#17, cs_sold_date_sk#18] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, false] as bigint), 32) | (cast(input[1, int, false] as bigint) & 4294967295))),false), [id=#19] +Input [4]: [cs_bill_customer_sk#14, cs_item_sk#15, cs_net_profit#16, cs_sold_date_sk#17] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, false] as bigint), 32) | (cast(input[1, int, false] as bigint) & 4294967295))),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 8] Left keys [2]: [sr_customer_sk#9, sr_item_sk#8] -Right keys [2]: [cs_bill_customer_sk#15, cs_item_sk#16] +Right keys [2]: [cs_bill_customer_sk#14, cs_item_sk#15] Join condition: None (15) Project [codegen id : 8] -Output [8]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, ss_sold_date_sk#6, sr_net_loss#11, sr_returned_date_sk#12, cs_net_profit#17, cs_sold_date_sk#18] -Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, ss_sold_date_sk#6, sr_item_sk#8, sr_customer_sk#9, sr_net_loss#11, sr_returned_date_sk#12, cs_bill_customer_sk#15, cs_item_sk#16, cs_net_profit#17, cs_sold_date_sk#18] +Output [8]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, ss_sold_date_sk#6, sr_net_loss#11, sr_returned_date_sk#12, cs_net_profit#16, cs_sold_date_sk#17] +Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, ss_sold_date_sk#6, sr_item_sk#8, sr_customer_sk#9, sr_net_loss#11, sr_returned_date_sk#12, cs_bill_customer_sk#14, cs_item_sk#15, cs_net_profit#16, cs_sold_date_sk#17] (16) ReusedExchange [Reuses operator id: 45] -Output [1]: [d_date_sk#20] +Output [1]: [d_date_sk#18] (17) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_sold_date_sk#6] -Right keys [1]: [d_date_sk#20] +Right keys [1]: [d_date_sk#18] Join condition: None (18) Project [codegen id : 8] -Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, sr_net_loss#11, sr_returned_date_sk#12, cs_net_profit#17, cs_sold_date_sk#18] -Input [9]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, ss_sold_date_sk#6, sr_net_loss#11, sr_returned_date_sk#12, cs_net_profit#17, cs_sold_date_sk#18, d_date_sk#20] +Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, sr_net_loss#11, sr_returned_date_sk#12, cs_net_profit#16, cs_sold_date_sk#17] +Input [9]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, ss_sold_date_sk#6, sr_net_loss#11, sr_returned_date_sk#12, cs_net_profit#16, cs_sold_date_sk#17, d_date_sk#18] (19) ReusedExchange [Reuses operator id: 50] -Output [1]: [d_date_sk#21] +Output [1]: [d_date_sk#19] (20) BroadcastHashJoin [codegen id : 8] Left keys [1]: [sr_returned_date_sk#12] -Right keys [1]: [d_date_sk#21] +Right keys [1]: [d_date_sk#19] Join condition: None (21) Project [codegen id : 8] -Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, sr_net_loss#11, cs_net_profit#17, cs_sold_date_sk#18] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, sr_net_loss#11, sr_returned_date_sk#12, cs_net_profit#17, cs_sold_date_sk#18, d_date_sk#21] +Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, sr_net_loss#11, cs_net_profit#16, cs_sold_date_sk#17] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, sr_net_loss#11, sr_returned_date_sk#12, cs_net_profit#16, cs_sold_date_sk#17, d_date_sk#19] (22) ReusedExchange [Reuses operator id: 50] -Output [1]: [d_date_sk#22] +Output [1]: [d_date_sk#20] (23) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_sold_date_sk#18] -Right keys [1]: [d_date_sk#22] +Left keys [1]: [cs_sold_date_sk#17] +Right keys [1]: [d_date_sk#20] Join condition: None (24) Project [codegen id : 8] -Output [5]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, sr_net_loss#11, cs_net_profit#17] -Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, sr_net_loss#11, cs_net_profit#17, cs_sold_date_sk#18, d_date_sk#22] +Output [5]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, sr_net_loss#11, cs_net_profit#16] +Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, sr_net_loss#11, cs_net_profit#16, cs_sold_date_sk#17, d_date_sk#20] (25) Scan parquet default.store -Output [3]: [s_store_sk#23, s_store_id#24, s_store_name#25] +Output [3]: [s_store_sk#21, s_store_id#22, s_store_name#23] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 6] -Input [3]: [s_store_sk#23, s_store_id#24, s_store_name#25] +Input [3]: [s_store_sk#21, s_store_id#22, s_store_name#23] (27) Filter [codegen id : 6] -Input [3]: [s_store_sk#23, s_store_id#24, s_store_name#25] -Condition : isnotnull(s_store_sk#23) +Input [3]: [s_store_sk#21, s_store_id#22, s_store_name#23] +Condition : isnotnull(s_store_sk#21) (28) BroadcastExchange -Input [3]: [s_store_sk#23, s_store_id#24, s_store_name#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#26] +Input [3]: [s_store_sk#21, s_store_id#22, s_store_name#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (29) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#23] +Right keys [1]: [s_store_sk#21] Join condition: None (30) Project [codegen id : 8] -Output [6]: [ss_item_sk#1, ss_net_profit#5, sr_net_loss#11, cs_net_profit#17, s_store_id#24, s_store_name#25] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, sr_net_loss#11, cs_net_profit#17, s_store_sk#23, s_store_id#24, s_store_name#25] +Output [6]: [ss_item_sk#1, ss_net_profit#5, sr_net_loss#11, cs_net_profit#16, s_store_id#22, s_store_name#23] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_net_profit#5, sr_net_loss#11, cs_net_profit#16, s_store_sk#21, s_store_id#22, s_store_name#23] (31) Scan parquet default.item -Output [3]: [i_item_sk#27, i_item_id#28, i_item_desc#29] +Output [3]: [i_item_sk#24, i_item_id#25, i_item_desc#26] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 7] -Input [3]: [i_item_sk#27, i_item_id#28, i_item_desc#29] +Input [3]: [i_item_sk#24, i_item_id#25, i_item_desc#26] (33) Filter [codegen id : 7] -Input [3]: [i_item_sk#27, i_item_id#28, i_item_desc#29] -Condition : isnotnull(i_item_sk#27) +Input [3]: [i_item_sk#24, i_item_id#25, i_item_desc#26] +Condition : isnotnull(i_item_sk#24) (34) BroadcastExchange -Input [3]: [i_item_sk#27, i_item_id#28, i_item_desc#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#30] +Input [3]: [i_item_sk#24, i_item_id#25, i_item_desc#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (35) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#27] +Right keys [1]: [i_item_sk#24] Join condition: None (36) Project [codegen id : 8] -Output [7]: [ss_net_profit#5, sr_net_loss#11, cs_net_profit#17, s_store_id#24, s_store_name#25, i_item_id#28, i_item_desc#29] -Input [9]: [ss_item_sk#1, ss_net_profit#5, sr_net_loss#11, cs_net_profit#17, s_store_id#24, s_store_name#25, i_item_sk#27, i_item_id#28, i_item_desc#29] +Output [7]: [ss_net_profit#5, sr_net_loss#11, cs_net_profit#16, s_store_id#22, s_store_name#23, i_item_id#25, i_item_desc#26] +Input [9]: [ss_item_sk#1, ss_net_profit#5, sr_net_loss#11, cs_net_profit#16, s_store_id#22, s_store_name#23, i_item_sk#24, i_item_id#25, i_item_desc#26] (37) HashAggregate [codegen id : 8] -Input [7]: [ss_net_profit#5, sr_net_loss#11, cs_net_profit#17, s_store_id#24, s_store_name#25, i_item_id#28, i_item_desc#29] -Keys [4]: [i_item_id#28, i_item_desc#29, s_store_id#24, s_store_name#25] -Functions [3]: [partial_sum(UnscaledValue(ss_net_profit#5)), partial_sum(UnscaledValue(sr_net_loss#11)), partial_sum(UnscaledValue(cs_net_profit#17))] -Aggregate Attributes [3]: [sum#31, sum#32, sum#33] -Results [7]: [i_item_id#28, i_item_desc#29, s_store_id#24, s_store_name#25, sum#34, sum#35, sum#36] +Input [7]: [ss_net_profit#5, sr_net_loss#11, cs_net_profit#16, s_store_id#22, s_store_name#23, i_item_id#25, i_item_desc#26] +Keys [4]: [i_item_id#25, i_item_desc#26, s_store_id#22, s_store_name#23] +Functions [3]: [partial_sum(UnscaledValue(ss_net_profit#5)), partial_sum(UnscaledValue(sr_net_loss#11)), partial_sum(UnscaledValue(cs_net_profit#16))] +Aggregate Attributes [3]: [sum#27, sum#28, sum#29] +Results [7]: [i_item_id#25, i_item_desc#26, s_store_id#22, s_store_name#23, sum#30, sum#31, sum#32] (38) Exchange -Input [7]: [i_item_id#28, i_item_desc#29, s_store_id#24, s_store_name#25, sum#34, sum#35, sum#36] -Arguments: hashpartitioning(i_item_id#28, i_item_desc#29, s_store_id#24, s_store_name#25, 5), ENSURE_REQUIREMENTS, [id=#37] +Input [7]: [i_item_id#25, i_item_desc#26, s_store_id#22, s_store_name#23, sum#30, sum#31, sum#32] +Arguments: hashpartitioning(i_item_id#25, i_item_desc#26, s_store_id#22, s_store_name#23, 5), ENSURE_REQUIREMENTS, [plan_id=5] (39) HashAggregate [codegen id : 9] -Input [7]: [i_item_id#28, i_item_desc#29, s_store_id#24, s_store_name#25, sum#34, sum#35, sum#36] -Keys [4]: [i_item_id#28, i_item_desc#29, s_store_id#24, s_store_name#25] -Functions [3]: [sum(UnscaledValue(ss_net_profit#5)), sum(UnscaledValue(sr_net_loss#11)), sum(UnscaledValue(cs_net_profit#17))] -Aggregate Attributes [3]: [sum(UnscaledValue(ss_net_profit#5))#38, sum(UnscaledValue(sr_net_loss#11))#39, sum(UnscaledValue(cs_net_profit#17))#40] -Results [7]: [i_item_id#28, i_item_desc#29, s_store_id#24, s_store_name#25, MakeDecimal(sum(UnscaledValue(ss_net_profit#5))#38,17,2) AS store_sales_profit#41, MakeDecimal(sum(UnscaledValue(sr_net_loss#11))#39,17,2) AS store_returns_loss#42, MakeDecimal(sum(UnscaledValue(cs_net_profit#17))#40,17,2) AS catalog_sales_profit#43] +Input [7]: [i_item_id#25, i_item_desc#26, s_store_id#22, s_store_name#23, sum#30, sum#31, sum#32] +Keys [4]: [i_item_id#25, i_item_desc#26, s_store_id#22, s_store_name#23] +Functions [3]: [sum(UnscaledValue(ss_net_profit#5)), sum(UnscaledValue(sr_net_loss#11)), sum(UnscaledValue(cs_net_profit#16))] +Aggregate Attributes [3]: [sum(UnscaledValue(ss_net_profit#5))#33, sum(UnscaledValue(sr_net_loss#11))#34, sum(UnscaledValue(cs_net_profit#16))#35] +Results [7]: [i_item_id#25, i_item_desc#26, s_store_id#22, s_store_name#23, MakeDecimal(sum(UnscaledValue(ss_net_profit#5))#33,17,2) AS store_sales_profit#36, MakeDecimal(sum(UnscaledValue(sr_net_loss#11))#34,17,2) AS store_returns_loss#37, MakeDecimal(sum(UnscaledValue(cs_net_profit#16))#35,17,2) AS catalog_sales_profit#38] (40) TakeOrderedAndProject -Input [7]: [i_item_id#28, i_item_desc#29, s_store_id#24, s_store_name#25, store_sales_profit#41, store_returns_loss#42, catalog_sales_profit#43] -Arguments: 100, [i_item_id#28 ASC NULLS FIRST, i_item_desc#29 ASC NULLS FIRST, s_store_id#24 ASC NULLS FIRST, s_store_name#25 ASC NULLS FIRST], [i_item_id#28, i_item_desc#29, s_store_id#24, s_store_name#25, store_sales_profit#41, store_returns_loss#42, catalog_sales_profit#43] +Input [7]: [i_item_id#25, i_item_desc#26, s_store_id#22, s_store_name#23, store_sales_profit#36, store_returns_loss#37, catalog_sales_profit#38] +Arguments: 100, [i_item_id#25 ASC NULLS FIRST, i_item_desc#26 ASC NULLS FIRST, s_store_id#22 ASC NULLS FIRST, s_store_name#23 ASC NULLS FIRST], [i_item_id#25, i_item_desc#26, s_store_id#22, s_store_name#23, store_sales_profit#36, store_returns_loss#37, catalog_sales_profit#38] ===== Subqueries ===== @@ -235,26 +235,26 @@ BroadcastExchange (45) (41) Scan parquet default.date_dim -Output [3]: [d_date_sk#20, d_year#44, d_moy#45] +Output [3]: [d_date_sk#18, d_year#39, d_moy#40] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_moy,4), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (42) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#20, d_year#44, d_moy#45] +Input [3]: [d_date_sk#18, d_year#39, d_moy#40] (43) Filter [codegen id : 1] -Input [3]: [d_date_sk#20, d_year#44, d_moy#45] -Condition : ((((isnotnull(d_moy#45) AND isnotnull(d_year#44)) AND (d_moy#45 = 4)) AND (d_year#44 = 2001)) AND isnotnull(d_date_sk#20)) +Input [3]: [d_date_sk#18, d_year#39, d_moy#40] +Condition : ((((isnotnull(d_moy#40) AND isnotnull(d_year#39)) AND (d_moy#40 = 4)) AND (d_year#39 = 2001)) AND isnotnull(d_date_sk#18)) (44) Project [codegen id : 1] -Output [1]: [d_date_sk#20] -Input [3]: [d_date_sk#20, d_year#44, d_moy#45] +Output [1]: [d_date_sk#18] +Input [3]: [d_date_sk#18, d_year#39, d_moy#40] (45) BroadcastExchange -Input [1]: [d_date_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#46] +Input [1]: [d_date_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] Subquery:2 Hosting operator id = 4 Hosting Expression = sr_returned_date_sk#12 IN dynamicpruning#13 BroadcastExchange (50) @@ -265,27 +265,27 @@ BroadcastExchange (50) (46) Scan parquet default.date_dim -Output [3]: [d_date_sk#21, d_year#47, d_moy#48] +Output [3]: [d_date_sk#19, d_year#41, d_moy#42] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,10), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#21, d_year#47, d_moy#48] +Input [3]: [d_date_sk#19, d_year#41, d_moy#42] (48) Filter [codegen id : 1] -Input [3]: [d_date_sk#21, d_year#47, d_moy#48] -Condition : (((((isnotnull(d_moy#48) AND isnotnull(d_year#47)) AND (d_moy#48 >= 4)) AND (d_moy#48 <= 10)) AND (d_year#47 = 2001)) AND isnotnull(d_date_sk#21)) +Input [3]: [d_date_sk#19, d_year#41, d_moy#42] +Condition : (((((isnotnull(d_moy#42) AND isnotnull(d_year#41)) AND (d_moy#42 >= 4)) AND (d_moy#42 <= 10)) AND (d_year#41 = 2001)) AND isnotnull(d_date_sk#19)) (49) Project [codegen id : 1] -Output [1]: [d_date_sk#21] -Input [3]: [d_date_sk#21, d_year#47, d_moy#48] +Output [1]: [d_date_sk#19] +Input [3]: [d_date_sk#19, d_year#41, d_moy#42] (50) BroadcastExchange -Input [1]: [d_date_sk#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#49] +Input [1]: [d_date_sk#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:3 Hosting operator id = 10 Hosting Expression = cs_sold_date_sk#18 IN dynamicpruning#13 +Subquery:3 Hosting operator id = 10 Hosting Expression = cs_sold_date_sk#17 IN dynamicpruning#13 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q26.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q26.sf100/explain.txt index 2a9a6d00ba3c8..794c0071290d7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q26.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q26.sf100/explain.txt @@ -66,7 +66,7 @@ Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_stat (8) BroadcastExchange Input [1]: [cd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_bill_cdemo_sk#1] @@ -78,96 +78,96 @@ Output [7]: [cs_item_sk#2, cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sal Input [9]: [cs_bill_cdemo_sk#1, cs_item_sk#2, cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_sold_date_sk#8, cd_demo_sk#10] (11) Scan parquet default.promotion -Output [3]: [p_promo_sk#15, p_channel_email#16, p_channel_event#17] +Output [3]: [p_promo_sk#14, p_channel_email#15, p_channel_event#16] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [Or(EqualTo(p_channel_email,N),EqualTo(p_channel_event,N)), IsNotNull(p_promo_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [3]: [p_promo_sk#15, p_channel_email#16, p_channel_event#17] +Input [3]: [p_promo_sk#14, p_channel_email#15, p_channel_event#16] (13) Filter [codegen id : 2] -Input [3]: [p_promo_sk#15, p_channel_email#16, p_channel_event#17] -Condition : (((p_channel_email#16 = N) OR (p_channel_event#17 = N)) AND isnotnull(p_promo_sk#15)) +Input [3]: [p_promo_sk#14, p_channel_email#15, p_channel_event#16] +Condition : (((p_channel_email#15 = N) OR (p_channel_event#16 = N)) AND isnotnull(p_promo_sk#14)) (14) Project [codegen id : 2] -Output [1]: [p_promo_sk#15] -Input [3]: [p_promo_sk#15, p_channel_email#16, p_channel_event#17] +Output [1]: [p_promo_sk#14] +Input [3]: [p_promo_sk#14, p_channel_email#15, p_channel_event#16] (15) BroadcastExchange -Input [1]: [p_promo_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [1]: [p_promo_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_promo_sk#3] -Right keys [1]: [p_promo_sk#15] +Right keys [1]: [p_promo_sk#14] Join condition: None (17) Project [codegen id : 5] Output [6]: [cs_item_sk#2, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_sold_date_sk#8] -Input [8]: [cs_item_sk#2, cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_sold_date_sk#8, p_promo_sk#15] +Input [8]: [cs_item_sk#2, cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_sold_date_sk#8, p_promo_sk#14] (18) ReusedExchange [Reuses operator id: 35] -Output [1]: [d_date_sk#19] +Output [1]: [d_date_sk#17] (19) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_sold_date_sk#8] -Right keys [1]: [d_date_sk#19] +Right keys [1]: [d_date_sk#17] Join condition: None (20) Project [codegen id : 5] Output [5]: [cs_item_sk#2, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7] -Input [7]: [cs_item_sk#2, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_sold_date_sk#8, d_date_sk#19] +Input [7]: [cs_item_sk#2, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_sold_date_sk#8, d_date_sk#17] (21) Scan parquet default.item -Output [2]: [i_item_sk#20, i_item_id#21] +Output [2]: [i_item_sk#18, i_item_id#19] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#20, i_item_id#21] +Input [2]: [i_item_sk#18, i_item_id#19] (23) Filter [codegen id : 4] -Input [2]: [i_item_sk#20, i_item_id#21] -Condition : isnotnull(i_item_sk#20) +Input [2]: [i_item_sk#18, i_item_id#19] +Condition : isnotnull(i_item_sk#18) (24) BroadcastExchange -Input [2]: [i_item_sk#20, i_item_id#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#22] +Input [2]: [i_item_sk#18, i_item_id#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (25) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_item_sk#2] -Right keys [1]: [i_item_sk#20] +Right keys [1]: [i_item_sk#18] Join condition: None (26) Project [codegen id : 5] -Output [5]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_id#21] -Input [7]: [cs_item_sk#2, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_sk#20, i_item_id#21] +Output [5]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_id#19] +Input [7]: [cs_item_sk#2, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_sk#18, i_item_id#19] (27) HashAggregate [codegen id : 5] -Input [5]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_id#21] -Keys [1]: [i_item_id#21] +Input [5]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_id#19] +Keys [1]: [i_item_id#19] Functions [4]: [partial_avg(cs_quantity#4), partial_avg(UnscaledValue(cs_list_price#5)), partial_avg(UnscaledValue(cs_coupon_amt#7)), partial_avg(UnscaledValue(cs_sales_price#6))] -Aggregate Attributes [8]: [sum#23, count#24, sum#25, count#26, sum#27, count#28, sum#29, count#30] -Results [9]: [i_item_id#21, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] +Aggregate Attributes [8]: [sum#20, count#21, sum#22, count#23, sum#24, count#25, sum#26, count#27] +Results [9]: [i_item_id#19, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] (28) Exchange -Input [9]: [i_item_id#21, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] -Arguments: hashpartitioning(i_item_id#21, 5), ENSURE_REQUIREMENTS, [id=#39] +Input [9]: [i_item_id#19, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] +Arguments: hashpartitioning(i_item_id#19, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 6] -Input [9]: [i_item_id#21, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] -Keys [1]: [i_item_id#21] +Input [9]: [i_item_id#19, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] +Keys [1]: [i_item_id#19] Functions [4]: [avg(cs_quantity#4), avg(UnscaledValue(cs_list_price#5)), avg(UnscaledValue(cs_coupon_amt#7)), avg(UnscaledValue(cs_sales_price#6))] -Aggregate Attributes [4]: [avg(cs_quantity#4)#40, avg(UnscaledValue(cs_list_price#5))#41, avg(UnscaledValue(cs_coupon_amt#7))#42, avg(UnscaledValue(cs_sales_price#6))#43] -Results [5]: [i_item_id#21, avg(cs_quantity#4)#40 AS agg1#44, cast((avg(UnscaledValue(cs_list_price#5))#41 / 100.0) as decimal(11,6)) AS agg2#45, cast((avg(UnscaledValue(cs_coupon_amt#7))#42 / 100.0) as decimal(11,6)) AS agg3#46, cast((avg(UnscaledValue(cs_sales_price#6))#43 / 100.0) as decimal(11,6)) AS agg4#47] +Aggregate Attributes [4]: [avg(cs_quantity#4)#36, avg(UnscaledValue(cs_list_price#5))#37, avg(UnscaledValue(cs_coupon_amt#7))#38, avg(UnscaledValue(cs_sales_price#6))#39] +Results [5]: [i_item_id#19, avg(cs_quantity#4)#36 AS agg1#40, cast((avg(UnscaledValue(cs_list_price#5))#37 / 100.0) as decimal(11,6)) AS agg2#41, cast((avg(UnscaledValue(cs_coupon_amt#7))#38 / 100.0) as decimal(11,6)) AS agg3#42, cast((avg(UnscaledValue(cs_sales_price#6))#39 / 100.0) as decimal(11,6)) AS agg4#43] (30) TakeOrderedAndProject -Input [5]: [i_item_id#21, agg1#44, agg2#45, agg3#46, agg4#47] -Arguments: 100, [i_item_id#21 ASC NULLS FIRST], [i_item_id#21, agg1#44, agg2#45, agg3#46, agg4#47] +Input [5]: [i_item_id#19, agg1#40, agg2#41, agg3#42, agg4#43] +Arguments: 100, [i_item_id#19 ASC NULLS FIRST], [i_item_id#19, agg1#40, agg2#41, agg3#42, agg4#43] ===== Subqueries ===== @@ -180,25 +180,25 @@ BroadcastExchange (35) (31) Scan parquet default.date_dim -Output [2]: [d_date_sk#19, d_year#48] +Output [2]: [d_date_sk#17, d_year#44] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#19, d_year#48] +Input [2]: [d_date_sk#17, d_year#44] (33) Filter [codegen id : 1] -Input [2]: [d_date_sk#19, d_year#48] -Condition : ((isnotnull(d_year#48) AND (d_year#48 = 2000)) AND isnotnull(d_date_sk#19)) +Input [2]: [d_date_sk#17, d_year#44] +Condition : ((isnotnull(d_year#44) AND (d_year#44 = 2000)) AND isnotnull(d_date_sk#17)) (34) Project [codegen id : 1] -Output [1]: [d_date_sk#19] -Input [2]: [d_date_sk#19, d_year#48] +Output [1]: [d_date_sk#17] +Input [2]: [d_date_sk#17, d_year#44] (35) BroadcastExchange -Input [1]: [d_date_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#49] +Input [1]: [d_date_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q26/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q26/explain.txt index bde65bfda5cbf..400c7ef4af608 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q26/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q26/explain.txt @@ -66,7 +66,7 @@ Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_stat (8) BroadcastExchange Input [1]: [cd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_bill_cdemo_sk#1] @@ -78,96 +78,96 @@ Output [7]: [cs_item_sk#2, cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sal Input [9]: [cs_bill_cdemo_sk#1, cs_item_sk#2, cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_sold_date_sk#8, cd_demo_sk#10] (11) ReusedExchange [Reuses operator id: 35] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_sold_date_sk#8] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (13) Project [codegen id : 5] Output [6]: [cs_item_sk#2, cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7] -Input [8]: [cs_item_sk#2, cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_sold_date_sk#8, d_date_sk#15] +Input [8]: [cs_item_sk#2, cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_sold_date_sk#8, d_date_sk#14] (14) Scan parquet default.item -Output [2]: [i_item_sk#16, i_item_id#17] +Output [2]: [i_item_sk#15, i_item_id#16] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [2]: [i_item_sk#16, i_item_id#17] +Input [2]: [i_item_sk#15, i_item_id#16] (16) Filter [codegen id : 3] -Input [2]: [i_item_sk#16, i_item_id#17] -Condition : isnotnull(i_item_sk#16) +Input [2]: [i_item_sk#15, i_item_id#16] +Condition : isnotnull(i_item_sk#15) (17) BroadcastExchange -Input [2]: [i_item_sk#16, i_item_id#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#18] +Input [2]: [i_item_sk#15, i_item_id#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_item_sk#2] -Right keys [1]: [i_item_sk#16] +Right keys [1]: [i_item_sk#15] Join condition: None (19) Project [codegen id : 5] -Output [6]: [cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_id#17] -Input [8]: [cs_item_sk#2, cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_sk#16, i_item_id#17] +Output [6]: [cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_id#16] +Input [8]: [cs_item_sk#2, cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_sk#15, i_item_id#16] (20) Scan parquet default.promotion -Output [3]: [p_promo_sk#19, p_channel_email#20, p_channel_event#21] +Output [3]: [p_promo_sk#17, p_channel_email#18, p_channel_event#19] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [Or(EqualTo(p_channel_email,N),EqualTo(p_channel_event,N)), IsNotNull(p_promo_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [3]: [p_promo_sk#19, p_channel_email#20, p_channel_event#21] +Input [3]: [p_promo_sk#17, p_channel_email#18, p_channel_event#19] (22) Filter [codegen id : 4] -Input [3]: [p_promo_sk#19, p_channel_email#20, p_channel_event#21] -Condition : (((p_channel_email#20 = N) OR (p_channel_event#21 = N)) AND isnotnull(p_promo_sk#19)) +Input [3]: [p_promo_sk#17, p_channel_email#18, p_channel_event#19] +Condition : (((p_channel_email#18 = N) OR (p_channel_event#19 = N)) AND isnotnull(p_promo_sk#17)) (23) Project [codegen id : 4] -Output [1]: [p_promo_sk#19] -Input [3]: [p_promo_sk#19, p_channel_email#20, p_channel_event#21] +Output [1]: [p_promo_sk#17] +Input [3]: [p_promo_sk#17, p_channel_email#18, p_channel_event#19] (24) BroadcastExchange -Input [1]: [p_promo_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [p_promo_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (25) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_promo_sk#3] -Right keys [1]: [p_promo_sk#19] +Right keys [1]: [p_promo_sk#17] Join condition: None (26) Project [codegen id : 5] -Output [5]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_id#17] -Input [7]: [cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_id#17, p_promo_sk#19] +Output [5]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_id#16] +Input [7]: [cs_promo_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_id#16, p_promo_sk#17] (27) HashAggregate [codegen id : 5] -Input [5]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_id#17] -Keys [1]: [i_item_id#17] +Input [5]: [cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, i_item_id#16] +Keys [1]: [i_item_id#16] Functions [4]: [partial_avg(cs_quantity#4), partial_avg(UnscaledValue(cs_list_price#5)), partial_avg(UnscaledValue(cs_coupon_amt#7)), partial_avg(UnscaledValue(cs_sales_price#6))] -Aggregate Attributes [8]: [sum#23, count#24, sum#25, count#26, sum#27, count#28, sum#29, count#30] -Results [9]: [i_item_id#17, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] +Aggregate Attributes [8]: [sum#20, count#21, sum#22, count#23, sum#24, count#25, sum#26, count#27] +Results [9]: [i_item_id#16, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] (28) Exchange -Input [9]: [i_item_id#17, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] -Arguments: hashpartitioning(i_item_id#17, 5), ENSURE_REQUIREMENTS, [id=#39] +Input [9]: [i_item_id#16, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] +Arguments: hashpartitioning(i_item_id#16, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 6] -Input [9]: [i_item_id#17, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] -Keys [1]: [i_item_id#17] +Input [9]: [i_item_id#16, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] +Keys [1]: [i_item_id#16] Functions [4]: [avg(cs_quantity#4), avg(UnscaledValue(cs_list_price#5)), avg(UnscaledValue(cs_coupon_amt#7)), avg(UnscaledValue(cs_sales_price#6))] -Aggregate Attributes [4]: [avg(cs_quantity#4)#40, avg(UnscaledValue(cs_list_price#5))#41, avg(UnscaledValue(cs_coupon_amt#7))#42, avg(UnscaledValue(cs_sales_price#6))#43] -Results [5]: [i_item_id#17, avg(cs_quantity#4)#40 AS agg1#44, cast((avg(UnscaledValue(cs_list_price#5))#41 / 100.0) as decimal(11,6)) AS agg2#45, cast((avg(UnscaledValue(cs_coupon_amt#7))#42 / 100.0) as decimal(11,6)) AS agg3#46, cast((avg(UnscaledValue(cs_sales_price#6))#43 / 100.0) as decimal(11,6)) AS agg4#47] +Aggregate Attributes [4]: [avg(cs_quantity#4)#36, avg(UnscaledValue(cs_list_price#5))#37, avg(UnscaledValue(cs_coupon_amt#7))#38, avg(UnscaledValue(cs_sales_price#6))#39] +Results [5]: [i_item_id#16, avg(cs_quantity#4)#36 AS agg1#40, cast((avg(UnscaledValue(cs_list_price#5))#37 / 100.0) as decimal(11,6)) AS agg2#41, cast((avg(UnscaledValue(cs_coupon_amt#7))#38 / 100.0) as decimal(11,6)) AS agg3#42, cast((avg(UnscaledValue(cs_sales_price#6))#39 / 100.0) as decimal(11,6)) AS agg4#43] (30) TakeOrderedAndProject -Input [5]: [i_item_id#17, agg1#44, agg2#45, agg3#46, agg4#47] -Arguments: 100, [i_item_id#17 ASC NULLS FIRST], [i_item_id#17, agg1#44, agg2#45, agg3#46, agg4#47] +Input [5]: [i_item_id#16, agg1#40, agg2#41, agg3#42, agg4#43] +Arguments: 100, [i_item_id#16 ASC NULLS FIRST], [i_item_id#16, agg1#40, agg2#41, agg3#42, agg4#43] ===== Subqueries ===== @@ -180,25 +180,25 @@ BroadcastExchange (35) (31) Scan parquet default.date_dim -Output [2]: [d_date_sk#15, d_year#48] +Output [2]: [d_date_sk#14, d_year#44] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#48] +Input [2]: [d_date_sk#14, d_year#44] (33) Filter [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#48] -Condition : ((isnotnull(d_year#48) AND (d_year#48 = 2000)) AND isnotnull(d_date_sk#15)) +Input [2]: [d_date_sk#14, d_year#44] +Condition : ((isnotnull(d_year#44) AND (d_year#44 = 2000)) AND isnotnull(d_date_sk#14)) (34) Project [codegen id : 1] -Output [1]: [d_date_sk#15] -Input [2]: [d_date_sk#15, d_year#48] +Output [1]: [d_date_sk#14] +Input [2]: [d_date_sk#14, d_year#44] (35) BroadcastExchange -Input [1]: [d_date_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#49] +Input [1]: [d_date_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q27.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q27.sf100/explain.txt index 7600710283f2a..b75522de2a074 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q27.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q27.sf100/explain.txt @@ -66,7 +66,7 @@ Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_stat (8) BroadcastExchange Input [1]: [cd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_cdemo_sk#2] @@ -78,96 +78,96 @@ Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10] (11) ReusedExchange [Reuses operator id: 35] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (13) Project [codegen id : 5] Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#14] (14) Scan parquet default.store -Output [2]: [s_store_sk#16, s_state#17] +Output [2]: [s_store_sk#15, s_state#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_state), EqualTo(s_state,TN), IsNotNull(s_store_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [2]: [s_store_sk#16, s_state#17] +Input [2]: [s_store_sk#15, s_state#16] (16) Filter [codegen id : 3] -Input [2]: [s_store_sk#16, s_state#17] -Condition : ((isnotnull(s_state#17) AND (s_state#17 = TN)) AND isnotnull(s_store_sk#16)) +Input [2]: [s_store_sk#15, s_state#16] +Condition : ((isnotnull(s_state#16) AND (s_state#16 = TN)) AND isnotnull(s_store_sk#15)) (17) BroadcastExchange -Input [2]: [s_store_sk#16, s_state#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#18] +Input [2]: [s_store_sk#15, s_state#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#16] +Right keys [1]: [s_store_sk#15] Join condition: None (19) Project [codegen id : 5] -Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#17] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#16, s_state#17] +Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#16] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#15, s_state#16] (20) Scan parquet default.item -Output [2]: [i_item_sk#19, i_item_id#20] +Output [2]: [i_item_sk#17, i_item_id#18] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#19, i_item_id#20] +Input [2]: [i_item_sk#17, i_item_id#18] (22) Filter [codegen id : 4] -Input [2]: [i_item_sk#19, i_item_id#20] -Condition : isnotnull(i_item_sk#19) +Input [2]: [i_item_sk#17, i_item_id#18] +Condition : isnotnull(i_item_sk#17) (23) BroadcastExchange -Input [2]: [i_item_sk#19, i_item_id#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21] +Input [2]: [i_item_sk#17, i_item_id#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#19] +Right keys [1]: [i_item_sk#17] Join condition: None (25) Project [codegen id : 5] -Output [6]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#20, s_state#17] -Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#17, i_item_sk#19, i_item_id#20] +Output [6]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#18, s_state#16] +Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#16, i_item_sk#17, i_item_id#18] (26) Expand [codegen id : 5] -Input [6]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#20, s_state#17] -Arguments: [[ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#20, s_state#17, 0], [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#20, null, 1], [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, null, null, 3]], [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#22, s_state#23, spark_grouping_id#24] +Input [6]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#18, s_state#16] +Arguments: [[ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#18, s_state#16, 0], [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#18, null, 1], [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, null, null, 3]], [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#19, s_state#20, spark_grouping_id#21] (27) HashAggregate [codegen id : 5] -Input [7]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#22, s_state#23, spark_grouping_id#24] -Keys [3]: [i_item_id#22, s_state#23, spark_grouping_id#24] +Input [7]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#19, s_state#20, spark_grouping_id#21] +Keys [3]: [i_item_id#19, s_state#20, spark_grouping_id#21] Functions [4]: [partial_avg(ss_quantity#4), partial_avg(UnscaledValue(ss_list_price#5)), partial_avg(UnscaledValue(ss_coupon_amt#7)), partial_avg(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [8]: [sum#25, count#26, sum#27, count#28, sum#29, count#30, sum#31, count#32] -Results [11]: [i_item_id#22, s_state#23, spark_grouping_id#24, sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39, count#40] +Aggregate Attributes [8]: [sum#22, count#23, sum#24, count#25, sum#26, count#27, sum#28, count#29] +Results [11]: [i_item_id#19, s_state#20, spark_grouping_id#21, sum#30, count#31, sum#32, count#33, sum#34, count#35, sum#36, count#37] (28) Exchange -Input [11]: [i_item_id#22, s_state#23, spark_grouping_id#24, sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39, count#40] -Arguments: hashpartitioning(i_item_id#22, s_state#23, spark_grouping_id#24, 5), ENSURE_REQUIREMENTS, [id=#41] +Input [11]: [i_item_id#19, s_state#20, spark_grouping_id#21, sum#30, count#31, sum#32, count#33, sum#34, count#35, sum#36, count#37] +Arguments: hashpartitioning(i_item_id#19, s_state#20, spark_grouping_id#21, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 6] -Input [11]: [i_item_id#22, s_state#23, spark_grouping_id#24, sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39, count#40] -Keys [3]: [i_item_id#22, s_state#23, spark_grouping_id#24] +Input [11]: [i_item_id#19, s_state#20, spark_grouping_id#21, sum#30, count#31, sum#32, count#33, sum#34, count#35, sum#36, count#37] +Keys [3]: [i_item_id#19, s_state#20, spark_grouping_id#21] Functions [4]: [avg(ss_quantity#4), avg(UnscaledValue(ss_list_price#5)), avg(UnscaledValue(ss_coupon_amt#7)), avg(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [4]: [avg(ss_quantity#4)#42, avg(UnscaledValue(ss_list_price#5))#43, avg(UnscaledValue(ss_coupon_amt#7))#44, avg(UnscaledValue(ss_sales_price#6))#45] -Results [7]: [i_item_id#22, s_state#23, cast((shiftright(spark_grouping_id#24, 0) & 1) as tinyint) AS g_state#46, avg(ss_quantity#4)#42 AS agg1#47, cast((avg(UnscaledValue(ss_list_price#5))#43 / 100.0) as decimal(11,6)) AS agg2#48, cast((avg(UnscaledValue(ss_coupon_amt#7))#44 / 100.0) as decimal(11,6)) AS agg3#49, cast((avg(UnscaledValue(ss_sales_price#6))#45 / 100.0) as decimal(11,6)) AS agg4#50] +Aggregate Attributes [4]: [avg(ss_quantity#4)#38, avg(UnscaledValue(ss_list_price#5))#39, avg(UnscaledValue(ss_coupon_amt#7))#40, avg(UnscaledValue(ss_sales_price#6))#41] +Results [7]: [i_item_id#19, s_state#20, cast((shiftright(spark_grouping_id#21, 0) & 1) as tinyint) AS g_state#42, avg(ss_quantity#4)#38 AS agg1#43, cast((avg(UnscaledValue(ss_list_price#5))#39 / 100.0) as decimal(11,6)) AS agg2#44, cast((avg(UnscaledValue(ss_coupon_amt#7))#40 / 100.0) as decimal(11,6)) AS agg3#45, cast((avg(UnscaledValue(ss_sales_price#6))#41 / 100.0) as decimal(11,6)) AS agg4#46] (30) TakeOrderedAndProject -Input [7]: [i_item_id#22, s_state#23, g_state#46, agg1#47, agg2#48, agg3#49, agg4#50] -Arguments: 100, [i_item_id#22 ASC NULLS FIRST, s_state#23 ASC NULLS FIRST], [i_item_id#22, s_state#23, g_state#46, agg1#47, agg2#48, agg3#49, agg4#50] +Input [7]: [i_item_id#19, s_state#20, g_state#42, agg1#43, agg2#44, agg3#45, agg4#46] +Arguments: 100, [i_item_id#19 ASC NULLS FIRST, s_state#20 ASC NULLS FIRST], [i_item_id#19, s_state#20, g_state#42, agg1#43, agg2#44, agg3#45, agg4#46] ===== Subqueries ===== @@ -180,25 +180,25 @@ BroadcastExchange (35) (31) Scan parquet default.date_dim -Output [2]: [d_date_sk#15, d_year#51] +Output [2]: [d_date_sk#14, d_year#47] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#51] +Input [2]: [d_date_sk#14, d_year#47] (33) Filter [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#51] -Condition : ((isnotnull(d_year#51) AND (d_year#51 = 2002)) AND isnotnull(d_date_sk#15)) +Input [2]: [d_date_sk#14, d_year#47] +Condition : ((isnotnull(d_year#47) AND (d_year#47 = 2002)) AND isnotnull(d_date_sk#14)) (34) Project [codegen id : 1] -Output [1]: [d_date_sk#15] -Input [2]: [d_date_sk#15, d_year#51] +Output [1]: [d_date_sk#14] +Input [2]: [d_date_sk#14, d_year#47] (35) BroadcastExchange -Input [1]: [d_date_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#52] +Input [1]: [d_date_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q27/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q27/explain.txt index 7600710283f2a..b75522de2a074 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q27/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q27/explain.txt @@ -66,7 +66,7 @@ Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_stat (8) BroadcastExchange Input [1]: [cd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_cdemo_sk#2] @@ -78,96 +78,96 @@ Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10] (11) ReusedExchange [Reuses operator id: 35] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (13) Project [codegen id : 5] Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#14] (14) Scan parquet default.store -Output [2]: [s_store_sk#16, s_state#17] +Output [2]: [s_store_sk#15, s_state#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_state), EqualTo(s_state,TN), IsNotNull(s_store_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [2]: [s_store_sk#16, s_state#17] +Input [2]: [s_store_sk#15, s_state#16] (16) Filter [codegen id : 3] -Input [2]: [s_store_sk#16, s_state#17] -Condition : ((isnotnull(s_state#17) AND (s_state#17 = TN)) AND isnotnull(s_store_sk#16)) +Input [2]: [s_store_sk#15, s_state#16] +Condition : ((isnotnull(s_state#16) AND (s_state#16 = TN)) AND isnotnull(s_store_sk#15)) (17) BroadcastExchange -Input [2]: [s_store_sk#16, s_state#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#18] +Input [2]: [s_store_sk#15, s_state#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#16] +Right keys [1]: [s_store_sk#15] Join condition: None (19) Project [codegen id : 5] -Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#17] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#16, s_state#17] +Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#16] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#15, s_state#16] (20) Scan parquet default.item -Output [2]: [i_item_sk#19, i_item_id#20] +Output [2]: [i_item_sk#17, i_item_id#18] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#19, i_item_id#20] +Input [2]: [i_item_sk#17, i_item_id#18] (22) Filter [codegen id : 4] -Input [2]: [i_item_sk#19, i_item_id#20] -Condition : isnotnull(i_item_sk#19) +Input [2]: [i_item_sk#17, i_item_id#18] +Condition : isnotnull(i_item_sk#17) (23) BroadcastExchange -Input [2]: [i_item_sk#19, i_item_id#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21] +Input [2]: [i_item_sk#17, i_item_id#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#19] +Right keys [1]: [i_item_sk#17] Join condition: None (25) Project [codegen id : 5] -Output [6]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#20, s_state#17] -Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#17, i_item_sk#19, i_item_id#20] +Output [6]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#18, s_state#16] +Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#16, i_item_sk#17, i_item_id#18] (26) Expand [codegen id : 5] -Input [6]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#20, s_state#17] -Arguments: [[ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#20, s_state#17, 0], [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#20, null, 1], [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, null, null, 3]], [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#22, s_state#23, spark_grouping_id#24] +Input [6]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#18, s_state#16] +Arguments: [[ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#18, s_state#16, 0], [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#18, null, 1], [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, null, null, 3]], [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#19, s_state#20, spark_grouping_id#21] (27) HashAggregate [codegen id : 5] -Input [7]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#22, s_state#23, spark_grouping_id#24] -Keys [3]: [i_item_id#22, s_state#23, spark_grouping_id#24] +Input [7]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#19, s_state#20, spark_grouping_id#21] +Keys [3]: [i_item_id#19, s_state#20, spark_grouping_id#21] Functions [4]: [partial_avg(ss_quantity#4), partial_avg(UnscaledValue(ss_list_price#5)), partial_avg(UnscaledValue(ss_coupon_amt#7)), partial_avg(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [8]: [sum#25, count#26, sum#27, count#28, sum#29, count#30, sum#31, count#32] -Results [11]: [i_item_id#22, s_state#23, spark_grouping_id#24, sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39, count#40] +Aggregate Attributes [8]: [sum#22, count#23, sum#24, count#25, sum#26, count#27, sum#28, count#29] +Results [11]: [i_item_id#19, s_state#20, spark_grouping_id#21, sum#30, count#31, sum#32, count#33, sum#34, count#35, sum#36, count#37] (28) Exchange -Input [11]: [i_item_id#22, s_state#23, spark_grouping_id#24, sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39, count#40] -Arguments: hashpartitioning(i_item_id#22, s_state#23, spark_grouping_id#24, 5), ENSURE_REQUIREMENTS, [id=#41] +Input [11]: [i_item_id#19, s_state#20, spark_grouping_id#21, sum#30, count#31, sum#32, count#33, sum#34, count#35, sum#36, count#37] +Arguments: hashpartitioning(i_item_id#19, s_state#20, spark_grouping_id#21, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 6] -Input [11]: [i_item_id#22, s_state#23, spark_grouping_id#24, sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39, count#40] -Keys [3]: [i_item_id#22, s_state#23, spark_grouping_id#24] +Input [11]: [i_item_id#19, s_state#20, spark_grouping_id#21, sum#30, count#31, sum#32, count#33, sum#34, count#35, sum#36, count#37] +Keys [3]: [i_item_id#19, s_state#20, spark_grouping_id#21] Functions [4]: [avg(ss_quantity#4), avg(UnscaledValue(ss_list_price#5)), avg(UnscaledValue(ss_coupon_amt#7)), avg(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [4]: [avg(ss_quantity#4)#42, avg(UnscaledValue(ss_list_price#5))#43, avg(UnscaledValue(ss_coupon_amt#7))#44, avg(UnscaledValue(ss_sales_price#6))#45] -Results [7]: [i_item_id#22, s_state#23, cast((shiftright(spark_grouping_id#24, 0) & 1) as tinyint) AS g_state#46, avg(ss_quantity#4)#42 AS agg1#47, cast((avg(UnscaledValue(ss_list_price#5))#43 / 100.0) as decimal(11,6)) AS agg2#48, cast((avg(UnscaledValue(ss_coupon_amt#7))#44 / 100.0) as decimal(11,6)) AS agg3#49, cast((avg(UnscaledValue(ss_sales_price#6))#45 / 100.0) as decimal(11,6)) AS agg4#50] +Aggregate Attributes [4]: [avg(ss_quantity#4)#38, avg(UnscaledValue(ss_list_price#5))#39, avg(UnscaledValue(ss_coupon_amt#7))#40, avg(UnscaledValue(ss_sales_price#6))#41] +Results [7]: [i_item_id#19, s_state#20, cast((shiftright(spark_grouping_id#21, 0) & 1) as tinyint) AS g_state#42, avg(ss_quantity#4)#38 AS agg1#43, cast((avg(UnscaledValue(ss_list_price#5))#39 / 100.0) as decimal(11,6)) AS agg2#44, cast((avg(UnscaledValue(ss_coupon_amt#7))#40 / 100.0) as decimal(11,6)) AS agg3#45, cast((avg(UnscaledValue(ss_sales_price#6))#41 / 100.0) as decimal(11,6)) AS agg4#46] (30) TakeOrderedAndProject -Input [7]: [i_item_id#22, s_state#23, g_state#46, agg1#47, agg2#48, agg3#49, agg4#50] -Arguments: 100, [i_item_id#22 ASC NULLS FIRST, s_state#23 ASC NULLS FIRST], [i_item_id#22, s_state#23, g_state#46, agg1#47, agg2#48, agg3#49, agg4#50] +Input [7]: [i_item_id#19, s_state#20, g_state#42, agg1#43, agg2#44, agg3#45, agg4#46] +Arguments: 100, [i_item_id#19 ASC NULLS FIRST, s_state#20 ASC NULLS FIRST], [i_item_id#19, s_state#20, g_state#42, agg1#43, agg2#44, agg3#45, agg4#46] ===== Subqueries ===== @@ -180,25 +180,25 @@ BroadcastExchange (35) (31) Scan parquet default.date_dim -Output [2]: [d_date_sk#15, d_year#51] +Output [2]: [d_date_sk#14, d_year#47] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#51] +Input [2]: [d_date_sk#14, d_year#47] (33) Filter [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#51] -Condition : ((isnotnull(d_year#51) AND (d_year#51 = 2002)) AND isnotnull(d_date_sk#15)) +Input [2]: [d_date_sk#14, d_year#47] +Condition : ((isnotnull(d_year#47) AND (d_year#47 = 2002)) AND isnotnull(d_date_sk#14)) (34) Project [codegen id : 1] -Output [1]: [d_date_sk#15] -Input [2]: [d_date_sk#15, d_year#51] +Output [1]: [d_date_sk#14] +Input [2]: [d_date_sk#14, d_year#47] (35) BroadcastExchange -Input [1]: [d_date_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#52] +Input [1]: [d_date_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q28.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q28.sf100/explain.txt index eec45ea549531..6c140d3d95a9d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q28.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q28.sf100/explain.txt @@ -98,7 +98,7 @@ Results [4]: [ss_list_price#3, sum#8, count#9, count#10] (6) Exchange Input [4]: [ss_list_price#3, sum#8, count#9, count#10] -Arguments: hashpartitioning(ss_list_price#3, 5), ENSURE_REQUIREMENTS, [id=#11] +Arguments: hashpartitioning(ss_list_price#3, 5), ENSURE_REQUIREMENTS, [plan_id=1] (7) HashAggregate [codegen id : 2] Input [4]: [ss_list_price#3, sum#8, count#9, count#10] @@ -111,321 +111,321 @@ Results [4]: [ss_list_price#3, sum#8, count#9, count#10] Input [4]: [ss_list_price#3, sum#8, count#9, count#10] Keys: [] Functions [3]: [merge_avg(UnscaledValue(ss_list_price#3)), merge_count(ss_list_price#3), partial_count(distinct ss_list_price#3)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#3))#6, count(ss_list_price#3)#7, count(ss_list_price#3)#12] -Results [4]: [sum#8, count#9, count#10, count#13] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#3))#6, count(ss_list_price#3)#7, count(ss_list_price#3)#11] +Results [4]: [sum#8, count#9, count#10, count#12] (9) Exchange -Input [4]: [sum#8, count#9, count#10, count#13] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#14] +Input [4]: [sum#8, count#9, count#10, count#12] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2] (10) HashAggregate [codegen id : 18] -Input [4]: [sum#8, count#9, count#10, count#13] +Input [4]: [sum#8, count#9, count#10, count#12] Keys: [] Functions [3]: [avg(UnscaledValue(ss_list_price#3)), count(ss_list_price#3), count(distinct ss_list_price#3)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#3))#6, count(ss_list_price#3)#7, count(ss_list_price#3)#12] -Results [3]: [cast((avg(UnscaledValue(ss_list_price#3))#6 / 100.0) as decimal(11,6)) AS B1_LP#15, count(ss_list_price#3)#7 AS B1_CNT#16, count(ss_list_price#3)#12 AS B1_CNTD#17] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#3))#6, count(ss_list_price#3)#7, count(ss_list_price#3)#11] +Results [3]: [cast((avg(UnscaledValue(ss_list_price#3))#6 / 100.0) as decimal(11,6)) AS B1_LP#13, count(ss_list_price#3)#7 AS B1_CNT#14, count(ss_list_price#3)#11 AS B1_CNTD#15] (11) Scan parquet default.store_sales -Output [5]: [ss_quantity#18, ss_wholesale_cost#19, ss_list_price#20, ss_coupon_amt#21, ss_sold_date_sk#22] +Output [5]: [ss_quantity#16, ss_wholesale_cost#17, ss_list_price#18, ss_coupon_amt#19, ss_sold_date_sk#20] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,6), LessThanOrEqual(ss_quantity,10), Or(Or(And(GreaterThanOrEqual(ss_list_price,90.00),LessThanOrEqual(ss_list_price,100.00)),And(GreaterThanOrEqual(ss_coupon_amt,2323.00),LessThanOrEqual(ss_coupon_amt,3323.00))),And(GreaterThanOrEqual(ss_wholesale_cost,31.00),LessThanOrEqual(ss_wholesale_cost,51.00)))] ReadSchema: struct (12) ColumnarToRow [codegen id : 3] -Input [5]: [ss_quantity#18, ss_wholesale_cost#19, ss_list_price#20, ss_coupon_amt#21, ss_sold_date_sk#22] +Input [5]: [ss_quantity#16, ss_wholesale_cost#17, ss_list_price#18, ss_coupon_amt#19, ss_sold_date_sk#20] (13) Filter [codegen id : 3] -Input [5]: [ss_quantity#18, ss_wholesale_cost#19, ss_list_price#20, ss_coupon_amt#21, ss_sold_date_sk#22] -Condition : (((isnotnull(ss_quantity#18) AND (ss_quantity#18 >= 6)) AND (ss_quantity#18 <= 10)) AND ((((ss_list_price#20 >= 90.00) AND (ss_list_price#20 <= 100.00)) OR ((ss_coupon_amt#21 >= 2323.00) AND (ss_coupon_amt#21 <= 3323.00))) OR ((ss_wholesale_cost#19 >= 31.00) AND (ss_wholesale_cost#19 <= 51.00)))) +Input [5]: [ss_quantity#16, ss_wholesale_cost#17, ss_list_price#18, ss_coupon_amt#19, ss_sold_date_sk#20] +Condition : (((isnotnull(ss_quantity#16) AND (ss_quantity#16 >= 6)) AND (ss_quantity#16 <= 10)) AND ((((ss_list_price#18 >= 90.00) AND (ss_list_price#18 <= 100.00)) OR ((ss_coupon_amt#19 >= 2323.00) AND (ss_coupon_amt#19 <= 3323.00))) OR ((ss_wholesale_cost#17 >= 31.00) AND (ss_wholesale_cost#17 <= 51.00)))) (14) Project [codegen id : 3] -Output [1]: [ss_list_price#20] -Input [5]: [ss_quantity#18, ss_wholesale_cost#19, ss_list_price#20, ss_coupon_amt#21, ss_sold_date_sk#22] +Output [1]: [ss_list_price#18] +Input [5]: [ss_quantity#16, ss_wholesale_cost#17, ss_list_price#18, ss_coupon_amt#19, ss_sold_date_sk#20] (15) HashAggregate [codegen id : 3] -Input [1]: [ss_list_price#20] -Keys [1]: [ss_list_price#20] -Functions [2]: [partial_avg(UnscaledValue(ss_list_price#20)), partial_count(ss_list_price#20)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#20))#23, count(ss_list_price#20)#24] -Results [4]: [ss_list_price#20, sum#25, count#26, count#27] +Input [1]: [ss_list_price#18] +Keys [1]: [ss_list_price#18] +Functions [2]: [partial_avg(UnscaledValue(ss_list_price#18)), partial_count(ss_list_price#18)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#18))#21, count(ss_list_price#18)#22] +Results [4]: [ss_list_price#18, sum#23, count#24, count#25] (16) Exchange -Input [4]: [ss_list_price#20, sum#25, count#26, count#27] -Arguments: hashpartitioning(ss_list_price#20, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [4]: [ss_list_price#18, sum#23, count#24, count#25] +Arguments: hashpartitioning(ss_list_price#18, 5), ENSURE_REQUIREMENTS, [plan_id=3] (17) HashAggregate [codegen id : 4] -Input [4]: [ss_list_price#20, sum#25, count#26, count#27] -Keys [1]: [ss_list_price#20] -Functions [2]: [merge_avg(UnscaledValue(ss_list_price#20)), merge_count(ss_list_price#20)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#20))#23, count(ss_list_price#20)#24] -Results [4]: [ss_list_price#20, sum#25, count#26, count#27] +Input [4]: [ss_list_price#18, sum#23, count#24, count#25] +Keys [1]: [ss_list_price#18] +Functions [2]: [merge_avg(UnscaledValue(ss_list_price#18)), merge_count(ss_list_price#18)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#18))#21, count(ss_list_price#18)#22] +Results [4]: [ss_list_price#18, sum#23, count#24, count#25] (18) HashAggregate [codegen id : 4] -Input [4]: [ss_list_price#20, sum#25, count#26, count#27] +Input [4]: [ss_list_price#18, sum#23, count#24, count#25] Keys: [] -Functions [3]: [merge_avg(UnscaledValue(ss_list_price#20)), merge_count(ss_list_price#20), partial_count(distinct ss_list_price#20)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#20))#23, count(ss_list_price#20)#24, count(ss_list_price#20)#29] -Results [4]: [sum#25, count#26, count#27, count#30] +Functions [3]: [merge_avg(UnscaledValue(ss_list_price#18)), merge_count(ss_list_price#18), partial_count(distinct ss_list_price#18)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#18))#21, count(ss_list_price#18)#22, count(ss_list_price#18)#26] +Results [4]: [sum#23, count#24, count#25, count#27] (19) Exchange -Input [4]: [sum#25, count#26, count#27, count#30] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#31] +Input [4]: [sum#23, count#24, count#25, count#27] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (20) HashAggregate [codegen id : 5] -Input [4]: [sum#25, count#26, count#27, count#30] +Input [4]: [sum#23, count#24, count#25, count#27] Keys: [] -Functions [3]: [avg(UnscaledValue(ss_list_price#20)), count(ss_list_price#20), count(distinct ss_list_price#20)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#20))#23, count(ss_list_price#20)#24, count(ss_list_price#20)#29] -Results [3]: [cast((avg(UnscaledValue(ss_list_price#20))#23 / 100.0) as decimal(11,6)) AS B2_LP#32, count(ss_list_price#20)#24 AS B2_CNT#33, count(ss_list_price#20)#29 AS B2_CNTD#34] +Functions [3]: [avg(UnscaledValue(ss_list_price#18)), count(ss_list_price#18), count(distinct ss_list_price#18)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#18))#21, count(ss_list_price#18)#22, count(ss_list_price#18)#26] +Results [3]: [cast((avg(UnscaledValue(ss_list_price#18))#21 / 100.0) as decimal(11,6)) AS B2_LP#28, count(ss_list_price#18)#22 AS B2_CNT#29, count(ss_list_price#18)#26 AS B2_CNTD#30] (21) BroadcastExchange -Input [3]: [B2_LP#32, B2_CNT#33, B2_CNTD#34] -Arguments: IdentityBroadcastMode, [id=#35] +Input [3]: [B2_LP#28, B2_CNT#29, B2_CNTD#30] +Arguments: IdentityBroadcastMode, [plan_id=5] (22) BroadcastNestedLoopJoin [codegen id : 18] Join condition: None (23) Scan parquet default.store_sales -Output [5]: [ss_quantity#36, ss_wholesale_cost#37, ss_list_price#38, ss_coupon_amt#39, ss_sold_date_sk#40] +Output [5]: [ss_quantity#31, ss_wholesale_cost#32, ss_list_price#33, ss_coupon_amt#34, ss_sold_date_sk#35] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,11), LessThanOrEqual(ss_quantity,15), Or(Or(And(GreaterThanOrEqual(ss_list_price,142.00),LessThanOrEqual(ss_list_price,152.00)),And(GreaterThanOrEqual(ss_coupon_amt,12214.00),LessThanOrEqual(ss_coupon_amt,13214.00))),And(GreaterThanOrEqual(ss_wholesale_cost,79.00),LessThanOrEqual(ss_wholesale_cost,99.00)))] ReadSchema: struct (24) ColumnarToRow [codegen id : 6] -Input [5]: [ss_quantity#36, ss_wholesale_cost#37, ss_list_price#38, ss_coupon_amt#39, ss_sold_date_sk#40] +Input [5]: [ss_quantity#31, ss_wholesale_cost#32, ss_list_price#33, ss_coupon_amt#34, ss_sold_date_sk#35] (25) Filter [codegen id : 6] -Input [5]: [ss_quantity#36, ss_wholesale_cost#37, ss_list_price#38, ss_coupon_amt#39, ss_sold_date_sk#40] -Condition : (((isnotnull(ss_quantity#36) AND (ss_quantity#36 >= 11)) AND (ss_quantity#36 <= 15)) AND ((((ss_list_price#38 >= 142.00) AND (ss_list_price#38 <= 152.00)) OR ((ss_coupon_amt#39 >= 12214.00) AND (ss_coupon_amt#39 <= 13214.00))) OR ((ss_wholesale_cost#37 >= 79.00) AND (ss_wholesale_cost#37 <= 99.00)))) +Input [5]: [ss_quantity#31, ss_wholesale_cost#32, ss_list_price#33, ss_coupon_amt#34, ss_sold_date_sk#35] +Condition : (((isnotnull(ss_quantity#31) AND (ss_quantity#31 >= 11)) AND (ss_quantity#31 <= 15)) AND ((((ss_list_price#33 >= 142.00) AND (ss_list_price#33 <= 152.00)) OR ((ss_coupon_amt#34 >= 12214.00) AND (ss_coupon_amt#34 <= 13214.00))) OR ((ss_wholesale_cost#32 >= 79.00) AND (ss_wholesale_cost#32 <= 99.00)))) (26) Project [codegen id : 6] -Output [1]: [ss_list_price#38] -Input [5]: [ss_quantity#36, ss_wholesale_cost#37, ss_list_price#38, ss_coupon_amt#39, ss_sold_date_sk#40] +Output [1]: [ss_list_price#33] +Input [5]: [ss_quantity#31, ss_wholesale_cost#32, ss_list_price#33, ss_coupon_amt#34, ss_sold_date_sk#35] (27) HashAggregate [codegen id : 6] -Input [1]: [ss_list_price#38] -Keys [1]: [ss_list_price#38] -Functions [2]: [partial_avg(UnscaledValue(ss_list_price#38)), partial_count(ss_list_price#38)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#38))#41, count(ss_list_price#38)#42] -Results [4]: [ss_list_price#38, sum#43, count#44, count#45] +Input [1]: [ss_list_price#33] +Keys [1]: [ss_list_price#33] +Functions [2]: [partial_avg(UnscaledValue(ss_list_price#33)), partial_count(ss_list_price#33)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#33))#36, count(ss_list_price#33)#37] +Results [4]: [ss_list_price#33, sum#38, count#39, count#40] (28) Exchange -Input [4]: [ss_list_price#38, sum#43, count#44, count#45] -Arguments: hashpartitioning(ss_list_price#38, 5), ENSURE_REQUIREMENTS, [id=#46] +Input [4]: [ss_list_price#33, sum#38, count#39, count#40] +Arguments: hashpartitioning(ss_list_price#33, 5), ENSURE_REQUIREMENTS, [plan_id=6] (29) HashAggregate [codegen id : 7] -Input [4]: [ss_list_price#38, sum#43, count#44, count#45] -Keys [1]: [ss_list_price#38] -Functions [2]: [merge_avg(UnscaledValue(ss_list_price#38)), merge_count(ss_list_price#38)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#38))#41, count(ss_list_price#38)#42] -Results [4]: [ss_list_price#38, sum#43, count#44, count#45] +Input [4]: [ss_list_price#33, sum#38, count#39, count#40] +Keys [1]: [ss_list_price#33] +Functions [2]: [merge_avg(UnscaledValue(ss_list_price#33)), merge_count(ss_list_price#33)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#33))#36, count(ss_list_price#33)#37] +Results [4]: [ss_list_price#33, sum#38, count#39, count#40] (30) HashAggregate [codegen id : 7] -Input [4]: [ss_list_price#38, sum#43, count#44, count#45] +Input [4]: [ss_list_price#33, sum#38, count#39, count#40] Keys: [] -Functions [3]: [merge_avg(UnscaledValue(ss_list_price#38)), merge_count(ss_list_price#38), partial_count(distinct ss_list_price#38)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#38))#41, count(ss_list_price#38)#42, count(ss_list_price#38)#47] -Results [4]: [sum#43, count#44, count#45, count#48] +Functions [3]: [merge_avg(UnscaledValue(ss_list_price#33)), merge_count(ss_list_price#33), partial_count(distinct ss_list_price#33)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#33))#36, count(ss_list_price#33)#37, count(ss_list_price#33)#41] +Results [4]: [sum#38, count#39, count#40, count#42] (31) Exchange -Input [4]: [sum#43, count#44, count#45, count#48] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#49] +Input [4]: [sum#38, count#39, count#40, count#42] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (32) HashAggregate [codegen id : 8] -Input [4]: [sum#43, count#44, count#45, count#48] +Input [4]: [sum#38, count#39, count#40, count#42] Keys: [] -Functions [3]: [avg(UnscaledValue(ss_list_price#38)), count(ss_list_price#38), count(distinct ss_list_price#38)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#38))#41, count(ss_list_price#38)#42, count(ss_list_price#38)#47] -Results [3]: [cast((avg(UnscaledValue(ss_list_price#38))#41 / 100.0) as decimal(11,6)) AS B3_LP#50, count(ss_list_price#38)#42 AS B3_CNT#51, count(ss_list_price#38)#47 AS B3_CNTD#52] +Functions [3]: [avg(UnscaledValue(ss_list_price#33)), count(ss_list_price#33), count(distinct ss_list_price#33)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#33))#36, count(ss_list_price#33)#37, count(ss_list_price#33)#41] +Results [3]: [cast((avg(UnscaledValue(ss_list_price#33))#36 / 100.0) as decimal(11,6)) AS B3_LP#43, count(ss_list_price#33)#37 AS B3_CNT#44, count(ss_list_price#33)#41 AS B3_CNTD#45] (33) BroadcastExchange -Input [3]: [B3_LP#50, B3_CNT#51, B3_CNTD#52] -Arguments: IdentityBroadcastMode, [id=#53] +Input [3]: [B3_LP#43, B3_CNT#44, B3_CNTD#45] +Arguments: IdentityBroadcastMode, [plan_id=8] (34) BroadcastNestedLoopJoin [codegen id : 18] Join condition: None (35) Scan parquet default.store_sales -Output [5]: [ss_quantity#54, ss_wholesale_cost#55, ss_list_price#56, ss_coupon_amt#57, ss_sold_date_sk#58] +Output [5]: [ss_quantity#46, ss_wholesale_cost#47, ss_list_price#48, ss_coupon_amt#49, ss_sold_date_sk#50] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,16), LessThanOrEqual(ss_quantity,20), Or(Or(And(GreaterThanOrEqual(ss_list_price,135.00),LessThanOrEqual(ss_list_price,145.00)),And(GreaterThanOrEqual(ss_coupon_amt,6071.00),LessThanOrEqual(ss_coupon_amt,7071.00))),And(GreaterThanOrEqual(ss_wholesale_cost,38.00),LessThanOrEqual(ss_wholesale_cost,58.00)))] ReadSchema: struct (36) ColumnarToRow [codegen id : 9] -Input [5]: [ss_quantity#54, ss_wholesale_cost#55, ss_list_price#56, ss_coupon_amt#57, ss_sold_date_sk#58] +Input [5]: [ss_quantity#46, ss_wholesale_cost#47, ss_list_price#48, ss_coupon_amt#49, ss_sold_date_sk#50] (37) Filter [codegen id : 9] -Input [5]: [ss_quantity#54, ss_wholesale_cost#55, ss_list_price#56, ss_coupon_amt#57, ss_sold_date_sk#58] -Condition : (((isnotnull(ss_quantity#54) AND (ss_quantity#54 >= 16)) AND (ss_quantity#54 <= 20)) AND ((((ss_list_price#56 >= 135.00) AND (ss_list_price#56 <= 145.00)) OR ((ss_coupon_amt#57 >= 6071.00) AND (ss_coupon_amt#57 <= 7071.00))) OR ((ss_wholesale_cost#55 >= 38.00) AND (ss_wholesale_cost#55 <= 58.00)))) +Input [5]: [ss_quantity#46, ss_wholesale_cost#47, ss_list_price#48, ss_coupon_amt#49, ss_sold_date_sk#50] +Condition : (((isnotnull(ss_quantity#46) AND (ss_quantity#46 >= 16)) AND (ss_quantity#46 <= 20)) AND ((((ss_list_price#48 >= 135.00) AND (ss_list_price#48 <= 145.00)) OR ((ss_coupon_amt#49 >= 6071.00) AND (ss_coupon_amt#49 <= 7071.00))) OR ((ss_wholesale_cost#47 >= 38.00) AND (ss_wholesale_cost#47 <= 58.00)))) (38) Project [codegen id : 9] -Output [1]: [ss_list_price#56] -Input [5]: [ss_quantity#54, ss_wholesale_cost#55, ss_list_price#56, ss_coupon_amt#57, ss_sold_date_sk#58] +Output [1]: [ss_list_price#48] +Input [5]: [ss_quantity#46, ss_wholesale_cost#47, ss_list_price#48, ss_coupon_amt#49, ss_sold_date_sk#50] (39) HashAggregate [codegen id : 9] -Input [1]: [ss_list_price#56] -Keys [1]: [ss_list_price#56] -Functions [2]: [partial_avg(UnscaledValue(ss_list_price#56)), partial_count(ss_list_price#56)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#56))#59, count(ss_list_price#56)#60] -Results [4]: [ss_list_price#56, sum#61, count#62, count#63] +Input [1]: [ss_list_price#48] +Keys [1]: [ss_list_price#48] +Functions [2]: [partial_avg(UnscaledValue(ss_list_price#48)), partial_count(ss_list_price#48)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#48))#51, count(ss_list_price#48)#52] +Results [4]: [ss_list_price#48, sum#53, count#54, count#55] (40) Exchange -Input [4]: [ss_list_price#56, sum#61, count#62, count#63] -Arguments: hashpartitioning(ss_list_price#56, 5), ENSURE_REQUIREMENTS, [id=#64] +Input [4]: [ss_list_price#48, sum#53, count#54, count#55] +Arguments: hashpartitioning(ss_list_price#48, 5), ENSURE_REQUIREMENTS, [plan_id=9] (41) HashAggregate [codegen id : 10] -Input [4]: [ss_list_price#56, sum#61, count#62, count#63] -Keys [1]: [ss_list_price#56] -Functions [2]: [merge_avg(UnscaledValue(ss_list_price#56)), merge_count(ss_list_price#56)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#56))#59, count(ss_list_price#56)#60] -Results [4]: [ss_list_price#56, sum#61, count#62, count#63] +Input [4]: [ss_list_price#48, sum#53, count#54, count#55] +Keys [1]: [ss_list_price#48] +Functions [2]: [merge_avg(UnscaledValue(ss_list_price#48)), merge_count(ss_list_price#48)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#48))#51, count(ss_list_price#48)#52] +Results [4]: [ss_list_price#48, sum#53, count#54, count#55] (42) HashAggregate [codegen id : 10] -Input [4]: [ss_list_price#56, sum#61, count#62, count#63] +Input [4]: [ss_list_price#48, sum#53, count#54, count#55] Keys: [] -Functions [3]: [merge_avg(UnscaledValue(ss_list_price#56)), merge_count(ss_list_price#56), partial_count(distinct ss_list_price#56)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#56))#59, count(ss_list_price#56)#60, count(ss_list_price#56)#65] -Results [4]: [sum#61, count#62, count#63, count#66] +Functions [3]: [merge_avg(UnscaledValue(ss_list_price#48)), merge_count(ss_list_price#48), partial_count(distinct ss_list_price#48)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#48))#51, count(ss_list_price#48)#52, count(ss_list_price#48)#56] +Results [4]: [sum#53, count#54, count#55, count#57] (43) Exchange -Input [4]: [sum#61, count#62, count#63, count#66] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#67] +Input [4]: [sum#53, count#54, count#55, count#57] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10] (44) HashAggregate [codegen id : 11] -Input [4]: [sum#61, count#62, count#63, count#66] +Input [4]: [sum#53, count#54, count#55, count#57] Keys: [] -Functions [3]: [avg(UnscaledValue(ss_list_price#56)), count(ss_list_price#56), count(distinct ss_list_price#56)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#56))#59, count(ss_list_price#56)#60, count(ss_list_price#56)#65] -Results [3]: [cast((avg(UnscaledValue(ss_list_price#56))#59 / 100.0) as decimal(11,6)) AS B4_LP#68, count(ss_list_price#56)#60 AS B4_CNT#69, count(ss_list_price#56)#65 AS B4_CNTD#70] +Functions [3]: [avg(UnscaledValue(ss_list_price#48)), count(ss_list_price#48), count(distinct ss_list_price#48)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#48))#51, count(ss_list_price#48)#52, count(ss_list_price#48)#56] +Results [3]: [cast((avg(UnscaledValue(ss_list_price#48))#51 / 100.0) as decimal(11,6)) AS B4_LP#58, count(ss_list_price#48)#52 AS B4_CNT#59, count(ss_list_price#48)#56 AS B4_CNTD#60] (45) BroadcastExchange -Input [3]: [B4_LP#68, B4_CNT#69, B4_CNTD#70] -Arguments: IdentityBroadcastMode, [id=#71] +Input [3]: [B4_LP#58, B4_CNT#59, B4_CNTD#60] +Arguments: IdentityBroadcastMode, [plan_id=11] (46) BroadcastNestedLoopJoin [codegen id : 18] Join condition: None (47) Scan parquet default.store_sales -Output [5]: [ss_quantity#72, ss_wholesale_cost#73, ss_list_price#74, ss_coupon_amt#75, ss_sold_date_sk#76] +Output [5]: [ss_quantity#61, ss_wholesale_cost#62, ss_list_price#63, ss_coupon_amt#64, ss_sold_date_sk#65] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,21), LessThanOrEqual(ss_quantity,25), Or(Or(And(GreaterThanOrEqual(ss_list_price,122.00),LessThanOrEqual(ss_list_price,132.00)),And(GreaterThanOrEqual(ss_coupon_amt,836.00),LessThanOrEqual(ss_coupon_amt,1836.00))),And(GreaterThanOrEqual(ss_wholesale_cost,17.00),LessThanOrEqual(ss_wholesale_cost,37.00)))] ReadSchema: struct (48) ColumnarToRow [codegen id : 12] -Input [5]: [ss_quantity#72, ss_wholesale_cost#73, ss_list_price#74, ss_coupon_amt#75, ss_sold_date_sk#76] +Input [5]: [ss_quantity#61, ss_wholesale_cost#62, ss_list_price#63, ss_coupon_amt#64, ss_sold_date_sk#65] (49) Filter [codegen id : 12] -Input [5]: [ss_quantity#72, ss_wholesale_cost#73, ss_list_price#74, ss_coupon_amt#75, ss_sold_date_sk#76] -Condition : (((isnotnull(ss_quantity#72) AND (ss_quantity#72 >= 21)) AND (ss_quantity#72 <= 25)) AND ((((ss_list_price#74 >= 122.00) AND (ss_list_price#74 <= 132.00)) OR ((ss_coupon_amt#75 >= 836.00) AND (ss_coupon_amt#75 <= 1836.00))) OR ((ss_wholesale_cost#73 >= 17.00) AND (ss_wholesale_cost#73 <= 37.00)))) +Input [5]: [ss_quantity#61, ss_wholesale_cost#62, ss_list_price#63, ss_coupon_amt#64, ss_sold_date_sk#65] +Condition : (((isnotnull(ss_quantity#61) AND (ss_quantity#61 >= 21)) AND (ss_quantity#61 <= 25)) AND ((((ss_list_price#63 >= 122.00) AND (ss_list_price#63 <= 132.00)) OR ((ss_coupon_amt#64 >= 836.00) AND (ss_coupon_amt#64 <= 1836.00))) OR ((ss_wholesale_cost#62 >= 17.00) AND (ss_wholesale_cost#62 <= 37.00)))) (50) Project [codegen id : 12] -Output [1]: [ss_list_price#74] -Input [5]: [ss_quantity#72, ss_wholesale_cost#73, ss_list_price#74, ss_coupon_amt#75, ss_sold_date_sk#76] +Output [1]: [ss_list_price#63] +Input [5]: [ss_quantity#61, ss_wholesale_cost#62, ss_list_price#63, ss_coupon_amt#64, ss_sold_date_sk#65] (51) HashAggregate [codegen id : 12] -Input [1]: [ss_list_price#74] -Keys [1]: [ss_list_price#74] -Functions [2]: [partial_avg(UnscaledValue(ss_list_price#74)), partial_count(ss_list_price#74)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#74))#77, count(ss_list_price#74)#78] -Results [4]: [ss_list_price#74, sum#79, count#80, count#81] +Input [1]: [ss_list_price#63] +Keys [1]: [ss_list_price#63] +Functions [2]: [partial_avg(UnscaledValue(ss_list_price#63)), partial_count(ss_list_price#63)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#63))#66, count(ss_list_price#63)#67] +Results [4]: [ss_list_price#63, sum#68, count#69, count#70] (52) Exchange -Input [4]: [ss_list_price#74, sum#79, count#80, count#81] -Arguments: hashpartitioning(ss_list_price#74, 5), ENSURE_REQUIREMENTS, [id=#82] +Input [4]: [ss_list_price#63, sum#68, count#69, count#70] +Arguments: hashpartitioning(ss_list_price#63, 5), ENSURE_REQUIREMENTS, [plan_id=12] (53) HashAggregate [codegen id : 13] -Input [4]: [ss_list_price#74, sum#79, count#80, count#81] -Keys [1]: [ss_list_price#74] -Functions [2]: [merge_avg(UnscaledValue(ss_list_price#74)), merge_count(ss_list_price#74)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#74))#77, count(ss_list_price#74)#78] -Results [4]: [ss_list_price#74, sum#79, count#80, count#81] +Input [4]: [ss_list_price#63, sum#68, count#69, count#70] +Keys [1]: [ss_list_price#63] +Functions [2]: [merge_avg(UnscaledValue(ss_list_price#63)), merge_count(ss_list_price#63)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#63))#66, count(ss_list_price#63)#67] +Results [4]: [ss_list_price#63, sum#68, count#69, count#70] (54) HashAggregate [codegen id : 13] -Input [4]: [ss_list_price#74, sum#79, count#80, count#81] +Input [4]: [ss_list_price#63, sum#68, count#69, count#70] Keys: [] -Functions [3]: [merge_avg(UnscaledValue(ss_list_price#74)), merge_count(ss_list_price#74), partial_count(distinct ss_list_price#74)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#74))#77, count(ss_list_price#74)#78, count(ss_list_price#74)#83] -Results [4]: [sum#79, count#80, count#81, count#84] +Functions [3]: [merge_avg(UnscaledValue(ss_list_price#63)), merge_count(ss_list_price#63), partial_count(distinct ss_list_price#63)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#63))#66, count(ss_list_price#63)#67, count(ss_list_price#63)#71] +Results [4]: [sum#68, count#69, count#70, count#72] (55) Exchange -Input [4]: [sum#79, count#80, count#81, count#84] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#85] +Input [4]: [sum#68, count#69, count#70, count#72] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=13] (56) HashAggregate [codegen id : 14] -Input [4]: [sum#79, count#80, count#81, count#84] +Input [4]: [sum#68, count#69, count#70, count#72] Keys: [] -Functions [3]: [avg(UnscaledValue(ss_list_price#74)), count(ss_list_price#74), count(distinct ss_list_price#74)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#74))#77, count(ss_list_price#74)#78, count(ss_list_price#74)#83] -Results [3]: [cast((avg(UnscaledValue(ss_list_price#74))#77 / 100.0) as decimal(11,6)) AS B5_LP#86, count(ss_list_price#74)#78 AS B5_CNT#87, count(ss_list_price#74)#83 AS B5_CNTD#88] +Functions [3]: [avg(UnscaledValue(ss_list_price#63)), count(ss_list_price#63), count(distinct ss_list_price#63)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#63))#66, count(ss_list_price#63)#67, count(ss_list_price#63)#71] +Results [3]: [cast((avg(UnscaledValue(ss_list_price#63))#66 / 100.0) as decimal(11,6)) AS B5_LP#73, count(ss_list_price#63)#67 AS B5_CNT#74, count(ss_list_price#63)#71 AS B5_CNTD#75] (57) BroadcastExchange -Input [3]: [B5_LP#86, B5_CNT#87, B5_CNTD#88] -Arguments: IdentityBroadcastMode, [id=#89] +Input [3]: [B5_LP#73, B5_CNT#74, B5_CNTD#75] +Arguments: IdentityBroadcastMode, [plan_id=14] (58) BroadcastNestedLoopJoin [codegen id : 18] Join condition: None (59) Scan parquet default.store_sales -Output [5]: [ss_quantity#90, ss_wholesale_cost#91, ss_list_price#92, ss_coupon_amt#93, ss_sold_date_sk#94] +Output [5]: [ss_quantity#76, ss_wholesale_cost#77, ss_list_price#78, ss_coupon_amt#79, ss_sold_date_sk#80] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,26), LessThanOrEqual(ss_quantity,30), Or(Or(And(GreaterThanOrEqual(ss_list_price,154.00),LessThanOrEqual(ss_list_price,164.00)),And(GreaterThanOrEqual(ss_coupon_amt,7326.00),LessThanOrEqual(ss_coupon_amt,8326.00))),And(GreaterThanOrEqual(ss_wholesale_cost,7.00),LessThanOrEqual(ss_wholesale_cost,27.00)))] ReadSchema: struct (60) ColumnarToRow [codegen id : 15] -Input [5]: [ss_quantity#90, ss_wholesale_cost#91, ss_list_price#92, ss_coupon_amt#93, ss_sold_date_sk#94] +Input [5]: [ss_quantity#76, ss_wholesale_cost#77, ss_list_price#78, ss_coupon_amt#79, ss_sold_date_sk#80] (61) Filter [codegen id : 15] -Input [5]: [ss_quantity#90, ss_wholesale_cost#91, ss_list_price#92, ss_coupon_amt#93, ss_sold_date_sk#94] -Condition : (((isnotnull(ss_quantity#90) AND (ss_quantity#90 >= 26)) AND (ss_quantity#90 <= 30)) AND ((((ss_list_price#92 >= 154.00) AND (ss_list_price#92 <= 164.00)) OR ((ss_coupon_amt#93 >= 7326.00) AND (ss_coupon_amt#93 <= 8326.00))) OR ((ss_wholesale_cost#91 >= 7.00) AND (ss_wholesale_cost#91 <= 27.00)))) +Input [5]: [ss_quantity#76, ss_wholesale_cost#77, ss_list_price#78, ss_coupon_amt#79, ss_sold_date_sk#80] +Condition : (((isnotnull(ss_quantity#76) AND (ss_quantity#76 >= 26)) AND (ss_quantity#76 <= 30)) AND ((((ss_list_price#78 >= 154.00) AND (ss_list_price#78 <= 164.00)) OR ((ss_coupon_amt#79 >= 7326.00) AND (ss_coupon_amt#79 <= 8326.00))) OR ((ss_wholesale_cost#77 >= 7.00) AND (ss_wholesale_cost#77 <= 27.00)))) (62) Project [codegen id : 15] -Output [1]: [ss_list_price#92] -Input [5]: [ss_quantity#90, ss_wholesale_cost#91, ss_list_price#92, ss_coupon_amt#93, ss_sold_date_sk#94] +Output [1]: [ss_list_price#78] +Input [5]: [ss_quantity#76, ss_wholesale_cost#77, ss_list_price#78, ss_coupon_amt#79, ss_sold_date_sk#80] (63) HashAggregate [codegen id : 15] -Input [1]: [ss_list_price#92] -Keys [1]: [ss_list_price#92] -Functions [2]: [partial_avg(UnscaledValue(ss_list_price#92)), partial_count(ss_list_price#92)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#92))#95, count(ss_list_price#92)#96] -Results [4]: [ss_list_price#92, sum#97, count#98, count#99] +Input [1]: [ss_list_price#78] +Keys [1]: [ss_list_price#78] +Functions [2]: [partial_avg(UnscaledValue(ss_list_price#78)), partial_count(ss_list_price#78)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#78))#81, count(ss_list_price#78)#82] +Results [4]: [ss_list_price#78, sum#83, count#84, count#85] (64) Exchange -Input [4]: [ss_list_price#92, sum#97, count#98, count#99] -Arguments: hashpartitioning(ss_list_price#92, 5), ENSURE_REQUIREMENTS, [id=#100] +Input [4]: [ss_list_price#78, sum#83, count#84, count#85] +Arguments: hashpartitioning(ss_list_price#78, 5), ENSURE_REQUIREMENTS, [plan_id=15] (65) HashAggregate [codegen id : 16] -Input [4]: [ss_list_price#92, sum#97, count#98, count#99] -Keys [1]: [ss_list_price#92] -Functions [2]: [merge_avg(UnscaledValue(ss_list_price#92)), merge_count(ss_list_price#92)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#92))#95, count(ss_list_price#92)#96] -Results [4]: [ss_list_price#92, sum#97, count#98, count#99] +Input [4]: [ss_list_price#78, sum#83, count#84, count#85] +Keys [1]: [ss_list_price#78] +Functions [2]: [merge_avg(UnscaledValue(ss_list_price#78)), merge_count(ss_list_price#78)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#78))#81, count(ss_list_price#78)#82] +Results [4]: [ss_list_price#78, sum#83, count#84, count#85] (66) HashAggregate [codegen id : 16] -Input [4]: [ss_list_price#92, sum#97, count#98, count#99] +Input [4]: [ss_list_price#78, sum#83, count#84, count#85] Keys: [] -Functions [3]: [merge_avg(UnscaledValue(ss_list_price#92)), merge_count(ss_list_price#92), partial_count(distinct ss_list_price#92)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#92))#95, count(ss_list_price#92)#96, count(ss_list_price#92)#101] -Results [4]: [sum#97, count#98, count#99, count#102] +Functions [3]: [merge_avg(UnscaledValue(ss_list_price#78)), merge_count(ss_list_price#78), partial_count(distinct ss_list_price#78)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#78))#81, count(ss_list_price#78)#82, count(ss_list_price#78)#86] +Results [4]: [sum#83, count#84, count#85, count#87] (67) Exchange -Input [4]: [sum#97, count#98, count#99, count#102] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#103] +Input [4]: [sum#83, count#84, count#85, count#87] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=16] (68) HashAggregate [codegen id : 17] -Input [4]: [sum#97, count#98, count#99, count#102] +Input [4]: [sum#83, count#84, count#85, count#87] Keys: [] -Functions [3]: [avg(UnscaledValue(ss_list_price#92)), count(ss_list_price#92), count(distinct ss_list_price#92)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#92))#95, count(ss_list_price#92)#96, count(ss_list_price#92)#101] -Results [3]: [cast((avg(UnscaledValue(ss_list_price#92))#95 / 100.0) as decimal(11,6)) AS B6_LP#104, count(ss_list_price#92)#96 AS B6_CNT#105, count(ss_list_price#92)#101 AS B6_CNTD#106] +Functions [3]: [avg(UnscaledValue(ss_list_price#78)), count(ss_list_price#78), count(distinct ss_list_price#78)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#78))#81, count(ss_list_price#78)#82, count(ss_list_price#78)#86] +Results [3]: [cast((avg(UnscaledValue(ss_list_price#78))#81 / 100.0) as decimal(11,6)) AS B6_LP#88, count(ss_list_price#78)#82 AS B6_CNT#89, count(ss_list_price#78)#86 AS B6_CNTD#90] (69) BroadcastExchange -Input [3]: [B6_LP#104, B6_CNT#105, B6_CNTD#106] -Arguments: IdentityBroadcastMode, [id=#107] +Input [3]: [B6_LP#88, B6_CNT#89, B6_CNTD#90] +Arguments: IdentityBroadcastMode, [plan_id=17] (70) BroadcastNestedLoopJoin [codegen id : 18] Join condition: None diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q28/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q28/explain.txt index eec45ea549531..6c140d3d95a9d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q28/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q28/explain.txt @@ -98,7 +98,7 @@ Results [4]: [ss_list_price#3, sum#8, count#9, count#10] (6) Exchange Input [4]: [ss_list_price#3, sum#8, count#9, count#10] -Arguments: hashpartitioning(ss_list_price#3, 5), ENSURE_REQUIREMENTS, [id=#11] +Arguments: hashpartitioning(ss_list_price#3, 5), ENSURE_REQUIREMENTS, [plan_id=1] (7) HashAggregate [codegen id : 2] Input [4]: [ss_list_price#3, sum#8, count#9, count#10] @@ -111,321 +111,321 @@ Results [4]: [ss_list_price#3, sum#8, count#9, count#10] Input [4]: [ss_list_price#3, sum#8, count#9, count#10] Keys: [] Functions [3]: [merge_avg(UnscaledValue(ss_list_price#3)), merge_count(ss_list_price#3), partial_count(distinct ss_list_price#3)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#3))#6, count(ss_list_price#3)#7, count(ss_list_price#3)#12] -Results [4]: [sum#8, count#9, count#10, count#13] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#3))#6, count(ss_list_price#3)#7, count(ss_list_price#3)#11] +Results [4]: [sum#8, count#9, count#10, count#12] (9) Exchange -Input [4]: [sum#8, count#9, count#10, count#13] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#14] +Input [4]: [sum#8, count#9, count#10, count#12] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2] (10) HashAggregate [codegen id : 18] -Input [4]: [sum#8, count#9, count#10, count#13] +Input [4]: [sum#8, count#9, count#10, count#12] Keys: [] Functions [3]: [avg(UnscaledValue(ss_list_price#3)), count(ss_list_price#3), count(distinct ss_list_price#3)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#3))#6, count(ss_list_price#3)#7, count(ss_list_price#3)#12] -Results [3]: [cast((avg(UnscaledValue(ss_list_price#3))#6 / 100.0) as decimal(11,6)) AS B1_LP#15, count(ss_list_price#3)#7 AS B1_CNT#16, count(ss_list_price#3)#12 AS B1_CNTD#17] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#3))#6, count(ss_list_price#3)#7, count(ss_list_price#3)#11] +Results [3]: [cast((avg(UnscaledValue(ss_list_price#3))#6 / 100.0) as decimal(11,6)) AS B1_LP#13, count(ss_list_price#3)#7 AS B1_CNT#14, count(ss_list_price#3)#11 AS B1_CNTD#15] (11) Scan parquet default.store_sales -Output [5]: [ss_quantity#18, ss_wholesale_cost#19, ss_list_price#20, ss_coupon_amt#21, ss_sold_date_sk#22] +Output [5]: [ss_quantity#16, ss_wholesale_cost#17, ss_list_price#18, ss_coupon_amt#19, ss_sold_date_sk#20] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,6), LessThanOrEqual(ss_quantity,10), Or(Or(And(GreaterThanOrEqual(ss_list_price,90.00),LessThanOrEqual(ss_list_price,100.00)),And(GreaterThanOrEqual(ss_coupon_amt,2323.00),LessThanOrEqual(ss_coupon_amt,3323.00))),And(GreaterThanOrEqual(ss_wholesale_cost,31.00),LessThanOrEqual(ss_wholesale_cost,51.00)))] ReadSchema: struct (12) ColumnarToRow [codegen id : 3] -Input [5]: [ss_quantity#18, ss_wholesale_cost#19, ss_list_price#20, ss_coupon_amt#21, ss_sold_date_sk#22] +Input [5]: [ss_quantity#16, ss_wholesale_cost#17, ss_list_price#18, ss_coupon_amt#19, ss_sold_date_sk#20] (13) Filter [codegen id : 3] -Input [5]: [ss_quantity#18, ss_wholesale_cost#19, ss_list_price#20, ss_coupon_amt#21, ss_sold_date_sk#22] -Condition : (((isnotnull(ss_quantity#18) AND (ss_quantity#18 >= 6)) AND (ss_quantity#18 <= 10)) AND ((((ss_list_price#20 >= 90.00) AND (ss_list_price#20 <= 100.00)) OR ((ss_coupon_amt#21 >= 2323.00) AND (ss_coupon_amt#21 <= 3323.00))) OR ((ss_wholesale_cost#19 >= 31.00) AND (ss_wholesale_cost#19 <= 51.00)))) +Input [5]: [ss_quantity#16, ss_wholesale_cost#17, ss_list_price#18, ss_coupon_amt#19, ss_sold_date_sk#20] +Condition : (((isnotnull(ss_quantity#16) AND (ss_quantity#16 >= 6)) AND (ss_quantity#16 <= 10)) AND ((((ss_list_price#18 >= 90.00) AND (ss_list_price#18 <= 100.00)) OR ((ss_coupon_amt#19 >= 2323.00) AND (ss_coupon_amt#19 <= 3323.00))) OR ((ss_wholesale_cost#17 >= 31.00) AND (ss_wholesale_cost#17 <= 51.00)))) (14) Project [codegen id : 3] -Output [1]: [ss_list_price#20] -Input [5]: [ss_quantity#18, ss_wholesale_cost#19, ss_list_price#20, ss_coupon_amt#21, ss_sold_date_sk#22] +Output [1]: [ss_list_price#18] +Input [5]: [ss_quantity#16, ss_wholesale_cost#17, ss_list_price#18, ss_coupon_amt#19, ss_sold_date_sk#20] (15) HashAggregate [codegen id : 3] -Input [1]: [ss_list_price#20] -Keys [1]: [ss_list_price#20] -Functions [2]: [partial_avg(UnscaledValue(ss_list_price#20)), partial_count(ss_list_price#20)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#20))#23, count(ss_list_price#20)#24] -Results [4]: [ss_list_price#20, sum#25, count#26, count#27] +Input [1]: [ss_list_price#18] +Keys [1]: [ss_list_price#18] +Functions [2]: [partial_avg(UnscaledValue(ss_list_price#18)), partial_count(ss_list_price#18)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#18))#21, count(ss_list_price#18)#22] +Results [4]: [ss_list_price#18, sum#23, count#24, count#25] (16) Exchange -Input [4]: [ss_list_price#20, sum#25, count#26, count#27] -Arguments: hashpartitioning(ss_list_price#20, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [4]: [ss_list_price#18, sum#23, count#24, count#25] +Arguments: hashpartitioning(ss_list_price#18, 5), ENSURE_REQUIREMENTS, [plan_id=3] (17) HashAggregate [codegen id : 4] -Input [4]: [ss_list_price#20, sum#25, count#26, count#27] -Keys [1]: [ss_list_price#20] -Functions [2]: [merge_avg(UnscaledValue(ss_list_price#20)), merge_count(ss_list_price#20)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#20))#23, count(ss_list_price#20)#24] -Results [4]: [ss_list_price#20, sum#25, count#26, count#27] +Input [4]: [ss_list_price#18, sum#23, count#24, count#25] +Keys [1]: [ss_list_price#18] +Functions [2]: [merge_avg(UnscaledValue(ss_list_price#18)), merge_count(ss_list_price#18)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#18))#21, count(ss_list_price#18)#22] +Results [4]: [ss_list_price#18, sum#23, count#24, count#25] (18) HashAggregate [codegen id : 4] -Input [4]: [ss_list_price#20, sum#25, count#26, count#27] +Input [4]: [ss_list_price#18, sum#23, count#24, count#25] Keys: [] -Functions [3]: [merge_avg(UnscaledValue(ss_list_price#20)), merge_count(ss_list_price#20), partial_count(distinct ss_list_price#20)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#20))#23, count(ss_list_price#20)#24, count(ss_list_price#20)#29] -Results [4]: [sum#25, count#26, count#27, count#30] +Functions [3]: [merge_avg(UnscaledValue(ss_list_price#18)), merge_count(ss_list_price#18), partial_count(distinct ss_list_price#18)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#18))#21, count(ss_list_price#18)#22, count(ss_list_price#18)#26] +Results [4]: [sum#23, count#24, count#25, count#27] (19) Exchange -Input [4]: [sum#25, count#26, count#27, count#30] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#31] +Input [4]: [sum#23, count#24, count#25, count#27] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (20) HashAggregate [codegen id : 5] -Input [4]: [sum#25, count#26, count#27, count#30] +Input [4]: [sum#23, count#24, count#25, count#27] Keys: [] -Functions [3]: [avg(UnscaledValue(ss_list_price#20)), count(ss_list_price#20), count(distinct ss_list_price#20)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#20))#23, count(ss_list_price#20)#24, count(ss_list_price#20)#29] -Results [3]: [cast((avg(UnscaledValue(ss_list_price#20))#23 / 100.0) as decimal(11,6)) AS B2_LP#32, count(ss_list_price#20)#24 AS B2_CNT#33, count(ss_list_price#20)#29 AS B2_CNTD#34] +Functions [3]: [avg(UnscaledValue(ss_list_price#18)), count(ss_list_price#18), count(distinct ss_list_price#18)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#18))#21, count(ss_list_price#18)#22, count(ss_list_price#18)#26] +Results [3]: [cast((avg(UnscaledValue(ss_list_price#18))#21 / 100.0) as decimal(11,6)) AS B2_LP#28, count(ss_list_price#18)#22 AS B2_CNT#29, count(ss_list_price#18)#26 AS B2_CNTD#30] (21) BroadcastExchange -Input [3]: [B2_LP#32, B2_CNT#33, B2_CNTD#34] -Arguments: IdentityBroadcastMode, [id=#35] +Input [3]: [B2_LP#28, B2_CNT#29, B2_CNTD#30] +Arguments: IdentityBroadcastMode, [plan_id=5] (22) BroadcastNestedLoopJoin [codegen id : 18] Join condition: None (23) Scan parquet default.store_sales -Output [5]: [ss_quantity#36, ss_wholesale_cost#37, ss_list_price#38, ss_coupon_amt#39, ss_sold_date_sk#40] +Output [5]: [ss_quantity#31, ss_wholesale_cost#32, ss_list_price#33, ss_coupon_amt#34, ss_sold_date_sk#35] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,11), LessThanOrEqual(ss_quantity,15), Or(Or(And(GreaterThanOrEqual(ss_list_price,142.00),LessThanOrEqual(ss_list_price,152.00)),And(GreaterThanOrEqual(ss_coupon_amt,12214.00),LessThanOrEqual(ss_coupon_amt,13214.00))),And(GreaterThanOrEqual(ss_wholesale_cost,79.00),LessThanOrEqual(ss_wholesale_cost,99.00)))] ReadSchema: struct (24) ColumnarToRow [codegen id : 6] -Input [5]: [ss_quantity#36, ss_wholesale_cost#37, ss_list_price#38, ss_coupon_amt#39, ss_sold_date_sk#40] +Input [5]: [ss_quantity#31, ss_wholesale_cost#32, ss_list_price#33, ss_coupon_amt#34, ss_sold_date_sk#35] (25) Filter [codegen id : 6] -Input [5]: [ss_quantity#36, ss_wholesale_cost#37, ss_list_price#38, ss_coupon_amt#39, ss_sold_date_sk#40] -Condition : (((isnotnull(ss_quantity#36) AND (ss_quantity#36 >= 11)) AND (ss_quantity#36 <= 15)) AND ((((ss_list_price#38 >= 142.00) AND (ss_list_price#38 <= 152.00)) OR ((ss_coupon_amt#39 >= 12214.00) AND (ss_coupon_amt#39 <= 13214.00))) OR ((ss_wholesale_cost#37 >= 79.00) AND (ss_wholesale_cost#37 <= 99.00)))) +Input [5]: [ss_quantity#31, ss_wholesale_cost#32, ss_list_price#33, ss_coupon_amt#34, ss_sold_date_sk#35] +Condition : (((isnotnull(ss_quantity#31) AND (ss_quantity#31 >= 11)) AND (ss_quantity#31 <= 15)) AND ((((ss_list_price#33 >= 142.00) AND (ss_list_price#33 <= 152.00)) OR ((ss_coupon_amt#34 >= 12214.00) AND (ss_coupon_amt#34 <= 13214.00))) OR ((ss_wholesale_cost#32 >= 79.00) AND (ss_wholesale_cost#32 <= 99.00)))) (26) Project [codegen id : 6] -Output [1]: [ss_list_price#38] -Input [5]: [ss_quantity#36, ss_wholesale_cost#37, ss_list_price#38, ss_coupon_amt#39, ss_sold_date_sk#40] +Output [1]: [ss_list_price#33] +Input [5]: [ss_quantity#31, ss_wholesale_cost#32, ss_list_price#33, ss_coupon_amt#34, ss_sold_date_sk#35] (27) HashAggregate [codegen id : 6] -Input [1]: [ss_list_price#38] -Keys [1]: [ss_list_price#38] -Functions [2]: [partial_avg(UnscaledValue(ss_list_price#38)), partial_count(ss_list_price#38)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#38))#41, count(ss_list_price#38)#42] -Results [4]: [ss_list_price#38, sum#43, count#44, count#45] +Input [1]: [ss_list_price#33] +Keys [1]: [ss_list_price#33] +Functions [2]: [partial_avg(UnscaledValue(ss_list_price#33)), partial_count(ss_list_price#33)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#33))#36, count(ss_list_price#33)#37] +Results [4]: [ss_list_price#33, sum#38, count#39, count#40] (28) Exchange -Input [4]: [ss_list_price#38, sum#43, count#44, count#45] -Arguments: hashpartitioning(ss_list_price#38, 5), ENSURE_REQUIREMENTS, [id=#46] +Input [4]: [ss_list_price#33, sum#38, count#39, count#40] +Arguments: hashpartitioning(ss_list_price#33, 5), ENSURE_REQUIREMENTS, [plan_id=6] (29) HashAggregate [codegen id : 7] -Input [4]: [ss_list_price#38, sum#43, count#44, count#45] -Keys [1]: [ss_list_price#38] -Functions [2]: [merge_avg(UnscaledValue(ss_list_price#38)), merge_count(ss_list_price#38)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#38))#41, count(ss_list_price#38)#42] -Results [4]: [ss_list_price#38, sum#43, count#44, count#45] +Input [4]: [ss_list_price#33, sum#38, count#39, count#40] +Keys [1]: [ss_list_price#33] +Functions [2]: [merge_avg(UnscaledValue(ss_list_price#33)), merge_count(ss_list_price#33)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#33))#36, count(ss_list_price#33)#37] +Results [4]: [ss_list_price#33, sum#38, count#39, count#40] (30) HashAggregate [codegen id : 7] -Input [4]: [ss_list_price#38, sum#43, count#44, count#45] +Input [4]: [ss_list_price#33, sum#38, count#39, count#40] Keys: [] -Functions [3]: [merge_avg(UnscaledValue(ss_list_price#38)), merge_count(ss_list_price#38), partial_count(distinct ss_list_price#38)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#38))#41, count(ss_list_price#38)#42, count(ss_list_price#38)#47] -Results [4]: [sum#43, count#44, count#45, count#48] +Functions [3]: [merge_avg(UnscaledValue(ss_list_price#33)), merge_count(ss_list_price#33), partial_count(distinct ss_list_price#33)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#33))#36, count(ss_list_price#33)#37, count(ss_list_price#33)#41] +Results [4]: [sum#38, count#39, count#40, count#42] (31) Exchange -Input [4]: [sum#43, count#44, count#45, count#48] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#49] +Input [4]: [sum#38, count#39, count#40, count#42] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (32) HashAggregate [codegen id : 8] -Input [4]: [sum#43, count#44, count#45, count#48] +Input [4]: [sum#38, count#39, count#40, count#42] Keys: [] -Functions [3]: [avg(UnscaledValue(ss_list_price#38)), count(ss_list_price#38), count(distinct ss_list_price#38)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#38))#41, count(ss_list_price#38)#42, count(ss_list_price#38)#47] -Results [3]: [cast((avg(UnscaledValue(ss_list_price#38))#41 / 100.0) as decimal(11,6)) AS B3_LP#50, count(ss_list_price#38)#42 AS B3_CNT#51, count(ss_list_price#38)#47 AS B3_CNTD#52] +Functions [3]: [avg(UnscaledValue(ss_list_price#33)), count(ss_list_price#33), count(distinct ss_list_price#33)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#33))#36, count(ss_list_price#33)#37, count(ss_list_price#33)#41] +Results [3]: [cast((avg(UnscaledValue(ss_list_price#33))#36 / 100.0) as decimal(11,6)) AS B3_LP#43, count(ss_list_price#33)#37 AS B3_CNT#44, count(ss_list_price#33)#41 AS B3_CNTD#45] (33) BroadcastExchange -Input [3]: [B3_LP#50, B3_CNT#51, B3_CNTD#52] -Arguments: IdentityBroadcastMode, [id=#53] +Input [3]: [B3_LP#43, B3_CNT#44, B3_CNTD#45] +Arguments: IdentityBroadcastMode, [plan_id=8] (34) BroadcastNestedLoopJoin [codegen id : 18] Join condition: None (35) Scan parquet default.store_sales -Output [5]: [ss_quantity#54, ss_wholesale_cost#55, ss_list_price#56, ss_coupon_amt#57, ss_sold_date_sk#58] +Output [5]: [ss_quantity#46, ss_wholesale_cost#47, ss_list_price#48, ss_coupon_amt#49, ss_sold_date_sk#50] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,16), LessThanOrEqual(ss_quantity,20), Or(Or(And(GreaterThanOrEqual(ss_list_price,135.00),LessThanOrEqual(ss_list_price,145.00)),And(GreaterThanOrEqual(ss_coupon_amt,6071.00),LessThanOrEqual(ss_coupon_amt,7071.00))),And(GreaterThanOrEqual(ss_wholesale_cost,38.00),LessThanOrEqual(ss_wholesale_cost,58.00)))] ReadSchema: struct (36) ColumnarToRow [codegen id : 9] -Input [5]: [ss_quantity#54, ss_wholesale_cost#55, ss_list_price#56, ss_coupon_amt#57, ss_sold_date_sk#58] +Input [5]: [ss_quantity#46, ss_wholesale_cost#47, ss_list_price#48, ss_coupon_amt#49, ss_sold_date_sk#50] (37) Filter [codegen id : 9] -Input [5]: [ss_quantity#54, ss_wholesale_cost#55, ss_list_price#56, ss_coupon_amt#57, ss_sold_date_sk#58] -Condition : (((isnotnull(ss_quantity#54) AND (ss_quantity#54 >= 16)) AND (ss_quantity#54 <= 20)) AND ((((ss_list_price#56 >= 135.00) AND (ss_list_price#56 <= 145.00)) OR ((ss_coupon_amt#57 >= 6071.00) AND (ss_coupon_amt#57 <= 7071.00))) OR ((ss_wholesale_cost#55 >= 38.00) AND (ss_wholesale_cost#55 <= 58.00)))) +Input [5]: [ss_quantity#46, ss_wholesale_cost#47, ss_list_price#48, ss_coupon_amt#49, ss_sold_date_sk#50] +Condition : (((isnotnull(ss_quantity#46) AND (ss_quantity#46 >= 16)) AND (ss_quantity#46 <= 20)) AND ((((ss_list_price#48 >= 135.00) AND (ss_list_price#48 <= 145.00)) OR ((ss_coupon_amt#49 >= 6071.00) AND (ss_coupon_amt#49 <= 7071.00))) OR ((ss_wholesale_cost#47 >= 38.00) AND (ss_wholesale_cost#47 <= 58.00)))) (38) Project [codegen id : 9] -Output [1]: [ss_list_price#56] -Input [5]: [ss_quantity#54, ss_wholesale_cost#55, ss_list_price#56, ss_coupon_amt#57, ss_sold_date_sk#58] +Output [1]: [ss_list_price#48] +Input [5]: [ss_quantity#46, ss_wholesale_cost#47, ss_list_price#48, ss_coupon_amt#49, ss_sold_date_sk#50] (39) HashAggregate [codegen id : 9] -Input [1]: [ss_list_price#56] -Keys [1]: [ss_list_price#56] -Functions [2]: [partial_avg(UnscaledValue(ss_list_price#56)), partial_count(ss_list_price#56)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#56))#59, count(ss_list_price#56)#60] -Results [4]: [ss_list_price#56, sum#61, count#62, count#63] +Input [1]: [ss_list_price#48] +Keys [1]: [ss_list_price#48] +Functions [2]: [partial_avg(UnscaledValue(ss_list_price#48)), partial_count(ss_list_price#48)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#48))#51, count(ss_list_price#48)#52] +Results [4]: [ss_list_price#48, sum#53, count#54, count#55] (40) Exchange -Input [4]: [ss_list_price#56, sum#61, count#62, count#63] -Arguments: hashpartitioning(ss_list_price#56, 5), ENSURE_REQUIREMENTS, [id=#64] +Input [4]: [ss_list_price#48, sum#53, count#54, count#55] +Arguments: hashpartitioning(ss_list_price#48, 5), ENSURE_REQUIREMENTS, [plan_id=9] (41) HashAggregate [codegen id : 10] -Input [4]: [ss_list_price#56, sum#61, count#62, count#63] -Keys [1]: [ss_list_price#56] -Functions [2]: [merge_avg(UnscaledValue(ss_list_price#56)), merge_count(ss_list_price#56)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#56))#59, count(ss_list_price#56)#60] -Results [4]: [ss_list_price#56, sum#61, count#62, count#63] +Input [4]: [ss_list_price#48, sum#53, count#54, count#55] +Keys [1]: [ss_list_price#48] +Functions [2]: [merge_avg(UnscaledValue(ss_list_price#48)), merge_count(ss_list_price#48)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#48))#51, count(ss_list_price#48)#52] +Results [4]: [ss_list_price#48, sum#53, count#54, count#55] (42) HashAggregate [codegen id : 10] -Input [4]: [ss_list_price#56, sum#61, count#62, count#63] +Input [4]: [ss_list_price#48, sum#53, count#54, count#55] Keys: [] -Functions [3]: [merge_avg(UnscaledValue(ss_list_price#56)), merge_count(ss_list_price#56), partial_count(distinct ss_list_price#56)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#56))#59, count(ss_list_price#56)#60, count(ss_list_price#56)#65] -Results [4]: [sum#61, count#62, count#63, count#66] +Functions [3]: [merge_avg(UnscaledValue(ss_list_price#48)), merge_count(ss_list_price#48), partial_count(distinct ss_list_price#48)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#48))#51, count(ss_list_price#48)#52, count(ss_list_price#48)#56] +Results [4]: [sum#53, count#54, count#55, count#57] (43) Exchange -Input [4]: [sum#61, count#62, count#63, count#66] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#67] +Input [4]: [sum#53, count#54, count#55, count#57] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10] (44) HashAggregate [codegen id : 11] -Input [4]: [sum#61, count#62, count#63, count#66] +Input [4]: [sum#53, count#54, count#55, count#57] Keys: [] -Functions [3]: [avg(UnscaledValue(ss_list_price#56)), count(ss_list_price#56), count(distinct ss_list_price#56)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#56))#59, count(ss_list_price#56)#60, count(ss_list_price#56)#65] -Results [3]: [cast((avg(UnscaledValue(ss_list_price#56))#59 / 100.0) as decimal(11,6)) AS B4_LP#68, count(ss_list_price#56)#60 AS B4_CNT#69, count(ss_list_price#56)#65 AS B4_CNTD#70] +Functions [3]: [avg(UnscaledValue(ss_list_price#48)), count(ss_list_price#48), count(distinct ss_list_price#48)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#48))#51, count(ss_list_price#48)#52, count(ss_list_price#48)#56] +Results [3]: [cast((avg(UnscaledValue(ss_list_price#48))#51 / 100.0) as decimal(11,6)) AS B4_LP#58, count(ss_list_price#48)#52 AS B4_CNT#59, count(ss_list_price#48)#56 AS B4_CNTD#60] (45) BroadcastExchange -Input [3]: [B4_LP#68, B4_CNT#69, B4_CNTD#70] -Arguments: IdentityBroadcastMode, [id=#71] +Input [3]: [B4_LP#58, B4_CNT#59, B4_CNTD#60] +Arguments: IdentityBroadcastMode, [plan_id=11] (46) BroadcastNestedLoopJoin [codegen id : 18] Join condition: None (47) Scan parquet default.store_sales -Output [5]: [ss_quantity#72, ss_wholesale_cost#73, ss_list_price#74, ss_coupon_amt#75, ss_sold_date_sk#76] +Output [5]: [ss_quantity#61, ss_wholesale_cost#62, ss_list_price#63, ss_coupon_amt#64, ss_sold_date_sk#65] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,21), LessThanOrEqual(ss_quantity,25), Or(Or(And(GreaterThanOrEqual(ss_list_price,122.00),LessThanOrEqual(ss_list_price,132.00)),And(GreaterThanOrEqual(ss_coupon_amt,836.00),LessThanOrEqual(ss_coupon_amt,1836.00))),And(GreaterThanOrEqual(ss_wholesale_cost,17.00),LessThanOrEqual(ss_wholesale_cost,37.00)))] ReadSchema: struct (48) ColumnarToRow [codegen id : 12] -Input [5]: [ss_quantity#72, ss_wholesale_cost#73, ss_list_price#74, ss_coupon_amt#75, ss_sold_date_sk#76] +Input [5]: [ss_quantity#61, ss_wholesale_cost#62, ss_list_price#63, ss_coupon_amt#64, ss_sold_date_sk#65] (49) Filter [codegen id : 12] -Input [5]: [ss_quantity#72, ss_wholesale_cost#73, ss_list_price#74, ss_coupon_amt#75, ss_sold_date_sk#76] -Condition : (((isnotnull(ss_quantity#72) AND (ss_quantity#72 >= 21)) AND (ss_quantity#72 <= 25)) AND ((((ss_list_price#74 >= 122.00) AND (ss_list_price#74 <= 132.00)) OR ((ss_coupon_amt#75 >= 836.00) AND (ss_coupon_amt#75 <= 1836.00))) OR ((ss_wholesale_cost#73 >= 17.00) AND (ss_wholesale_cost#73 <= 37.00)))) +Input [5]: [ss_quantity#61, ss_wholesale_cost#62, ss_list_price#63, ss_coupon_amt#64, ss_sold_date_sk#65] +Condition : (((isnotnull(ss_quantity#61) AND (ss_quantity#61 >= 21)) AND (ss_quantity#61 <= 25)) AND ((((ss_list_price#63 >= 122.00) AND (ss_list_price#63 <= 132.00)) OR ((ss_coupon_amt#64 >= 836.00) AND (ss_coupon_amt#64 <= 1836.00))) OR ((ss_wholesale_cost#62 >= 17.00) AND (ss_wholesale_cost#62 <= 37.00)))) (50) Project [codegen id : 12] -Output [1]: [ss_list_price#74] -Input [5]: [ss_quantity#72, ss_wholesale_cost#73, ss_list_price#74, ss_coupon_amt#75, ss_sold_date_sk#76] +Output [1]: [ss_list_price#63] +Input [5]: [ss_quantity#61, ss_wholesale_cost#62, ss_list_price#63, ss_coupon_amt#64, ss_sold_date_sk#65] (51) HashAggregate [codegen id : 12] -Input [1]: [ss_list_price#74] -Keys [1]: [ss_list_price#74] -Functions [2]: [partial_avg(UnscaledValue(ss_list_price#74)), partial_count(ss_list_price#74)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#74))#77, count(ss_list_price#74)#78] -Results [4]: [ss_list_price#74, sum#79, count#80, count#81] +Input [1]: [ss_list_price#63] +Keys [1]: [ss_list_price#63] +Functions [2]: [partial_avg(UnscaledValue(ss_list_price#63)), partial_count(ss_list_price#63)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#63))#66, count(ss_list_price#63)#67] +Results [4]: [ss_list_price#63, sum#68, count#69, count#70] (52) Exchange -Input [4]: [ss_list_price#74, sum#79, count#80, count#81] -Arguments: hashpartitioning(ss_list_price#74, 5), ENSURE_REQUIREMENTS, [id=#82] +Input [4]: [ss_list_price#63, sum#68, count#69, count#70] +Arguments: hashpartitioning(ss_list_price#63, 5), ENSURE_REQUIREMENTS, [plan_id=12] (53) HashAggregate [codegen id : 13] -Input [4]: [ss_list_price#74, sum#79, count#80, count#81] -Keys [1]: [ss_list_price#74] -Functions [2]: [merge_avg(UnscaledValue(ss_list_price#74)), merge_count(ss_list_price#74)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#74))#77, count(ss_list_price#74)#78] -Results [4]: [ss_list_price#74, sum#79, count#80, count#81] +Input [4]: [ss_list_price#63, sum#68, count#69, count#70] +Keys [1]: [ss_list_price#63] +Functions [2]: [merge_avg(UnscaledValue(ss_list_price#63)), merge_count(ss_list_price#63)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#63))#66, count(ss_list_price#63)#67] +Results [4]: [ss_list_price#63, sum#68, count#69, count#70] (54) HashAggregate [codegen id : 13] -Input [4]: [ss_list_price#74, sum#79, count#80, count#81] +Input [4]: [ss_list_price#63, sum#68, count#69, count#70] Keys: [] -Functions [3]: [merge_avg(UnscaledValue(ss_list_price#74)), merge_count(ss_list_price#74), partial_count(distinct ss_list_price#74)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#74))#77, count(ss_list_price#74)#78, count(ss_list_price#74)#83] -Results [4]: [sum#79, count#80, count#81, count#84] +Functions [3]: [merge_avg(UnscaledValue(ss_list_price#63)), merge_count(ss_list_price#63), partial_count(distinct ss_list_price#63)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#63))#66, count(ss_list_price#63)#67, count(ss_list_price#63)#71] +Results [4]: [sum#68, count#69, count#70, count#72] (55) Exchange -Input [4]: [sum#79, count#80, count#81, count#84] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#85] +Input [4]: [sum#68, count#69, count#70, count#72] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=13] (56) HashAggregate [codegen id : 14] -Input [4]: [sum#79, count#80, count#81, count#84] +Input [4]: [sum#68, count#69, count#70, count#72] Keys: [] -Functions [3]: [avg(UnscaledValue(ss_list_price#74)), count(ss_list_price#74), count(distinct ss_list_price#74)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#74))#77, count(ss_list_price#74)#78, count(ss_list_price#74)#83] -Results [3]: [cast((avg(UnscaledValue(ss_list_price#74))#77 / 100.0) as decimal(11,6)) AS B5_LP#86, count(ss_list_price#74)#78 AS B5_CNT#87, count(ss_list_price#74)#83 AS B5_CNTD#88] +Functions [3]: [avg(UnscaledValue(ss_list_price#63)), count(ss_list_price#63), count(distinct ss_list_price#63)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#63))#66, count(ss_list_price#63)#67, count(ss_list_price#63)#71] +Results [3]: [cast((avg(UnscaledValue(ss_list_price#63))#66 / 100.0) as decimal(11,6)) AS B5_LP#73, count(ss_list_price#63)#67 AS B5_CNT#74, count(ss_list_price#63)#71 AS B5_CNTD#75] (57) BroadcastExchange -Input [3]: [B5_LP#86, B5_CNT#87, B5_CNTD#88] -Arguments: IdentityBroadcastMode, [id=#89] +Input [3]: [B5_LP#73, B5_CNT#74, B5_CNTD#75] +Arguments: IdentityBroadcastMode, [plan_id=14] (58) BroadcastNestedLoopJoin [codegen id : 18] Join condition: None (59) Scan parquet default.store_sales -Output [5]: [ss_quantity#90, ss_wholesale_cost#91, ss_list_price#92, ss_coupon_amt#93, ss_sold_date_sk#94] +Output [5]: [ss_quantity#76, ss_wholesale_cost#77, ss_list_price#78, ss_coupon_amt#79, ss_sold_date_sk#80] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,26), LessThanOrEqual(ss_quantity,30), Or(Or(And(GreaterThanOrEqual(ss_list_price,154.00),LessThanOrEqual(ss_list_price,164.00)),And(GreaterThanOrEqual(ss_coupon_amt,7326.00),LessThanOrEqual(ss_coupon_amt,8326.00))),And(GreaterThanOrEqual(ss_wholesale_cost,7.00),LessThanOrEqual(ss_wholesale_cost,27.00)))] ReadSchema: struct (60) ColumnarToRow [codegen id : 15] -Input [5]: [ss_quantity#90, ss_wholesale_cost#91, ss_list_price#92, ss_coupon_amt#93, ss_sold_date_sk#94] +Input [5]: [ss_quantity#76, ss_wholesale_cost#77, ss_list_price#78, ss_coupon_amt#79, ss_sold_date_sk#80] (61) Filter [codegen id : 15] -Input [5]: [ss_quantity#90, ss_wholesale_cost#91, ss_list_price#92, ss_coupon_amt#93, ss_sold_date_sk#94] -Condition : (((isnotnull(ss_quantity#90) AND (ss_quantity#90 >= 26)) AND (ss_quantity#90 <= 30)) AND ((((ss_list_price#92 >= 154.00) AND (ss_list_price#92 <= 164.00)) OR ((ss_coupon_amt#93 >= 7326.00) AND (ss_coupon_amt#93 <= 8326.00))) OR ((ss_wholesale_cost#91 >= 7.00) AND (ss_wholesale_cost#91 <= 27.00)))) +Input [5]: [ss_quantity#76, ss_wholesale_cost#77, ss_list_price#78, ss_coupon_amt#79, ss_sold_date_sk#80] +Condition : (((isnotnull(ss_quantity#76) AND (ss_quantity#76 >= 26)) AND (ss_quantity#76 <= 30)) AND ((((ss_list_price#78 >= 154.00) AND (ss_list_price#78 <= 164.00)) OR ((ss_coupon_amt#79 >= 7326.00) AND (ss_coupon_amt#79 <= 8326.00))) OR ((ss_wholesale_cost#77 >= 7.00) AND (ss_wholesale_cost#77 <= 27.00)))) (62) Project [codegen id : 15] -Output [1]: [ss_list_price#92] -Input [5]: [ss_quantity#90, ss_wholesale_cost#91, ss_list_price#92, ss_coupon_amt#93, ss_sold_date_sk#94] +Output [1]: [ss_list_price#78] +Input [5]: [ss_quantity#76, ss_wholesale_cost#77, ss_list_price#78, ss_coupon_amt#79, ss_sold_date_sk#80] (63) HashAggregate [codegen id : 15] -Input [1]: [ss_list_price#92] -Keys [1]: [ss_list_price#92] -Functions [2]: [partial_avg(UnscaledValue(ss_list_price#92)), partial_count(ss_list_price#92)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#92))#95, count(ss_list_price#92)#96] -Results [4]: [ss_list_price#92, sum#97, count#98, count#99] +Input [1]: [ss_list_price#78] +Keys [1]: [ss_list_price#78] +Functions [2]: [partial_avg(UnscaledValue(ss_list_price#78)), partial_count(ss_list_price#78)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#78))#81, count(ss_list_price#78)#82] +Results [4]: [ss_list_price#78, sum#83, count#84, count#85] (64) Exchange -Input [4]: [ss_list_price#92, sum#97, count#98, count#99] -Arguments: hashpartitioning(ss_list_price#92, 5), ENSURE_REQUIREMENTS, [id=#100] +Input [4]: [ss_list_price#78, sum#83, count#84, count#85] +Arguments: hashpartitioning(ss_list_price#78, 5), ENSURE_REQUIREMENTS, [plan_id=15] (65) HashAggregate [codegen id : 16] -Input [4]: [ss_list_price#92, sum#97, count#98, count#99] -Keys [1]: [ss_list_price#92] -Functions [2]: [merge_avg(UnscaledValue(ss_list_price#92)), merge_count(ss_list_price#92)] -Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#92))#95, count(ss_list_price#92)#96] -Results [4]: [ss_list_price#92, sum#97, count#98, count#99] +Input [4]: [ss_list_price#78, sum#83, count#84, count#85] +Keys [1]: [ss_list_price#78] +Functions [2]: [merge_avg(UnscaledValue(ss_list_price#78)), merge_count(ss_list_price#78)] +Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#78))#81, count(ss_list_price#78)#82] +Results [4]: [ss_list_price#78, sum#83, count#84, count#85] (66) HashAggregate [codegen id : 16] -Input [4]: [ss_list_price#92, sum#97, count#98, count#99] +Input [4]: [ss_list_price#78, sum#83, count#84, count#85] Keys: [] -Functions [3]: [merge_avg(UnscaledValue(ss_list_price#92)), merge_count(ss_list_price#92), partial_count(distinct ss_list_price#92)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#92))#95, count(ss_list_price#92)#96, count(ss_list_price#92)#101] -Results [4]: [sum#97, count#98, count#99, count#102] +Functions [3]: [merge_avg(UnscaledValue(ss_list_price#78)), merge_count(ss_list_price#78), partial_count(distinct ss_list_price#78)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#78))#81, count(ss_list_price#78)#82, count(ss_list_price#78)#86] +Results [4]: [sum#83, count#84, count#85, count#87] (67) Exchange -Input [4]: [sum#97, count#98, count#99, count#102] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#103] +Input [4]: [sum#83, count#84, count#85, count#87] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=16] (68) HashAggregate [codegen id : 17] -Input [4]: [sum#97, count#98, count#99, count#102] +Input [4]: [sum#83, count#84, count#85, count#87] Keys: [] -Functions [3]: [avg(UnscaledValue(ss_list_price#92)), count(ss_list_price#92), count(distinct ss_list_price#92)] -Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#92))#95, count(ss_list_price#92)#96, count(ss_list_price#92)#101] -Results [3]: [cast((avg(UnscaledValue(ss_list_price#92))#95 / 100.0) as decimal(11,6)) AS B6_LP#104, count(ss_list_price#92)#96 AS B6_CNT#105, count(ss_list_price#92)#101 AS B6_CNTD#106] +Functions [3]: [avg(UnscaledValue(ss_list_price#78)), count(ss_list_price#78), count(distinct ss_list_price#78)] +Aggregate Attributes [3]: [avg(UnscaledValue(ss_list_price#78))#81, count(ss_list_price#78)#82, count(ss_list_price#78)#86] +Results [3]: [cast((avg(UnscaledValue(ss_list_price#78))#81 / 100.0) as decimal(11,6)) AS B6_LP#88, count(ss_list_price#78)#82 AS B6_CNT#89, count(ss_list_price#78)#86 AS B6_CNTD#90] (69) BroadcastExchange -Input [3]: [B6_LP#104, B6_CNT#105, B6_CNTD#106] -Arguments: IdentityBroadcastMode, [id=#107] +Input [3]: [B6_LP#88, B6_CNT#89, B6_CNTD#90] +Arguments: IdentityBroadcastMode, [plan_id=17] (70) BroadcastNestedLoopJoin [codegen id : 18] Join condition: None diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q29.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q29.sf100/explain.txt index 221439075d24d..779cf2e924e9d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q29.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q29.sf100/explain.txt @@ -93,7 +93,7 @@ Condition : isnotnull(s_store_sk#9) (10) BroadcastExchange Input [3]: [s_store_sk#9, s_store_id#10, s_store_name#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_store_sk#3] @@ -106,168 +106,168 @@ Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, s (13) Exchange Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_store_id#10, s_store_name#11] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#13] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) Sort [codegen id : 4] Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_store_id#10, s_store_name#11] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (15) Scan parquet default.item -Output [3]: [i_item_sk#14, i_item_id#15, i_item_desc#16] +Output [3]: [i_item_sk#12, i_item_id#13, i_item_desc#14] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [3]: [i_item_sk#14, i_item_id#15, i_item_desc#16] +Input [3]: [i_item_sk#12, i_item_id#13, i_item_desc#14] (17) Filter [codegen id : 5] -Input [3]: [i_item_sk#14, i_item_id#15, i_item_desc#16] -Condition : isnotnull(i_item_sk#14) +Input [3]: [i_item_sk#12, i_item_id#13, i_item_desc#14] +Condition : isnotnull(i_item_sk#12) (18) Exchange -Input [3]: [i_item_sk#14, i_item_id#15, i_item_desc#16] -Arguments: hashpartitioning(i_item_sk#14, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [3]: [i_item_sk#12, i_item_id#13, i_item_desc#14] +Arguments: hashpartitioning(i_item_sk#12, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 6] -Input [3]: [i_item_sk#14, i_item_id#15, i_item_desc#16] -Arguments: [i_item_sk#14 ASC NULLS FIRST], false, 0 +Input [3]: [i_item_sk#12, i_item_id#13, i_item_desc#14] +Arguments: [i_item_sk#12 ASC NULLS FIRST], false, 0 (20) SortMergeJoin [codegen id : 7] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#14] +Right keys [1]: [i_item_sk#12] Join condition: None (21) Project [codegen id : 7] -Output [8]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16] -Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_store_id#10, s_store_name#11, i_item_sk#14, i_item_id#15, i_item_desc#16] +Output [8]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14] +Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_store_id#10, s_store_name#11, i_item_sk#12, i_item_id#13, i_item_desc#14] (22) Exchange -Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16] -Arguments: hashpartitioning(ss_customer_sk#2, ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14] +Arguments: hashpartitioning(ss_customer_sk#2, ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) Sort [codegen id : 8] -Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16] +Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14] Arguments: [ss_customer_sk#2 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST, ss_ticket_number#4 ASC NULLS FIRST], false, 0 (24) Scan parquet default.store_returns -Output [5]: [sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_return_quantity#22, sr_returned_date_sk#23] +Output [5]: [sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_return_quantity#18, sr_returned_date_sk#19] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(sr_returned_date_sk#23), dynamicpruningexpression(sr_returned_date_sk#23 IN dynamicpruning#24)] +PartitionFilters: [isnotnull(sr_returned_date_sk#19), dynamicpruningexpression(sr_returned_date_sk#19 IN dynamicpruning#20)] PushedFilters: [IsNotNull(sr_customer_sk), IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct (25) ColumnarToRow [codegen id : 10] -Input [5]: [sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_return_quantity#22, sr_returned_date_sk#23] +Input [5]: [sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_return_quantity#18, sr_returned_date_sk#19] (26) Filter [codegen id : 10] -Input [5]: [sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_return_quantity#22, sr_returned_date_sk#23] -Condition : ((isnotnull(sr_customer_sk#20) AND isnotnull(sr_item_sk#19)) AND isnotnull(sr_ticket_number#21)) +Input [5]: [sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_return_quantity#18, sr_returned_date_sk#19] +Condition : ((isnotnull(sr_customer_sk#16) AND isnotnull(sr_item_sk#15)) AND isnotnull(sr_ticket_number#17)) (27) ReusedExchange [Reuses operator id: 59] -Output [1]: [d_date_sk#25] +Output [1]: [d_date_sk#21] (28) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [sr_returned_date_sk#23] -Right keys [1]: [d_date_sk#25] +Left keys [1]: [sr_returned_date_sk#19] +Right keys [1]: [d_date_sk#21] Join condition: None (29) Project [codegen id : 10] -Output [4]: [sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_return_quantity#22] -Input [6]: [sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_return_quantity#22, sr_returned_date_sk#23, d_date_sk#25] +Output [4]: [sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_return_quantity#18] +Input [6]: [sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_return_quantity#18, sr_returned_date_sk#19, d_date_sk#21] (30) Exchange -Input [4]: [sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_return_quantity#22] -Arguments: hashpartitioning(sr_customer_sk#20, sr_item_sk#19, sr_ticket_number#21, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [4]: [sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_return_quantity#18] +Arguments: hashpartitioning(sr_customer_sk#16, sr_item_sk#15, sr_ticket_number#17, 5), ENSURE_REQUIREMENTS, [plan_id=5] (31) Sort [codegen id : 11] -Input [4]: [sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_return_quantity#22] -Arguments: [sr_customer_sk#20 ASC NULLS FIRST, sr_item_sk#19 ASC NULLS FIRST, sr_ticket_number#21 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_return_quantity#18] +Arguments: [sr_customer_sk#16 ASC NULLS FIRST, sr_item_sk#15 ASC NULLS FIRST, sr_ticket_number#17 ASC NULLS FIRST], false, 0 (32) SortMergeJoin [codegen id : 12] Left keys [3]: [ss_customer_sk#2, ss_item_sk#1, ss_ticket_number#4] -Right keys [3]: [sr_customer_sk#20, sr_item_sk#19, sr_ticket_number#21] +Right keys [3]: [sr_customer_sk#16, sr_item_sk#15, sr_ticket_number#17] Join condition: None (33) Project [codegen id : 12] -Output [8]: [ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16, sr_item_sk#19, sr_customer_sk#20, sr_return_quantity#22] -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16, sr_item_sk#19, sr_customer_sk#20, sr_ticket_number#21, sr_return_quantity#22] +Output [8]: [ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14, sr_item_sk#15, sr_customer_sk#16, sr_return_quantity#18] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#4, ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14, sr_item_sk#15, sr_customer_sk#16, sr_ticket_number#17, sr_return_quantity#18] (34) Exchange -Input [8]: [ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16, sr_item_sk#19, sr_customer_sk#20, sr_return_quantity#22] -Arguments: hashpartitioning(sr_customer_sk#20, sr_item_sk#19, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [8]: [ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14, sr_item_sk#15, sr_customer_sk#16, sr_return_quantity#18] +Arguments: hashpartitioning(sr_customer_sk#16, sr_item_sk#15, 5), ENSURE_REQUIREMENTS, [plan_id=6] (35) Sort [codegen id : 13] -Input [8]: [ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16, sr_item_sk#19, sr_customer_sk#20, sr_return_quantity#22] -Arguments: [sr_customer_sk#20 ASC NULLS FIRST, sr_item_sk#19 ASC NULLS FIRST], false, 0 +Input [8]: [ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14, sr_item_sk#15, sr_customer_sk#16, sr_return_quantity#18] +Arguments: [sr_customer_sk#16 ASC NULLS FIRST, sr_item_sk#15 ASC NULLS FIRST], false, 0 (36) Scan parquet default.catalog_sales -Output [4]: [cs_bill_customer_sk#28, cs_item_sk#29, cs_quantity#30, cs_sold_date_sk#31] +Output [4]: [cs_bill_customer_sk#22, cs_item_sk#23, cs_quantity#24, cs_sold_date_sk#25] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#31), dynamicpruningexpression(cs_sold_date_sk#31 IN dynamicpruning#32)] +PartitionFilters: [isnotnull(cs_sold_date_sk#25), dynamicpruningexpression(cs_sold_date_sk#25 IN dynamicpruning#26)] PushedFilters: [IsNotNull(cs_bill_customer_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 15] -Input [4]: [cs_bill_customer_sk#28, cs_item_sk#29, cs_quantity#30, cs_sold_date_sk#31] +Input [4]: [cs_bill_customer_sk#22, cs_item_sk#23, cs_quantity#24, cs_sold_date_sk#25] (38) Filter [codegen id : 15] -Input [4]: [cs_bill_customer_sk#28, cs_item_sk#29, cs_quantity#30, cs_sold_date_sk#31] -Condition : (isnotnull(cs_bill_customer_sk#28) AND isnotnull(cs_item_sk#29)) +Input [4]: [cs_bill_customer_sk#22, cs_item_sk#23, cs_quantity#24, cs_sold_date_sk#25] +Condition : (isnotnull(cs_bill_customer_sk#22) AND isnotnull(cs_item_sk#23)) (39) ReusedExchange [Reuses operator id: 64] -Output [1]: [d_date_sk#33] +Output [1]: [d_date_sk#27] (40) BroadcastHashJoin [codegen id : 15] -Left keys [1]: [cs_sold_date_sk#31] -Right keys [1]: [d_date_sk#33] +Left keys [1]: [cs_sold_date_sk#25] +Right keys [1]: [d_date_sk#27] Join condition: None (41) Project [codegen id : 15] -Output [3]: [cs_bill_customer_sk#28, cs_item_sk#29, cs_quantity#30] -Input [5]: [cs_bill_customer_sk#28, cs_item_sk#29, cs_quantity#30, cs_sold_date_sk#31, d_date_sk#33] +Output [3]: [cs_bill_customer_sk#22, cs_item_sk#23, cs_quantity#24] +Input [5]: [cs_bill_customer_sk#22, cs_item_sk#23, cs_quantity#24, cs_sold_date_sk#25, d_date_sk#27] (42) Exchange -Input [3]: [cs_bill_customer_sk#28, cs_item_sk#29, cs_quantity#30] -Arguments: hashpartitioning(cs_bill_customer_sk#28, cs_item_sk#29, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [3]: [cs_bill_customer_sk#22, cs_item_sk#23, cs_quantity#24] +Arguments: hashpartitioning(cs_bill_customer_sk#22, cs_item_sk#23, 5), ENSURE_REQUIREMENTS, [plan_id=7] (43) Sort [codegen id : 16] -Input [3]: [cs_bill_customer_sk#28, cs_item_sk#29, cs_quantity#30] -Arguments: [cs_bill_customer_sk#28 ASC NULLS FIRST, cs_item_sk#29 ASC NULLS FIRST], false, 0 +Input [3]: [cs_bill_customer_sk#22, cs_item_sk#23, cs_quantity#24] +Arguments: [cs_bill_customer_sk#22 ASC NULLS FIRST, cs_item_sk#23 ASC NULLS FIRST], false, 0 (44) SortMergeJoin [codegen id : 17] -Left keys [2]: [sr_customer_sk#20, sr_item_sk#19] -Right keys [2]: [cs_bill_customer_sk#28, cs_item_sk#29] +Left keys [2]: [sr_customer_sk#16, sr_item_sk#15] +Right keys [2]: [cs_bill_customer_sk#22, cs_item_sk#23] Join condition: None (45) Project [codegen id : 17] -Output [7]: [ss_quantity#5, sr_return_quantity#22, cs_quantity#30, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16] -Input [11]: [ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16, sr_item_sk#19, sr_customer_sk#20, sr_return_quantity#22, cs_bill_customer_sk#28, cs_item_sk#29, cs_quantity#30] +Output [7]: [ss_quantity#5, sr_return_quantity#18, cs_quantity#24, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14] +Input [11]: [ss_quantity#5, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14, sr_item_sk#15, sr_customer_sk#16, sr_return_quantity#18, cs_bill_customer_sk#22, cs_item_sk#23, cs_quantity#24] (46) HashAggregate [codegen id : 17] -Input [7]: [ss_quantity#5, sr_return_quantity#22, cs_quantity#30, s_store_id#10, s_store_name#11, i_item_id#15, i_item_desc#16] -Keys [4]: [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11] -Functions [3]: [partial_sum(ss_quantity#5), partial_sum(sr_return_quantity#22), partial_sum(cs_quantity#30)] -Aggregate Attributes [3]: [sum#35, sum#36, sum#37] -Results [7]: [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11, sum#38, sum#39, sum#40] +Input [7]: [ss_quantity#5, sr_return_quantity#18, cs_quantity#24, s_store_id#10, s_store_name#11, i_item_id#13, i_item_desc#14] +Keys [4]: [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11] +Functions [3]: [partial_sum(ss_quantity#5), partial_sum(sr_return_quantity#18), partial_sum(cs_quantity#24)] +Aggregate Attributes [3]: [sum#28, sum#29, sum#30] +Results [7]: [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11, sum#31, sum#32, sum#33] (47) Exchange -Input [7]: [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11, sum#38, sum#39, sum#40] -Arguments: hashpartitioning(i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11, 5), ENSURE_REQUIREMENTS, [id=#41] +Input [7]: [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11, sum#31, sum#32, sum#33] +Arguments: hashpartitioning(i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11, 5), ENSURE_REQUIREMENTS, [plan_id=8] (48) HashAggregate [codegen id : 18] -Input [7]: [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11, sum#38, sum#39, sum#40] -Keys [4]: [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11] -Functions [3]: [sum(ss_quantity#5), sum(sr_return_quantity#22), sum(cs_quantity#30)] -Aggregate Attributes [3]: [sum(ss_quantity#5)#42, sum(sr_return_quantity#22)#43, sum(cs_quantity#30)#44] -Results [7]: [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11, sum(ss_quantity#5)#42 AS store_sales_quantity#45, sum(sr_return_quantity#22)#43 AS store_returns_quantity#46, sum(cs_quantity#30)#44 AS catalog_sales_quantity#47] +Input [7]: [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11, sum#31, sum#32, sum#33] +Keys [4]: [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11] +Functions [3]: [sum(ss_quantity#5), sum(sr_return_quantity#18), sum(cs_quantity#24)] +Aggregate Attributes [3]: [sum(ss_quantity#5)#34, sum(sr_return_quantity#18)#35, sum(cs_quantity#24)#36] +Results [7]: [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11, sum(ss_quantity#5)#34 AS store_sales_quantity#37, sum(sr_return_quantity#18)#35 AS store_returns_quantity#38, sum(cs_quantity#24)#36 AS catalog_sales_quantity#39] (49) TakeOrderedAndProject -Input [7]: [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11, store_sales_quantity#45, store_returns_quantity#46, catalog_sales_quantity#47] -Arguments: 100, [i_item_id#15 ASC NULLS FIRST, i_item_desc#16 ASC NULLS FIRST, s_store_id#10 ASC NULLS FIRST, s_store_name#11 ASC NULLS FIRST], [i_item_id#15, i_item_desc#16, s_store_id#10, s_store_name#11, store_sales_quantity#45, store_returns_quantity#46, catalog_sales_quantity#47] +Input [7]: [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11, store_sales_quantity#37, store_returns_quantity#38, catalog_sales_quantity#39] +Arguments: 100, [i_item_id#13 ASC NULLS FIRST, i_item_desc#14 ASC NULLS FIRST, s_store_id#10 ASC NULLS FIRST, s_store_name#11 ASC NULLS FIRST], [i_item_id#13, i_item_desc#14, s_store_id#10, s_store_name#11, store_sales_quantity#37, store_returns_quantity#38, catalog_sales_quantity#39] ===== Subqueries ===== @@ -280,28 +280,28 @@ BroadcastExchange (54) (50) Scan parquet default.date_dim -Output [3]: [d_date_sk#8, d_year#48, d_moy#49] +Output [3]: [d_date_sk#8, d_year#40, d_moy#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_moy,9), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#8, d_year#48, d_moy#49] +Input [3]: [d_date_sk#8, d_year#40, d_moy#41] (52) Filter [codegen id : 1] -Input [3]: [d_date_sk#8, d_year#48, d_moy#49] -Condition : ((((isnotnull(d_moy#49) AND isnotnull(d_year#48)) AND (d_moy#49 = 9)) AND (d_year#48 = 1999)) AND isnotnull(d_date_sk#8)) +Input [3]: [d_date_sk#8, d_year#40, d_moy#41] +Condition : ((((isnotnull(d_moy#41) AND isnotnull(d_year#40)) AND (d_moy#41 = 9)) AND (d_year#40 = 1999)) AND isnotnull(d_date_sk#8)) (53) Project [codegen id : 1] Output [1]: [d_date_sk#8] -Input [3]: [d_date_sk#8, d_year#48, d_moy#49] +Input [3]: [d_date_sk#8, d_year#40, d_moy#41] (54) BroadcastExchange Input [1]: [d_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#50] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:2 Hosting operator id = 24 Hosting Expression = sr_returned_date_sk#23 IN dynamicpruning#24 +Subquery:2 Hosting operator id = 24 Hosting Expression = sr_returned_date_sk#19 IN dynamicpruning#20 BroadcastExchange (59) +- * Project (58) +- * Filter (57) @@ -310,28 +310,28 @@ BroadcastExchange (59) (55) Scan parquet default.date_dim -Output [3]: [d_date_sk#25, d_year#51, d_moy#52] +Output [3]: [d_date_sk#21, d_year#42, d_moy#43] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), GreaterThanOrEqual(d_moy,9), LessThanOrEqual(d_moy,12), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct (56) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#25, d_year#51, d_moy#52] +Input [3]: [d_date_sk#21, d_year#42, d_moy#43] (57) Filter [codegen id : 1] -Input [3]: [d_date_sk#25, d_year#51, d_moy#52] -Condition : (((((isnotnull(d_moy#52) AND isnotnull(d_year#51)) AND (d_moy#52 >= 9)) AND (d_moy#52 <= 12)) AND (d_year#51 = 1999)) AND isnotnull(d_date_sk#25)) +Input [3]: [d_date_sk#21, d_year#42, d_moy#43] +Condition : (((((isnotnull(d_moy#43) AND isnotnull(d_year#42)) AND (d_moy#43 >= 9)) AND (d_moy#43 <= 12)) AND (d_year#42 = 1999)) AND isnotnull(d_date_sk#21)) (58) Project [codegen id : 1] -Output [1]: [d_date_sk#25] -Input [3]: [d_date_sk#25, d_year#51, d_moy#52] +Output [1]: [d_date_sk#21] +Input [3]: [d_date_sk#21, d_year#42, d_moy#43] (59) BroadcastExchange -Input [1]: [d_date_sk#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#53] +Input [1]: [d_date_sk#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -Subquery:3 Hosting operator id = 36 Hosting Expression = cs_sold_date_sk#31 IN dynamicpruning#32 +Subquery:3 Hosting operator id = 36 Hosting Expression = cs_sold_date_sk#25 IN dynamicpruning#26 BroadcastExchange (64) +- * Project (63) +- * Filter (62) @@ -340,25 +340,25 @@ BroadcastExchange (64) (60) Scan parquet default.date_dim -Output [2]: [d_date_sk#33, d_year#54] +Output [2]: [d_date_sk#27, d_year#44] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_year, [1999,2000,2001]), IsNotNull(d_date_sk)] ReadSchema: struct (61) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#33, d_year#54] +Input [2]: [d_date_sk#27, d_year#44] (62) Filter [codegen id : 1] -Input [2]: [d_date_sk#33, d_year#54] -Condition : (d_year#54 IN (1999,2000,2001) AND isnotnull(d_date_sk#33)) +Input [2]: [d_date_sk#27, d_year#44] +Condition : (d_year#44 IN (1999,2000,2001) AND isnotnull(d_date_sk#27)) (63) Project [codegen id : 1] -Output [1]: [d_date_sk#33] -Input [2]: [d_date_sk#33, d_year#54] +Output [1]: [d_date_sk#27] +Input [2]: [d_date_sk#27, d_year#44] (64) BroadcastExchange -Input [1]: [d_date_sk#33] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#55] +Input [1]: [d_date_sk#27] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q29/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q29/explain.txt index 86096ab89650c..28e49ac7927dc 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q29/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q29/explain.txt @@ -73,7 +73,7 @@ Condition : ((isnotnull(sr_customer_sk#9) AND isnotnull(sr_item_sk#8)) AND isnot (7) BroadcastExchange Input [5]: [sr_item_sk#8, sr_customer_sk#9, sr_ticket_number#10, sr_return_quantity#11, sr_returned_date_sk#12] -Arguments: HashedRelationBroadcastMode(List(input[1, int, false], input[0, int, false], input[2, int, false]),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(input[1, int, false], input[0, int, false], input[2, int, false]),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 8] Left keys [3]: [ss_customer_sk#2, ss_item_sk#1, ss_ticket_number#4] @@ -85,144 +85,144 @@ Output [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, ss_sold_date_sk#6, sr_i Input [11]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_quantity#5, ss_sold_date_sk#6, sr_item_sk#8, sr_customer_sk#9, sr_ticket_number#10, sr_return_quantity#11, sr_returned_date_sk#12] (10) Scan parquet default.catalog_sales -Output [4]: [cs_bill_customer_sk#15, cs_item_sk#16, cs_quantity#17, cs_sold_date_sk#18] +Output [4]: [cs_bill_customer_sk#14, cs_item_sk#15, cs_quantity#16, cs_sold_date_sk#17] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#18), dynamicpruningexpression(cs_sold_date_sk#18 IN dynamicpruning#19)] +PartitionFilters: [isnotnull(cs_sold_date_sk#17), dynamicpruningexpression(cs_sold_date_sk#17 IN dynamicpruning#18)] PushedFilters: [IsNotNull(cs_bill_customer_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [4]: [cs_bill_customer_sk#15, cs_item_sk#16, cs_quantity#17, cs_sold_date_sk#18] +Input [4]: [cs_bill_customer_sk#14, cs_item_sk#15, cs_quantity#16, cs_sold_date_sk#17] (12) Filter [codegen id : 2] -Input [4]: [cs_bill_customer_sk#15, cs_item_sk#16, cs_quantity#17, cs_sold_date_sk#18] -Condition : (isnotnull(cs_bill_customer_sk#15) AND isnotnull(cs_item_sk#16)) +Input [4]: [cs_bill_customer_sk#14, cs_item_sk#15, cs_quantity#16, cs_sold_date_sk#17] +Condition : (isnotnull(cs_bill_customer_sk#14) AND isnotnull(cs_item_sk#15)) (13) BroadcastExchange -Input [4]: [cs_bill_customer_sk#15, cs_item_sk#16, cs_quantity#17, cs_sold_date_sk#18] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, false] as bigint), 32) | (cast(input[1, int, false] as bigint) & 4294967295))),false), [id=#20] +Input [4]: [cs_bill_customer_sk#14, cs_item_sk#15, cs_quantity#16, cs_sold_date_sk#17] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, false] as bigint), 32) | (cast(input[1, int, false] as bigint) & 4294967295))),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 8] Left keys [2]: [sr_customer_sk#9, sr_item_sk#8] -Right keys [2]: [cs_bill_customer_sk#15, cs_item_sk#16] +Right keys [2]: [cs_bill_customer_sk#14, cs_item_sk#15] Join condition: None (15) Project [codegen id : 8] -Output [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, ss_sold_date_sk#6, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#17, cs_sold_date_sk#18] -Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, ss_sold_date_sk#6, sr_item_sk#8, sr_customer_sk#9, sr_return_quantity#11, sr_returned_date_sk#12, cs_bill_customer_sk#15, cs_item_sk#16, cs_quantity#17, cs_sold_date_sk#18] +Output [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, ss_sold_date_sk#6, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#16, cs_sold_date_sk#17] +Input [12]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, ss_sold_date_sk#6, sr_item_sk#8, sr_customer_sk#9, sr_return_quantity#11, sr_returned_date_sk#12, cs_bill_customer_sk#14, cs_item_sk#15, cs_quantity#16, cs_sold_date_sk#17] (16) ReusedExchange [Reuses operator id: 45] -Output [1]: [d_date_sk#21] +Output [1]: [d_date_sk#19] (17) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_sold_date_sk#6] -Right keys [1]: [d_date_sk#21] +Right keys [1]: [d_date_sk#19] Join condition: None (18) Project [codegen id : 8] -Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#17, cs_sold_date_sk#18] -Input [9]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, ss_sold_date_sk#6, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#17, cs_sold_date_sk#18, d_date_sk#21] +Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#16, cs_sold_date_sk#17] +Input [9]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, ss_sold_date_sk#6, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#16, cs_sold_date_sk#17, d_date_sk#19] (19) ReusedExchange [Reuses operator id: 50] -Output [1]: [d_date_sk#22] +Output [1]: [d_date_sk#20] (20) BroadcastHashJoin [codegen id : 8] Left keys [1]: [sr_returned_date_sk#12] -Right keys [1]: [d_date_sk#22] +Right keys [1]: [d_date_sk#20] Join condition: None (21) Project [codegen id : 8] -Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#17, cs_sold_date_sk#18] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#17, cs_sold_date_sk#18, d_date_sk#22] +Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#16, cs_sold_date_sk#17] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, sr_returned_date_sk#12, cs_quantity#16, cs_sold_date_sk#17, d_date_sk#20] (22) ReusedExchange [Reuses operator id: 55] -Output [1]: [d_date_sk#23] +Output [1]: [d_date_sk#21] (23) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_sold_date_sk#18] -Right keys [1]: [d_date_sk#23] +Left keys [1]: [cs_sold_date_sk#17] +Right keys [1]: [d_date_sk#21] Join condition: None (24) Project [codegen id : 8] -Output [5]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#17] -Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#17, cs_sold_date_sk#18, d_date_sk#23] +Output [5]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#16] +Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#16, cs_sold_date_sk#17, d_date_sk#21] (25) Scan parquet default.store -Output [3]: [s_store_sk#24, s_store_id#25, s_store_name#26] +Output [3]: [s_store_sk#22, s_store_id#23, s_store_name#24] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 6] -Input [3]: [s_store_sk#24, s_store_id#25, s_store_name#26] +Input [3]: [s_store_sk#22, s_store_id#23, s_store_name#24] (27) Filter [codegen id : 6] -Input [3]: [s_store_sk#24, s_store_id#25, s_store_name#26] -Condition : isnotnull(s_store_sk#24) +Input [3]: [s_store_sk#22, s_store_id#23, s_store_name#24] +Condition : isnotnull(s_store_sk#22) (28) BroadcastExchange -Input [3]: [s_store_sk#24, s_store_id#25, s_store_name#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#27] +Input [3]: [s_store_sk#22, s_store_id#23, s_store_name#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (29) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#24] +Right keys [1]: [s_store_sk#22] Join condition: None (30) Project [codegen id : 8] -Output [6]: [ss_item_sk#1, ss_quantity#5, sr_return_quantity#11, cs_quantity#17, s_store_id#25, s_store_name#26] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#17, s_store_sk#24, s_store_id#25, s_store_name#26] +Output [6]: [ss_item_sk#1, ss_quantity#5, sr_return_quantity#11, cs_quantity#16, s_store_id#23, s_store_name#24] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#5, sr_return_quantity#11, cs_quantity#16, s_store_sk#22, s_store_id#23, s_store_name#24] (31) Scan parquet default.item -Output [3]: [i_item_sk#28, i_item_id#29, i_item_desc#30] +Output [3]: [i_item_sk#25, i_item_id#26, i_item_desc#27] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 7] -Input [3]: [i_item_sk#28, i_item_id#29, i_item_desc#30] +Input [3]: [i_item_sk#25, i_item_id#26, i_item_desc#27] (33) Filter [codegen id : 7] -Input [3]: [i_item_sk#28, i_item_id#29, i_item_desc#30] -Condition : isnotnull(i_item_sk#28) +Input [3]: [i_item_sk#25, i_item_id#26, i_item_desc#27] +Condition : isnotnull(i_item_sk#25) (34) BroadcastExchange -Input [3]: [i_item_sk#28, i_item_id#29, i_item_desc#30] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#31] +Input [3]: [i_item_sk#25, i_item_id#26, i_item_desc#27] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (35) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#28] +Right keys [1]: [i_item_sk#25] Join condition: None (36) Project [codegen id : 8] -Output [7]: [ss_quantity#5, sr_return_quantity#11, cs_quantity#17, s_store_id#25, s_store_name#26, i_item_id#29, i_item_desc#30] -Input [9]: [ss_item_sk#1, ss_quantity#5, sr_return_quantity#11, cs_quantity#17, s_store_id#25, s_store_name#26, i_item_sk#28, i_item_id#29, i_item_desc#30] +Output [7]: [ss_quantity#5, sr_return_quantity#11, cs_quantity#16, s_store_id#23, s_store_name#24, i_item_id#26, i_item_desc#27] +Input [9]: [ss_item_sk#1, ss_quantity#5, sr_return_quantity#11, cs_quantity#16, s_store_id#23, s_store_name#24, i_item_sk#25, i_item_id#26, i_item_desc#27] (37) HashAggregate [codegen id : 8] -Input [7]: [ss_quantity#5, sr_return_quantity#11, cs_quantity#17, s_store_id#25, s_store_name#26, i_item_id#29, i_item_desc#30] -Keys [4]: [i_item_id#29, i_item_desc#30, s_store_id#25, s_store_name#26] -Functions [3]: [partial_sum(ss_quantity#5), partial_sum(sr_return_quantity#11), partial_sum(cs_quantity#17)] -Aggregate Attributes [3]: [sum#32, sum#33, sum#34] -Results [7]: [i_item_id#29, i_item_desc#30, s_store_id#25, s_store_name#26, sum#35, sum#36, sum#37] +Input [7]: [ss_quantity#5, sr_return_quantity#11, cs_quantity#16, s_store_id#23, s_store_name#24, i_item_id#26, i_item_desc#27] +Keys [4]: [i_item_id#26, i_item_desc#27, s_store_id#23, s_store_name#24] +Functions [3]: [partial_sum(ss_quantity#5), partial_sum(sr_return_quantity#11), partial_sum(cs_quantity#16)] +Aggregate Attributes [3]: [sum#28, sum#29, sum#30] +Results [7]: [i_item_id#26, i_item_desc#27, s_store_id#23, s_store_name#24, sum#31, sum#32, sum#33] (38) Exchange -Input [7]: [i_item_id#29, i_item_desc#30, s_store_id#25, s_store_name#26, sum#35, sum#36, sum#37] -Arguments: hashpartitioning(i_item_id#29, i_item_desc#30, s_store_id#25, s_store_name#26, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [7]: [i_item_id#26, i_item_desc#27, s_store_id#23, s_store_name#24, sum#31, sum#32, sum#33] +Arguments: hashpartitioning(i_item_id#26, i_item_desc#27, s_store_id#23, s_store_name#24, 5), ENSURE_REQUIREMENTS, [plan_id=5] (39) HashAggregate [codegen id : 9] -Input [7]: [i_item_id#29, i_item_desc#30, s_store_id#25, s_store_name#26, sum#35, sum#36, sum#37] -Keys [4]: [i_item_id#29, i_item_desc#30, s_store_id#25, s_store_name#26] -Functions [3]: [sum(ss_quantity#5), sum(sr_return_quantity#11), sum(cs_quantity#17)] -Aggregate Attributes [3]: [sum(ss_quantity#5)#39, sum(sr_return_quantity#11)#40, sum(cs_quantity#17)#41] -Results [7]: [i_item_id#29, i_item_desc#30, s_store_id#25, s_store_name#26, sum(ss_quantity#5)#39 AS store_sales_quantity#42, sum(sr_return_quantity#11)#40 AS store_returns_quantity#43, sum(cs_quantity#17)#41 AS catalog_sales_quantity#44] +Input [7]: [i_item_id#26, i_item_desc#27, s_store_id#23, s_store_name#24, sum#31, sum#32, sum#33] +Keys [4]: [i_item_id#26, i_item_desc#27, s_store_id#23, s_store_name#24] +Functions [3]: [sum(ss_quantity#5), sum(sr_return_quantity#11), sum(cs_quantity#16)] +Aggregate Attributes [3]: [sum(ss_quantity#5)#34, sum(sr_return_quantity#11)#35, sum(cs_quantity#16)#36] +Results [7]: [i_item_id#26, i_item_desc#27, s_store_id#23, s_store_name#24, sum(ss_quantity#5)#34 AS store_sales_quantity#37, sum(sr_return_quantity#11)#35 AS store_returns_quantity#38, sum(cs_quantity#16)#36 AS catalog_sales_quantity#39] (40) TakeOrderedAndProject -Input [7]: [i_item_id#29, i_item_desc#30, s_store_id#25, s_store_name#26, store_sales_quantity#42, store_returns_quantity#43, catalog_sales_quantity#44] -Arguments: 100, [i_item_id#29 ASC NULLS FIRST, i_item_desc#30 ASC NULLS FIRST, s_store_id#25 ASC NULLS FIRST, s_store_name#26 ASC NULLS FIRST], [i_item_id#29, i_item_desc#30, s_store_id#25, s_store_name#26, store_sales_quantity#42, store_returns_quantity#43, catalog_sales_quantity#44] +Input [7]: [i_item_id#26, i_item_desc#27, s_store_id#23, s_store_name#24, store_sales_quantity#37, store_returns_quantity#38, catalog_sales_quantity#39] +Arguments: 100, [i_item_id#26 ASC NULLS FIRST, i_item_desc#27 ASC NULLS FIRST, s_store_id#23 ASC NULLS FIRST, s_store_name#24 ASC NULLS FIRST], [i_item_id#26, i_item_desc#27, s_store_id#23, s_store_name#24, store_sales_quantity#37, store_returns_quantity#38, catalog_sales_quantity#39] ===== Subqueries ===== @@ -235,26 +235,26 @@ BroadcastExchange (45) (41) Scan parquet default.date_dim -Output [3]: [d_date_sk#21, d_year#45, d_moy#46] +Output [3]: [d_date_sk#19, d_year#40, d_moy#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_moy,9), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct (42) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#21, d_year#45, d_moy#46] +Input [3]: [d_date_sk#19, d_year#40, d_moy#41] (43) Filter [codegen id : 1] -Input [3]: [d_date_sk#21, d_year#45, d_moy#46] -Condition : ((((isnotnull(d_moy#46) AND isnotnull(d_year#45)) AND (d_moy#46 = 9)) AND (d_year#45 = 1999)) AND isnotnull(d_date_sk#21)) +Input [3]: [d_date_sk#19, d_year#40, d_moy#41] +Condition : ((((isnotnull(d_moy#41) AND isnotnull(d_year#40)) AND (d_moy#41 = 9)) AND (d_year#40 = 1999)) AND isnotnull(d_date_sk#19)) (44) Project [codegen id : 1] -Output [1]: [d_date_sk#21] -Input [3]: [d_date_sk#21, d_year#45, d_moy#46] +Output [1]: [d_date_sk#19] +Input [3]: [d_date_sk#19, d_year#40, d_moy#41] (45) BroadcastExchange -Input [1]: [d_date_sk#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#47] +Input [1]: [d_date_sk#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] Subquery:2 Hosting operator id = 4 Hosting Expression = sr_returned_date_sk#12 IN dynamicpruning#13 BroadcastExchange (50) @@ -265,28 +265,28 @@ BroadcastExchange (50) (46) Scan parquet default.date_dim -Output [3]: [d_date_sk#22, d_year#48, d_moy#49] +Output [3]: [d_date_sk#20, d_year#42, d_moy#43] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), GreaterThanOrEqual(d_moy,9), LessThanOrEqual(d_moy,12), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#22, d_year#48, d_moy#49] +Input [3]: [d_date_sk#20, d_year#42, d_moy#43] (48) Filter [codegen id : 1] -Input [3]: [d_date_sk#22, d_year#48, d_moy#49] -Condition : (((((isnotnull(d_moy#49) AND isnotnull(d_year#48)) AND (d_moy#49 >= 9)) AND (d_moy#49 <= 12)) AND (d_year#48 = 1999)) AND isnotnull(d_date_sk#22)) +Input [3]: [d_date_sk#20, d_year#42, d_moy#43] +Condition : (((((isnotnull(d_moy#43) AND isnotnull(d_year#42)) AND (d_moy#43 >= 9)) AND (d_moy#43 <= 12)) AND (d_year#42 = 1999)) AND isnotnull(d_date_sk#20)) (49) Project [codegen id : 1] -Output [1]: [d_date_sk#22] -Input [3]: [d_date_sk#22, d_year#48, d_moy#49] +Output [1]: [d_date_sk#20] +Input [3]: [d_date_sk#20, d_year#42, d_moy#43] (50) BroadcastExchange -Input [1]: [d_date_sk#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#50] +Input [1]: [d_date_sk#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:3 Hosting operator id = 10 Hosting Expression = cs_sold_date_sk#18 IN dynamicpruning#19 +Subquery:3 Hosting operator id = 10 Hosting Expression = cs_sold_date_sk#17 IN dynamicpruning#18 BroadcastExchange (55) +- * Project (54) +- * Filter (53) @@ -295,25 +295,25 @@ BroadcastExchange (55) (51) Scan parquet default.date_dim -Output [2]: [d_date_sk#23, d_year#51] +Output [2]: [d_date_sk#21, d_year#44] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_year, [1999,2000,2001]), IsNotNull(d_date_sk)] ReadSchema: struct (52) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#23, d_year#51] +Input [2]: [d_date_sk#21, d_year#44] (53) Filter [codegen id : 1] -Input [2]: [d_date_sk#23, d_year#51] -Condition : (d_year#51 IN (1999,2000,2001) AND isnotnull(d_date_sk#23)) +Input [2]: [d_date_sk#21, d_year#44] +Condition : (d_year#44 IN (1999,2000,2001) AND isnotnull(d_date_sk#21)) (54) Project [codegen id : 1] -Output [1]: [d_date_sk#23] -Input [2]: [d_date_sk#23, d_year#51] +Output [1]: [d_date_sk#21] +Input [2]: [d_date_sk#21, d_year#44] (55) BroadcastExchange -Input [1]: [d_date_sk#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#52] +Input [1]: [d_date_sk#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q3.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q3.sf100/explain.txt index 8ec42f473ee9e..cd0368c14a253 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q3.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q3.sf100/explain.txt @@ -53,7 +53,7 @@ Input [4]: [i_item_sk#5, i_brand_id#6, i_brand#7, i_manufact_id#8] (8) BroadcastExchange Input [3]: [i_item_sk#5, i_brand_id#6, i_brand#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#1] @@ -65,38 +65,38 @@ Output [4]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_brand_id#6, i_brand#7] Input [6]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_sk#5, i_brand_id#6, i_brand#7] (11) ReusedExchange [Reuses operator id: 22] -Output [2]: [d_date_sk#10, d_year#11] +Output [2]: [d_date_sk#9, d_year#10] (12) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_sold_date_sk#3] -Right keys [1]: [d_date_sk#10] +Right keys [1]: [d_date_sk#9] Join condition: None (13) Project [codegen id : 3] -Output [4]: [d_year#11, ss_ext_sales_price#2, i_brand_id#6, i_brand#7] -Input [6]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_brand_id#6, i_brand#7, d_date_sk#10, d_year#11] +Output [4]: [d_year#10, ss_ext_sales_price#2, i_brand_id#6, i_brand#7] +Input [6]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_brand_id#6, i_brand#7, d_date_sk#9, d_year#10] (14) HashAggregate [codegen id : 3] -Input [4]: [d_year#11, ss_ext_sales_price#2, i_brand_id#6, i_brand#7] -Keys [3]: [d_year#11, i_brand#7, i_brand_id#6] +Input [4]: [d_year#10, ss_ext_sales_price#2, i_brand_id#6, i_brand#7] +Keys [3]: [d_year#10, i_brand#7, i_brand_id#6] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#12] -Results [4]: [d_year#11, i_brand#7, i_brand_id#6, sum#13] +Aggregate Attributes [1]: [sum#11] +Results [4]: [d_year#10, i_brand#7, i_brand_id#6, sum#12] (15) Exchange -Input [4]: [d_year#11, i_brand#7, i_brand_id#6, sum#13] -Arguments: hashpartitioning(d_year#11, i_brand#7, i_brand_id#6, 5), ENSURE_REQUIREMENTS, [id=#14] +Input [4]: [d_year#10, i_brand#7, i_brand_id#6, sum#12] +Arguments: hashpartitioning(d_year#10, i_brand#7, i_brand_id#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (16) HashAggregate [codegen id : 4] -Input [4]: [d_year#11, i_brand#7, i_brand_id#6, sum#13] -Keys [3]: [d_year#11, i_brand#7, i_brand_id#6] +Input [4]: [d_year#10, i_brand#7, i_brand_id#6, sum#12] +Keys [3]: [d_year#10, i_brand#7, i_brand_id#6] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#15] -Results [4]: [d_year#11, i_brand_id#6 AS brand_id#16, i_brand#7 AS brand#17, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#15,17,2) AS sum_agg#18] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#13] +Results [4]: [d_year#10, i_brand_id#6 AS brand_id#14, i_brand#7 AS brand#15, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#13,17,2) AS sum_agg#16] (17) TakeOrderedAndProject -Input [4]: [d_year#11, brand_id#16, brand#17, sum_agg#18] -Arguments: 100, [d_year#11 ASC NULLS FIRST, sum_agg#18 DESC NULLS LAST, brand_id#16 ASC NULLS FIRST], [d_year#11, brand_id#16, brand#17, sum_agg#18] +Input [4]: [d_year#10, brand_id#14, brand#15, sum_agg#16] +Arguments: 100, [d_year#10 ASC NULLS FIRST, sum_agg#16 DESC NULLS LAST, brand_id#14 ASC NULLS FIRST], [d_year#10, brand_id#14, brand#15, sum_agg#16] ===== Subqueries ===== @@ -109,25 +109,25 @@ BroadcastExchange (22) (18) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#11, d_moy#19] +Output [3]: [d_date_sk#9, d_year#10, d_moy#17] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), EqualTo(d_moy,11), IsNotNull(d_date_sk)] ReadSchema: struct (19) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#19] +Input [3]: [d_date_sk#9, d_year#10, d_moy#17] (20) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#19] -Condition : ((isnotnull(d_moy#19) AND (d_moy#19 = 11)) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#9, d_year#10, d_moy#17] +Condition : ((isnotnull(d_moy#17) AND (d_moy#17 = 11)) AND isnotnull(d_date_sk#9)) (21) Project [codegen id : 1] -Output [2]: [d_date_sk#10, d_year#11] -Input [3]: [d_date_sk#10, d_year#11, d_moy#19] +Output [2]: [d_date_sk#9, d_year#10] +Input [3]: [d_date_sk#9, d_year#10, d_moy#17] (22) BroadcastExchange -Input [2]: [d_date_sk#10, d_year#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20] +Input [2]: [d_date_sk#9, d_year#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q3/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q3/explain.txt index 77eb7fefd4d05..6d1938cf12ce9 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q3/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q3/explain.txt @@ -57,7 +57,7 @@ Condition : isnotnull(ss_item_sk#4) (8) BroadcastExchange Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] @@ -69,55 +69,55 @@ Output [3]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5] Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] (11) Scan parquet default.item -Output [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manufact_id#11] +Output [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manufact_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manufact_id), EqualTo(i_manufact_id,128), IsNotNull(i_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manufact_id#11] +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manufact_id#10] (13) Filter [codegen id : 2] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manufact_id#11] -Condition : ((isnotnull(i_manufact_id#11) AND (i_manufact_id#11 = 128)) AND isnotnull(i_item_sk#8)) +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manufact_id#10] +Condition : ((isnotnull(i_manufact_id#10) AND (i_manufact_id#10 = 128)) AND isnotnull(i_item_sk#7)) (14) Project [codegen id : 2] -Output [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manufact_id#11] +Output [3]: [i_item_sk#7, i_brand_id#8, i_brand#9] +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manufact_id#10] (15) BroadcastExchange -Input [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Input [3]: [i_item_sk#7, i_brand_id#8, i_brand#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#4] -Right keys [1]: [i_item_sk#8] +Right keys [1]: [i_item_sk#7] Join condition: None (17) Project [codegen id : 3] -Output [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#9, i_brand#10] -Input [6]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#8, i_brand_id#9, i_brand#10] +Output [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#8, i_brand#9] +Input [6]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#7, i_brand_id#8, i_brand#9] (18) HashAggregate [codegen id : 3] -Input [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#9, i_brand#10] -Keys [3]: [d_year#2, i_brand#10, i_brand_id#9] +Input [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#8, i_brand#9] +Keys [3]: [d_year#2, i_brand#9, i_brand_id#8] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum#13] -Results [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14] +Aggregate Attributes [1]: [sum#11] +Results [4]: [d_year#2, i_brand#9, i_brand_id#8, sum#12] (19) Exchange -Input [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14] -Arguments: hashpartitioning(d_year#2, i_brand#10, i_brand_id#9, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [d_year#2, i_brand#9, i_brand_id#8, sum#12] +Arguments: hashpartitioning(d_year#2, i_brand#9, i_brand_id#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14] -Keys [3]: [d_year#2, i_brand#10, i_brand_id#9] +Input [4]: [d_year#2, i_brand#9, i_brand_id#8, sum#12] +Keys [3]: [d_year#2, i_brand#9, i_brand_id#8] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#16] -Results [4]: [d_year#2, i_brand_id#9 AS brand_id#17, i_brand#10 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#16,17,2) AS sum_agg#19] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#13] +Results [4]: [d_year#2, i_brand_id#8 AS brand_id#14, i_brand#9 AS brand#15, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#13,17,2) AS sum_agg#16] (21) TakeOrderedAndProject -Input [4]: [d_year#2, brand_id#17, brand#18, sum_agg#19] -Arguments: 100, [d_year#2 ASC NULLS FIRST, sum_agg#19 DESC NULLS LAST, brand_id#17 ASC NULLS FIRST], [d_year#2, brand_id#17, brand#18, sum_agg#19] +Input [4]: [d_year#2, brand_id#14, brand#15, sum_agg#16] +Arguments: 100, [d_year#2 ASC NULLS FIRST, sum_agg#16 DESC NULLS LAST, brand_id#14 ASC NULLS FIRST], [d_year#2, brand_id#14, brand#15, sum_agg#16] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q30.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q30.sf100/explain.txt index b2d52de3cae98..0c596694f83d6 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q30.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q30.sf100/explain.txt @@ -90,7 +90,7 @@ Input [2]: [ca_address_sk#15, ca_state#16] (8) BroadcastExchange Input [1]: [ca_address_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 2] Left keys [1]: [c_current_addr_sk#3] @@ -103,216 +103,216 @@ Input [15]: [c_customer_sk#1, c_customer_id#2, c_current_addr_sk#3, c_salutation (11) BroadcastExchange Input [13]: [c_customer_sk#1, c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, c_preferred_cust_flag#7, c_birth_day#8, c_birth_month#9, c_birth_year#10, c_birth_country#11, c_login#12, c_email_address#13, c_last_review_date#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (12) Scan parquet default.web_returns -Output [4]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21, wr_returned_date_sk#22] +Output [4]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19, wr_returned_date_sk#20] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(wr_returned_date_sk#22), dynamicpruningexpression(wr_returned_date_sk#22 IN dynamicpruning#23)] +PartitionFilters: [isnotnull(wr_returned_date_sk#20), dynamicpruningexpression(wr_returned_date_sk#20 IN dynamicpruning#21)] PushedFilters: [IsNotNull(wr_returning_addr_sk), IsNotNull(wr_returning_customer_sk)] ReadSchema: struct (13) ColumnarToRow [codegen id : 4] -Input [4]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21, wr_returned_date_sk#22] +Input [4]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19, wr_returned_date_sk#20] (14) Filter [codegen id : 4] -Input [4]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21, wr_returned_date_sk#22] -Condition : (isnotnull(wr_returning_addr_sk#20) AND isnotnull(wr_returning_customer_sk#19)) +Input [4]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19, wr_returned_date_sk#20] +Condition : (isnotnull(wr_returning_addr_sk#18) AND isnotnull(wr_returning_customer_sk#17)) (15) ReusedExchange [Reuses operator id: 60] -Output [1]: [d_date_sk#24] +Output [1]: [d_date_sk#22] (16) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [wr_returned_date_sk#22] -Right keys [1]: [d_date_sk#24] +Left keys [1]: [wr_returned_date_sk#20] +Right keys [1]: [d_date_sk#22] Join condition: None (17) Project [codegen id : 4] -Output [3]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21] -Input [5]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21, wr_returned_date_sk#22, d_date_sk#24] +Output [3]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19] +Input [5]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19, wr_returned_date_sk#20, d_date_sk#22] (18) Exchange -Input [3]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21] -Arguments: hashpartitioning(wr_returning_addr_sk#20, 5), ENSURE_REQUIREMENTS, [id=#25] +Input [3]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19] +Arguments: hashpartitioning(wr_returning_addr_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 5] -Input [3]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21] -Arguments: [wr_returning_addr_sk#20 ASC NULLS FIRST], false, 0 +Input [3]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19] +Arguments: [wr_returning_addr_sk#18 ASC NULLS FIRST], false, 0 (20) Scan parquet default.customer_address -Output [2]: [ca_address_sk#26, ca_state#27] +Output [2]: [ca_address_sk#23, ca_state#24] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_state)] ReadSchema: struct (21) ColumnarToRow [codegen id : 6] -Input [2]: [ca_address_sk#26, ca_state#27] +Input [2]: [ca_address_sk#23, ca_state#24] (22) Filter [codegen id : 6] -Input [2]: [ca_address_sk#26, ca_state#27] -Condition : (isnotnull(ca_address_sk#26) AND isnotnull(ca_state#27)) +Input [2]: [ca_address_sk#23, ca_state#24] +Condition : (isnotnull(ca_address_sk#23) AND isnotnull(ca_state#24)) (23) Exchange -Input [2]: [ca_address_sk#26, ca_state#27] -Arguments: hashpartitioning(ca_address_sk#26, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [2]: [ca_address_sk#23, ca_state#24] +Arguments: hashpartitioning(ca_address_sk#23, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 7] -Input [2]: [ca_address_sk#26, ca_state#27] -Arguments: [ca_address_sk#26 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#23, ca_state#24] +Arguments: [ca_address_sk#23 ASC NULLS FIRST], false, 0 (25) SortMergeJoin [codegen id : 8] -Left keys [1]: [wr_returning_addr_sk#20] -Right keys [1]: [ca_address_sk#26] +Left keys [1]: [wr_returning_addr_sk#18] +Right keys [1]: [ca_address_sk#23] Join condition: None (26) Project [codegen id : 8] -Output [3]: [wr_returning_customer_sk#19, wr_return_amt#21, ca_state#27] -Input [5]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21, ca_address_sk#26, ca_state#27] +Output [3]: [wr_returning_customer_sk#17, wr_return_amt#19, ca_state#24] +Input [5]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19, ca_address_sk#23, ca_state#24] (27) HashAggregate [codegen id : 8] -Input [3]: [wr_returning_customer_sk#19, wr_return_amt#21, ca_state#27] -Keys [2]: [wr_returning_customer_sk#19, ca_state#27] -Functions [1]: [partial_sum(UnscaledValue(wr_return_amt#21))] -Aggregate Attributes [1]: [sum#29] -Results [3]: [wr_returning_customer_sk#19, ca_state#27, sum#30] +Input [3]: [wr_returning_customer_sk#17, wr_return_amt#19, ca_state#24] +Keys [2]: [wr_returning_customer_sk#17, ca_state#24] +Functions [1]: [partial_sum(UnscaledValue(wr_return_amt#19))] +Aggregate Attributes [1]: [sum#25] +Results [3]: [wr_returning_customer_sk#17, ca_state#24, sum#26] (28) Exchange -Input [3]: [wr_returning_customer_sk#19, ca_state#27, sum#30] -Arguments: hashpartitioning(wr_returning_customer_sk#19, ca_state#27, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [3]: [wr_returning_customer_sk#17, ca_state#24, sum#26] +Arguments: hashpartitioning(wr_returning_customer_sk#17, ca_state#24, 5), ENSURE_REQUIREMENTS, [plan_id=5] (29) HashAggregate -Input [3]: [wr_returning_customer_sk#19, ca_state#27, sum#30] -Keys [2]: [wr_returning_customer_sk#19, ca_state#27] -Functions [1]: [sum(UnscaledValue(wr_return_amt#21))] -Aggregate Attributes [1]: [sum(UnscaledValue(wr_return_amt#21))#32] -Results [3]: [wr_returning_customer_sk#19 AS ctr_customer_sk#33, ca_state#27 AS ctr_state#34, MakeDecimal(sum(UnscaledValue(wr_return_amt#21))#32,17,2) AS ctr_total_return#35] +Input [3]: [wr_returning_customer_sk#17, ca_state#24, sum#26] +Keys [2]: [wr_returning_customer_sk#17, ca_state#24] +Functions [1]: [sum(UnscaledValue(wr_return_amt#19))] +Aggregate Attributes [1]: [sum(UnscaledValue(wr_return_amt#19))#27] +Results [3]: [wr_returning_customer_sk#17 AS ctr_customer_sk#28, ca_state#24 AS ctr_state#29, MakeDecimal(sum(UnscaledValue(wr_return_amt#19))#27,17,2) AS ctr_total_return#30] (30) Filter -Input [3]: [ctr_customer_sk#33, ctr_state#34, ctr_total_return#35] -Condition : isnotnull(ctr_total_return#35) +Input [3]: [ctr_customer_sk#28, ctr_state#29, ctr_total_return#30] +Condition : isnotnull(ctr_total_return#30) (31) BroadcastHashJoin [codegen id : 17] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [ctr_customer_sk#33] +Right keys [1]: [ctr_customer_sk#28] Join condition: None (32) Project [codegen id : 17] -Output [14]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, c_preferred_cust_flag#7, c_birth_day#8, c_birth_month#9, c_birth_year#10, c_birth_country#11, c_login#12, c_email_address#13, c_last_review_date#14, ctr_state#34, ctr_total_return#35] -Input [16]: [c_customer_sk#1, c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, c_preferred_cust_flag#7, c_birth_day#8, c_birth_month#9, c_birth_year#10, c_birth_country#11, c_login#12, c_email_address#13, c_last_review_date#14, ctr_customer_sk#33, ctr_state#34, ctr_total_return#35] +Output [14]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, c_preferred_cust_flag#7, c_birth_day#8, c_birth_month#9, c_birth_year#10, c_birth_country#11, c_login#12, c_email_address#13, c_last_review_date#14, ctr_state#29, ctr_total_return#30] +Input [16]: [c_customer_sk#1, c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, c_preferred_cust_flag#7, c_birth_day#8, c_birth_month#9, c_birth_year#10, c_birth_country#11, c_login#12, c_email_address#13, c_last_review_date#14, ctr_customer_sk#28, ctr_state#29, ctr_total_return#30] (33) Scan parquet default.web_returns -Output [4]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21, wr_returned_date_sk#22] +Output [4]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19, wr_returned_date_sk#20] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(wr_returned_date_sk#22), dynamicpruningexpression(wr_returned_date_sk#22 IN dynamicpruning#23)] +PartitionFilters: [isnotnull(wr_returned_date_sk#20), dynamicpruningexpression(wr_returned_date_sk#20 IN dynamicpruning#21)] PushedFilters: [IsNotNull(wr_returning_addr_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 10] -Input [4]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21, wr_returned_date_sk#22] +Input [4]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19, wr_returned_date_sk#20] (35) Filter [codegen id : 10] -Input [4]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21, wr_returned_date_sk#22] -Condition : isnotnull(wr_returning_addr_sk#20) +Input [4]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19, wr_returned_date_sk#20] +Condition : isnotnull(wr_returning_addr_sk#18) (36) ReusedExchange [Reuses operator id: 60] -Output [1]: [d_date_sk#24] +Output [1]: [d_date_sk#22] (37) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [wr_returned_date_sk#22] -Right keys [1]: [d_date_sk#24] +Left keys [1]: [wr_returned_date_sk#20] +Right keys [1]: [d_date_sk#22] Join condition: None (38) Project [codegen id : 10] -Output [3]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21] -Input [5]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21, wr_returned_date_sk#22, d_date_sk#24] +Output [3]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19] +Input [5]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19, wr_returned_date_sk#20, d_date_sk#22] (39) Exchange -Input [3]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21] -Arguments: hashpartitioning(wr_returning_addr_sk#20, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [3]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19] +Arguments: hashpartitioning(wr_returning_addr_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=6] (40) Sort [codegen id : 11] -Input [3]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21] -Arguments: [wr_returning_addr_sk#20 ASC NULLS FIRST], false, 0 +Input [3]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19] +Arguments: [wr_returning_addr_sk#18 ASC NULLS FIRST], false, 0 (41) ReusedExchange [Reuses operator id: 23] -Output [2]: [ca_address_sk#26, ca_state#27] +Output [2]: [ca_address_sk#23, ca_state#24] (42) Sort [codegen id : 13] -Input [2]: [ca_address_sk#26, ca_state#27] -Arguments: [ca_address_sk#26 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#23, ca_state#24] +Arguments: [ca_address_sk#23 ASC NULLS FIRST], false, 0 (43) SortMergeJoin [codegen id : 14] -Left keys [1]: [wr_returning_addr_sk#20] -Right keys [1]: [ca_address_sk#26] +Left keys [1]: [wr_returning_addr_sk#18] +Right keys [1]: [ca_address_sk#23] Join condition: None (44) Project [codegen id : 14] -Output [3]: [wr_returning_customer_sk#19, wr_return_amt#21, ca_state#27] -Input [5]: [wr_returning_customer_sk#19, wr_returning_addr_sk#20, wr_return_amt#21, ca_address_sk#26, ca_state#27] +Output [3]: [wr_returning_customer_sk#17, wr_return_amt#19, ca_state#24] +Input [5]: [wr_returning_customer_sk#17, wr_returning_addr_sk#18, wr_return_amt#19, ca_address_sk#23, ca_state#24] (45) HashAggregate [codegen id : 14] -Input [3]: [wr_returning_customer_sk#19, wr_return_amt#21, ca_state#27] -Keys [2]: [wr_returning_customer_sk#19, ca_state#27] -Functions [1]: [partial_sum(UnscaledValue(wr_return_amt#21))] -Aggregate Attributes [1]: [sum#37] -Results [3]: [wr_returning_customer_sk#19, ca_state#27, sum#38] +Input [3]: [wr_returning_customer_sk#17, wr_return_amt#19, ca_state#24] +Keys [2]: [wr_returning_customer_sk#17, ca_state#24] +Functions [1]: [partial_sum(UnscaledValue(wr_return_amt#19))] +Aggregate Attributes [1]: [sum#31] +Results [3]: [wr_returning_customer_sk#17, ca_state#24, sum#32] (46) Exchange -Input [3]: [wr_returning_customer_sk#19, ca_state#27, sum#38] -Arguments: hashpartitioning(wr_returning_customer_sk#19, ca_state#27, 5), ENSURE_REQUIREMENTS, [id=#39] +Input [3]: [wr_returning_customer_sk#17, ca_state#24, sum#32] +Arguments: hashpartitioning(wr_returning_customer_sk#17, ca_state#24, 5), ENSURE_REQUIREMENTS, [plan_id=7] (47) HashAggregate [codegen id : 15] -Input [3]: [wr_returning_customer_sk#19, ca_state#27, sum#38] -Keys [2]: [wr_returning_customer_sk#19, ca_state#27] -Functions [1]: [sum(UnscaledValue(wr_return_amt#21))] -Aggregate Attributes [1]: [sum(UnscaledValue(wr_return_amt#21))#32] -Results [2]: [ca_state#27 AS ctr_state#34, MakeDecimal(sum(UnscaledValue(wr_return_amt#21))#32,17,2) AS ctr_total_return#35] +Input [3]: [wr_returning_customer_sk#17, ca_state#24, sum#32] +Keys [2]: [wr_returning_customer_sk#17, ca_state#24] +Functions [1]: [sum(UnscaledValue(wr_return_amt#19))] +Aggregate Attributes [1]: [sum(UnscaledValue(wr_return_amt#19))#27] +Results [2]: [ca_state#24 AS ctr_state#29, MakeDecimal(sum(UnscaledValue(wr_return_amt#19))#27,17,2) AS ctr_total_return#30] (48) HashAggregate [codegen id : 15] -Input [2]: [ctr_state#34, ctr_total_return#35] -Keys [1]: [ctr_state#34] -Functions [1]: [partial_avg(ctr_total_return#35)] -Aggregate Attributes [2]: [sum#40, count#41] -Results [3]: [ctr_state#34, sum#42, count#43] +Input [2]: [ctr_state#29, ctr_total_return#30] +Keys [1]: [ctr_state#29] +Functions [1]: [partial_avg(ctr_total_return#30)] +Aggregate Attributes [2]: [sum#33, count#34] +Results [3]: [ctr_state#29, sum#35, count#36] (49) Exchange -Input [3]: [ctr_state#34, sum#42, count#43] -Arguments: hashpartitioning(ctr_state#34, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [3]: [ctr_state#29, sum#35, count#36] +Arguments: hashpartitioning(ctr_state#29, 5), ENSURE_REQUIREMENTS, [plan_id=8] (50) HashAggregate [codegen id : 16] -Input [3]: [ctr_state#34, sum#42, count#43] -Keys [1]: [ctr_state#34] -Functions [1]: [avg(ctr_total_return#35)] -Aggregate Attributes [1]: [avg(ctr_total_return#35)#45] -Results [2]: [CheckOverflow((promote_precision(avg(ctr_total_return#35)#45) * 1.200000), DecimalType(24,7)) AS (avg(ctr_total_return) * 1.2)#46, ctr_state#34 AS ctr_state#34#47] +Input [3]: [ctr_state#29, sum#35, count#36] +Keys [1]: [ctr_state#29] +Functions [1]: [avg(ctr_total_return#30)] +Aggregate Attributes [1]: [avg(ctr_total_return#30)#37] +Results [2]: [CheckOverflow((promote_precision(avg(ctr_total_return#30)#37) * 1.200000), DecimalType(24,7)) AS (avg(ctr_total_return) * 1.2)#38, ctr_state#29 AS ctr_state#29#39] (51) Filter [codegen id : 16] -Input [2]: [(avg(ctr_total_return) * 1.2)#46, ctr_state#34#47] -Condition : isnotnull((avg(ctr_total_return) * 1.2)#46) +Input [2]: [(avg(ctr_total_return) * 1.2)#38, ctr_state#29#39] +Condition : isnotnull((avg(ctr_total_return) * 1.2)#38) (52) BroadcastExchange -Input [2]: [(avg(ctr_total_return) * 1.2)#46, ctr_state#34#47] -Arguments: HashedRelationBroadcastMode(List(input[1, string, true]),false), [id=#48] +Input [2]: [(avg(ctr_total_return) * 1.2)#38, ctr_state#29#39] +Arguments: HashedRelationBroadcastMode(List(input[1, string, true]),false), [plan_id=9] (53) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ctr_state#34] -Right keys [1]: [ctr_state#34#47] -Join condition: (cast(ctr_total_return#35 as decimal(24,7)) > (avg(ctr_total_return) * 1.2)#46) +Left keys [1]: [ctr_state#29] +Right keys [1]: [ctr_state#29#39] +Join condition: (cast(ctr_total_return#30 as decimal(24,7)) > (avg(ctr_total_return) * 1.2)#38) (54) Project [codegen id : 17] -Output [13]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, c_preferred_cust_flag#7, c_birth_day#8, c_birth_month#9, c_birth_year#10, c_birth_country#11, c_login#12, c_email_address#13, c_last_review_date#14, ctr_total_return#35] -Input [16]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, c_preferred_cust_flag#7, c_birth_day#8, c_birth_month#9, c_birth_year#10, c_birth_country#11, c_login#12, c_email_address#13, c_last_review_date#14, ctr_state#34, ctr_total_return#35, (avg(ctr_total_return) * 1.2)#46, ctr_state#34#47] +Output [13]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, c_preferred_cust_flag#7, c_birth_day#8, c_birth_month#9, c_birth_year#10, c_birth_country#11, c_login#12, c_email_address#13, c_last_review_date#14, ctr_total_return#30] +Input [16]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, c_preferred_cust_flag#7, c_birth_day#8, c_birth_month#9, c_birth_year#10, c_birth_country#11, c_login#12, c_email_address#13, c_last_review_date#14, ctr_state#29, ctr_total_return#30, (avg(ctr_total_return) * 1.2)#38, ctr_state#29#39] (55) TakeOrderedAndProject -Input [13]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, c_preferred_cust_flag#7, c_birth_day#8, c_birth_month#9, c_birth_year#10, c_birth_country#11, c_login#12, c_email_address#13, c_last_review_date#14, ctr_total_return#35] -Arguments: 100, [c_customer_id#2 ASC NULLS FIRST, c_salutation#4 ASC NULLS FIRST, c_first_name#5 ASC NULLS FIRST, c_last_name#6 ASC NULLS FIRST, c_preferred_cust_flag#7 ASC NULLS FIRST, c_birth_day#8 ASC NULLS FIRST, c_birth_month#9 ASC NULLS FIRST, c_birth_year#10 ASC NULLS FIRST, c_birth_country#11 ASC NULLS FIRST, c_login#12 ASC NULLS FIRST, c_email_address#13 ASC NULLS FIRST, c_last_review_date#14 ASC NULLS FIRST, ctr_total_return#35 ASC NULLS FIRST], [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, c_preferred_cust_flag#7, c_birth_day#8, c_birth_month#9, c_birth_year#10, c_birth_country#11, c_login#12, c_email_address#13, c_last_review_date#14, ctr_total_return#35] +Input [13]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, c_preferred_cust_flag#7, c_birth_day#8, c_birth_month#9, c_birth_year#10, c_birth_country#11, c_login#12, c_email_address#13, c_last_review_date#14, ctr_total_return#30] +Arguments: 100, [c_customer_id#2 ASC NULLS FIRST, c_salutation#4 ASC NULLS FIRST, c_first_name#5 ASC NULLS FIRST, c_last_name#6 ASC NULLS FIRST, c_preferred_cust_flag#7 ASC NULLS FIRST, c_birth_day#8 ASC NULLS FIRST, c_birth_month#9 ASC NULLS FIRST, c_birth_year#10 ASC NULLS FIRST, c_birth_country#11 ASC NULLS FIRST, c_login#12 ASC NULLS FIRST, c_email_address#13 ASC NULLS FIRST, c_last_review_date#14 ASC NULLS FIRST, ctr_total_return#30 ASC NULLS FIRST], [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, c_preferred_cust_flag#7, c_birth_day#8, c_birth_month#9, c_birth_year#10, c_birth_country#11, c_login#12, c_email_address#13, c_last_review_date#14, ctr_total_return#30] ===== Subqueries ===== -Subquery:1 Hosting operator id = 12 Hosting Expression = wr_returned_date_sk#22 IN dynamicpruning#23 +Subquery:1 Hosting operator id = 12 Hosting Expression = wr_returned_date_sk#20 IN dynamicpruning#21 BroadcastExchange (60) +- * Project (59) +- * Filter (58) @@ -321,27 +321,27 @@ BroadcastExchange (60) (56) Scan parquet default.date_dim -Output [2]: [d_date_sk#24, d_year#49] +Output [2]: [d_date_sk#22, d_year#40] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#24, d_year#49] +Input [2]: [d_date_sk#22, d_year#40] (58) Filter [codegen id : 1] -Input [2]: [d_date_sk#24, d_year#49] -Condition : ((isnotnull(d_year#49) AND (d_year#49 = 2002)) AND isnotnull(d_date_sk#24)) +Input [2]: [d_date_sk#22, d_year#40] +Condition : ((isnotnull(d_year#40) AND (d_year#40 = 2002)) AND isnotnull(d_date_sk#22)) (59) Project [codegen id : 1] -Output [1]: [d_date_sk#24] -Input [2]: [d_date_sk#24, d_year#49] +Output [1]: [d_date_sk#22] +Input [2]: [d_date_sk#22, d_year#40] (60) BroadcastExchange -Input [1]: [d_date_sk#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#50] +Input [1]: [d_date_sk#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -Subquery:2 Hosting operator id = 33 Hosting Expression = wr_returned_date_sk#22 IN dynamicpruning#23 +Subquery:2 Hosting operator id = 33 Hosting Expression = wr_returned_date_sk#20 IN dynamicpruning#21 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q30/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q30/explain.txt index 333930275bbd1..a7256765c8464 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q30/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q30/explain.txt @@ -93,7 +93,7 @@ Condition : (isnotnull(ca_address_sk#7) AND isnotnull(ca_state#8)) (10) BroadcastExchange Input [2]: [ca_address_sk#7, ca_state#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [wr_returning_addr_sk#2] @@ -108,23 +108,23 @@ Input [5]: [wr_returning_customer_sk#1, wr_returning_addr_sk#2, wr_return_amt#3, Input [3]: [wr_returning_customer_sk#1, wr_return_amt#3, ca_state#8] Keys [2]: [wr_returning_customer_sk#1, ca_state#8] Functions [1]: [partial_sum(UnscaledValue(wr_return_amt#3))] -Aggregate Attributes [1]: [sum#10] -Results [3]: [wr_returning_customer_sk#1, ca_state#8, sum#11] +Aggregate Attributes [1]: [sum#9] +Results [3]: [wr_returning_customer_sk#1, ca_state#8, sum#10] (14) Exchange -Input [3]: [wr_returning_customer_sk#1, ca_state#8, sum#11] -Arguments: hashpartitioning(wr_returning_customer_sk#1, ca_state#8, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [3]: [wr_returning_customer_sk#1, ca_state#8, sum#10] +Arguments: hashpartitioning(wr_returning_customer_sk#1, ca_state#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 11] -Input [3]: [wr_returning_customer_sk#1, ca_state#8, sum#11] +Input [3]: [wr_returning_customer_sk#1, ca_state#8, sum#10] Keys [2]: [wr_returning_customer_sk#1, ca_state#8] Functions [1]: [sum(UnscaledValue(wr_return_amt#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(wr_return_amt#3))#13] -Results [3]: [wr_returning_customer_sk#1 AS ctr_customer_sk#14, ca_state#8 AS ctr_state#15, MakeDecimal(sum(UnscaledValue(wr_return_amt#3))#13,17,2) AS ctr_total_return#16] +Aggregate Attributes [1]: [sum(UnscaledValue(wr_return_amt#3))#11] +Results [3]: [wr_returning_customer_sk#1 AS ctr_customer_sk#12, ca_state#8 AS ctr_state#13, MakeDecimal(sum(UnscaledValue(wr_return_amt#3))#11,17,2) AS ctr_total_return#14] (16) Filter [codegen id : 11] -Input [3]: [ctr_customer_sk#14, ctr_state#15, ctr_total_return#16] -Condition : isnotnull(ctr_total_return#16) +Input [3]: [ctr_customer_sk#12, ctr_state#13, ctr_total_return#14] +Condition : isnotnull(ctr_total_return#14) (17) Scan parquet default.web_returns Output [4]: [wr_returning_customer_sk#1, wr_returning_addr_sk#2, wr_return_amt#3, wr_returned_date_sk#4] @@ -169,116 +169,116 @@ Input [5]: [wr_returning_customer_sk#1, wr_returning_addr_sk#2, wr_return_amt#3, Input [3]: [wr_returning_customer_sk#1, wr_return_amt#3, ca_state#8] Keys [2]: [wr_returning_customer_sk#1, ca_state#8] Functions [1]: [partial_sum(UnscaledValue(wr_return_amt#3))] -Aggregate Attributes [1]: [sum#17] -Results [3]: [wr_returning_customer_sk#1, ca_state#8, sum#18] +Aggregate Attributes [1]: [sum#15] +Results [3]: [wr_returning_customer_sk#1, ca_state#8, sum#16] (27) Exchange -Input [3]: [wr_returning_customer_sk#1, ca_state#8, sum#18] -Arguments: hashpartitioning(wr_returning_customer_sk#1, ca_state#8, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [3]: [wr_returning_customer_sk#1, ca_state#8, sum#16] +Arguments: hashpartitioning(wr_returning_customer_sk#1, ca_state#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (28) HashAggregate [codegen id : 7] -Input [3]: [wr_returning_customer_sk#1, ca_state#8, sum#18] +Input [3]: [wr_returning_customer_sk#1, ca_state#8, sum#16] Keys [2]: [wr_returning_customer_sk#1, ca_state#8] Functions [1]: [sum(UnscaledValue(wr_return_amt#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(wr_return_amt#3))#13] -Results [2]: [ca_state#8 AS ctr_state#15, MakeDecimal(sum(UnscaledValue(wr_return_amt#3))#13,17,2) AS ctr_total_return#16] +Aggregate Attributes [1]: [sum(UnscaledValue(wr_return_amt#3))#11] +Results [2]: [ca_state#8 AS ctr_state#13, MakeDecimal(sum(UnscaledValue(wr_return_amt#3))#11,17,2) AS ctr_total_return#14] (29) HashAggregate [codegen id : 7] -Input [2]: [ctr_state#15, ctr_total_return#16] -Keys [1]: [ctr_state#15] -Functions [1]: [partial_avg(ctr_total_return#16)] -Aggregate Attributes [2]: [sum#20, count#21] -Results [3]: [ctr_state#15, sum#22, count#23] +Input [2]: [ctr_state#13, ctr_total_return#14] +Keys [1]: [ctr_state#13] +Functions [1]: [partial_avg(ctr_total_return#14)] +Aggregate Attributes [2]: [sum#17, count#18] +Results [3]: [ctr_state#13, sum#19, count#20] (30) Exchange -Input [3]: [ctr_state#15, sum#22, count#23] -Arguments: hashpartitioning(ctr_state#15, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [3]: [ctr_state#13, sum#19, count#20] +Arguments: hashpartitioning(ctr_state#13, 5), ENSURE_REQUIREMENTS, [plan_id=4] (31) HashAggregate [codegen id : 8] -Input [3]: [ctr_state#15, sum#22, count#23] -Keys [1]: [ctr_state#15] -Functions [1]: [avg(ctr_total_return#16)] -Aggregate Attributes [1]: [avg(ctr_total_return#16)#25] -Results [2]: [CheckOverflow((promote_precision(avg(ctr_total_return#16)#25) * 1.200000), DecimalType(24,7)) AS (avg(ctr_total_return) * 1.2)#26, ctr_state#15 AS ctr_state#15#27] +Input [3]: [ctr_state#13, sum#19, count#20] +Keys [1]: [ctr_state#13] +Functions [1]: [avg(ctr_total_return#14)] +Aggregate Attributes [1]: [avg(ctr_total_return#14)#21] +Results [2]: [CheckOverflow((promote_precision(avg(ctr_total_return#14)#21) * 1.200000), DecimalType(24,7)) AS (avg(ctr_total_return) * 1.2)#22, ctr_state#13 AS ctr_state#13#23] (32) Filter [codegen id : 8] -Input [2]: [(avg(ctr_total_return) * 1.2)#26, ctr_state#15#27] -Condition : isnotnull((avg(ctr_total_return) * 1.2)#26) +Input [2]: [(avg(ctr_total_return) * 1.2)#22, ctr_state#13#23] +Condition : isnotnull((avg(ctr_total_return) * 1.2)#22) (33) BroadcastExchange -Input [2]: [(avg(ctr_total_return) * 1.2)#26, ctr_state#15#27] -Arguments: HashedRelationBroadcastMode(List(input[1, string, true]),false), [id=#28] +Input [2]: [(avg(ctr_total_return) * 1.2)#22, ctr_state#13#23] +Arguments: HashedRelationBroadcastMode(List(input[1, string, true]),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [ctr_state#15] -Right keys [1]: [ctr_state#15#27] -Join condition: (cast(ctr_total_return#16 as decimal(24,7)) > (avg(ctr_total_return) * 1.2)#26) +Left keys [1]: [ctr_state#13] +Right keys [1]: [ctr_state#13#23] +Join condition: (cast(ctr_total_return#14 as decimal(24,7)) > (avg(ctr_total_return) * 1.2)#22) (35) Project [codegen id : 11] -Output [2]: [ctr_customer_sk#14, ctr_total_return#16] -Input [5]: [ctr_customer_sk#14, ctr_state#15, ctr_total_return#16, (avg(ctr_total_return) * 1.2)#26, ctr_state#15#27] +Output [2]: [ctr_customer_sk#12, ctr_total_return#14] +Input [5]: [ctr_customer_sk#12, ctr_state#13, ctr_total_return#14, (avg(ctr_total_return) * 1.2)#22, ctr_state#13#23] (36) Scan parquet default.customer -Output [14]: [c_customer_sk#29, c_customer_id#30, c_current_addr_sk#31, c_salutation#32, c_first_name#33, c_last_name#34, c_preferred_cust_flag#35, c_birth_day#36, c_birth_month#37, c_birth_year#38, c_birth_country#39, c_login#40, c_email_address#41, c_last_review_date#42] +Output [14]: [c_customer_sk#24, c_customer_id#25, c_current_addr_sk#26, c_salutation#27, c_first_name#28, c_last_name#29, c_preferred_cust_flag#30, c_birth_day#31, c_birth_month#32, c_birth_year#33, c_birth_country#34, c_login#35, c_email_address#36, c_last_review_date#37] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 9] -Input [14]: [c_customer_sk#29, c_customer_id#30, c_current_addr_sk#31, c_salutation#32, c_first_name#33, c_last_name#34, c_preferred_cust_flag#35, c_birth_day#36, c_birth_month#37, c_birth_year#38, c_birth_country#39, c_login#40, c_email_address#41, c_last_review_date#42] +Input [14]: [c_customer_sk#24, c_customer_id#25, c_current_addr_sk#26, c_salutation#27, c_first_name#28, c_last_name#29, c_preferred_cust_flag#30, c_birth_day#31, c_birth_month#32, c_birth_year#33, c_birth_country#34, c_login#35, c_email_address#36, c_last_review_date#37] (38) Filter [codegen id : 9] -Input [14]: [c_customer_sk#29, c_customer_id#30, c_current_addr_sk#31, c_salutation#32, c_first_name#33, c_last_name#34, c_preferred_cust_flag#35, c_birth_day#36, c_birth_month#37, c_birth_year#38, c_birth_country#39, c_login#40, c_email_address#41, c_last_review_date#42] -Condition : (isnotnull(c_customer_sk#29) AND isnotnull(c_current_addr_sk#31)) +Input [14]: [c_customer_sk#24, c_customer_id#25, c_current_addr_sk#26, c_salutation#27, c_first_name#28, c_last_name#29, c_preferred_cust_flag#30, c_birth_day#31, c_birth_month#32, c_birth_year#33, c_birth_country#34, c_login#35, c_email_address#36, c_last_review_date#37] +Condition : (isnotnull(c_customer_sk#24) AND isnotnull(c_current_addr_sk#26)) (39) BroadcastExchange -Input [14]: [c_customer_sk#29, c_customer_id#30, c_current_addr_sk#31, c_salutation#32, c_first_name#33, c_last_name#34, c_preferred_cust_flag#35, c_birth_day#36, c_birth_month#37, c_birth_year#38, c_birth_country#39, c_login#40, c_email_address#41, c_last_review_date#42] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#43] +Input [14]: [c_customer_sk#24, c_customer_id#25, c_current_addr_sk#26, c_salutation#27, c_first_name#28, c_last_name#29, c_preferred_cust_flag#30, c_birth_day#31, c_birth_month#32, c_birth_year#33, c_birth_country#34, c_login#35, c_email_address#36, c_last_review_date#37] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] (40) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [ctr_customer_sk#14] -Right keys [1]: [c_customer_sk#29] +Left keys [1]: [ctr_customer_sk#12] +Right keys [1]: [c_customer_sk#24] Join condition: None (41) Project [codegen id : 11] -Output [14]: [ctr_total_return#16, c_customer_id#30, c_current_addr_sk#31, c_salutation#32, c_first_name#33, c_last_name#34, c_preferred_cust_flag#35, c_birth_day#36, c_birth_month#37, c_birth_year#38, c_birth_country#39, c_login#40, c_email_address#41, c_last_review_date#42] -Input [16]: [ctr_customer_sk#14, ctr_total_return#16, c_customer_sk#29, c_customer_id#30, c_current_addr_sk#31, c_salutation#32, c_first_name#33, c_last_name#34, c_preferred_cust_flag#35, c_birth_day#36, c_birth_month#37, c_birth_year#38, c_birth_country#39, c_login#40, c_email_address#41, c_last_review_date#42] +Output [14]: [ctr_total_return#14, c_customer_id#25, c_current_addr_sk#26, c_salutation#27, c_first_name#28, c_last_name#29, c_preferred_cust_flag#30, c_birth_day#31, c_birth_month#32, c_birth_year#33, c_birth_country#34, c_login#35, c_email_address#36, c_last_review_date#37] +Input [16]: [ctr_customer_sk#12, ctr_total_return#14, c_customer_sk#24, c_customer_id#25, c_current_addr_sk#26, c_salutation#27, c_first_name#28, c_last_name#29, c_preferred_cust_flag#30, c_birth_day#31, c_birth_month#32, c_birth_year#33, c_birth_country#34, c_login#35, c_email_address#36, c_last_review_date#37] (42) Scan parquet default.customer_address -Output [2]: [ca_address_sk#44, ca_state#45] +Output [2]: [ca_address_sk#38, ca_state#39] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,GA), IsNotNull(ca_address_sk)] ReadSchema: struct (43) ColumnarToRow [codegen id : 10] -Input [2]: [ca_address_sk#44, ca_state#45] +Input [2]: [ca_address_sk#38, ca_state#39] (44) Filter [codegen id : 10] -Input [2]: [ca_address_sk#44, ca_state#45] -Condition : ((isnotnull(ca_state#45) AND (ca_state#45 = GA)) AND isnotnull(ca_address_sk#44)) +Input [2]: [ca_address_sk#38, ca_state#39] +Condition : ((isnotnull(ca_state#39) AND (ca_state#39 = GA)) AND isnotnull(ca_address_sk#38)) (45) Project [codegen id : 10] -Output [1]: [ca_address_sk#44] -Input [2]: [ca_address_sk#44, ca_state#45] +Output [1]: [ca_address_sk#38] +Input [2]: [ca_address_sk#38, ca_state#39] (46) BroadcastExchange -Input [1]: [ca_address_sk#44] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#46] +Input [1]: [ca_address_sk#38] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] (47) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [c_current_addr_sk#31] -Right keys [1]: [ca_address_sk#44] +Left keys [1]: [c_current_addr_sk#26] +Right keys [1]: [ca_address_sk#38] Join condition: None (48) Project [codegen id : 11] -Output [13]: [c_customer_id#30, c_salutation#32, c_first_name#33, c_last_name#34, c_preferred_cust_flag#35, c_birth_day#36, c_birth_month#37, c_birth_year#38, c_birth_country#39, c_login#40, c_email_address#41, c_last_review_date#42, ctr_total_return#16] -Input [15]: [ctr_total_return#16, c_customer_id#30, c_current_addr_sk#31, c_salutation#32, c_first_name#33, c_last_name#34, c_preferred_cust_flag#35, c_birth_day#36, c_birth_month#37, c_birth_year#38, c_birth_country#39, c_login#40, c_email_address#41, c_last_review_date#42, ca_address_sk#44] +Output [13]: [c_customer_id#25, c_salutation#27, c_first_name#28, c_last_name#29, c_preferred_cust_flag#30, c_birth_day#31, c_birth_month#32, c_birth_year#33, c_birth_country#34, c_login#35, c_email_address#36, c_last_review_date#37, ctr_total_return#14] +Input [15]: [ctr_total_return#14, c_customer_id#25, c_current_addr_sk#26, c_salutation#27, c_first_name#28, c_last_name#29, c_preferred_cust_flag#30, c_birth_day#31, c_birth_month#32, c_birth_year#33, c_birth_country#34, c_login#35, c_email_address#36, c_last_review_date#37, ca_address_sk#38] (49) TakeOrderedAndProject -Input [13]: [c_customer_id#30, c_salutation#32, c_first_name#33, c_last_name#34, c_preferred_cust_flag#35, c_birth_day#36, c_birth_month#37, c_birth_year#38, c_birth_country#39, c_login#40, c_email_address#41, c_last_review_date#42, ctr_total_return#16] -Arguments: 100, [c_customer_id#30 ASC NULLS FIRST, c_salutation#32 ASC NULLS FIRST, c_first_name#33 ASC NULLS FIRST, c_last_name#34 ASC NULLS FIRST, c_preferred_cust_flag#35 ASC NULLS FIRST, c_birth_day#36 ASC NULLS FIRST, c_birth_month#37 ASC NULLS FIRST, c_birth_year#38 ASC NULLS FIRST, c_birth_country#39 ASC NULLS FIRST, c_login#40 ASC NULLS FIRST, c_email_address#41 ASC NULLS FIRST, c_last_review_date#42 ASC NULLS FIRST, ctr_total_return#16 ASC NULLS FIRST], [c_customer_id#30, c_salutation#32, c_first_name#33, c_last_name#34, c_preferred_cust_flag#35, c_birth_day#36, c_birth_month#37, c_birth_year#38, c_birth_country#39, c_login#40, c_email_address#41, c_last_review_date#42, ctr_total_return#16] +Input [13]: [c_customer_id#25, c_salutation#27, c_first_name#28, c_last_name#29, c_preferred_cust_flag#30, c_birth_day#31, c_birth_month#32, c_birth_year#33, c_birth_country#34, c_login#35, c_email_address#36, c_last_review_date#37, ctr_total_return#14] +Arguments: 100, [c_customer_id#25 ASC NULLS FIRST, c_salutation#27 ASC NULLS FIRST, c_first_name#28 ASC NULLS FIRST, c_last_name#29 ASC NULLS FIRST, c_preferred_cust_flag#30 ASC NULLS FIRST, c_birth_day#31 ASC NULLS FIRST, c_birth_month#32 ASC NULLS FIRST, c_birth_year#33 ASC NULLS FIRST, c_birth_country#34 ASC NULLS FIRST, c_login#35 ASC NULLS FIRST, c_email_address#36 ASC NULLS FIRST, c_last_review_date#37 ASC NULLS FIRST, ctr_total_return#14 ASC NULLS FIRST], [c_customer_id#25, c_salutation#27, c_first_name#28, c_last_name#29, c_preferred_cust_flag#30, c_birth_day#31, c_birth_month#32, c_birth_year#33, c_birth_country#34, c_login#35, c_email_address#36, c_last_review_date#37, ctr_total_return#14] ===== Subqueries ===== @@ -291,26 +291,26 @@ BroadcastExchange (54) (50) Scan parquet default.date_dim -Output [2]: [d_date_sk#6, d_year#47] +Output [2]: [d_date_sk#6, d_year#40] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#6, d_year#47] +Input [2]: [d_date_sk#6, d_year#40] (52) Filter [codegen id : 1] -Input [2]: [d_date_sk#6, d_year#47] -Condition : ((isnotnull(d_year#47) AND (d_year#47 = 2002)) AND isnotnull(d_date_sk#6)) +Input [2]: [d_date_sk#6, d_year#40] +Condition : ((isnotnull(d_year#40) AND (d_year#40 = 2002)) AND isnotnull(d_date_sk#6)) (53) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [2]: [d_date_sk#6, d_year#47] +Input [2]: [d_date_sk#6, d_year#40] (54) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#48] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] Subquery:2 Hosting operator id = 17 Hosting Expression = wr_returned_date_sk#4 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q31.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q31.sf100/explain.txt index c1bff1a691dc7..b7d0702c9e9a7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q31.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q31.sf100/explain.txt @@ -140,478 +140,478 @@ Input [6]: [ss_addr_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, d_date_sk#5, (7) Exchange Input [4]: [ss_addr_sk#1, ss_ext_sales_price#2, d_year#6, d_qoy#7] -Arguments: hashpartitioning(ss_addr_sk#1, 5), ENSURE_REQUIREMENTS, [id=#8] +Arguments: hashpartitioning(ss_addr_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (8) Sort [codegen id : 3] Input [4]: [ss_addr_sk#1, ss_ext_sales_price#2, d_year#6, d_qoy#7] Arguments: [ss_addr_sk#1 ASC NULLS FIRST], false, 0 (9) Scan parquet default.customer_address -Output [2]: [ca_address_sk#9, ca_county#10] +Output [2]: [ca_address_sk#8, ca_county#9] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_county)] ReadSchema: struct (10) ColumnarToRow [codegen id : 4] -Input [2]: [ca_address_sk#9, ca_county#10] +Input [2]: [ca_address_sk#8, ca_county#9] (11) Filter [codegen id : 4] -Input [2]: [ca_address_sk#9, ca_county#10] -Condition : (isnotnull(ca_address_sk#9) AND isnotnull(ca_county#10)) +Input [2]: [ca_address_sk#8, ca_county#9] +Condition : (isnotnull(ca_address_sk#8) AND isnotnull(ca_county#9)) (12) Exchange -Input [2]: [ca_address_sk#9, ca_county#10] -Arguments: hashpartitioning(ca_address_sk#9, 5), ENSURE_REQUIREMENTS, [id=#11] +Input [2]: [ca_address_sk#8, ca_county#9] +Arguments: hashpartitioning(ca_address_sk#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (13) Sort [codegen id : 5] -Input [2]: [ca_address_sk#9, ca_county#10] -Arguments: [ca_address_sk#9 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#8, ca_county#9] +Arguments: [ca_address_sk#8 ASC NULLS FIRST], false, 0 (14) SortMergeJoin [codegen id : 6] Left keys [1]: [ss_addr_sk#1] -Right keys [1]: [ca_address_sk#9] +Right keys [1]: [ca_address_sk#8] Join condition: None (15) Project [codegen id : 6] -Output [4]: [ss_ext_sales_price#2, d_year#6, d_qoy#7, ca_county#10] -Input [6]: [ss_addr_sk#1, ss_ext_sales_price#2, d_year#6, d_qoy#7, ca_address_sk#9, ca_county#10] +Output [4]: [ss_ext_sales_price#2, d_year#6, d_qoy#7, ca_county#9] +Input [6]: [ss_addr_sk#1, ss_ext_sales_price#2, d_year#6, d_qoy#7, ca_address_sk#8, ca_county#9] (16) HashAggregate [codegen id : 6] -Input [4]: [ss_ext_sales_price#2, d_year#6, d_qoy#7, ca_county#10] -Keys [3]: [ca_county#10, d_qoy#7, d_year#6] +Input [4]: [ss_ext_sales_price#2, d_year#6, d_qoy#7, ca_county#9] +Keys [3]: [ca_county#9, d_qoy#7, d_year#6] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#12] -Results [4]: [ca_county#10, d_qoy#7, d_year#6, sum#13] +Aggregate Attributes [1]: [sum#10] +Results [4]: [ca_county#9, d_qoy#7, d_year#6, sum#11] (17) Exchange -Input [4]: [ca_county#10, d_qoy#7, d_year#6, sum#13] -Arguments: hashpartitioning(ca_county#10, d_qoy#7, d_year#6, 5), ENSURE_REQUIREMENTS, [id=#14] +Input [4]: [ca_county#9, d_qoy#7, d_year#6, sum#11] +Arguments: hashpartitioning(ca_county#9, d_qoy#7, d_year#6, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 42] -Input [4]: [ca_county#10, d_qoy#7, d_year#6, sum#13] -Keys [3]: [ca_county#10, d_qoy#7, d_year#6] +Input [4]: [ca_county#9, d_qoy#7, d_year#6, sum#11] +Keys [3]: [ca_county#9, d_qoy#7, d_year#6] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#15] -Results [2]: [ca_county#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#15,17,2) AS store_sales#16] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#12] +Results [2]: [ca_county#9, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#12,17,2) AS store_sales#13] (19) Scan parquet default.store_sales -Output [3]: [ss_addr_sk#17, ss_ext_sales_price#18, ss_sold_date_sk#19] +Output [3]: [ss_addr_sk#14, ss_ext_sales_price#15, ss_sold_date_sk#16] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#19), dynamicpruningexpression(ss_sold_date_sk#19 IN dynamicpruning#20)] +PartitionFilters: [isnotnull(ss_sold_date_sk#16), dynamicpruningexpression(ss_sold_date_sk#16 IN dynamicpruning#17)] PushedFilters: [IsNotNull(ss_addr_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 8] -Input [3]: [ss_addr_sk#17, ss_ext_sales_price#18, ss_sold_date_sk#19] +Input [3]: [ss_addr_sk#14, ss_ext_sales_price#15, ss_sold_date_sk#16] (21) Filter [codegen id : 8] -Input [3]: [ss_addr_sk#17, ss_ext_sales_price#18, ss_sold_date_sk#19] -Condition : isnotnull(ss_addr_sk#17) +Input [3]: [ss_addr_sk#14, ss_ext_sales_price#15, ss_sold_date_sk#16] +Condition : isnotnull(ss_addr_sk#14) (22) ReusedExchange [Reuses operator id: 118] -Output [3]: [d_date_sk#21, d_year#22, d_qoy#23] +Output [3]: [d_date_sk#18, d_year#19, d_qoy#20] (23) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ss_sold_date_sk#19] -Right keys [1]: [d_date_sk#21] +Left keys [1]: [ss_sold_date_sk#16] +Right keys [1]: [d_date_sk#18] Join condition: None (24) Project [codegen id : 8] -Output [4]: [ss_addr_sk#17, ss_ext_sales_price#18, d_year#22, d_qoy#23] -Input [6]: [ss_addr_sk#17, ss_ext_sales_price#18, ss_sold_date_sk#19, d_date_sk#21, d_year#22, d_qoy#23] +Output [4]: [ss_addr_sk#14, ss_ext_sales_price#15, d_year#19, d_qoy#20] +Input [6]: [ss_addr_sk#14, ss_ext_sales_price#15, ss_sold_date_sk#16, d_date_sk#18, d_year#19, d_qoy#20] (25) Exchange -Input [4]: [ss_addr_sk#17, ss_ext_sales_price#18, d_year#22, d_qoy#23] -Arguments: hashpartitioning(ss_addr_sk#17, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [4]: [ss_addr_sk#14, ss_ext_sales_price#15, d_year#19, d_qoy#20] +Arguments: hashpartitioning(ss_addr_sk#14, 5), ENSURE_REQUIREMENTS, [plan_id=4] (26) Sort [codegen id : 9] -Input [4]: [ss_addr_sk#17, ss_ext_sales_price#18, d_year#22, d_qoy#23] -Arguments: [ss_addr_sk#17 ASC NULLS FIRST], false, 0 +Input [4]: [ss_addr_sk#14, ss_ext_sales_price#15, d_year#19, d_qoy#20] +Arguments: [ss_addr_sk#14 ASC NULLS FIRST], false, 0 (27) ReusedExchange [Reuses operator id: 12] -Output [2]: [ca_address_sk#25, ca_county#26] +Output [2]: [ca_address_sk#21, ca_county#22] (28) Sort [codegen id : 11] -Input [2]: [ca_address_sk#25, ca_county#26] -Arguments: [ca_address_sk#25 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#21, ca_county#22] +Arguments: [ca_address_sk#21 ASC NULLS FIRST], false, 0 (29) SortMergeJoin [codegen id : 12] -Left keys [1]: [ss_addr_sk#17] -Right keys [1]: [ca_address_sk#25] +Left keys [1]: [ss_addr_sk#14] +Right keys [1]: [ca_address_sk#21] Join condition: None (30) Project [codegen id : 12] -Output [4]: [ss_ext_sales_price#18, d_year#22, d_qoy#23, ca_county#26] -Input [6]: [ss_addr_sk#17, ss_ext_sales_price#18, d_year#22, d_qoy#23, ca_address_sk#25, ca_county#26] +Output [4]: [ss_ext_sales_price#15, d_year#19, d_qoy#20, ca_county#22] +Input [6]: [ss_addr_sk#14, ss_ext_sales_price#15, d_year#19, d_qoy#20, ca_address_sk#21, ca_county#22] (31) HashAggregate [codegen id : 12] -Input [4]: [ss_ext_sales_price#18, d_year#22, d_qoy#23, ca_county#26] -Keys [3]: [ca_county#26, d_qoy#23, d_year#22] -Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#18))] -Aggregate Attributes [1]: [sum#27] -Results [4]: [ca_county#26, d_qoy#23, d_year#22, sum#28] +Input [4]: [ss_ext_sales_price#15, d_year#19, d_qoy#20, ca_county#22] +Keys [3]: [ca_county#22, d_qoy#20, d_year#19] +Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#15))] +Aggregate Attributes [1]: [sum#23] +Results [4]: [ca_county#22, d_qoy#20, d_year#19, sum#24] (32) Exchange -Input [4]: [ca_county#26, d_qoy#23, d_year#22, sum#28] -Arguments: hashpartitioning(ca_county#26, d_qoy#23, d_year#22, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [4]: [ca_county#22, d_qoy#20, d_year#19, sum#24] +Arguments: hashpartitioning(ca_county#22, d_qoy#20, d_year#19, 5), ENSURE_REQUIREMENTS, [plan_id=5] (33) HashAggregate [codegen id : 13] -Input [4]: [ca_county#26, d_qoy#23, d_year#22, sum#28] -Keys [3]: [ca_county#26, d_qoy#23, d_year#22] -Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#18))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#18))#15] -Results [2]: [ca_county#26, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#18))#15,17,2) AS store_sales#30] +Input [4]: [ca_county#22, d_qoy#20, d_year#19, sum#24] +Keys [3]: [ca_county#22, d_qoy#20, d_year#19] +Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#15))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#15))#12] +Results [2]: [ca_county#22, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#15))#12,17,2) AS store_sales#25] (34) BroadcastExchange -Input [2]: [ca_county#26, store_sales#30] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#31] +Input [2]: [ca_county#22, store_sales#25] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=6] (35) BroadcastHashJoin [codegen id : 42] -Left keys [1]: [ca_county#10] -Right keys [1]: [ca_county#26] +Left keys [1]: [ca_county#9] +Right keys [1]: [ca_county#22] Join condition: None (36) Project [codegen id : 42] -Output [3]: [ca_county#10, store_sales#16, store_sales#30] -Input [4]: [ca_county#10, store_sales#16, ca_county#26, store_sales#30] +Output [3]: [ca_county#9, store_sales#13, store_sales#25] +Input [4]: [ca_county#9, store_sales#13, ca_county#22, store_sales#25] (37) Scan parquet default.store_sales -Output [3]: [ss_addr_sk#32, ss_ext_sales_price#33, ss_sold_date_sk#34] +Output [3]: [ss_addr_sk#26, ss_ext_sales_price#27, ss_sold_date_sk#28] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#34), dynamicpruningexpression(ss_sold_date_sk#34 IN dynamicpruning#35)] +PartitionFilters: [isnotnull(ss_sold_date_sk#28), dynamicpruningexpression(ss_sold_date_sk#28 IN dynamicpruning#29)] PushedFilters: [IsNotNull(ss_addr_sk)] ReadSchema: struct (38) ColumnarToRow [codegen id : 15] -Input [3]: [ss_addr_sk#32, ss_ext_sales_price#33, ss_sold_date_sk#34] +Input [3]: [ss_addr_sk#26, ss_ext_sales_price#27, ss_sold_date_sk#28] (39) Filter [codegen id : 15] -Input [3]: [ss_addr_sk#32, ss_ext_sales_price#33, ss_sold_date_sk#34] -Condition : isnotnull(ss_addr_sk#32) +Input [3]: [ss_addr_sk#26, ss_ext_sales_price#27, ss_sold_date_sk#28] +Condition : isnotnull(ss_addr_sk#26) (40) ReusedExchange [Reuses operator id: 122] -Output [3]: [d_date_sk#36, d_year#37, d_qoy#38] +Output [3]: [d_date_sk#30, d_year#31, d_qoy#32] (41) BroadcastHashJoin [codegen id : 15] -Left keys [1]: [ss_sold_date_sk#34] -Right keys [1]: [d_date_sk#36] +Left keys [1]: [ss_sold_date_sk#28] +Right keys [1]: [d_date_sk#30] Join condition: None (42) Project [codegen id : 15] -Output [4]: [ss_addr_sk#32, ss_ext_sales_price#33, d_year#37, d_qoy#38] -Input [6]: [ss_addr_sk#32, ss_ext_sales_price#33, ss_sold_date_sk#34, d_date_sk#36, d_year#37, d_qoy#38] +Output [4]: [ss_addr_sk#26, ss_ext_sales_price#27, d_year#31, d_qoy#32] +Input [6]: [ss_addr_sk#26, ss_ext_sales_price#27, ss_sold_date_sk#28, d_date_sk#30, d_year#31, d_qoy#32] (43) Exchange -Input [4]: [ss_addr_sk#32, ss_ext_sales_price#33, d_year#37, d_qoy#38] -Arguments: hashpartitioning(ss_addr_sk#32, 5), ENSURE_REQUIREMENTS, [id=#39] +Input [4]: [ss_addr_sk#26, ss_ext_sales_price#27, d_year#31, d_qoy#32] +Arguments: hashpartitioning(ss_addr_sk#26, 5), ENSURE_REQUIREMENTS, [plan_id=7] (44) Sort [codegen id : 16] -Input [4]: [ss_addr_sk#32, ss_ext_sales_price#33, d_year#37, d_qoy#38] -Arguments: [ss_addr_sk#32 ASC NULLS FIRST], false, 0 +Input [4]: [ss_addr_sk#26, ss_ext_sales_price#27, d_year#31, d_qoy#32] +Arguments: [ss_addr_sk#26 ASC NULLS FIRST], false, 0 (45) ReusedExchange [Reuses operator id: 12] -Output [2]: [ca_address_sk#40, ca_county#41] +Output [2]: [ca_address_sk#33, ca_county#34] (46) Sort [codegen id : 18] -Input [2]: [ca_address_sk#40, ca_county#41] -Arguments: [ca_address_sk#40 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#33, ca_county#34] +Arguments: [ca_address_sk#33 ASC NULLS FIRST], false, 0 (47) SortMergeJoin [codegen id : 19] -Left keys [1]: [ss_addr_sk#32] -Right keys [1]: [ca_address_sk#40] +Left keys [1]: [ss_addr_sk#26] +Right keys [1]: [ca_address_sk#33] Join condition: None (48) Project [codegen id : 19] -Output [4]: [ss_ext_sales_price#33, d_year#37, d_qoy#38, ca_county#41] -Input [6]: [ss_addr_sk#32, ss_ext_sales_price#33, d_year#37, d_qoy#38, ca_address_sk#40, ca_county#41] +Output [4]: [ss_ext_sales_price#27, d_year#31, d_qoy#32, ca_county#34] +Input [6]: [ss_addr_sk#26, ss_ext_sales_price#27, d_year#31, d_qoy#32, ca_address_sk#33, ca_county#34] (49) HashAggregate [codegen id : 19] -Input [4]: [ss_ext_sales_price#33, d_year#37, d_qoy#38, ca_county#41] -Keys [3]: [ca_county#41, d_qoy#38, d_year#37] -Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#33))] -Aggregate Attributes [1]: [sum#42] -Results [4]: [ca_county#41, d_qoy#38, d_year#37, sum#43] +Input [4]: [ss_ext_sales_price#27, d_year#31, d_qoy#32, ca_county#34] +Keys [3]: [ca_county#34, d_qoy#32, d_year#31] +Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#27))] +Aggregate Attributes [1]: [sum#35] +Results [4]: [ca_county#34, d_qoy#32, d_year#31, sum#36] (50) Exchange -Input [4]: [ca_county#41, d_qoy#38, d_year#37, sum#43] -Arguments: hashpartitioning(ca_county#41, d_qoy#38, d_year#37, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [4]: [ca_county#34, d_qoy#32, d_year#31, sum#36] +Arguments: hashpartitioning(ca_county#34, d_qoy#32, d_year#31, 5), ENSURE_REQUIREMENTS, [plan_id=8] (51) HashAggregate [codegen id : 20] -Input [4]: [ca_county#41, d_qoy#38, d_year#37, sum#43] -Keys [3]: [ca_county#41, d_qoy#38, d_year#37] -Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#33))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#33))#15] -Results [3]: [ca_county#41, d_year#37, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#33))#15,17,2) AS store_sales#45] +Input [4]: [ca_county#34, d_qoy#32, d_year#31, sum#36] +Keys [3]: [ca_county#34, d_qoy#32, d_year#31] +Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#27))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#27))#12] +Results [3]: [ca_county#34, d_year#31, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#27))#12,17,2) AS store_sales#37] (52) BroadcastExchange -Input [3]: [ca_county#41, d_year#37, store_sales#45] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#46] +Input [3]: [ca_county#34, d_year#31, store_sales#37] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=9] (53) BroadcastHashJoin [codegen id : 42] -Left keys [1]: [ca_county#10] -Right keys [1]: [ca_county#41] +Left keys [1]: [ca_county#9] +Right keys [1]: [ca_county#34] Join condition: None (54) Project [codegen id : 42] -Output [5]: [store_sales#16, store_sales#30, ca_county#41, d_year#37, store_sales#45] -Input [6]: [ca_county#10, store_sales#16, store_sales#30, ca_county#41, d_year#37, store_sales#45] +Output [5]: [store_sales#13, store_sales#25, ca_county#34, d_year#31, store_sales#37] +Input [6]: [ca_county#9, store_sales#13, store_sales#25, ca_county#34, d_year#31, store_sales#37] (55) Scan parquet default.web_sales -Output [3]: [ws_bill_addr_sk#47, ws_ext_sales_price#48, ws_sold_date_sk#49] +Output [3]: [ws_bill_addr_sk#38, ws_ext_sales_price#39, ws_sold_date_sk#40] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#49), dynamicpruningexpression(ws_sold_date_sk#49 IN dynamicpruning#35)] +PartitionFilters: [isnotnull(ws_sold_date_sk#40), dynamicpruningexpression(ws_sold_date_sk#40 IN dynamicpruning#29)] PushedFilters: [IsNotNull(ws_bill_addr_sk)] ReadSchema: struct (56) ColumnarToRow [codegen id : 22] -Input [3]: [ws_bill_addr_sk#47, ws_ext_sales_price#48, ws_sold_date_sk#49] +Input [3]: [ws_bill_addr_sk#38, ws_ext_sales_price#39, ws_sold_date_sk#40] (57) Filter [codegen id : 22] -Input [3]: [ws_bill_addr_sk#47, ws_ext_sales_price#48, ws_sold_date_sk#49] -Condition : isnotnull(ws_bill_addr_sk#47) +Input [3]: [ws_bill_addr_sk#38, ws_ext_sales_price#39, ws_sold_date_sk#40] +Condition : isnotnull(ws_bill_addr_sk#38) (58) ReusedExchange [Reuses operator id: 122] -Output [3]: [d_date_sk#50, d_year#51, d_qoy#52] +Output [3]: [d_date_sk#41, d_year#42, d_qoy#43] (59) BroadcastHashJoin [codegen id : 22] -Left keys [1]: [ws_sold_date_sk#49] -Right keys [1]: [d_date_sk#50] +Left keys [1]: [ws_sold_date_sk#40] +Right keys [1]: [d_date_sk#41] Join condition: None (60) Project [codegen id : 22] -Output [4]: [ws_bill_addr_sk#47, ws_ext_sales_price#48, d_year#51, d_qoy#52] -Input [6]: [ws_bill_addr_sk#47, ws_ext_sales_price#48, ws_sold_date_sk#49, d_date_sk#50, d_year#51, d_qoy#52] +Output [4]: [ws_bill_addr_sk#38, ws_ext_sales_price#39, d_year#42, d_qoy#43] +Input [6]: [ws_bill_addr_sk#38, ws_ext_sales_price#39, ws_sold_date_sk#40, d_date_sk#41, d_year#42, d_qoy#43] (61) Exchange -Input [4]: [ws_bill_addr_sk#47, ws_ext_sales_price#48, d_year#51, d_qoy#52] -Arguments: hashpartitioning(ws_bill_addr_sk#47, 5), ENSURE_REQUIREMENTS, [id=#53] +Input [4]: [ws_bill_addr_sk#38, ws_ext_sales_price#39, d_year#42, d_qoy#43] +Arguments: hashpartitioning(ws_bill_addr_sk#38, 5), ENSURE_REQUIREMENTS, [plan_id=10] (62) Sort [codegen id : 23] -Input [4]: [ws_bill_addr_sk#47, ws_ext_sales_price#48, d_year#51, d_qoy#52] -Arguments: [ws_bill_addr_sk#47 ASC NULLS FIRST], false, 0 +Input [4]: [ws_bill_addr_sk#38, ws_ext_sales_price#39, d_year#42, d_qoy#43] +Arguments: [ws_bill_addr_sk#38 ASC NULLS FIRST], false, 0 (63) ReusedExchange [Reuses operator id: 12] -Output [2]: [ca_address_sk#54, ca_county#55] +Output [2]: [ca_address_sk#44, ca_county#45] (64) Sort [codegen id : 25] -Input [2]: [ca_address_sk#54, ca_county#55] -Arguments: [ca_address_sk#54 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#44, ca_county#45] +Arguments: [ca_address_sk#44 ASC NULLS FIRST], false, 0 (65) SortMergeJoin [codegen id : 26] -Left keys [1]: [ws_bill_addr_sk#47] -Right keys [1]: [ca_address_sk#54] +Left keys [1]: [ws_bill_addr_sk#38] +Right keys [1]: [ca_address_sk#44] Join condition: None (66) Project [codegen id : 26] -Output [4]: [ws_ext_sales_price#48, d_year#51, d_qoy#52, ca_county#55] -Input [6]: [ws_bill_addr_sk#47, ws_ext_sales_price#48, d_year#51, d_qoy#52, ca_address_sk#54, ca_county#55] +Output [4]: [ws_ext_sales_price#39, d_year#42, d_qoy#43, ca_county#45] +Input [6]: [ws_bill_addr_sk#38, ws_ext_sales_price#39, d_year#42, d_qoy#43, ca_address_sk#44, ca_county#45] (67) HashAggregate [codegen id : 26] -Input [4]: [ws_ext_sales_price#48, d_year#51, d_qoy#52, ca_county#55] -Keys [3]: [ca_county#55, d_qoy#52, d_year#51] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#48))] -Aggregate Attributes [1]: [sum#56] -Results [4]: [ca_county#55, d_qoy#52, d_year#51, sum#57] +Input [4]: [ws_ext_sales_price#39, d_year#42, d_qoy#43, ca_county#45] +Keys [3]: [ca_county#45, d_qoy#43, d_year#42] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#39))] +Aggregate Attributes [1]: [sum#46] +Results [4]: [ca_county#45, d_qoy#43, d_year#42, sum#47] (68) Exchange -Input [4]: [ca_county#55, d_qoy#52, d_year#51, sum#57] -Arguments: hashpartitioning(ca_county#55, d_qoy#52, d_year#51, 5), ENSURE_REQUIREMENTS, [id=#58] +Input [4]: [ca_county#45, d_qoy#43, d_year#42, sum#47] +Arguments: hashpartitioning(ca_county#45, d_qoy#43, d_year#42, 5), ENSURE_REQUIREMENTS, [plan_id=11] (69) HashAggregate [codegen id : 41] -Input [4]: [ca_county#55, d_qoy#52, d_year#51, sum#57] -Keys [3]: [ca_county#55, d_qoy#52, d_year#51] -Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#48))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#48))#59] -Results [2]: [ca_county#55, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#48))#59,17,2) AS web_sales#60] +Input [4]: [ca_county#45, d_qoy#43, d_year#42, sum#47] +Keys [3]: [ca_county#45, d_qoy#43, d_year#42] +Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#39))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#39))#48] +Results [2]: [ca_county#45, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#39))#48,17,2) AS web_sales#49] (70) Scan parquet default.web_sales -Output [3]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, ws_sold_date_sk#63] +Output [3]: [ws_bill_addr_sk#50, ws_ext_sales_price#51, ws_sold_date_sk#52] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#63), dynamicpruningexpression(ws_sold_date_sk#63 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(ws_sold_date_sk#52), dynamicpruningexpression(ws_sold_date_sk#52 IN dynamicpruning#4)] PushedFilters: [IsNotNull(ws_bill_addr_sk)] ReadSchema: struct (71) ColumnarToRow [codegen id : 28] -Input [3]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, ws_sold_date_sk#63] +Input [3]: [ws_bill_addr_sk#50, ws_ext_sales_price#51, ws_sold_date_sk#52] (72) Filter [codegen id : 28] -Input [3]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, ws_sold_date_sk#63] -Condition : isnotnull(ws_bill_addr_sk#61) +Input [3]: [ws_bill_addr_sk#50, ws_ext_sales_price#51, ws_sold_date_sk#52] +Condition : isnotnull(ws_bill_addr_sk#50) (73) ReusedExchange [Reuses operator id: 114] -Output [3]: [d_date_sk#64, d_year#65, d_qoy#66] +Output [3]: [d_date_sk#53, d_year#54, d_qoy#55] (74) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [ws_sold_date_sk#63] -Right keys [1]: [d_date_sk#64] +Left keys [1]: [ws_sold_date_sk#52] +Right keys [1]: [d_date_sk#53] Join condition: None (75) Project [codegen id : 28] -Output [4]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, d_year#65, d_qoy#66] -Input [6]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, ws_sold_date_sk#63, d_date_sk#64, d_year#65, d_qoy#66] +Output [4]: [ws_bill_addr_sk#50, ws_ext_sales_price#51, d_year#54, d_qoy#55] +Input [6]: [ws_bill_addr_sk#50, ws_ext_sales_price#51, ws_sold_date_sk#52, d_date_sk#53, d_year#54, d_qoy#55] (76) Exchange -Input [4]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, d_year#65, d_qoy#66] -Arguments: hashpartitioning(ws_bill_addr_sk#61, 5), ENSURE_REQUIREMENTS, [id=#67] +Input [4]: [ws_bill_addr_sk#50, ws_ext_sales_price#51, d_year#54, d_qoy#55] +Arguments: hashpartitioning(ws_bill_addr_sk#50, 5), ENSURE_REQUIREMENTS, [plan_id=12] (77) Sort [codegen id : 29] -Input [4]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, d_year#65, d_qoy#66] -Arguments: [ws_bill_addr_sk#61 ASC NULLS FIRST], false, 0 +Input [4]: [ws_bill_addr_sk#50, ws_ext_sales_price#51, d_year#54, d_qoy#55] +Arguments: [ws_bill_addr_sk#50 ASC NULLS FIRST], false, 0 (78) ReusedExchange [Reuses operator id: 12] -Output [2]: [ca_address_sk#68, ca_county#69] +Output [2]: [ca_address_sk#56, ca_county#57] (79) Sort [codegen id : 31] -Input [2]: [ca_address_sk#68, ca_county#69] -Arguments: [ca_address_sk#68 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#56, ca_county#57] +Arguments: [ca_address_sk#56 ASC NULLS FIRST], false, 0 (80) SortMergeJoin [codegen id : 32] -Left keys [1]: [ws_bill_addr_sk#61] -Right keys [1]: [ca_address_sk#68] +Left keys [1]: [ws_bill_addr_sk#50] +Right keys [1]: [ca_address_sk#56] Join condition: None (81) Project [codegen id : 32] -Output [4]: [ws_ext_sales_price#62, d_year#65, d_qoy#66, ca_county#69] -Input [6]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, d_year#65, d_qoy#66, ca_address_sk#68, ca_county#69] +Output [4]: [ws_ext_sales_price#51, d_year#54, d_qoy#55, ca_county#57] +Input [6]: [ws_bill_addr_sk#50, ws_ext_sales_price#51, d_year#54, d_qoy#55, ca_address_sk#56, ca_county#57] (82) HashAggregate [codegen id : 32] -Input [4]: [ws_ext_sales_price#62, d_year#65, d_qoy#66, ca_county#69] -Keys [3]: [ca_county#69, d_qoy#66, d_year#65] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#62))] -Aggregate Attributes [1]: [sum#70] -Results [4]: [ca_county#69, d_qoy#66, d_year#65, sum#71] +Input [4]: [ws_ext_sales_price#51, d_year#54, d_qoy#55, ca_county#57] +Keys [3]: [ca_county#57, d_qoy#55, d_year#54] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#51))] +Aggregate Attributes [1]: [sum#58] +Results [4]: [ca_county#57, d_qoy#55, d_year#54, sum#59] (83) Exchange -Input [4]: [ca_county#69, d_qoy#66, d_year#65, sum#71] -Arguments: hashpartitioning(ca_county#69, d_qoy#66, d_year#65, 5), ENSURE_REQUIREMENTS, [id=#72] +Input [4]: [ca_county#57, d_qoy#55, d_year#54, sum#59] +Arguments: hashpartitioning(ca_county#57, d_qoy#55, d_year#54, 5), ENSURE_REQUIREMENTS, [plan_id=13] (84) HashAggregate [codegen id : 33] -Input [4]: [ca_county#69, d_qoy#66, d_year#65, sum#71] -Keys [3]: [ca_county#69, d_qoy#66, d_year#65] -Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#62))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#62))#59] -Results [2]: [ca_county#69, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#62))#59,17,2) AS web_sales#73] +Input [4]: [ca_county#57, d_qoy#55, d_year#54, sum#59] +Keys [3]: [ca_county#57, d_qoy#55, d_year#54] +Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#51))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#51))#48] +Results [2]: [ca_county#57, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#51))#48,17,2) AS web_sales#60] (85) BroadcastExchange -Input [2]: [ca_county#69, web_sales#73] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#74] +Input [2]: [ca_county#57, web_sales#60] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=14] (86) BroadcastHashJoin [codegen id : 41] -Left keys [1]: [ca_county#55] -Right keys [1]: [ca_county#69] +Left keys [1]: [ca_county#45] +Right keys [1]: [ca_county#57] Join condition: None (87) Project [codegen id : 41] -Output [3]: [ca_county#55, web_sales#60, web_sales#73] -Input [4]: [ca_county#55, web_sales#60, ca_county#69, web_sales#73] +Output [3]: [ca_county#45, web_sales#49, web_sales#60] +Input [4]: [ca_county#45, web_sales#49, ca_county#57, web_sales#60] (88) Scan parquet default.web_sales -Output [3]: [ws_bill_addr_sk#75, ws_ext_sales_price#76, ws_sold_date_sk#77] +Output [3]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, ws_sold_date_sk#63] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#77), dynamicpruningexpression(ws_sold_date_sk#77 IN dynamicpruning#20)] +PartitionFilters: [isnotnull(ws_sold_date_sk#63), dynamicpruningexpression(ws_sold_date_sk#63 IN dynamicpruning#17)] PushedFilters: [IsNotNull(ws_bill_addr_sk)] ReadSchema: struct (89) ColumnarToRow [codegen id : 35] -Input [3]: [ws_bill_addr_sk#75, ws_ext_sales_price#76, ws_sold_date_sk#77] +Input [3]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, ws_sold_date_sk#63] (90) Filter [codegen id : 35] -Input [3]: [ws_bill_addr_sk#75, ws_ext_sales_price#76, ws_sold_date_sk#77] -Condition : isnotnull(ws_bill_addr_sk#75) +Input [3]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, ws_sold_date_sk#63] +Condition : isnotnull(ws_bill_addr_sk#61) (91) ReusedExchange [Reuses operator id: 118] -Output [3]: [d_date_sk#78, d_year#79, d_qoy#80] +Output [3]: [d_date_sk#64, d_year#65, d_qoy#66] (92) BroadcastHashJoin [codegen id : 35] -Left keys [1]: [ws_sold_date_sk#77] -Right keys [1]: [d_date_sk#78] +Left keys [1]: [ws_sold_date_sk#63] +Right keys [1]: [d_date_sk#64] Join condition: None (93) Project [codegen id : 35] -Output [4]: [ws_bill_addr_sk#75, ws_ext_sales_price#76, d_year#79, d_qoy#80] -Input [6]: [ws_bill_addr_sk#75, ws_ext_sales_price#76, ws_sold_date_sk#77, d_date_sk#78, d_year#79, d_qoy#80] +Output [4]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, d_year#65, d_qoy#66] +Input [6]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, ws_sold_date_sk#63, d_date_sk#64, d_year#65, d_qoy#66] (94) Exchange -Input [4]: [ws_bill_addr_sk#75, ws_ext_sales_price#76, d_year#79, d_qoy#80] -Arguments: hashpartitioning(ws_bill_addr_sk#75, 5), ENSURE_REQUIREMENTS, [id=#81] +Input [4]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, d_year#65, d_qoy#66] +Arguments: hashpartitioning(ws_bill_addr_sk#61, 5), ENSURE_REQUIREMENTS, [plan_id=15] (95) Sort [codegen id : 36] -Input [4]: [ws_bill_addr_sk#75, ws_ext_sales_price#76, d_year#79, d_qoy#80] -Arguments: [ws_bill_addr_sk#75 ASC NULLS FIRST], false, 0 +Input [4]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, d_year#65, d_qoy#66] +Arguments: [ws_bill_addr_sk#61 ASC NULLS FIRST], false, 0 (96) ReusedExchange [Reuses operator id: 12] -Output [2]: [ca_address_sk#82, ca_county#83] +Output [2]: [ca_address_sk#67, ca_county#68] (97) Sort [codegen id : 38] -Input [2]: [ca_address_sk#82, ca_county#83] -Arguments: [ca_address_sk#82 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#67, ca_county#68] +Arguments: [ca_address_sk#67 ASC NULLS FIRST], false, 0 (98) SortMergeJoin [codegen id : 39] -Left keys [1]: [ws_bill_addr_sk#75] -Right keys [1]: [ca_address_sk#82] +Left keys [1]: [ws_bill_addr_sk#61] +Right keys [1]: [ca_address_sk#67] Join condition: None (99) Project [codegen id : 39] -Output [4]: [ws_ext_sales_price#76, d_year#79, d_qoy#80, ca_county#83] -Input [6]: [ws_bill_addr_sk#75, ws_ext_sales_price#76, d_year#79, d_qoy#80, ca_address_sk#82, ca_county#83] +Output [4]: [ws_ext_sales_price#62, d_year#65, d_qoy#66, ca_county#68] +Input [6]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, d_year#65, d_qoy#66, ca_address_sk#67, ca_county#68] (100) HashAggregate [codegen id : 39] -Input [4]: [ws_ext_sales_price#76, d_year#79, d_qoy#80, ca_county#83] -Keys [3]: [ca_county#83, d_qoy#80, d_year#79] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#76))] -Aggregate Attributes [1]: [sum#84] -Results [4]: [ca_county#83, d_qoy#80, d_year#79, sum#85] +Input [4]: [ws_ext_sales_price#62, d_year#65, d_qoy#66, ca_county#68] +Keys [3]: [ca_county#68, d_qoy#66, d_year#65] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#62))] +Aggregate Attributes [1]: [sum#69] +Results [4]: [ca_county#68, d_qoy#66, d_year#65, sum#70] (101) Exchange -Input [4]: [ca_county#83, d_qoy#80, d_year#79, sum#85] -Arguments: hashpartitioning(ca_county#83, d_qoy#80, d_year#79, 5), ENSURE_REQUIREMENTS, [id=#86] +Input [4]: [ca_county#68, d_qoy#66, d_year#65, sum#70] +Arguments: hashpartitioning(ca_county#68, d_qoy#66, d_year#65, 5), ENSURE_REQUIREMENTS, [plan_id=16] (102) HashAggregate [codegen id : 40] -Input [4]: [ca_county#83, d_qoy#80, d_year#79, sum#85] -Keys [3]: [ca_county#83, d_qoy#80, d_year#79] -Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#76))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#76))#59] -Results [2]: [ca_county#83, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#76))#59,17,2) AS web_sales#87] +Input [4]: [ca_county#68, d_qoy#66, d_year#65, sum#70] +Keys [3]: [ca_county#68, d_qoy#66, d_year#65] +Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#62))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#62))#48] +Results [2]: [ca_county#68, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#62))#48,17,2) AS web_sales#71] (103) BroadcastExchange -Input [2]: [ca_county#83, web_sales#87] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#88] +Input [2]: [ca_county#68, web_sales#71] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=17] (104) BroadcastHashJoin [codegen id : 41] -Left keys [1]: [ca_county#55] -Right keys [1]: [ca_county#83] +Left keys [1]: [ca_county#45] +Right keys [1]: [ca_county#68] Join condition: None (105) Project [codegen id : 41] -Output [4]: [ca_county#55, web_sales#60, web_sales#73, web_sales#87] -Input [5]: [ca_county#55, web_sales#60, web_sales#73, ca_county#83, web_sales#87] +Output [4]: [ca_county#45, web_sales#49, web_sales#60, web_sales#71] +Input [5]: [ca_county#45, web_sales#49, web_sales#60, ca_county#68, web_sales#71] (106) BroadcastExchange -Input [4]: [ca_county#55, web_sales#60, web_sales#73, web_sales#87] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#89] +Input [4]: [ca_county#45, web_sales#49, web_sales#60, web_sales#71] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=18] (107) BroadcastHashJoin [codegen id : 42] -Left keys [1]: [ca_county#41] -Right keys [1]: [ca_county#55] -Join condition: ((CASE WHEN (web_sales#60 > 0.00) THEN CheckOverflow((promote_precision(web_sales#73) / promote_precision(web_sales#60)), DecimalType(37,20)) END > CASE WHEN (store_sales#45 > 0.00) THEN CheckOverflow((promote_precision(store_sales#16) / promote_precision(store_sales#45)), DecimalType(37,20)) END) AND (CASE WHEN (web_sales#73 > 0.00) THEN CheckOverflow((promote_precision(web_sales#87) / promote_precision(web_sales#73)), DecimalType(37,20)) END > CASE WHEN (store_sales#16 > 0.00) THEN CheckOverflow((promote_precision(store_sales#30) / promote_precision(store_sales#16)), DecimalType(37,20)) END)) +Left keys [1]: [ca_county#34] +Right keys [1]: [ca_county#45] +Join condition: ((CASE WHEN (web_sales#49 > 0.00) THEN CheckOverflow((promote_precision(web_sales#60) / promote_precision(web_sales#49)), DecimalType(37,20)) END > CASE WHEN (store_sales#37 > 0.00) THEN CheckOverflow((promote_precision(store_sales#13) / promote_precision(store_sales#37)), DecimalType(37,20)) END) AND (CASE WHEN (web_sales#60 > 0.00) THEN CheckOverflow((promote_precision(web_sales#71) / promote_precision(web_sales#60)), DecimalType(37,20)) END > CASE WHEN (store_sales#13 > 0.00) THEN CheckOverflow((promote_precision(store_sales#25) / promote_precision(store_sales#13)), DecimalType(37,20)) END)) (108) Project [codegen id : 42] -Output [6]: [ca_county#41, d_year#37, CheckOverflow((promote_precision(web_sales#73) / promote_precision(web_sales#60)), DecimalType(37,20)) AS web_q1_q2_increase#90, CheckOverflow((promote_precision(store_sales#16) / promote_precision(store_sales#45)), DecimalType(37,20)) AS store_q1_q2_increase#91, CheckOverflow((promote_precision(web_sales#87) / promote_precision(web_sales#73)), DecimalType(37,20)) AS web_q2_q3_increase#92, CheckOverflow((promote_precision(store_sales#30) / promote_precision(store_sales#16)), DecimalType(37,20)) AS store_q2_q3_increase#93] -Input [9]: [store_sales#16, store_sales#30, ca_county#41, d_year#37, store_sales#45, ca_county#55, web_sales#60, web_sales#73, web_sales#87] +Output [6]: [ca_county#34, d_year#31, CheckOverflow((promote_precision(web_sales#60) / promote_precision(web_sales#49)), DecimalType(37,20)) AS web_q1_q2_increase#72, CheckOverflow((promote_precision(store_sales#13) / promote_precision(store_sales#37)), DecimalType(37,20)) AS store_q1_q2_increase#73, CheckOverflow((promote_precision(web_sales#71) / promote_precision(web_sales#60)), DecimalType(37,20)) AS web_q2_q3_increase#74, CheckOverflow((promote_precision(store_sales#25) / promote_precision(store_sales#13)), DecimalType(37,20)) AS store_q2_q3_increase#75] +Input [9]: [store_sales#13, store_sales#25, ca_county#34, d_year#31, store_sales#37, ca_county#45, web_sales#49, web_sales#60, web_sales#71] (109) Exchange -Input [6]: [ca_county#41, d_year#37, web_q1_q2_increase#90, store_q1_q2_increase#91, web_q2_q3_increase#92, store_q2_q3_increase#93] -Arguments: rangepartitioning(ca_county#41 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#94] +Input [6]: [ca_county#34, d_year#31, web_q1_q2_increase#72, store_q1_q2_increase#73, web_q2_q3_increase#74, store_q2_q3_increase#75] +Arguments: rangepartitioning(ca_county#34 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=19] (110) Sort [codegen id : 43] -Input [6]: [ca_county#41, d_year#37, web_q1_q2_increase#90, store_q1_q2_increase#91, web_q2_q3_increase#92, store_q2_q3_increase#93] -Arguments: [ca_county#41 ASC NULLS FIRST], true, 0 +Input [6]: [ca_county#34, d_year#31, web_q1_q2_increase#72, store_q1_q2_increase#73, web_q2_q3_increase#74, store_q2_q3_increase#75] +Arguments: [ca_county#34 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -638,9 +638,9 @@ Condition : ((((isnotnull(d_qoy#7) AND isnotnull(d_year#6)) AND (d_qoy#7 = 2)) A (114) BroadcastExchange Input [3]: [d_date_sk#5, d_year#6, d_qoy#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#95] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=20] -Subquery:2 Hosting operator id = 19 Hosting Expression = ss_sold_date_sk#19 IN dynamicpruning#20 +Subquery:2 Hosting operator id = 19 Hosting Expression = ss_sold_date_sk#16 IN dynamicpruning#17 BroadcastExchange (118) +- * Filter (117) +- * ColumnarToRow (116) @@ -648,24 +648,24 @@ BroadcastExchange (118) (115) Scan parquet default.date_dim -Output [3]: [d_date_sk#21, d_year#22, d_qoy#23] +Output [3]: [d_date_sk#18, d_year#19, d_qoy#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,3), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (116) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#21, d_year#22, d_qoy#23] +Input [3]: [d_date_sk#18, d_year#19, d_qoy#20] (117) Filter [codegen id : 1] -Input [3]: [d_date_sk#21, d_year#22, d_qoy#23] -Condition : ((((isnotnull(d_qoy#23) AND isnotnull(d_year#22)) AND (d_qoy#23 = 3)) AND (d_year#22 = 2000)) AND isnotnull(d_date_sk#21)) +Input [3]: [d_date_sk#18, d_year#19, d_qoy#20] +Condition : ((((isnotnull(d_qoy#20) AND isnotnull(d_year#19)) AND (d_qoy#20 = 3)) AND (d_year#19 = 2000)) AND isnotnull(d_date_sk#18)) (118) BroadcastExchange -Input [3]: [d_date_sk#21, d_year#22, d_qoy#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#96] +Input [3]: [d_date_sk#18, d_year#19, d_qoy#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=21] -Subquery:3 Hosting operator id = 37 Hosting Expression = ss_sold_date_sk#34 IN dynamicpruning#35 +Subquery:3 Hosting operator id = 37 Hosting Expression = ss_sold_date_sk#28 IN dynamicpruning#29 BroadcastExchange (122) +- * Filter (121) +- * ColumnarToRow (120) @@ -673,27 +673,27 @@ BroadcastExchange (122) (119) Scan parquet default.date_dim -Output [3]: [d_date_sk#36, d_year#37, d_qoy#38] +Output [3]: [d_date_sk#30, d_year#31, d_qoy#32] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,1), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (120) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#36, d_year#37, d_qoy#38] +Input [3]: [d_date_sk#30, d_year#31, d_qoy#32] (121) Filter [codegen id : 1] -Input [3]: [d_date_sk#36, d_year#37, d_qoy#38] -Condition : ((((isnotnull(d_qoy#38) AND isnotnull(d_year#37)) AND (d_qoy#38 = 1)) AND (d_year#37 = 2000)) AND isnotnull(d_date_sk#36)) +Input [3]: [d_date_sk#30, d_year#31, d_qoy#32] +Condition : ((((isnotnull(d_qoy#32) AND isnotnull(d_year#31)) AND (d_qoy#32 = 1)) AND (d_year#31 = 2000)) AND isnotnull(d_date_sk#30)) (122) BroadcastExchange -Input [3]: [d_date_sk#36, d_year#37, d_qoy#38] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#97] +Input [3]: [d_date_sk#30, d_year#31, d_qoy#32] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=22] -Subquery:4 Hosting operator id = 55 Hosting Expression = ws_sold_date_sk#49 IN dynamicpruning#35 +Subquery:4 Hosting operator id = 55 Hosting Expression = ws_sold_date_sk#40 IN dynamicpruning#29 -Subquery:5 Hosting operator id = 70 Hosting Expression = ws_sold_date_sk#63 IN dynamicpruning#4 +Subquery:5 Hosting operator id = 70 Hosting Expression = ws_sold_date_sk#52 IN dynamicpruning#4 -Subquery:6 Hosting operator id = 88 Hosting Expression = ws_sold_date_sk#77 IN dynamicpruning#20 +Subquery:6 Hosting operator id = 88 Hosting Expression = ws_sold_date_sk#63 IN dynamicpruning#17 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q31/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q31/explain.txt index d5c2cc3377a7e..5c1e8c1c5a96a 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q31/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q31/explain.txt @@ -134,7 +134,7 @@ Condition : (isnotnull(ca_address_sk#8) AND isnotnull(ca_county#9)) (10) BroadcastExchange Input [2]: [ca_address_sk#8, ca_county#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_addr_sk#1] @@ -149,368 +149,368 @@ Input [6]: [ss_addr_sk#1, ss_ext_sales_price#2, d_year#6, d_qoy#7, ca_address_sk Input [4]: [ss_ext_sales_price#2, d_year#6, d_qoy#7, ca_county#9] Keys [3]: [ca_county#9, d_qoy#7, d_year#6] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#11] -Results [4]: [ca_county#9, d_qoy#7, d_year#6, sum#12] +Aggregate Attributes [1]: [sum#10] +Results [4]: [ca_county#9, d_qoy#7, d_year#6, sum#11] (14) Exchange -Input [4]: [ca_county#9, d_qoy#7, d_year#6, sum#12] -Arguments: hashpartitioning(ca_county#9, d_qoy#7, d_year#6, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [4]: [ca_county#9, d_qoy#7, d_year#6, sum#11] +Arguments: hashpartitioning(ca_county#9, d_qoy#7, d_year#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 24] -Input [4]: [ca_county#9, d_qoy#7, d_year#6, sum#12] +Input [4]: [ca_county#9, d_qoy#7, d_year#6, sum#11] Keys [3]: [ca_county#9, d_qoy#7, d_year#6] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#14] -Results [3]: [ca_county#9, d_year#6, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS store_sales#15] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#12] +Results [3]: [ca_county#9, d_year#6, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#12,17,2) AS store_sales#13] (16) Scan parquet default.store_sales -Output [3]: [ss_addr_sk#16, ss_ext_sales_price#17, ss_sold_date_sk#18] +Output [3]: [ss_addr_sk#14, ss_ext_sales_price#15, ss_sold_date_sk#16] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#18), dynamicpruningexpression(ss_sold_date_sk#18 IN dynamicpruning#19)] +PartitionFilters: [isnotnull(ss_sold_date_sk#16), dynamicpruningexpression(ss_sold_date_sk#16 IN dynamicpruning#17)] PushedFilters: [IsNotNull(ss_addr_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 6] -Input [3]: [ss_addr_sk#16, ss_ext_sales_price#17, ss_sold_date_sk#18] +Input [3]: [ss_addr_sk#14, ss_ext_sales_price#15, ss_sold_date_sk#16] (18) Filter [codegen id : 6] -Input [3]: [ss_addr_sk#16, ss_ext_sales_price#17, ss_sold_date_sk#18] -Condition : isnotnull(ss_addr_sk#16) +Input [3]: [ss_addr_sk#14, ss_ext_sales_price#15, ss_sold_date_sk#16] +Condition : isnotnull(ss_addr_sk#14) (19) ReusedExchange [Reuses operator id: 98] -Output [3]: [d_date_sk#20, d_year#21, d_qoy#22] +Output [3]: [d_date_sk#18, d_year#19, d_qoy#20] (20) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ss_sold_date_sk#18] -Right keys [1]: [d_date_sk#20] +Left keys [1]: [ss_sold_date_sk#16] +Right keys [1]: [d_date_sk#18] Join condition: None (21) Project [codegen id : 6] -Output [4]: [ss_addr_sk#16, ss_ext_sales_price#17, d_year#21, d_qoy#22] -Input [6]: [ss_addr_sk#16, ss_ext_sales_price#17, ss_sold_date_sk#18, d_date_sk#20, d_year#21, d_qoy#22] +Output [4]: [ss_addr_sk#14, ss_ext_sales_price#15, d_year#19, d_qoy#20] +Input [6]: [ss_addr_sk#14, ss_ext_sales_price#15, ss_sold_date_sk#16, d_date_sk#18, d_year#19, d_qoy#20] (22) ReusedExchange [Reuses operator id: 10] -Output [2]: [ca_address_sk#23, ca_county#24] +Output [2]: [ca_address_sk#21, ca_county#22] (23) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ss_addr_sk#16] -Right keys [1]: [ca_address_sk#23] +Left keys [1]: [ss_addr_sk#14] +Right keys [1]: [ca_address_sk#21] Join condition: None (24) Project [codegen id : 6] -Output [4]: [ss_ext_sales_price#17, d_year#21, d_qoy#22, ca_county#24] -Input [6]: [ss_addr_sk#16, ss_ext_sales_price#17, d_year#21, d_qoy#22, ca_address_sk#23, ca_county#24] +Output [4]: [ss_ext_sales_price#15, d_year#19, d_qoy#20, ca_county#22] +Input [6]: [ss_addr_sk#14, ss_ext_sales_price#15, d_year#19, d_qoy#20, ca_address_sk#21, ca_county#22] (25) HashAggregate [codegen id : 6] -Input [4]: [ss_ext_sales_price#17, d_year#21, d_qoy#22, ca_county#24] -Keys [3]: [ca_county#24, d_qoy#22, d_year#21] -Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#17))] -Aggregate Attributes [1]: [sum#25] -Results [4]: [ca_county#24, d_qoy#22, d_year#21, sum#26] +Input [4]: [ss_ext_sales_price#15, d_year#19, d_qoy#20, ca_county#22] +Keys [3]: [ca_county#22, d_qoy#20, d_year#19] +Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#15))] +Aggregate Attributes [1]: [sum#23] +Results [4]: [ca_county#22, d_qoy#20, d_year#19, sum#24] (26) Exchange -Input [4]: [ca_county#24, d_qoy#22, d_year#21, sum#26] -Arguments: hashpartitioning(ca_county#24, d_qoy#22, d_year#21, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [4]: [ca_county#22, d_qoy#20, d_year#19, sum#24] +Arguments: hashpartitioning(ca_county#22, d_qoy#20, d_year#19, 5), ENSURE_REQUIREMENTS, [plan_id=3] (27) HashAggregate [codegen id : 7] -Input [4]: [ca_county#24, d_qoy#22, d_year#21, sum#26] -Keys [3]: [ca_county#24, d_qoy#22, d_year#21] -Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#17))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#17))#14] -Results [2]: [ca_county#24, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#17))#14,17,2) AS store_sales#28] +Input [4]: [ca_county#22, d_qoy#20, d_year#19, sum#24] +Keys [3]: [ca_county#22, d_qoy#20, d_year#19] +Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#15))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#15))#12] +Results [2]: [ca_county#22, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#15))#12,17,2) AS store_sales#25] (28) BroadcastExchange -Input [2]: [ca_county#24, store_sales#28] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#29] +Input [2]: [ca_county#22, store_sales#25] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=4] (29) BroadcastHashJoin [codegen id : 24] Left keys [1]: [ca_county#9] -Right keys [1]: [ca_county#24] +Right keys [1]: [ca_county#22] Join condition: None (30) Scan parquet default.store_sales -Output [3]: [ss_addr_sk#30, ss_ext_sales_price#31, ss_sold_date_sk#32] +Output [3]: [ss_addr_sk#26, ss_ext_sales_price#27, ss_sold_date_sk#28] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#32), dynamicpruningexpression(ss_sold_date_sk#32 IN dynamicpruning#33)] +PartitionFilters: [isnotnull(ss_sold_date_sk#28), dynamicpruningexpression(ss_sold_date_sk#28 IN dynamicpruning#29)] PushedFilters: [IsNotNull(ss_addr_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 10] -Input [3]: [ss_addr_sk#30, ss_ext_sales_price#31, ss_sold_date_sk#32] +Input [3]: [ss_addr_sk#26, ss_ext_sales_price#27, ss_sold_date_sk#28] (32) Filter [codegen id : 10] -Input [3]: [ss_addr_sk#30, ss_ext_sales_price#31, ss_sold_date_sk#32] -Condition : isnotnull(ss_addr_sk#30) +Input [3]: [ss_addr_sk#26, ss_ext_sales_price#27, ss_sold_date_sk#28] +Condition : isnotnull(ss_addr_sk#26) (33) ReusedExchange [Reuses operator id: 102] -Output [3]: [d_date_sk#34, d_year#35, d_qoy#36] +Output [3]: [d_date_sk#30, d_year#31, d_qoy#32] (34) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_sold_date_sk#32] -Right keys [1]: [d_date_sk#34] +Left keys [1]: [ss_sold_date_sk#28] +Right keys [1]: [d_date_sk#30] Join condition: None (35) Project [codegen id : 10] -Output [4]: [ss_addr_sk#30, ss_ext_sales_price#31, d_year#35, d_qoy#36] -Input [6]: [ss_addr_sk#30, ss_ext_sales_price#31, ss_sold_date_sk#32, d_date_sk#34, d_year#35, d_qoy#36] +Output [4]: [ss_addr_sk#26, ss_ext_sales_price#27, d_year#31, d_qoy#32] +Input [6]: [ss_addr_sk#26, ss_ext_sales_price#27, ss_sold_date_sk#28, d_date_sk#30, d_year#31, d_qoy#32] (36) ReusedExchange [Reuses operator id: 10] -Output [2]: [ca_address_sk#37, ca_county#38] +Output [2]: [ca_address_sk#33, ca_county#34] (37) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_addr_sk#30] -Right keys [1]: [ca_address_sk#37] +Left keys [1]: [ss_addr_sk#26] +Right keys [1]: [ca_address_sk#33] Join condition: None (38) Project [codegen id : 10] -Output [4]: [ss_ext_sales_price#31, d_year#35, d_qoy#36, ca_county#38] -Input [6]: [ss_addr_sk#30, ss_ext_sales_price#31, d_year#35, d_qoy#36, ca_address_sk#37, ca_county#38] +Output [4]: [ss_ext_sales_price#27, d_year#31, d_qoy#32, ca_county#34] +Input [6]: [ss_addr_sk#26, ss_ext_sales_price#27, d_year#31, d_qoy#32, ca_address_sk#33, ca_county#34] (39) HashAggregate [codegen id : 10] -Input [4]: [ss_ext_sales_price#31, d_year#35, d_qoy#36, ca_county#38] -Keys [3]: [ca_county#38, d_qoy#36, d_year#35] -Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#31))] -Aggregate Attributes [1]: [sum#39] -Results [4]: [ca_county#38, d_qoy#36, d_year#35, sum#40] +Input [4]: [ss_ext_sales_price#27, d_year#31, d_qoy#32, ca_county#34] +Keys [3]: [ca_county#34, d_qoy#32, d_year#31] +Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#27))] +Aggregate Attributes [1]: [sum#35] +Results [4]: [ca_county#34, d_qoy#32, d_year#31, sum#36] (40) Exchange -Input [4]: [ca_county#38, d_qoy#36, d_year#35, sum#40] -Arguments: hashpartitioning(ca_county#38, d_qoy#36, d_year#35, 5), ENSURE_REQUIREMENTS, [id=#41] +Input [4]: [ca_county#34, d_qoy#32, d_year#31, sum#36] +Arguments: hashpartitioning(ca_county#34, d_qoy#32, d_year#31, 5), ENSURE_REQUIREMENTS, [plan_id=5] (41) HashAggregate [codegen id : 11] -Input [4]: [ca_county#38, d_qoy#36, d_year#35, sum#40] -Keys [3]: [ca_county#38, d_qoy#36, d_year#35] -Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#31))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#31))#14] -Results [2]: [ca_county#38, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#31))#14,17,2) AS store_sales#42] +Input [4]: [ca_county#34, d_qoy#32, d_year#31, sum#36] +Keys [3]: [ca_county#34, d_qoy#32, d_year#31] +Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#27))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#27))#12] +Results [2]: [ca_county#34, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#27))#12,17,2) AS store_sales#37] (42) BroadcastExchange -Input [2]: [ca_county#38, store_sales#42] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#43] +Input [2]: [ca_county#34, store_sales#37] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=6] (43) BroadcastHashJoin [codegen id : 24] -Left keys [1]: [ca_county#24] -Right keys [1]: [ca_county#38] +Left keys [1]: [ca_county#22] +Right keys [1]: [ca_county#34] Join condition: None (44) Project [codegen id : 24] -Output [5]: [ca_county#9, d_year#6, store_sales#15, store_sales#28, store_sales#42] -Input [7]: [ca_county#9, d_year#6, store_sales#15, ca_county#24, store_sales#28, ca_county#38, store_sales#42] +Output [5]: [ca_county#9, d_year#6, store_sales#13, store_sales#25, store_sales#37] +Input [7]: [ca_county#9, d_year#6, store_sales#13, ca_county#22, store_sales#25, ca_county#34, store_sales#37] (45) Scan parquet default.web_sales -Output [3]: [ws_bill_addr_sk#44, ws_ext_sales_price#45, ws_sold_date_sk#46] +Output [3]: [ws_bill_addr_sk#38, ws_ext_sales_price#39, ws_sold_date_sk#40] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#46), dynamicpruningexpression(ws_sold_date_sk#46 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(ws_sold_date_sk#40), dynamicpruningexpression(ws_sold_date_sk#40 IN dynamicpruning#4)] PushedFilters: [IsNotNull(ws_bill_addr_sk)] ReadSchema: struct (46) ColumnarToRow [codegen id : 14] -Input [3]: [ws_bill_addr_sk#44, ws_ext_sales_price#45, ws_sold_date_sk#46] +Input [3]: [ws_bill_addr_sk#38, ws_ext_sales_price#39, ws_sold_date_sk#40] (47) Filter [codegen id : 14] -Input [3]: [ws_bill_addr_sk#44, ws_ext_sales_price#45, ws_sold_date_sk#46] -Condition : isnotnull(ws_bill_addr_sk#44) +Input [3]: [ws_bill_addr_sk#38, ws_ext_sales_price#39, ws_sold_date_sk#40] +Condition : isnotnull(ws_bill_addr_sk#38) (48) ReusedExchange [Reuses operator id: 94] -Output [3]: [d_date_sk#47, d_year#48, d_qoy#49] +Output [3]: [d_date_sk#41, d_year#42, d_qoy#43] (49) BroadcastHashJoin [codegen id : 14] -Left keys [1]: [ws_sold_date_sk#46] -Right keys [1]: [d_date_sk#47] +Left keys [1]: [ws_sold_date_sk#40] +Right keys [1]: [d_date_sk#41] Join condition: None (50) Project [codegen id : 14] -Output [4]: [ws_bill_addr_sk#44, ws_ext_sales_price#45, d_year#48, d_qoy#49] -Input [6]: [ws_bill_addr_sk#44, ws_ext_sales_price#45, ws_sold_date_sk#46, d_date_sk#47, d_year#48, d_qoy#49] +Output [4]: [ws_bill_addr_sk#38, ws_ext_sales_price#39, d_year#42, d_qoy#43] +Input [6]: [ws_bill_addr_sk#38, ws_ext_sales_price#39, ws_sold_date_sk#40, d_date_sk#41, d_year#42, d_qoy#43] (51) ReusedExchange [Reuses operator id: 10] -Output [2]: [ca_address_sk#50, ca_county#51] +Output [2]: [ca_address_sk#44, ca_county#45] (52) BroadcastHashJoin [codegen id : 14] -Left keys [1]: [ws_bill_addr_sk#44] -Right keys [1]: [ca_address_sk#50] +Left keys [1]: [ws_bill_addr_sk#38] +Right keys [1]: [ca_address_sk#44] Join condition: None (53) Project [codegen id : 14] -Output [4]: [ws_ext_sales_price#45, d_year#48, d_qoy#49, ca_county#51] -Input [6]: [ws_bill_addr_sk#44, ws_ext_sales_price#45, d_year#48, d_qoy#49, ca_address_sk#50, ca_county#51] +Output [4]: [ws_ext_sales_price#39, d_year#42, d_qoy#43, ca_county#45] +Input [6]: [ws_bill_addr_sk#38, ws_ext_sales_price#39, d_year#42, d_qoy#43, ca_address_sk#44, ca_county#45] (54) HashAggregate [codegen id : 14] -Input [4]: [ws_ext_sales_price#45, d_year#48, d_qoy#49, ca_county#51] -Keys [3]: [ca_county#51, d_qoy#49, d_year#48] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#45))] -Aggregate Attributes [1]: [sum#52] -Results [4]: [ca_county#51, d_qoy#49, d_year#48, sum#53] +Input [4]: [ws_ext_sales_price#39, d_year#42, d_qoy#43, ca_county#45] +Keys [3]: [ca_county#45, d_qoy#43, d_year#42] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#39))] +Aggregate Attributes [1]: [sum#46] +Results [4]: [ca_county#45, d_qoy#43, d_year#42, sum#47] (55) Exchange -Input [4]: [ca_county#51, d_qoy#49, d_year#48, sum#53] -Arguments: hashpartitioning(ca_county#51, d_qoy#49, d_year#48, 5), ENSURE_REQUIREMENTS, [id=#54] +Input [4]: [ca_county#45, d_qoy#43, d_year#42, sum#47] +Arguments: hashpartitioning(ca_county#45, d_qoy#43, d_year#42, 5), ENSURE_REQUIREMENTS, [plan_id=7] (56) HashAggregate [codegen id : 15] -Input [4]: [ca_county#51, d_qoy#49, d_year#48, sum#53] -Keys [3]: [ca_county#51, d_qoy#49, d_year#48] -Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#45))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#45))#55] -Results [2]: [ca_county#51, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#45))#55,17,2) AS web_sales#56] +Input [4]: [ca_county#45, d_qoy#43, d_year#42, sum#47] +Keys [3]: [ca_county#45, d_qoy#43, d_year#42] +Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#39))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#39))#48] +Results [2]: [ca_county#45, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#39))#48,17,2) AS web_sales#49] (57) BroadcastExchange -Input [2]: [ca_county#51, web_sales#56] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#57] +Input [2]: [ca_county#45, web_sales#49] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=8] (58) BroadcastHashJoin [codegen id : 24] Left keys [1]: [ca_county#9] -Right keys [1]: [ca_county#51] +Right keys [1]: [ca_county#45] Join condition: None (59) Scan parquet default.web_sales -Output [3]: [ws_bill_addr_sk#58, ws_ext_sales_price#59, ws_sold_date_sk#60] +Output [3]: [ws_bill_addr_sk#50, ws_ext_sales_price#51, ws_sold_date_sk#52] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#60), dynamicpruningexpression(ws_sold_date_sk#60 IN dynamicpruning#19)] +PartitionFilters: [isnotnull(ws_sold_date_sk#52), dynamicpruningexpression(ws_sold_date_sk#52 IN dynamicpruning#17)] PushedFilters: [IsNotNull(ws_bill_addr_sk)] ReadSchema: struct (60) ColumnarToRow [codegen id : 18] -Input [3]: [ws_bill_addr_sk#58, ws_ext_sales_price#59, ws_sold_date_sk#60] +Input [3]: [ws_bill_addr_sk#50, ws_ext_sales_price#51, ws_sold_date_sk#52] (61) Filter [codegen id : 18] -Input [3]: [ws_bill_addr_sk#58, ws_ext_sales_price#59, ws_sold_date_sk#60] -Condition : isnotnull(ws_bill_addr_sk#58) +Input [3]: [ws_bill_addr_sk#50, ws_ext_sales_price#51, ws_sold_date_sk#52] +Condition : isnotnull(ws_bill_addr_sk#50) (62) ReusedExchange [Reuses operator id: 98] -Output [3]: [d_date_sk#61, d_year#62, d_qoy#63] +Output [3]: [d_date_sk#53, d_year#54, d_qoy#55] (63) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [ws_sold_date_sk#60] -Right keys [1]: [d_date_sk#61] +Left keys [1]: [ws_sold_date_sk#52] +Right keys [1]: [d_date_sk#53] Join condition: None (64) Project [codegen id : 18] -Output [4]: [ws_bill_addr_sk#58, ws_ext_sales_price#59, d_year#62, d_qoy#63] -Input [6]: [ws_bill_addr_sk#58, ws_ext_sales_price#59, ws_sold_date_sk#60, d_date_sk#61, d_year#62, d_qoy#63] +Output [4]: [ws_bill_addr_sk#50, ws_ext_sales_price#51, d_year#54, d_qoy#55] +Input [6]: [ws_bill_addr_sk#50, ws_ext_sales_price#51, ws_sold_date_sk#52, d_date_sk#53, d_year#54, d_qoy#55] (65) ReusedExchange [Reuses operator id: 10] -Output [2]: [ca_address_sk#64, ca_county#65] +Output [2]: [ca_address_sk#56, ca_county#57] (66) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [ws_bill_addr_sk#58] -Right keys [1]: [ca_address_sk#64] +Left keys [1]: [ws_bill_addr_sk#50] +Right keys [1]: [ca_address_sk#56] Join condition: None (67) Project [codegen id : 18] -Output [4]: [ws_ext_sales_price#59, d_year#62, d_qoy#63, ca_county#65] -Input [6]: [ws_bill_addr_sk#58, ws_ext_sales_price#59, d_year#62, d_qoy#63, ca_address_sk#64, ca_county#65] +Output [4]: [ws_ext_sales_price#51, d_year#54, d_qoy#55, ca_county#57] +Input [6]: [ws_bill_addr_sk#50, ws_ext_sales_price#51, d_year#54, d_qoy#55, ca_address_sk#56, ca_county#57] (68) HashAggregate [codegen id : 18] -Input [4]: [ws_ext_sales_price#59, d_year#62, d_qoy#63, ca_county#65] -Keys [3]: [ca_county#65, d_qoy#63, d_year#62] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#59))] -Aggregate Attributes [1]: [sum#66] -Results [4]: [ca_county#65, d_qoy#63, d_year#62, sum#67] +Input [4]: [ws_ext_sales_price#51, d_year#54, d_qoy#55, ca_county#57] +Keys [3]: [ca_county#57, d_qoy#55, d_year#54] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#51))] +Aggregate Attributes [1]: [sum#58] +Results [4]: [ca_county#57, d_qoy#55, d_year#54, sum#59] (69) Exchange -Input [4]: [ca_county#65, d_qoy#63, d_year#62, sum#67] -Arguments: hashpartitioning(ca_county#65, d_qoy#63, d_year#62, 5), ENSURE_REQUIREMENTS, [id=#68] +Input [4]: [ca_county#57, d_qoy#55, d_year#54, sum#59] +Arguments: hashpartitioning(ca_county#57, d_qoy#55, d_year#54, 5), ENSURE_REQUIREMENTS, [plan_id=9] (70) HashAggregate [codegen id : 19] -Input [4]: [ca_county#65, d_qoy#63, d_year#62, sum#67] -Keys [3]: [ca_county#65, d_qoy#63, d_year#62] -Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#59))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#59))#55] -Results [2]: [ca_county#65, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#59))#55,17,2) AS web_sales#69] +Input [4]: [ca_county#57, d_qoy#55, d_year#54, sum#59] +Keys [3]: [ca_county#57, d_qoy#55, d_year#54] +Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#51))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#51))#48] +Results [2]: [ca_county#57, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#51))#48,17,2) AS web_sales#60] (71) BroadcastExchange -Input [2]: [ca_county#65, web_sales#69] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#70] +Input [2]: [ca_county#57, web_sales#60] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=10] (72) BroadcastHashJoin [codegen id : 24] -Left keys [1]: [ca_county#51] -Right keys [1]: [ca_county#65] -Join condition: (CASE WHEN (web_sales#56 > 0.00) THEN CheckOverflow((promote_precision(web_sales#69) / promote_precision(web_sales#56)), DecimalType(37,20)) END > CASE WHEN (store_sales#15 > 0.00) THEN CheckOverflow((promote_precision(store_sales#28) / promote_precision(store_sales#15)), DecimalType(37,20)) END) +Left keys [1]: [ca_county#45] +Right keys [1]: [ca_county#57] +Join condition: (CASE WHEN (web_sales#49 > 0.00) THEN CheckOverflow((promote_precision(web_sales#60) / promote_precision(web_sales#49)), DecimalType(37,20)) END > CASE WHEN (store_sales#13 > 0.00) THEN CheckOverflow((promote_precision(store_sales#25) / promote_precision(store_sales#13)), DecimalType(37,20)) END) (73) Project [codegen id : 24] -Output [8]: [ca_county#9, d_year#6, store_sales#15, store_sales#28, store_sales#42, ca_county#51, web_sales#56, web_sales#69] -Input [9]: [ca_county#9, d_year#6, store_sales#15, store_sales#28, store_sales#42, ca_county#51, web_sales#56, ca_county#65, web_sales#69] +Output [8]: [ca_county#9, d_year#6, store_sales#13, store_sales#25, store_sales#37, ca_county#45, web_sales#49, web_sales#60] +Input [9]: [ca_county#9, d_year#6, store_sales#13, store_sales#25, store_sales#37, ca_county#45, web_sales#49, ca_county#57, web_sales#60] (74) Scan parquet default.web_sales -Output [3]: [ws_bill_addr_sk#71, ws_ext_sales_price#72, ws_sold_date_sk#73] +Output [3]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, ws_sold_date_sk#63] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#73), dynamicpruningexpression(ws_sold_date_sk#73 IN dynamicpruning#33)] +PartitionFilters: [isnotnull(ws_sold_date_sk#63), dynamicpruningexpression(ws_sold_date_sk#63 IN dynamicpruning#29)] PushedFilters: [IsNotNull(ws_bill_addr_sk)] ReadSchema: struct (75) ColumnarToRow [codegen id : 22] -Input [3]: [ws_bill_addr_sk#71, ws_ext_sales_price#72, ws_sold_date_sk#73] +Input [3]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, ws_sold_date_sk#63] (76) Filter [codegen id : 22] -Input [3]: [ws_bill_addr_sk#71, ws_ext_sales_price#72, ws_sold_date_sk#73] -Condition : isnotnull(ws_bill_addr_sk#71) +Input [3]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, ws_sold_date_sk#63] +Condition : isnotnull(ws_bill_addr_sk#61) (77) ReusedExchange [Reuses operator id: 102] -Output [3]: [d_date_sk#74, d_year#75, d_qoy#76] +Output [3]: [d_date_sk#64, d_year#65, d_qoy#66] (78) BroadcastHashJoin [codegen id : 22] -Left keys [1]: [ws_sold_date_sk#73] -Right keys [1]: [d_date_sk#74] +Left keys [1]: [ws_sold_date_sk#63] +Right keys [1]: [d_date_sk#64] Join condition: None (79) Project [codegen id : 22] -Output [4]: [ws_bill_addr_sk#71, ws_ext_sales_price#72, d_year#75, d_qoy#76] -Input [6]: [ws_bill_addr_sk#71, ws_ext_sales_price#72, ws_sold_date_sk#73, d_date_sk#74, d_year#75, d_qoy#76] +Output [4]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, d_year#65, d_qoy#66] +Input [6]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, ws_sold_date_sk#63, d_date_sk#64, d_year#65, d_qoy#66] (80) ReusedExchange [Reuses operator id: 10] -Output [2]: [ca_address_sk#77, ca_county#78] +Output [2]: [ca_address_sk#67, ca_county#68] (81) BroadcastHashJoin [codegen id : 22] -Left keys [1]: [ws_bill_addr_sk#71] -Right keys [1]: [ca_address_sk#77] +Left keys [1]: [ws_bill_addr_sk#61] +Right keys [1]: [ca_address_sk#67] Join condition: None (82) Project [codegen id : 22] -Output [4]: [ws_ext_sales_price#72, d_year#75, d_qoy#76, ca_county#78] -Input [6]: [ws_bill_addr_sk#71, ws_ext_sales_price#72, d_year#75, d_qoy#76, ca_address_sk#77, ca_county#78] +Output [4]: [ws_ext_sales_price#62, d_year#65, d_qoy#66, ca_county#68] +Input [6]: [ws_bill_addr_sk#61, ws_ext_sales_price#62, d_year#65, d_qoy#66, ca_address_sk#67, ca_county#68] (83) HashAggregate [codegen id : 22] -Input [4]: [ws_ext_sales_price#72, d_year#75, d_qoy#76, ca_county#78] -Keys [3]: [ca_county#78, d_qoy#76, d_year#75] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#72))] -Aggregate Attributes [1]: [sum#79] -Results [4]: [ca_county#78, d_qoy#76, d_year#75, sum#80] +Input [4]: [ws_ext_sales_price#62, d_year#65, d_qoy#66, ca_county#68] +Keys [3]: [ca_county#68, d_qoy#66, d_year#65] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#62))] +Aggregate Attributes [1]: [sum#69] +Results [4]: [ca_county#68, d_qoy#66, d_year#65, sum#70] (84) Exchange -Input [4]: [ca_county#78, d_qoy#76, d_year#75, sum#80] -Arguments: hashpartitioning(ca_county#78, d_qoy#76, d_year#75, 5), ENSURE_REQUIREMENTS, [id=#81] +Input [4]: [ca_county#68, d_qoy#66, d_year#65, sum#70] +Arguments: hashpartitioning(ca_county#68, d_qoy#66, d_year#65, 5), ENSURE_REQUIREMENTS, [plan_id=11] (85) HashAggregate [codegen id : 23] -Input [4]: [ca_county#78, d_qoy#76, d_year#75, sum#80] -Keys [3]: [ca_county#78, d_qoy#76, d_year#75] -Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#72))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#72))#55] -Results [2]: [ca_county#78, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#72))#55,17,2) AS web_sales#82] +Input [4]: [ca_county#68, d_qoy#66, d_year#65, sum#70] +Keys [3]: [ca_county#68, d_qoy#66, d_year#65] +Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#62))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#62))#48] +Results [2]: [ca_county#68, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#62))#48,17,2) AS web_sales#71] (86) BroadcastExchange -Input [2]: [ca_county#78, web_sales#82] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#83] +Input [2]: [ca_county#68, web_sales#71] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=12] (87) BroadcastHashJoin [codegen id : 24] -Left keys [1]: [ca_county#51] -Right keys [1]: [ca_county#78] -Join condition: (CASE WHEN (web_sales#69 > 0.00) THEN CheckOverflow((promote_precision(web_sales#82) / promote_precision(web_sales#69)), DecimalType(37,20)) END > CASE WHEN (store_sales#28 > 0.00) THEN CheckOverflow((promote_precision(store_sales#42) / promote_precision(store_sales#28)), DecimalType(37,20)) END) +Left keys [1]: [ca_county#45] +Right keys [1]: [ca_county#68] +Join condition: (CASE WHEN (web_sales#60 > 0.00) THEN CheckOverflow((promote_precision(web_sales#71) / promote_precision(web_sales#60)), DecimalType(37,20)) END > CASE WHEN (store_sales#25 > 0.00) THEN CheckOverflow((promote_precision(store_sales#37) / promote_precision(store_sales#25)), DecimalType(37,20)) END) (88) Project [codegen id : 24] -Output [6]: [ca_county#9, d_year#6, CheckOverflow((promote_precision(web_sales#69) / promote_precision(web_sales#56)), DecimalType(37,20)) AS web_q1_q2_increase#84, CheckOverflow((promote_precision(store_sales#28) / promote_precision(store_sales#15)), DecimalType(37,20)) AS store_q1_q2_increase#85, CheckOverflow((promote_precision(web_sales#82) / promote_precision(web_sales#69)), DecimalType(37,20)) AS web_q2_q3_increase#86, CheckOverflow((promote_precision(store_sales#42) / promote_precision(store_sales#28)), DecimalType(37,20)) AS store_q2_q3_increase#87] -Input [10]: [ca_county#9, d_year#6, store_sales#15, store_sales#28, store_sales#42, ca_county#51, web_sales#56, web_sales#69, ca_county#78, web_sales#82] +Output [6]: [ca_county#9, d_year#6, CheckOverflow((promote_precision(web_sales#60) / promote_precision(web_sales#49)), DecimalType(37,20)) AS web_q1_q2_increase#72, CheckOverflow((promote_precision(store_sales#25) / promote_precision(store_sales#13)), DecimalType(37,20)) AS store_q1_q2_increase#73, CheckOverflow((promote_precision(web_sales#71) / promote_precision(web_sales#60)), DecimalType(37,20)) AS web_q2_q3_increase#74, CheckOverflow((promote_precision(store_sales#37) / promote_precision(store_sales#25)), DecimalType(37,20)) AS store_q2_q3_increase#75] +Input [10]: [ca_county#9, d_year#6, store_sales#13, store_sales#25, store_sales#37, ca_county#45, web_sales#49, web_sales#60, ca_county#68, web_sales#71] (89) Exchange -Input [6]: [ca_county#9, d_year#6, web_q1_q2_increase#84, store_q1_q2_increase#85, web_q2_q3_increase#86, store_q2_q3_increase#87] -Arguments: rangepartitioning(ca_county#9 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#88] +Input [6]: [ca_county#9, d_year#6, web_q1_q2_increase#72, store_q1_q2_increase#73, web_q2_q3_increase#74, store_q2_q3_increase#75] +Arguments: rangepartitioning(ca_county#9 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=13] (90) Sort [codegen id : 25] -Input [6]: [ca_county#9, d_year#6, web_q1_q2_increase#84, store_q1_q2_increase#85, web_q2_q3_increase#86, store_q2_q3_increase#87] +Input [6]: [ca_county#9, d_year#6, web_q1_q2_increase#72, store_q1_q2_increase#73, web_q2_q3_increase#74, store_q2_q3_increase#75] Arguments: [ca_county#9 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -538,9 +538,9 @@ Condition : ((((isnotnull(d_qoy#7) AND isnotnull(d_year#6)) AND (d_qoy#7 = 1)) A (94) BroadcastExchange Input [3]: [d_date_sk#5, d_year#6, d_qoy#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#89] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=14] -Subquery:2 Hosting operator id = 16 Hosting Expression = ss_sold_date_sk#18 IN dynamicpruning#19 +Subquery:2 Hosting operator id = 16 Hosting Expression = ss_sold_date_sk#16 IN dynamicpruning#17 BroadcastExchange (98) +- * Filter (97) +- * ColumnarToRow (96) @@ -548,24 +548,24 @@ BroadcastExchange (98) (95) Scan parquet default.date_dim -Output [3]: [d_date_sk#20, d_year#21, d_qoy#22] +Output [3]: [d_date_sk#18, d_year#19, d_qoy#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,2), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (96) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#20, d_year#21, d_qoy#22] +Input [3]: [d_date_sk#18, d_year#19, d_qoy#20] (97) Filter [codegen id : 1] -Input [3]: [d_date_sk#20, d_year#21, d_qoy#22] -Condition : ((((isnotnull(d_qoy#22) AND isnotnull(d_year#21)) AND (d_qoy#22 = 2)) AND (d_year#21 = 2000)) AND isnotnull(d_date_sk#20)) +Input [3]: [d_date_sk#18, d_year#19, d_qoy#20] +Condition : ((((isnotnull(d_qoy#20) AND isnotnull(d_year#19)) AND (d_qoy#20 = 2)) AND (d_year#19 = 2000)) AND isnotnull(d_date_sk#18)) (98) BroadcastExchange -Input [3]: [d_date_sk#20, d_year#21, d_qoy#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#90] +Input [3]: [d_date_sk#18, d_year#19, d_qoy#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15] -Subquery:3 Hosting operator id = 30 Hosting Expression = ss_sold_date_sk#32 IN dynamicpruning#33 +Subquery:3 Hosting operator id = 30 Hosting Expression = ss_sold_date_sk#28 IN dynamicpruning#29 BroadcastExchange (102) +- * Filter (101) +- * ColumnarToRow (100) @@ -573,27 +573,27 @@ BroadcastExchange (102) (99) Scan parquet default.date_dim -Output [3]: [d_date_sk#34, d_year#35, d_qoy#36] +Output [3]: [d_date_sk#30, d_year#31, d_qoy#32] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,3), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (100) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#34, d_year#35, d_qoy#36] +Input [3]: [d_date_sk#30, d_year#31, d_qoy#32] (101) Filter [codegen id : 1] -Input [3]: [d_date_sk#34, d_year#35, d_qoy#36] -Condition : ((((isnotnull(d_qoy#36) AND isnotnull(d_year#35)) AND (d_qoy#36 = 3)) AND (d_year#35 = 2000)) AND isnotnull(d_date_sk#34)) +Input [3]: [d_date_sk#30, d_year#31, d_qoy#32] +Condition : ((((isnotnull(d_qoy#32) AND isnotnull(d_year#31)) AND (d_qoy#32 = 3)) AND (d_year#31 = 2000)) AND isnotnull(d_date_sk#30)) (102) BroadcastExchange -Input [3]: [d_date_sk#34, d_year#35, d_qoy#36] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#91] +Input [3]: [d_date_sk#30, d_year#31, d_qoy#32] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=16] -Subquery:4 Hosting operator id = 45 Hosting Expression = ws_sold_date_sk#46 IN dynamicpruning#4 +Subquery:4 Hosting operator id = 45 Hosting Expression = ws_sold_date_sk#40 IN dynamicpruning#4 -Subquery:5 Hosting operator id = 59 Hosting Expression = ws_sold_date_sk#60 IN dynamicpruning#19 +Subquery:5 Hosting operator id = 59 Hosting Expression = ws_sold_date_sk#52 IN dynamicpruning#17 -Subquery:6 Hosting operator id = 74 Hosting Expression = ws_sold_date_sk#73 IN dynamicpruning#33 +Subquery:6 Hosting operator id = 74 Hosting Expression = ws_sold_date_sk#63 IN dynamicpruning#29 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q32.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q32.sf100/explain.txt index e1e27e648af3f..6961e34c8620f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q32.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q32.sf100/explain.txt @@ -48,113 +48,113 @@ Input [2]: [i_item_sk#1, i_manufact_id#2] (5) BroadcastExchange Input [1]: [i_item_sk#1] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#3] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.catalog_sales -Output [3]: [cs_item_sk#4, cs_ext_discount_amt#5, cs_sold_date_sk#6] +Output [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#6), dynamicpruningexpression(cs_sold_date_sk#6 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(cs_sold_date_sk#5), dynamicpruningexpression(cs_sold_date_sk#5 IN dynamicpruning#6)] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [3]: [cs_item_sk#4, cs_ext_discount_amt#5, cs_sold_date_sk#6] +Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] (8) Filter [codegen id : 3] -Input [3]: [cs_item_sk#4, cs_ext_discount_amt#5, cs_sold_date_sk#6] -Condition : (isnotnull(cs_item_sk#4) AND might_contain(Subquery scalar-subquery#8, [id=#9], xxhash64(cs_item_sk#4, 42))) +Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5] +Condition : (isnotnull(cs_item_sk#3) AND might_contain(Subquery scalar-subquery#7, [id=#8], xxhash64(cs_item_sk#3, 42))) (9) ReusedExchange [Reuses operator id: 39] -Output [1]: [d_date_sk#10] +Output [1]: [d_date_sk#9] (10) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [cs_sold_date_sk#6] -Right keys [1]: [d_date_sk#10] +Left keys [1]: [cs_sold_date_sk#5] +Right keys [1]: [d_date_sk#9] Join condition: None (11) Project [codegen id : 3] -Output [2]: [cs_item_sk#4, cs_ext_discount_amt#5] -Input [4]: [cs_item_sk#4, cs_ext_discount_amt#5, cs_sold_date_sk#6, d_date_sk#10] +Output [2]: [cs_item_sk#3, cs_ext_discount_amt#4] +Input [4]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5, d_date_sk#9] (12) HashAggregate [codegen id : 3] -Input [2]: [cs_item_sk#4, cs_ext_discount_amt#5] -Keys [1]: [cs_item_sk#4] -Functions [1]: [partial_avg(UnscaledValue(cs_ext_discount_amt#5))] -Aggregate Attributes [2]: [sum#11, count#12] -Results [3]: [cs_item_sk#4, sum#13, count#14] +Input [2]: [cs_item_sk#3, cs_ext_discount_amt#4] +Keys [1]: [cs_item_sk#3] +Functions [1]: [partial_avg(UnscaledValue(cs_ext_discount_amt#4))] +Aggregate Attributes [2]: [sum#10, count#11] +Results [3]: [cs_item_sk#3, sum#12, count#13] (13) Exchange -Input [3]: [cs_item_sk#4, sum#13, count#14] -Arguments: hashpartitioning(cs_item_sk#4, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [3]: [cs_item_sk#3, sum#12, count#13] +Arguments: hashpartitioning(cs_item_sk#3, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) HashAggregate -Input [3]: [cs_item_sk#4, sum#13, count#14] -Keys [1]: [cs_item_sk#4] -Functions [1]: [avg(UnscaledValue(cs_ext_discount_amt#5))] -Aggregate Attributes [1]: [avg(UnscaledValue(cs_ext_discount_amt#5))#16] -Results [2]: [CheckOverflow((1.300000 * promote_precision(cast((avg(UnscaledValue(cs_ext_discount_amt#5))#16 / 100.0) as decimal(11,6)))), DecimalType(14,7)) AS (1.3 * avg(cs_ext_discount_amt))#17, cs_item_sk#4] +Input [3]: [cs_item_sk#3, sum#12, count#13] +Keys [1]: [cs_item_sk#3] +Functions [1]: [avg(UnscaledValue(cs_ext_discount_amt#4))] +Aggregate Attributes [1]: [avg(UnscaledValue(cs_ext_discount_amt#4))#14] +Results [2]: [CheckOverflow((1.300000 * promote_precision(cast((avg(UnscaledValue(cs_ext_discount_amt#4))#14 / 100.0) as decimal(11,6)))), DecimalType(14,7)) AS (1.3 * avg(cs_ext_discount_amt))#15, cs_item_sk#3] (15) Filter -Input [2]: [(1.3 * avg(cs_ext_discount_amt))#17, cs_item_sk#4] -Condition : isnotnull((1.3 * avg(cs_ext_discount_amt))#17) +Input [2]: [(1.3 * avg(cs_ext_discount_amt))#15, cs_item_sk#3] +Condition : isnotnull((1.3 * avg(cs_ext_discount_amt))#15) (16) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] -Right keys [1]: [cs_item_sk#4] +Right keys [1]: [cs_item_sk#3] Join condition: None (17) Project [codegen id : 4] -Output [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#17] -Input [3]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#17, cs_item_sk#4] +Output [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#15] +Input [3]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#15, cs_item_sk#3] (18) BroadcastExchange -Input [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (19) Scan parquet default.catalog_sales -Output [3]: [cs_item_sk#19, cs_ext_discount_amt#20, cs_sold_date_sk#21] +Output [3]: [cs_item_sk#16, cs_ext_discount_amt#17, cs_sold_date_sk#18] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#21), dynamicpruningexpression(cs_sold_date_sk#21 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(cs_sold_date_sk#18), dynamicpruningexpression(cs_sold_date_sk#18 IN dynamicpruning#6)] PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_ext_discount_amt)] ReadSchema: struct (20) ColumnarToRow -Input [3]: [cs_item_sk#19, cs_ext_discount_amt#20, cs_sold_date_sk#21] +Input [3]: [cs_item_sk#16, cs_ext_discount_amt#17, cs_sold_date_sk#18] (21) Filter -Input [3]: [cs_item_sk#19, cs_ext_discount_amt#20, cs_sold_date_sk#21] -Condition : (isnotnull(cs_item_sk#19) AND isnotnull(cs_ext_discount_amt#20)) +Input [3]: [cs_item_sk#16, cs_ext_discount_amt#17, cs_sold_date_sk#18] +Condition : (isnotnull(cs_item_sk#16) AND isnotnull(cs_ext_discount_amt#17)) (22) BroadcastHashJoin [codegen id : 6] Left keys [1]: [i_item_sk#1] -Right keys [1]: [cs_item_sk#19] -Join condition: (cast(cs_ext_discount_amt#20 as decimal(14,7)) > (1.3 * avg(cs_ext_discount_amt))#17) +Right keys [1]: [cs_item_sk#16] +Join condition: (cast(cs_ext_discount_amt#17 as decimal(14,7)) > (1.3 * avg(cs_ext_discount_amt))#15) (23) Project [codegen id : 6] -Output [1]: [cs_sold_date_sk#21] -Input [5]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#17, cs_item_sk#19, cs_ext_discount_amt#20, cs_sold_date_sk#21] +Output [1]: [cs_sold_date_sk#18] +Input [5]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#15, cs_item_sk#16, cs_ext_discount_amt#17, cs_sold_date_sk#18] (24) ReusedExchange [Reuses operator id: 39] -Output [1]: [d_date_sk#22] +Output [1]: [d_date_sk#19] (25) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [cs_sold_date_sk#21] -Right keys [1]: [d_date_sk#22] +Left keys [1]: [cs_sold_date_sk#18] +Right keys [1]: [d_date_sk#19] Join condition: None (26) Project [codegen id : 6] -Output [1]: [1 AS excess discount amount #23] -Input [2]: [cs_sold_date_sk#21, d_date_sk#22] +Output [1]: [1 AS excess discount amount #20] +Input [2]: [cs_sold_date_sk#18, d_date_sk#19] (27) CollectLimit -Input [1]: [excess discount amount #23] +Input [1]: [excess discount amount #20] Arguments: 100 ===== Subqueries ===== -Subquery:1 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery#8, [id=#9] +Subquery:1 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery#7, [id=#8] ObjectHashAggregate (34) +- Exchange (33) +- ObjectHashAggregate (32) @@ -186,21 +186,21 @@ Input [2]: [i_item_sk#1, i_manufact_id#2] Input [1]: [i_item_sk#1] Keys: [] Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 1592, 0, 0)] -Aggregate Attributes [1]: [buf#24] -Results [1]: [buf#25] +Aggregate Attributes [1]: [buf#21] +Results [1]: [buf#22] (33) Exchange -Input [1]: [buf#25] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#26] +Input [1]: [buf#22] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (34) ObjectHashAggregate -Input [1]: [buf#25] +Input [1]: [buf#22] Keys: [] Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 1592, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 1592, 0, 0)#27] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 1592, 0, 0)#27 AS bloomFilter#28] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 1592, 0, 0)#23] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 1592, 0, 0)#23 AS bloomFilter#24] -Subquery:2 Hosting operator id = 6 Hosting Expression = cs_sold_date_sk#6 IN dynamicpruning#7 +Subquery:2 Hosting operator id = 6 Hosting Expression = cs_sold_date_sk#5 IN dynamicpruning#6 BroadcastExchange (39) +- * Project (38) +- * Filter (37) @@ -209,27 +209,27 @@ BroadcastExchange (39) (35) Scan parquet default.date_dim -Output [2]: [d_date_sk#10, d_date#29] +Output [2]: [d_date_sk#9, d_date#25] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-01-27), LessThanOrEqual(d_date,2000-04-26), IsNotNull(d_date_sk)] ReadSchema: struct (36) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#10, d_date#29] +Input [2]: [d_date_sk#9, d_date#25] (37) Filter [codegen id : 1] -Input [2]: [d_date_sk#10, d_date#29] -Condition : (((isnotnull(d_date#29) AND (d_date#29 >= 2000-01-27)) AND (d_date#29 <= 2000-04-26)) AND isnotnull(d_date_sk#10)) +Input [2]: [d_date_sk#9, d_date#25] +Condition : (((isnotnull(d_date#25) AND (d_date#25 >= 2000-01-27)) AND (d_date#25 <= 2000-04-26)) AND isnotnull(d_date_sk#9)) (38) Project [codegen id : 1] -Output [1]: [d_date_sk#10] -Input [2]: [d_date_sk#10, d_date#29] +Output [1]: [d_date_sk#9] +Input [2]: [d_date_sk#9, d_date#25] (39) BroadcastExchange -Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#30] +Input [1]: [d_date_sk#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -Subquery:3 Hosting operator id = 19 Hosting Expression = cs_sold_date_sk#21 IN dynamicpruning#7 +Subquery:3 Hosting operator id = 19 Hosting Expression = cs_sold_date_sk#18 IN dynamicpruning#6 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q32/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q32/explain.txt index e221defe867c1..abbb43c8c75d7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q32/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q32/explain.txt @@ -63,7 +63,7 @@ Input [2]: [i_item_sk#5, i_manufact_id#6] (8) BroadcastExchange Input [1]: [i_item_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 6] Left keys [1]: [cs_item_sk#1] @@ -75,81 +75,81 @@ Output [3]: [cs_ext_discount_amt#2, cs_sold_date_sk#3, i_item_sk#5] Input [4]: [cs_item_sk#1, cs_ext_discount_amt#2, cs_sold_date_sk#3, i_item_sk#5] (11) Scan parquet default.catalog_sales -Output [3]: [cs_item_sk#8, cs_ext_discount_amt#9, cs_sold_date_sk#10] +Output [3]: [cs_item_sk#7, cs_ext_discount_amt#8, cs_sold_date_sk#9] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#10), dynamicpruningexpression(cs_sold_date_sk#10 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(cs_sold_date_sk#9), dynamicpruningexpression(cs_sold_date_sk#9 IN dynamicpruning#4)] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 3] -Input [3]: [cs_item_sk#8, cs_ext_discount_amt#9, cs_sold_date_sk#10] +Input [3]: [cs_item_sk#7, cs_ext_discount_amt#8, cs_sold_date_sk#9] (13) Filter [codegen id : 3] -Input [3]: [cs_item_sk#8, cs_ext_discount_amt#9, cs_sold_date_sk#10] -Condition : isnotnull(cs_item_sk#8) +Input [3]: [cs_item_sk#7, cs_ext_discount_amt#8, cs_sold_date_sk#9] +Condition : isnotnull(cs_item_sk#7) (14) ReusedExchange [Reuses operator id: 32] -Output [1]: [d_date_sk#11] +Output [1]: [d_date_sk#10] (15) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [cs_sold_date_sk#10] -Right keys [1]: [d_date_sk#11] +Left keys [1]: [cs_sold_date_sk#9] +Right keys [1]: [d_date_sk#10] Join condition: None (16) Project [codegen id : 3] -Output [2]: [cs_item_sk#8, cs_ext_discount_amt#9] -Input [4]: [cs_item_sk#8, cs_ext_discount_amt#9, cs_sold_date_sk#10, d_date_sk#11] +Output [2]: [cs_item_sk#7, cs_ext_discount_amt#8] +Input [4]: [cs_item_sk#7, cs_ext_discount_amt#8, cs_sold_date_sk#9, d_date_sk#10] (17) HashAggregate [codegen id : 3] -Input [2]: [cs_item_sk#8, cs_ext_discount_amt#9] -Keys [1]: [cs_item_sk#8] -Functions [1]: [partial_avg(UnscaledValue(cs_ext_discount_amt#9))] -Aggregate Attributes [2]: [sum#12, count#13] -Results [3]: [cs_item_sk#8, sum#14, count#15] +Input [2]: [cs_item_sk#7, cs_ext_discount_amt#8] +Keys [1]: [cs_item_sk#7] +Functions [1]: [partial_avg(UnscaledValue(cs_ext_discount_amt#8))] +Aggregate Attributes [2]: [sum#11, count#12] +Results [3]: [cs_item_sk#7, sum#13, count#14] (18) Exchange -Input [3]: [cs_item_sk#8, sum#14, count#15] -Arguments: hashpartitioning(cs_item_sk#8, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [3]: [cs_item_sk#7, sum#13, count#14] +Arguments: hashpartitioning(cs_item_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (19) HashAggregate [codegen id : 4] -Input [3]: [cs_item_sk#8, sum#14, count#15] -Keys [1]: [cs_item_sk#8] -Functions [1]: [avg(UnscaledValue(cs_ext_discount_amt#9))] -Aggregate Attributes [1]: [avg(UnscaledValue(cs_ext_discount_amt#9))#17] -Results [2]: [CheckOverflow((1.300000 * promote_precision(cast((avg(UnscaledValue(cs_ext_discount_amt#9))#17 / 100.0) as decimal(11,6)))), DecimalType(14,7)) AS (1.3 * avg(cs_ext_discount_amt))#18, cs_item_sk#8] +Input [3]: [cs_item_sk#7, sum#13, count#14] +Keys [1]: [cs_item_sk#7] +Functions [1]: [avg(UnscaledValue(cs_ext_discount_amt#8))] +Aggregate Attributes [1]: [avg(UnscaledValue(cs_ext_discount_amt#8))#15] +Results [2]: [CheckOverflow((1.300000 * promote_precision(cast((avg(UnscaledValue(cs_ext_discount_amt#8))#15 / 100.0) as decimal(11,6)))), DecimalType(14,7)) AS (1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#7] (20) Filter [codegen id : 4] -Input [2]: [(1.3 * avg(cs_ext_discount_amt))#18, cs_item_sk#8] -Condition : isnotnull((1.3 * avg(cs_ext_discount_amt))#18) +Input [2]: [(1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#7] +Condition : isnotnull((1.3 * avg(cs_ext_discount_amt))#16) (21) BroadcastExchange -Input [2]: [(1.3 * avg(cs_ext_discount_amt))#18, cs_item_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#19] +Input [2]: [(1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [plan_id=3] (22) BroadcastHashJoin [codegen id : 6] Left keys [1]: [i_item_sk#5] -Right keys [1]: [cs_item_sk#8] -Join condition: (cast(cs_ext_discount_amt#2 as decimal(14,7)) > (1.3 * avg(cs_ext_discount_amt))#18) +Right keys [1]: [cs_item_sk#7] +Join condition: (cast(cs_ext_discount_amt#2 as decimal(14,7)) > (1.3 * avg(cs_ext_discount_amt))#16) (23) Project [codegen id : 6] Output [1]: [cs_sold_date_sk#3] -Input [5]: [cs_ext_discount_amt#2, cs_sold_date_sk#3, i_item_sk#5, (1.3 * avg(cs_ext_discount_amt))#18, cs_item_sk#8] +Input [5]: [cs_ext_discount_amt#2, cs_sold_date_sk#3, i_item_sk#5, (1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#7] (24) ReusedExchange [Reuses operator id: 32] -Output [1]: [d_date_sk#20] +Output [1]: [d_date_sk#17] (25) BroadcastHashJoin [codegen id : 6] Left keys [1]: [cs_sold_date_sk#3] -Right keys [1]: [d_date_sk#20] +Right keys [1]: [d_date_sk#17] Join condition: None (26) Project [codegen id : 6] -Output [1]: [1 AS excess discount amount #21] -Input [2]: [cs_sold_date_sk#3, d_date_sk#20] +Output [1]: [1 AS excess discount amount #18] +Input [2]: [cs_sold_date_sk#3, d_date_sk#17] (27) CollectLimit -Input [1]: [excess discount amount #21] +Input [1]: [excess discount amount #18] Arguments: 100 ===== Subqueries ===== @@ -163,27 +163,27 @@ BroadcastExchange (32) (28) Scan parquet default.date_dim -Output [2]: [d_date_sk#20, d_date#22] +Output [2]: [d_date_sk#17, d_date#19] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-01-27), LessThanOrEqual(d_date,2000-04-26), IsNotNull(d_date_sk)] ReadSchema: struct (29) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#20, d_date#22] +Input [2]: [d_date_sk#17, d_date#19] (30) Filter [codegen id : 1] -Input [2]: [d_date_sk#20, d_date#22] -Condition : (((isnotnull(d_date#22) AND (d_date#22 >= 2000-01-27)) AND (d_date#22 <= 2000-04-26)) AND isnotnull(d_date_sk#20)) +Input [2]: [d_date_sk#17, d_date#19] +Condition : (((isnotnull(d_date#19) AND (d_date#19 >= 2000-01-27)) AND (d_date#19 <= 2000-04-26)) AND isnotnull(d_date_sk#17)) (31) Project [codegen id : 1] -Output [1]: [d_date_sk#20] -Input [2]: [d_date_sk#20, d_date#22] +Output [1]: [d_date_sk#17] +Input [2]: [d_date_sk#17, d_date#19] (32) BroadcastExchange -Input [1]: [d_date_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#23] +Input [1]: [d_date_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] -Subquery:2 Hosting operator id = 11 Hosting Expression = cs_sold_date_sk#10 IN dynamicpruning#4 +Subquery:2 Hosting operator id = 11 Hosting Expression = cs_sold_date_sk#9 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33.sf100/explain.txt index b1e601e2093ae..2eb042f1dd8ae 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33.sf100/explain.txt @@ -125,7 +125,7 @@ Input [2]: [i_category#9, i_manufact_id#10] (14) BroadcastExchange Input [1]: [i_manufact_id#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (15) BroadcastHashJoin [codegen id : 3] Left keys [1]: [i_manufact_id#8] @@ -134,7 +134,7 @@ Join condition: None (16) BroadcastExchange Input [2]: [i_item_sk#7, i_manufact_id#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] @@ -146,215 +146,215 @@ Output [3]: [ss_addr_sk#2, ss_ext_sales_price#3, i_manufact_id#8] Input [5]: [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3, i_item_sk#7, i_manufact_id#8] (19) Scan parquet default.customer_address -Output [2]: [ca_address_sk#13, ca_gmt_offset#14] +Output [2]: [ca_address_sk#11, ca_gmt_offset#12] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_gmt_offset), EqualTo(ca_gmt_offset,-5.00), IsNotNull(ca_address_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 4] -Input [2]: [ca_address_sk#13, ca_gmt_offset#14] +Input [2]: [ca_address_sk#11, ca_gmt_offset#12] (21) Filter [codegen id : 4] -Input [2]: [ca_address_sk#13, ca_gmt_offset#14] -Condition : ((isnotnull(ca_gmt_offset#14) AND (ca_gmt_offset#14 = -5.00)) AND isnotnull(ca_address_sk#13)) +Input [2]: [ca_address_sk#11, ca_gmt_offset#12] +Condition : ((isnotnull(ca_gmt_offset#12) AND (ca_gmt_offset#12 = -5.00)) AND isnotnull(ca_address_sk#11)) (22) Project [codegen id : 4] -Output [1]: [ca_address_sk#13] -Input [2]: [ca_address_sk#13, ca_gmt_offset#14] +Output [1]: [ca_address_sk#11] +Input [2]: [ca_address_sk#11, ca_gmt_offset#12] (23) BroadcastExchange -Input [1]: [ca_address_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [ca_address_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_addr_sk#2] -Right keys [1]: [ca_address_sk#13] +Right keys [1]: [ca_address_sk#11] Join condition: None (25) Project [codegen id : 5] Output [2]: [ss_ext_sales_price#3, i_manufact_id#8] -Input [4]: [ss_addr_sk#2, ss_ext_sales_price#3, i_manufact_id#8, ca_address_sk#13] +Input [4]: [ss_addr_sk#2, ss_ext_sales_price#3, i_manufact_id#8, ca_address_sk#11] (26) HashAggregate [codegen id : 5] Input [2]: [ss_ext_sales_price#3, i_manufact_id#8] Keys [1]: [i_manufact_id#8] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [1]: [sum#16] -Results [2]: [i_manufact_id#8, sum#17] +Aggregate Attributes [1]: [sum#13] +Results [2]: [i_manufact_id#8, sum#14] (27) Exchange -Input [2]: [i_manufact_id#8, sum#17] -Arguments: hashpartitioning(i_manufact_id#8, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [2]: [i_manufact_id#8, sum#14] +Arguments: hashpartitioning(i_manufact_id#8, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 6] -Input [2]: [i_manufact_id#8, sum#17] +Input [2]: [i_manufact_id#8, sum#14] Keys [1]: [i_manufact_id#8] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#3))#19] -Results [2]: [i_manufact_id#8, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#19,17,2) AS total_sales#20] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#3))#15] +Results [2]: [i_manufact_id#8, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#15,17,2) AS total_sales#16] (29) Scan parquet default.catalog_sales -Output [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] +Output [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#24), dynamicpruningexpression(cs_sold_date_sk#24 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#20), dynamicpruningexpression(cs_sold_date_sk#20 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cs_bill_addr_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 11] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] (31) Filter [codegen id : 11] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] -Condition : (isnotnull(cs_bill_addr_sk#21) AND isnotnull(cs_item_sk#22)) +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] +Condition : (isnotnull(cs_bill_addr_sk#17) AND isnotnull(cs_item_sk#18)) (32) ReusedExchange [Reuses operator id: 68] -Output [1]: [d_date_sk#25] +Output [1]: [d_date_sk#21] (33) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_sold_date_sk#24] -Right keys [1]: [d_date_sk#25] +Left keys [1]: [cs_sold_date_sk#20] +Right keys [1]: [d_date_sk#21] Join condition: None (34) Project [codegen id : 11] -Output [3]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23] -Input [5]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24, d_date_sk#25] +Output [3]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19] +Input [5]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20, d_date_sk#21] (35) ReusedExchange [Reuses operator id: 16] -Output [2]: [i_item_sk#26, i_manufact_id#27] +Output [2]: [i_item_sk#22, i_manufact_id#23] (36) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_item_sk#22] -Right keys [1]: [i_item_sk#26] +Left keys [1]: [cs_item_sk#18] +Right keys [1]: [i_item_sk#22] Join condition: None (37) Project [codegen id : 11] -Output [3]: [cs_bill_addr_sk#21, cs_ext_sales_price#23, i_manufact_id#27] -Input [5]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, i_item_sk#26, i_manufact_id#27] +Output [3]: [cs_bill_addr_sk#17, cs_ext_sales_price#19, i_manufact_id#23] +Input [5]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, i_item_sk#22, i_manufact_id#23] (38) ReusedExchange [Reuses operator id: 23] -Output [1]: [ca_address_sk#28] +Output [1]: [ca_address_sk#24] (39) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_bill_addr_sk#21] -Right keys [1]: [ca_address_sk#28] +Left keys [1]: [cs_bill_addr_sk#17] +Right keys [1]: [ca_address_sk#24] Join condition: None (40) Project [codegen id : 11] -Output [2]: [cs_ext_sales_price#23, i_manufact_id#27] -Input [4]: [cs_bill_addr_sk#21, cs_ext_sales_price#23, i_manufact_id#27, ca_address_sk#28] +Output [2]: [cs_ext_sales_price#19, i_manufact_id#23] +Input [4]: [cs_bill_addr_sk#17, cs_ext_sales_price#19, i_manufact_id#23, ca_address_sk#24] (41) HashAggregate [codegen id : 11] -Input [2]: [cs_ext_sales_price#23, i_manufact_id#27] -Keys [1]: [i_manufact_id#27] -Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#23))] -Aggregate Attributes [1]: [sum#29] -Results [2]: [i_manufact_id#27, sum#30] +Input [2]: [cs_ext_sales_price#19, i_manufact_id#23] +Keys [1]: [i_manufact_id#23] +Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#19))] +Aggregate Attributes [1]: [sum#25] +Results [2]: [i_manufact_id#23, sum#26] (42) Exchange -Input [2]: [i_manufact_id#27, sum#30] -Arguments: hashpartitioning(i_manufact_id#27, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [2]: [i_manufact_id#23, sum#26] +Arguments: hashpartitioning(i_manufact_id#23, 5), ENSURE_REQUIREMENTS, [plan_id=5] (43) HashAggregate [codegen id : 12] -Input [2]: [i_manufact_id#27, sum#30] -Keys [1]: [i_manufact_id#27] -Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#23))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#23))#32] -Results [2]: [i_manufact_id#27, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#23))#32,17,2) AS total_sales#33] +Input [2]: [i_manufact_id#23, sum#26] +Keys [1]: [i_manufact_id#23] +Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#19))] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#19))#27] +Results [2]: [i_manufact_id#23, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#19))#27,17,2) AS total_sales#28] (44) Scan parquet default.web_sales -Output [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] +Output [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#37), dynamicpruningexpression(ws_sold_date_sk#37 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#32), dynamicpruningexpression(ws_sold_date_sk#32 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_bill_addr_sk), IsNotNull(ws_item_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 17] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] (46) Filter [codegen id : 17] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] -Condition : (isnotnull(ws_bill_addr_sk#35) AND isnotnull(ws_item_sk#34)) +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] +Condition : (isnotnull(ws_bill_addr_sk#30) AND isnotnull(ws_item_sk#29)) (47) ReusedExchange [Reuses operator id: 68] -Output [1]: [d_date_sk#38] +Output [1]: [d_date_sk#33] (48) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_sold_date_sk#37] -Right keys [1]: [d_date_sk#38] +Left keys [1]: [ws_sold_date_sk#32] +Right keys [1]: [d_date_sk#33] Join condition: None (49) Project [codegen id : 17] -Output [3]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36] -Input [5]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37, d_date_sk#38] +Output [3]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31] +Input [5]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32, d_date_sk#33] (50) ReusedExchange [Reuses operator id: 16] -Output [2]: [i_item_sk#39, i_manufact_id#40] +Output [2]: [i_item_sk#34, i_manufact_id#35] (51) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_item_sk#34] -Right keys [1]: [i_item_sk#39] +Left keys [1]: [ws_item_sk#29] +Right keys [1]: [i_item_sk#34] Join condition: None (52) Project [codegen id : 17] -Output [3]: [ws_bill_addr_sk#35, ws_ext_sales_price#36, i_manufact_id#40] -Input [5]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, i_item_sk#39, i_manufact_id#40] +Output [3]: [ws_bill_addr_sk#30, ws_ext_sales_price#31, i_manufact_id#35] +Input [5]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, i_item_sk#34, i_manufact_id#35] (53) ReusedExchange [Reuses operator id: 23] -Output [1]: [ca_address_sk#41] +Output [1]: [ca_address_sk#36] (54) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_bill_addr_sk#35] -Right keys [1]: [ca_address_sk#41] +Left keys [1]: [ws_bill_addr_sk#30] +Right keys [1]: [ca_address_sk#36] Join condition: None (55) Project [codegen id : 17] -Output [2]: [ws_ext_sales_price#36, i_manufact_id#40] -Input [4]: [ws_bill_addr_sk#35, ws_ext_sales_price#36, i_manufact_id#40, ca_address_sk#41] +Output [2]: [ws_ext_sales_price#31, i_manufact_id#35] +Input [4]: [ws_bill_addr_sk#30, ws_ext_sales_price#31, i_manufact_id#35, ca_address_sk#36] (56) HashAggregate [codegen id : 17] -Input [2]: [ws_ext_sales_price#36, i_manufact_id#40] -Keys [1]: [i_manufact_id#40] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#36))] -Aggregate Attributes [1]: [sum#42] -Results [2]: [i_manufact_id#40, sum#43] +Input [2]: [ws_ext_sales_price#31, i_manufact_id#35] +Keys [1]: [i_manufact_id#35] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#31))] +Aggregate Attributes [1]: [sum#37] +Results [2]: [i_manufact_id#35, sum#38] (57) Exchange -Input [2]: [i_manufact_id#40, sum#43] -Arguments: hashpartitioning(i_manufact_id#40, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [2]: [i_manufact_id#35, sum#38] +Arguments: hashpartitioning(i_manufact_id#35, 5), ENSURE_REQUIREMENTS, [plan_id=6] (58) HashAggregate [codegen id : 18] -Input [2]: [i_manufact_id#40, sum#43] -Keys [1]: [i_manufact_id#40] -Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#36))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#36))#45] -Results [2]: [i_manufact_id#40, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#36))#45,17,2) AS total_sales#46] +Input [2]: [i_manufact_id#35, sum#38] +Keys [1]: [i_manufact_id#35] +Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#31))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#31))#39] +Results [2]: [i_manufact_id#35, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#31))#39,17,2) AS total_sales#40] (59) Union (60) HashAggregate [codegen id : 19] -Input [2]: [i_manufact_id#8, total_sales#20] +Input [2]: [i_manufact_id#8, total_sales#16] Keys [1]: [i_manufact_id#8] -Functions [1]: [partial_sum(total_sales#20)] -Aggregate Attributes [2]: [sum#47, isEmpty#48] -Results [3]: [i_manufact_id#8, sum#49, isEmpty#50] +Functions [1]: [partial_sum(total_sales#16)] +Aggregate Attributes [2]: [sum#41, isEmpty#42] +Results [3]: [i_manufact_id#8, sum#43, isEmpty#44] (61) Exchange -Input [3]: [i_manufact_id#8, sum#49, isEmpty#50] -Arguments: hashpartitioning(i_manufact_id#8, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [3]: [i_manufact_id#8, sum#43, isEmpty#44] +Arguments: hashpartitioning(i_manufact_id#8, 5), ENSURE_REQUIREMENTS, [plan_id=7] (62) HashAggregate [codegen id : 20] -Input [3]: [i_manufact_id#8, sum#49, isEmpty#50] +Input [3]: [i_manufact_id#8, sum#43, isEmpty#44] Keys [1]: [i_manufact_id#8] -Functions [1]: [sum(total_sales#20)] -Aggregate Attributes [1]: [sum(total_sales#20)#52] -Results [2]: [i_manufact_id#8, sum(total_sales#20)#52 AS total_sales#53] +Functions [1]: [sum(total_sales#16)] +Aggregate Attributes [1]: [sum(total_sales#16)#45] +Results [2]: [i_manufact_id#8, sum(total_sales#16)#45 AS total_sales#46] (63) TakeOrderedAndProject -Input [2]: [i_manufact_id#8, total_sales#53] -Arguments: 100, [total_sales#53 ASC NULLS FIRST], [i_manufact_id#8, total_sales#53] +Input [2]: [i_manufact_id#8, total_sales#46] +Arguments: 100, [total_sales#46 ASC NULLS FIRST], [i_manufact_id#8, total_sales#46] ===== Subqueries ===== @@ -367,29 +367,29 @@ BroadcastExchange (68) (64) Scan parquet default.date_dim -Output [3]: [d_date_sk#6, d_year#54, d_moy#55] +Output [3]: [d_date_sk#6, d_year#47, d_moy#48] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,5), IsNotNull(d_date_sk)] ReadSchema: struct (65) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] (66) Filter [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] -Condition : ((((isnotnull(d_year#54) AND isnotnull(d_moy#55)) AND (d_year#54 = 1998)) AND (d_moy#55 = 5)) AND isnotnull(d_date_sk#6)) +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] +Condition : ((((isnotnull(d_year#47) AND isnotnull(d_moy#48)) AND (d_year#47 = 1998)) AND (d_moy#48 = 5)) AND isnotnull(d_date_sk#6)) (67) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] (68) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#56] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 29 Hosting Expression = cs_sold_date_sk#24 IN dynamicpruning#5 +Subquery:2 Hosting operator id = 29 Hosting Expression = cs_sold_date_sk#20 IN dynamicpruning#5 -Subquery:3 Hosting operator id = 44 Hosting Expression = ws_sold_date_sk#37 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 44 Hosting Expression = ws_sold_date_sk#32 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33/explain.txt index 2dc29dcb3a78e..e7285697fcf83 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q33/explain.txt @@ -111,7 +111,7 @@ Input [2]: [ca_address_sk#7, ca_gmt_offset#8] (11) BroadcastExchange Input [1]: [ca_address_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_addr_sk#2] @@ -123,238 +123,238 @@ Output [2]: [ss_item_sk#1, ss_ext_sales_price#3] Input [4]: [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3, ca_address_sk#7] (14) Scan parquet default.item -Output [2]: [i_item_sk#10, i_manufact_id#11] +Output [2]: [i_item_sk#9, i_manufact_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#10, i_manufact_id#11] +Input [2]: [i_item_sk#9, i_manufact_id#10] (16) Filter [codegen id : 4] -Input [2]: [i_item_sk#10, i_manufact_id#11] -Condition : isnotnull(i_item_sk#10) +Input [2]: [i_item_sk#9, i_manufact_id#10] +Condition : isnotnull(i_item_sk#9) (17) Scan parquet default.item -Output [2]: [i_category#12, i_manufact_id#13] +Output [2]: [i_category#11, i_manufact_id#12] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_category), EqualTo(i_category,Electronics )] ReadSchema: struct (18) ColumnarToRow [codegen id : 3] -Input [2]: [i_category#12, i_manufact_id#13] +Input [2]: [i_category#11, i_manufact_id#12] (19) Filter [codegen id : 3] -Input [2]: [i_category#12, i_manufact_id#13] -Condition : (isnotnull(i_category#12) AND (i_category#12 = Electronics )) +Input [2]: [i_category#11, i_manufact_id#12] +Condition : (isnotnull(i_category#11) AND (i_category#11 = Electronics )) (20) Project [codegen id : 3] -Output [1]: [i_manufact_id#13] -Input [2]: [i_category#12, i_manufact_id#13] +Output [1]: [i_manufact_id#12] +Input [2]: [i_category#11, i_manufact_id#12] (21) BroadcastExchange -Input [1]: [i_manufact_id#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Input [1]: [i_manufact_id#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (22) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [i_manufact_id#11] -Right keys [1]: [i_manufact_id#13] +Left keys [1]: [i_manufact_id#10] +Right keys [1]: [i_manufact_id#12] Join condition: None (23) BroadcastExchange -Input [2]: [i_item_sk#10, i_manufact_id#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Input [2]: [i_item_sk#9, i_manufact_id#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#10] +Right keys [1]: [i_item_sk#9] Join condition: None (25) Project [codegen id : 5] -Output [2]: [ss_ext_sales_price#3, i_manufact_id#11] -Input [4]: [ss_item_sk#1, ss_ext_sales_price#3, i_item_sk#10, i_manufact_id#11] +Output [2]: [ss_ext_sales_price#3, i_manufact_id#10] +Input [4]: [ss_item_sk#1, ss_ext_sales_price#3, i_item_sk#9, i_manufact_id#10] (26) HashAggregate [codegen id : 5] -Input [2]: [ss_ext_sales_price#3, i_manufact_id#11] -Keys [1]: [i_manufact_id#11] +Input [2]: [ss_ext_sales_price#3, i_manufact_id#10] +Keys [1]: [i_manufact_id#10] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [1]: [sum#16] -Results [2]: [i_manufact_id#11, sum#17] +Aggregate Attributes [1]: [sum#13] +Results [2]: [i_manufact_id#10, sum#14] (27) Exchange -Input [2]: [i_manufact_id#11, sum#17] -Arguments: hashpartitioning(i_manufact_id#11, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [2]: [i_manufact_id#10, sum#14] +Arguments: hashpartitioning(i_manufact_id#10, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 6] -Input [2]: [i_manufact_id#11, sum#17] -Keys [1]: [i_manufact_id#11] +Input [2]: [i_manufact_id#10, sum#14] +Keys [1]: [i_manufact_id#10] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#3))#19] -Results [2]: [i_manufact_id#11, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#19,17,2) AS total_sales#20] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#3))#15] +Results [2]: [i_manufact_id#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#15,17,2) AS total_sales#16] (29) Scan parquet default.catalog_sales -Output [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] +Output [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#24), dynamicpruningexpression(cs_sold_date_sk#24 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#20), dynamicpruningexpression(cs_sold_date_sk#20 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cs_bill_addr_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 11] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] (31) Filter [codegen id : 11] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] -Condition : (isnotnull(cs_bill_addr_sk#21) AND isnotnull(cs_item_sk#22)) +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] +Condition : (isnotnull(cs_bill_addr_sk#17) AND isnotnull(cs_item_sk#18)) (32) ReusedExchange [Reuses operator id: 68] -Output [1]: [d_date_sk#25] +Output [1]: [d_date_sk#21] (33) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_sold_date_sk#24] -Right keys [1]: [d_date_sk#25] +Left keys [1]: [cs_sold_date_sk#20] +Right keys [1]: [d_date_sk#21] Join condition: None (34) Project [codegen id : 11] -Output [3]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23] -Input [5]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24, d_date_sk#25] +Output [3]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19] +Input [5]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20, d_date_sk#21] (35) ReusedExchange [Reuses operator id: 11] -Output [1]: [ca_address_sk#26] +Output [1]: [ca_address_sk#22] (36) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_bill_addr_sk#21] -Right keys [1]: [ca_address_sk#26] +Left keys [1]: [cs_bill_addr_sk#17] +Right keys [1]: [ca_address_sk#22] Join condition: None (37) Project [codegen id : 11] -Output [2]: [cs_item_sk#22, cs_ext_sales_price#23] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, ca_address_sk#26] +Output [2]: [cs_item_sk#18, cs_ext_sales_price#19] +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, ca_address_sk#22] (38) ReusedExchange [Reuses operator id: 23] -Output [2]: [i_item_sk#27, i_manufact_id#28] +Output [2]: [i_item_sk#23, i_manufact_id#24] (39) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_item_sk#22] -Right keys [1]: [i_item_sk#27] +Left keys [1]: [cs_item_sk#18] +Right keys [1]: [i_item_sk#23] Join condition: None (40) Project [codegen id : 11] -Output [2]: [cs_ext_sales_price#23, i_manufact_id#28] -Input [4]: [cs_item_sk#22, cs_ext_sales_price#23, i_item_sk#27, i_manufact_id#28] +Output [2]: [cs_ext_sales_price#19, i_manufact_id#24] +Input [4]: [cs_item_sk#18, cs_ext_sales_price#19, i_item_sk#23, i_manufact_id#24] (41) HashAggregate [codegen id : 11] -Input [2]: [cs_ext_sales_price#23, i_manufact_id#28] -Keys [1]: [i_manufact_id#28] -Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#23))] -Aggregate Attributes [1]: [sum#29] -Results [2]: [i_manufact_id#28, sum#30] +Input [2]: [cs_ext_sales_price#19, i_manufact_id#24] +Keys [1]: [i_manufact_id#24] +Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#19))] +Aggregate Attributes [1]: [sum#25] +Results [2]: [i_manufact_id#24, sum#26] (42) Exchange -Input [2]: [i_manufact_id#28, sum#30] -Arguments: hashpartitioning(i_manufact_id#28, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [2]: [i_manufact_id#24, sum#26] +Arguments: hashpartitioning(i_manufact_id#24, 5), ENSURE_REQUIREMENTS, [plan_id=5] (43) HashAggregate [codegen id : 12] -Input [2]: [i_manufact_id#28, sum#30] -Keys [1]: [i_manufact_id#28] -Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#23))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#23))#32] -Results [2]: [i_manufact_id#28, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#23))#32,17,2) AS total_sales#33] +Input [2]: [i_manufact_id#24, sum#26] +Keys [1]: [i_manufact_id#24] +Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#19))] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#19))#27] +Results [2]: [i_manufact_id#24, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#19))#27,17,2) AS total_sales#28] (44) Scan parquet default.web_sales -Output [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] +Output [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#37), dynamicpruningexpression(ws_sold_date_sk#37 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#32), dynamicpruningexpression(ws_sold_date_sk#32 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_bill_addr_sk), IsNotNull(ws_item_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 17] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] (46) Filter [codegen id : 17] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] -Condition : (isnotnull(ws_bill_addr_sk#35) AND isnotnull(ws_item_sk#34)) +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] +Condition : (isnotnull(ws_bill_addr_sk#30) AND isnotnull(ws_item_sk#29)) (47) ReusedExchange [Reuses operator id: 68] -Output [1]: [d_date_sk#38] +Output [1]: [d_date_sk#33] (48) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_sold_date_sk#37] -Right keys [1]: [d_date_sk#38] +Left keys [1]: [ws_sold_date_sk#32] +Right keys [1]: [d_date_sk#33] Join condition: None (49) Project [codegen id : 17] -Output [3]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36] -Input [5]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37, d_date_sk#38] +Output [3]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31] +Input [5]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32, d_date_sk#33] (50) ReusedExchange [Reuses operator id: 11] -Output [1]: [ca_address_sk#39] +Output [1]: [ca_address_sk#34] (51) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_bill_addr_sk#35] -Right keys [1]: [ca_address_sk#39] +Left keys [1]: [ws_bill_addr_sk#30] +Right keys [1]: [ca_address_sk#34] Join condition: None (52) Project [codegen id : 17] -Output [2]: [ws_item_sk#34, ws_ext_sales_price#36] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ca_address_sk#39] +Output [2]: [ws_item_sk#29, ws_ext_sales_price#31] +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ca_address_sk#34] (53) ReusedExchange [Reuses operator id: 23] -Output [2]: [i_item_sk#40, i_manufact_id#41] +Output [2]: [i_item_sk#35, i_manufact_id#36] (54) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_item_sk#34] -Right keys [1]: [i_item_sk#40] +Left keys [1]: [ws_item_sk#29] +Right keys [1]: [i_item_sk#35] Join condition: None (55) Project [codegen id : 17] -Output [2]: [ws_ext_sales_price#36, i_manufact_id#41] -Input [4]: [ws_item_sk#34, ws_ext_sales_price#36, i_item_sk#40, i_manufact_id#41] +Output [2]: [ws_ext_sales_price#31, i_manufact_id#36] +Input [4]: [ws_item_sk#29, ws_ext_sales_price#31, i_item_sk#35, i_manufact_id#36] (56) HashAggregate [codegen id : 17] -Input [2]: [ws_ext_sales_price#36, i_manufact_id#41] -Keys [1]: [i_manufact_id#41] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#36))] -Aggregate Attributes [1]: [sum#42] -Results [2]: [i_manufact_id#41, sum#43] +Input [2]: [ws_ext_sales_price#31, i_manufact_id#36] +Keys [1]: [i_manufact_id#36] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#31))] +Aggregate Attributes [1]: [sum#37] +Results [2]: [i_manufact_id#36, sum#38] (57) Exchange -Input [2]: [i_manufact_id#41, sum#43] -Arguments: hashpartitioning(i_manufact_id#41, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [2]: [i_manufact_id#36, sum#38] +Arguments: hashpartitioning(i_manufact_id#36, 5), ENSURE_REQUIREMENTS, [plan_id=6] (58) HashAggregate [codegen id : 18] -Input [2]: [i_manufact_id#41, sum#43] -Keys [1]: [i_manufact_id#41] -Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#36))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#36))#45] -Results [2]: [i_manufact_id#41, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#36))#45,17,2) AS total_sales#46] +Input [2]: [i_manufact_id#36, sum#38] +Keys [1]: [i_manufact_id#36] +Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#31))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#31))#39] +Results [2]: [i_manufact_id#36, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#31))#39,17,2) AS total_sales#40] (59) Union (60) HashAggregate [codegen id : 19] -Input [2]: [i_manufact_id#11, total_sales#20] -Keys [1]: [i_manufact_id#11] -Functions [1]: [partial_sum(total_sales#20)] -Aggregate Attributes [2]: [sum#47, isEmpty#48] -Results [3]: [i_manufact_id#11, sum#49, isEmpty#50] +Input [2]: [i_manufact_id#10, total_sales#16] +Keys [1]: [i_manufact_id#10] +Functions [1]: [partial_sum(total_sales#16)] +Aggregate Attributes [2]: [sum#41, isEmpty#42] +Results [3]: [i_manufact_id#10, sum#43, isEmpty#44] (61) Exchange -Input [3]: [i_manufact_id#11, sum#49, isEmpty#50] -Arguments: hashpartitioning(i_manufact_id#11, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [3]: [i_manufact_id#10, sum#43, isEmpty#44] +Arguments: hashpartitioning(i_manufact_id#10, 5), ENSURE_REQUIREMENTS, [plan_id=7] (62) HashAggregate [codegen id : 20] -Input [3]: [i_manufact_id#11, sum#49, isEmpty#50] -Keys [1]: [i_manufact_id#11] -Functions [1]: [sum(total_sales#20)] -Aggregate Attributes [1]: [sum(total_sales#20)#52] -Results [2]: [i_manufact_id#11, sum(total_sales#20)#52 AS total_sales#53] +Input [3]: [i_manufact_id#10, sum#43, isEmpty#44] +Keys [1]: [i_manufact_id#10] +Functions [1]: [sum(total_sales#16)] +Aggregate Attributes [1]: [sum(total_sales#16)#45] +Results [2]: [i_manufact_id#10, sum(total_sales#16)#45 AS total_sales#46] (63) TakeOrderedAndProject -Input [2]: [i_manufact_id#11, total_sales#53] -Arguments: 100, [total_sales#53 ASC NULLS FIRST], [i_manufact_id#11, total_sales#53] +Input [2]: [i_manufact_id#10, total_sales#46] +Arguments: 100, [total_sales#46 ASC NULLS FIRST], [i_manufact_id#10, total_sales#46] ===== Subqueries ===== @@ -367,29 +367,29 @@ BroadcastExchange (68) (64) Scan parquet default.date_dim -Output [3]: [d_date_sk#6, d_year#54, d_moy#55] +Output [3]: [d_date_sk#6, d_year#47, d_moy#48] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,5), IsNotNull(d_date_sk)] ReadSchema: struct (65) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] (66) Filter [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] -Condition : ((((isnotnull(d_year#54) AND isnotnull(d_moy#55)) AND (d_year#54 = 1998)) AND (d_moy#55 = 5)) AND isnotnull(d_date_sk#6)) +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] +Condition : ((((isnotnull(d_year#47) AND isnotnull(d_moy#48)) AND (d_year#47 = 1998)) AND (d_moy#48 = 5)) AND isnotnull(d_date_sk#6)) (67) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] (68) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#56] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 29 Hosting Expression = cs_sold_date_sk#24 IN dynamicpruning#5 +Subquery:2 Hosting operator id = 29 Hosting Expression = cs_sold_date_sk#20 IN dynamicpruning#5 -Subquery:3 Hosting operator id = 44 Hosting Expression = ws_sold_date_sk#37 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 44 Hosting Expression = ws_sold_date_sk#32 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35.sf100/explain.txt index 796fc705e2651..5e39492758d51 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35.sf100/explain.txt @@ -70,115 +70,115 @@ Condition : (isnotnull(c_current_addr_sk#5) AND isnotnull(c_current_cdemo_sk#4)) (4) Exchange Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] -Arguments: hashpartitioning(c_customer_sk#3, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(c_customer_sk#3, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Arguments: [c_customer_sk#3 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_sales -Output [2]: [ss_customer_sk#7, ss_sold_date_sk#8] +Output [2]: [ss_customer_sk#6, ss_sold_date_sk#7] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#8), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)] ReadSchema: struct (7) ColumnarToRow [codegen id : 4] -Input [2]: [ss_customer_sk#7, ss_sold_date_sk#8] +Input [2]: [ss_customer_sk#6, ss_sold_date_sk#7] (8) ReusedExchange [Reuses operator id: 58] -Output [1]: [d_date_sk#10] +Output [1]: [d_date_sk#9] (9) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#10] +Left keys [1]: [ss_sold_date_sk#7] +Right keys [1]: [d_date_sk#9] Join condition: None (10) Project [codegen id : 4] -Output [1]: [ss_customer_sk#7] -Input [3]: [ss_customer_sk#7, ss_sold_date_sk#8, d_date_sk#10] +Output [1]: [ss_customer_sk#6] +Input [3]: [ss_customer_sk#6, ss_sold_date_sk#7, d_date_sk#9] (11) Exchange -Input [1]: [ss_customer_sk#7] -Arguments: hashpartitioning(ss_customer_sk#7, 5), ENSURE_REQUIREMENTS, [id=#11] +Input [1]: [ss_customer_sk#6] +Arguments: hashpartitioning(ss_customer_sk#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 5] -Input [1]: [ss_customer_sk#7] -Arguments: [ss_customer_sk#7 ASC NULLS FIRST], false, 0 +Input [1]: [ss_customer_sk#6] +Arguments: [ss_customer_sk#6 ASC NULLS FIRST], false, 0 (13) SortMergeJoin [codegen id : 6] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [ss_customer_sk#7] +Right keys [1]: [ss_customer_sk#6] Join condition: None (14) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#12, ws_sold_date_sk#13] +Output [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#13), dynamicpruningexpression(ws_sold_date_sk#13 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(ws_sold_date_sk#11), dynamicpruningexpression(ws_sold_date_sk#11 IN dynamicpruning#8)] ReadSchema: struct (15) ColumnarToRow [codegen id : 8] -Input [2]: [ws_bill_customer_sk#12, ws_sold_date_sk#13] +Input [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] (16) ReusedExchange [Reuses operator id: 58] -Output [1]: [d_date_sk#14] +Output [1]: [d_date_sk#12] (17) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ws_sold_date_sk#13] -Right keys [1]: [d_date_sk#14] +Left keys [1]: [ws_sold_date_sk#11] +Right keys [1]: [d_date_sk#12] Join condition: None (18) Project [codegen id : 8] -Output [1]: [ws_bill_customer_sk#12] -Input [3]: [ws_bill_customer_sk#12, ws_sold_date_sk#13, d_date_sk#14] +Output [1]: [ws_bill_customer_sk#10] +Input [3]: [ws_bill_customer_sk#10, ws_sold_date_sk#11, d_date_sk#12] (19) Exchange -Input [1]: [ws_bill_customer_sk#12] -Arguments: hashpartitioning(ws_bill_customer_sk#12, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [1]: [ws_bill_customer_sk#10] +Arguments: hashpartitioning(ws_bill_customer_sk#10, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) Sort [codegen id : 9] -Input [1]: [ws_bill_customer_sk#12] -Arguments: [ws_bill_customer_sk#12 ASC NULLS FIRST], false, 0 +Input [1]: [ws_bill_customer_sk#10] +Arguments: [ws_bill_customer_sk#10 ASC NULLS FIRST], false, 0 (21) SortMergeJoin [codegen id : 10] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [ws_bill_customer_sk#12] +Right keys [1]: [ws_bill_customer_sk#10] Join condition: None (22) Scan parquet default.catalog_sales -Output [2]: [cs_ship_customer_sk#16, cs_sold_date_sk#17] +Output [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#17), dynamicpruningexpression(cs_sold_date_sk#17 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(cs_sold_date_sk#14), dynamicpruningexpression(cs_sold_date_sk#14 IN dynamicpruning#8)] ReadSchema: struct (23) ColumnarToRow [codegen id : 12] -Input [2]: [cs_ship_customer_sk#16, cs_sold_date_sk#17] +Input [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] (24) ReusedExchange [Reuses operator id: 58] -Output [1]: [d_date_sk#18] +Output [1]: [d_date_sk#15] (25) BroadcastHashJoin [codegen id : 12] -Left keys [1]: [cs_sold_date_sk#17] -Right keys [1]: [d_date_sk#18] +Left keys [1]: [cs_sold_date_sk#14] +Right keys [1]: [d_date_sk#15] Join condition: None (26) Project [codegen id : 12] -Output [1]: [cs_ship_customer_sk#16] -Input [3]: [cs_ship_customer_sk#16, cs_sold_date_sk#17, d_date_sk#18] +Output [1]: [cs_ship_customer_sk#13] +Input [3]: [cs_ship_customer_sk#13, cs_sold_date_sk#14, d_date_sk#15] (27) Exchange -Input [1]: [cs_ship_customer_sk#16] -Arguments: hashpartitioning(cs_ship_customer_sk#16, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [1]: [cs_ship_customer_sk#13] +Arguments: hashpartitioning(cs_ship_customer_sk#13, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) Sort [codegen id : 13] -Input [1]: [cs_ship_customer_sk#16] -Arguments: [cs_ship_customer_sk#16 ASC NULLS FIRST], false, 0 +Input [1]: [cs_ship_customer_sk#13] +Arguments: [cs_ship_customer_sk#13 ASC NULLS FIRST], false, 0 (29) SortMergeJoin [codegen id : 14] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [cs_ship_customer_sk#16] +Right keys [1]: [cs_ship_customer_sk#13] Join condition: None (30) Filter [codegen id : 14] @@ -191,107 +191,107 @@ Input [5]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5, exists#2 (32) Exchange Input [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5] -Arguments: hashpartitioning(c_current_addr_sk#5, 5), ENSURE_REQUIREMENTS, [id=#20] +Arguments: hashpartitioning(c_current_addr_sk#5, 5), ENSURE_REQUIREMENTS, [plan_id=5] (33) Sort [codegen id : 15] Input [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5] Arguments: [c_current_addr_sk#5 ASC NULLS FIRST], false, 0 (34) Scan parquet default.customer_address -Output [2]: [ca_address_sk#21, ca_state#22] +Output [2]: [ca_address_sk#16, ca_state#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 16] -Input [2]: [ca_address_sk#21, ca_state#22] +Input [2]: [ca_address_sk#16, ca_state#17] (36) Filter [codegen id : 16] -Input [2]: [ca_address_sk#21, ca_state#22] -Condition : isnotnull(ca_address_sk#21) +Input [2]: [ca_address_sk#16, ca_state#17] +Condition : isnotnull(ca_address_sk#16) (37) Exchange -Input [2]: [ca_address_sk#21, ca_state#22] -Arguments: hashpartitioning(ca_address_sk#21, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [2]: [ca_address_sk#16, ca_state#17] +Arguments: hashpartitioning(ca_address_sk#16, 5), ENSURE_REQUIREMENTS, [plan_id=6] (38) Sort [codegen id : 17] -Input [2]: [ca_address_sk#21, ca_state#22] -Arguments: [ca_address_sk#21 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#16, ca_state#17] +Arguments: [ca_address_sk#16 ASC NULLS FIRST], false, 0 (39) SortMergeJoin [codegen id : 18] Left keys [1]: [c_current_addr_sk#5] -Right keys [1]: [ca_address_sk#21] +Right keys [1]: [ca_address_sk#16] Join condition: None (40) Project [codegen id : 18] -Output [2]: [c_current_cdemo_sk#4, ca_state#22] -Input [4]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#21, ca_state#22] +Output [2]: [c_current_cdemo_sk#4, ca_state#17] +Input [4]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#16, ca_state#17] (41) Exchange -Input [2]: [c_current_cdemo_sk#4, ca_state#22] -Arguments: hashpartitioning(c_current_cdemo_sk#4, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [2]: [c_current_cdemo_sk#4, ca_state#17] +Arguments: hashpartitioning(c_current_cdemo_sk#4, 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) Sort [codegen id : 19] -Input [2]: [c_current_cdemo_sk#4, ca_state#22] +Input [2]: [c_current_cdemo_sk#4, ca_state#17] Arguments: [c_current_cdemo_sk#4 ASC NULLS FIRST], false, 0 (43) Scan parquet default.customer_demographics -Output [6]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Output [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 20] -Input [6]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] (45) Filter [codegen id : 20] -Input [6]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Condition : isnotnull(cd_demo_sk#25) +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Condition : isnotnull(cd_demo_sk#18) (46) Exchange -Input [6]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Arguments: hashpartitioning(cd_demo_sk#25, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Arguments: hashpartitioning(cd_demo_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=8] (47) Sort [codegen id : 21] -Input [6]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Arguments: [cd_demo_sk#25 ASC NULLS FIRST], false, 0 +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Arguments: [cd_demo_sk#18 ASC NULLS FIRST], false, 0 (48) SortMergeJoin [codegen id : 22] Left keys [1]: [c_current_cdemo_sk#4] -Right keys [1]: [cd_demo_sk#25] +Right keys [1]: [cd_demo_sk#18] Join condition: None (49) Project [codegen id : 22] -Output [6]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Input [8]: [c_current_cdemo_sk#4, ca_state#22, cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Output [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Input [8]: [c_current_cdemo_sk#4, ca_state#17, cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] (50) HashAggregate [codegen id : 22] -Input [6]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Keys [6]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Functions [10]: [partial_count(1), partial_min(cd_dep_count#28), partial_max(cd_dep_count#28), partial_avg(cd_dep_count#28), partial_min(cd_dep_employed_count#29), partial_max(cd_dep_employed_count#29), partial_avg(cd_dep_employed_count#29), partial_min(cd_dep_college_count#30), partial_max(cd_dep_college_count#30), partial_avg(cd_dep_college_count#30)] -Aggregate Attributes [13]: [count#32, min#33, max#34, sum#35, count#36, min#37, max#38, sum#39, count#40, min#41, max#42, sum#43, count#44] -Results [19]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#45, min#46, max#47, sum#48, count#49, min#50, max#51, sum#52, count#53, min#54, max#55, sum#56, count#57] +Input [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Keys [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Functions [10]: [partial_count(1), partial_min(cd_dep_count#21), partial_max(cd_dep_count#21), partial_avg(cd_dep_count#21), partial_min(cd_dep_employed_count#22), partial_max(cd_dep_employed_count#22), partial_avg(cd_dep_employed_count#22), partial_min(cd_dep_college_count#23), partial_max(cd_dep_college_count#23), partial_avg(cd_dep_college_count#23)] +Aggregate Attributes [13]: [count#24, min#25, max#26, sum#27, count#28, min#29, max#30, sum#31, count#32, min#33, max#34, sum#35, count#36] +Results [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, min#38, max#39, sum#40, count#41, min#42, max#43, sum#44, count#45, min#46, max#47, sum#48, count#49] (51) Exchange -Input [19]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#45, min#46, max#47, sum#48, count#49, min#50, max#51, sum#52, count#53, min#54, max#55, sum#56, count#57] -Arguments: hashpartitioning(ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, 5), ENSURE_REQUIREMENTS, [id=#58] +Input [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, min#38, max#39, sum#40, count#41, min#42, max#43, sum#44, count#45, min#46, max#47, sum#48, count#49] +Arguments: hashpartitioning(ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, 5), ENSURE_REQUIREMENTS, [plan_id=9] (52) HashAggregate [codegen id : 23] -Input [19]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#45, min#46, max#47, sum#48, count#49, min#50, max#51, sum#52, count#53, min#54, max#55, sum#56, count#57] -Keys [6]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Functions [10]: [count(1), min(cd_dep_count#28), max(cd_dep_count#28), avg(cd_dep_count#28), min(cd_dep_employed_count#29), max(cd_dep_employed_count#29), avg(cd_dep_employed_count#29), min(cd_dep_college_count#30), max(cd_dep_college_count#30), avg(cd_dep_college_count#30)] -Aggregate Attributes [10]: [count(1)#59, min(cd_dep_count#28)#60, max(cd_dep_count#28)#61, avg(cd_dep_count#28)#62, min(cd_dep_employed_count#29)#63, max(cd_dep_employed_count#29)#64, avg(cd_dep_employed_count#29)#65, min(cd_dep_college_count#30)#66, max(cd_dep_college_count#30)#67, avg(cd_dep_college_count#30)#68] -Results [18]: [ca_state#22, cd_gender#26, cd_marital_status#27, count(1)#59 AS cnt1#69, min(cd_dep_count#28)#60 AS min(cd_dep_count)#70, max(cd_dep_count#28)#61 AS max(cd_dep_count)#71, avg(cd_dep_count#28)#62 AS avg(cd_dep_count)#72, cd_dep_employed_count#29, count(1)#59 AS cnt2#73, min(cd_dep_employed_count#29)#63 AS min(cd_dep_employed_count)#74, max(cd_dep_employed_count#29)#64 AS max(cd_dep_employed_count)#75, avg(cd_dep_employed_count#29)#65 AS avg(cd_dep_employed_count)#76, cd_dep_college_count#30, count(1)#59 AS cnt3#77, min(cd_dep_college_count#30)#66 AS min(cd_dep_college_count)#78, max(cd_dep_college_count#30)#67 AS max(cd_dep_college_count)#79, avg(cd_dep_college_count#30)#68 AS avg(cd_dep_college_count)#80, cd_dep_count#28] +Input [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, min#38, max#39, sum#40, count#41, min#42, max#43, sum#44, count#45, min#46, max#47, sum#48, count#49] +Keys [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Functions [10]: [count(1), min(cd_dep_count#21), max(cd_dep_count#21), avg(cd_dep_count#21), min(cd_dep_employed_count#22), max(cd_dep_employed_count#22), avg(cd_dep_employed_count#22), min(cd_dep_college_count#23), max(cd_dep_college_count#23), avg(cd_dep_college_count#23)] +Aggregate Attributes [10]: [count(1)#50, min(cd_dep_count#21)#51, max(cd_dep_count#21)#52, avg(cd_dep_count#21)#53, min(cd_dep_employed_count#22)#54, max(cd_dep_employed_count#22)#55, avg(cd_dep_employed_count#22)#56, min(cd_dep_college_count#23)#57, max(cd_dep_college_count#23)#58, avg(cd_dep_college_count#23)#59] +Results [18]: [ca_state#17, cd_gender#19, cd_marital_status#20, count(1)#50 AS cnt1#60, min(cd_dep_count#21)#51 AS min(cd_dep_count)#61, max(cd_dep_count#21)#52 AS max(cd_dep_count)#62, avg(cd_dep_count#21)#53 AS avg(cd_dep_count)#63, cd_dep_employed_count#22, count(1)#50 AS cnt2#64, min(cd_dep_employed_count#22)#54 AS min(cd_dep_employed_count)#65, max(cd_dep_employed_count#22)#55 AS max(cd_dep_employed_count)#66, avg(cd_dep_employed_count#22)#56 AS avg(cd_dep_employed_count)#67, cd_dep_college_count#23, count(1)#50 AS cnt3#68, min(cd_dep_college_count#23)#57 AS min(cd_dep_college_count)#69, max(cd_dep_college_count#23)#58 AS max(cd_dep_college_count)#70, avg(cd_dep_college_count#23)#59 AS avg(cd_dep_college_count)#71, cd_dep_count#21] (53) TakeOrderedAndProject -Input [18]: [ca_state#22, cd_gender#26, cd_marital_status#27, cnt1#69, min(cd_dep_count)#70, max(cd_dep_count)#71, avg(cd_dep_count)#72, cd_dep_employed_count#29, cnt2#73, min(cd_dep_employed_count)#74, max(cd_dep_employed_count)#75, avg(cd_dep_employed_count)#76, cd_dep_college_count#30, cnt3#77, min(cd_dep_college_count)#78, max(cd_dep_college_count)#79, avg(cd_dep_college_count)#80, cd_dep_count#28] -Arguments: 100, [ca_state#22 ASC NULLS FIRST, cd_gender#26 ASC NULLS FIRST, cd_marital_status#27 ASC NULLS FIRST, cd_dep_count#28 ASC NULLS FIRST, cd_dep_employed_count#29 ASC NULLS FIRST, cd_dep_college_count#30 ASC NULLS FIRST], [ca_state#22, cd_gender#26, cd_marital_status#27, cnt1#69, min(cd_dep_count)#70, max(cd_dep_count)#71, avg(cd_dep_count)#72, cd_dep_employed_count#29, cnt2#73, min(cd_dep_employed_count)#74, max(cd_dep_employed_count)#75, avg(cd_dep_employed_count)#76, cd_dep_college_count#30, cnt3#77, min(cd_dep_college_count)#78, max(cd_dep_college_count)#79, avg(cd_dep_college_count)#80] +Input [18]: [ca_state#17, cd_gender#19, cd_marital_status#20, cnt1#60, min(cd_dep_count)#61, max(cd_dep_count)#62, avg(cd_dep_count)#63, cd_dep_employed_count#22, cnt2#64, min(cd_dep_employed_count)#65, max(cd_dep_employed_count)#66, avg(cd_dep_employed_count)#67, cd_dep_college_count#23, cnt3#68, min(cd_dep_college_count)#69, max(cd_dep_college_count)#70, avg(cd_dep_college_count)#71, cd_dep_count#21] +Arguments: 100, [ca_state#17 ASC NULLS FIRST, cd_gender#19 ASC NULLS FIRST, cd_marital_status#20 ASC NULLS FIRST, cd_dep_count#21 ASC NULLS FIRST, cd_dep_employed_count#22 ASC NULLS FIRST, cd_dep_college_count#23 ASC NULLS FIRST], [ca_state#17, cd_gender#19, cd_marital_status#20, cnt1#60, min(cd_dep_count)#61, max(cd_dep_count)#62, avg(cd_dep_count)#63, cd_dep_employed_count#22, cnt2#64, min(cd_dep_employed_count)#65, max(cd_dep_employed_count)#66, avg(cd_dep_employed_count)#67, cd_dep_college_count#23, cnt3#68, min(cd_dep_college_count)#69, max(cd_dep_college_count)#70, avg(cd_dep_college_count)#71] ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 +Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 BroadcastExchange (58) +- * Project (57) +- * Filter (56) @@ -300,29 +300,29 @@ BroadcastExchange (58) (54) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#81, d_qoy#82] +Output [3]: [d_date_sk#9, d_year#72, d_qoy#73] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_qoy), EqualTo(d_year,2002), LessThan(d_qoy,4), IsNotNull(d_date_sk)] ReadSchema: struct (55) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#81, d_qoy#82] +Input [3]: [d_date_sk#9, d_year#72, d_qoy#73] (56) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#81, d_qoy#82] -Condition : ((((isnotnull(d_year#81) AND isnotnull(d_qoy#82)) AND (d_year#81 = 2002)) AND (d_qoy#82 < 4)) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#9, d_year#72, d_qoy#73] +Condition : ((((isnotnull(d_year#72) AND isnotnull(d_qoy#73)) AND (d_year#72 = 2002)) AND (d_qoy#73 < 4)) AND isnotnull(d_date_sk#9)) (57) Project [codegen id : 1] -Output [1]: [d_date_sk#10] -Input [3]: [d_date_sk#10, d_year#81, d_qoy#82] +Output [1]: [d_date_sk#9] +Input [3]: [d_date_sk#9, d_year#72, d_qoy#73] (58) BroadcastExchange -Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#83] +Input [1]: [d_date_sk#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -Subquery:2 Hosting operator id = 14 Hosting Expression = ws_sold_date_sk#13 IN dynamicpruning#9 +Subquery:2 Hosting operator id = 14 Hosting Expression = ws_sold_date_sk#11 IN dynamicpruning#8 -Subquery:3 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#17 IN dynamicpruning#9 +Subquery:3 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#14 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35/explain.txt index e5a9030386262..0375a3a65954d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q35/explain.txt @@ -81,7 +81,7 @@ Input [3]: [ss_customer_sk#6, ss_sold_date_sk#7, d_date_sk#9] (9) BroadcastExchange Input [1]: [ss_customer_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#3] @@ -89,65 +89,65 @@ Right keys [1]: [ss_customer_sk#6] Join condition: None (11) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#11, ws_sold_date_sk#12] +Output [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#12), dynamicpruningexpression(ws_sold_date_sk#12 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ws_sold_date_sk#11), dynamicpruningexpression(ws_sold_date_sk#11 IN dynamicpruning#8)] ReadSchema: struct (12) ColumnarToRow [codegen id : 4] -Input [2]: [ws_bill_customer_sk#11, ws_sold_date_sk#12] +Input [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] (13) ReusedExchange [Reuses operator id: 47] -Output [1]: [d_date_sk#13] +Output [1]: [d_date_sk#12] (14) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ws_sold_date_sk#12] -Right keys [1]: [d_date_sk#13] +Left keys [1]: [ws_sold_date_sk#11] +Right keys [1]: [d_date_sk#12] Join condition: None (15) Project [codegen id : 4] -Output [1]: [ws_bill_customer_sk#11] -Input [3]: [ws_bill_customer_sk#11, ws_sold_date_sk#12, d_date_sk#13] +Output [1]: [ws_bill_customer_sk#10] +Input [3]: [ws_bill_customer_sk#10, ws_sold_date_sk#11, d_date_sk#12] (16) BroadcastExchange -Input [1]: [ws_bill_customer_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Input [1]: [ws_bill_customer_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [ws_bill_customer_sk#11] +Right keys [1]: [ws_bill_customer_sk#10] Join condition: None (18) Scan parquet default.catalog_sales -Output [2]: [cs_ship_customer_sk#15, cs_sold_date_sk#16] +Output [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#16), dynamicpruningexpression(cs_sold_date_sk#16 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(cs_sold_date_sk#14), dynamicpruningexpression(cs_sold_date_sk#14 IN dynamicpruning#8)] ReadSchema: struct (19) ColumnarToRow [codegen id : 6] -Input [2]: [cs_ship_customer_sk#15, cs_sold_date_sk#16] +Input [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] (20) ReusedExchange [Reuses operator id: 47] -Output [1]: [d_date_sk#17] +Output [1]: [d_date_sk#15] (21) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [cs_sold_date_sk#16] -Right keys [1]: [d_date_sk#17] +Left keys [1]: [cs_sold_date_sk#14] +Right keys [1]: [d_date_sk#15] Join condition: None (22) Project [codegen id : 6] -Output [1]: [cs_ship_customer_sk#15] -Input [3]: [cs_ship_customer_sk#15, cs_sold_date_sk#16, d_date_sk#17] +Output [1]: [cs_ship_customer_sk#13] +Input [3]: [cs_ship_customer_sk#13, cs_sold_date_sk#14, d_date_sk#15] (23) BroadcastExchange -Input [1]: [cs_ship_customer_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [1]: [cs_ship_customer_sk#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [cs_ship_customer_sk#15] +Right keys [1]: [cs_ship_customer_sk#13] Join condition: None (25) Filter [codegen id : 9] @@ -159,80 +159,80 @@ Output [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5] Input [5]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5, exists#2, exists#1] (27) Scan parquet default.customer_address -Output [2]: [ca_address_sk#19, ca_state#20] +Output [2]: [ca_address_sk#16, ca_state#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 7] -Input [2]: [ca_address_sk#19, ca_state#20] +Input [2]: [ca_address_sk#16, ca_state#17] (29) Filter [codegen id : 7] -Input [2]: [ca_address_sk#19, ca_state#20] -Condition : isnotnull(ca_address_sk#19) +Input [2]: [ca_address_sk#16, ca_state#17] +Condition : isnotnull(ca_address_sk#16) (30) BroadcastExchange -Input [2]: [ca_address_sk#19, ca_state#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21] +Input [2]: [ca_address_sk#16, ca_state#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (31) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_current_addr_sk#5] -Right keys [1]: [ca_address_sk#19] +Right keys [1]: [ca_address_sk#16] Join condition: None (32) Project [codegen id : 9] -Output [2]: [c_current_cdemo_sk#4, ca_state#20] -Input [4]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#19, ca_state#20] +Output [2]: [c_current_cdemo_sk#4, ca_state#17] +Input [4]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#16, ca_state#17] (33) Scan parquet default.customer_demographics -Output [6]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] +Output [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 8] -Input [6]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] (35) Filter [codegen id : 8] -Input [6]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] -Condition : isnotnull(cd_demo_sk#22) +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Condition : isnotnull(cd_demo_sk#18) (36) BroadcastExchange -Input [6]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#28] +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (37) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_current_cdemo_sk#4] -Right keys [1]: [cd_demo_sk#22] +Right keys [1]: [cd_demo_sk#18] Join condition: None (38) Project [codegen id : 9] -Output [6]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] -Input [8]: [c_current_cdemo_sk#4, ca_state#20, cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] +Output [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Input [8]: [c_current_cdemo_sk#4, ca_state#17, cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] (39) HashAggregate [codegen id : 9] -Input [6]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] -Keys [6]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] -Functions [10]: [partial_count(1), partial_min(cd_dep_count#25), partial_max(cd_dep_count#25), partial_avg(cd_dep_count#25), partial_min(cd_dep_employed_count#26), partial_max(cd_dep_employed_count#26), partial_avg(cd_dep_employed_count#26), partial_min(cd_dep_college_count#27), partial_max(cd_dep_college_count#27), partial_avg(cd_dep_college_count#27)] -Aggregate Attributes [13]: [count#29, min#30, max#31, sum#32, count#33, min#34, max#35, sum#36, count#37, min#38, max#39, sum#40, count#41] -Results [19]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, count#42, min#43, max#44, sum#45, count#46, min#47, max#48, sum#49, count#50, min#51, max#52, sum#53, count#54] +Input [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Keys [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Functions [10]: [partial_count(1), partial_min(cd_dep_count#21), partial_max(cd_dep_count#21), partial_avg(cd_dep_count#21), partial_min(cd_dep_employed_count#22), partial_max(cd_dep_employed_count#22), partial_avg(cd_dep_employed_count#22), partial_min(cd_dep_college_count#23), partial_max(cd_dep_college_count#23), partial_avg(cd_dep_college_count#23)] +Aggregate Attributes [13]: [count#24, min#25, max#26, sum#27, count#28, min#29, max#30, sum#31, count#32, min#33, max#34, sum#35, count#36] +Results [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, min#38, max#39, sum#40, count#41, min#42, max#43, sum#44, count#45, min#46, max#47, sum#48, count#49] (40) Exchange -Input [19]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, count#42, min#43, max#44, sum#45, count#46, min#47, max#48, sum#49, count#50, min#51, max#52, sum#53, count#54] -Arguments: hashpartitioning(ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, 5), ENSURE_REQUIREMENTS, [id=#55] +Input [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, min#38, max#39, sum#40, count#41, min#42, max#43, sum#44, count#45, min#46, max#47, sum#48, count#49] +Arguments: hashpartitioning(ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, 5), ENSURE_REQUIREMENTS, [plan_id=6] (41) HashAggregate [codegen id : 10] -Input [19]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, count#42, min#43, max#44, sum#45, count#46, min#47, max#48, sum#49, count#50, min#51, max#52, sum#53, count#54] -Keys [6]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] -Functions [10]: [count(1), min(cd_dep_count#25), max(cd_dep_count#25), avg(cd_dep_count#25), min(cd_dep_employed_count#26), max(cd_dep_employed_count#26), avg(cd_dep_employed_count#26), min(cd_dep_college_count#27), max(cd_dep_college_count#27), avg(cd_dep_college_count#27)] -Aggregate Attributes [10]: [count(1)#56, min(cd_dep_count#25)#57, max(cd_dep_count#25)#58, avg(cd_dep_count#25)#59, min(cd_dep_employed_count#26)#60, max(cd_dep_employed_count#26)#61, avg(cd_dep_employed_count#26)#62, min(cd_dep_college_count#27)#63, max(cd_dep_college_count#27)#64, avg(cd_dep_college_count#27)#65] -Results [18]: [ca_state#20, cd_gender#23, cd_marital_status#24, count(1)#56 AS cnt1#66, min(cd_dep_count#25)#57 AS min(cd_dep_count)#67, max(cd_dep_count#25)#58 AS max(cd_dep_count)#68, avg(cd_dep_count#25)#59 AS avg(cd_dep_count)#69, cd_dep_employed_count#26, count(1)#56 AS cnt2#70, min(cd_dep_employed_count#26)#60 AS min(cd_dep_employed_count)#71, max(cd_dep_employed_count#26)#61 AS max(cd_dep_employed_count)#72, avg(cd_dep_employed_count#26)#62 AS avg(cd_dep_employed_count)#73, cd_dep_college_count#27, count(1)#56 AS cnt3#74, min(cd_dep_college_count#27)#63 AS min(cd_dep_college_count)#75, max(cd_dep_college_count#27)#64 AS max(cd_dep_college_count)#76, avg(cd_dep_college_count#27)#65 AS avg(cd_dep_college_count)#77, cd_dep_count#25] +Input [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, min#38, max#39, sum#40, count#41, min#42, max#43, sum#44, count#45, min#46, max#47, sum#48, count#49] +Keys [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Functions [10]: [count(1), min(cd_dep_count#21), max(cd_dep_count#21), avg(cd_dep_count#21), min(cd_dep_employed_count#22), max(cd_dep_employed_count#22), avg(cd_dep_employed_count#22), min(cd_dep_college_count#23), max(cd_dep_college_count#23), avg(cd_dep_college_count#23)] +Aggregate Attributes [10]: [count(1)#50, min(cd_dep_count#21)#51, max(cd_dep_count#21)#52, avg(cd_dep_count#21)#53, min(cd_dep_employed_count#22)#54, max(cd_dep_employed_count#22)#55, avg(cd_dep_employed_count#22)#56, min(cd_dep_college_count#23)#57, max(cd_dep_college_count#23)#58, avg(cd_dep_college_count#23)#59] +Results [18]: [ca_state#17, cd_gender#19, cd_marital_status#20, count(1)#50 AS cnt1#60, min(cd_dep_count#21)#51 AS min(cd_dep_count)#61, max(cd_dep_count#21)#52 AS max(cd_dep_count)#62, avg(cd_dep_count#21)#53 AS avg(cd_dep_count)#63, cd_dep_employed_count#22, count(1)#50 AS cnt2#64, min(cd_dep_employed_count#22)#54 AS min(cd_dep_employed_count)#65, max(cd_dep_employed_count#22)#55 AS max(cd_dep_employed_count)#66, avg(cd_dep_employed_count#22)#56 AS avg(cd_dep_employed_count)#67, cd_dep_college_count#23, count(1)#50 AS cnt3#68, min(cd_dep_college_count#23)#57 AS min(cd_dep_college_count)#69, max(cd_dep_college_count#23)#58 AS max(cd_dep_college_count)#70, avg(cd_dep_college_count#23)#59 AS avg(cd_dep_college_count)#71, cd_dep_count#21] (42) TakeOrderedAndProject -Input [18]: [ca_state#20, cd_gender#23, cd_marital_status#24, cnt1#66, min(cd_dep_count)#67, max(cd_dep_count)#68, avg(cd_dep_count)#69, cd_dep_employed_count#26, cnt2#70, min(cd_dep_employed_count)#71, max(cd_dep_employed_count)#72, avg(cd_dep_employed_count)#73, cd_dep_college_count#27, cnt3#74, min(cd_dep_college_count)#75, max(cd_dep_college_count)#76, avg(cd_dep_college_count)#77, cd_dep_count#25] -Arguments: 100, [ca_state#20 ASC NULLS FIRST, cd_gender#23 ASC NULLS FIRST, cd_marital_status#24 ASC NULLS FIRST, cd_dep_count#25 ASC NULLS FIRST, cd_dep_employed_count#26 ASC NULLS FIRST, cd_dep_college_count#27 ASC NULLS FIRST], [ca_state#20, cd_gender#23, cd_marital_status#24, cnt1#66, min(cd_dep_count)#67, max(cd_dep_count)#68, avg(cd_dep_count)#69, cd_dep_employed_count#26, cnt2#70, min(cd_dep_employed_count)#71, max(cd_dep_employed_count)#72, avg(cd_dep_employed_count)#73, cd_dep_college_count#27, cnt3#74, min(cd_dep_college_count)#75, max(cd_dep_college_count)#76, avg(cd_dep_college_count)#77] +Input [18]: [ca_state#17, cd_gender#19, cd_marital_status#20, cnt1#60, min(cd_dep_count)#61, max(cd_dep_count)#62, avg(cd_dep_count)#63, cd_dep_employed_count#22, cnt2#64, min(cd_dep_employed_count)#65, max(cd_dep_employed_count)#66, avg(cd_dep_employed_count)#67, cd_dep_college_count#23, cnt3#68, min(cd_dep_college_count)#69, max(cd_dep_college_count)#70, avg(cd_dep_college_count)#71, cd_dep_count#21] +Arguments: 100, [ca_state#17 ASC NULLS FIRST, cd_gender#19 ASC NULLS FIRST, cd_marital_status#20 ASC NULLS FIRST, cd_dep_count#21 ASC NULLS FIRST, cd_dep_employed_count#22 ASC NULLS FIRST, cd_dep_college_count#23 ASC NULLS FIRST], [ca_state#17, cd_gender#19, cd_marital_status#20, cnt1#60, min(cd_dep_count)#61, max(cd_dep_count)#62, avg(cd_dep_count)#63, cd_dep_employed_count#22, cnt2#64, min(cd_dep_employed_count)#65, max(cd_dep_employed_count)#66, avg(cd_dep_employed_count)#67, cd_dep_college_count#23, cnt3#68, min(cd_dep_college_count)#69, max(cd_dep_college_count)#70, avg(cd_dep_college_count)#71] ===== Subqueries ===== @@ -245,29 +245,29 @@ BroadcastExchange (47) (43) Scan parquet default.date_dim -Output [3]: [d_date_sk#9, d_year#78, d_qoy#79] +Output [3]: [d_date_sk#9, d_year#72, d_qoy#73] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_qoy), EqualTo(d_year,2002), LessThan(d_qoy,4), IsNotNull(d_date_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#9, d_year#78, d_qoy#79] +Input [3]: [d_date_sk#9, d_year#72, d_qoy#73] (45) Filter [codegen id : 1] -Input [3]: [d_date_sk#9, d_year#78, d_qoy#79] -Condition : ((((isnotnull(d_year#78) AND isnotnull(d_qoy#79)) AND (d_year#78 = 2002)) AND (d_qoy#79 < 4)) AND isnotnull(d_date_sk#9)) +Input [3]: [d_date_sk#9, d_year#72, d_qoy#73] +Condition : ((((isnotnull(d_year#72) AND isnotnull(d_qoy#73)) AND (d_year#72 = 2002)) AND (d_qoy#73 < 4)) AND isnotnull(d_date_sk#9)) (46) Project [codegen id : 1] Output [1]: [d_date_sk#9] -Input [3]: [d_date_sk#9, d_year#78, d_qoy#79] +Input [3]: [d_date_sk#9, d_year#72, d_qoy#73] (47) BroadcastExchange Input [1]: [d_date_sk#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#80] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:2 Hosting operator id = 11 Hosting Expression = ws_sold_date_sk#12 IN dynamicpruning#8 +Subquery:2 Hosting operator id = 11 Hosting Expression = ws_sold_date_sk#11 IN dynamicpruning#8 -Subquery:3 Hosting operator id = 18 Hosting Expression = cs_sold_date_sk#16 IN dynamicpruning#8 +Subquery:3 Hosting operator id = 18 Hosting Expression = cs_sold_date_sk#14 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q36.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q36.sf100/explain.txt index 81050cfbb4475..facdf679490c2 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q36.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q36.sf100/explain.txt @@ -76,7 +76,7 @@ Input [2]: [s_store_sk#8, s_state#9] (11) BroadcastExchange Input [1]: [s_store_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#2] @@ -88,73 +88,73 @@ Output [3]: [ss_item_sk#1, ss_ext_sales_price#3, ss_net_profit#4] Input [5]: [ss_item_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4, s_store_sk#8] (14) Scan parquet default.item -Output [3]: [i_item_sk#11, i_class#12, i_category#13] +Output [3]: [i_item_sk#10, i_class#11, i_category#12] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [3]: [i_item_sk#11, i_class#12, i_category#13] +Input [3]: [i_item_sk#10, i_class#11, i_category#12] (16) Filter [codegen id : 3] -Input [3]: [i_item_sk#11, i_class#12, i_category#13] -Condition : isnotnull(i_item_sk#11) +Input [3]: [i_item_sk#10, i_class#11, i_category#12] +Condition : isnotnull(i_item_sk#10) (17) BroadcastExchange -Input [3]: [i_item_sk#11, i_class#12, i_category#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Input [3]: [i_item_sk#10, i_class#11, i_category#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#11] +Right keys [1]: [i_item_sk#10] Join condition: None (19) Project [codegen id : 4] -Output [4]: [ss_ext_sales_price#3, ss_net_profit#4, i_category#13, i_class#12] -Input [6]: [ss_item_sk#1, ss_ext_sales_price#3, ss_net_profit#4, i_item_sk#11, i_class#12, i_category#13] +Output [4]: [ss_ext_sales_price#3, ss_net_profit#4, i_category#12, i_class#11] +Input [6]: [ss_item_sk#1, ss_ext_sales_price#3, ss_net_profit#4, i_item_sk#10, i_class#11, i_category#12] (20) Expand [codegen id : 4] -Input [4]: [ss_ext_sales_price#3, ss_net_profit#4, i_category#13, i_class#12] -Arguments: [[ss_ext_sales_price#3, ss_net_profit#4, i_category#13, i_class#12, 0], [ss_ext_sales_price#3, ss_net_profit#4, i_category#13, null, 1], [ss_ext_sales_price#3, ss_net_profit#4, null, null, 3]], [ss_ext_sales_price#3, ss_net_profit#4, i_category#15, i_class#16, spark_grouping_id#17] +Input [4]: [ss_ext_sales_price#3, ss_net_profit#4, i_category#12, i_class#11] +Arguments: [[ss_ext_sales_price#3, ss_net_profit#4, i_category#12, i_class#11, 0], [ss_ext_sales_price#3, ss_net_profit#4, i_category#12, null, 1], [ss_ext_sales_price#3, ss_net_profit#4, null, null, 3]], [ss_ext_sales_price#3, ss_net_profit#4, i_category#13, i_class#14, spark_grouping_id#15] (21) HashAggregate [codegen id : 4] -Input [5]: [ss_ext_sales_price#3, ss_net_profit#4, i_category#15, i_class#16, spark_grouping_id#17] -Keys [3]: [i_category#15, i_class#16, spark_grouping_id#17] +Input [5]: [ss_ext_sales_price#3, ss_net_profit#4, i_category#13, i_class#14, spark_grouping_id#15] +Keys [3]: [i_category#13, i_class#14, spark_grouping_id#15] Functions [2]: [partial_sum(UnscaledValue(ss_net_profit#4)), partial_sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [2]: [sum#18, sum#19] -Results [5]: [i_category#15, i_class#16, spark_grouping_id#17, sum#20, sum#21] +Aggregate Attributes [2]: [sum#16, sum#17] +Results [5]: [i_category#13, i_class#14, spark_grouping_id#15, sum#18, sum#19] (22) Exchange -Input [5]: [i_category#15, i_class#16, spark_grouping_id#17, sum#20, sum#21] -Arguments: hashpartitioning(i_category#15, i_class#16, spark_grouping_id#17, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [5]: [i_category#13, i_class#14, spark_grouping_id#15, sum#18, sum#19] +Arguments: hashpartitioning(i_category#13, i_class#14, spark_grouping_id#15, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 5] -Input [5]: [i_category#15, i_class#16, spark_grouping_id#17, sum#20, sum#21] -Keys [3]: [i_category#15, i_class#16, spark_grouping_id#17] +Input [5]: [i_category#13, i_class#14, spark_grouping_id#15, sum#18, sum#19] +Keys [3]: [i_category#13, i_class#14, spark_grouping_id#15] Functions [2]: [sum(UnscaledValue(ss_net_profit#4)), sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#23, sum(UnscaledValue(ss_ext_sales_price#3))#24] -Results [7]: [CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#23,17,2)) / promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#24,17,2))), DecimalType(37,20)) AS gross_margin#25, i_category#15, i_class#16, (cast((shiftright(spark_grouping_id#17, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#17, 0) & 1) as tinyint)) AS lochierarchy#26, (cast((shiftright(spark_grouping_id#17, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#17, 0) & 1) as tinyint)) AS _w1#27, CASE WHEN (cast((shiftright(spark_grouping_id#17, 0) & 1) as tinyint) = 0) THEN i_category#15 END AS _w2#28, CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#23,17,2)) / promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#24,17,2))), DecimalType(37,20)) AS _w3#29] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#20, sum(UnscaledValue(ss_ext_sales_price#3))#21] +Results [7]: [CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#20,17,2)) / promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#21,17,2))), DecimalType(37,20)) AS gross_margin#22, i_category#13, i_class#14, (cast((shiftright(spark_grouping_id#15, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#15, 0) & 1) as tinyint)) AS lochierarchy#23, (cast((shiftright(spark_grouping_id#15, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#15, 0) & 1) as tinyint)) AS _w1#24, CASE WHEN (cast((shiftright(spark_grouping_id#15, 0) & 1) as tinyint) = 0) THEN i_category#13 END AS _w2#25, CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#20,17,2)) / promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#21,17,2))), DecimalType(37,20)) AS _w3#26] (24) Exchange -Input [7]: [gross_margin#25, i_category#15, i_class#16, lochierarchy#26, _w1#27, _w2#28, _w3#29] -Arguments: hashpartitioning(_w1#27, _w2#28, 5), ENSURE_REQUIREMENTS, [id=#30] +Input [7]: [gross_margin#22, i_category#13, i_class#14, lochierarchy#23, _w1#24, _w2#25, _w3#26] +Arguments: hashpartitioning(_w1#24, _w2#25, 5), ENSURE_REQUIREMENTS, [plan_id=4] (25) Sort [codegen id : 6] -Input [7]: [gross_margin#25, i_category#15, i_class#16, lochierarchy#26, _w1#27, _w2#28, _w3#29] -Arguments: [_w1#27 ASC NULLS FIRST, _w2#28 ASC NULLS FIRST, _w3#29 ASC NULLS FIRST], false, 0 +Input [7]: [gross_margin#22, i_category#13, i_class#14, lochierarchy#23, _w1#24, _w2#25, _w3#26] +Arguments: [_w1#24 ASC NULLS FIRST, _w2#25 ASC NULLS FIRST, _w3#26 ASC NULLS FIRST], false, 0 (26) Window -Input [7]: [gross_margin#25, i_category#15, i_class#16, lochierarchy#26, _w1#27, _w2#28, _w3#29] -Arguments: [rank(_w3#29) windowspecdefinition(_w1#27, _w2#28, _w3#29 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#31], [_w1#27, _w2#28], [_w3#29 ASC NULLS FIRST] +Input [7]: [gross_margin#22, i_category#13, i_class#14, lochierarchy#23, _w1#24, _w2#25, _w3#26] +Arguments: [rank(_w3#26) windowspecdefinition(_w1#24, _w2#25, _w3#26 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#27], [_w1#24, _w2#25], [_w3#26 ASC NULLS FIRST] (27) Project [codegen id : 7] -Output [5]: [gross_margin#25, i_category#15, i_class#16, lochierarchy#26, rank_within_parent#31] -Input [8]: [gross_margin#25, i_category#15, i_class#16, lochierarchy#26, _w1#27, _w2#28, _w3#29, rank_within_parent#31] +Output [5]: [gross_margin#22, i_category#13, i_class#14, lochierarchy#23, rank_within_parent#27] +Input [8]: [gross_margin#22, i_category#13, i_class#14, lochierarchy#23, _w1#24, _w2#25, _w3#26, rank_within_parent#27] (28) TakeOrderedAndProject -Input [5]: [gross_margin#25, i_category#15, i_class#16, lochierarchy#26, rank_within_parent#31] -Arguments: 100, [lochierarchy#26 DESC NULLS LAST, CASE WHEN (lochierarchy#26 = 0) THEN i_category#15 END ASC NULLS FIRST, rank_within_parent#31 ASC NULLS FIRST], [gross_margin#25, i_category#15, i_class#16, lochierarchy#26, rank_within_parent#31] +Input [5]: [gross_margin#22, i_category#13, i_class#14, lochierarchy#23, rank_within_parent#27] +Arguments: 100, [lochierarchy#23 DESC NULLS LAST, CASE WHEN (lochierarchy#23 = 0) THEN i_category#13 END ASC NULLS FIRST, rank_within_parent#27 ASC NULLS FIRST], [gross_margin#22, i_category#13, i_class#14, lochierarchy#23, rank_within_parent#27] ===== Subqueries ===== @@ -167,25 +167,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [2]: [d_date_sk#7, d_year#32] +Output [2]: [d_date_sk#7, d_year#28] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#7, d_year#32] +Input [2]: [d_date_sk#7, d_year#28] (31) Filter [codegen id : 1] -Input [2]: [d_date_sk#7, d_year#32] -Condition : ((isnotnull(d_year#32) AND (d_year#32 = 2001)) AND isnotnull(d_date_sk#7)) +Input [2]: [d_date_sk#7, d_year#28] +Condition : ((isnotnull(d_year#28) AND (d_year#28 = 2001)) AND isnotnull(d_date_sk#7)) (32) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [2]: [d_date_sk#7, d_year#32] +Input [2]: [d_date_sk#7, d_year#28] (33) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#33] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q36/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q36/explain.txt index 7ef898a59a2c1..afd243d75648d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q36/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q36/explain.txt @@ -72,7 +72,7 @@ Condition : isnotnull(i_item_sk#8) (10) BroadcastExchange Input [3]: [i_item_sk#8, i_class#9, i_category#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_item_sk#1] @@ -84,77 +84,77 @@ Output [5]: [ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4, i_class#9, i_ Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4, i_item_sk#8, i_class#9, i_category#10] (13) Scan parquet default.store -Output [2]: [s_store_sk#12, s_state#13] +Output [2]: [s_store_sk#11, s_state#12] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_state), EqualTo(s_state,TN), IsNotNull(s_store_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [2]: [s_store_sk#12, s_state#13] +Input [2]: [s_store_sk#11, s_state#12] (15) Filter [codegen id : 3] -Input [2]: [s_store_sk#12, s_state#13] -Condition : ((isnotnull(s_state#13) AND (s_state#13 = TN)) AND isnotnull(s_store_sk#12)) +Input [2]: [s_store_sk#11, s_state#12] +Condition : ((isnotnull(s_state#12) AND (s_state#12 = TN)) AND isnotnull(s_store_sk#11)) (16) Project [codegen id : 3] -Output [1]: [s_store_sk#12] -Input [2]: [s_store_sk#12, s_state#13] +Output [1]: [s_store_sk#11] +Input [2]: [s_store_sk#11, s_state#12] (17) BroadcastExchange -Input [1]: [s_store_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Input [1]: [s_store_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#2] -Right keys [1]: [s_store_sk#12] +Right keys [1]: [s_store_sk#11] Join condition: None (19) Project [codegen id : 4] Output [4]: [ss_ext_sales_price#3, ss_net_profit#4, i_category#10, i_class#9] -Input [6]: [ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4, i_class#9, i_category#10, s_store_sk#12] +Input [6]: [ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4, i_class#9, i_category#10, s_store_sk#11] (20) Expand [codegen id : 4] Input [4]: [ss_ext_sales_price#3, ss_net_profit#4, i_category#10, i_class#9] -Arguments: [[ss_ext_sales_price#3, ss_net_profit#4, i_category#10, i_class#9, 0], [ss_ext_sales_price#3, ss_net_profit#4, i_category#10, null, 1], [ss_ext_sales_price#3, ss_net_profit#4, null, null, 3]], [ss_ext_sales_price#3, ss_net_profit#4, i_category#15, i_class#16, spark_grouping_id#17] +Arguments: [[ss_ext_sales_price#3, ss_net_profit#4, i_category#10, i_class#9, 0], [ss_ext_sales_price#3, ss_net_profit#4, i_category#10, null, 1], [ss_ext_sales_price#3, ss_net_profit#4, null, null, 3]], [ss_ext_sales_price#3, ss_net_profit#4, i_category#13, i_class#14, spark_grouping_id#15] (21) HashAggregate [codegen id : 4] -Input [5]: [ss_ext_sales_price#3, ss_net_profit#4, i_category#15, i_class#16, spark_grouping_id#17] -Keys [3]: [i_category#15, i_class#16, spark_grouping_id#17] +Input [5]: [ss_ext_sales_price#3, ss_net_profit#4, i_category#13, i_class#14, spark_grouping_id#15] +Keys [3]: [i_category#13, i_class#14, spark_grouping_id#15] Functions [2]: [partial_sum(UnscaledValue(ss_net_profit#4)), partial_sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [2]: [sum#18, sum#19] -Results [5]: [i_category#15, i_class#16, spark_grouping_id#17, sum#20, sum#21] +Aggregate Attributes [2]: [sum#16, sum#17] +Results [5]: [i_category#13, i_class#14, spark_grouping_id#15, sum#18, sum#19] (22) Exchange -Input [5]: [i_category#15, i_class#16, spark_grouping_id#17, sum#20, sum#21] -Arguments: hashpartitioning(i_category#15, i_class#16, spark_grouping_id#17, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [5]: [i_category#13, i_class#14, spark_grouping_id#15, sum#18, sum#19] +Arguments: hashpartitioning(i_category#13, i_class#14, spark_grouping_id#15, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 5] -Input [5]: [i_category#15, i_class#16, spark_grouping_id#17, sum#20, sum#21] -Keys [3]: [i_category#15, i_class#16, spark_grouping_id#17] +Input [5]: [i_category#13, i_class#14, spark_grouping_id#15, sum#18, sum#19] +Keys [3]: [i_category#13, i_class#14, spark_grouping_id#15] Functions [2]: [sum(UnscaledValue(ss_net_profit#4)), sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#23, sum(UnscaledValue(ss_ext_sales_price#3))#24] -Results [7]: [CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#23,17,2)) / promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#24,17,2))), DecimalType(37,20)) AS gross_margin#25, i_category#15, i_class#16, (cast((shiftright(spark_grouping_id#17, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#17, 0) & 1) as tinyint)) AS lochierarchy#26, (cast((shiftright(spark_grouping_id#17, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#17, 0) & 1) as tinyint)) AS _w1#27, CASE WHEN (cast((shiftright(spark_grouping_id#17, 0) & 1) as tinyint) = 0) THEN i_category#15 END AS _w2#28, CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#23,17,2)) / promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#24,17,2))), DecimalType(37,20)) AS _w3#29] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#20, sum(UnscaledValue(ss_ext_sales_price#3))#21] +Results [7]: [CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#20,17,2)) / promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#21,17,2))), DecimalType(37,20)) AS gross_margin#22, i_category#13, i_class#14, (cast((shiftright(spark_grouping_id#15, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#15, 0) & 1) as tinyint)) AS lochierarchy#23, (cast((shiftright(spark_grouping_id#15, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#15, 0) & 1) as tinyint)) AS _w1#24, CASE WHEN (cast((shiftright(spark_grouping_id#15, 0) & 1) as tinyint) = 0) THEN i_category#13 END AS _w2#25, CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#20,17,2)) / promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#21,17,2))), DecimalType(37,20)) AS _w3#26] (24) Exchange -Input [7]: [gross_margin#25, i_category#15, i_class#16, lochierarchy#26, _w1#27, _w2#28, _w3#29] -Arguments: hashpartitioning(_w1#27, _w2#28, 5), ENSURE_REQUIREMENTS, [id=#30] +Input [7]: [gross_margin#22, i_category#13, i_class#14, lochierarchy#23, _w1#24, _w2#25, _w3#26] +Arguments: hashpartitioning(_w1#24, _w2#25, 5), ENSURE_REQUIREMENTS, [plan_id=4] (25) Sort [codegen id : 6] -Input [7]: [gross_margin#25, i_category#15, i_class#16, lochierarchy#26, _w1#27, _w2#28, _w3#29] -Arguments: [_w1#27 ASC NULLS FIRST, _w2#28 ASC NULLS FIRST, _w3#29 ASC NULLS FIRST], false, 0 +Input [7]: [gross_margin#22, i_category#13, i_class#14, lochierarchy#23, _w1#24, _w2#25, _w3#26] +Arguments: [_w1#24 ASC NULLS FIRST, _w2#25 ASC NULLS FIRST, _w3#26 ASC NULLS FIRST], false, 0 (26) Window -Input [7]: [gross_margin#25, i_category#15, i_class#16, lochierarchy#26, _w1#27, _w2#28, _w3#29] -Arguments: [rank(_w3#29) windowspecdefinition(_w1#27, _w2#28, _w3#29 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#31], [_w1#27, _w2#28], [_w3#29 ASC NULLS FIRST] +Input [7]: [gross_margin#22, i_category#13, i_class#14, lochierarchy#23, _w1#24, _w2#25, _w3#26] +Arguments: [rank(_w3#26) windowspecdefinition(_w1#24, _w2#25, _w3#26 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#27], [_w1#24, _w2#25], [_w3#26 ASC NULLS FIRST] (27) Project [codegen id : 7] -Output [5]: [gross_margin#25, i_category#15, i_class#16, lochierarchy#26, rank_within_parent#31] -Input [8]: [gross_margin#25, i_category#15, i_class#16, lochierarchy#26, _w1#27, _w2#28, _w3#29, rank_within_parent#31] +Output [5]: [gross_margin#22, i_category#13, i_class#14, lochierarchy#23, rank_within_parent#27] +Input [8]: [gross_margin#22, i_category#13, i_class#14, lochierarchy#23, _w1#24, _w2#25, _w3#26, rank_within_parent#27] (28) TakeOrderedAndProject -Input [5]: [gross_margin#25, i_category#15, i_class#16, lochierarchy#26, rank_within_parent#31] -Arguments: 100, [lochierarchy#26 DESC NULLS LAST, CASE WHEN (lochierarchy#26 = 0) THEN i_category#15 END ASC NULLS FIRST, rank_within_parent#31 ASC NULLS FIRST], [gross_margin#25, i_category#15, i_class#16, lochierarchy#26, rank_within_parent#31] +Input [5]: [gross_margin#22, i_category#13, i_class#14, lochierarchy#23, rank_within_parent#27] +Arguments: 100, [lochierarchy#23 DESC NULLS LAST, CASE WHEN (lochierarchy#23 = 0) THEN i_category#13 END ASC NULLS FIRST, rank_within_parent#27 ASC NULLS FIRST], [gross_margin#22, i_category#13, i_class#14, lochierarchy#23, rank_within_parent#27] ===== Subqueries ===== @@ -167,25 +167,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [2]: [d_date_sk#7, d_year#32] +Output [2]: [d_date_sk#7, d_year#28] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#7, d_year#32] +Input [2]: [d_date_sk#7, d_year#28] (31) Filter [codegen id : 1] -Input [2]: [d_date_sk#7, d_year#32] -Condition : ((isnotnull(d_year#32) AND (d_year#32 = 2001)) AND isnotnull(d_date_sk#7)) +Input [2]: [d_date_sk#7, d_year#28] +Condition : ((isnotnull(d_year#28) AND (d_year#28 = 2001)) AND isnotnull(d_date_sk#7)) (32) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [2]: [d_date_sk#7, d_year#32] +Input [2]: [d_date_sk#7, d_year#28] (33) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#33] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q37.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q37.sf100/explain.txt index df9567ae2c5e9..5da89e60d9ca2 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q37.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q37.sf100/explain.txt @@ -49,90 +49,90 @@ Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, i_manufa (5) BroadcastExchange Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#6] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.inventory -Output [3]: [inv_item_sk#7, inv_quantity_on_hand#8, inv_date_sk#9] +Output [3]: [inv_item_sk#6, inv_quantity_on_hand#7, inv_date_sk#8] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(inv_date_sk#9), dynamicpruningexpression(inv_date_sk#9 IN dynamicpruning#10)] +PartitionFilters: [isnotnull(inv_date_sk#8), dynamicpruningexpression(inv_date_sk#8 IN dynamicpruning#9)] PushedFilters: [IsNotNull(inv_quantity_on_hand), GreaterThanOrEqual(inv_quantity_on_hand,100), LessThanOrEqual(inv_quantity_on_hand,500), IsNotNull(inv_item_sk)] ReadSchema: struct (7) ColumnarToRow -Input [3]: [inv_item_sk#7, inv_quantity_on_hand#8, inv_date_sk#9] +Input [3]: [inv_item_sk#6, inv_quantity_on_hand#7, inv_date_sk#8] (8) Filter -Input [3]: [inv_item_sk#7, inv_quantity_on_hand#8, inv_date_sk#9] -Condition : (((isnotnull(inv_quantity_on_hand#8) AND (inv_quantity_on_hand#8 >= 100)) AND (inv_quantity_on_hand#8 <= 500)) AND isnotnull(inv_item_sk#7)) +Input [3]: [inv_item_sk#6, inv_quantity_on_hand#7, inv_date_sk#8] +Condition : (((isnotnull(inv_quantity_on_hand#7) AND (inv_quantity_on_hand#7 >= 100)) AND (inv_quantity_on_hand#7 <= 500)) AND isnotnull(inv_item_sk#6)) (9) Project -Output [2]: [inv_item_sk#7, inv_date_sk#9] -Input [3]: [inv_item_sk#7, inv_quantity_on_hand#8, inv_date_sk#9] +Output [2]: [inv_item_sk#6, inv_date_sk#8] +Input [3]: [inv_item_sk#6, inv_quantity_on_hand#7, inv_date_sk#8] (10) BroadcastHashJoin [codegen id : 3] Left keys [1]: [i_item_sk#1] -Right keys [1]: [inv_item_sk#7] +Right keys [1]: [inv_item_sk#6] Join condition: None (11) Project [codegen id : 3] -Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#9] -Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_item_sk#7, inv_date_sk#9] +Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#8] +Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_item_sk#6, inv_date_sk#8] (12) ReusedExchange [Reuses operator id: 33] -Output [1]: [d_date_sk#11] +Output [1]: [d_date_sk#10] (13) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [inv_date_sk#9] -Right keys [1]: [d_date_sk#11] +Left keys [1]: [inv_date_sk#8] +Right keys [1]: [d_date_sk#10] Join condition: None (14) Project [codegen id : 3] Output [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4] -Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#9, d_date_sk#11] +Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#8, d_date_sk#10] (15) Exchange Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4] -Arguments: hashpartitioning(i_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#12] +Arguments: hashpartitioning(i_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (16) Sort [codegen id : 4] Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: [i_item_sk#1 ASC NULLS FIRST], false, 0 (17) Scan parquet default.catalog_sales -Output [2]: [cs_item_sk#13, cs_sold_date_sk#14] +Output [2]: [cs_item_sk#11, cs_sold_date_sk#12] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (18) ColumnarToRow [codegen id : 5] -Input [2]: [cs_item_sk#13, cs_sold_date_sk#14] +Input [2]: [cs_item_sk#11, cs_sold_date_sk#12] (19) Filter [codegen id : 5] -Input [2]: [cs_item_sk#13, cs_sold_date_sk#14] -Condition : isnotnull(cs_item_sk#13) +Input [2]: [cs_item_sk#11, cs_sold_date_sk#12] +Condition : isnotnull(cs_item_sk#11) (20) Project [codegen id : 5] -Output [1]: [cs_item_sk#13] -Input [2]: [cs_item_sk#13, cs_sold_date_sk#14] +Output [1]: [cs_item_sk#11] +Input [2]: [cs_item_sk#11, cs_sold_date_sk#12] (21) Exchange -Input [1]: [cs_item_sk#13] -Arguments: hashpartitioning(cs_item_sk#13, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [1]: [cs_item_sk#11] +Arguments: hashpartitioning(cs_item_sk#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) Sort [codegen id : 6] -Input [1]: [cs_item_sk#13] -Arguments: [cs_item_sk#13 ASC NULLS FIRST], false, 0 +Input [1]: [cs_item_sk#11] +Arguments: [cs_item_sk#11 ASC NULLS FIRST], false, 0 (23) SortMergeJoin [codegen id : 7] Left keys [1]: [i_item_sk#1] -Right keys [1]: [cs_item_sk#13] +Right keys [1]: [cs_item_sk#11] Join condition: None (24) Project [codegen id : 7] Output [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, cs_item_sk#13] +Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, cs_item_sk#11] (25) HashAggregate [codegen id : 7] Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] @@ -143,7 +143,7 @@ Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] (26) Exchange Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -Arguments: hashpartitioning(i_item_id#2, i_item_desc#3, i_current_price#4, 5), ENSURE_REQUIREMENTS, [id=#16] +Arguments: hashpartitioning(i_item_id#2, i_item_desc#3, i_current_price#4, 5), ENSURE_REQUIREMENTS, [plan_id=4] (27) HashAggregate [codegen id : 8] Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] @@ -158,7 +158,7 @@ Arguments: 100, [i_item_id#2 ASC NULLS FIRST], [i_item_id#2, i_item_desc#3, i_cu ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = inv_date_sk#9 IN dynamicpruning#10 +Subquery:1 Hosting operator id = 6 Hosting Expression = inv_date_sk#8 IN dynamicpruning#9 BroadcastExchange (33) +- * Project (32) +- * Filter (31) @@ -167,25 +167,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [2]: [d_date_sk#11, d_date#17] +Output [2]: [d_date_sk#10, d_date#13] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-02-01), LessThanOrEqual(d_date,2000-04-01), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#11, d_date#17] +Input [2]: [d_date_sk#10, d_date#13] (31) Filter [codegen id : 1] -Input [2]: [d_date_sk#11, d_date#17] -Condition : (((isnotnull(d_date#17) AND (d_date#17 >= 2000-02-01)) AND (d_date#17 <= 2000-04-01)) AND isnotnull(d_date_sk#11)) +Input [2]: [d_date_sk#10, d_date#13] +Condition : (((isnotnull(d_date#13) AND (d_date#13 >= 2000-02-01)) AND (d_date#13 <= 2000-04-01)) AND isnotnull(d_date_sk#10)) (32) Project [codegen id : 1] -Output [1]: [d_date_sk#11] -Input [2]: [d_date_sk#11, d_date#17] +Output [1]: [d_date_sk#10] +Input [2]: [d_date_sk#10, d_date#13] (33) BroadcastExchange -Input [1]: [d_date_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [1]: [d_date_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q37/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q37/explain.txt index 956b8c98a30c2..408973dcd4536 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q37/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q37/explain.txt @@ -65,7 +65,7 @@ Input [3]: [inv_item_sk#6, inv_quantity_on_hand#7, inv_date_sk#8] (9) BroadcastExchange Input [2]: [inv_item_sk#6, inv_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 3] Left keys [1]: [i_item_sk#1] @@ -77,47 +77,47 @@ Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_dat Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_item_sk#6, inv_date_sk#8] (12) ReusedExchange [Reuses operator id: 30] -Output [1]: [d_date_sk#11] +Output [1]: [d_date_sk#10] (13) BroadcastHashJoin [codegen id : 3] Left keys [1]: [inv_date_sk#8] -Right keys [1]: [d_date_sk#11] +Right keys [1]: [d_date_sk#10] Join condition: None (14) Project [codegen id : 3] Output [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4] -Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#8, d_date_sk#11] +Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#8, d_date_sk#10] (15) BroadcastExchange Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) Scan parquet default.catalog_sales -Output [2]: [cs_item_sk#13, cs_sold_date_sk#14] +Output [2]: [cs_item_sk#11, cs_sold_date_sk#12] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (17) ColumnarToRow -Input [2]: [cs_item_sk#13, cs_sold_date_sk#14] +Input [2]: [cs_item_sk#11, cs_sold_date_sk#12] (18) Filter -Input [2]: [cs_item_sk#13, cs_sold_date_sk#14] -Condition : isnotnull(cs_item_sk#13) +Input [2]: [cs_item_sk#11, cs_sold_date_sk#12] +Condition : isnotnull(cs_item_sk#11) (19) Project -Output [1]: [cs_item_sk#13] -Input [2]: [cs_item_sk#13, cs_sold_date_sk#14] +Output [1]: [cs_item_sk#11] +Input [2]: [cs_item_sk#11, cs_sold_date_sk#12] (20) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] -Right keys [1]: [cs_item_sk#13] +Right keys [1]: [cs_item_sk#11] Join condition: None (21) Project [codegen id : 4] Output [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, cs_item_sk#13] +Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, cs_item_sk#11] (22) HashAggregate [codegen id : 4] Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] @@ -128,7 +128,7 @@ Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] (23) Exchange Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -Arguments: hashpartitioning(i_item_id#2, i_item_desc#3, i_current_price#4, 5), ENSURE_REQUIREMENTS, [id=#15] +Arguments: hashpartitioning(i_item_id#2, i_item_desc#3, i_current_price#4, 5), ENSURE_REQUIREMENTS, [plan_id=3] (24) HashAggregate [codegen id : 5] Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] @@ -152,25 +152,25 @@ BroadcastExchange (30) (26) Scan parquet default.date_dim -Output [2]: [d_date_sk#11, d_date#16] +Output [2]: [d_date_sk#10, d_date#13] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-02-01), LessThanOrEqual(d_date,2000-04-01), IsNotNull(d_date_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#11, d_date#16] +Input [2]: [d_date_sk#10, d_date#13] (28) Filter [codegen id : 1] -Input [2]: [d_date_sk#11, d_date#16] -Condition : (((isnotnull(d_date#16) AND (d_date#16 >= 2000-02-01)) AND (d_date#16 <= 2000-04-01)) AND isnotnull(d_date_sk#11)) +Input [2]: [d_date_sk#10, d_date#13] +Condition : (((isnotnull(d_date#13) AND (d_date#13 >= 2000-02-01)) AND (d_date#13 <= 2000-04-01)) AND isnotnull(d_date_sk#10)) (29) Project [codegen id : 1] -Output [1]: [d_date_sk#11] -Input [2]: [d_date_sk#11, d_date#16] +Output [1]: [d_date_sk#10] +Input [2]: [d_date_sk#10, d_date#13] (30) BroadcastExchange -Input [1]: [d_date_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Input [1]: [d_date_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q38.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q38.sf100/explain.txt index 3d266ee2c01c7..ceab5457e3d2d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q38.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q38.sf100/explain.txt @@ -90,254 +90,254 @@ Input [4]: [ss_customer_sk#1, ss_sold_date_sk#2, d_date_sk#4, d_date#5] (7) Exchange Input [2]: [ss_customer_sk#1, d_date#5] -Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (8) Sort [codegen id : 3] Input [2]: [ss_customer_sk#1, d_date#5] Arguments: [ss_customer_sk#1 ASC NULLS FIRST], false, 0 (9) Scan parquet default.customer -Output [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9] +Output [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (10) ColumnarToRow [codegen id : 4] -Input [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9] +Input [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8] (11) Filter [codegen id : 4] -Input [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9] -Condition : isnotnull(c_customer_sk#7) +Input [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8] +Condition : isnotnull(c_customer_sk#6) (12) Exchange -Input [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9] -Arguments: hashpartitioning(c_customer_sk#7, 5), ENSURE_REQUIREMENTS, [id=#10] +Input [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8] +Arguments: hashpartitioning(c_customer_sk#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (13) Sort [codegen id : 5] -Input [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9] -Arguments: [c_customer_sk#7 ASC NULLS FIRST], false, 0 +Input [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8] +Arguments: [c_customer_sk#6 ASC NULLS FIRST], false, 0 (14) SortMergeJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#7] +Right keys [1]: [c_customer_sk#6] Join condition: None (15) Project [codegen id : 6] -Output [3]: [c_last_name#9, c_first_name#8, d_date#5] -Input [5]: [ss_customer_sk#1, d_date#5, c_customer_sk#7, c_first_name#8, c_last_name#9] +Output [3]: [c_last_name#8, c_first_name#7, d_date#5] +Input [5]: [ss_customer_sk#1, d_date#5, c_customer_sk#6, c_first_name#7, c_last_name#8] (16) HashAggregate [codegen id : 6] -Input [3]: [c_last_name#9, c_first_name#8, d_date#5] -Keys [3]: [c_last_name#9, c_first_name#8, d_date#5] +Input [3]: [c_last_name#8, c_first_name#7, d_date#5] +Keys [3]: [c_last_name#8, c_first_name#7, d_date#5] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#9, c_first_name#8, d_date#5] +Results [3]: [c_last_name#8, c_first_name#7, d_date#5] (17) Exchange -Input [3]: [c_last_name#9, c_first_name#8, d_date#5] -Arguments: hashpartitioning(c_last_name#9, c_first_name#8, d_date#5, 5), ENSURE_REQUIREMENTS, [id=#11] +Input [3]: [c_last_name#8, c_first_name#7, d_date#5] +Arguments: hashpartitioning(c_last_name#8, c_first_name#7, d_date#5, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 7] -Input [3]: [c_last_name#9, c_first_name#8, d_date#5] -Keys [3]: [c_last_name#9, c_first_name#8, d_date#5] +Input [3]: [c_last_name#8, c_first_name#7, d_date#5] +Keys [3]: [c_last_name#8, c_first_name#7, d_date#5] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#9, c_first_name#8, d_date#5] +Results [3]: [c_last_name#8, c_first_name#7, d_date#5] (19) Exchange -Input [3]: [c_last_name#9, c_first_name#8, d_date#5] -Arguments: hashpartitioning(coalesce(c_last_name#9, ), isnull(c_last_name#9), coalesce(c_first_name#8, ), isnull(c_first_name#8), coalesce(d_date#5, 1970-01-01), isnull(d_date#5), 5), ENSURE_REQUIREMENTS, [id=#12] +Input [3]: [c_last_name#8, c_first_name#7, d_date#5] +Arguments: hashpartitioning(coalesce(c_last_name#8, ), isnull(c_last_name#8), coalesce(c_first_name#7, ), isnull(c_first_name#7), coalesce(d_date#5, 1970-01-01), isnull(d_date#5), 5), ENSURE_REQUIREMENTS, [plan_id=4] (20) Sort [codegen id : 8] -Input [3]: [c_last_name#9, c_first_name#8, d_date#5] -Arguments: [coalesce(c_last_name#9, ) ASC NULLS FIRST, isnull(c_last_name#9) ASC NULLS FIRST, coalesce(c_first_name#8, ) ASC NULLS FIRST, isnull(c_first_name#8) ASC NULLS FIRST, coalesce(d_date#5, 1970-01-01) ASC NULLS FIRST, isnull(d_date#5) ASC NULLS FIRST], false, 0 +Input [3]: [c_last_name#8, c_first_name#7, d_date#5] +Arguments: [coalesce(c_last_name#8, ) ASC NULLS FIRST, isnull(c_last_name#8) ASC NULLS FIRST, coalesce(c_first_name#7, ) ASC NULLS FIRST, isnull(c_first_name#7) ASC NULLS FIRST, coalesce(d_date#5, 1970-01-01) ASC NULLS FIRST, isnull(d_date#5) ASC NULLS FIRST], false, 0 (21) Scan parquet default.catalog_sales -Output [2]: [cs_bill_customer_sk#13, cs_sold_date_sk#14] +Output [2]: [cs_bill_customer_sk#9, cs_sold_date_sk#10] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#14), dynamicpruningexpression(cs_sold_date_sk#14 IN dynamicpruning#3)] +PartitionFilters: [isnotnull(cs_sold_date_sk#10), dynamicpruningexpression(cs_sold_date_sk#10 IN dynamicpruning#3)] PushedFilters: [IsNotNull(cs_bill_customer_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 10] -Input [2]: [cs_bill_customer_sk#13, cs_sold_date_sk#14] +Input [2]: [cs_bill_customer_sk#9, cs_sold_date_sk#10] (23) Filter [codegen id : 10] -Input [2]: [cs_bill_customer_sk#13, cs_sold_date_sk#14] -Condition : isnotnull(cs_bill_customer_sk#13) +Input [2]: [cs_bill_customer_sk#9, cs_sold_date_sk#10] +Condition : isnotnull(cs_bill_customer_sk#9) (24) ReusedExchange [Reuses operator id: 65] -Output [2]: [d_date_sk#15, d_date#16] +Output [2]: [d_date_sk#11, d_date#12] (25) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cs_sold_date_sk#14] -Right keys [1]: [d_date_sk#15] +Left keys [1]: [cs_sold_date_sk#10] +Right keys [1]: [d_date_sk#11] Join condition: None (26) Project [codegen id : 10] -Output [2]: [cs_bill_customer_sk#13, d_date#16] -Input [4]: [cs_bill_customer_sk#13, cs_sold_date_sk#14, d_date_sk#15, d_date#16] +Output [2]: [cs_bill_customer_sk#9, d_date#12] +Input [4]: [cs_bill_customer_sk#9, cs_sold_date_sk#10, d_date_sk#11, d_date#12] (27) Exchange -Input [2]: [cs_bill_customer_sk#13, d_date#16] -Arguments: hashpartitioning(cs_bill_customer_sk#13, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [2]: [cs_bill_customer_sk#9, d_date#12] +Arguments: hashpartitioning(cs_bill_customer_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=5] (28) Sort [codegen id : 11] -Input [2]: [cs_bill_customer_sk#13, d_date#16] -Arguments: [cs_bill_customer_sk#13 ASC NULLS FIRST], false, 0 +Input [2]: [cs_bill_customer_sk#9, d_date#12] +Arguments: [cs_bill_customer_sk#9 ASC NULLS FIRST], false, 0 (29) ReusedExchange [Reuses operator id: 12] -Output [3]: [c_customer_sk#18, c_first_name#19, c_last_name#20] +Output [3]: [c_customer_sk#13, c_first_name#14, c_last_name#15] (30) Sort [codegen id : 13] -Input [3]: [c_customer_sk#18, c_first_name#19, c_last_name#20] -Arguments: [c_customer_sk#18 ASC NULLS FIRST], false, 0 +Input [3]: [c_customer_sk#13, c_first_name#14, c_last_name#15] +Arguments: [c_customer_sk#13 ASC NULLS FIRST], false, 0 (31) SortMergeJoin [codegen id : 14] -Left keys [1]: [cs_bill_customer_sk#13] -Right keys [1]: [c_customer_sk#18] +Left keys [1]: [cs_bill_customer_sk#9] +Right keys [1]: [c_customer_sk#13] Join condition: None (32) Project [codegen id : 14] -Output [3]: [c_last_name#20, c_first_name#19, d_date#16] -Input [5]: [cs_bill_customer_sk#13, d_date#16, c_customer_sk#18, c_first_name#19, c_last_name#20] +Output [3]: [c_last_name#15, c_first_name#14, d_date#12] +Input [5]: [cs_bill_customer_sk#9, d_date#12, c_customer_sk#13, c_first_name#14, c_last_name#15] (33) HashAggregate [codegen id : 14] -Input [3]: [c_last_name#20, c_first_name#19, d_date#16] -Keys [3]: [c_last_name#20, c_first_name#19, d_date#16] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Keys [3]: [c_last_name#15, c_first_name#14, d_date#12] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#20, c_first_name#19, d_date#16] +Results [3]: [c_last_name#15, c_first_name#14, d_date#12] (34) Exchange -Input [3]: [c_last_name#20, c_first_name#19, d_date#16] -Arguments: hashpartitioning(c_last_name#20, c_first_name#19, d_date#16, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Arguments: hashpartitioning(c_last_name#15, c_first_name#14, d_date#12, 5), ENSURE_REQUIREMENTS, [plan_id=6] (35) HashAggregate [codegen id : 15] -Input [3]: [c_last_name#20, c_first_name#19, d_date#16] -Keys [3]: [c_last_name#20, c_first_name#19, d_date#16] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Keys [3]: [c_last_name#15, c_first_name#14, d_date#12] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#20, c_first_name#19, d_date#16] +Results [3]: [c_last_name#15, c_first_name#14, d_date#12] (36) Exchange -Input [3]: [c_last_name#20, c_first_name#19, d_date#16] -Arguments: hashpartitioning(coalesce(c_last_name#20, ), isnull(c_last_name#20), coalesce(c_first_name#19, ), isnull(c_first_name#19), coalesce(d_date#16, 1970-01-01), isnull(d_date#16), 5), ENSURE_REQUIREMENTS, [id=#22] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Arguments: hashpartitioning(coalesce(c_last_name#15, ), isnull(c_last_name#15), coalesce(c_first_name#14, ), isnull(c_first_name#14), coalesce(d_date#12, 1970-01-01), isnull(d_date#12), 5), ENSURE_REQUIREMENTS, [plan_id=7] (37) Sort [codegen id : 16] -Input [3]: [c_last_name#20, c_first_name#19, d_date#16] -Arguments: [coalesce(c_last_name#20, ) ASC NULLS FIRST, isnull(c_last_name#20) ASC NULLS FIRST, coalesce(c_first_name#19, ) ASC NULLS FIRST, isnull(c_first_name#19) ASC NULLS FIRST, coalesce(d_date#16, 1970-01-01) ASC NULLS FIRST, isnull(d_date#16) ASC NULLS FIRST], false, 0 +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Arguments: [coalesce(c_last_name#15, ) ASC NULLS FIRST, isnull(c_last_name#15) ASC NULLS FIRST, coalesce(c_first_name#14, ) ASC NULLS FIRST, isnull(c_first_name#14) ASC NULLS FIRST, coalesce(d_date#12, 1970-01-01) ASC NULLS FIRST, isnull(d_date#12) ASC NULLS FIRST], false, 0 (38) SortMergeJoin [codegen id : 17] -Left keys [6]: [coalesce(c_last_name#9, ), isnull(c_last_name#9), coalesce(c_first_name#8, ), isnull(c_first_name#8), coalesce(d_date#5, 1970-01-01), isnull(d_date#5)] -Right keys [6]: [coalesce(c_last_name#20, ), isnull(c_last_name#20), coalesce(c_first_name#19, ), isnull(c_first_name#19), coalesce(d_date#16, 1970-01-01), isnull(d_date#16)] +Left keys [6]: [coalesce(c_last_name#8, ), isnull(c_last_name#8), coalesce(c_first_name#7, ), isnull(c_first_name#7), coalesce(d_date#5, 1970-01-01), isnull(d_date#5)] +Right keys [6]: [coalesce(c_last_name#15, ), isnull(c_last_name#15), coalesce(c_first_name#14, ), isnull(c_first_name#14), coalesce(d_date#12, 1970-01-01), isnull(d_date#12)] Join condition: None (39) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#23, ws_sold_date_sk#24] +Output [2]: [ws_bill_customer_sk#16, ws_sold_date_sk#17] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#24), dynamicpruningexpression(ws_sold_date_sk#24 IN dynamicpruning#3)] +PartitionFilters: [isnotnull(ws_sold_date_sk#17), dynamicpruningexpression(ws_sold_date_sk#17 IN dynamicpruning#3)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (40) ColumnarToRow [codegen id : 19] -Input [2]: [ws_bill_customer_sk#23, ws_sold_date_sk#24] +Input [2]: [ws_bill_customer_sk#16, ws_sold_date_sk#17] (41) Filter [codegen id : 19] -Input [2]: [ws_bill_customer_sk#23, ws_sold_date_sk#24] -Condition : isnotnull(ws_bill_customer_sk#23) +Input [2]: [ws_bill_customer_sk#16, ws_sold_date_sk#17] +Condition : isnotnull(ws_bill_customer_sk#16) (42) ReusedExchange [Reuses operator id: 65] -Output [2]: [d_date_sk#25, d_date#26] +Output [2]: [d_date_sk#18, d_date#19] (43) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [ws_sold_date_sk#24] -Right keys [1]: [d_date_sk#25] +Left keys [1]: [ws_sold_date_sk#17] +Right keys [1]: [d_date_sk#18] Join condition: None (44) Project [codegen id : 19] -Output [2]: [ws_bill_customer_sk#23, d_date#26] -Input [4]: [ws_bill_customer_sk#23, ws_sold_date_sk#24, d_date_sk#25, d_date#26] +Output [2]: [ws_bill_customer_sk#16, d_date#19] +Input [4]: [ws_bill_customer_sk#16, ws_sold_date_sk#17, d_date_sk#18, d_date#19] (45) Exchange -Input [2]: [ws_bill_customer_sk#23, d_date#26] -Arguments: hashpartitioning(ws_bill_customer_sk#23, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [2]: [ws_bill_customer_sk#16, d_date#19] +Arguments: hashpartitioning(ws_bill_customer_sk#16, 5), ENSURE_REQUIREMENTS, [plan_id=8] (46) Sort [codegen id : 20] -Input [2]: [ws_bill_customer_sk#23, d_date#26] -Arguments: [ws_bill_customer_sk#23 ASC NULLS FIRST], false, 0 +Input [2]: [ws_bill_customer_sk#16, d_date#19] +Arguments: [ws_bill_customer_sk#16 ASC NULLS FIRST], false, 0 (47) ReusedExchange [Reuses operator id: 12] -Output [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30] +Output [3]: [c_customer_sk#20, c_first_name#21, c_last_name#22] (48) Sort [codegen id : 22] -Input [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30] -Arguments: [c_customer_sk#28 ASC NULLS FIRST], false, 0 +Input [3]: [c_customer_sk#20, c_first_name#21, c_last_name#22] +Arguments: [c_customer_sk#20 ASC NULLS FIRST], false, 0 (49) SortMergeJoin [codegen id : 23] -Left keys [1]: [ws_bill_customer_sk#23] -Right keys [1]: [c_customer_sk#28] +Left keys [1]: [ws_bill_customer_sk#16] +Right keys [1]: [c_customer_sk#20] Join condition: None (50) Project [codegen id : 23] -Output [3]: [c_last_name#30, c_first_name#29, d_date#26] -Input [5]: [ws_bill_customer_sk#23, d_date#26, c_customer_sk#28, c_first_name#29, c_last_name#30] +Output [3]: [c_last_name#22, c_first_name#21, d_date#19] +Input [5]: [ws_bill_customer_sk#16, d_date#19, c_customer_sk#20, c_first_name#21, c_last_name#22] (51) HashAggregate [codegen id : 23] -Input [3]: [c_last_name#30, c_first_name#29, d_date#26] -Keys [3]: [c_last_name#30, c_first_name#29, d_date#26] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Keys [3]: [c_last_name#22, c_first_name#21, d_date#19] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#30, c_first_name#29, d_date#26] +Results [3]: [c_last_name#22, c_first_name#21, d_date#19] (52) Exchange -Input [3]: [c_last_name#30, c_first_name#29, d_date#26] -Arguments: hashpartitioning(c_last_name#30, c_first_name#29, d_date#26, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Arguments: hashpartitioning(c_last_name#22, c_first_name#21, d_date#19, 5), ENSURE_REQUIREMENTS, [plan_id=9] (53) HashAggregate [codegen id : 24] -Input [3]: [c_last_name#30, c_first_name#29, d_date#26] -Keys [3]: [c_last_name#30, c_first_name#29, d_date#26] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Keys [3]: [c_last_name#22, c_first_name#21, d_date#19] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#30, c_first_name#29, d_date#26] +Results [3]: [c_last_name#22, c_first_name#21, d_date#19] (54) Exchange -Input [3]: [c_last_name#30, c_first_name#29, d_date#26] -Arguments: hashpartitioning(coalesce(c_last_name#30, ), isnull(c_last_name#30), coalesce(c_first_name#29, ), isnull(c_first_name#29), coalesce(d_date#26, 1970-01-01), isnull(d_date#26), 5), ENSURE_REQUIREMENTS, [id=#32] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Arguments: hashpartitioning(coalesce(c_last_name#22, ), isnull(c_last_name#22), coalesce(c_first_name#21, ), isnull(c_first_name#21), coalesce(d_date#19, 1970-01-01), isnull(d_date#19), 5), ENSURE_REQUIREMENTS, [plan_id=10] (55) Sort [codegen id : 25] -Input [3]: [c_last_name#30, c_first_name#29, d_date#26] -Arguments: [coalesce(c_last_name#30, ) ASC NULLS FIRST, isnull(c_last_name#30) ASC NULLS FIRST, coalesce(c_first_name#29, ) ASC NULLS FIRST, isnull(c_first_name#29) ASC NULLS FIRST, coalesce(d_date#26, 1970-01-01) ASC NULLS FIRST, isnull(d_date#26) ASC NULLS FIRST], false, 0 +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Arguments: [coalesce(c_last_name#22, ) ASC NULLS FIRST, isnull(c_last_name#22) ASC NULLS FIRST, coalesce(c_first_name#21, ) ASC NULLS FIRST, isnull(c_first_name#21) ASC NULLS FIRST, coalesce(d_date#19, 1970-01-01) ASC NULLS FIRST, isnull(d_date#19) ASC NULLS FIRST], false, 0 (56) SortMergeJoin [codegen id : 26] -Left keys [6]: [coalesce(c_last_name#9, ), isnull(c_last_name#9), coalesce(c_first_name#8, ), isnull(c_first_name#8), coalesce(d_date#5, 1970-01-01), isnull(d_date#5)] -Right keys [6]: [coalesce(c_last_name#30, ), isnull(c_last_name#30), coalesce(c_first_name#29, ), isnull(c_first_name#29), coalesce(d_date#26, 1970-01-01), isnull(d_date#26)] +Left keys [6]: [coalesce(c_last_name#8, ), isnull(c_last_name#8), coalesce(c_first_name#7, ), isnull(c_first_name#7), coalesce(d_date#5, 1970-01-01), isnull(d_date#5)] +Right keys [6]: [coalesce(c_last_name#22, ), isnull(c_last_name#22), coalesce(c_first_name#21, ), isnull(c_first_name#21), coalesce(d_date#19, 1970-01-01), isnull(d_date#19)] Join condition: None (57) Project [codegen id : 26] Output: [] -Input [3]: [c_last_name#9, c_first_name#8, d_date#5] +Input [3]: [c_last_name#8, c_first_name#7, d_date#5] (58) HashAggregate [codegen id : 26] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#33] -Results [1]: [count#34] +Aggregate Attributes [1]: [count#23] +Results [1]: [count#24] (59) Exchange -Input [1]: [count#34] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#35] +Input [1]: [count#24] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11] (60) HashAggregate [codegen id : 27] -Input [1]: [count#34] +Input [1]: [count#24] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#36] -Results [1]: [count(1)#36 AS count(1)#37] +Aggregate Attributes [1]: [count(1)#25] +Results [1]: [count(1)#25 AS count(1)#26] ===== Subqueries ===== @@ -350,29 +350,29 @@ BroadcastExchange (65) (61) Scan parquet default.date_dim -Output [3]: [d_date_sk#4, d_date#5, d_month_seq#38] +Output [3]: [d_date_sk#4, d_date#5, d_month_seq#27] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (62) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#4, d_date#5, d_month_seq#38] +Input [3]: [d_date_sk#4, d_date#5, d_month_seq#27] (63) Filter [codegen id : 1] -Input [3]: [d_date_sk#4, d_date#5, d_month_seq#38] -Condition : (((isnotnull(d_month_seq#38) AND (d_month_seq#38 >= 1200)) AND (d_month_seq#38 <= 1211)) AND isnotnull(d_date_sk#4)) +Input [3]: [d_date_sk#4, d_date#5, d_month_seq#27] +Condition : (((isnotnull(d_month_seq#27) AND (d_month_seq#27 >= 1200)) AND (d_month_seq#27 <= 1211)) AND isnotnull(d_date_sk#4)) (64) Project [codegen id : 1] Output [2]: [d_date_sk#4, d_date#5] -Input [3]: [d_date_sk#4, d_date#5, d_month_seq#38] +Input [3]: [d_date_sk#4, d_date#5, d_month_seq#27] (65) BroadcastExchange Input [2]: [d_date_sk#4, d_date#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#39] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] -Subquery:2 Hosting operator id = 21 Hosting Expression = cs_sold_date_sk#14 IN dynamicpruning#3 +Subquery:2 Hosting operator id = 21 Hosting Expression = cs_sold_date_sk#10 IN dynamicpruning#3 -Subquery:3 Hosting operator id = 39 Hosting Expression = ws_sold_date_sk#24 IN dynamicpruning#3 +Subquery:3 Hosting operator id = 39 Hosting Expression = ws_sold_date_sk#17 IN dynamicpruning#3 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q38/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q38/explain.txt index 60190c9f39e43..442f3f99716a6 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q38/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q38/explain.txt @@ -91,7 +91,7 @@ Condition : isnotnull(c_customer_sk#6) (10) BroadcastExchange Input [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_customer_sk#1] @@ -111,7 +111,7 @@ Results [3]: [c_last_name#8, c_first_name#7, d_date#5] (14) Exchange Input [3]: [c_last_name#8, c_first_name#7, d_date#5] -Arguments: hashpartitioning(c_last_name#8, c_first_name#7, d_date#5, 5), ENSURE_REQUIREMENTS, [id=#10] +Arguments: hashpartitioning(c_last_name#8, c_first_name#7, d_date#5, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 12] Input [3]: [c_last_name#8, c_first_name#7, d_date#5] @@ -121,135 +121,135 @@ Aggregate Attributes: [] Results [3]: [c_last_name#8, c_first_name#7, d_date#5] (16) Scan parquet default.catalog_sales -Output [2]: [cs_bill_customer_sk#11, cs_sold_date_sk#12] +Output [2]: [cs_bill_customer_sk#9, cs_sold_date_sk#10] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#12), dynamicpruningexpression(cs_sold_date_sk#12 IN dynamicpruning#3)] +PartitionFilters: [isnotnull(cs_sold_date_sk#10), dynamicpruningexpression(cs_sold_date_sk#10 IN dynamicpruning#3)] PushedFilters: [IsNotNull(cs_bill_customer_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 6] -Input [2]: [cs_bill_customer_sk#11, cs_sold_date_sk#12] +Input [2]: [cs_bill_customer_sk#9, cs_sold_date_sk#10] (18) Filter [codegen id : 6] -Input [2]: [cs_bill_customer_sk#11, cs_sold_date_sk#12] -Condition : isnotnull(cs_bill_customer_sk#11) +Input [2]: [cs_bill_customer_sk#9, cs_sold_date_sk#10] +Condition : isnotnull(cs_bill_customer_sk#9) (19) ReusedExchange [Reuses operator id: 52] -Output [2]: [d_date_sk#13, d_date#14] +Output [2]: [d_date_sk#11, d_date#12] (20) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [cs_sold_date_sk#12] -Right keys [1]: [d_date_sk#13] +Left keys [1]: [cs_sold_date_sk#10] +Right keys [1]: [d_date_sk#11] Join condition: None (21) Project [codegen id : 6] -Output [2]: [cs_bill_customer_sk#11, d_date#14] -Input [4]: [cs_bill_customer_sk#11, cs_sold_date_sk#12, d_date_sk#13, d_date#14] +Output [2]: [cs_bill_customer_sk#9, d_date#12] +Input [4]: [cs_bill_customer_sk#9, cs_sold_date_sk#10, d_date_sk#11, d_date#12] (22) ReusedExchange [Reuses operator id: 10] -Output [3]: [c_customer_sk#15, c_first_name#16, c_last_name#17] +Output [3]: [c_customer_sk#13, c_first_name#14, c_last_name#15] (23) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [cs_bill_customer_sk#11] -Right keys [1]: [c_customer_sk#15] +Left keys [1]: [cs_bill_customer_sk#9] +Right keys [1]: [c_customer_sk#13] Join condition: None (24) Project [codegen id : 6] -Output [3]: [c_last_name#17, c_first_name#16, d_date#14] -Input [5]: [cs_bill_customer_sk#11, d_date#14, c_customer_sk#15, c_first_name#16, c_last_name#17] +Output [3]: [c_last_name#15, c_first_name#14, d_date#12] +Input [5]: [cs_bill_customer_sk#9, d_date#12, c_customer_sk#13, c_first_name#14, c_last_name#15] (25) HashAggregate [codegen id : 6] -Input [3]: [c_last_name#17, c_first_name#16, d_date#14] -Keys [3]: [c_last_name#17, c_first_name#16, d_date#14] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Keys [3]: [c_last_name#15, c_first_name#14, d_date#12] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#17, c_first_name#16, d_date#14] +Results [3]: [c_last_name#15, c_first_name#14, d_date#12] (26) Exchange -Input [3]: [c_last_name#17, c_first_name#16, d_date#14] -Arguments: hashpartitioning(c_last_name#17, c_first_name#16, d_date#14, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Arguments: hashpartitioning(c_last_name#15, c_first_name#14, d_date#12, 5), ENSURE_REQUIREMENTS, [plan_id=3] (27) HashAggregate [codegen id : 7] -Input [3]: [c_last_name#17, c_first_name#16, d_date#14] -Keys [3]: [c_last_name#17, c_first_name#16, d_date#14] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Keys [3]: [c_last_name#15, c_first_name#14, d_date#12] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#17, c_first_name#16, d_date#14] +Results [3]: [c_last_name#15, c_first_name#14, d_date#12] (28) BroadcastExchange -Input [3]: [c_last_name#17, c_first_name#16, d_date#14] -Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, string, true], ), isnull(input[0, string, true]), coalesce(input[1, string, true], ), isnull(input[1, string, true]), coalesce(input[2, date, true], 1970-01-01), isnull(input[2, date, true])),false), [id=#19] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, string, true], ), isnull(input[0, string, true]), coalesce(input[1, string, true], ), isnull(input[1, string, true]), coalesce(input[2, date, true], 1970-01-01), isnull(input[2, date, true])),false), [plan_id=4] (29) BroadcastHashJoin [codegen id : 12] Left keys [6]: [coalesce(c_last_name#8, ), isnull(c_last_name#8), coalesce(c_first_name#7, ), isnull(c_first_name#7), coalesce(d_date#5, 1970-01-01), isnull(d_date#5)] -Right keys [6]: [coalesce(c_last_name#17, ), isnull(c_last_name#17), coalesce(c_first_name#16, ), isnull(c_first_name#16), coalesce(d_date#14, 1970-01-01), isnull(d_date#14)] +Right keys [6]: [coalesce(c_last_name#15, ), isnull(c_last_name#15), coalesce(c_first_name#14, ), isnull(c_first_name#14), coalesce(d_date#12, 1970-01-01), isnull(d_date#12)] Join condition: None (30) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#20, ws_sold_date_sk#21] +Output [2]: [ws_bill_customer_sk#16, ws_sold_date_sk#17] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#21), dynamicpruningexpression(ws_sold_date_sk#21 IN dynamicpruning#3)] +PartitionFilters: [isnotnull(ws_sold_date_sk#17), dynamicpruningexpression(ws_sold_date_sk#17 IN dynamicpruning#3)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 10] -Input [2]: [ws_bill_customer_sk#20, ws_sold_date_sk#21] +Input [2]: [ws_bill_customer_sk#16, ws_sold_date_sk#17] (32) Filter [codegen id : 10] -Input [2]: [ws_bill_customer_sk#20, ws_sold_date_sk#21] -Condition : isnotnull(ws_bill_customer_sk#20) +Input [2]: [ws_bill_customer_sk#16, ws_sold_date_sk#17] +Condition : isnotnull(ws_bill_customer_sk#16) (33) ReusedExchange [Reuses operator id: 52] -Output [2]: [d_date_sk#22, d_date#23] +Output [2]: [d_date_sk#18, d_date#19] (34) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ws_sold_date_sk#21] -Right keys [1]: [d_date_sk#22] +Left keys [1]: [ws_sold_date_sk#17] +Right keys [1]: [d_date_sk#18] Join condition: None (35) Project [codegen id : 10] -Output [2]: [ws_bill_customer_sk#20, d_date#23] -Input [4]: [ws_bill_customer_sk#20, ws_sold_date_sk#21, d_date_sk#22, d_date#23] +Output [2]: [ws_bill_customer_sk#16, d_date#19] +Input [4]: [ws_bill_customer_sk#16, ws_sold_date_sk#17, d_date_sk#18, d_date#19] (36) ReusedExchange [Reuses operator id: 10] -Output [3]: [c_customer_sk#24, c_first_name#25, c_last_name#26] +Output [3]: [c_customer_sk#20, c_first_name#21, c_last_name#22] (37) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ws_bill_customer_sk#20] -Right keys [1]: [c_customer_sk#24] +Left keys [1]: [ws_bill_customer_sk#16] +Right keys [1]: [c_customer_sk#20] Join condition: None (38) Project [codegen id : 10] -Output [3]: [c_last_name#26, c_first_name#25, d_date#23] -Input [5]: [ws_bill_customer_sk#20, d_date#23, c_customer_sk#24, c_first_name#25, c_last_name#26] +Output [3]: [c_last_name#22, c_first_name#21, d_date#19] +Input [5]: [ws_bill_customer_sk#16, d_date#19, c_customer_sk#20, c_first_name#21, c_last_name#22] (39) HashAggregate [codegen id : 10] -Input [3]: [c_last_name#26, c_first_name#25, d_date#23] -Keys [3]: [c_last_name#26, c_first_name#25, d_date#23] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Keys [3]: [c_last_name#22, c_first_name#21, d_date#19] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#26, c_first_name#25, d_date#23] +Results [3]: [c_last_name#22, c_first_name#21, d_date#19] (40) Exchange -Input [3]: [c_last_name#26, c_first_name#25, d_date#23] -Arguments: hashpartitioning(c_last_name#26, c_first_name#25, d_date#23, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Arguments: hashpartitioning(c_last_name#22, c_first_name#21, d_date#19, 5), ENSURE_REQUIREMENTS, [plan_id=5] (41) HashAggregate [codegen id : 11] -Input [3]: [c_last_name#26, c_first_name#25, d_date#23] -Keys [3]: [c_last_name#26, c_first_name#25, d_date#23] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Keys [3]: [c_last_name#22, c_first_name#21, d_date#19] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#26, c_first_name#25, d_date#23] +Results [3]: [c_last_name#22, c_first_name#21, d_date#19] (42) BroadcastExchange -Input [3]: [c_last_name#26, c_first_name#25, d_date#23] -Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, string, true], ), isnull(input[0, string, true]), coalesce(input[1, string, true], ), isnull(input[1, string, true]), coalesce(input[2, date, true], 1970-01-01), isnull(input[2, date, true])),false), [id=#28] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, string, true], ), isnull(input[0, string, true]), coalesce(input[1, string, true], ), isnull(input[1, string, true]), coalesce(input[2, date, true], 1970-01-01), isnull(input[2, date, true])),false), [plan_id=6] (43) BroadcastHashJoin [codegen id : 12] Left keys [6]: [coalesce(c_last_name#8, ), isnull(c_last_name#8), coalesce(c_first_name#7, ), isnull(c_first_name#7), coalesce(d_date#5, 1970-01-01), isnull(d_date#5)] -Right keys [6]: [coalesce(c_last_name#26, ), isnull(c_last_name#26), coalesce(c_first_name#25, ), isnull(c_first_name#25), coalesce(d_date#23, 1970-01-01), isnull(d_date#23)] +Right keys [6]: [coalesce(c_last_name#22, ), isnull(c_last_name#22), coalesce(c_first_name#21, ), isnull(c_first_name#21), coalesce(d_date#19, 1970-01-01), isnull(d_date#19)] Join condition: None (44) Project [codegen id : 12] @@ -260,19 +260,19 @@ Input [3]: [c_last_name#8, c_first_name#7, d_date#5] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#29] -Results [1]: [count#30] +Aggregate Attributes [1]: [count#23] +Results [1]: [count#24] (46) Exchange -Input [1]: [count#30] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#31] +Input [1]: [count#24] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (47) HashAggregate [codegen id : 13] -Input [1]: [count#30] +Input [1]: [count#24] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#32] -Results [1]: [count(1)#32 AS count(1)#33] +Aggregate Attributes [1]: [count(1)#25] +Results [1]: [count(1)#25 AS count(1)#26] ===== Subqueries ===== @@ -285,29 +285,29 @@ BroadcastExchange (52) (48) Scan parquet default.date_dim -Output [3]: [d_date_sk#4, d_date#5, d_month_seq#34] +Output [3]: [d_date_sk#4, d_date#5, d_month_seq#27] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (49) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#4, d_date#5, d_month_seq#34] +Input [3]: [d_date_sk#4, d_date#5, d_month_seq#27] (50) Filter [codegen id : 1] -Input [3]: [d_date_sk#4, d_date#5, d_month_seq#34] -Condition : (((isnotnull(d_month_seq#34) AND (d_month_seq#34 >= 1200)) AND (d_month_seq#34 <= 1211)) AND isnotnull(d_date_sk#4)) +Input [3]: [d_date_sk#4, d_date#5, d_month_seq#27] +Condition : (((isnotnull(d_month_seq#27) AND (d_month_seq#27 >= 1200)) AND (d_month_seq#27 <= 1211)) AND isnotnull(d_date_sk#4)) (51) Project [codegen id : 1] Output [2]: [d_date_sk#4, d_date#5] -Input [3]: [d_date_sk#4, d_date#5, d_month_seq#34] +Input [3]: [d_date_sk#4, d_date#5, d_month_seq#27] (52) BroadcastExchange Input [2]: [d_date_sk#4, d_date#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 16 Hosting Expression = cs_sold_date_sk#12 IN dynamicpruning#3 +Subquery:2 Hosting operator id = 16 Hosting Expression = cs_sold_date_sk#10 IN dynamicpruning#3 -Subquery:3 Hosting operator id = 30 Hosting Expression = ws_sold_date_sk#21 IN dynamicpruning#3 +Subquery:3 Hosting operator id = 30 Hosting Expression = ws_sold_date_sk#17 IN dynamicpruning#3 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39a.sf100/explain.txt index ef3f68796cf26..64b986d1a6fe4 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39a.sf100/explain.txt @@ -91,7 +91,7 @@ Condition : isnotnull(i_item_sk#8) (10) BroadcastExchange Input [1]: [i_item_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_item_sk#1] @@ -103,163 +103,163 @@ Output [4]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, d_moy#7, i_item_sk#8] Input [5]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, d_moy#7, i_item_sk#8] (13) Scan parquet default.warehouse -Output [2]: [w_warehouse_sk#10, w_warehouse_name#11] +Output [2]: [w_warehouse_sk#9, w_warehouse_name#10] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [2]: [w_warehouse_sk#10, w_warehouse_name#11] +Input [2]: [w_warehouse_sk#9, w_warehouse_name#10] (15) Filter [codegen id : 3] -Input [2]: [w_warehouse_sk#10, w_warehouse_name#11] -Condition : isnotnull(w_warehouse_sk#10) +Input [2]: [w_warehouse_sk#9, w_warehouse_name#10] +Condition : isnotnull(w_warehouse_sk#9) (16) BroadcastExchange -Input [2]: [w_warehouse_sk#10, w_warehouse_name#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#12] +Input [2]: [w_warehouse_sk#9, w_warehouse_name#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_warehouse_sk#2] -Right keys [1]: [w_warehouse_sk#10] +Right keys [1]: [w_warehouse_sk#9] Join condition: None (18) Project [codegen id : 4] -Output [5]: [inv_quantity_on_hand#3, i_item_sk#8, w_warehouse_sk#10, w_warehouse_name#11, d_moy#7] -Input [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, d_moy#7, i_item_sk#8, w_warehouse_sk#10, w_warehouse_name#11] +Output [5]: [inv_quantity_on_hand#3, i_item_sk#8, w_warehouse_sk#9, w_warehouse_name#10, d_moy#7] +Input [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, d_moy#7, i_item_sk#8, w_warehouse_sk#9, w_warehouse_name#10] (19) HashAggregate [codegen id : 4] -Input [5]: [inv_quantity_on_hand#3, i_item_sk#8, w_warehouse_sk#10, w_warehouse_name#11, d_moy#7] -Keys [4]: [w_warehouse_name#11, w_warehouse_sk#10, i_item_sk#8, d_moy#7] +Input [5]: [inv_quantity_on_hand#3, i_item_sk#8, w_warehouse_sk#9, w_warehouse_name#10, d_moy#7] +Keys [4]: [w_warehouse_name#10, w_warehouse_sk#9, i_item_sk#8, d_moy#7] Functions [2]: [partial_stddev_samp(cast(inv_quantity_on_hand#3 as double)), partial_avg(inv_quantity_on_hand#3)] -Aggregate Attributes [5]: [n#13, avg#14, m2#15, sum#16, count#17] -Results [9]: [w_warehouse_name#11, w_warehouse_sk#10, i_item_sk#8, d_moy#7, n#18, avg#19, m2#20, sum#21, count#22] +Aggregate Attributes [5]: [n#11, avg#12, m2#13, sum#14, count#15] +Results [9]: [w_warehouse_name#10, w_warehouse_sk#9, i_item_sk#8, d_moy#7, n#16, avg#17, m2#18, sum#19, count#20] (20) Exchange -Input [9]: [w_warehouse_name#11, w_warehouse_sk#10, i_item_sk#8, d_moy#7, n#18, avg#19, m2#20, sum#21, count#22] -Arguments: hashpartitioning(w_warehouse_name#11, w_warehouse_sk#10, i_item_sk#8, d_moy#7, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [9]: [w_warehouse_name#10, w_warehouse_sk#9, i_item_sk#8, d_moy#7, n#16, avg#17, m2#18, sum#19, count#20] +Arguments: hashpartitioning(w_warehouse_name#10, w_warehouse_sk#9, i_item_sk#8, d_moy#7, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 5] -Input [9]: [w_warehouse_name#11, w_warehouse_sk#10, i_item_sk#8, d_moy#7, n#18, avg#19, m2#20, sum#21, count#22] -Keys [4]: [w_warehouse_name#11, w_warehouse_sk#10, i_item_sk#8, d_moy#7] +Input [9]: [w_warehouse_name#10, w_warehouse_sk#9, i_item_sk#8, d_moy#7, n#16, avg#17, m2#18, sum#19, count#20] +Keys [4]: [w_warehouse_name#10, w_warehouse_sk#9, i_item_sk#8, d_moy#7] Functions [2]: [stddev_samp(cast(inv_quantity_on_hand#3 as double)), avg(inv_quantity_on_hand#3)] -Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#3 as double))#24, avg(inv_quantity_on_hand#3)#25] -Results [5]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, stddev_samp(cast(inv_quantity_on_hand#3 as double))#24 AS stdev#26, avg(inv_quantity_on_hand#3)#25 AS mean#27] +Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#3 as double))#21, avg(inv_quantity_on_hand#3)#22] +Results [5]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, stddev_samp(cast(inv_quantity_on_hand#3 as double))#21 AS stdev#23, avg(inv_quantity_on_hand#3)#22 AS mean#24] (22) Filter [codegen id : 5] -Input [5]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, stdev#26, mean#27] -Condition : ((isnotnull(stdev#26) AND isnotnull(mean#27)) AND (NOT coalesce((mean#27 = 0.0), false) AND ((stdev#26 / mean#27) > 1.0))) +Input [5]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, stdev#23, mean#24] +Condition : ((isnotnull(stdev#23) AND isnotnull(mean#24)) AND (NOT coalesce((mean#24 = 0.0), false) AND ((stdev#23 / mean#24) > 1.0))) (23) Project [codegen id : 5] -Output [5]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, mean#27, CASE WHEN (mean#27 = 0.0) THEN null ELSE (stdev#26 / mean#27) END AS cov#28] -Input [5]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, stdev#26, mean#27] +Output [5]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, mean#24, CASE WHEN (mean#24 = 0.0) THEN null ELSE (stdev#23 / mean#24) END AS cov#25] +Input [5]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, stdev#23, mean#24] (24) Exchange -Input [5]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, mean#27, cov#28] -Arguments: hashpartitioning(i_item_sk#8, w_warehouse_sk#10, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [5]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, mean#24, cov#25] +Arguments: hashpartitioning(i_item_sk#8, w_warehouse_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=4] (25) Sort [codegen id : 6] -Input [5]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, mean#27, cov#28] -Arguments: [i_item_sk#8 ASC NULLS FIRST, w_warehouse_sk#10 ASC NULLS FIRST], false, 0 +Input [5]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, mean#24, cov#25] +Arguments: [i_item_sk#8 ASC NULLS FIRST, w_warehouse_sk#9 ASC NULLS FIRST], false, 0 (26) Scan parquet default.inventory -Output [4]: [inv_item_sk#30, inv_warehouse_sk#31, inv_quantity_on_hand#32, inv_date_sk#33] +Output [4]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(inv_date_sk#33), dynamicpruningexpression(inv_date_sk#33 IN dynamicpruning#34)] +PartitionFilters: [isnotnull(inv_date_sk#29), dynamicpruningexpression(inv_date_sk#29 IN dynamicpruning#30)] PushedFilters: [IsNotNull(inv_item_sk), IsNotNull(inv_warehouse_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 10] -Input [4]: [inv_item_sk#30, inv_warehouse_sk#31, inv_quantity_on_hand#32, inv_date_sk#33] +Input [4]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29] (28) Filter [codegen id : 10] -Input [4]: [inv_item_sk#30, inv_warehouse_sk#31, inv_quantity_on_hand#32, inv_date_sk#33] -Condition : (isnotnull(inv_item_sk#30) AND isnotnull(inv_warehouse_sk#31)) +Input [4]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29] +Condition : (isnotnull(inv_item_sk#26) AND isnotnull(inv_warehouse_sk#27)) (29) ReusedExchange [Reuses operator id: 57] -Output [2]: [d_date_sk#35, d_moy#36] +Output [2]: [d_date_sk#31, d_moy#32] (30) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [inv_date_sk#33] -Right keys [1]: [d_date_sk#35] +Left keys [1]: [inv_date_sk#29] +Right keys [1]: [d_date_sk#31] Join condition: None (31) Project [codegen id : 10] -Output [4]: [inv_item_sk#30, inv_warehouse_sk#31, inv_quantity_on_hand#32, d_moy#36] -Input [6]: [inv_item_sk#30, inv_warehouse_sk#31, inv_quantity_on_hand#32, inv_date_sk#33, d_date_sk#35, d_moy#36] +Output [4]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, d_moy#32] +Input [6]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29, d_date_sk#31, d_moy#32] (32) ReusedExchange [Reuses operator id: 10] -Output [1]: [i_item_sk#37] +Output [1]: [i_item_sk#33] (33) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [inv_item_sk#30] -Right keys [1]: [i_item_sk#37] +Left keys [1]: [inv_item_sk#26] +Right keys [1]: [i_item_sk#33] Join condition: None (34) Project [codegen id : 10] -Output [4]: [inv_warehouse_sk#31, inv_quantity_on_hand#32, d_moy#36, i_item_sk#37] -Input [5]: [inv_item_sk#30, inv_warehouse_sk#31, inv_quantity_on_hand#32, d_moy#36, i_item_sk#37] +Output [4]: [inv_warehouse_sk#27, inv_quantity_on_hand#28, d_moy#32, i_item_sk#33] +Input [5]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, d_moy#32, i_item_sk#33] (35) ReusedExchange [Reuses operator id: 16] -Output [2]: [w_warehouse_sk#38, w_warehouse_name#39] +Output [2]: [w_warehouse_sk#34, w_warehouse_name#35] (36) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [inv_warehouse_sk#31] -Right keys [1]: [w_warehouse_sk#38] +Left keys [1]: [inv_warehouse_sk#27] +Right keys [1]: [w_warehouse_sk#34] Join condition: None (37) Project [codegen id : 10] -Output [5]: [inv_quantity_on_hand#32, i_item_sk#37, w_warehouse_sk#38, w_warehouse_name#39, d_moy#36] -Input [6]: [inv_warehouse_sk#31, inv_quantity_on_hand#32, d_moy#36, i_item_sk#37, w_warehouse_sk#38, w_warehouse_name#39] +Output [5]: [inv_quantity_on_hand#28, i_item_sk#33, w_warehouse_sk#34, w_warehouse_name#35, d_moy#32] +Input [6]: [inv_warehouse_sk#27, inv_quantity_on_hand#28, d_moy#32, i_item_sk#33, w_warehouse_sk#34, w_warehouse_name#35] (38) HashAggregate [codegen id : 10] -Input [5]: [inv_quantity_on_hand#32, i_item_sk#37, w_warehouse_sk#38, w_warehouse_name#39, d_moy#36] -Keys [4]: [w_warehouse_name#39, w_warehouse_sk#38, i_item_sk#37, d_moy#36] -Functions [2]: [partial_stddev_samp(cast(inv_quantity_on_hand#32 as double)), partial_avg(inv_quantity_on_hand#32)] -Aggregate Attributes [5]: [n#40, avg#41, m2#42, sum#43, count#44] -Results [9]: [w_warehouse_name#39, w_warehouse_sk#38, i_item_sk#37, d_moy#36, n#45, avg#46, m2#47, sum#48, count#49] +Input [5]: [inv_quantity_on_hand#28, i_item_sk#33, w_warehouse_sk#34, w_warehouse_name#35, d_moy#32] +Keys [4]: [w_warehouse_name#35, w_warehouse_sk#34, i_item_sk#33, d_moy#32] +Functions [2]: [partial_stddev_samp(cast(inv_quantity_on_hand#28 as double)), partial_avg(inv_quantity_on_hand#28)] +Aggregate Attributes [5]: [n#36, avg#37, m2#38, sum#39, count#40] +Results [9]: [w_warehouse_name#35, w_warehouse_sk#34, i_item_sk#33, d_moy#32, n#41, avg#42, m2#43, sum#44, count#45] (39) Exchange -Input [9]: [w_warehouse_name#39, w_warehouse_sk#38, i_item_sk#37, d_moy#36, n#45, avg#46, m2#47, sum#48, count#49] -Arguments: hashpartitioning(w_warehouse_name#39, w_warehouse_sk#38, i_item_sk#37, d_moy#36, 5), ENSURE_REQUIREMENTS, [id=#50] +Input [9]: [w_warehouse_name#35, w_warehouse_sk#34, i_item_sk#33, d_moy#32, n#41, avg#42, m2#43, sum#44, count#45] +Arguments: hashpartitioning(w_warehouse_name#35, w_warehouse_sk#34, i_item_sk#33, d_moy#32, 5), ENSURE_REQUIREMENTS, [plan_id=5] (40) HashAggregate [codegen id : 11] -Input [9]: [w_warehouse_name#39, w_warehouse_sk#38, i_item_sk#37, d_moy#36, n#45, avg#46, m2#47, sum#48, count#49] -Keys [4]: [w_warehouse_name#39, w_warehouse_sk#38, i_item_sk#37, d_moy#36] -Functions [2]: [stddev_samp(cast(inv_quantity_on_hand#32 as double)), avg(inv_quantity_on_hand#32)] -Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#32 as double))#24, avg(inv_quantity_on_hand#32)#25] -Results [5]: [w_warehouse_sk#38, i_item_sk#37, d_moy#36, stddev_samp(cast(inv_quantity_on_hand#32 as double))#24 AS stdev#26, avg(inv_quantity_on_hand#32)#25 AS mean#27] +Input [9]: [w_warehouse_name#35, w_warehouse_sk#34, i_item_sk#33, d_moy#32, n#41, avg#42, m2#43, sum#44, count#45] +Keys [4]: [w_warehouse_name#35, w_warehouse_sk#34, i_item_sk#33, d_moy#32] +Functions [2]: [stddev_samp(cast(inv_quantity_on_hand#28 as double)), avg(inv_quantity_on_hand#28)] +Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#28 as double))#21, avg(inv_quantity_on_hand#28)#22] +Results [5]: [w_warehouse_sk#34, i_item_sk#33, d_moy#32, stddev_samp(cast(inv_quantity_on_hand#28 as double))#21 AS stdev#23, avg(inv_quantity_on_hand#28)#22 AS mean#24] (41) Filter [codegen id : 11] -Input [5]: [w_warehouse_sk#38, i_item_sk#37, d_moy#36, stdev#26, mean#27] -Condition : ((isnotnull(stdev#26) AND isnotnull(mean#27)) AND (NOT coalesce((mean#27 = 0.0), false) AND ((stdev#26 / mean#27) > 1.0))) +Input [5]: [w_warehouse_sk#34, i_item_sk#33, d_moy#32, stdev#23, mean#24] +Condition : ((isnotnull(stdev#23) AND isnotnull(mean#24)) AND (NOT coalesce((mean#24 = 0.0), false) AND ((stdev#23 / mean#24) > 1.0))) (42) Project [codegen id : 11] -Output [5]: [w_warehouse_sk#38, i_item_sk#37, d_moy#36, mean#27 AS mean#51, CASE WHEN (mean#27 = 0.0) THEN null ELSE (stdev#26 / mean#27) END AS cov#52] -Input [5]: [w_warehouse_sk#38, i_item_sk#37, d_moy#36, stdev#26, mean#27] +Output [5]: [w_warehouse_sk#34, i_item_sk#33, d_moy#32, mean#24 AS mean#46, CASE WHEN (mean#24 = 0.0) THEN null ELSE (stdev#23 / mean#24) END AS cov#47] +Input [5]: [w_warehouse_sk#34, i_item_sk#33, d_moy#32, stdev#23, mean#24] (43) Exchange -Input [5]: [w_warehouse_sk#38, i_item_sk#37, d_moy#36, mean#51, cov#52] -Arguments: hashpartitioning(i_item_sk#37, w_warehouse_sk#38, 5), ENSURE_REQUIREMENTS, [id=#53] +Input [5]: [w_warehouse_sk#34, i_item_sk#33, d_moy#32, mean#46, cov#47] +Arguments: hashpartitioning(i_item_sk#33, w_warehouse_sk#34, 5), ENSURE_REQUIREMENTS, [plan_id=6] (44) Sort [codegen id : 12] -Input [5]: [w_warehouse_sk#38, i_item_sk#37, d_moy#36, mean#51, cov#52] -Arguments: [i_item_sk#37 ASC NULLS FIRST, w_warehouse_sk#38 ASC NULLS FIRST], false, 0 +Input [5]: [w_warehouse_sk#34, i_item_sk#33, d_moy#32, mean#46, cov#47] +Arguments: [i_item_sk#33 ASC NULLS FIRST, w_warehouse_sk#34 ASC NULLS FIRST], false, 0 (45) SortMergeJoin [codegen id : 13] -Left keys [2]: [i_item_sk#8, w_warehouse_sk#10] -Right keys [2]: [i_item_sk#37, w_warehouse_sk#38] +Left keys [2]: [i_item_sk#8, w_warehouse_sk#9] +Right keys [2]: [i_item_sk#33, w_warehouse_sk#34] Join condition: None (46) Exchange -Input [10]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, mean#27, cov#28, w_warehouse_sk#38, i_item_sk#37, d_moy#36, mean#51, cov#52] -Arguments: rangepartitioning(w_warehouse_sk#10 ASC NULLS FIRST, i_item_sk#8 ASC NULLS FIRST, d_moy#7 ASC NULLS FIRST, mean#27 ASC NULLS FIRST, cov#28 ASC NULLS FIRST, d_moy#36 ASC NULLS FIRST, mean#51 ASC NULLS FIRST, cov#52 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#54] +Input [10]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, mean#24, cov#25, w_warehouse_sk#34, i_item_sk#33, d_moy#32, mean#46, cov#47] +Arguments: rangepartitioning(w_warehouse_sk#9 ASC NULLS FIRST, i_item_sk#8 ASC NULLS FIRST, d_moy#7 ASC NULLS FIRST, mean#24 ASC NULLS FIRST, cov#25 ASC NULLS FIRST, d_moy#32 ASC NULLS FIRST, mean#46 ASC NULLS FIRST, cov#47 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=7] (47) Sort [codegen id : 14] -Input [10]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, mean#27, cov#28, w_warehouse_sk#38, i_item_sk#37, d_moy#36, mean#51, cov#52] -Arguments: [w_warehouse_sk#10 ASC NULLS FIRST, i_item_sk#8 ASC NULLS FIRST, d_moy#7 ASC NULLS FIRST, mean#27 ASC NULLS FIRST, cov#28 ASC NULLS FIRST, d_moy#36 ASC NULLS FIRST, mean#51 ASC NULLS FIRST, cov#52 ASC NULLS FIRST], true, 0 +Input [10]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, mean#24, cov#25, w_warehouse_sk#34, i_item_sk#33, d_moy#32, mean#46, cov#47] +Arguments: [w_warehouse_sk#9 ASC NULLS FIRST, i_item_sk#8 ASC NULLS FIRST, d_moy#7 ASC NULLS FIRST, mean#24 ASC NULLS FIRST, cov#25 ASC NULLS FIRST, d_moy#32 ASC NULLS FIRST, mean#46 ASC NULLS FIRST, cov#47 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -272,28 +272,28 @@ BroadcastExchange (52) (48) Scan parquet default.date_dim -Output [3]: [d_date_sk#6, d_year#55, d_moy#7] +Output [3]: [d_date_sk#6, d_year#48, d_moy#7] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,1), IsNotNull(d_date_sk)] ReadSchema: struct (49) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#55, d_moy#7] +Input [3]: [d_date_sk#6, d_year#48, d_moy#7] (50) Filter [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#55, d_moy#7] -Condition : ((((isnotnull(d_year#55) AND isnotnull(d_moy#7)) AND (d_year#55 = 2001)) AND (d_moy#7 = 1)) AND isnotnull(d_date_sk#6)) +Input [3]: [d_date_sk#6, d_year#48, d_moy#7] +Condition : ((((isnotnull(d_year#48) AND isnotnull(d_moy#7)) AND (d_year#48 = 2001)) AND (d_moy#7 = 1)) AND isnotnull(d_date_sk#6)) (51) Project [codegen id : 1] Output [2]: [d_date_sk#6, d_moy#7] -Input [3]: [d_date_sk#6, d_year#55, d_moy#7] +Input [3]: [d_date_sk#6, d_year#48, d_moy#7] (52) BroadcastExchange Input [2]: [d_date_sk#6, d_moy#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#56] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 26 Hosting Expression = inv_date_sk#33 IN dynamicpruning#34 +Subquery:2 Hosting operator id = 26 Hosting Expression = inv_date_sk#29 IN dynamicpruning#30 BroadcastExchange (57) +- * Project (56) +- * Filter (55) @@ -302,25 +302,25 @@ BroadcastExchange (57) (53) Scan parquet default.date_dim -Output [3]: [d_date_sk#35, d_year#57, d_moy#36] +Output [3]: [d_date_sk#31, d_year#49, d_moy#32] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,2), IsNotNull(d_date_sk)] ReadSchema: struct (54) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#35, d_year#57, d_moy#36] +Input [3]: [d_date_sk#31, d_year#49, d_moy#32] (55) Filter [codegen id : 1] -Input [3]: [d_date_sk#35, d_year#57, d_moy#36] -Condition : ((((isnotnull(d_year#57) AND isnotnull(d_moy#36)) AND (d_year#57 = 2001)) AND (d_moy#36 = 2)) AND isnotnull(d_date_sk#35)) +Input [3]: [d_date_sk#31, d_year#49, d_moy#32] +Condition : ((((isnotnull(d_year#49) AND isnotnull(d_moy#32)) AND (d_year#49 = 2001)) AND (d_moy#32 = 2)) AND isnotnull(d_date_sk#31)) (56) Project [codegen id : 1] -Output [2]: [d_date_sk#35, d_moy#36] -Input [3]: [d_date_sk#35, d_year#57, d_moy#36] +Output [2]: [d_date_sk#31, d_moy#32] +Input [3]: [d_date_sk#31, d_year#49, d_moy#32] (57) BroadcastExchange -Input [2]: [d_date_sk#35, d_moy#36] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#58] +Input [2]: [d_date_sk#31, d_moy#32] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39a/explain.txt index 541a5903e362e..bbf9b5185e776 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39a/explain.txt @@ -76,7 +76,7 @@ Condition : isnotnull(i_item_sk#6) (7) BroadcastExchange Input [1]: [i_item_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_item_sk#1] @@ -88,163 +88,163 @@ Output [4]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_s Input [5]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6] (10) Scan parquet default.warehouse -Output [2]: [w_warehouse_sk#8, w_warehouse_name#9] +Output [2]: [w_warehouse_sk#7, w_warehouse_name#8] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [2]: [w_warehouse_sk#8, w_warehouse_name#9] +Input [2]: [w_warehouse_sk#7, w_warehouse_name#8] (12) Filter [codegen id : 2] -Input [2]: [w_warehouse_sk#8, w_warehouse_name#9] -Condition : isnotnull(w_warehouse_sk#8) +Input [2]: [w_warehouse_sk#7, w_warehouse_name#8] +Condition : isnotnull(w_warehouse_sk#7) (13) BroadcastExchange -Input [2]: [w_warehouse_sk#8, w_warehouse_name#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#10] +Input [2]: [w_warehouse_sk#7, w_warehouse_name#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_warehouse_sk#2] -Right keys [1]: [w_warehouse_sk#8] +Right keys [1]: [w_warehouse_sk#7] Join condition: None (15) Project [codegen id : 4] -Output [5]: [inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#8, w_warehouse_name#9] -Input [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#8, w_warehouse_name#9] +Output [5]: [inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8] +Input [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8] (16) ReusedExchange [Reuses operator id: 49] -Output [2]: [d_date_sk#11, d_moy#12] +Output [2]: [d_date_sk#9, d_moy#10] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_date_sk#4] -Right keys [1]: [d_date_sk#11] +Right keys [1]: [d_date_sk#9] Join condition: None (18) Project [codegen id : 4] -Output [5]: [inv_quantity_on_hand#3, i_item_sk#6, w_warehouse_sk#8, w_warehouse_name#9, d_moy#12] -Input [7]: [inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#8, w_warehouse_name#9, d_date_sk#11, d_moy#12] +Output [5]: [inv_quantity_on_hand#3, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8, d_moy#10] +Input [7]: [inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8, d_date_sk#9, d_moy#10] (19) HashAggregate [codegen id : 4] -Input [5]: [inv_quantity_on_hand#3, i_item_sk#6, w_warehouse_sk#8, w_warehouse_name#9, d_moy#12] -Keys [4]: [w_warehouse_name#9, w_warehouse_sk#8, i_item_sk#6, d_moy#12] +Input [5]: [inv_quantity_on_hand#3, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8, d_moy#10] +Keys [4]: [w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#10] Functions [2]: [partial_stddev_samp(cast(inv_quantity_on_hand#3 as double)), partial_avg(inv_quantity_on_hand#3)] -Aggregate Attributes [5]: [n#13, avg#14, m2#15, sum#16, count#17] -Results [9]: [w_warehouse_name#9, w_warehouse_sk#8, i_item_sk#6, d_moy#12, n#18, avg#19, m2#20, sum#21, count#22] +Aggregate Attributes [5]: [n#11, avg#12, m2#13, sum#14, count#15] +Results [9]: [w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#10, n#16, avg#17, m2#18, sum#19, count#20] (20) Exchange -Input [9]: [w_warehouse_name#9, w_warehouse_sk#8, i_item_sk#6, d_moy#12, n#18, avg#19, m2#20, sum#21, count#22] -Arguments: hashpartitioning(w_warehouse_name#9, w_warehouse_sk#8, i_item_sk#6, d_moy#12, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [9]: [w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#10, n#16, avg#17, m2#18, sum#19, count#20] +Arguments: hashpartitioning(w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#10, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 10] -Input [9]: [w_warehouse_name#9, w_warehouse_sk#8, i_item_sk#6, d_moy#12, n#18, avg#19, m2#20, sum#21, count#22] -Keys [4]: [w_warehouse_name#9, w_warehouse_sk#8, i_item_sk#6, d_moy#12] +Input [9]: [w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#10, n#16, avg#17, m2#18, sum#19, count#20] +Keys [4]: [w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#10] Functions [2]: [stddev_samp(cast(inv_quantity_on_hand#3 as double)), avg(inv_quantity_on_hand#3)] -Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#3 as double))#24, avg(inv_quantity_on_hand#3)#25] -Results [5]: [w_warehouse_sk#8, i_item_sk#6, d_moy#12, stddev_samp(cast(inv_quantity_on_hand#3 as double))#24 AS stdev#26, avg(inv_quantity_on_hand#3)#25 AS mean#27] +Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#3 as double))#21, avg(inv_quantity_on_hand#3)#22] +Results [5]: [w_warehouse_sk#7, i_item_sk#6, d_moy#10, stddev_samp(cast(inv_quantity_on_hand#3 as double))#21 AS stdev#23, avg(inv_quantity_on_hand#3)#22 AS mean#24] (22) Filter [codegen id : 10] -Input [5]: [w_warehouse_sk#8, i_item_sk#6, d_moy#12, stdev#26, mean#27] -Condition : ((isnotnull(stdev#26) AND isnotnull(mean#27)) AND (NOT coalesce((mean#27 = 0.0), false) AND ((stdev#26 / mean#27) > 1.0))) +Input [5]: [w_warehouse_sk#7, i_item_sk#6, d_moy#10, stdev#23, mean#24] +Condition : ((isnotnull(stdev#23) AND isnotnull(mean#24)) AND (NOT coalesce((mean#24 = 0.0), false) AND ((stdev#23 / mean#24) > 1.0))) (23) Project [codegen id : 10] -Output [5]: [w_warehouse_sk#8, i_item_sk#6, d_moy#12, mean#27, CASE WHEN (mean#27 = 0.0) THEN null ELSE (stdev#26 / mean#27) END AS cov#28] -Input [5]: [w_warehouse_sk#8, i_item_sk#6, d_moy#12, stdev#26, mean#27] +Output [5]: [w_warehouse_sk#7, i_item_sk#6, d_moy#10, mean#24, CASE WHEN (mean#24 = 0.0) THEN null ELSE (stdev#23 / mean#24) END AS cov#25] +Input [5]: [w_warehouse_sk#7, i_item_sk#6, d_moy#10, stdev#23, mean#24] (24) Scan parquet default.inventory -Output [4]: [inv_item_sk#29, inv_warehouse_sk#30, inv_quantity_on_hand#31, inv_date_sk#32] +Output [4]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(inv_date_sk#32), dynamicpruningexpression(inv_date_sk#32 IN dynamicpruning#33)] +PartitionFilters: [isnotnull(inv_date_sk#29), dynamicpruningexpression(inv_date_sk#29 IN dynamicpruning#30)] PushedFilters: [IsNotNull(inv_item_sk), IsNotNull(inv_warehouse_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 8] -Input [4]: [inv_item_sk#29, inv_warehouse_sk#30, inv_quantity_on_hand#31, inv_date_sk#32] +Input [4]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29] (26) Filter [codegen id : 8] -Input [4]: [inv_item_sk#29, inv_warehouse_sk#30, inv_quantity_on_hand#31, inv_date_sk#32] -Condition : (isnotnull(inv_item_sk#29) AND isnotnull(inv_warehouse_sk#30)) +Input [4]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29] +Condition : (isnotnull(inv_item_sk#26) AND isnotnull(inv_warehouse_sk#27)) (27) ReusedExchange [Reuses operator id: 7] -Output [1]: [i_item_sk#34] +Output [1]: [i_item_sk#31] (28) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [inv_item_sk#29] -Right keys [1]: [i_item_sk#34] +Left keys [1]: [inv_item_sk#26] +Right keys [1]: [i_item_sk#31] Join condition: None (29) Project [codegen id : 8] -Output [4]: [inv_warehouse_sk#30, inv_quantity_on_hand#31, inv_date_sk#32, i_item_sk#34] -Input [5]: [inv_item_sk#29, inv_warehouse_sk#30, inv_quantity_on_hand#31, inv_date_sk#32, i_item_sk#34] +Output [4]: [inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29, i_item_sk#31] +Input [5]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29, i_item_sk#31] (30) ReusedExchange [Reuses operator id: 13] -Output [2]: [w_warehouse_sk#35, w_warehouse_name#36] +Output [2]: [w_warehouse_sk#32, w_warehouse_name#33] (31) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [inv_warehouse_sk#30] -Right keys [1]: [w_warehouse_sk#35] +Left keys [1]: [inv_warehouse_sk#27] +Right keys [1]: [w_warehouse_sk#32] Join condition: None (32) Project [codegen id : 8] -Output [5]: [inv_quantity_on_hand#31, inv_date_sk#32, i_item_sk#34, w_warehouse_sk#35, w_warehouse_name#36] -Input [6]: [inv_warehouse_sk#30, inv_quantity_on_hand#31, inv_date_sk#32, i_item_sk#34, w_warehouse_sk#35, w_warehouse_name#36] +Output [5]: [inv_quantity_on_hand#28, inv_date_sk#29, i_item_sk#31, w_warehouse_sk#32, w_warehouse_name#33] +Input [6]: [inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29, i_item_sk#31, w_warehouse_sk#32, w_warehouse_name#33] (33) ReusedExchange [Reuses operator id: 54] -Output [2]: [d_date_sk#37, d_moy#38] +Output [2]: [d_date_sk#34, d_moy#35] (34) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [inv_date_sk#32] -Right keys [1]: [d_date_sk#37] +Left keys [1]: [inv_date_sk#29] +Right keys [1]: [d_date_sk#34] Join condition: None (35) Project [codegen id : 8] -Output [5]: [inv_quantity_on_hand#31, i_item_sk#34, w_warehouse_sk#35, w_warehouse_name#36, d_moy#38] -Input [7]: [inv_quantity_on_hand#31, inv_date_sk#32, i_item_sk#34, w_warehouse_sk#35, w_warehouse_name#36, d_date_sk#37, d_moy#38] +Output [5]: [inv_quantity_on_hand#28, i_item_sk#31, w_warehouse_sk#32, w_warehouse_name#33, d_moy#35] +Input [7]: [inv_quantity_on_hand#28, inv_date_sk#29, i_item_sk#31, w_warehouse_sk#32, w_warehouse_name#33, d_date_sk#34, d_moy#35] (36) HashAggregate [codegen id : 8] -Input [5]: [inv_quantity_on_hand#31, i_item_sk#34, w_warehouse_sk#35, w_warehouse_name#36, d_moy#38] -Keys [4]: [w_warehouse_name#36, w_warehouse_sk#35, i_item_sk#34, d_moy#38] -Functions [2]: [partial_stddev_samp(cast(inv_quantity_on_hand#31 as double)), partial_avg(inv_quantity_on_hand#31)] -Aggregate Attributes [5]: [n#39, avg#40, m2#41, sum#42, count#43] -Results [9]: [w_warehouse_name#36, w_warehouse_sk#35, i_item_sk#34, d_moy#38, n#44, avg#45, m2#46, sum#47, count#48] +Input [5]: [inv_quantity_on_hand#28, i_item_sk#31, w_warehouse_sk#32, w_warehouse_name#33, d_moy#35] +Keys [4]: [w_warehouse_name#33, w_warehouse_sk#32, i_item_sk#31, d_moy#35] +Functions [2]: [partial_stddev_samp(cast(inv_quantity_on_hand#28 as double)), partial_avg(inv_quantity_on_hand#28)] +Aggregate Attributes [5]: [n#36, avg#37, m2#38, sum#39, count#40] +Results [9]: [w_warehouse_name#33, w_warehouse_sk#32, i_item_sk#31, d_moy#35, n#41, avg#42, m2#43, sum#44, count#45] (37) Exchange -Input [9]: [w_warehouse_name#36, w_warehouse_sk#35, i_item_sk#34, d_moy#38, n#44, avg#45, m2#46, sum#47, count#48] -Arguments: hashpartitioning(w_warehouse_name#36, w_warehouse_sk#35, i_item_sk#34, d_moy#38, 5), ENSURE_REQUIREMENTS, [id=#49] +Input [9]: [w_warehouse_name#33, w_warehouse_sk#32, i_item_sk#31, d_moy#35, n#41, avg#42, m2#43, sum#44, count#45] +Arguments: hashpartitioning(w_warehouse_name#33, w_warehouse_sk#32, i_item_sk#31, d_moy#35, 5), ENSURE_REQUIREMENTS, [plan_id=4] (38) HashAggregate [codegen id : 9] -Input [9]: [w_warehouse_name#36, w_warehouse_sk#35, i_item_sk#34, d_moy#38, n#44, avg#45, m2#46, sum#47, count#48] -Keys [4]: [w_warehouse_name#36, w_warehouse_sk#35, i_item_sk#34, d_moy#38] -Functions [2]: [stddev_samp(cast(inv_quantity_on_hand#31 as double)), avg(inv_quantity_on_hand#31)] -Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#31 as double))#24, avg(inv_quantity_on_hand#31)#25] -Results [5]: [w_warehouse_sk#35, i_item_sk#34, d_moy#38, stddev_samp(cast(inv_quantity_on_hand#31 as double))#24 AS stdev#26, avg(inv_quantity_on_hand#31)#25 AS mean#27] +Input [9]: [w_warehouse_name#33, w_warehouse_sk#32, i_item_sk#31, d_moy#35, n#41, avg#42, m2#43, sum#44, count#45] +Keys [4]: [w_warehouse_name#33, w_warehouse_sk#32, i_item_sk#31, d_moy#35] +Functions [2]: [stddev_samp(cast(inv_quantity_on_hand#28 as double)), avg(inv_quantity_on_hand#28)] +Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#28 as double))#21, avg(inv_quantity_on_hand#28)#22] +Results [5]: [w_warehouse_sk#32, i_item_sk#31, d_moy#35, stddev_samp(cast(inv_quantity_on_hand#28 as double))#21 AS stdev#23, avg(inv_quantity_on_hand#28)#22 AS mean#24] (39) Filter [codegen id : 9] -Input [5]: [w_warehouse_sk#35, i_item_sk#34, d_moy#38, stdev#26, mean#27] -Condition : ((isnotnull(stdev#26) AND isnotnull(mean#27)) AND (NOT coalesce((mean#27 = 0.0), false) AND ((stdev#26 / mean#27) > 1.0))) +Input [5]: [w_warehouse_sk#32, i_item_sk#31, d_moy#35, stdev#23, mean#24] +Condition : ((isnotnull(stdev#23) AND isnotnull(mean#24)) AND (NOT coalesce((mean#24 = 0.0), false) AND ((stdev#23 / mean#24) > 1.0))) (40) Project [codegen id : 9] -Output [5]: [w_warehouse_sk#35, i_item_sk#34, d_moy#38, mean#27 AS mean#50, CASE WHEN (mean#27 = 0.0) THEN null ELSE (stdev#26 / mean#27) END AS cov#51] -Input [5]: [w_warehouse_sk#35, i_item_sk#34, d_moy#38, stdev#26, mean#27] +Output [5]: [w_warehouse_sk#32, i_item_sk#31, d_moy#35, mean#24 AS mean#46, CASE WHEN (mean#24 = 0.0) THEN null ELSE (stdev#23 / mean#24) END AS cov#47] +Input [5]: [w_warehouse_sk#32, i_item_sk#31, d_moy#35, stdev#23, mean#24] (41) BroadcastExchange -Input [5]: [w_warehouse_sk#35, i_item_sk#34, d_moy#38, mean#50, cov#51] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [id=#52] +Input [5]: [w_warehouse_sk#32, i_item_sk#31, d_moy#35, mean#46, cov#47] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [plan_id=5] (42) BroadcastHashJoin [codegen id : 10] -Left keys [2]: [i_item_sk#6, w_warehouse_sk#8] -Right keys [2]: [i_item_sk#34, w_warehouse_sk#35] +Left keys [2]: [i_item_sk#6, w_warehouse_sk#7] +Right keys [2]: [i_item_sk#31, w_warehouse_sk#32] Join condition: None (43) Exchange -Input [10]: [w_warehouse_sk#8, i_item_sk#6, d_moy#12, mean#27, cov#28, w_warehouse_sk#35, i_item_sk#34, d_moy#38, mean#50, cov#51] -Arguments: rangepartitioning(w_warehouse_sk#8 ASC NULLS FIRST, i_item_sk#6 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST, mean#27 ASC NULLS FIRST, cov#28 ASC NULLS FIRST, d_moy#38 ASC NULLS FIRST, mean#50 ASC NULLS FIRST, cov#51 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#53] +Input [10]: [w_warehouse_sk#7, i_item_sk#6, d_moy#10, mean#24, cov#25, w_warehouse_sk#32, i_item_sk#31, d_moy#35, mean#46, cov#47] +Arguments: rangepartitioning(w_warehouse_sk#7 ASC NULLS FIRST, i_item_sk#6 ASC NULLS FIRST, d_moy#10 ASC NULLS FIRST, mean#24 ASC NULLS FIRST, cov#25 ASC NULLS FIRST, d_moy#35 ASC NULLS FIRST, mean#46 ASC NULLS FIRST, cov#47 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=6] (44) Sort [codegen id : 11] -Input [10]: [w_warehouse_sk#8, i_item_sk#6, d_moy#12, mean#27, cov#28, w_warehouse_sk#35, i_item_sk#34, d_moy#38, mean#50, cov#51] -Arguments: [w_warehouse_sk#8 ASC NULLS FIRST, i_item_sk#6 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST, mean#27 ASC NULLS FIRST, cov#28 ASC NULLS FIRST, d_moy#38 ASC NULLS FIRST, mean#50 ASC NULLS FIRST, cov#51 ASC NULLS FIRST], true, 0 +Input [10]: [w_warehouse_sk#7, i_item_sk#6, d_moy#10, mean#24, cov#25, w_warehouse_sk#32, i_item_sk#31, d_moy#35, mean#46, cov#47] +Arguments: [w_warehouse_sk#7 ASC NULLS FIRST, i_item_sk#6 ASC NULLS FIRST, d_moy#10 ASC NULLS FIRST, mean#24 ASC NULLS FIRST, cov#25 ASC NULLS FIRST, d_moy#35 ASC NULLS FIRST, mean#46 ASC NULLS FIRST, cov#47 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -257,28 +257,28 @@ BroadcastExchange (49) (45) Scan parquet default.date_dim -Output [3]: [d_date_sk#11, d_year#54, d_moy#12] +Output [3]: [d_date_sk#9, d_year#48, d_moy#10] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,1), IsNotNull(d_date_sk)] ReadSchema: struct (46) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#54, d_moy#12] +Input [3]: [d_date_sk#9, d_year#48, d_moy#10] (47) Filter [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#54, d_moy#12] -Condition : ((((isnotnull(d_year#54) AND isnotnull(d_moy#12)) AND (d_year#54 = 2001)) AND (d_moy#12 = 1)) AND isnotnull(d_date_sk#11)) +Input [3]: [d_date_sk#9, d_year#48, d_moy#10] +Condition : ((((isnotnull(d_year#48) AND isnotnull(d_moy#10)) AND (d_year#48 = 2001)) AND (d_moy#10 = 1)) AND isnotnull(d_date_sk#9)) (48) Project [codegen id : 1] -Output [2]: [d_date_sk#11, d_moy#12] -Input [3]: [d_date_sk#11, d_year#54, d_moy#12] +Output [2]: [d_date_sk#9, d_moy#10] +Input [3]: [d_date_sk#9, d_year#48, d_moy#10] (49) BroadcastExchange -Input [2]: [d_date_sk#11, d_moy#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#55] +Input [2]: [d_date_sk#9, d_moy#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:2 Hosting operator id = 24 Hosting Expression = inv_date_sk#32 IN dynamicpruning#33 +Subquery:2 Hosting operator id = 24 Hosting Expression = inv_date_sk#29 IN dynamicpruning#30 BroadcastExchange (54) +- * Project (53) +- * Filter (52) @@ -287,25 +287,25 @@ BroadcastExchange (54) (50) Scan parquet default.date_dim -Output [3]: [d_date_sk#37, d_year#56, d_moy#38] +Output [3]: [d_date_sk#34, d_year#49, d_moy#35] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,2), IsNotNull(d_date_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#37, d_year#56, d_moy#38] +Input [3]: [d_date_sk#34, d_year#49, d_moy#35] (52) Filter [codegen id : 1] -Input [3]: [d_date_sk#37, d_year#56, d_moy#38] -Condition : ((((isnotnull(d_year#56) AND isnotnull(d_moy#38)) AND (d_year#56 = 2001)) AND (d_moy#38 = 2)) AND isnotnull(d_date_sk#37)) +Input [3]: [d_date_sk#34, d_year#49, d_moy#35] +Condition : ((((isnotnull(d_year#49) AND isnotnull(d_moy#35)) AND (d_year#49 = 2001)) AND (d_moy#35 = 2)) AND isnotnull(d_date_sk#34)) (53) Project [codegen id : 1] -Output [2]: [d_date_sk#37, d_moy#38] -Input [3]: [d_date_sk#37, d_year#56, d_moy#38] +Output [2]: [d_date_sk#34, d_moy#35] +Input [3]: [d_date_sk#34, d_year#49, d_moy#35] (54) BroadcastExchange -Input [2]: [d_date_sk#37, d_moy#38] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#57] +Input [2]: [d_date_sk#34, d_moy#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39b.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39b.sf100/explain.txt index b774c9688384c..c9208985327a3 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39b.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39b.sf100/explain.txt @@ -91,7 +91,7 @@ Condition : isnotnull(i_item_sk#8) (10) BroadcastExchange Input [1]: [i_item_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_item_sk#1] @@ -103,163 +103,163 @@ Output [4]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, d_moy#7, i_item_sk#8] Input [5]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, d_moy#7, i_item_sk#8] (13) Scan parquet default.warehouse -Output [2]: [w_warehouse_sk#10, w_warehouse_name#11] +Output [2]: [w_warehouse_sk#9, w_warehouse_name#10] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [2]: [w_warehouse_sk#10, w_warehouse_name#11] +Input [2]: [w_warehouse_sk#9, w_warehouse_name#10] (15) Filter [codegen id : 3] -Input [2]: [w_warehouse_sk#10, w_warehouse_name#11] -Condition : isnotnull(w_warehouse_sk#10) +Input [2]: [w_warehouse_sk#9, w_warehouse_name#10] +Condition : isnotnull(w_warehouse_sk#9) (16) BroadcastExchange -Input [2]: [w_warehouse_sk#10, w_warehouse_name#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#12] +Input [2]: [w_warehouse_sk#9, w_warehouse_name#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_warehouse_sk#2] -Right keys [1]: [w_warehouse_sk#10] +Right keys [1]: [w_warehouse_sk#9] Join condition: None (18) Project [codegen id : 4] -Output [5]: [inv_quantity_on_hand#3, i_item_sk#8, w_warehouse_sk#10, w_warehouse_name#11, d_moy#7] -Input [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, d_moy#7, i_item_sk#8, w_warehouse_sk#10, w_warehouse_name#11] +Output [5]: [inv_quantity_on_hand#3, i_item_sk#8, w_warehouse_sk#9, w_warehouse_name#10, d_moy#7] +Input [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, d_moy#7, i_item_sk#8, w_warehouse_sk#9, w_warehouse_name#10] (19) HashAggregate [codegen id : 4] -Input [5]: [inv_quantity_on_hand#3, i_item_sk#8, w_warehouse_sk#10, w_warehouse_name#11, d_moy#7] -Keys [4]: [w_warehouse_name#11, w_warehouse_sk#10, i_item_sk#8, d_moy#7] +Input [5]: [inv_quantity_on_hand#3, i_item_sk#8, w_warehouse_sk#9, w_warehouse_name#10, d_moy#7] +Keys [4]: [w_warehouse_name#10, w_warehouse_sk#9, i_item_sk#8, d_moy#7] Functions [2]: [partial_stddev_samp(cast(inv_quantity_on_hand#3 as double)), partial_avg(inv_quantity_on_hand#3)] -Aggregate Attributes [5]: [n#13, avg#14, m2#15, sum#16, count#17] -Results [9]: [w_warehouse_name#11, w_warehouse_sk#10, i_item_sk#8, d_moy#7, n#18, avg#19, m2#20, sum#21, count#22] +Aggregate Attributes [5]: [n#11, avg#12, m2#13, sum#14, count#15] +Results [9]: [w_warehouse_name#10, w_warehouse_sk#9, i_item_sk#8, d_moy#7, n#16, avg#17, m2#18, sum#19, count#20] (20) Exchange -Input [9]: [w_warehouse_name#11, w_warehouse_sk#10, i_item_sk#8, d_moy#7, n#18, avg#19, m2#20, sum#21, count#22] -Arguments: hashpartitioning(w_warehouse_name#11, w_warehouse_sk#10, i_item_sk#8, d_moy#7, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [9]: [w_warehouse_name#10, w_warehouse_sk#9, i_item_sk#8, d_moy#7, n#16, avg#17, m2#18, sum#19, count#20] +Arguments: hashpartitioning(w_warehouse_name#10, w_warehouse_sk#9, i_item_sk#8, d_moy#7, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 5] -Input [9]: [w_warehouse_name#11, w_warehouse_sk#10, i_item_sk#8, d_moy#7, n#18, avg#19, m2#20, sum#21, count#22] -Keys [4]: [w_warehouse_name#11, w_warehouse_sk#10, i_item_sk#8, d_moy#7] +Input [9]: [w_warehouse_name#10, w_warehouse_sk#9, i_item_sk#8, d_moy#7, n#16, avg#17, m2#18, sum#19, count#20] +Keys [4]: [w_warehouse_name#10, w_warehouse_sk#9, i_item_sk#8, d_moy#7] Functions [2]: [stddev_samp(cast(inv_quantity_on_hand#3 as double)), avg(inv_quantity_on_hand#3)] -Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#3 as double))#24, avg(inv_quantity_on_hand#3)#25] -Results [5]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, stddev_samp(cast(inv_quantity_on_hand#3 as double))#24 AS stdev#26, avg(inv_quantity_on_hand#3)#25 AS mean#27] +Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#3 as double))#21, avg(inv_quantity_on_hand#3)#22] +Results [5]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, stddev_samp(cast(inv_quantity_on_hand#3 as double))#21 AS stdev#23, avg(inv_quantity_on_hand#3)#22 AS mean#24] (22) Filter [codegen id : 5] -Input [5]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, stdev#26, mean#27] -Condition : ((isnotnull(stdev#26) AND isnotnull(mean#27)) AND ((NOT coalesce((mean#27 = 0.0), false) AND ((stdev#26 / mean#27) > 1.0)) AND ((stdev#26 / mean#27) > 1.5))) +Input [5]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, stdev#23, mean#24] +Condition : ((isnotnull(stdev#23) AND isnotnull(mean#24)) AND ((NOT coalesce((mean#24 = 0.0), false) AND ((stdev#23 / mean#24) > 1.0)) AND ((stdev#23 / mean#24) > 1.5))) (23) Project [codegen id : 5] -Output [5]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, mean#27, CASE WHEN (mean#27 = 0.0) THEN null ELSE (stdev#26 / mean#27) END AS cov#28] -Input [5]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, stdev#26, mean#27] +Output [5]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, mean#24, CASE WHEN (mean#24 = 0.0) THEN null ELSE (stdev#23 / mean#24) END AS cov#25] +Input [5]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, stdev#23, mean#24] (24) Exchange -Input [5]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, mean#27, cov#28] -Arguments: hashpartitioning(i_item_sk#8, w_warehouse_sk#10, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [5]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, mean#24, cov#25] +Arguments: hashpartitioning(i_item_sk#8, w_warehouse_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=4] (25) Sort [codegen id : 6] -Input [5]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, mean#27, cov#28] -Arguments: [i_item_sk#8 ASC NULLS FIRST, w_warehouse_sk#10 ASC NULLS FIRST], false, 0 +Input [5]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, mean#24, cov#25] +Arguments: [i_item_sk#8 ASC NULLS FIRST, w_warehouse_sk#9 ASC NULLS FIRST], false, 0 (26) Scan parquet default.inventory -Output [4]: [inv_item_sk#30, inv_warehouse_sk#31, inv_quantity_on_hand#32, inv_date_sk#33] +Output [4]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(inv_date_sk#33), dynamicpruningexpression(inv_date_sk#33 IN dynamicpruning#34)] +PartitionFilters: [isnotnull(inv_date_sk#29), dynamicpruningexpression(inv_date_sk#29 IN dynamicpruning#30)] PushedFilters: [IsNotNull(inv_item_sk), IsNotNull(inv_warehouse_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 10] -Input [4]: [inv_item_sk#30, inv_warehouse_sk#31, inv_quantity_on_hand#32, inv_date_sk#33] +Input [4]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29] (28) Filter [codegen id : 10] -Input [4]: [inv_item_sk#30, inv_warehouse_sk#31, inv_quantity_on_hand#32, inv_date_sk#33] -Condition : (isnotnull(inv_item_sk#30) AND isnotnull(inv_warehouse_sk#31)) +Input [4]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29] +Condition : (isnotnull(inv_item_sk#26) AND isnotnull(inv_warehouse_sk#27)) (29) ReusedExchange [Reuses operator id: 57] -Output [2]: [d_date_sk#35, d_moy#36] +Output [2]: [d_date_sk#31, d_moy#32] (30) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [inv_date_sk#33] -Right keys [1]: [d_date_sk#35] +Left keys [1]: [inv_date_sk#29] +Right keys [1]: [d_date_sk#31] Join condition: None (31) Project [codegen id : 10] -Output [4]: [inv_item_sk#30, inv_warehouse_sk#31, inv_quantity_on_hand#32, d_moy#36] -Input [6]: [inv_item_sk#30, inv_warehouse_sk#31, inv_quantity_on_hand#32, inv_date_sk#33, d_date_sk#35, d_moy#36] +Output [4]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, d_moy#32] +Input [6]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29, d_date_sk#31, d_moy#32] (32) ReusedExchange [Reuses operator id: 10] -Output [1]: [i_item_sk#37] +Output [1]: [i_item_sk#33] (33) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [inv_item_sk#30] -Right keys [1]: [i_item_sk#37] +Left keys [1]: [inv_item_sk#26] +Right keys [1]: [i_item_sk#33] Join condition: None (34) Project [codegen id : 10] -Output [4]: [inv_warehouse_sk#31, inv_quantity_on_hand#32, d_moy#36, i_item_sk#37] -Input [5]: [inv_item_sk#30, inv_warehouse_sk#31, inv_quantity_on_hand#32, d_moy#36, i_item_sk#37] +Output [4]: [inv_warehouse_sk#27, inv_quantity_on_hand#28, d_moy#32, i_item_sk#33] +Input [5]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, d_moy#32, i_item_sk#33] (35) ReusedExchange [Reuses operator id: 16] -Output [2]: [w_warehouse_sk#38, w_warehouse_name#39] +Output [2]: [w_warehouse_sk#34, w_warehouse_name#35] (36) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [inv_warehouse_sk#31] -Right keys [1]: [w_warehouse_sk#38] +Left keys [1]: [inv_warehouse_sk#27] +Right keys [1]: [w_warehouse_sk#34] Join condition: None (37) Project [codegen id : 10] -Output [5]: [inv_quantity_on_hand#32, i_item_sk#37, w_warehouse_sk#38, w_warehouse_name#39, d_moy#36] -Input [6]: [inv_warehouse_sk#31, inv_quantity_on_hand#32, d_moy#36, i_item_sk#37, w_warehouse_sk#38, w_warehouse_name#39] +Output [5]: [inv_quantity_on_hand#28, i_item_sk#33, w_warehouse_sk#34, w_warehouse_name#35, d_moy#32] +Input [6]: [inv_warehouse_sk#27, inv_quantity_on_hand#28, d_moy#32, i_item_sk#33, w_warehouse_sk#34, w_warehouse_name#35] (38) HashAggregate [codegen id : 10] -Input [5]: [inv_quantity_on_hand#32, i_item_sk#37, w_warehouse_sk#38, w_warehouse_name#39, d_moy#36] -Keys [4]: [w_warehouse_name#39, w_warehouse_sk#38, i_item_sk#37, d_moy#36] -Functions [2]: [partial_stddev_samp(cast(inv_quantity_on_hand#32 as double)), partial_avg(inv_quantity_on_hand#32)] -Aggregate Attributes [5]: [n#40, avg#41, m2#42, sum#43, count#44] -Results [9]: [w_warehouse_name#39, w_warehouse_sk#38, i_item_sk#37, d_moy#36, n#45, avg#46, m2#47, sum#48, count#49] +Input [5]: [inv_quantity_on_hand#28, i_item_sk#33, w_warehouse_sk#34, w_warehouse_name#35, d_moy#32] +Keys [4]: [w_warehouse_name#35, w_warehouse_sk#34, i_item_sk#33, d_moy#32] +Functions [2]: [partial_stddev_samp(cast(inv_quantity_on_hand#28 as double)), partial_avg(inv_quantity_on_hand#28)] +Aggregate Attributes [5]: [n#36, avg#37, m2#38, sum#39, count#40] +Results [9]: [w_warehouse_name#35, w_warehouse_sk#34, i_item_sk#33, d_moy#32, n#41, avg#42, m2#43, sum#44, count#45] (39) Exchange -Input [9]: [w_warehouse_name#39, w_warehouse_sk#38, i_item_sk#37, d_moy#36, n#45, avg#46, m2#47, sum#48, count#49] -Arguments: hashpartitioning(w_warehouse_name#39, w_warehouse_sk#38, i_item_sk#37, d_moy#36, 5), ENSURE_REQUIREMENTS, [id=#50] +Input [9]: [w_warehouse_name#35, w_warehouse_sk#34, i_item_sk#33, d_moy#32, n#41, avg#42, m2#43, sum#44, count#45] +Arguments: hashpartitioning(w_warehouse_name#35, w_warehouse_sk#34, i_item_sk#33, d_moy#32, 5), ENSURE_REQUIREMENTS, [plan_id=5] (40) HashAggregate [codegen id : 11] -Input [9]: [w_warehouse_name#39, w_warehouse_sk#38, i_item_sk#37, d_moy#36, n#45, avg#46, m2#47, sum#48, count#49] -Keys [4]: [w_warehouse_name#39, w_warehouse_sk#38, i_item_sk#37, d_moy#36] -Functions [2]: [stddev_samp(cast(inv_quantity_on_hand#32 as double)), avg(inv_quantity_on_hand#32)] -Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#32 as double))#24, avg(inv_quantity_on_hand#32)#25] -Results [5]: [w_warehouse_sk#38, i_item_sk#37, d_moy#36, stddev_samp(cast(inv_quantity_on_hand#32 as double))#24 AS stdev#26, avg(inv_quantity_on_hand#32)#25 AS mean#27] +Input [9]: [w_warehouse_name#35, w_warehouse_sk#34, i_item_sk#33, d_moy#32, n#41, avg#42, m2#43, sum#44, count#45] +Keys [4]: [w_warehouse_name#35, w_warehouse_sk#34, i_item_sk#33, d_moy#32] +Functions [2]: [stddev_samp(cast(inv_quantity_on_hand#28 as double)), avg(inv_quantity_on_hand#28)] +Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#28 as double))#21, avg(inv_quantity_on_hand#28)#22] +Results [5]: [w_warehouse_sk#34, i_item_sk#33, d_moy#32, stddev_samp(cast(inv_quantity_on_hand#28 as double))#21 AS stdev#23, avg(inv_quantity_on_hand#28)#22 AS mean#24] (41) Filter [codegen id : 11] -Input [5]: [w_warehouse_sk#38, i_item_sk#37, d_moy#36, stdev#26, mean#27] -Condition : ((isnotnull(stdev#26) AND isnotnull(mean#27)) AND (NOT coalesce((mean#27 = 0.0), false) AND ((stdev#26 / mean#27) > 1.0))) +Input [5]: [w_warehouse_sk#34, i_item_sk#33, d_moy#32, stdev#23, mean#24] +Condition : ((isnotnull(stdev#23) AND isnotnull(mean#24)) AND (NOT coalesce((mean#24 = 0.0), false) AND ((stdev#23 / mean#24) > 1.0))) (42) Project [codegen id : 11] -Output [5]: [w_warehouse_sk#38, i_item_sk#37, d_moy#36, mean#27 AS mean#51, CASE WHEN (mean#27 = 0.0) THEN null ELSE (stdev#26 / mean#27) END AS cov#52] -Input [5]: [w_warehouse_sk#38, i_item_sk#37, d_moy#36, stdev#26, mean#27] +Output [5]: [w_warehouse_sk#34, i_item_sk#33, d_moy#32, mean#24 AS mean#46, CASE WHEN (mean#24 = 0.0) THEN null ELSE (stdev#23 / mean#24) END AS cov#47] +Input [5]: [w_warehouse_sk#34, i_item_sk#33, d_moy#32, stdev#23, mean#24] (43) Exchange -Input [5]: [w_warehouse_sk#38, i_item_sk#37, d_moy#36, mean#51, cov#52] -Arguments: hashpartitioning(i_item_sk#37, w_warehouse_sk#38, 5), ENSURE_REQUIREMENTS, [id=#53] +Input [5]: [w_warehouse_sk#34, i_item_sk#33, d_moy#32, mean#46, cov#47] +Arguments: hashpartitioning(i_item_sk#33, w_warehouse_sk#34, 5), ENSURE_REQUIREMENTS, [plan_id=6] (44) Sort [codegen id : 12] -Input [5]: [w_warehouse_sk#38, i_item_sk#37, d_moy#36, mean#51, cov#52] -Arguments: [i_item_sk#37 ASC NULLS FIRST, w_warehouse_sk#38 ASC NULLS FIRST], false, 0 +Input [5]: [w_warehouse_sk#34, i_item_sk#33, d_moy#32, mean#46, cov#47] +Arguments: [i_item_sk#33 ASC NULLS FIRST, w_warehouse_sk#34 ASC NULLS FIRST], false, 0 (45) SortMergeJoin [codegen id : 13] -Left keys [2]: [i_item_sk#8, w_warehouse_sk#10] -Right keys [2]: [i_item_sk#37, w_warehouse_sk#38] +Left keys [2]: [i_item_sk#8, w_warehouse_sk#9] +Right keys [2]: [i_item_sk#33, w_warehouse_sk#34] Join condition: None (46) Exchange -Input [10]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, mean#27, cov#28, w_warehouse_sk#38, i_item_sk#37, d_moy#36, mean#51, cov#52] -Arguments: rangepartitioning(w_warehouse_sk#10 ASC NULLS FIRST, i_item_sk#8 ASC NULLS FIRST, d_moy#7 ASC NULLS FIRST, mean#27 ASC NULLS FIRST, cov#28 ASC NULLS FIRST, d_moy#36 ASC NULLS FIRST, mean#51 ASC NULLS FIRST, cov#52 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#54] +Input [10]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, mean#24, cov#25, w_warehouse_sk#34, i_item_sk#33, d_moy#32, mean#46, cov#47] +Arguments: rangepartitioning(w_warehouse_sk#9 ASC NULLS FIRST, i_item_sk#8 ASC NULLS FIRST, d_moy#7 ASC NULLS FIRST, mean#24 ASC NULLS FIRST, cov#25 ASC NULLS FIRST, d_moy#32 ASC NULLS FIRST, mean#46 ASC NULLS FIRST, cov#47 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=7] (47) Sort [codegen id : 14] -Input [10]: [w_warehouse_sk#10, i_item_sk#8, d_moy#7, mean#27, cov#28, w_warehouse_sk#38, i_item_sk#37, d_moy#36, mean#51, cov#52] -Arguments: [w_warehouse_sk#10 ASC NULLS FIRST, i_item_sk#8 ASC NULLS FIRST, d_moy#7 ASC NULLS FIRST, mean#27 ASC NULLS FIRST, cov#28 ASC NULLS FIRST, d_moy#36 ASC NULLS FIRST, mean#51 ASC NULLS FIRST, cov#52 ASC NULLS FIRST], true, 0 +Input [10]: [w_warehouse_sk#9, i_item_sk#8, d_moy#7, mean#24, cov#25, w_warehouse_sk#34, i_item_sk#33, d_moy#32, mean#46, cov#47] +Arguments: [w_warehouse_sk#9 ASC NULLS FIRST, i_item_sk#8 ASC NULLS FIRST, d_moy#7 ASC NULLS FIRST, mean#24 ASC NULLS FIRST, cov#25 ASC NULLS FIRST, d_moy#32 ASC NULLS FIRST, mean#46 ASC NULLS FIRST, cov#47 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -272,28 +272,28 @@ BroadcastExchange (52) (48) Scan parquet default.date_dim -Output [3]: [d_date_sk#6, d_year#55, d_moy#7] +Output [3]: [d_date_sk#6, d_year#48, d_moy#7] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,1), IsNotNull(d_date_sk)] ReadSchema: struct (49) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#55, d_moy#7] +Input [3]: [d_date_sk#6, d_year#48, d_moy#7] (50) Filter [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#55, d_moy#7] -Condition : ((((isnotnull(d_year#55) AND isnotnull(d_moy#7)) AND (d_year#55 = 2001)) AND (d_moy#7 = 1)) AND isnotnull(d_date_sk#6)) +Input [3]: [d_date_sk#6, d_year#48, d_moy#7] +Condition : ((((isnotnull(d_year#48) AND isnotnull(d_moy#7)) AND (d_year#48 = 2001)) AND (d_moy#7 = 1)) AND isnotnull(d_date_sk#6)) (51) Project [codegen id : 1] Output [2]: [d_date_sk#6, d_moy#7] -Input [3]: [d_date_sk#6, d_year#55, d_moy#7] +Input [3]: [d_date_sk#6, d_year#48, d_moy#7] (52) BroadcastExchange Input [2]: [d_date_sk#6, d_moy#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#56] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 26 Hosting Expression = inv_date_sk#33 IN dynamicpruning#34 +Subquery:2 Hosting operator id = 26 Hosting Expression = inv_date_sk#29 IN dynamicpruning#30 BroadcastExchange (57) +- * Project (56) +- * Filter (55) @@ -302,25 +302,25 @@ BroadcastExchange (57) (53) Scan parquet default.date_dim -Output [3]: [d_date_sk#35, d_year#57, d_moy#36] +Output [3]: [d_date_sk#31, d_year#49, d_moy#32] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,2), IsNotNull(d_date_sk)] ReadSchema: struct (54) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#35, d_year#57, d_moy#36] +Input [3]: [d_date_sk#31, d_year#49, d_moy#32] (55) Filter [codegen id : 1] -Input [3]: [d_date_sk#35, d_year#57, d_moy#36] -Condition : ((((isnotnull(d_year#57) AND isnotnull(d_moy#36)) AND (d_year#57 = 2001)) AND (d_moy#36 = 2)) AND isnotnull(d_date_sk#35)) +Input [3]: [d_date_sk#31, d_year#49, d_moy#32] +Condition : ((((isnotnull(d_year#49) AND isnotnull(d_moy#32)) AND (d_year#49 = 2001)) AND (d_moy#32 = 2)) AND isnotnull(d_date_sk#31)) (56) Project [codegen id : 1] -Output [2]: [d_date_sk#35, d_moy#36] -Input [3]: [d_date_sk#35, d_year#57, d_moy#36] +Output [2]: [d_date_sk#31, d_moy#32] +Input [3]: [d_date_sk#31, d_year#49, d_moy#32] (57) BroadcastExchange -Input [2]: [d_date_sk#35, d_moy#36] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#58] +Input [2]: [d_date_sk#31, d_moy#32] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39b/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39b/explain.txt index 4252efd8f6932..3a8329c86102e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39b/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q39b/explain.txt @@ -76,7 +76,7 @@ Condition : isnotnull(i_item_sk#6) (7) BroadcastExchange Input [1]: [i_item_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_item_sk#1] @@ -88,163 +88,163 @@ Output [4]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_s Input [5]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6] (10) Scan parquet default.warehouse -Output [2]: [w_warehouse_sk#8, w_warehouse_name#9] +Output [2]: [w_warehouse_sk#7, w_warehouse_name#8] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [2]: [w_warehouse_sk#8, w_warehouse_name#9] +Input [2]: [w_warehouse_sk#7, w_warehouse_name#8] (12) Filter [codegen id : 2] -Input [2]: [w_warehouse_sk#8, w_warehouse_name#9] -Condition : isnotnull(w_warehouse_sk#8) +Input [2]: [w_warehouse_sk#7, w_warehouse_name#8] +Condition : isnotnull(w_warehouse_sk#7) (13) BroadcastExchange -Input [2]: [w_warehouse_sk#8, w_warehouse_name#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#10] +Input [2]: [w_warehouse_sk#7, w_warehouse_name#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_warehouse_sk#2] -Right keys [1]: [w_warehouse_sk#8] +Right keys [1]: [w_warehouse_sk#7] Join condition: None (15) Project [codegen id : 4] -Output [5]: [inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#8, w_warehouse_name#9] -Input [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#8, w_warehouse_name#9] +Output [5]: [inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8] +Input [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8] (16) ReusedExchange [Reuses operator id: 49] -Output [2]: [d_date_sk#11, d_moy#12] +Output [2]: [d_date_sk#9, d_moy#10] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_date_sk#4] -Right keys [1]: [d_date_sk#11] +Right keys [1]: [d_date_sk#9] Join condition: None (18) Project [codegen id : 4] -Output [5]: [inv_quantity_on_hand#3, i_item_sk#6, w_warehouse_sk#8, w_warehouse_name#9, d_moy#12] -Input [7]: [inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#8, w_warehouse_name#9, d_date_sk#11, d_moy#12] +Output [5]: [inv_quantity_on_hand#3, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8, d_moy#10] +Input [7]: [inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8, d_date_sk#9, d_moy#10] (19) HashAggregate [codegen id : 4] -Input [5]: [inv_quantity_on_hand#3, i_item_sk#6, w_warehouse_sk#8, w_warehouse_name#9, d_moy#12] -Keys [4]: [w_warehouse_name#9, w_warehouse_sk#8, i_item_sk#6, d_moy#12] +Input [5]: [inv_quantity_on_hand#3, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8, d_moy#10] +Keys [4]: [w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#10] Functions [2]: [partial_stddev_samp(cast(inv_quantity_on_hand#3 as double)), partial_avg(inv_quantity_on_hand#3)] -Aggregate Attributes [5]: [n#13, avg#14, m2#15, sum#16, count#17] -Results [9]: [w_warehouse_name#9, w_warehouse_sk#8, i_item_sk#6, d_moy#12, n#18, avg#19, m2#20, sum#21, count#22] +Aggregate Attributes [5]: [n#11, avg#12, m2#13, sum#14, count#15] +Results [9]: [w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#10, n#16, avg#17, m2#18, sum#19, count#20] (20) Exchange -Input [9]: [w_warehouse_name#9, w_warehouse_sk#8, i_item_sk#6, d_moy#12, n#18, avg#19, m2#20, sum#21, count#22] -Arguments: hashpartitioning(w_warehouse_name#9, w_warehouse_sk#8, i_item_sk#6, d_moy#12, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [9]: [w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#10, n#16, avg#17, m2#18, sum#19, count#20] +Arguments: hashpartitioning(w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#10, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 10] -Input [9]: [w_warehouse_name#9, w_warehouse_sk#8, i_item_sk#6, d_moy#12, n#18, avg#19, m2#20, sum#21, count#22] -Keys [4]: [w_warehouse_name#9, w_warehouse_sk#8, i_item_sk#6, d_moy#12] +Input [9]: [w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#10, n#16, avg#17, m2#18, sum#19, count#20] +Keys [4]: [w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#10] Functions [2]: [stddev_samp(cast(inv_quantity_on_hand#3 as double)), avg(inv_quantity_on_hand#3)] -Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#3 as double))#24, avg(inv_quantity_on_hand#3)#25] -Results [5]: [w_warehouse_sk#8, i_item_sk#6, d_moy#12, stddev_samp(cast(inv_quantity_on_hand#3 as double))#24 AS stdev#26, avg(inv_quantity_on_hand#3)#25 AS mean#27] +Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#3 as double))#21, avg(inv_quantity_on_hand#3)#22] +Results [5]: [w_warehouse_sk#7, i_item_sk#6, d_moy#10, stddev_samp(cast(inv_quantity_on_hand#3 as double))#21 AS stdev#23, avg(inv_quantity_on_hand#3)#22 AS mean#24] (22) Filter [codegen id : 10] -Input [5]: [w_warehouse_sk#8, i_item_sk#6, d_moy#12, stdev#26, mean#27] -Condition : ((isnotnull(stdev#26) AND isnotnull(mean#27)) AND ((NOT coalesce((mean#27 = 0.0), false) AND ((stdev#26 / mean#27) > 1.0)) AND ((stdev#26 / mean#27) > 1.5))) +Input [5]: [w_warehouse_sk#7, i_item_sk#6, d_moy#10, stdev#23, mean#24] +Condition : ((isnotnull(stdev#23) AND isnotnull(mean#24)) AND ((NOT coalesce((mean#24 = 0.0), false) AND ((stdev#23 / mean#24) > 1.0)) AND ((stdev#23 / mean#24) > 1.5))) (23) Project [codegen id : 10] -Output [5]: [w_warehouse_sk#8, i_item_sk#6, d_moy#12, mean#27, CASE WHEN (mean#27 = 0.0) THEN null ELSE (stdev#26 / mean#27) END AS cov#28] -Input [5]: [w_warehouse_sk#8, i_item_sk#6, d_moy#12, stdev#26, mean#27] +Output [5]: [w_warehouse_sk#7, i_item_sk#6, d_moy#10, mean#24, CASE WHEN (mean#24 = 0.0) THEN null ELSE (stdev#23 / mean#24) END AS cov#25] +Input [5]: [w_warehouse_sk#7, i_item_sk#6, d_moy#10, stdev#23, mean#24] (24) Scan parquet default.inventory -Output [4]: [inv_item_sk#29, inv_warehouse_sk#30, inv_quantity_on_hand#31, inv_date_sk#32] +Output [4]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(inv_date_sk#32), dynamicpruningexpression(inv_date_sk#32 IN dynamicpruning#33)] +PartitionFilters: [isnotnull(inv_date_sk#29), dynamicpruningexpression(inv_date_sk#29 IN dynamicpruning#30)] PushedFilters: [IsNotNull(inv_item_sk), IsNotNull(inv_warehouse_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 8] -Input [4]: [inv_item_sk#29, inv_warehouse_sk#30, inv_quantity_on_hand#31, inv_date_sk#32] +Input [4]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29] (26) Filter [codegen id : 8] -Input [4]: [inv_item_sk#29, inv_warehouse_sk#30, inv_quantity_on_hand#31, inv_date_sk#32] -Condition : (isnotnull(inv_item_sk#29) AND isnotnull(inv_warehouse_sk#30)) +Input [4]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29] +Condition : (isnotnull(inv_item_sk#26) AND isnotnull(inv_warehouse_sk#27)) (27) ReusedExchange [Reuses operator id: 7] -Output [1]: [i_item_sk#34] +Output [1]: [i_item_sk#31] (28) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [inv_item_sk#29] -Right keys [1]: [i_item_sk#34] +Left keys [1]: [inv_item_sk#26] +Right keys [1]: [i_item_sk#31] Join condition: None (29) Project [codegen id : 8] -Output [4]: [inv_warehouse_sk#30, inv_quantity_on_hand#31, inv_date_sk#32, i_item_sk#34] -Input [5]: [inv_item_sk#29, inv_warehouse_sk#30, inv_quantity_on_hand#31, inv_date_sk#32, i_item_sk#34] +Output [4]: [inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29, i_item_sk#31] +Input [5]: [inv_item_sk#26, inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29, i_item_sk#31] (30) ReusedExchange [Reuses operator id: 13] -Output [2]: [w_warehouse_sk#35, w_warehouse_name#36] +Output [2]: [w_warehouse_sk#32, w_warehouse_name#33] (31) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [inv_warehouse_sk#30] -Right keys [1]: [w_warehouse_sk#35] +Left keys [1]: [inv_warehouse_sk#27] +Right keys [1]: [w_warehouse_sk#32] Join condition: None (32) Project [codegen id : 8] -Output [5]: [inv_quantity_on_hand#31, inv_date_sk#32, i_item_sk#34, w_warehouse_sk#35, w_warehouse_name#36] -Input [6]: [inv_warehouse_sk#30, inv_quantity_on_hand#31, inv_date_sk#32, i_item_sk#34, w_warehouse_sk#35, w_warehouse_name#36] +Output [5]: [inv_quantity_on_hand#28, inv_date_sk#29, i_item_sk#31, w_warehouse_sk#32, w_warehouse_name#33] +Input [6]: [inv_warehouse_sk#27, inv_quantity_on_hand#28, inv_date_sk#29, i_item_sk#31, w_warehouse_sk#32, w_warehouse_name#33] (33) ReusedExchange [Reuses operator id: 54] -Output [2]: [d_date_sk#37, d_moy#38] +Output [2]: [d_date_sk#34, d_moy#35] (34) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [inv_date_sk#32] -Right keys [1]: [d_date_sk#37] +Left keys [1]: [inv_date_sk#29] +Right keys [1]: [d_date_sk#34] Join condition: None (35) Project [codegen id : 8] -Output [5]: [inv_quantity_on_hand#31, i_item_sk#34, w_warehouse_sk#35, w_warehouse_name#36, d_moy#38] -Input [7]: [inv_quantity_on_hand#31, inv_date_sk#32, i_item_sk#34, w_warehouse_sk#35, w_warehouse_name#36, d_date_sk#37, d_moy#38] +Output [5]: [inv_quantity_on_hand#28, i_item_sk#31, w_warehouse_sk#32, w_warehouse_name#33, d_moy#35] +Input [7]: [inv_quantity_on_hand#28, inv_date_sk#29, i_item_sk#31, w_warehouse_sk#32, w_warehouse_name#33, d_date_sk#34, d_moy#35] (36) HashAggregate [codegen id : 8] -Input [5]: [inv_quantity_on_hand#31, i_item_sk#34, w_warehouse_sk#35, w_warehouse_name#36, d_moy#38] -Keys [4]: [w_warehouse_name#36, w_warehouse_sk#35, i_item_sk#34, d_moy#38] -Functions [2]: [partial_stddev_samp(cast(inv_quantity_on_hand#31 as double)), partial_avg(inv_quantity_on_hand#31)] -Aggregate Attributes [5]: [n#39, avg#40, m2#41, sum#42, count#43] -Results [9]: [w_warehouse_name#36, w_warehouse_sk#35, i_item_sk#34, d_moy#38, n#44, avg#45, m2#46, sum#47, count#48] +Input [5]: [inv_quantity_on_hand#28, i_item_sk#31, w_warehouse_sk#32, w_warehouse_name#33, d_moy#35] +Keys [4]: [w_warehouse_name#33, w_warehouse_sk#32, i_item_sk#31, d_moy#35] +Functions [2]: [partial_stddev_samp(cast(inv_quantity_on_hand#28 as double)), partial_avg(inv_quantity_on_hand#28)] +Aggregate Attributes [5]: [n#36, avg#37, m2#38, sum#39, count#40] +Results [9]: [w_warehouse_name#33, w_warehouse_sk#32, i_item_sk#31, d_moy#35, n#41, avg#42, m2#43, sum#44, count#45] (37) Exchange -Input [9]: [w_warehouse_name#36, w_warehouse_sk#35, i_item_sk#34, d_moy#38, n#44, avg#45, m2#46, sum#47, count#48] -Arguments: hashpartitioning(w_warehouse_name#36, w_warehouse_sk#35, i_item_sk#34, d_moy#38, 5), ENSURE_REQUIREMENTS, [id=#49] +Input [9]: [w_warehouse_name#33, w_warehouse_sk#32, i_item_sk#31, d_moy#35, n#41, avg#42, m2#43, sum#44, count#45] +Arguments: hashpartitioning(w_warehouse_name#33, w_warehouse_sk#32, i_item_sk#31, d_moy#35, 5), ENSURE_REQUIREMENTS, [plan_id=4] (38) HashAggregate [codegen id : 9] -Input [9]: [w_warehouse_name#36, w_warehouse_sk#35, i_item_sk#34, d_moy#38, n#44, avg#45, m2#46, sum#47, count#48] -Keys [4]: [w_warehouse_name#36, w_warehouse_sk#35, i_item_sk#34, d_moy#38] -Functions [2]: [stddev_samp(cast(inv_quantity_on_hand#31 as double)), avg(inv_quantity_on_hand#31)] -Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#31 as double))#24, avg(inv_quantity_on_hand#31)#25] -Results [5]: [w_warehouse_sk#35, i_item_sk#34, d_moy#38, stddev_samp(cast(inv_quantity_on_hand#31 as double))#24 AS stdev#26, avg(inv_quantity_on_hand#31)#25 AS mean#27] +Input [9]: [w_warehouse_name#33, w_warehouse_sk#32, i_item_sk#31, d_moy#35, n#41, avg#42, m2#43, sum#44, count#45] +Keys [4]: [w_warehouse_name#33, w_warehouse_sk#32, i_item_sk#31, d_moy#35] +Functions [2]: [stddev_samp(cast(inv_quantity_on_hand#28 as double)), avg(inv_quantity_on_hand#28)] +Aggregate Attributes [2]: [stddev_samp(cast(inv_quantity_on_hand#28 as double))#21, avg(inv_quantity_on_hand#28)#22] +Results [5]: [w_warehouse_sk#32, i_item_sk#31, d_moy#35, stddev_samp(cast(inv_quantity_on_hand#28 as double))#21 AS stdev#23, avg(inv_quantity_on_hand#28)#22 AS mean#24] (39) Filter [codegen id : 9] -Input [5]: [w_warehouse_sk#35, i_item_sk#34, d_moy#38, stdev#26, mean#27] -Condition : ((isnotnull(stdev#26) AND isnotnull(mean#27)) AND (NOT coalesce((mean#27 = 0.0), false) AND ((stdev#26 / mean#27) > 1.0))) +Input [5]: [w_warehouse_sk#32, i_item_sk#31, d_moy#35, stdev#23, mean#24] +Condition : ((isnotnull(stdev#23) AND isnotnull(mean#24)) AND (NOT coalesce((mean#24 = 0.0), false) AND ((stdev#23 / mean#24) > 1.0))) (40) Project [codegen id : 9] -Output [5]: [w_warehouse_sk#35, i_item_sk#34, d_moy#38, mean#27 AS mean#50, CASE WHEN (mean#27 = 0.0) THEN null ELSE (stdev#26 / mean#27) END AS cov#51] -Input [5]: [w_warehouse_sk#35, i_item_sk#34, d_moy#38, stdev#26, mean#27] +Output [5]: [w_warehouse_sk#32, i_item_sk#31, d_moy#35, mean#24 AS mean#46, CASE WHEN (mean#24 = 0.0) THEN null ELSE (stdev#23 / mean#24) END AS cov#47] +Input [5]: [w_warehouse_sk#32, i_item_sk#31, d_moy#35, stdev#23, mean#24] (41) BroadcastExchange -Input [5]: [w_warehouse_sk#35, i_item_sk#34, d_moy#38, mean#50, cov#51] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [id=#52] +Input [5]: [w_warehouse_sk#32, i_item_sk#31, d_moy#35, mean#46, cov#47] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [plan_id=5] (42) BroadcastHashJoin [codegen id : 10] -Left keys [2]: [i_item_sk#6, w_warehouse_sk#8] -Right keys [2]: [i_item_sk#34, w_warehouse_sk#35] +Left keys [2]: [i_item_sk#6, w_warehouse_sk#7] +Right keys [2]: [i_item_sk#31, w_warehouse_sk#32] Join condition: None (43) Exchange -Input [10]: [w_warehouse_sk#8, i_item_sk#6, d_moy#12, mean#27, cov#28, w_warehouse_sk#35, i_item_sk#34, d_moy#38, mean#50, cov#51] -Arguments: rangepartitioning(w_warehouse_sk#8 ASC NULLS FIRST, i_item_sk#6 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST, mean#27 ASC NULLS FIRST, cov#28 ASC NULLS FIRST, d_moy#38 ASC NULLS FIRST, mean#50 ASC NULLS FIRST, cov#51 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#53] +Input [10]: [w_warehouse_sk#7, i_item_sk#6, d_moy#10, mean#24, cov#25, w_warehouse_sk#32, i_item_sk#31, d_moy#35, mean#46, cov#47] +Arguments: rangepartitioning(w_warehouse_sk#7 ASC NULLS FIRST, i_item_sk#6 ASC NULLS FIRST, d_moy#10 ASC NULLS FIRST, mean#24 ASC NULLS FIRST, cov#25 ASC NULLS FIRST, d_moy#35 ASC NULLS FIRST, mean#46 ASC NULLS FIRST, cov#47 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=6] (44) Sort [codegen id : 11] -Input [10]: [w_warehouse_sk#8, i_item_sk#6, d_moy#12, mean#27, cov#28, w_warehouse_sk#35, i_item_sk#34, d_moy#38, mean#50, cov#51] -Arguments: [w_warehouse_sk#8 ASC NULLS FIRST, i_item_sk#6 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST, mean#27 ASC NULLS FIRST, cov#28 ASC NULLS FIRST, d_moy#38 ASC NULLS FIRST, mean#50 ASC NULLS FIRST, cov#51 ASC NULLS FIRST], true, 0 +Input [10]: [w_warehouse_sk#7, i_item_sk#6, d_moy#10, mean#24, cov#25, w_warehouse_sk#32, i_item_sk#31, d_moy#35, mean#46, cov#47] +Arguments: [w_warehouse_sk#7 ASC NULLS FIRST, i_item_sk#6 ASC NULLS FIRST, d_moy#10 ASC NULLS FIRST, mean#24 ASC NULLS FIRST, cov#25 ASC NULLS FIRST, d_moy#35 ASC NULLS FIRST, mean#46 ASC NULLS FIRST, cov#47 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -257,28 +257,28 @@ BroadcastExchange (49) (45) Scan parquet default.date_dim -Output [3]: [d_date_sk#11, d_year#54, d_moy#12] +Output [3]: [d_date_sk#9, d_year#48, d_moy#10] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,1), IsNotNull(d_date_sk)] ReadSchema: struct (46) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#54, d_moy#12] +Input [3]: [d_date_sk#9, d_year#48, d_moy#10] (47) Filter [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#54, d_moy#12] -Condition : ((((isnotnull(d_year#54) AND isnotnull(d_moy#12)) AND (d_year#54 = 2001)) AND (d_moy#12 = 1)) AND isnotnull(d_date_sk#11)) +Input [3]: [d_date_sk#9, d_year#48, d_moy#10] +Condition : ((((isnotnull(d_year#48) AND isnotnull(d_moy#10)) AND (d_year#48 = 2001)) AND (d_moy#10 = 1)) AND isnotnull(d_date_sk#9)) (48) Project [codegen id : 1] -Output [2]: [d_date_sk#11, d_moy#12] -Input [3]: [d_date_sk#11, d_year#54, d_moy#12] +Output [2]: [d_date_sk#9, d_moy#10] +Input [3]: [d_date_sk#9, d_year#48, d_moy#10] (49) BroadcastExchange -Input [2]: [d_date_sk#11, d_moy#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#55] +Input [2]: [d_date_sk#9, d_moy#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:2 Hosting operator id = 24 Hosting Expression = inv_date_sk#32 IN dynamicpruning#33 +Subquery:2 Hosting operator id = 24 Hosting Expression = inv_date_sk#29 IN dynamicpruning#30 BroadcastExchange (54) +- * Project (53) +- * Filter (52) @@ -287,25 +287,25 @@ BroadcastExchange (54) (50) Scan parquet default.date_dim -Output [3]: [d_date_sk#37, d_year#56, d_moy#38] +Output [3]: [d_date_sk#34, d_year#49, d_moy#35] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,2), IsNotNull(d_date_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#37, d_year#56, d_moy#38] +Input [3]: [d_date_sk#34, d_year#49, d_moy#35] (52) Filter [codegen id : 1] -Input [3]: [d_date_sk#37, d_year#56, d_moy#38] -Condition : ((((isnotnull(d_year#56) AND isnotnull(d_moy#38)) AND (d_year#56 = 2001)) AND (d_moy#38 = 2)) AND isnotnull(d_date_sk#37)) +Input [3]: [d_date_sk#34, d_year#49, d_moy#35] +Condition : ((((isnotnull(d_year#49) AND isnotnull(d_moy#35)) AND (d_year#49 = 2001)) AND (d_moy#35 = 2)) AND isnotnull(d_date_sk#34)) (53) Project [codegen id : 1] -Output [2]: [d_date_sk#37, d_moy#38] -Input [3]: [d_date_sk#37, d_year#56, d_moy#38] +Output [2]: [d_date_sk#34, d_moy#35] +Input [3]: [d_date_sk#34, d_year#49, d_moy#35] (54) BroadcastExchange -Input [2]: [d_date_sk#37, d_moy#38] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#57] +Input [2]: [d_date_sk#34, d_moy#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q4.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q4.sf100/explain.txt index 7ebe44763c25a..526b14d5ddd37 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q4.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q4.sf100/explain.txt @@ -148,510 +148,510 @@ Input [8]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ex (7) Exchange Input [6]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9] -Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#10] +Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (8) Sort [codegen id : 3] Input [6]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9] Arguments: [ss_customer_sk#1 ASC NULLS FIRST], false, 0 (9) Scan parquet default.customer -Output [8]: [c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18] +Output [8]: [c_customer_sk#10, c_customer_id#11, c_first_name#12, c_last_name#13, c_preferred_cust_flag#14, c_birth_country#15, c_login#16, c_email_address#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (10) ColumnarToRow [codegen id : 4] -Input [8]: [c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18] +Input [8]: [c_customer_sk#10, c_customer_id#11, c_first_name#12, c_last_name#13, c_preferred_cust_flag#14, c_birth_country#15, c_login#16, c_email_address#17] (11) Filter [codegen id : 4] -Input [8]: [c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18] -Condition : (isnotnull(c_customer_sk#11) AND isnotnull(c_customer_id#12)) +Input [8]: [c_customer_sk#10, c_customer_id#11, c_first_name#12, c_last_name#13, c_preferred_cust_flag#14, c_birth_country#15, c_login#16, c_email_address#17] +Condition : (isnotnull(c_customer_sk#10) AND isnotnull(c_customer_id#11)) (12) Exchange -Input [8]: [c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18] -Arguments: hashpartitioning(c_customer_sk#11, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [8]: [c_customer_sk#10, c_customer_id#11, c_first_name#12, c_last_name#13, c_preferred_cust_flag#14, c_birth_country#15, c_login#16, c_email_address#17] +Arguments: hashpartitioning(c_customer_sk#10, 5), ENSURE_REQUIREMENTS, [plan_id=2] (13) Sort [codegen id : 5] -Input [8]: [c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18] -Arguments: [c_customer_sk#11 ASC NULLS FIRST], false, 0 +Input [8]: [c_customer_sk#10, c_customer_id#11, c_first_name#12, c_last_name#13, c_preferred_cust_flag#14, c_birth_country#15, c_login#16, c_email_address#17] +Arguments: [c_customer_sk#10 ASC NULLS FIRST], false, 0 (14) SortMergeJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#11] +Right keys [1]: [c_customer_sk#10] Join condition: None (15) Project [codegen id : 6] -Output [12]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9] -Input [14]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9, c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18] +Output [12]: [c_customer_id#11, c_first_name#12, c_last_name#13, c_preferred_cust_flag#14, c_birth_country#15, c_login#16, c_email_address#17, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9] +Input [14]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9, c_customer_sk#10, c_customer_id#11, c_first_name#12, c_last_name#13, c_preferred_cust_flag#14, c_birth_country#15, c_login#16, c_email_address#17] (16) HashAggregate [codegen id : 6] -Input [12]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9] -Keys [8]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9] +Input [12]: [c_customer_id#11, c_first_name#12, c_last_name#13, c_preferred_cust_flag#14, c_birth_country#15, c_login#16, c_email_address#17, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9] +Keys [8]: [c_customer_id#11, c_first_name#12, c_last_name#13, c_preferred_cust_flag#14, c_birth_country#15, c_login#16, c_email_address#17, d_year#9] Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#5 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#4 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#3 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [2]: [sum#20, isEmpty#21] -Results [10]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum#22, isEmpty#23] +Aggregate Attributes [2]: [sum#18, isEmpty#19] +Results [10]: [c_customer_id#11, c_first_name#12, c_last_name#13, c_preferred_cust_flag#14, c_birth_country#15, c_login#16, c_email_address#17, d_year#9, sum#20, isEmpty#21] (17) Exchange -Input [10]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum#22, isEmpty#23] -Arguments: hashpartitioning(c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [10]: [c_customer_id#11, c_first_name#12, c_last_name#13, c_preferred_cust_flag#14, c_birth_country#15, c_login#16, c_email_address#17, d_year#9, sum#20, isEmpty#21] +Arguments: hashpartitioning(c_customer_id#11, c_first_name#12, c_last_name#13, c_preferred_cust_flag#14, c_birth_country#15, c_login#16, c_email_address#17, d_year#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 7] -Input [10]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum#22, isEmpty#23] -Keys [8]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9] +Input [10]: [c_customer_id#11, c_first_name#12, c_last_name#13, c_preferred_cust_flag#14, c_birth_country#15, c_login#16, c_email_address#17, d_year#9, sum#20, isEmpty#21] +Keys [8]: [c_customer_id#11, c_first_name#12, c_last_name#13, c_preferred_cust_flag#14, c_birth_country#15, c_login#16, c_email_address#17, d_year#9] Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#5 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#4 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#3 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#5 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#4 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#3 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#25] -Results [2]: [c_customer_id#12 AS customer_id#26, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#5 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#4 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#3 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#25 AS year_total#27] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#5 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#4 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#3 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#22] +Results [2]: [c_customer_id#11 AS customer_id#23, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#5 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#4 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#3 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#22 AS year_total#24] (19) Filter [codegen id : 7] -Input [2]: [customer_id#26, year_total#27] -Condition : (isnotnull(year_total#27) AND (year_total#27 > 0.000000)) +Input [2]: [customer_id#23, year_total#24] +Condition : (isnotnull(year_total#24) AND (year_total#24 > 0.000000)) (20) Exchange -Input [2]: [customer_id#26, year_total#27] -Arguments: hashpartitioning(customer_id#26, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [2]: [customer_id#23, year_total#24] +Arguments: hashpartitioning(customer_id#23, 5), ENSURE_REQUIREMENTS, [plan_id=4] (21) Sort [codegen id : 8] -Input [2]: [customer_id#26, year_total#27] -Arguments: [customer_id#26 ASC NULLS FIRST], false, 0 +Input [2]: [customer_id#23, year_total#24] +Arguments: [customer_id#23 ASC NULLS FIRST], false, 0 (22) Scan parquet default.store_sales -Output [6]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, ss_sold_date_sk#34] +Output [6]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_sales_price#27, ss_ext_wholesale_cost#28, ss_ext_list_price#29, ss_sold_date_sk#30] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#34), dynamicpruningexpression(ss_sold_date_sk#34 IN dynamicpruning#35)] +PartitionFilters: [isnotnull(ss_sold_date_sk#30), dynamicpruningexpression(ss_sold_date_sk#30 IN dynamicpruning#31)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 10] -Input [6]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, ss_sold_date_sk#34] +Input [6]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_sales_price#27, ss_ext_wholesale_cost#28, ss_ext_list_price#29, ss_sold_date_sk#30] (24) Filter [codegen id : 10] -Input [6]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, ss_sold_date_sk#34] -Condition : isnotnull(ss_customer_sk#29) +Input [6]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_sales_price#27, ss_ext_wholesale_cost#28, ss_ext_list_price#29, ss_sold_date_sk#30] +Condition : isnotnull(ss_customer_sk#25) (25) ReusedExchange [Reuses operator id: 126] -Output [2]: [d_date_sk#36, d_year#37] +Output [2]: [d_date_sk#32, d_year#33] (26) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_sold_date_sk#34] -Right keys [1]: [d_date_sk#36] +Left keys [1]: [ss_sold_date_sk#30] +Right keys [1]: [d_date_sk#32] Join condition: None (27) Project [codegen id : 10] -Output [6]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, d_year#37] -Input [8]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, ss_sold_date_sk#34, d_date_sk#36, d_year#37] +Output [6]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_sales_price#27, ss_ext_wholesale_cost#28, ss_ext_list_price#29, d_year#33] +Input [8]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_sales_price#27, ss_ext_wholesale_cost#28, ss_ext_list_price#29, ss_sold_date_sk#30, d_date_sk#32, d_year#33] (28) Exchange -Input [6]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, d_year#37] -Arguments: hashpartitioning(ss_customer_sk#29, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [6]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_sales_price#27, ss_ext_wholesale_cost#28, ss_ext_list_price#29, d_year#33] +Arguments: hashpartitioning(ss_customer_sk#25, 5), ENSURE_REQUIREMENTS, [plan_id=5] (29) Sort [codegen id : 11] -Input [6]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, d_year#37] -Arguments: [ss_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [6]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_sales_price#27, ss_ext_wholesale_cost#28, ss_ext_list_price#29, d_year#33] +Arguments: [ss_customer_sk#25 ASC NULLS FIRST], false, 0 (30) ReusedExchange [Reuses operator id: 12] -Output [8]: [c_customer_sk#39, c_customer_id#40, c_first_name#41, c_last_name#42, c_preferred_cust_flag#43, c_birth_country#44, c_login#45, c_email_address#46] +Output [8]: [c_customer_sk#34, c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41] (31) Sort [codegen id : 13] -Input [8]: [c_customer_sk#39, c_customer_id#40, c_first_name#41, c_last_name#42, c_preferred_cust_flag#43, c_birth_country#44, c_login#45, c_email_address#46] -Arguments: [c_customer_sk#39 ASC NULLS FIRST], false, 0 +Input [8]: [c_customer_sk#34, c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41] +Arguments: [c_customer_sk#34 ASC NULLS FIRST], false, 0 (32) SortMergeJoin [codegen id : 14] -Left keys [1]: [ss_customer_sk#29] -Right keys [1]: [c_customer_sk#39] +Left keys [1]: [ss_customer_sk#25] +Right keys [1]: [c_customer_sk#34] Join condition: None (33) Project [codegen id : 14] -Output [12]: [c_customer_id#40, c_first_name#41, c_last_name#42, c_preferred_cust_flag#43, c_birth_country#44, c_login#45, c_email_address#46, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, d_year#37] -Input [14]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, d_year#37, c_customer_sk#39, c_customer_id#40, c_first_name#41, c_last_name#42, c_preferred_cust_flag#43, c_birth_country#44, c_login#45, c_email_address#46] +Output [12]: [c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, ss_ext_discount_amt#26, ss_ext_sales_price#27, ss_ext_wholesale_cost#28, ss_ext_list_price#29, d_year#33] +Input [14]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_sales_price#27, ss_ext_wholesale_cost#28, ss_ext_list_price#29, d_year#33, c_customer_sk#34, c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41] (34) HashAggregate [codegen id : 14] -Input [12]: [c_customer_id#40, c_first_name#41, c_last_name#42, c_preferred_cust_flag#43, c_birth_country#44, c_login#45, c_email_address#46, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, d_year#37] -Keys [8]: [c_customer_id#40, c_first_name#41, c_last_name#42, c_preferred_cust_flag#43, c_birth_country#44, c_login#45, c_email_address#46, d_year#37] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#33 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#32 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#30 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#31 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [2]: [sum#47, isEmpty#48] -Results [10]: [c_customer_id#40, c_first_name#41, c_last_name#42, c_preferred_cust_flag#43, c_birth_country#44, c_login#45, c_email_address#46, d_year#37, sum#49, isEmpty#50] +Input [12]: [c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, ss_ext_discount_amt#26, ss_ext_sales_price#27, ss_ext_wholesale_cost#28, ss_ext_list_price#29, d_year#33] +Keys [8]: [c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, d_year#33] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#29 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#28 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#26 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#27 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [2]: [sum#42, isEmpty#43] +Results [10]: [c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, d_year#33, sum#44, isEmpty#45] (35) Exchange -Input [10]: [c_customer_id#40, c_first_name#41, c_last_name#42, c_preferred_cust_flag#43, c_birth_country#44, c_login#45, c_email_address#46, d_year#37, sum#49, isEmpty#50] -Arguments: hashpartitioning(c_customer_id#40, c_first_name#41, c_last_name#42, c_preferred_cust_flag#43, c_birth_country#44, c_login#45, c_email_address#46, d_year#37, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [10]: [c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, d_year#33, sum#44, isEmpty#45] +Arguments: hashpartitioning(c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, d_year#33, 5), ENSURE_REQUIREMENTS, [plan_id=6] (36) HashAggregate [codegen id : 15] -Input [10]: [c_customer_id#40, c_first_name#41, c_last_name#42, c_preferred_cust_flag#43, c_birth_country#44, c_login#45, c_email_address#46, d_year#37, sum#49, isEmpty#50] -Keys [8]: [c_customer_id#40, c_first_name#41, c_last_name#42, c_preferred_cust_flag#43, c_birth_country#44, c_login#45, c_email_address#46, d_year#37] -Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#33 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#32 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#30 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#31 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#33 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#32 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#30 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#31 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#25] -Results [8]: [c_customer_id#40 AS customer_id#52, c_first_name#41 AS customer_first_name#53, c_last_name#42 AS customer_last_name#54, c_preferred_cust_flag#43 AS customer_preferred_cust_flag#55, c_birth_country#44 AS customer_birth_country#56, c_login#45 AS customer_login#57, c_email_address#46 AS customer_email_address#58, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#33 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#32 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#30 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#31 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#25 AS year_total#59] +Input [10]: [c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, d_year#33, sum#44, isEmpty#45] +Keys [8]: [c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, d_year#33] +Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#29 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#28 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#26 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#27 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#29 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#28 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#26 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#27 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#22] +Results [8]: [c_customer_id#35 AS customer_id#46, c_first_name#36 AS customer_first_name#47, c_last_name#37 AS customer_last_name#48, c_preferred_cust_flag#38 AS customer_preferred_cust_flag#49, c_birth_country#39 AS customer_birth_country#50, c_login#40 AS customer_login#51, c_email_address#41 AS customer_email_address#52, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#29 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#28 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#26 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#27 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#22 AS year_total#53] (37) Exchange -Input [8]: [customer_id#52, customer_first_name#53, customer_last_name#54, customer_preferred_cust_flag#55, customer_birth_country#56, customer_login#57, customer_email_address#58, year_total#59] -Arguments: hashpartitioning(customer_id#52, 5), ENSURE_REQUIREMENTS, [id=#60] +Input [8]: [customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#53] +Arguments: hashpartitioning(customer_id#46, 5), ENSURE_REQUIREMENTS, [plan_id=7] (38) Sort [codegen id : 16] -Input [8]: [customer_id#52, customer_first_name#53, customer_last_name#54, customer_preferred_cust_flag#55, customer_birth_country#56, customer_login#57, customer_email_address#58, year_total#59] -Arguments: [customer_id#52 ASC NULLS FIRST], false, 0 +Input [8]: [customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#53] +Arguments: [customer_id#46 ASC NULLS FIRST], false, 0 (39) SortMergeJoin [codegen id : 17] -Left keys [1]: [customer_id#26] -Right keys [1]: [customer_id#52] +Left keys [1]: [customer_id#23] +Right keys [1]: [customer_id#46] Join condition: None (40) Scan parquet default.catalog_sales -Output [6]: [cs_bill_customer_sk#61, cs_ext_discount_amt#62, cs_ext_sales_price#63, cs_ext_wholesale_cost#64, cs_ext_list_price#65, cs_sold_date_sk#66] +Output [6]: [cs_bill_customer_sk#54, cs_ext_discount_amt#55, cs_ext_sales_price#56, cs_ext_wholesale_cost#57, cs_ext_list_price#58, cs_sold_date_sk#59] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#66), dynamicpruningexpression(cs_sold_date_sk#66 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(cs_sold_date_sk#59), dynamicpruningexpression(cs_sold_date_sk#59 IN dynamicpruning#7)] PushedFilters: [IsNotNull(cs_bill_customer_sk)] ReadSchema: struct (41) ColumnarToRow [codegen id : 19] -Input [6]: [cs_bill_customer_sk#61, cs_ext_discount_amt#62, cs_ext_sales_price#63, cs_ext_wholesale_cost#64, cs_ext_list_price#65, cs_sold_date_sk#66] +Input [6]: [cs_bill_customer_sk#54, cs_ext_discount_amt#55, cs_ext_sales_price#56, cs_ext_wholesale_cost#57, cs_ext_list_price#58, cs_sold_date_sk#59] (42) Filter [codegen id : 19] -Input [6]: [cs_bill_customer_sk#61, cs_ext_discount_amt#62, cs_ext_sales_price#63, cs_ext_wholesale_cost#64, cs_ext_list_price#65, cs_sold_date_sk#66] -Condition : isnotnull(cs_bill_customer_sk#61) +Input [6]: [cs_bill_customer_sk#54, cs_ext_discount_amt#55, cs_ext_sales_price#56, cs_ext_wholesale_cost#57, cs_ext_list_price#58, cs_sold_date_sk#59] +Condition : isnotnull(cs_bill_customer_sk#54) (43) ReusedExchange [Reuses operator id: 122] -Output [2]: [d_date_sk#67, d_year#68] +Output [2]: [d_date_sk#60, d_year#61] (44) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_sold_date_sk#66] -Right keys [1]: [d_date_sk#67] +Left keys [1]: [cs_sold_date_sk#59] +Right keys [1]: [d_date_sk#60] Join condition: None (45) Project [codegen id : 19] -Output [6]: [cs_bill_customer_sk#61, cs_ext_discount_amt#62, cs_ext_sales_price#63, cs_ext_wholesale_cost#64, cs_ext_list_price#65, d_year#68] -Input [8]: [cs_bill_customer_sk#61, cs_ext_discount_amt#62, cs_ext_sales_price#63, cs_ext_wholesale_cost#64, cs_ext_list_price#65, cs_sold_date_sk#66, d_date_sk#67, d_year#68] +Output [6]: [cs_bill_customer_sk#54, cs_ext_discount_amt#55, cs_ext_sales_price#56, cs_ext_wholesale_cost#57, cs_ext_list_price#58, d_year#61] +Input [8]: [cs_bill_customer_sk#54, cs_ext_discount_amt#55, cs_ext_sales_price#56, cs_ext_wholesale_cost#57, cs_ext_list_price#58, cs_sold_date_sk#59, d_date_sk#60, d_year#61] (46) Exchange -Input [6]: [cs_bill_customer_sk#61, cs_ext_discount_amt#62, cs_ext_sales_price#63, cs_ext_wholesale_cost#64, cs_ext_list_price#65, d_year#68] -Arguments: hashpartitioning(cs_bill_customer_sk#61, 5), ENSURE_REQUIREMENTS, [id=#69] +Input [6]: [cs_bill_customer_sk#54, cs_ext_discount_amt#55, cs_ext_sales_price#56, cs_ext_wholesale_cost#57, cs_ext_list_price#58, d_year#61] +Arguments: hashpartitioning(cs_bill_customer_sk#54, 5), ENSURE_REQUIREMENTS, [plan_id=8] (47) Sort [codegen id : 20] -Input [6]: [cs_bill_customer_sk#61, cs_ext_discount_amt#62, cs_ext_sales_price#63, cs_ext_wholesale_cost#64, cs_ext_list_price#65, d_year#68] -Arguments: [cs_bill_customer_sk#61 ASC NULLS FIRST], false, 0 +Input [6]: [cs_bill_customer_sk#54, cs_ext_discount_amt#55, cs_ext_sales_price#56, cs_ext_wholesale_cost#57, cs_ext_list_price#58, d_year#61] +Arguments: [cs_bill_customer_sk#54 ASC NULLS FIRST], false, 0 (48) ReusedExchange [Reuses operator id: 12] -Output [8]: [c_customer_sk#70, c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77] +Output [8]: [c_customer_sk#62, c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69] (49) Sort [codegen id : 22] -Input [8]: [c_customer_sk#70, c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77] -Arguments: [c_customer_sk#70 ASC NULLS FIRST], false, 0 +Input [8]: [c_customer_sk#62, c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69] +Arguments: [c_customer_sk#62 ASC NULLS FIRST], false, 0 (50) SortMergeJoin [codegen id : 23] -Left keys [1]: [cs_bill_customer_sk#61] -Right keys [1]: [c_customer_sk#70] +Left keys [1]: [cs_bill_customer_sk#54] +Right keys [1]: [c_customer_sk#62] Join condition: None (51) Project [codegen id : 23] -Output [12]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_ext_discount_amt#62, cs_ext_sales_price#63, cs_ext_wholesale_cost#64, cs_ext_list_price#65, d_year#68] -Input [14]: [cs_bill_customer_sk#61, cs_ext_discount_amt#62, cs_ext_sales_price#63, cs_ext_wholesale_cost#64, cs_ext_list_price#65, d_year#68, c_customer_sk#70, c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77] +Output [12]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, cs_ext_discount_amt#55, cs_ext_sales_price#56, cs_ext_wholesale_cost#57, cs_ext_list_price#58, d_year#61] +Input [14]: [cs_bill_customer_sk#54, cs_ext_discount_amt#55, cs_ext_sales_price#56, cs_ext_wholesale_cost#57, cs_ext_list_price#58, d_year#61, c_customer_sk#62, c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69] (52) HashAggregate [codegen id : 23] -Input [12]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_ext_discount_amt#62, cs_ext_sales_price#63, cs_ext_wholesale_cost#64, cs_ext_list_price#65, d_year#68] -Keys [8]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#68] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#65 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#64 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#62 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#63 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [2]: [sum#78, isEmpty#79] -Results [10]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#68, sum#80, isEmpty#81] +Input [12]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, cs_ext_discount_amt#55, cs_ext_sales_price#56, cs_ext_wholesale_cost#57, cs_ext_list_price#58, d_year#61] +Keys [8]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, d_year#61] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#58 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#57 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#55 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#56 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [2]: [sum#70, isEmpty#71] +Results [10]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, d_year#61, sum#72, isEmpty#73] (53) Exchange -Input [10]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#68, sum#80, isEmpty#81] -Arguments: hashpartitioning(c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#68, 5), ENSURE_REQUIREMENTS, [id=#82] +Input [10]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, d_year#61, sum#72, isEmpty#73] +Arguments: hashpartitioning(c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, d_year#61, 5), ENSURE_REQUIREMENTS, [plan_id=9] (54) HashAggregate [codegen id : 24] -Input [10]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#68, sum#80, isEmpty#81] -Keys [8]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#68] -Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#65 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#64 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#62 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#63 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#65 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#64 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#62 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#63 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#83] -Results [2]: [c_customer_id#71 AS customer_id#84, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#65 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#64 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#62 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#63 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#83 AS year_total#85] +Input [10]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, d_year#61, sum#72, isEmpty#73] +Keys [8]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, d_year#61] +Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#58 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#57 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#55 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#56 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#58 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#57 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#55 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#56 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#74] +Results [2]: [c_customer_id#63 AS customer_id#75, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#58 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#57 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#55 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#56 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#74 AS year_total#76] (55) Filter [codegen id : 24] -Input [2]: [customer_id#84, year_total#85] -Condition : (isnotnull(year_total#85) AND (year_total#85 > 0.000000)) +Input [2]: [customer_id#75, year_total#76] +Condition : (isnotnull(year_total#76) AND (year_total#76 > 0.000000)) (56) Exchange -Input [2]: [customer_id#84, year_total#85] -Arguments: hashpartitioning(customer_id#84, 5), ENSURE_REQUIREMENTS, [id=#86] +Input [2]: [customer_id#75, year_total#76] +Arguments: hashpartitioning(customer_id#75, 5), ENSURE_REQUIREMENTS, [plan_id=10] (57) Sort [codegen id : 25] -Input [2]: [customer_id#84, year_total#85] -Arguments: [customer_id#84 ASC NULLS FIRST], false, 0 +Input [2]: [customer_id#75, year_total#76] +Arguments: [customer_id#75 ASC NULLS FIRST], false, 0 (58) SortMergeJoin [codegen id : 26] -Left keys [1]: [customer_id#26] -Right keys [1]: [customer_id#84] +Left keys [1]: [customer_id#23] +Right keys [1]: [customer_id#75] Join condition: None (59) Project [codegen id : 26] -Output [11]: [customer_id#26, year_total#27, customer_id#52, customer_first_name#53, customer_last_name#54, customer_preferred_cust_flag#55, customer_birth_country#56, customer_login#57, customer_email_address#58, year_total#59, year_total#85] -Input [12]: [customer_id#26, year_total#27, customer_id#52, customer_first_name#53, customer_last_name#54, customer_preferred_cust_flag#55, customer_birth_country#56, customer_login#57, customer_email_address#58, year_total#59, customer_id#84, year_total#85] +Output [11]: [customer_id#23, year_total#24, customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#53, year_total#76] +Input [12]: [customer_id#23, year_total#24, customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#53, customer_id#75, year_total#76] (60) Scan parquet default.catalog_sales -Output [6]: [cs_bill_customer_sk#87, cs_ext_discount_amt#88, cs_ext_sales_price#89, cs_ext_wholesale_cost#90, cs_ext_list_price#91, cs_sold_date_sk#92] +Output [6]: [cs_bill_customer_sk#77, cs_ext_discount_amt#78, cs_ext_sales_price#79, cs_ext_wholesale_cost#80, cs_ext_list_price#81, cs_sold_date_sk#82] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#92), dynamicpruningexpression(cs_sold_date_sk#92 IN dynamicpruning#35)] +PartitionFilters: [isnotnull(cs_sold_date_sk#82), dynamicpruningexpression(cs_sold_date_sk#82 IN dynamicpruning#31)] PushedFilters: [IsNotNull(cs_bill_customer_sk)] ReadSchema: struct (61) ColumnarToRow [codegen id : 28] -Input [6]: [cs_bill_customer_sk#87, cs_ext_discount_amt#88, cs_ext_sales_price#89, cs_ext_wholesale_cost#90, cs_ext_list_price#91, cs_sold_date_sk#92] +Input [6]: [cs_bill_customer_sk#77, cs_ext_discount_amt#78, cs_ext_sales_price#79, cs_ext_wholesale_cost#80, cs_ext_list_price#81, cs_sold_date_sk#82] (62) Filter [codegen id : 28] -Input [6]: [cs_bill_customer_sk#87, cs_ext_discount_amt#88, cs_ext_sales_price#89, cs_ext_wholesale_cost#90, cs_ext_list_price#91, cs_sold_date_sk#92] -Condition : isnotnull(cs_bill_customer_sk#87) +Input [6]: [cs_bill_customer_sk#77, cs_ext_discount_amt#78, cs_ext_sales_price#79, cs_ext_wholesale_cost#80, cs_ext_list_price#81, cs_sold_date_sk#82] +Condition : isnotnull(cs_bill_customer_sk#77) (63) ReusedExchange [Reuses operator id: 126] -Output [2]: [d_date_sk#93, d_year#94] +Output [2]: [d_date_sk#83, d_year#84] (64) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [cs_sold_date_sk#92] -Right keys [1]: [d_date_sk#93] +Left keys [1]: [cs_sold_date_sk#82] +Right keys [1]: [d_date_sk#83] Join condition: None (65) Project [codegen id : 28] -Output [6]: [cs_bill_customer_sk#87, cs_ext_discount_amt#88, cs_ext_sales_price#89, cs_ext_wholesale_cost#90, cs_ext_list_price#91, d_year#94] -Input [8]: [cs_bill_customer_sk#87, cs_ext_discount_amt#88, cs_ext_sales_price#89, cs_ext_wholesale_cost#90, cs_ext_list_price#91, cs_sold_date_sk#92, d_date_sk#93, d_year#94] +Output [6]: [cs_bill_customer_sk#77, cs_ext_discount_amt#78, cs_ext_sales_price#79, cs_ext_wholesale_cost#80, cs_ext_list_price#81, d_year#84] +Input [8]: [cs_bill_customer_sk#77, cs_ext_discount_amt#78, cs_ext_sales_price#79, cs_ext_wholesale_cost#80, cs_ext_list_price#81, cs_sold_date_sk#82, d_date_sk#83, d_year#84] (66) Exchange -Input [6]: [cs_bill_customer_sk#87, cs_ext_discount_amt#88, cs_ext_sales_price#89, cs_ext_wholesale_cost#90, cs_ext_list_price#91, d_year#94] -Arguments: hashpartitioning(cs_bill_customer_sk#87, 5), ENSURE_REQUIREMENTS, [id=#95] +Input [6]: [cs_bill_customer_sk#77, cs_ext_discount_amt#78, cs_ext_sales_price#79, cs_ext_wholesale_cost#80, cs_ext_list_price#81, d_year#84] +Arguments: hashpartitioning(cs_bill_customer_sk#77, 5), ENSURE_REQUIREMENTS, [plan_id=11] (67) Sort [codegen id : 29] -Input [6]: [cs_bill_customer_sk#87, cs_ext_discount_amt#88, cs_ext_sales_price#89, cs_ext_wholesale_cost#90, cs_ext_list_price#91, d_year#94] -Arguments: [cs_bill_customer_sk#87 ASC NULLS FIRST], false, 0 +Input [6]: [cs_bill_customer_sk#77, cs_ext_discount_amt#78, cs_ext_sales_price#79, cs_ext_wholesale_cost#80, cs_ext_list_price#81, d_year#84] +Arguments: [cs_bill_customer_sk#77 ASC NULLS FIRST], false, 0 (68) ReusedExchange [Reuses operator id: 12] -Output [8]: [c_customer_sk#96, c_customer_id#97, c_first_name#98, c_last_name#99, c_preferred_cust_flag#100, c_birth_country#101, c_login#102, c_email_address#103] +Output [8]: [c_customer_sk#85, c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92] (69) Sort [codegen id : 31] -Input [8]: [c_customer_sk#96, c_customer_id#97, c_first_name#98, c_last_name#99, c_preferred_cust_flag#100, c_birth_country#101, c_login#102, c_email_address#103] -Arguments: [c_customer_sk#96 ASC NULLS FIRST], false, 0 +Input [8]: [c_customer_sk#85, c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92] +Arguments: [c_customer_sk#85 ASC NULLS FIRST], false, 0 (70) SortMergeJoin [codegen id : 32] -Left keys [1]: [cs_bill_customer_sk#87] -Right keys [1]: [c_customer_sk#96] +Left keys [1]: [cs_bill_customer_sk#77] +Right keys [1]: [c_customer_sk#85] Join condition: None (71) Project [codegen id : 32] -Output [12]: [c_customer_id#97, c_first_name#98, c_last_name#99, c_preferred_cust_flag#100, c_birth_country#101, c_login#102, c_email_address#103, cs_ext_discount_amt#88, cs_ext_sales_price#89, cs_ext_wholesale_cost#90, cs_ext_list_price#91, d_year#94] -Input [14]: [cs_bill_customer_sk#87, cs_ext_discount_amt#88, cs_ext_sales_price#89, cs_ext_wholesale_cost#90, cs_ext_list_price#91, d_year#94, c_customer_sk#96, c_customer_id#97, c_first_name#98, c_last_name#99, c_preferred_cust_flag#100, c_birth_country#101, c_login#102, c_email_address#103] +Output [12]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, cs_ext_discount_amt#78, cs_ext_sales_price#79, cs_ext_wholesale_cost#80, cs_ext_list_price#81, d_year#84] +Input [14]: [cs_bill_customer_sk#77, cs_ext_discount_amt#78, cs_ext_sales_price#79, cs_ext_wholesale_cost#80, cs_ext_list_price#81, d_year#84, c_customer_sk#85, c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92] (72) HashAggregate [codegen id : 32] -Input [12]: [c_customer_id#97, c_first_name#98, c_last_name#99, c_preferred_cust_flag#100, c_birth_country#101, c_login#102, c_email_address#103, cs_ext_discount_amt#88, cs_ext_sales_price#89, cs_ext_wholesale_cost#90, cs_ext_list_price#91, d_year#94] -Keys [8]: [c_customer_id#97, c_first_name#98, c_last_name#99, c_preferred_cust_flag#100, c_birth_country#101, c_login#102, c_email_address#103, d_year#94] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#91 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#90 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#88 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#89 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [2]: [sum#104, isEmpty#105] -Results [10]: [c_customer_id#97, c_first_name#98, c_last_name#99, c_preferred_cust_flag#100, c_birth_country#101, c_login#102, c_email_address#103, d_year#94, sum#106, isEmpty#107] +Input [12]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, cs_ext_discount_amt#78, cs_ext_sales_price#79, cs_ext_wholesale_cost#80, cs_ext_list_price#81, d_year#84] +Keys [8]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, d_year#84] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#81 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#80 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#78 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#79 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [2]: [sum#93, isEmpty#94] +Results [10]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, d_year#84, sum#95, isEmpty#96] (73) Exchange -Input [10]: [c_customer_id#97, c_first_name#98, c_last_name#99, c_preferred_cust_flag#100, c_birth_country#101, c_login#102, c_email_address#103, d_year#94, sum#106, isEmpty#107] -Arguments: hashpartitioning(c_customer_id#97, c_first_name#98, c_last_name#99, c_preferred_cust_flag#100, c_birth_country#101, c_login#102, c_email_address#103, d_year#94, 5), ENSURE_REQUIREMENTS, [id=#108] +Input [10]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, d_year#84, sum#95, isEmpty#96] +Arguments: hashpartitioning(c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, d_year#84, 5), ENSURE_REQUIREMENTS, [plan_id=12] (74) HashAggregate [codegen id : 33] -Input [10]: [c_customer_id#97, c_first_name#98, c_last_name#99, c_preferred_cust_flag#100, c_birth_country#101, c_login#102, c_email_address#103, d_year#94, sum#106, isEmpty#107] -Keys [8]: [c_customer_id#97, c_first_name#98, c_last_name#99, c_preferred_cust_flag#100, c_birth_country#101, c_login#102, c_email_address#103, d_year#94] -Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#91 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#90 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#88 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#89 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#91 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#90 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#88 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#89 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#83] -Results [2]: [c_customer_id#97 AS customer_id#109, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#91 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#90 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#88 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#89 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#83 AS year_total#110] +Input [10]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, d_year#84, sum#95, isEmpty#96] +Keys [8]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, d_year#84] +Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#81 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#80 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#78 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#79 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#81 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#80 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#78 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#79 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#74] +Results [2]: [c_customer_id#86 AS customer_id#97, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#81 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#80 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#78 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#79 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#74 AS year_total#98] (75) Exchange -Input [2]: [customer_id#109, year_total#110] -Arguments: hashpartitioning(customer_id#109, 5), ENSURE_REQUIREMENTS, [id=#111] +Input [2]: [customer_id#97, year_total#98] +Arguments: hashpartitioning(customer_id#97, 5), ENSURE_REQUIREMENTS, [plan_id=13] (76) Sort [codegen id : 34] -Input [2]: [customer_id#109, year_total#110] -Arguments: [customer_id#109 ASC NULLS FIRST], false, 0 +Input [2]: [customer_id#97, year_total#98] +Arguments: [customer_id#97 ASC NULLS FIRST], false, 0 (77) SortMergeJoin [codegen id : 35] -Left keys [1]: [customer_id#26] -Right keys [1]: [customer_id#109] -Join condition: (CASE WHEN (year_total#85 > 0.000000) THEN CheckOverflow((promote_precision(year_total#110) / promote_precision(year_total#85)), DecimalType(38,14)) END > CASE WHEN (year_total#27 > 0.000000) THEN CheckOverflow((promote_precision(year_total#59) / promote_precision(year_total#27)), DecimalType(38,14)) END) +Left keys [1]: [customer_id#23] +Right keys [1]: [customer_id#97] +Join condition: (CASE WHEN (year_total#76 > 0.000000) THEN CheckOverflow((promote_precision(year_total#98) / promote_precision(year_total#76)), DecimalType(38,14)) END > CASE WHEN (year_total#24 > 0.000000) THEN CheckOverflow((promote_precision(year_total#53) / promote_precision(year_total#24)), DecimalType(38,14)) END) (78) Project [codegen id : 35] -Output [10]: [customer_id#26, customer_id#52, customer_first_name#53, customer_last_name#54, customer_preferred_cust_flag#55, customer_birth_country#56, customer_login#57, customer_email_address#58, year_total#85, year_total#110] -Input [13]: [customer_id#26, year_total#27, customer_id#52, customer_first_name#53, customer_last_name#54, customer_preferred_cust_flag#55, customer_birth_country#56, customer_login#57, customer_email_address#58, year_total#59, year_total#85, customer_id#109, year_total#110] +Output [10]: [customer_id#23, customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#76, year_total#98] +Input [13]: [customer_id#23, year_total#24, customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#53, year_total#76, customer_id#97, year_total#98] (79) Scan parquet default.web_sales -Output [6]: [ws_bill_customer_sk#112, ws_ext_discount_amt#113, ws_ext_sales_price#114, ws_ext_wholesale_cost#115, ws_ext_list_price#116, ws_sold_date_sk#117] +Output [6]: [ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, ws_sold_date_sk#104] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#117), dynamicpruningexpression(ws_sold_date_sk#117 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(ws_sold_date_sk#104), dynamicpruningexpression(ws_sold_date_sk#104 IN dynamicpruning#7)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (80) ColumnarToRow [codegen id : 37] -Input [6]: [ws_bill_customer_sk#112, ws_ext_discount_amt#113, ws_ext_sales_price#114, ws_ext_wholesale_cost#115, ws_ext_list_price#116, ws_sold_date_sk#117] +Input [6]: [ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, ws_sold_date_sk#104] (81) Filter [codegen id : 37] -Input [6]: [ws_bill_customer_sk#112, ws_ext_discount_amt#113, ws_ext_sales_price#114, ws_ext_wholesale_cost#115, ws_ext_list_price#116, ws_sold_date_sk#117] -Condition : isnotnull(ws_bill_customer_sk#112) +Input [6]: [ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, ws_sold_date_sk#104] +Condition : isnotnull(ws_bill_customer_sk#99) (82) ReusedExchange [Reuses operator id: 122] -Output [2]: [d_date_sk#118, d_year#119] +Output [2]: [d_date_sk#105, d_year#106] (83) BroadcastHashJoin [codegen id : 37] -Left keys [1]: [ws_sold_date_sk#117] -Right keys [1]: [d_date_sk#118] +Left keys [1]: [ws_sold_date_sk#104] +Right keys [1]: [d_date_sk#105] Join condition: None (84) Project [codegen id : 37] -Output [6]: [ws_bill_customer_sk#112, ws_ext_discount_amt#113, ws_ext_sales_price#114, ws_ext_wholesale_cost#115, ws_ext_list_price#116, d_year#119] -Input [8]: [ws_bill_customer_sk#112, ws_ext_discount_amt#113, ws_ext_sales_price#114, ws_ext_wholesale_cost#115, ws_ext_list_price#116, ws_sold_date_sk#117, d_date_sk#118, d_year#119] +Output [6]: [ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, d_year#106] +Input [8]: [ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, ws_sold_date_sk#104, d_date_sk#105, d_year#106] (85) Exchange -Input [6]: [ws_bill_customer_sk#112, ws_ext_discount_amt#113, ws_ext_sales_price#114, ws_ext_wholesale_cost#115, ws_ext_list_price#116, d_year#119] -Arguments: hashpartitioning(ws_bill_customer_sk#112, 5), ENSURE_REQUIREMENTS, [id=#120] +Input [6]: [ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, d_year#106] +Arguments: hashpartitioning(ws_bill_customer_sk#99, 5), ENSURE_REQUIREMENTS, [plan_id=14] (86) Sort [codegen id : 38] -Input [6]: [ws_bill_customer_sk#112, ws_ext_discount_amt#113, ws_ext_sales_price#114, ws_ext_wholesale_cost#115, ws_ext_list_price#116, d_year#119] -Arguments: [ws_bill_customer_sk#112 ASC NULLS FIRST], false, 0 +Input [6]: [ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, d_year#106] +Arguments: [ws_bill_customer_sk#99 ASC NULLS FIRST], false, 0 (87) ReusedExchange [Reuses operator id: 12] -Output [8]: [c_customer_sk#121, c_customer_id#122, c_first_name#123, c_last_name#124, c_preferred_cust_flag#125, c_birth_country#126, c_login#127, c_email_address#128] +Output [8]: [c_customer_sk#107, c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114] (88) Sort [codegen id : 40] -Input [8]: [c_customer_sk#121, c_customer_id#122, c_first_name#123, c_last_name#124, c_preferred_cust_flag#125, c_birth_country#126, c_login#127, c_email_address#128] -Arguments: [c_customer_sk#121 ASC NULLS FIRST], false, 0 +Input [8]: [c_customer_sk#107, c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114] +Arguments: [c_customer_sk#107 ASC NULLS FIRST], false, 0 (89) SortMergeJoin [codegen id : 41] -Left keys [1]: [ws_bill_customer_sk#112] -Right keys [1]: [c_customer_sk#121] +Left keys [1]: [ws_bill_customer_sk#99] +Right keys [1]: [c_customer_sk#107] Join condition: None (90) Project [codegen id : 41] -Output [12]: [c_customer_id#122, c_first_name#123, c_last_name#124, c_preferred_cust_flag#125, c_birth_country#126, c_login#127, c_email_address#128, ws_ext_discount_amt#113, ws_ext_sales_price#114, ws_ext_wholesale_cost#115, ws_ext_list_price#116, d_year#119] -Input [14]: [ws_bill_customer_sk#112, ws_ext_discount_amt#113, ws_ext_sales_price#114, ws_ext_wholesale_cost#115, ws_ext_list_price#116, d_year#119, c_customer_sk#121, c_customer_id#122, c_first_name#123, c_last_name#124, c_preferred_cust_flag#125, c_birth_country#126, c_login#127, c_email_address#128] +Output [12]: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, d_year#106] +Input [14]: [ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, d_year#106, c_customer_sk#107, c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114] (91) HashAggregate [codegen id : 41] -Input [12]: [c_customer_id#122, c_first_name#123, c_last_name#124, c_preferred_cust_flag#125, c_birth_country#126, c_login#127, c_email_address#128, ws_ext_discount_amt#113, ws_ext_sales_price#114, ws_ext_wholesale_cost#115, ws_ext_list_price#116, d_year#119] -Keys [8]: [c_customer_id#122, c_first_name#123, c_last_name#124, c_preferred_cust_flag#125, c_birth_country#126, c_login#127, c_email_address#128, d_year#119] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#116 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#115 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#113 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#114 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [2]: [sum#129, isEmpty#130] -Results [10]: [c_customer_id#122, c_first_name#123, c_last_name#124, c_preferred_cust_flag#125, c_birth_country#126, c_login#127, c_email_address#128, d_year#119, sum#131, isEmpty#132] +Input [12]: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, d_year#106] +Keys [8]: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, d_year#106] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#103 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#102 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#100 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#101 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [2]: [sum#115, isEmpty#116] +Results [10]: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, d_year#106, sum#117, isEmpty#118] (92) Exchange -Input [10]: [c_customer_id#122, c_first_name#123, c_last_name#124, c_preferred_cust_flag#125, c_birth_country#126, c_login#127, c_email_address#128, d_year#119, sum#131, isEmpty#132] -Arguments: hashpartitioning(c_customer_id#122, c_first_name#123, c_last_name#124, c_preferred_cust_flag#125, c_birth_country#126, c_login#127, c_email_address#128, d_year#119, 5), ENSURE_REQUIREMENTS, [id=#133] +Input [10]: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, d_year#106, sum#117, isEmpty#118] +Arguments: hashpartitioning(c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, d_year#106, 5), ENSURE_REQUIREMENTS, [plan_id=15] (93) HashAggregate [codegen id : 42] -Input [10]: [c_customer_id#122, c_first_name#123, c_last_name#124, c_preferred_cust_flag#125, c_birth_country#126, c_login#127, c_email_address#128, d_year#119, sum#131, isEmpty#132] -Keys [8]: [c_customer_id#122, c_first_name#123, c_last_name#124, c_preferred_cust_flag#125, c_birth_country#126, c_login#127, c_email_address#128, d_year#119] -Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#116 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#115 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#113 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#114 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#116 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#115 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#113 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#114 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#134] -Results [2]: [c_customer_id#122 AS customer_id#135, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#116 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#115 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#113 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#114 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#134 AS year_total#136] +Input [10]: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, d_year#106, sum#117, isEmpty#118] +Keys [8]: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, d_year#106] +Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#103 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#102 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#100 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#101 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#103 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#102 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#100 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#101 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#119] +Results [2]: [c_customer_id#108 AS customer_id#120, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#103 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#102 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#100 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#101 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#119 AS year_total#121] (94) Filter [codegen id : 42] -Input [2]: [customer_id#135, year_total#136] -Condition : (isnotnull(year_total#136) AND (year_total#136 > 0.000000)) +Input [2]: [customer_id#120, year_total#121] +Condition : (isnotnull(year_total#121) AND (year_total#121 > 0.000000)) (95) Exchange -Input [2]: [customer_id#135, year_total#136] -Arguments: hashpartitioning(customer_id#135, 5), ENSURE_REQUIREMENTS, [id=#137] +Input [2]: [customer_id#120, year_total#121] +Arguments: hashpartitioning(customer_id#120, 5), ENSURE_REQUIREMENTS, [plan_id=16] (96) Sort [codegen id : 43] -Input [2]: [customer_id#135, year_total#136] -Arguments: [customer_id#135 ASC NULLS FIRST], false, 0 +Input [2]: [customer_id#120, year_total#121] +Arguments: [customer_id#120 ASC NULLS FIRST], false, 0 (97) SortMergeJoin [codegen id : 44] -Left keys [1]: [customer_id#26] -Right keys [1]: [customer_id#135] +Left keys [1]: [customer_id#23] +Right keys [1]: [customer_id#120] Join condition: None (98) Project [codegen id : 44] -Output [11]: [customer_id#26, customer_id#52, customer_first_name#53, customer_last_name#54, customer_preferred_cust_flag#55, customer_birth_country#56, customer_login#57, customer_email_address#58, year_total#85, year_total#110, year_total#136] -Input [12]: [customer_id#26, customer_id#52, customer_first_name#53, customer_last_name#54, customer_preferred_cust_flag#55, customer_birth_country#56, customer_login#57, customer_email_address#58, year_total#85, year_total#110, customer_id#135, year_total#136] +Output [11]: [customer_id#23, customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#76, year_total#98, year_total#121] +Input [12]: [customer_id#23, customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#76, year_total#98, customer_id#120, year_total#121] (99) Scan parquet default.web_sales -Output [6]: [ws_bill_customer_sk#138, ws_ext_discount_amt#139, ws_ext_sales_price#140, ws_ext_wholesale_cost#141, ws_ext_list_price#142, ws_sold_date_sk#143] +Output [6]: [ws_bill_customer_sk#122, ws_ext_discount_amt#123, ws_ext_sales_price#124, ws_ext_wholesale_cost#125, ws_ext_list_price#126, ws_sold_date_sk#127] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#143), dynamicpruningexpression(ws_sold_date_sk#143 IN dynamicpruning#35)] +PartitionFilters: [isnotnull(ws_sold_date_sk#127), dynamicpruningexpression(ws_sold_date_sk#127 IN dynamicpruning#31)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (100) ColumnarToRow [codegen id : 46] -Input [6]: [ws_bill_customer_sk#138, ws_ext_discount_amt#139, ws_ext_sales_price#140, ws_ext_wholesale_cost#141, ws_ext_list_price#142, ws_sold_date_sk#143] +Input [6]: [ws_bill_customer_sk#122, ws_ext_discount_amt#123, ws_ext_sales_price#124, ws_ext_wholesale_cost#125, ws_ext_list_price#126, ws_sold_date_sk#127] (101) Filter [codegen id : 46] -Input [6]: [ws_bill_customer_sk#138, ws_ext_discount_amt#139, ws_ext_sales_price#140, ws_ext_wholesale_cost#141, ws_ext_list_price#142, ws_sold_date_sk#143] -Condition : isnotnull(ws_bill_customer_sk#138) +Input [6]: [ws_bill_customer_sk#122, ws_ext_discount_amt#123, ws_ext_sales_price#124, ws_ext_wholesale_cost#125, ws_ext_list_price#126, ws_sold_date_sk#127] +Condition : isnotnull(ws_bill_customer_sk#122) (102) ReusedExchange [Reuses operator id: 126] -Output [2]: [d_date_sk#144, d_year#145] +Output [2]: [d_date_sk#128, d_year#129] (103) BroadcastHashJoin [codegen id : 46] -Left keys [1]: [ws_sold_date_sk#143] -Right keys [1]: [d_date_sk#144] +Left keys [1]: [ws_sold_date_sk#127] +Right keys [1]: [d_date_sk#128] Join condition: None (104) Project [codegen id : 46] -Output [6]: [ws_bill_customer_sk#138, ws_ext_discount_amt#139, ws_ext_sales_price#140, ws_ext_wholesale_cost#141, ws_ext_list_price#142, d_year#145] -Input [8]: [ws_bill_customer_sk#138, ws_ext_discount_amt#139, ws_ext_sales_price#140, ws_ext_wholesale_cost#141, ws_ext_list_price#142, ws_sold_date_sk#143, d_date_sk#144, d_year#145] +Output [6]: [ws_bill_customer_sk#122, ws_ext_discount_amt#123, ws_ext_sales_price#124, ws_ext_wholesale_cost#125, ws_ext_list_price#126, d_year#129] +Input [8]: [ws_bill_customer_sk#122, ws_ext_discount_amt#123, ws_ext_sales_price#124, ws_ext_wholesale_cost#125, ws_ext_list_price#126, ws_sold_date_sk#127, d_date_sk#128, d_year#129] (105) Exchange -Input [6]: [ws_bill_customer_sk#138, ws_ext_discount_amt#139, ws_ext_sales_price#140, ws_ext_wholesale_cost#141, ws_ext_list_price#142, d_year#145] -Arguments: hashpartitioning(ws_bill_customer_sk#138, 5), ENSURE_REQUIREMENTS, [id=#146] +Input [6]: [ws_bill_customer_sk#122, ws_ext_discount_amt#123, ws_ext_sales_price#124, ws_ext_wholesale_cost#125, ws_ext_list_price#126, d_year#129] +Arguments: hashpartitioning(ws_bill_customer_sk#122, 5), ENSURE_REQUIREMENTS, [plan_id=17] (106) Sort [codegen id : 47] -Input [6]: [ws_bill_customer_sk#138, ws_ext_discount_amt#139, ws_ext_sales_price#140, ws_ext_wholesale_cost#141, ws_ext_list_price#142, d_year#145] -Arguments: [ws_bill_customer_sk#138 ASC NULLS FIRST], false, 0 +Input [6]: [ws_bill_customer_sk#122, ws_ext_discount_amt#123, ws_ext_sales_price#124, ws_ext_wholesale_cost#125, ws_ext_list_price#126, d_year#129] +Arguments: [ws_bill_customer_sk#122 ASC NULLS FIRST], false, 0 (107) ReusedExchange [Reuses operator id: 12] -Output [8]: [c_customer_sk#147, c_customer_id#148, c_first_name#149, c_last_name#150, c_preferred_cust_flag#151, c_birth_country#152, c_login#153, c_email_address#154] +Output [8]: [c_customer_sk#130, c_customer_id#131, c_first_name#132, c_last_name#133, c_preferred_cust_flag#134, c_birth_country#135, c_login#136, c_email_address#137] (108) Sort [codegen id : 49] -Input [8]: [c_customer_sk#147, c_customer_id#148, c_first_name#149, c_last_name#150, c_preferred_cust_flag#151, c_birth_country#152, c_login#153, c_email_address#154] -Arguments: [c_customer_sk#147 ASC NULLS FIRST], false, 0 +Input [8]: [c_customer_sk#130, c_customer_id#131, c_first_name#132, c_last_name#133, c_preferred_cust_flag#134, c_birth_country#135, c_login#136, c_email_address#137] +Arguments: [c_customer_sk#130 ASC NULLS FIRST], false, 0 (109) SortMergeJoin [codegen id : 50] -Left keys [1]: [ws_bill_customer_sk#138] -Right keys [1]: [c_customer_sk#147] +Left keys [1]: [ws_bill_customer_sk#122] +Right keys [1]: [c_customer_sk#130] Join condition: None (110) Project [codegen id : 50] -Output [12]: [c_customer_id#148, c_first_name#149, c_last_name#150, c_preferred_cust_flag#151, c_birth_country#152, c_login#153, c_email_address#154, ws_ext_discount_amt#139, ws_ext_sales_price#140, ws_ext_wholesale_cost#141, ws_ext_list_price#142, d_year#145] -Input [14]: [ws_bill_customer_sk#138, ws_ext_discount_amt#139, ws_ext_sales_price#140, ws_ext_wholesale_cost#141, ws_ext_list_price#142, d_year#145, c_customer_sk#147, c_customer_id#148, c_first_name#149, c_last_name#150, c_preferred_cust_flag#151, c_birth_country#152, c_login#153, c_email_address#154] +Output [12]: [c_customer_id#131, c_first_name#132, c_last_name#133, c_preferred_cust_flag#134, c_birth_country#135, c_login#136, c_email_address#137, ws_ext_discount_amt#123, ws_ext_sales_price#124, ws_ext_wholesale_cost#125, ws_ext_list_price#126, d_year#129] +Input [14]: [ws_bill_customer_sk#122, ws_ext_discount_amt#123, ws_ext_sales_price#124, ws_ext_wholesale_cost#125, ws_ext_list_price#126, d_year#129, c_customer_sk#130, c_customer_id#131, c_first_name#132, c_last_name#133, c_preferred_cust_flag#134, c_birth_country#135, c_login#136, c_email_address#137] (111) HashAggregate [codegen id : 50] -Input [12]: [c_customer_id#148, c_first_name#149, c_last_name#150, c_preferred_cust_flag#151, c_birth_country#152, c_login#153, c_email_address#154, ws_ext_discount_amt#139, ws_ext_sales_price#140, ws_ext_wholesale_cost#141, ws_ext_list_price#142, d_year#145] -Keys [8]: [c_customer_id#148, c_first_name#149, c_last_name#150, c_preferred_cust_flag#151, c_birth_country#152, c_login#153, c_email_address#154, d_year#145] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#142 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#141 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#139 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#140 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [2]: [sum#155, isEmpty#156] -Results [10]: [c_customer_id#148, c_first_name#149, c_last_name#150, c_preferred_cust_flag#151, c_birth_country#152, c_login#153, c_email_address#154, d_year#145, sum#157, isEmpty#158] +Input [12]: [c_customer_id#131, c_first_name#132, c_last_name#133, c_preferred_cust_flag#134, c_birth_country#135, c_login#136, c_email_address#137, ws_ext_discount_amt#123, ws_ext_sales_price#124, ws_ext_wholesale_cost#125, ws_ext_list_price#126, d_year#129] +Keys [8]: [c_customer_id#131, c_first_name#132, c_last_name#133, c_preferred_cust_flag#134, c_birth_country#135, c_login#136, c_email_address#137, d_year#129] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#126 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#125 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#123 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#124 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [2]: [sum#138, isEmpty#139] +Results [10]: [c_customer_id#131, c_first_name#132, c_last_name#133, c_preferred_cust_flag#134, c_birth_country#135, c_login#136, c_email_address#137, d_year#129, sum#140, isEmpty#141] (112) Exchange -Input [10]: [c_customer_id#148, c_first_name#149, c_last_name#150, c_preferred_cust_flag#151, c_birth_country#152, c_login#153, c_email_address#154, d_year#145, sum#157, isEmpty#158] -Arguments: hashpartitioning(c_customer_id#148, c_first_name#149, c_last_name#150, c_preferred_cust_flag#151, c_birth_country#152, c_login#153, c_email_address#154, d_year#145, 5), ENSURE_REQUIREMENTS, [id=#159] +Input [10]: [c_customer_id#131, c_first_name#132, c_last_name#133, c_preferred_cust_flag#134, c_birth_country#135, c_login#136, c_email_address#137, d_year#129, sum#140, isEmpty#141] +Arguments: hashpartitioning(c_customer_id#131, c_first_name#132, c_last_name#133, c_preferred_cust_flag#134, c_birth_country#135, c_login#136, c_email_address#137, d_year#129, 5), ENSURE_REQUIREMENTS, [plan_id=18] (113) HashAggregate [codegen id : 51] -Input [10]: [c_customer_id#148, c_first_name#149, c_last_name#150, c_preferred_cust_flag#151, c_birth_country#152, c_login#153, c_email_address#154, d_year#145, sum#157, isEmpty#158] -Keys [8]: [c_customer_id#148, c_first_name#149, c_last_name#150, c_preferred_cust_flag#151, c_birth_country#152, c_login#153, c_email_address#154, d_year#145] -Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#142 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#141 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#139 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#140 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#142 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#141 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#139 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#140 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#134] -Results [2]: [c_customer_id#148 AS customer_id#160, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#142 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#141 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#139 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#140 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#134 AS year_total#161] +Input [10]: [c_customer_id#131, c_first_name#132, c_last_name#133, c_preferred_cust_flag#134, c_birth_country#135, c_login#136, c_email_address#137, d_year#129, sum#140, isEmpty#141] +Keys [8]: [c_customer_id#131, c_first_name#132, c_last_name#133, c_preferred_cust_flag#134, c_birth_country#135, c_login#136, c_email_address#137, d_year#129] +Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#126 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#125 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#123 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#124 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#126 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#125 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#123 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#124 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#119] +Results [2]: [c_customer_id#131 AS customer_id#142, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#126 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#125 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#123 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#124 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#119 AS year_total#143] (114) Exchange -Input [2]: [customer_id#160, year_total#161] -Arguments: hashpartitioning(customer_id#160, 5), ENSURE_REQUIREMENTS, [id=#162] +Input [2]: [customer_id#142, year_total#143] +Arguments: hashpartitioning(customer_id#142, 5), ENSURE_REQUIREMENTS, [plan_id=19] (115) Sort [codegen id : 52] -Input [2]: [customer_id#160, year_total#161] -Arguments: [customer_id#160 ASC NULLS FIRST], false, 0 +Input [2]: [customer_id#142, year_total#143] +Arguments: [customer_id#142 ASC NULLS FIRST], false, 0 (116) SortMergeJoin [codegen id : 53] -Left keys [1]: [customer_id#26] -Right keys [1]: [customer_id#160] -Join condition: (CASE WHEN (year_total#85 > 0.000000) THEN CheckOverflow((promote_precision(year_total#110) / promote_precision(year_total#85)), DecimalType(38,14)) END > CASE WHEN (year_total#136 > 0.000000) THEN CheckOverflow((promote_precision(year_total#161) / promote_precision(year_total#136)), DecimalType(38,14)) END) +Left keys [1]: [customer_id#23] +Right keys [1]: [customer_id#142] +Join condition: (CASE WHEN (year_total#76 > 0.000000) THEN CheckOverflow((promote_precision(year_total#98) / promote_precision(year_total#76)), DecimalType(38,14)) END > CASE WHEN (year_total#121 > 0.000000) THEN CheckOverflow((promote_precision(year_total#143) / promote_precision(year_total#121)), DecimalType(38,14)) END) (117) Project [codegen id : 53] -Output [7]: [customer_id#52, customer_first_name#53, customer_last_name#54, customer_preferred_cust_flag#55, customer_birth_country#56, customer_login#57, customer_email_address#58] -Input [13]: [customer_id#26, customer_id#52, customer_first_name#53, customer_last_name#54, customer_preferred_cust_flag#55, customer_birth_country#56, customer_login#57, customer_email_address#58, year_total#85, year_total#110, year_total#136, customer_id#160, year_total#161] +Output [7]: [customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52] +Input [13]: [customer_id#23, customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#76, year_total#98, year_total#121, customer_id#142, year_total#143] (118) TakeOrderedAndProject -Input [7]: [customer_id#52, customer_first_name#53, customer_last_name#54, customer_preferred_cust_flag#55, customer_birth_country#56, customer_login#57, customer_email_address#58] -Arguments: 100, [customer_id#52 ASC NULLS FIRST, customer_first_name#53 ASC NULLS FIRST, customer_last_name#54 ASC NULLS FIRST, customer_preferred_cust_flag#55 ASC NULLS FIRST, customer_birth_country#56 ASC NULLS FIRST, customer_login#57 ASC NULLS FIRST, customer_email_address#58 ASC NULLS FIRST], [customer_id#52, customer_first_name#53, customer_last_name#54, customer_preferred_cust_flag#55, customer_birth_country#56, customer_login#57, customer_email_address#58] +Input [7]: [customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52] +Arguments: 100, [customer_id#46 ASC NULLS FIRST, customer_first_name#47 ASC NULLS FIRST, customer_last_name#48 ASC NULLS FIRST, customer_preferred_cust_flag#49 ASC NULLS FIRST, customer_birth_country#50 ASC NULLS FIRST, customer_login#51 ASC NULLS FIRST, customer_email_address#52 ASC NULLS FIRST], [customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52] ===== Subqueries ===== @@ -678,9 +678,9 @@ Condition : ((isnotnull(d_year#9) AND (d_year#9 = 2001)) AND isnotnull(d_date_sk (122) BroadcastExchange Input [2]: [d_date_sk#8, d_year#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#163] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=20] -Subquery:2 Hosting operator id = 22 Hosting Expression = ss_sold_date_sk#34 IN dynamicpruning#35 +Subquery:2 Hosting operator id = 22 Hosting Expression = ss_sold_date_sk#30 IN dynamicpruning#31 BroadcastExchange (126) +- * Filter (125) +- * ColumnarToRow (124) @@ -688,29 +688,29 @@ BroadcastExchange (126) (123) Scan parquet default.date_dim -Output [2]: [d_date_sk#36, d_year#37] +Output [2]: [d_date_sk#32, d_year#33] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)] ReadSchema: struct (124) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#36, d_year#37] +Input [2]: [d_date_sk#32, d_year#33] (125) Filter [codegen id : 1] -Input [2]: [d_date_sk#36, d_year#37] -Condition : ((isnotnull(d_year#37) AND (d_year#37 = 2002)) AND isnotnull(d_date_sk#36)) +Input [2]: [d_date_sk#32, d_year#33] +Condition : ((isnotnull(d_year#33) AND (d_year#33 = 2002)) AND isnotnull(d_date_sk#32)) (126) BroadcastExchange -Input [2]: [d_date_sk#36, d_year#37] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#164] +Input [2]: [d_date_sk#32, d_year#33] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=21] -Subquery:3 Hosting operator id = 40 Hosting Expression = cs_sold_date_sk#66 IN dynamicpruning#7 +Subquery:3 Hosting operator id = 40 Hosting Expression = cs_sold_date_sk#59 IN dynamicpruning#7 -Subquery:4 Hosting operator id = 60 Hosting Expression = cs_sold_date_sk#92 IN dynamicpruning#35 +Subquery:4 Hosting operator id = 60 Hosting Expression = cs_sold_date_sk#82 IN dynamicpruning#31 -Subquery:5 Hosting operator id = 79 Hosting Expression = ws_sold_date_sk#117 IN dynamicpruning#7 +Subquery:5 Hosting operator id = 79 Hosting Expression = ws_sold_date_sk#104 IN dynamicpruning#7 -Subquery:6 Hosting operator id = 99 Hosting Expression = ws_sold_date_sk#143 IN dynamicpruning#35 +Subquery:6 Hosting operator id = 99 Hosting Expression = ws_sold_date_sk#127 IN dynamicpruning#31 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q4/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q4/explain.txt index b0af6fb5e1627..5ff09a7763c0e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q4/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q4/explain.txt @@ -140,7 +140,7 @@ Condition : isnotnull(ss_customer_sk#9) (7) BroadcastExchange Input [6]: [ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, ss_sold_date_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [c_customer_sk#1] @@ -152,471 +152,471 @@ Output [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_f Input [14]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, ss_sold_date_sk#14] (10) ReusedExchange [Reuses operator id: 112] -Output [2]: [d_date_sk#17, d_year#18] +Output [2]: [d_date_sk#16, d_year#17] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_sold_date_sk#14] -Right keys [1]: [d_date_sk#17] +Right keys [1]: [d_date_sk#16] Join condition: None (12) Project [codegen id : 3] -Output [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, d_year#18] -Input [14]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, ss_sold_date_sk#14, d_date_sk#17, d_year#18] +Output [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, d_year#17] +Input [14]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, ss_sold_date_sk#14, d_date_sk#16, d_year#17] (13) HashAggregate [codegen id : 3] -Input [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, d_year#18] -Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#18] +Input [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, d_year#17] +Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#17] Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#13 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#12 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#11 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [2]: [sum#19, isEmpty#20] -Results [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#18, sum#21, isEmpty#22] +Aggregate Attributes [2]: [sum#18, isEmpty#19] +Results [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#17, sum#20, isEmpty#21] (14) Exchange -Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#18, sum#21, isEmpty#22] -Arguments: hashpartitioning(c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#18, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#17, sum#20, isEmpty#21] +Arguments: hashpartitioning(c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#17, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 24] -Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#18, sum#21, isEmpty#22] -Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#18] +Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#17, sum#20, isEmpty#21] +Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#17] Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#13 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#12 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#11 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#13 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#12 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#11 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#24] -Results [2]: [c_customer_id#2 AS customer_id#25, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#13 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#12 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#11 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#24 AS year_total#26] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#13 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#12 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#11 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#22] +Results [2]: [c_customer_id#2 AS customer_id#23, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#13 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#12 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#11 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#22 AS year_total#24] (16) Filter [codegen id : 24] -Input [2]: [customer_id#25, year_total#26] -Condition : (isnotnull(year_total#26) AND (year_total#26 > 0.000000)) +Input [2]: [customer_id#23, year_total#24] +Condition : (isnotnull(year_total#24) AND (year_total#24 > 0.000000)) (17) Scan parquet default.customer -Output [8]: [c_customer_sk#27, c_customer_id#28, c_first_name#29, c_last_name#30, c_preferred_cust_flag#31, c_birth_country#32, c_login#33, c_email_address#34] +Output [8]: [c_customer_sk#25, c_customer_id#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29, c_birth_country#30, c_login#31, c_email_address#32] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (18) ColumnarToRow [codegen id : 6] -Input [8]: [c_customer_sk#27, c_customer_id#28, c_first_name#29, c_last_name#30, c_preferred_cust_flag#31, c_birth_country#32, c_login#33, c_email_address#34] +Input [8]: [c_customer_sk#25, c_customer_id#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29, c_birth_country#30, c_login#31, c_email_address#32] (19) Filter [codegen id : 6] -Input [8]: [c_customer_sk#27, c_customer_id#28, c_first_name#29, c_last_name#30, c_preferred_cust_flag#31, c_birth_country#32, c_login#33, c_email_address#34] -Condition : (isnotnull(c_customer_sk#27) AND isnotnull(c_customer_id#28)) +Input [8]: [c_customer_sk#25, c_customer_id#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29, c_birth_country#30, c_login#31, c_email_address#32] +Condition : (isnotnull(c_customer_sk#25) AND isnotnull(c_customer_id#26)) (20) Scan parquet default.store_sales -Output [6]: [ss_customer_sk#35, ss_ext_discount_amt#36, ss_ext_sales_price#37, ss_ext_wholesale_cost#38, ss_ext_list_price#39, ss_sold_date_sk#40] +Output [6]: [ss_customer_sk#33, ss_ext_discount_amt#34, ss_ext_sales_price#35, ss_ext_wholesale_cost#36, ss_ext_list_price#37, ss_sold_date_sk#38] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#40), dynamicpruningexpression(ss_sold_date_sk#40 IN dynamicpruning#41)] +PartitionFilters: [isnotnull(ss_sold_date_sk#38), dynamicpruningexpression(ss_sold_date_sk#38 IN dynamicpruning#39)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [6]: [ss_customer_sk#35, ss_ext_discount_amt#36, ss_ext_sales_price#37, ss_ext_wholesale_cost#38, ss_ext_list_price#39, ss_sold_date_sk#40] +Input [6]: [ss_customer_sk#33, ss_ext_discount_amt#34, ss_ext_sales_price#35, ss_ext_wholesale_cost#36, ss_ext_list_price#37, ss_sold_date_sk#38] (22) Filter [codegen id : 4] -Input [6]: [ss_customer_sk#35, ss_ext_discount_amt#36, ss_ext_sales_price#37, ss_ext_wholesale_cost#38, ss_ext_list_price#39, ss_sold_date_sk#40] -Condition : isnotnull(ss_customer_sk#35) +Input [6]: [ss_customer_sk#33, ss_ext_discount_amt#34, ss_ext_sales_price#35, ss_ext_wholesale_cost#36, ss_ext_list_price#37, ss_sold_date_sk#38] +Condition : isnotnull(ss_customer_sk#33) (23) BroadcastExchange -Input [6]: [ss_customer_sk#35, ss_ext_discount_amt#36, ss_ext_sales_price#37, ss_ext_wholesale_cost#38, ss_ext_list_price#39, ss_sold_date_sk#40] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#42] +Input [6]: [ss_customer_sk#33, ss_ext_discount_amt#34, ss_ext_sales_price#35, ss_ext_wholesale_cost#36, ss_ext_list_price#37, ss_sold_date_sk#38] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [c_customer_sk#27] -Right keys [1]: [ss_customer_sk#35] +Left keys [1]: [c_customer_sk#25] +Right keys [1]: [ss_customer_sk#33] Join condition: None (25) Project [codegen id : 6] -Output [12]: [c_customer_id#28, c_first_name#29, c_last_name#30, c_preferred_cust_flag#31, c_birth_country#32, c_login#33, c_email_address#34, ss_ext_discount_amt#36, ss_ext_sales_price#37, ss_ext_wholesale_cost#38, ss_ext_list_price#39, ss_sold_date_sk#40] -Input [14]: [c_customer_sk#27, c_customer_id#28, c_first_name#29, c_last_name#30, c_preferred_cust_flag#31, c_birth_country#32, c_login#33, c_email_address#34, ss_customer_sk#35, ss_ext_discount_amt#36, ss_ext_sales_price#37, ss_ext_wholesale_cost#38, ss_ext_list_price#39, ss_sold_date_sk#40] +Output [12]: [c_customer_id#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29, c_birth_country#30, c_login#31, c_email_address#32, ss_ext_discount_amt#34, ss_ext_sales_price#35, ss_ext_wholesale_cost#36, ss_ext_list_price#37, ss_sold_date_sk#38] +Input [14]: [c_customer_sk#25, c_customer_id#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29, c_birth_country#30, c_login#31, c_email_address#32, ss_customer_sk#33, ss_ext_discount_amt#34, ss_ext_sales_price#35, ss_ext_wholesale_cost#36, ss_ext_list_price#37, ss_sold_date_sk#38] (26) ReusedExchange [Reuses operator id: 116] -Output [2]: [d_date_sk#43, d_year#44] +Output [2]: [d_date_sk#40, d_year#41] (27) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ss_sold_date_sk#40] -Right keys [1]: [d_date_sk#43] +Left keys [1]: [ss_sold_date_sk#38] +Right keys [1]: [d_date_sk#40] Join condition: None (28) Project [codegen id : 6] -Output [12]: [c_customer_id#28, c_first_name#29, c_last_name#30, c_preferred_cust_flag#31, c_birth_country#32, c_login#33, c_email_address#34, ss_ext_discount_amt#36, ss_ext_sales_price#37, ss_ext_wholesale_cost#38, ss_ext_list_price#39, d_year#44] -Input [14]: [c_customer_id#28, c_first_name#29, c_last_name#30, c_preferred_cust_flag#31, c_birth_country#32, c_login#33, c_email_address#34, ss_ext_discount_amt#36, ss_ext_sales_price#37, ss_ext_wholesale_cost#38, ss_ext_list_price#39, ss_sold_date_sk#40, d_date_sk#43, d_year#44] +Output [12]: [c_customer_id#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29, c_birth_country#30, c_login#31, c_email_address#32, ss_ext_discount_amt#34, ss_ext_sales_price#35, ss_ext_wholesale_cost#36, ss_ext_list_price#37, d_year#41] +Input [14]: [c_customer_id#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29, c_birth_country#30, c_login#31, c_email_address#32, ss_ext_discount_amt#34, ss_ext_sales_price#35, ss_ext_wholesale_cost#36, ss_ext_list_price#37, ss_sold_date_sk#38, d_date_sk#40, d_year#41] (29) HashAggregate [codegen id : 6] -Input [12]: [c_customer_id#28, c_first_name#29, c_last_name#30, c_preferred_cust_flag#31, c_birth_country#32, c_login#33, c_email_address#34, ss_ext_discount_amt#36, ss_ext_sales_price#37, ss_ext_wholesale_cost#38, ss_ext_list_price#39, d_year#44] -Keys [8]: [c_customer_id#28, c_first_name#29, c_last_name#30, c_preferred_cust_flag#31, c_birth_country#32, c_login#33, c_email_address#34, d_year#44] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#39 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#38 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#36 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#37 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [2]: [sum#45, isEmpty#46] -Results [10]: [c_customer_id#28, c_first_name#29, c_last_name#30, c_preferred_cust_flag#31, c_birth_country#32, c_login#33, c_email_address#34, d_year#44, sum#47, isEmpty#48] +Input [12]: [c_customer_id#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29, c_birth_country#30, c_login#31, c_email_address#32, ss_ext_discount_amt#34, ss_ext_sales_price#35, ss_ext_wholesale_cost#36, ss_ext_list_price#37, d_year#41] +Keys [8]: [c_customer_id#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29, c_birth_country#30, c_login#31, c_email_address#32, d_year#41] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#37 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#36 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#34 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#35 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [2]: [sum#42, isEmpty#43] +Results [10]: [c_customer_id#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29, c_birth_country#30, c_login#31, c_email_address#32, d_year#41, sum#44, isEmpty#45] (30) Exchange -Input [10]: [c_customer_id#28, c_first_name#29, c_last_name#30, c_preferred_cust_flag#31, c_birth_country#32, c_login#33, c_email_address#34, d_year#44, sum#47, isEmpty#48] -Arguments: hashpartitioning(c_customer_id#28, c_first_name#29, c_last_name#30, c_preferred_cust_flag#31, c_birth_country#32, c_login#33, c_email_address#34, d_year#44, 5), ENSURE_REQUIREMENTS, [id=#49] +Input [10]: [c_customer_id#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29, c_birth_country#30, c_login#31, c_email_address#32, d_year#41, sum#44, isEmpty#45] +Arguments: hashpartitioning(c_customer_id#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29, c_birth_country#30, c_login#31, c_email_address#32, d_year#41, 5), ENSURE_REQUIREMENTS, [plan_id=4] (31) HashAggregate [codegen id : 7] -Input [10]: [c_customer_id#28, c_first_name#29, c_last_name#30, c_preferred_cust_flag#31, c_birth_country#32, c_login#33, c_email_address#34, d_year#44, sum#47, isEmpty#48] -Keys [8]: [c_customer_id#28, c_first_name#29, c_last_name#30, c_preferred_cust_flag#31, c_birth_country#32, c_login#33, c_email_address#34, d_year#44] -Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#39 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#38 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#36 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#37 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#39 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#38 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#36 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#37 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#24] -Results [8]: [c_customer_id#28 AS customer_id#50, c_first_name#29 AS customer_first_name#51, c_last_name#30 AS customer_last_name#52, c_preferred_cust_flag#31 AS customer_preferred_cust_flag#53, c_birth_country#32 AS customer_birth_country#54, c_login#33 AS customer_login#55, c_email_address#34 AS customer_email_address#56, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#39 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#38 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#36 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#37 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#24 AS year_total#57] +Input [10]: [c_customer_id#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29, c_birth_country#30, c_login#31, c_email_address#32, d_year#41, sum#44, isEmpty#45] +Keys [8]: [c_customer_id#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29, c_birth_country#30, c_login#31, c_email_address#32, d_year#41] +Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#37 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#36 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#34 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#35 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#37 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#36 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#34 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#35 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#22] +Results [8]: [c_customer_id#26 AS customer_id#46, c_first_name#27 AS customer_first_name#47, c_last_name#28 AS customer_last_name#48, c_preferred_cust_flag#29 AS customer_preferred_cust_flag#49, c_birth_country#30 AS customer_birth_country#50, c_login#31 AS customer_login#51, c_email_address#32 AS customer_email_address#52, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_ext_list_price#37 as decimal(8,2))) - promote_precision(cast(ss_ext_wholesale_cost#36 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ss_ext_discount_amt#34 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ss_ext_sales_price#35 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#22 AS year_total#53] (32) BroadcastExchange -Input [8]: [customer_id#50, customer_first_name#51, customer_last_name#52, customer_preferred_cust_flag#53, customer_birth_country#54, customer_login#55, customer_email_address#56, year_total#57] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#58] +Input [8]: [customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#53] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=5] (33) BroadcastHashJoin [codegen id : 24] -Left keys [1]: [customer_id#25] -Right keys [1]: [customer_id#50] +Left keys [1]: [customer_id#23] +Right keys [1]: [customer_id#46] Join condition: None (34) Scan parquet default.customer -Output [8]: [c_customer_sk#59, c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66] +Output [8]: [c_customer_sk#54, c_customer_id#55, c_first_name#56, c_last_name#57, c_preferred_cust_flag#58, c_birth_country#59, c_login#60, c_email_address#61] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (35) ColumnarToRow [codegen id : 10] -Input [8]: [c_customer_sk#59, c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66] +Input [8]: [c_customer_sk#54, c_customer_id#55, c_first_name#56, c_last_name#57, c_preferred_cust_flag#58, c_birth_country#59, c_login#60, c_email_address#61] (36) Filter [codegen id : 10] -Input [8]: [c_customer_sk#59, c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66] -Condition : (isnotnull(c_customer_sk#59) AND isnotnull(c_customer_id#60)) +Input [8]: [c_customer_sk#54, c_customer_id#55, c_first_name#56, c_last_name#57, c_preferred_cust_flag#58, c_birth_country#59, c_login#60, c_email_address#61] +Condition : (isnotnull(c_customer_sk#54) AND isnotnull(c_customer_id#55)) (37) Scan parquet default.catalog_sales -Output [6]: [cs_bill_customer_sk#67, cs_ext_discount_amt#68, cs_ext_sales_price#69, cs_ext_wholesale_cost#70, cs_ext_list_price#71, cs_sold_date_sk#72] +Output [6]: [cs_bill_customer_sk#62, cs_ext_discount_amt#63, cs_ext_sales_price#64, cs_ext_wholesale_cost#65, cs_ext_list_price#66, cs_sold_date_sk#67] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#72), dynamicpruningexpression(cs_sold_date_sk#72 IN dynamicpruning#15)] +PartitionFilters: [isnotnull(cs_sold_date_sk#67), dynamicpruningexpression(cs_sold_date_sk#67 IN dynamicpruning#15)] PushedFilters: [IsNotNull(cs_bill_customer_sk)] ReadSchema: struct (38) ColumnarToRow [codegen id : 8] -Input [6]: [cs_bill_customer_sk#67, cs_ext_discount_amt#68, cs_ext_sales_price#69, cs_ext_wholesale_cost#70, cs_ext_list_price#71, cs_sold_date_sk#72] +Input [6]: [cs_bill_customer_sk#62, cs_ext_discount_amt#63, cs_ext_sales_price#64, cs_ext_wholesale_cost#65, cs_ext_list_price#66, cs_sold_date_sk#67] (39) Filter [codegen id : 8] -Input [6]: [cs_bill_customer_sk#67, cs_ext_discount_amt#68, cs_ext_sales_price#69, cs_ext_wholesale_cost#70, cs_ext_list_price#71, cs_sold_date_sk#72] -Condition : isnotnull(cs_bill_customer_sk#67) +Input [6]: [cs_bill_customer_sk#62, cs_ext_discount_amt#63, cs_ext_sales_price#64, cs_ext_wholesale_cost#65, cs_ext_list_price#66, cs_sold_date_sk#67] +Condition : isnotnull(cs_bill_customer_sk#62) (40) BroadcastExchange -Input [6]: [cs_bill_customer_sk#67, cs_ext_discount_amt#68, cs_ext_sales_price#69, cs_ext_wholesale_cost#70, cs_ext_list_price#71, cs_sold_date_sk#72] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#73] +Input [6]: [cs_bill_customer_sk#62, cs_ext_discount_amt#63, cs_ext_sales_price#64, cs_ext_wholesale_cost#65, cs_ext_list_price#66, cs_sold_date_sk#67] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] (41) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [c_customer_sk#59] -Right keys [1]: [cs_bill_customer_sk#67] +Left keys [1]: [c_customer_sk#54] +Right keys [1]: [cs_bill_customer_sk#62] Join condition: None (42) Project [codegen id : 10] -Output [12]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, cs_ext_discount_amt#68, cs_ext_sales_price#69, cs_ext_wholesale_cost#70, cs_ext_list_price#71, cs_sold_date_sk#72] -Input [14]: [c_customer_sk#59, c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, cs_bill_customer_sk#67, cs_ext_discount_amt#68, cs_ext_sales_price#69, cs_ext_wholesale_cost#70, cs_ext_list_price#71, cs_sold_date_sk#72] +Output [12]: [c_customer_id#55, c_first_name#56, c_last_name#57, c_preferred_cust_flag#58, c_birth_country#59, c_login#60, c_email_address#61, cs_ext_discount_amt#63, cs_ext_sales_price#64, cs_ext_wholesale_cost#65, cs_ext_list_price#66, cs_sold_date_sk#67] +Input [14]: [c_customer_sk#54, c_customer_id#55, c_first_name#56, c_last_name#57, c_preferred_cust_flag#58, c_birth_country#59, c_login#60, c_email_address#61, cs_bill_customer_sk#62, cs_ext_discount_amt#63, cs_ext_sales_price#64, cs_ext_wholesale_cost#65, cs_ext_list_price#66, cs_sold_date_sk#67] (43) ReusedExchange [Reuses operator id: 112] -Output [2]: [d_date_sk#74, d_year#75] +Output [2]: [d_date_sk#68, d_year#69] (44) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cs_sold_date_sk#72] -Right keys [1]: [d_date_sk#74] +Left keys [1]: [cs_sold_date_sk#67] +Right keys [1]: [d_date_sk#68] Join condition: None (45) Project [codegen id : 10] -Output [12]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, cs_ext_discount_amt#68, cs_ext_sales_price#69, cs_ext_wholesale_cost#70, cs_ext_list_price#71, d_year#75] -Input [14]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, cs_ext_discount_amt#68, cs_ext_sales_price#69, cs_ext_wholesale_cost#70, cs_ext_list_price#71, cs_sold_date_sk#72, d_date_sk#74, d_year#75] +Output [12]: [c_customer_id#55, c_first_name#56, c_last_name#57, c_preferred_cust_flag#58, c_birth_country#59, c_login#60, c_email_address#61, cs_ext_discount_amt#63, cs_ext_sales_price#64, cs_ext_wholesale_cost#65, cs_ext_list_price#66, d_year#69] +Input [14]: [c_customer_id#55, c_first_name#56, c_last_name#57, c_preferred_cust_flag#58, c_birth_country#59, c_login#60, c_email_address#61, cs_ext_discount_amt#63, cs_ext_sales_price#64, cs_ext_wholesale_cost#65, cs_ext_list_price#66, cs_sold_date_sk#67, d_date_sk#68, d_year#69] (46) HashAggregate [codegen id : 10] -Input [12]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, cs_ext_discount_amt#68, cs_ext_sales_price#69, cs_ext_wholesale_cost#70, cs_ext_list_price#71, d_year#75] -Keys [8]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#75] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#71 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#70 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#68 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#69 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [2]: [sum#76, isEmpty#77] -Results [10]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#75, sum#78, isEmpty#79] +Input [12]: [c_customer_id#55, c_first_name#56, c_last_name#57, c_preferred_cust_flag#58, c_birth_country#59, c_login#60, c_email_address#61, cs_ext_discount_amt#63, cs_ext_sales_price#64, cs_ext_wholesale_cost#65, cs_ext_list_price#66, d_year#69] +Keys [8]: [c_customer_id#55, c_first_name#56, c_last_name#57, c_preferred_cust_flag#58, c_birth_country#59, c_login#60, c_email_address#61, d_year#69] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#66 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#65 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#63 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#64 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [2]: [sum#70, isEmpty#71] +Results [10]: [c_customer_id#55, c_first_name#56, c_last_name#57, c_preferred_cust_flag#58, c_birth_country#59, c_login#60, c_email_address#61, d_year#69, sum#72, isEmpty#73] (47) Exchange -Input [10]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#75, sum#78, isEmpty#79] -Arguments: hashpartitioning(c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#75, 5), ENSURE_REQUIREMENTS, [id=#80] +Input [10]: [c_customer_id#55, c_first_name#56, c_last_name#57, c_preferred_cust_flag#58, c_birth_country#59, c_login#60, c_email_address#61, d_year#69, sum#72, isEmpty#73] +Arguments: hashpartitioning(c_customer_id#55, c_first_name#56, c_last_name#57, c_preferred_cust_flag#58, c_birth_country#59, c_login#60, c_email_address#61, d_year#69, 5), ENSURE_REQUIREMENTS, [plan_id=7] (48) HashAggregate [codegen id : 11] -Input [10]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#75, sum#78, isEmpty#79] -Keys [8]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#75] -Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#71 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#70 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#68 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#69 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#71 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#70 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#68 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#69 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#81] -Results [2]: [c_customer_id#60 AS customer_id#82, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#71 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#70 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#68 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#69 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#81 AS year_total#83] +Input [10]: [c_customer_id#55, c_first_name#56, c_last_name#57, c_preferred_cust_flag#58, c_birth_country#59, c_login#60, c_email_address#61, d_year#69, sum#72, isEmpty#73] +Keys [8]: [c_customer_id#55, c_first_name#56, c_last_name#57, c_preferred_cust_flag#58, c_birth_country#59, c_login#60, c_email_address#61, d_year#69] +Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#66 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#65 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#63 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#64 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#66 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#65 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#63 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#64 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#74] +Results [2]: [c_customer_id#55 AS customer_id#75, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#66 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#65 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#63 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#64 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#74 AS year_total#76] (49) Filter [codegen id : 11] -Input [2]: [customer_id#82, year_total#83] -Condition : (isnotnull(year_total#83) AND (year_total#83 > 0.000000)) +Input [2]: [customer_id#75, year_total#76] +Condition : (isnotnull(year_total#76) AND (year_total#76 > 0.000000)) (50) BroadcastExchange -Input [2]: [customer_id#82, year_total#83] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#84] +Input [2]: [customer_id#75, year_total#76] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=8] (51) BroadcastHashJoin [codegen id : 24] -Left keys [1]: [customer_id#25] -Right keys [1]: [customer_id#82] +Left keys [1]: [customer_id#23] +Right keys [1]: [customer_id#75] Join condition: None (52) Project [codegen id : 24] -Output [11]: [customer_id#25, year_total#26, customer_id#50, customer_first_name#51, customer_last_name#52, customer_preferred_cust_flag#53, customer_birth_country#54, customer_login#55, customer_email_address#56, year_total#57, year_total#83] -Input [12]: [customer_id#25, year_total#26, customer_id#50, customer_first_name#51, customer_last_name#52, customer_preferred_cust_flag#53, customer_birth_country#54, customer_login#55, customer_email_address#56, year_total#57, customer_id#82, year_total#83] +Output [11]: [customer_id#23, year_total#24, customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#53, year_total#76] +Input [12]: [customer_id#23, year_total#24, customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#53, customer_id#75, year_total#76] (53) Scan parquet default.customer -Output [8]: [c_customer_sk#85, c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92] +Output [8]: [c_customer_sk#77, c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (54) ColumnarToRow [codegen id : 14] -Input [8]: [c_customer_sk#85, c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92] +Input [8]: [c_customer_sk#77, c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84] (55) Filter [codegen id : 14] -Input [8]: [c_customer_sk#85, c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92] -Condition : (isnotnull(c_customer_sk#85) AND isnotnull(c_customer_id#86)) +Input [8]: [c_customer_sk#77, c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84] +Condition : (isnotnull(c_customer_sk#77) AND isnotnull(c_customer_id#78)) (56) Scan parquet default.catalog_sales -Output [6]: [cs_bill_customer_sk#93, cs_ext_discount_amt#94, cs_ext_sales_price#95, cs_ext_wholesale_cost#96, cs_ext_list_price#97, cs_sold_date_sk#98] +Output [6]: [cs_bill_customer_sk#85, cs_ext_discount_amt#86, cs_ext_sales_price#87, cs_ext_wholesale_cost#88, cs_ext_list_price#89, cs_sold_date_sk#90] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#98), dynamicpruningexpression(cs_sold_date_sk#98 IN dynamicpruning#41)] +PartitionFilters: [isnotnull(cs_sold_date_sk#90), dynamicpruningexpression(cs_sold_date_sk#90 IN dynamicpruning#39)] PushedFilters: [IsNotNull(cs_bill_customer_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 12] -Input [6]: [cs_bill_customer_sk#93, cs_ext_discount_amt#94, cs_ext_sales_price#95, cs_ext_wholesale_cost#96, cs_ext_list_price#97, cs_sold_date_sk#98] +Input [6]: [cs_bill_customer_sk#85, cs_ext_discount_amt#86, cs_ext_sales_price#87, cs_ext_wholesale_cost#88, cs_ext_list_price#89, cs_sold_date_sk#90] (58) Filter [codegen id : 12] -Input [6]: [cs_bill_customer_sk#93, cs_ext_discount_amt#94, cs_ext_sales_price#95, cs_ext_wholesale_cost#96, cs_ext_list_price#97, cs_sold_date_sk#98] -Condition : isnotnull(cs_bill_customer_sk#93) +Input [6]: [cs_bill_customer_sk#85, cs_ext_discount_amt#86, cs_ext_sales_price#87, cs_ext_wholesale_cost#88, cs_ext_list_price#89, cs_sold_date_sk#90] +Condition : isnotnull(cs_bill_customer_sk#85) (59) BroadcastExchange -Input [6]: [cs_bill_customer_sk#93, cs_ext_discount_amt#94, cs_ext_sales_price#95, cs_ext_wholesale_cost#96, cs_ext_list_price#97, cs_sold_date_sk#98] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#99] +Input [6]: [cs_bill_customer_sk#85, cs_ext_discount_amt#86, cs_ext_sales_price#87, cs_ext_wholesale_cost#88, cs_ext_list_price#89, cs_sold_date_sk#90] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] (60) BroadcastHashJoin [codegen id : 14] -Left keys [1]: [c_customer_sk#85] -Right keys [1]: [cs_bill_customer_sk#93] +Left keys [1]: [c_customer_sk#77] +Right keys [1]: [cs_bill_customer_sk#85] Join condition: None (61) Project [codegen id : 14] -Output [12]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, cs_ext_discount_amt#94, cs_ext_sales_price#95, cs_ext_wholesale_cost#96, cs_ext_list_price#97, cs_sold_date_sk#98] -Input [14]: [c_customer_sk#85, c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, cs_bill_customer_sk#93, cs_ext_discount_amt#94, cs_ext_sales_price#95, cs_ext_wholesale_cost#96, cs_ext_list_price#97, cs_sold_date_sk#98] +Output [12]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, cs_ext_discount_amt#86, cs_ext_sales_price#87, cs_ext_wholesale_cost#88, cs_ext_list_price#89, cs_sold_date_sk#90] +Input [14]: [c_customer_sk#77, c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, cs_bill_customer_sk#85, cs_ext_discount_amt#86, cs_ext_sales_price#87, cs_ext_wholesale_cost#88, cs_ext_list_price#89, cs_sold_date_sk#90] (62) ReusedExchange [Reuses operator id: 116] -Output [2]: [d_date_sk#100, d_year#101] +Output [2]: [d_date_sk#91, d_year#92] (63) BroadcastHashJoin [codegen id : 14] -Left keys [1]: [cs_sold_date_sk#98] -Right keys [1]: [d_date_sk#100] +Left keys [1]: [cs_sold_date_sk#90] +Right keys [1]: [d_date_sk#91] Join condition: None (64) Project [codegen id : 14] -Output [12]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, cs_ext_discount_amt#94, cs_ext_sales_price#95, cs_ext_wholesale_cost#96, cs_ext_list_price#97, d_year#101] -Input [14]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, cs_ext_discount_amt#94, cs_ext_sales_price#95, cs_ext_wholesale_cost#96, cs_ext_list_price#97, cs_sold_date_sk#98, d_date_sk#100, d_year#101] +Output [12]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, cs_ext_discount_amt#86, cs_ext_sales_price#87, cs_ext_wholesale_cost#88, cs_ext_list_price#89, d_year#92] +Input [14]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, cs_ext_discount_amt#86, cs_ext_sales_price#87, cs_ext_wholesale_cost#88, cs_ext_list_price#89, cs_sold_date_sk#90, d_date_sk#91, d_year#92] (65) HashAggregate [codegen id : 14] -Input [12]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, cs_ext_discount_amt#94, cs_ext_sales_price#95, cs_ext_wholesale_cost#96, cs_ext_list_price#97, d_year#101] -Keys [8]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, d_year#101] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#97 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#96 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#94 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#95 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [2]: [sum#102, isEmpty#103] -Results [10]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, d_year#101, sum#104, isEmpty#105] +Input [12]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, cs_ext_discount_amt#86, cs_ext_sales_price#87, cs_ext_wholesale_cost#88, cs_ext_list_price#89, d_year#92] +Keys [8]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, d_year#92] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#89 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#88 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#86 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#87 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [2]: [sum#93, isEmpty#94] +Results [10]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, d_year#92, sum#95, isEmpty#96] (66) Exchange -Input [10]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, d_year#101, sum#104, isEmpty#105] -Arguments: hashpartitioning(c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, d_year#101, 5), ENSURE_REQUIREMENTS, [id=#106] +Input [10]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, d_year#92, sum#95, isEmpty#96] +Arguments: hashpartitioning(c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, d_year#92, 5), ENSURE_REQUIREMENTS, [plan_id=10] (67) HashAggregate [codegen id : 15] -Input [10]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, d_year#101, sum#104, isEmpty#105] -Keys [8]: [c_customer_id#86, c_first_name#87, c_last_name#88, c_preferred_cust_flag#89, c_birth_country#90, c_login#91, c_email_address#92, d_year#101] -Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#97 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#96 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#94 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#95 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#97 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#96 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#94 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#95 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#81] -Results [2]: [c_customer_id#86 AS customer_id#107, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#97 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#96 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#94 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#95 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#81 AS year_total#108] +Input [10]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, d_year#92, sum#95, isEmpty#96] +Keys [8]: [c_customer_id#78, c_first_name#79, c_last_name#80, c_preferred_cust_flag#81, c_birth_country#82, c_login#83, c_email_address#84, d_year#92] +Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#89 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#88 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#86 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#87 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#89 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#88 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#86 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#87 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#74] +Results [2]: [c_customer_id#78 AS customer_id#97, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cs_ext_list_price#89 as decimal(8,2))) - promote_precision(cast(cs_ext_wholesale_cost#88 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(cs_ext_discount_amt#86 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(cs_ext_sales_price#87 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#74 AS year_total#98] (68) BroadcastExchange -Input [2]: [customer_id#107, year_total#108] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#109] +Input [2]: [customer_id#97, year_total#98] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=11] (69) BroadcastHashJoin [codegen id : 24] -Left keys [1]: [customer_id#25] -Right keys [1]: [customer_id#107] -Join condition: (CASE WHEN (year_total#83 > 0.000000) THEN CheckOverflow((promote_precision(year_total#108) / promote_precision(year_total#83)), DecimalType(38,14)) END > CASE WHEN (year_total#26 > 0.000000) THEN CheckOverflow((promote_precision(year_total#57) / promote_precision(year_total#26)), DecimalType(38,14)) END) +Left keys [1]: [customer_id#23] +Right keys [1]: [customer_id#97] +Join condition: (CASE WHEN (year_total#76 > 0.000000) THEN CheckOverflow((promote_precision(year_total#98) / promote_precision(year_total#76)), DecimalType(38,14)) END > CASE WHEN (year_total#24 > 0.000000) THEN CheckOverflow((promote_precision(year_total#53) / promote_precision(year_total#24)), DecimalType(38,14)) END) (70) Project [codegen id : 24] -Output [10]: [customer_id#25, customer_id#50, customer_first_name#51, customer_last_name#52, customer_preferred_cust_flag#53, customer_birth_country#54, customer_login#55, customer_email_address#56, year_total#83, year_total#108] -Input [13]: [customer_id#25, year_total#26, customer_id#50, customer_first_name#51, customer_last_name#52, customer_preferred_cust_flag#53, customer_birth_country#54, customer_login#55, customer_email_address#56, year_total#57, year_total#83, customer_id#107, year_total#108] +Output [10]: [customer_id#23, customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#76, year_total#98] +Input [13]: [customer_id#23, year_total#24, customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#53, year_total#76, customer_id#97, year_total#98] (71) Scan parquet default.customer -Output [8]: [c_customer_sk#110, c_customer_id#111, c_first_name#112, c_last_name#113, c_preferred_cust_flag#114, c_birth_country#115, c_login#116, c_email_address#117] +Output [8]: [c_customer_sk#99, c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (72) ColumnarToRow [codegen id : 18] -Input [8]: [c_customer_sk#110, c_customer_id#111, c_first_name#112, c_last_name#113, c_preferred_cust_flag#114, c_birth_country#115, c_login#116, c_email_address#117] +Input [8]: [c_customer_sk#99, c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106] (73) Filter [codegen id : 18] -Input [8]: [c_customer_sk#110, c_customer_id#111, c_first_name#112, c_last_name#113, c_preferred_cust_flag#114, c_birth_country#115, c_login#116, c_email_address#117] -Condition : (isnotnull(c_customer_sk#110) AND isnotnull(c_customer_id#111)) +Input [8]: [c_customer_sk#99, c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106] +Condition : (isnotnull(c_customer_sk#99) AND isnotnull(c_customer_id#100)) (74) Scan parquet default.web_sales -Output [6]: [ws_bill_customer_sk#118, ws_ext_discount_amt#119, ws_ext_sales_price#120, ws_ext_wholesale_cost#121, ws_ext_list_price#122, ws_sold_date_sk#123] +Output [6]: [ws_bill_customer_sk#107, ws_ext_discount_amt#108, ws_ext_sales_price#109, ws_ext_wholesale_cost#110, ws_ext_list_price#111, ws_sold_date_sk#112] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#123), dynamicpruningexpression(ws_sold_date_sk#123 IN dynamicpruning#15)] +PartitionFilters: [isnotnull(ws_sold_date_sk#112), dynamicpruningexpression(ws_sold_date_sk#112 IN dynamicpruning#15)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (75) ColumnarToRow [codegen id : 16] -Input [6]: [ws_bill_customer_sk#118, ws_ext_discount_amt#119, ws_ext_sales_price#120, ws_ext_wholesale_cost#121, ws_ext_list_price#122, ws_sold_date_sk#123] +Input [6]: [ws_bill_customer_sk#107, ws_ext_discount_amt#108, ws_ext_sales_price#109, ws_ext_wholesale_cost#110, ws_ext_list_price#111, ws_sold_date_sk#112] (76) Filter [codegen id : 16] -Input [6]: [ws_bill_customer_sk#118, ws_ext_discount_amt#119, ws_ext_sales_price#120, ws_ext_wholesale_cost#121, ws_ext_list_price#122, ws_sold_date_sk#123] -Condition : isnotnull(ws_bill_customer_sk#118) +Input [6]: [ws_bill_customer_sk#107, ws_ext_discount_amt#108, ws_ext_sales_price#109, ws_ext_wholesale_cost#110, ws_ext_list_price#111, ws_sold_date_sk#112] +Condition : isnotnull(ws_bill_customer_sk#107) (77) BroadcastExchange -Input [6]: [ws_bill_customer_sk#118, ws_ext_discount_amt#119, ws_ext_sales_price#120, ws_ext_wholesale_cost#121, ws_ext_list_price#122, ws_sold_date_sk#123] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#124] +Input [6]: [ws_bill_customer_sk#107, ws_ext_discount_amt#108, ws_ext_sales_price#109, ws_ext_wholesale_cost#110, ws_ext_list_price#111, ws_sold_date_sk#112] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=12] (78) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [c_customer_sk#110] -Right keys [1]: [ws_bill_customer_sk#118] +Left keys [1]: [c_customer_sk#99] +Right keys [1]: [ws_bill_customer_sk#107] Join condition: None (79) Project [codegen id : 18] -Output [12]: [c_customer_id#111, c_first_name#112, c_last_name#113, c_preferred_cust_flag#114, c_birth_country#115, c_login#116, c_email_address#117, ws_ext_discount_amt#119, ws_ext_sales_price#120, ws_ext_wholesale_cost#121, ws_ext_list_price#122, ws_sold_date_sk#123] -Input [14]: [c_customer_sk#110, c_customer_id#111, c_first_name#112, c_last_name#113, c_preferred_cust_flag#114, c_birth_country#115, c_login#116, c_email_address#117, ws_bill_customer_sk#118, ws_ext_discount_amt#119, ws_ext_sales_price#120, ws_ext_wholesale_cost#121, ws_ext_list_price#122, ws_sold_date_sk#123] +Output [12]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, ws_ext_discount_amt#108, ws_ext_sales_price#109, ws_ext_wholesale_cost#110, ws_ext_list_price#111, ws_sold_date_sk#112] +Input [14]: [c_customer_sk#99, c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, ws_bill_customer_sk#107, ws_ext_discount_amt#108, ws_ext_sales_price#109, ws_ext_wholesale_cost#110, ws_ext_list_price#111, ws_sold_date_sk#112] (80) ReusedExchange [Reuses operator id: 112] -Output [2]: [d_date_sk#125, d_year#126] +Output [2]: [d_date_sk#113, d_year#114] (81) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [ws_sold_date_sk#123] -Right keys [1]: [d_date_sk#125] +Left keys [1]: [ws_sold_date_sk#112] +Right keys [1]: [d_date_sk#113] Join condition: None (82) Project [codegen id : 18] -Output [12]: [c_customer_id#111, c_first_name#112, c_last_name#113, c_preferred_cust_flag#114, c_birth_country#115, c_login#116, c_email_address#117, ws_ext_discount_amt#119, ws_ext_sales_price#120, ws_ext_wholesale_cost#121, ws_ext_list_price#122, d_year#126] -Input [14]: [c_customer_id#111, c_first_name#112, c_last_name#113, c_preferred_cust_flag#114, c_birth_country#115, c_login#116, c_email_address#117, ws_ext_discount_amt#119, ws_ext_sales_price#120, ws_ext_wholesale_cost#121, ws_ext_list_price#122, ws_sold_date_sk#123, d_date_sk#125, d_year#126] +Output [12]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, ws_ext_discount_amt#108, ws_ext_sales_price#109, ws_ext_wholesale_cost#110, ws_ext_list_price#111, d_year#114] +Input [14]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, ws_ext_discount_amt#108, ws_ext_sales_price#109, ws_ext_wholesale_cost#110, ws_ext_list_price#111, ws_sold_date_sk#112, d_date_sk#113, d_year#114] (83) HashAggregate [codegen id : 18] -Input [12]: [c_customer_id#111, c_first_name#112, c_last_name#113, c_preferred_cust_flag#114, c_birth_country#115, c_login#116, c_email_address#117, ws_ext_discount_amt#119, ws_ext_sales_price#120, ws_ext_wholesale_cost#121, ws_ext_list_price#122, d_year#126] -Keys [8]: [c_customer_id#111, c_first_name#112, c_last_name#113, c_preferred_cust_flag#114, c_birth_country#115, c_login#116, c_email_address#117, d_year#126] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#122 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#121 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#119 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#120 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [2]: [sum#127, isEmpty#128] -Results [10]: [c_customer_id#111, c_first_name#112, c_last_name#113, c_preferred_cust_flag#114, c_birth_country#115, c_login#116, c_email_address#117, d_year#126, sum#129, isEmpty#130] +Input [12]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, ws_ext_discount_amt#108, ws_ext_sales_price#109, ws_ext_wholesale_cost#110, ws_ext_list_price#111, d_year#114] +Keys [8]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#114] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#111 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#110 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#108 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#109 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [2]: [sum#115, isEmpty#116] +Results [10]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#114, sum#117, isEmpty#118] (84) Exchange -Input [10]: [c_customer_id#111, c_first_name#112, c_last_name#113, c_preferred_cust_flag#114, c_birth_country#115, c_login#116, c_email_address#117, d_year#126, sum#129, isEmpty#130] -Arguments: hashpartitioning(c_customer_id#111, c_first_name#112, c_last_name#113, c_preferred_cust_flag#114, c_birth_country#115, c_login#116, c_email_address#117, d_year#126, 5), ENSURE_REQUIREMENTS, [id=#131] +Input [10]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#114, sum#117, isEmpty#118] +Arguments: hashpartitioning(c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#114, 5), ENSURE_REQUIREMENTS, [plan_id=13] (85) HashAggregate [codegen id : 19] -Input [10]: [c_customer_id#111, c_first_name#112, c_last_name#113, c_preferred_cust_flag#114, c_birth_country#115, c_login#116, c_email_address#117, d_year#126, sum#129, isEmpty#130] -Keys [8]: [c_customer_id#111, c_first_name#112, c_last_name#113, c_preferred_cust_flag#114, c_birth_country#115, c_login#116, c_email_address#117, d_year#126] -Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#122 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#121 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#119 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#120 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#122 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#121 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#119 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#120 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#132] -Results [2]: [c_customer_id#111 AS customer_id#133, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#122 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#121 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#119 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#120 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#132 AS year_total#134] +Input [10]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#114, sum#117, isEmpty#118] +Keys [8]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#114] +Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#111 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#110 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#108 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#109 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#111 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#110 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#108 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#109 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#119] +Results [2]: [c_customer_id#100 AS customer_id#120, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#111 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#110 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#108 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#109 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#119 AS year_total#121] (86) Filter [codegen id : 19] -Input [2]: [customer_id#133, year_total#134] -Condition : (isnotnull(year_total#134) AND (year_total#134 > 0.000000)) +Input [2]: [customer_id#120, year_total#121] +Condition : (isnotnull(year_total#121) AND (year_total#121 > 0.000000)) (87) BroadcastExchange -Input [2]: [customer_id#133, year_total#134] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#135] +Input [2]: [customer_id#120, year_total#121] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=14] (88) BroadcastHashJoin [codegen id : 24] -Left keys [1]: [customer_id#25] -Right keys [1]: [customer_id#133] +Left keys [1]: [customer_id#23] +Right keys [1]: [customer_id#120] Join condition: None (89) Project [codegen id : 24] -Output [11]: [customer_id#25, customer_id#50, customer_first_name#51, customer_last_name#52, customer_preferred_cust_flag#53, customer_birth_country#54, customer_login#55, customer_email_address#56, year_total#83, year_total#108, year_total#134] -Input [12]: [customer_id#25, customer_id#50, customer_first_name#51, customer_last_name#52, customer_preferred_cust_flag#53, customer_birth_country#54, customer_login#55, customer_email_address#56, year_total#83, year_total#108, customer_id#133, year_total#134] +Output [11]: [customer_id#23, customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#76, year_total#98, year_total#121] +Input [12]: [customer_id#23, customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#76, year_total#98, customer_id#120, year_total#121] (90) Scan parquet default.customer -Output [8]: [c_customer_sk#136, c_customer_id#137, c_first_name#138, c_last_name#139, c_preferred_cust_flag#140, c_birth_country#141, c_login#142, c_email_address#143] +Output [8]: [c_customer_sk#122, c_customer_id#123, c_first_name#124, c_last_name#125, c_preferred_cust_flag#126, c_birth_country#127, c_login#128, c_email_address#129] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (91) ColumnarToRow [codegen id : 22] -Input [8]: [c_customer_sk#136, c_customer_id#137, c_first_name#138, c_last_name#139, c_preferred_cust_flag#140, c_birth_country#141, c_login#142, c_email_address#143] +Input [8]: [c_customer_sk#122, c_customer_id#123, c_first_name#124, c_last_name#125, c_preferred_cust_flag#126, c_birth_country#127, c_login#128, c_email_address#129] (92) Filter [codegen id : 22] -Input [8]: [c_customer_sk#136, c_customer_id#137, c_first_name#138, c_last_name#139, c_preferred_cust_flag#140, c_birth_country#141, c_login#142, c_email_address#143] -Condition : (isnotnull(c_customer_sk#136) AND isnotnull(c_customer_id#137)) +Input [8]: [c_customer_sk#122, c_customer_id#123, c_first_name#124, c_last_name#125, c_preferred_cust_flag#126, c_birth_country#127, c_login#128, c_email_address#129] +Condition : (isnotnull(c_customer_sk#122) AND isnotnull(c_customer_id#123)) (93) Scan parquet default.web_sales -Output [6]: [ws_bill_customer_sk#144, ws_ext_discount_amt#145, ws_ext_sales_price#146, ws_ext_wholesale_cost#147, ws_ext_list_price#148, ws_sold_date_sk#149] +Output [6]: [ws_bill_customer_sk#130, ws_ext_discount_amt#131, ws_ext_sales_price#132, ws_ext_wholesale_cost#133, ws_ext_list_price#134, ws_sold_date_sk#135] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#149), dynamicpruningexpression(ws_sold_date_sk#149 IN dynamicpruning#41)] +PartitionFilters: [isnotnull(ws_sold_date_sk#135), dynamicpruningexpression(ws_sold_date_sk#135 IN dynamicpruning#39)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (94) ColumnarToRow [codegen id : 20] -Input [6]: [ws_bill_customer_sk#144, ws_ext_discount_amt#145, ws_ext_sales_price#146, ws_ext_wholesale_cost#147, ws_ext_list_price#148, ws_sold_date_sk#149] +Input [6]: [ws_bill_customer_sk#130, ws_ext_discount_amt#131, ws_ext_sales_price#132, ws_ext_wholesale_cost#133, ws_ext_list_price#134, ws_sold_date_sk#135] (95) Filter [codegen id : 20] -Input [6]: [ws_bill_customer_sk#144, ws_ext_discount_amt#145, ws_ext_sales_price#146, ws_ext_wholesale_cost#147, ws_ext_list_price#148, ws_sold_date_sk#149] -Condition : isnotnull(ws_bill_customer_sk#144) +Input [6]: [ws_bill_customer_sk#130, ws_ext_discount_amt#131, ws_ext_sales_price#132, ws_ext_wholesale_cost#133, ws_ext_list_price#134, ws_sold_date_sk#135] +Condition : isnotnull(ws_bill_customer_sk#130) (96) BroadcastExchange -Input [6]: [ws_bill_customer_sk#144, ws_ext_discount_amt#145, ws_ext_sales_price#146, ws_ext_wholesale_cost#147, ws_ext_list_price#148, ws_sold_date_sk#149] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#150] +Input [6]: [ws_bill_customer_sk#130, ws_ext_discount_amt#131, ws_ext_sales_price#132, ws_ext_wholesale_cost#133, ws_ext_list_price#134, ws_sold_date_sk#135] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15] (97) BroadcastHashJoin [codegen id : 22] -Left keys [1]: [c_customer_sk#136] -Right keys [1]: [ws_bill_customer_sk#144] +Left keys [1]: [c_customer_sk#122] +Right keys [1]: [ws_bill_customer_sk#130] Join condition: None (98) Project [codegen id : 22] -Output [12]: [c_customer_id#137, c_first_name#138, c_last_name#139, c_preferred_cust_flag#140, c_birth_country#141, c_login#142, c_email_address#143, ws_ext_discount_amt#145, ws_ext_sales_price#146, ws_ext_wholesale_cost#147, ws_ext_list_price#148, ws_sold_date_sk#149] -Input [14]: [c_customer_sk#136, c_customer_id#137, c_first_name#138, c_last_name#139, c_preferred_cust_flag#140, c_birth_country#141, c_login#142, c_email_address#143, ws_bill_customer_sk#144, ws_ext_discount_amt#145, ws_ext_sales_price#146, ws_ext_wholesale_cost#147, ws_ext_list_price#148, ws_sold_date_sk#149] +Output [12]: [c_customer_id#123, c_first_name#124, c_last_name#125, c_preferred_cust_flag#126, c_birth_country#127, c_login#128, c_email_address#129, ws_ext_discount_amt#131, ws_ext_sales_price#132, ws_ext_wholesale_cost#133, ws_ext_list_price#134, ws_sold_date_sk#135] +Input [14]: [c_customer_sk#122, c_customer_id#123, c_first_name#124, c_last_name#125, c_preferred_cust_flag#126, c_birth_country#127, c_login#128, c_email_address#129, ws_bill_customer_sk#130, ws_ext_discount_amt#131, ws_ext_sales_price#132, ws_ext_wholesale_cost#133, ws_ext_list_price#134, ws_sold_date_sk#135] (99) ReusedExchange [Reuses operator id: 116] -Output [2]: [d_date_sk#151, d_year#152] +Output [2]: [d_date_sk#136, d_year#137] (100) BroadcastHashJoin [codegen id : 22] -Left keys [1]: [ws_sold_date_sk#149] -Right keys [1]: [d_date_sk#151] +Left keys [1]: [ws_sold_date_sk#135] +Right keys [1]: [d_date_sk#136] Join condition: None (101) Project [codegen id : 22] -Output [12]: [c_customer_id#137, c_first_name#138, c_last_name#139, c_preferred_cust_flag#140, c_birth_country#141, c_login#142, c_email_address#143, ws_ext_discount_amt#145, ws_ext_sales_price#146, ws_ext_wholesale_cost#147, ws_ext_list_price#148, d_year#152] -Input [14]: [c_customer_id#137, c_first_name#138, c_last_name#139, c_preferred_cust_flag#140, c_birth_country#141, c_login#142, c_email_address#143, ws_ext_discount_amt#145, ws_ext_sales_price#146, ws_ext_wholesale_cost#147, ws_ext_list_price#148, ws_sold_date_sk#149, d_date_sk#151, d_year#152] +Output [12]: [c_customer_id#123, c_first_name#124, c_last_name#125, c_preferred_cust_flag#126, c_birth_country#127, c_login#128, c_email_address#129, ws_ext_discount_amt#131, ws_ext_sales_price#132, ws_ext_wholesale_cost#133, ws_ext_list_price#134, d_year#137] +Input [14]: [c_customer_id#123, c_first_name#124, c_last_name#125, c_preferred_cust_flag#126, c_birth_country#127, c_login#128, c_email_address#129, ws_ext_discount_amt#131, ws_ext_sales_price#132, ws_ext_wholesale_cost#133, ws_ext_list_price#134, ws_sold_date_sk#135, d_date_sk#136, d_year#137] (102) HashAggregate [codegen id : 22] -Input [12]: [c_customer_id#137, c_first_name#138, c_last_name#139, c_preferred_cust_flag#140, c_birth_country#141, c_login#142, c_email_address#143, ws_ext_discount_amt#145, ws_ext_sales_price#146, ws_ext_wholesale_cost#147, ws_ext_list_price#148, d_year#152] -Keys [8]: [c_customer_id#137, c_first_name#138, c_last_name#139, c_preferred_cust_flag#140, c_birth_country#141, c_login#142, c_email_address#143, d_year#152] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#148 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#147 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#145 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#146 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [2]: [sum#153, isEmpty#154] -Results [10]: [c_customer_id#137, c_first_name#138, c_last_name#139, c_preferred_cust_flag#140, c_birth_country#141, c_login#142, c_email_address#143, d_year#152, sum#155, isEmpty#156] +Input [12]: [c_customer_id#123, c_first_name#124, c_last_name#125, c_preferred_cust_flag#126, c_birth_country#127, c_login#128, c_email_address#129, ws_ext_discount_amt#131, ws_ext_sales_price#132, ws_ext_wholesale_cost#133, ws_ext_list_price#134, d_year#137] +Keys [8]: [c_customer_id#123, c_first_name#124, c_last_name#125, c_preferred_cust_flag#126, c_birth_country#127, c_login#128, c_email_address#129, d_year#137] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#134 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#133 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#131 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#132 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [2]: [sum#138, isEmpty#139] +Results [10]: [c_customer_id#123, c_first_name#124, c_last_name#125, c_preferred_cust_flag#126, c_birth_country#127, c_login#128, c_email_address#129, d_year#137, sum#140, isEmpty#141] (103) Exchange -Input [10]: [c_customer_id#137, c_first_name#138, c_last_name#139, c_preferred_cust_flag#140, c_birth_country#141, c_login#142, c_email_address#143, d_year#152, sum#155, isEmpty#156] -Arguments: hashpartitioning(c_customer_id#137, c_first_name#138, c_last_name#139, c_preferred_cust_flag#140, c_birth_country#141, c_login#142, c_email_address#143, d_year#152, 5), ENSURE_REQUIREMENTS, [id=#157] +Input [10]: [c_customer_id#123, c_first_name#124, c_last_name#125, c_preferred_cust_flag#126, c_birth_country#127, c_login#128, c_email_address#129, d_year#137, sum#140, isEmpty#141] +Arguments: hashpartitioning(c_customer_id#123, c_first_name#124, c_last_name#125, c_preferred_cust_flag#126, c_birth_country#127, c_login#128, c_email_address#129, d_year#137, 5), ENSURE_REQUIREMENTS, [plan_id=16] (104) HashAggregate [codegen id : 23] -Input [10]: [c_customer_id#137, c_first_name#138, c_last_name#139, c_preferred_cust_flag#140, c_birth_country#141, c_login#142, c_email_address#143, d_year#152, sum#155, isEmpty#156] -Keys [8]: [c_customer_id#137, c_first_name#138, c_last_name#139, c_preferred_cust_flag#140, c_birth_country#141, c_login#142, c_email_address#143, d_year#152] -Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#148 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#147 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#145 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#146 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#148 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#147 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#145 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#146 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#132] -Results [2]: [c_customer_id#137 AS customer_id#158, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#148 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#147 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#145 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#146 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#132 AS year_total#159] +Input [10]: [c_customer_id#123, c_first_name#124, c_last_name#125, c_preferred_cust_flag#126, c_birth_country#127, c_login#128, c_email_address#129, d_year#137, sum#140, isEmpty#141] +Keys [8]: [c_customer_id#123, c_first_name#124, c_last_name#125, c_preferred_cust_flag#126, c_birth_country#127, c_login#128, c_email_address#129, d_year#137] +Functions [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#134 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#133 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#131 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#132 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#134 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#133 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#131 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#132 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#119] +Results [2]: [c_customer_id#123 AS customer_id#142, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ws_ext_list_price#134 as decimal(8,2))) - promote_precision(cast(ws_ext_wholesale_cost#133 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) - promote_precision(cast(ws_ext_discount_amt#131 as decimal(9,2)))), DecimalType(9,2)) as decimal(10,2))) + promote_precision(cast(ws_ext_sales_price#132 as decimal(10,2)))), DecimalType(10,2))) / 2.00), DecimalType(14,6)))#119 AS year_total#143] (105) BroadcastExchange -Input [2]: [customer_id#158, year_total#159] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#160] +Input [2]: [customer_id#142, year_total#143] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=17] (106) BroadcastHashJoin [codegen id : 24] -Left keys [1]: [customer_id#25] -Right keys [1]: [customer_id#158] -Join condition: (CASE WHEN (year_total#83 > 0.000000) THEN CheckOverflow((promote_precision(year_total#108) / promote_precision(year_total#83)), DecimalType(38,14)) END > CASE WHEN (year_total#134 > 0.000000) THEN CheckOverflow((promote_precision(year_total#159) / promote_precision(year_total#134)), DecimalType(38,14)) END) +Left keys [1]: [customer_id#23] +Right keys [1]: [customer_id#142] +Join condition: (CASE WHEN (year_total#76 > 0.000000) THEN CheckOverflow((promote_precision(year_total#98) / promote_precision(year_total#76)), DecimalType(38,14)) END > CASE WHEN (year_total#121 > 0.000000) THEN CheckOverflow((promote_precision(year_total#143) / promote_precision(year_total#121)), DecimalType(38,14)) END) (107) Project [codegen id : 24] -Output [7]: [customer_id#50, customer_first_name#51, customer_last_name#52, customer_preferred_cust_flag#53, customer_birth_country#54, customer_login#55, customer_email_address#56] -Input [13]: [customer_id#25, customer_id#50, customer_first_name#51, customer_last_name#52, customer_preferred_cust_flag#53, customer_birth_country#54, customer_login#55, customer_email_address#56, year_total#83, year_total#108, year_total#134, customer_id#158, year_total#159] +Output [7]: [customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52] +Input [13]: [customer_id#23, customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52, year_total#76, year_total#98, year_total#121, customer_id#142, year_total#143] (108) TakeOrderedAndProject -Input [7]: [customer_id#50, customer_first_name#51, customer_last_name#52, customer_preferred_cust_flag#53, customer_birth_country#54, customer_login#55, customer_email_address#56] -Arguments: 100, [customer_id#50 ASC NULLS FIRST, customer_first_name#51 ASC NULLS FIRST, customer_last_name#52 ASC NULLS FIRST, customer_preferred_cust_flag#53 ASC NULLS FIRST, customer_birth_country#54 ASC NULLS FIRST, customer_login#55 ASC NULLS FIRST, customer_email_address#56 ASC NULLS FIRST], [customer_id#50, customer_first_name#51, customer_last_name#52, customer_preferred_cust_flag#53, customer_birth_country#54, customer_login#55, customer_email_address#56] +Input [7]: [customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52] +Arguments: 100, [customer_id#46 ASC NULLS FIRST, customer_first_name#47 ASC NULLS FIRST, customer_last_name#48 ASC NULLS FIRST, customer_preferred_cust_flag#49 ASC NULLS FIRST, customer_birth_country#50 ASC NULLS FIRST, customer_login#51 ASC NULLS FIRST, customer_email_address#52 ASC NULLS FIRST], [customer_id#46, customer_first_name#47, customer_last_name#48, customer_preferred_cust_flag#49, customer_birth_country#50, customer_login#51, customer_email_address#52] ===== Subqueries ===== @@ -628,24 +628,24 @@ BroadcastExchange (112) (109) Scan parquet default.date_dim -Output [2]: [d_date_sk#17, d_year#18] +Output [2]: [d_date_sk#16, d_year#17] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (110) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#17, d_year#18] +Input [2]: [d_date_sk#16, d_year#17] (111) Filter [codegen id : 1] -Input [2]: [d_date_sk#17, d_year#18] -Condition : ((isnotnull(d_year#18) AND (d_year#18 = 2001)) AND isnotnull(d_date_sk#17)) +Input [2]: [d_date_sk#16, d_year#17] +Condition : ((isnotnull(d_year#17) AND (d_year#17 = 2001)) AND isnotnull(d_date_sk#16)) (112) BroadcastExchange -Input [2]: [d_date_sk#17, d_year#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#161] +Input [2]: [d_date_sk#16, d_year#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=18] -Subquery:2 Hosting operator id = 20 Hosting Expression = ss_sold_date_sk#40 IN dynamicpruning#41 +Subquery:2 Hosting operator id = 20 Hosting Expression = ss_sold_date_sk#38 IN dynamicpruning#39 BroadcastExchange (116) +- * Filter (115) +- * ColumnarToRow (114) @@ -653,29 +653,29 @@ BroadcastExchange (116) (113) Scan parquet default.date_dim -Output [2]: [d_date_sk#43, d_year#44] +Output [2]: [d_date_sk#40, d_year#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)] ReadSchema: struct (114) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#43, d_year#44] +Input [2]: [d_date_sk#40, d_year#41] (115) Filter [codegen id : 1] -Input [2]: [d_date_sk#43, d_year#44] -Condition : ((isnotnull(d_year#44) AND (d_year#44 = 2002)) AND isnotnull(d_date_sk#43)) +Input [2]: [d_date_sk#40, d_year#41] +Condition : ((isnotnull(d_year#41) AND (d_year#41 = 2002)) AND isnotnull(d_date_sk#40)) (116) BroadcastExchange -Input [2]: [d_date_sk#43, d_year#44] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#162] +Input [2]: [d_date_sk#40, d_year#41] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=19] -Subquery:3 Hosting operator id = 37 Hosting Expression = cs_sold_date_sk#72 IN dynamicpruning#15 +Subquery:3 Hosting operator id = 37 Hosting Expression = cs_sold_date_sk#67 IN dynamicpruning#15 -Subquery:4 Hosting operator id = 56 Hosting Expression = cs_sold_date_sk#98 IN dynamicpruning#41 +Subquery:4 Hosting operator id = 56 Hosting Expression = cs_sold_date_sk#90 IN dynamicpruning#39 -Subquery:5 Hosting operator id = 74 Hosting Expression = ws_sold_date_sk#123 IN dynamicpruning#15 +Subquery:5 Hosting operator id = 74 Hosting Expression = ws_sold_date_sk#112 IN dynamicpruning#15 -Subquery:6 Hosting operator id = 93 Hosting Expression = ws_sold_date_sk#149 IN dynamicpruning#41 +Subquery:6 Hosting operator id = 93 Hosting Expression = ws_sold_date_sk#135 IN dynamicpruning#39 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q40.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q40.sf100/explain.txt index def71e7a0e76a..2f648b3ac9152 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q40.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q40.sf100/explain.txt @@ -51,138 +51,138 @@ Condition : ((isnotnull(cs_warehouse_sk#1) AND isnotnull(cs_item_sk#2)) AND migh (4) Exchange Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] -Arguments: hashpartitioning(cs_order_number#3, cs_item_sk#2, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(cs_order_number#3, cs_item_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] Arguments: [cs_order_number#3 ASC NULLS FIRST, cs_item_sk#2 ASC NULLS FIRST], false, 0 (6) Scan parquet default.catalog_returns -Output [4]: [cr_item_sk#10, cr_order_number#11, cr_refunded_cash#12, cr_returned_date_sk#13] +Output [4]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11, cr_returned_date_sk#12] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_order_number), IsNotNull(cr_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [4]: [cr_item_sk#10, cr_order_number#11, cr_refunded_cash#12, cr_returned_date_sk#13] +Input [4]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11, cr_returned_date_sk#12] (8) Filter [codegen id : 3] -Input [4]: [cr_item_sk#10, cr_order_number#11, cr_refunded_cash#12, cr_returned_date_sk#13] -Condition : (isnotnull(cr_order_number#11) AND isnotnull(cr_item_sk#10)) +Input [4]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11, cr_returned_date_sk#12] +Condition : (isnotnull(cr_order_number#10) AND isnotnull(cr_item_sk#9)) (9) Project [codegen id : 3] -Output [3]: [cr_item_sk#10, cr_order_number#11, cr_refunded_cash#12] -Input [4]: [cr_item_sk#10, cr_order_number#11, cr_refunded_cash#12, cr_returned_date_sk#13] +Output [3]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] +Input [4]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11, cr_returned_date_sk#12] (10) Exchange -Input [3]: [cr_item_sk#10, cr_order_number#11, cr_refunded_cash#12] -Arguments: hashpartitioning(cr_order_number#11, cr_item_sk#10, 5), ENSURE_REQUIREMENTS, [id=#14] +Input [3]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] +Arguments: hashpartitioning(cr_order_number#10, cr_item_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [3]: [cr_item_sk#10, cr_order_number#11, cr_refunded_cash#12] -Arguments: [cr_order_number#11 ASC NULLS FIRST, cr_item_sk#10 ASC NULLS FIRST], false, 0 +Input [3]: [cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] +Arguments: [cr_order_number#10 ASC NULLS FIRST, cr_item_sk#9 ASC NULLS FIRST], false, 0 (12) SortMergeJoin [codegen id : 8] Left keys [2]: [cs_order_number#3, cs_item_sk#2] -Right keys [2]: [cr_order_number#11, cr_item_sk#10] +Right keys [2]: [cr_order_number#10, cr_item_sk#9] Join condition: None (13) Project [codegen id : 8] -Output [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#12] -Input [8]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5, cr_item_sk#10, cr_order_number#11, cr_refunded_cash#12] +Output [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#11] +Input [8]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5, cr_item_sk#9, cr_order_number#10, cr_refunded_cash#11] (14) Scan parquet default.item -Output [3]: [i_item_sk#15, i_item_id#16, i_current_price#17] +Output [3]: [i_item_sk#13, i_item_id#14, i_current_price#15] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThanOrEqual(i_current_price,0.99), LessThanOrEqual(i_current_price,1.49), IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 5] -Input [3]: [i_item_sk#15, i_item_id#16, i_current_price#17] +Input [3]: [i_item_sk#13, i_item_id#14, i_current_price#15] (16) Filter [codegen id : 5] -Input [3]: [i_item_sk#15, i_item_id#16, i_current_price#17] -Condition : (((isnotnull(i_current_price#17) AND (i_current_price#17 >= 0.99)) AND (i_current_price#17 <= 1.49)) AND isnotnull(i_item_sk#15)) +Input [3]: [i_item_sk#13, i_item_id#14, i_current_price#15] +Condition : (((isnotnull(i_current_price#15) AND (i_current_price#15 >= 0.99)) AND (i_current_price#15 <= 1.49)) AND isnotnull(i_item_sk#13)) (17) Project [codegen id : 5] -Output [2]: [i_item_sk#15, i_item_id#16] -Input [3]: [i_item_sk#15, i_item_id#16, i_current_price#17] +Output [2]: [i_item_sk#13, i_item_id#14] +Input [3]: [i_item_sk#13, i_item_id#14, i_current_price#15] (18) BroadcastExchange -Input [2]: [i_item_sk#15, i_item_id#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [2]: [i_item_sk#13, i_item_id#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (19) BroadcastHashJoin [codegen id : 8] Left keys [1]: [cs_item_sk#2] -Right keys [1]: [i_item_sk#15] +Right keys [1]: [i_item_sk#13] Join condition: None (20) Project [codegen id : 8] -Output [5]: [cs_warehouse_sk#1, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#12, i_item_id#16] -Input [7]: [cs_warehouse_sk#1, cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#12, i_item_sk#15, i_item_id#16] +Output [5]: [cs_warehouse_sk#1, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#11, i_item_id#14] +Input [7]: [cs_warehouse_sk#1, cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#11, i_item_sk#13, i_item_id#14] (21) ReusedExchange [Reuses operator id: 44] -Output [2]: [d_date_sk#19, d_date#20] +Output [2]: [d_date_sk#16, d_date#17] (22) BroadcastHashJoin [codegen id : 8] Left keys [1]: [cs_sold_date_sk#5] -Right keys [1]: [d_date_sk#19] +Right keys [1]: [d_date_sk#16] Join condition: None (23) Project [codegen id : 8] -Output [5]: [cs_warehouse_sk#1, cs_sales_price#4, cr_refunded_cash#12, i_item_id#16, d_date#20] -Input [7]: [cs_warehouse_sk#1, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#12, i_item_id#16, d_date_sk#19, d_date#20] +Output [5]: [cs_warehouse_sk#1, cs_sales_price#4, cr_refunded_cash#11, i_item_id#14, d_date#17] +Input [7]: [cs_warehouse_sk#1, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#11, i_item_id#14, d_date_sk#16, d_date#17] (24) Scan parquet default.warehouse -Output [2]: [w_warehouse_sk#21, w_state#22] +Output [2]: [w_warehouse_sk#18, w_state#19] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 7] -Input [2]: [w_warehouse_sk#21, w_state#22] +Input [2]: [w_warehouse_sk#18, w_state#19] (26) Filter [codegen id : 7] -Input [2]: [w_warehouse_sk#21, w_state#22] -Condition : isnotnull(w_warehouse_sk#21) +Input [2]: [w_warehouse_sk#18, w_state#19] +Condition : isnotnull(w_warehouse_sk#18) (27) BroadcastExchange -Input [2]: [w_warehouse_sk#21, w_state#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23] +Input [2]: [w_warehouse_sk#18, w_state#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (28) BroadcastHashJoin [codegen id : 8] Left keys [1]: [cs_warehouse_sk#1] -Right keys [1]: [w_warehouse_sk#21] +Right keys [1]: [w_warehouse_sk#18] Join condition: None (29) Project [codegen id : 8] -Output [5]: [cs_sales_price#4, cr_refunded_cash#12, w_state#22, i_item_id#16, d_date#20] -Input [7]: [cs_warehouse_sk#1, cs_sales_price#4, cr_refunded_cash#12, i_item_id#16, d_date#20, w_warehouse_sk#21, w_state#22] +Output [5]: [cs_sales_price#4, cr_refunded_cash#11, w_state#19, i_item_id#14, d_date#17] +Input [7]: [cs_warehouse_sk#1, cs_sales_price#4, cr_refunded_cash#11, i_item_id#14, d_date#17, w_warehouse_sk#18, w_state#19] (30) HashAggregate [codegen id : 8] -Input [5]: [cs_sales_price#4, cr_refunded_cash#12, w_state#22, i_item_id#16, d_date#20] -Keys [2]: [w_state#22, i_item_id#16] -Functions [2]: [partial_sum(CASE WHEN (d_date#20 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_date#20 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)] -Aggregate Attributes [4]: [sum#24, isEmpty#25, sum#26, isEmpty#27] -Results [6]: [w_state#22, i_item_id#16, sum#28, isEmpty#29, sum#30, isEmpty#31] +Input [5]: [cs_sales_price#4, cr_refunded_cash#11, w_state#19, i_item_id#14, d_date#17] +Keys [2]: [w_state#19, i_item_id#14] +Functions [2]: [partial_sum(CASE WHEN (d_date#17 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_date#17 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)] +Aggregate Attributes [4]: [sum#20, isEmpty#21, sum#22, isEmpty#23] +Results [6]: [w_state#19, i_item_id#14, sum#24, isEmpty#25, sum#26, isEmpty#27] (31) Exchange -Input [6]: [w_state#22, i_item_id#16, sum#28, isEmpty#29, sum#30, isEmpty#31] -Arguments: hashpartitioning(w_state#22, i_item_id#16, 5), ENSURE_REQUIREMENTS, [id=#32] +Input [6]: [w_state#19, i_item_id#14, sum#24, isEmpty#25, sum#26, isEmpty#27] +Arguments: hashpartitioning(w_state#19, i_item_id#14, 5), ENSURE_REQUIREMENTS, [plan_id=5] (32) HashAggregate [codegen id : 9] -Input [6]: [w_state#22, i_item_id#16, sum#28, isEmpty#29, sum#30, isEmpty#31] -Keys [2]: [w_state#22, i_item_id#16] -Functions [2]: [sum(CASE WHEN (d_date#20 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END), sum(CASE WHEN (d_date#20 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)] -Aggregate Attributes [2]: [sum(CASE WHEN (d_date#20 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#33, sum(CASE WHEN (d_date#20 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#34] -Results [4]: [w_state#22, i_item_id#16, sum(CASE WHEN (d_date#20 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#33 AS sales_before#35, sum(CASE WHEN (d_date#20 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#34 AS sales_after#36] +Input [6]: [w_state#19, i_item_id#14, sum#24, isEmpty#25, sum#26, isEmpty#27] +Keys [2]: [w_state#19, i_item_id#14] +Functions [2]: [sum(CASE WHEN (d_date#17 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END), sum(CASE WHEN (d_date#17 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)] +Aggregate Attributes [2]: [sum(CASE WHEN (d_date#17 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#28, sum(CASE WHEN (d_date#17 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#29] +Results [4]: [w_state#19, i_item_id#14, sum(CASE WHEN (d_date#17 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#28 AS sales_before#30, sum(CASE WHEN (d_date#17 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#11 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#29 AS sales_after#31] (33) TakeOrderedAndProject -Input [4]: [w_state#22, i_item_id#16, sales_before#35, sales_after#36] -Arguments: 100, [w_state#22 ASC NULLS FIRST, i_item_id#16 ASC NULLS FIRST], [w_state#22, i_item_id#16, sales_before#35, sales_after#36] +Input [4]: [w_state#19, i_item_id#14, sales_before#30, sales_after#31] +Arguments: 100, [w_state#19 ASC NULLS FIRST, i_item_id#14 ASC NULLS FIRST], [w_state#19, i_item_id#14, sales_before#30, sales_after#31] ===== Subqueries ===== @@ -197,40 +197,40 @@ ObjectHashAggregate (40) (34) Scan parquet default.item -Output [2]: [i_item_sk#15, i_current_price#17] +Output [2]: [i_item_sk#13, i_current_price#15] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThanOrEqual(i_current_price,0.99), LessThanOrEqual(i_current_price,1.49), IsNotNull(i_item_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 1] -Input [2]: [i_item_sk#15, i_current_price#17] +Input [2]: [i_item_sk#13, i_current_price#15] (36) Filter [codegen id : 1] -Input [2]: [i_item_sk#15, i_current_price#17] -Condition : (((isnotnull(i_current_price#17) AND (i_current_price#17 >= 0.99)) AND (i_current_price#17 <= 1.49)) AND isnotnull(i_item_sk#15)) +Input [2]: [i_item_sk#13, i_current_price#15] +Condition : (((isnotnull(i_current_price#15) AND (i_current_price#15 >= 0.99)) AND (i_current_price#15 <= 1.49)) AND isnotnull(i_item_sk#13)) (37) Project [codegen id : 1] -Output [1]: [i_item_sk#15] -Input [2]: [i_item_sk#15, i_current_price#17] +Output [1]: [i_item_sk#13] +Input [2]: [i_item_sk#13, i_current_price#15] (38) ObjectHashAggregate -Input [1]: [i_item_sk#15] +Input [1]: [i_item_sk#13] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#15, 42), 1019, 8152, 0, 0)] -Aggregate Attributes [1]: [buf#37] -Results [1]: [buf#38] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#13, 42), 1019, 8152, 0, 0)] +Aggregate Attributes [1]: [buf#32] +Results [1]: [buf#33] (39) Exchange -Input [1]: [buf#38] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#39] +Input [1]: [buf#33] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6] (40) ObjectHashAggregate -Input [1]: [buf#38] +Input [1]: [buf#33] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#15, 42), 1019, 8152, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#15, 42), 1019, 8152, 0, 0)#40] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#15, 42), 1019, 8152, 0, 0)#40 AS bloomFilter#41] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#13, 42), 1019, 8152, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#13, 42), 1019, 8152, 0, 0)#34] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#13, 42), 1019, 8152, 0, 0)#34 AS bloomFilter#35] Subquery:2 Hosting operator id = 1 Hosting Expression = cs_sold_date_sk#5 IN dynamicpruning#6 BroadcastExchange (44) @@ -240,21 +240,21 @@ BroadcastExchange (44) (41) Scan parquet default.date_dim -Output [2]: [d_date_sk#19, d_date#20] +Output [2]: [d_date_sk#16, d_date#17] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-02-10), LessThanOrEqual(d_date,2000-04-10), IsNotNull(d_date_sk)] ReadSchema: struct (42) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#19, d_date#20] +Input [2]: [d_date_sk#16, d_date#17] (43) Filter [codegen id : 1] -Input [2]: [d_date_sk#19, d_date#20] -Condition : (((isnotnull(d_date#20) AND (d_date#20 >= 2000-02-10)) AND (d_date#20 <= 2000-04-10)) AND isnotnull(d_date_sk#19)) +Input [2]: [d_date_sk#16, d_date#17] +Condition : (((isnotnull(d_date#17) AND (d_date#17 >= 2000-02-10)) AND (d_date#17 <= 2000-04-10)) AND isnotnull(d_date_sk#16)) (44) BroadcastExchange -Input [2]: [d_date_sk#19, d_date#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#42] +Input [2]: [d_date_sk#16, d_date#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q40/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q40/explain.txt index f1a79d04f36bc..5ea29201e6cd0 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q40/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q40/explain.txt @@ -51,138 +51,138 @@ Condition : (isnotnull(cs_warehouse_sk#1) AND isnotnull(cs_item_sk#2)) (4) Exchange Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] -Arguments: hashpartitioning(cs_order_number#3, cs_item_sk#2, 5), ENSURE_REQUIREMENTS, [id=#7] +Arguments: hashpartitioning(cs_order_number#3, cs_item_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5] Arguments: [cs_order_number#3 ASC NULLS FIRST, cs_item_sk#2 ASC NULLS FIRST], false, 0 (6) Scan parquet default.catalog_returns -Output [4]: [cr_item_sk#8, cr_order_number#9, cr_refunded_cash#10, cr_returned_date_sk#11] +Output [4]: [cr_item_sk#7, cr_order_number#8, cr_refunded_cash#9, cr_returned_date_sk#10] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_order_number), IsNotNull(cr_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [4]: [cr_item_sk#8, cr_order_number#9, cr_refunded_cash#10, cr_returned_date_sk#11] +Input [4]: [cr_item_sk#7, cr_order_number#8, cr_refunded_cash#9, cr_returned_date_sk#10] (8) Filter [codegen id : 3] -Input [4]: [cr_item_sk#8, cr_order_number#9, cr_refunded_cash#10, cr_returned_date_sk#11] -Condition : (isnotnull(cr_order_number#9) AND isnotnull(cr_item_sk#8)) +Input [4]: [cr_item_sk#7, cr_order_number#8, cr_refunded_cash#9, cr_returned_date_sk#10] +Condition : (isnotnull(cr_order_number#8) AND isnotnull(cr_item_sk#7)) (9) Project [codegen id : 3] -Output [3]: [cr_item_sk#8, cr_order_number#9, cr_refunded_cash#10] -Input [4]: [cr_item_sk#8, cr_order_number#9, cr_refunded_cash#10, cr_returned_date_sk#11] +Output [3]: [cr_item_sk#7, cr_order_number#8, cr_refunded_cash#9] +Input [4]: [cr_item_sk#7, cr_order_number#8, cr_refunded_cash#9, cr_returned_date_sk#10] (10) Exchange -Input [3]: [cr_item_sk#8, cr_order_number#9, cr_refunded_cash#10] -Arguments: hashpartitioning(cr_order_number#9, cr_item_sk#8, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [3]: [cr_item_sk#7, cr_order_number#8, cr_refunded_cash#9] +Arguments: hashpartitioning(cr_order_number#8, cr_item_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [3]: [cr_item_sk#8, cr_order_number#9, cr_refunded_cash#10] -Arguments: [cr_order_number#9 ASC NULLS FIRST, cr_item_sk#8 ASC NULLS FIRST], false, 0 +Input [3]: [cr_item_sk#7, cr_order_number#8, cr_refunded_cash#9] +Arguments: [cr_order_number#8 ASC NULLS FIRST, cr_item_sk#7 ASC NULLS FIRST], false, 0 (12) SortMergeJoin [codegen id : 8] Left keys [2]: [cs_order_number#3, cs_item_sk#2] -Right keys [2]: [cr_order_number#9, cr_item_sk#8] +Right keys [2]: [cr_order_number#8, cr_item_sk#7] Join condition: None (13) Project [codegen id : 8] -Output [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#10] -Input [8]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5, cr_item_sk#8, cr_order_number#9, cr_refunded_cash#10] +Output [5]: [cs_warehouse_sk#1, cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#9] +Input [8]: [cs_warehouse_sk#1, cs_item_sk#2, cs_order_number#3, cs_sales_price#4, cs_sold_date_sk#5, cr_item_sk#7, cr_order_number#8, cr_refunded_cash#9] (14) Scan parquet default.warehouse -Output [2]: [w_warehouse_sk#13, w_state#14] +Output [2]: [w_warehouse_sk#11, w_state#12] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 5] -Input [2]: [w_warehouse_sk#13, w_state#14] +Input [2]: [w_warehouse_sk#11, w_state#12] (16) Filter [codegen id : 5] -Input [2]: [w_warehouse_sk#13, w_state#14] -Condition : isnotnull(w_warehouse_sk#13) +Input [2]: [w_warehouse_sk#11, w_state#12] +Condition : isnotnull(w_warehouse_sk#11) (17) BroadcastExchange -Input [2]: [w_warehouse_sk#13, w_state#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Input [2]: [w_warehouse_sk#11, w_state#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (18) BroadcastHashJoin [codegen id : 8] Left keys [1]: [cs_warehouse_sk#1] -Right keys [1]: [w_warehouse_sk#13] +Right keys [1]: [w_warehouse_sk#11] Join condition: None (19) Project [codegen id : 8] -Output [5]: [cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#10, w_state#14] -Input [7]: [cs_warehouse_sk#1, cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#10, w_warehouse_sk#13, w_state#14] +Output [5]: [cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#9, w_state#12] +Input [7]: [cs_warehouse_sk#1, cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#9, w_warehouse_sk#11, w_state#12] (20) Scan parquet default.item -Output [3]: [i_item_sk#16, i_item_id#17, i_current_price#18] +Output [3]: [i_item_sk#13, i_item_id#14, i_current_price#15] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThanOrEqual(i_current_price,0.99), LessThanOrEqual(i_current_price,1.49), IsNotNull(i_item_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 6] -Input [3]: [i_item_sk#16, i_item_id#17, i_current_price#18] +Input [3]: [i_item_sk#13, i_item_id#14, i_current_price#15] (22) Filter [codegen id : 6] -Input [3]: [i_item_sk#16, i_item_id#17, i_current_price#18] -Condition : (((isnotnull(i_current_price#18) AND (i_current_price#18 >= 0.99)) AND (i_current_price#18 <= 1.49)) AND isnotnull(i_item_sk#16)) +Input [3]: [i_item_sk#13, i_item_id#14, i_current_price#15] +Condition : (((isnotnull(i_current_price#15) AND (i_current_price#15 >= 0.99)) AND (i_current_price#15 <= 1.49)) AND isnotnull(i_item_sk#13)) (23) Project [codegen id : 6] -Output [2]: [i_item_sk#16, i_item_id#17] -Input [3]: [i_item_sk#16, i_item_id#17, i_current_price#18] +Output [2]: [i_item_sk#13, i_item_id#14] +Input [3]: [i_item_sk#13, i_item_id#14, i_current_price#15] (24) BroadcastExchange -Input [2]: [i_item_sk#16, i_item_id#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#19] +Input [2]: [i_item_sk#13, i_item_id#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (25) BroadcastHashJoin [codegen id : 8] Left keys [1]: [cs_item_sk#2] -Right keys [1]: [i_item_sk#16] +Right keys [1]: [i_item_sk#13] Join condition: None (26) Project [codegen id : 8] -Output [5]: [cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#10, w_state#14, i_item_id#17] -Input [7]: [cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#10, w_state#14, i_item_sk#16, i_item_id#17] +Output [5]: [cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#9, w_state#12, i_item_id#14] +Input [7]: [cs_item_sk#2, cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#9, w_state#12, i_item_sk#13, i_item_id#14] (27) ReusedExchange [Reuses operator id: 37] -Output [2]: [d_date_sk#20, d_date#21] +Output [2]: [d_date_sk#16, d_date#17] (28) BroadcastHashJoin [codegen id : 8] Left keys [1]: [cs_sold_date_sk#5] -Right keys [1]: [d_date_sk#20] +Right keys [1]: [d_date_sk#16] Join condition: None (29) Project [codegen id : 8] -Output [5]: [cs_sales_price#4, cr_refunded_cash#10, w_state#14, i_item_id#17, d_date#21] -Input [7]: [cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#10, w_state#14, i_item_id#17, d_date_sk#20, d_date#21] +Output [5]: [cs_sales_price#4, cr_refunded_cash#9, w_state#12, i_item_id#14, d_date#17] +Input [7]: [cs_sales_price#4, cs_sold_date_sk#5, cr_refunded_cash#9, w_state#12, i_item_id#14, d_date_sk#16, d_date#17] (30) HashAggregate [codegen id : 8] -Input [5]: [cs_sales_price#4, cr_refunded_cash#10, w_state#14, i_item_id#17, d_date#21] -Keys [2]: [w_state#14, i_item_id#17] -Functions [2]: [partial_sum(CASE WHEN (d_date#21 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#10 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_date#21 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#10 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)] -Aggregate Attributes [4]: [sum#22, isEmpty#23, sum#24, isEmpty#25] -Results [6]: [w_state#14, i_item_id#17, sum#26, isEmpty#27, sum#28, isEmpty#29] +Input [5]: [cs_sales_price#4, cr_refunded_cash#9, w_state#12, i_item_id#14, d_date#17] +Keys [2]: [w_state#12, i_item_id#14] +Functions [2]: [partial_sum(CASE WHEN (d_date#17 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#9 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_date#17 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#9 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)] +Aggregate Attributes [4]: [sum#18, isEmpty#19, sum#20, isEmpty#21] +Results [6]: [w_state#12, i_item_id#14, sum#22, isEmpty#23, sum#24, isEmpty#25] (31) Exchange -Input [6]: [w_state#14, i_item_id#17, sum#26, isEmpty#27, sum#28, isEmpty#29] -Arguments: hashpartitioning(w_state#14, i_item_id#17, 5), ENSURE_REQUIREMENTS, [id=#30] +Input [6]: [w_state#12, i_item_id#14, sum#22, isEmpty#23, sum#24, isEmpty#25] +Arguments: hashpartitioning(w_state#12, i_item_id#14, 5), ENSURE_REQUIREMENTS, [plan_id=5] (32) HashAggregate [codegen id : 9] -Input [6]: [w_state#14, i_item_id#17, sum#26, isEmpty#27, sum#28, isEmpty#29] -Keys [2]: [w_state#14, i_item_id#17] -Functions [2]: [sum(CASE WHEN (d_date#21 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#10 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END), sum(CASE WHEN (d_date#21 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#10 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)] -Aggregate Attributes [2]: [sum(CASE WHEN (d_date#21 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#10 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#31, sum(CASE WHEN (d_date#21 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#10 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#32] -Results [4]: [w_state#14, i_item_id#17, sum(CASE WHEN (d_date#21 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#10 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#31 AS sales_before#33, sum(CASE WHEN (d_date#21 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#10 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#32 AS sales_after#34] +Input [6]: [w_state#12, i_item_id#14, sum#22, isEmpty#23, sum#24, isEmpty#25] +Keys [2]: [w_state#12, i_item_id#14] +Functions [2]: [sum(CASE WHEN (d_date#17 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#9 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END), sum(CASE WHEN (d_date#17 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#9 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)] +Aggregate Attributes [2]: [sum(CASE WHEN (d_date#17 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#9 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#26, sum(CASE WHEN (d_date#17 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#9 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#27] +Results [4]: [w_state#12, i_item_id#14, sum(CASE WHEN (d_date#17 < 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#9 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#26 AS sales_before#28, sum(CASE WHEN (d_date#17 >= 2000-03-11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#4 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_refunded_cash#9 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)) ELSE 0.00 END)#27 AS sales_after#29] (33) TakeOrderedAndProject -Input [4]: [w_state#14, i_item_id#17, sales_before#33, sales_after#34] -Arguments: 100, [w_state#14 ASC NULLS FIRST, i_item_id#17 ASC NULLS FIRST], [w_state#14, i_item_id#17, sales_before#33, sales_after#34] +Input [4]: [w_state#12, i_item_id#14, sales_before#28, sales_after#29] +Arguments: 100, [w_state#12 ASC NULLS FIRST, i_item_id#14 ASC NULLS FIRST], [w_state#12, i_item_id#14, sales_before#28, sales_after#29] ===== Subqueries ===== @@ -194,21 +194,21 @@ BroadcastExchange (37) (34) Scan parquet default.date_dim -Output [2]: [d_date_sk#20, d_date#21] +Output [2]: [d_date_sk#16, d_date#17] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-02-10), LessThanOrEqual(d_date,2000-04-10), IsNotNull(d_date_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#20, d_date#21] +Input [2]: [d_date_sk#16, d_date#17] (36) Filter [codegen id : 1] -Input [2]: [d_date_sk#20, d_date#21] -Condition : (((isnotnull(d_date#21) AND (d_date#21 >= 2000-02-10)) AND (d_date#21 <= 2000-04-10)) AND isnotnull(d_date_sk#20)) +Input [2]: [d_date_sk#16, d_date#17] +Condition : (((isnotnull(d_date#17) AND (d_date#17 >= 2000-02-10)) AND (d_date#17 <= 2000-04-10)) AND isnotnull(d_date_sk#16)) (37) BroadcastExchange -Input [2]: [d_date_sk#20, d_date#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#35] +Input [2]: [d_date_sk#16, d_date#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q41.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q41.sf100/explain.txt index 33c03d2b767dd..131e5cef4a7a7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q41.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q41.sf100/explain.txt @@ -66,26 +66,26 @@ Results [2]: [i_manufact#5, count#10] (10) Exchange Input [2]: [i_manufact#5, count#10] -Arguments: hashpartitioning(i_manufact#5, 5), ENSURE_REQUIREMENTS, [id=#11] +Arguments: hashpartitioning(i_manufact#5, 5), ENSURE_REQUIREMENTS, [plan_id=1] (11) HashAggregate [codegen id : 2] Input [2]: [i_manufact#5, count#10] Keys [1]: [i_manufact#5] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#12] -Results [2]: [count(1)#12 AS item_cnt#13, i_manufact#5] +Aggregate Attributes [1]: [count(1)#11] +Results [2]: [count(1)#11 AS item_cnt#12, i_manufact#5] (12) Filter [codegen id : 2] -Input [2]: [item_cnt#13, i_manufact#5] -Condition : (item_cnt#13 > 0) +Input [2]: [item_cnt#12, i_manufact#5] +Condition : (item_cnt#12 > 0) (13) Project [codegen id : 2] Output [1]: [i_manufact#5] -Input [2]: [item_cnt#13, i_manufact#5] +Input [2]: [item_cnt#12, i_manufact#5] (14) BroadcastExchange Input [1]: [i_manufact#5] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 3] Left keys [1]: [i_manufact#2] @@ -105,7 +105,7 @@ Results [1]: [i_product_name#3] (18) Exchange Input [1]: [i_product_name#3] -Arguments: hashpartitioning(i_product_name#3, 5), ENSURE_REQUIREMENTS, [id=#15] +Arguments: hashpartitioning(i_product_name#3, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) HashAggregate [codegen id : 4] Input [1]: [i_product_name#3] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q41/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q41/explain.txt index 33c03d2b767dd..131e5cef4a7a7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q41/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q41/explain.txt @@ -66,26 +66,26 @@ Results [2]: [i_manufact#5, count#10] (10) Exchange Input [2]: [i_manufact#5, count#10] -Arguments: hashpartitioning(i_manufact#5, 5), ENSURE_REQUIREMENTS, [id=#11] +Arguments: hashpartitioning(i_manufact#5, 5), ENSURE_REQUIREMENTS, [plan_id=1] (11) HashAggregate [codegen id : 2] Input [2]: [i_manufact#5, count#10] Keys [1]: [i_manufact#5] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#12] -Results [2]: [count(1)#12 AS item_cnt#13, i_manufact#5] +Aggregate Attributes [1]: [count(1)#11] +Results [2]: [count(1)#11 AS item_cnt#12, i_manufact#5] (12) Filter [codegen id : 2] -Input [2]: [item_cnt#13, i_manufact#5] -Condition : (item_cnt#13 > 0) +Input [2]: [item_cnt#12, i_manufact#5] +Condition : (item_cnt#12 > 0) (13) Project [codegen id : 2] Output [1]: [i_manufact#5] -Input [2]: [item_cnt#13, i_manufact#5] +Input [2]: [item_cnt#12, i_manufact#5] (14) BroadcastExchange Input [1]: [i_manufact#5] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 3] Left keys [1]: [i_manufact#2] @@ -105,7 +105,7 @@ Results [1]: [i_product_name#3] (18) Exchange Input [1]: [i_product_name#3] -Arguments: hashpartitioning(i_product_name#3, 5), ENSURE_REQUIREMENTS, [id=#15] +Arguments: hashpartitioning(i_product_name#3, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) HashAggregate [codegen id : 4] Input [1]: [i_product_name#3] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q42.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q42.sf100/explain.txt index 30bd5d90995f4..71f39eacc018e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q42.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q42.sf100/explain.txt @@ -53,7 +53,7 @@ Input [4]: [i_item_sk#5, i_category_id#6, i_category#7, i_manager_id#8] (8) BroadcastExchange Input [3]: [i_item_sk#5, i_category_id#6, i_category#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#1] @@ -65,38 +65,38 @@ Output [4]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_category_id#6, i_categor Input [6]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_sk#5, i_category_id#6, i_category#7] (11) ReusedExchange [Reuses operator id: 22] -Output [2]: [d_date_sk#10, d_year#11] +Output [2]: [d_date_sk#9, d_year#10] (12) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_sold_date_sk#3] -Right keys [1]: [d_date_sk#10] +Right keys [1]: [d_date_sk#9] Join condition: None (13) Project [codegen id : 3] -Output [4]: [d_year#11, ss_ext_sales_price#2, i_category_id#6, i_category#7] -Input [6]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_category_id#6, i_category#7, d_date_sk#10, d_year#11] +Output [4]: [d_year#10, ss_ext_sales_price#2, i_category_id#6, i_category#7] +Input [6]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_category_id#6, i_category#7, d_date_sk#9, d_year#10] (14) HashAggregate [codegen id : 3] -Input [4]: [d_year#11, ss_ext_sales_price#2, i_category_id#6, i_category#7] -Keys [3]: [d_year#11, i_category_id#6, i_category#7] +Input [4]: [d_year#10, ss_ext_sales_price#2, i_category_id#6, i_category#7] +Keys [3]: [d_year#10, i_category_id#6, i_category#7] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#12] -Results [4]: [d_year#11, i_category_id#6, i_category#7, sum#13] +Aggregate Attributes [1]: [sum#11] +Results [4]: [d_year#10, i_category_id#6, i_category#7, sum#12] (15) Exchange -Input [4]: [d_year#11, i_category_id#6, i_category#7, sum#13] -Arguments: hashpartitioning(d_year#11, i_category_id#6, i_category#7, 5), ENSURE_REQUIREMENTS, [id=#14] +Input [4]: [d_year#10, i_category_id#6, i_category#7, sum#12] +Arguments: hashpartitioning(d_year#10, i_category_id#6, i_category#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (16) HashAggregate [codegen id : 4] -Input [4]: [d_year#11, i_category_id#6, i_category#7, sum#13] -Keys [3]: [d_year#11, i_category_id#6, i_category#7] +Input [4]: [d_year#10, i_category_id#6, i_category#7, sum#12] +Keys [3]: [d_year#10, i_category_id#6, i_category#7] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#15] -Results [4]: [d_year#11, i_category_id#6, i_category#7, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#15,17,2) AS sum(ss_ext_sales_price)#16] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#13] +Results [4]: [d_year#10, i_category_id#6, i_category#7, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#13,17,2) AS sum(ss_ext_sales_price)#14] (17) TakeOrderedAndProject -Input [4]: [d_year#11, i_category_id#6, i_category#7, sum(ss_ext_sales_price)#16] -Arguments: 100, [sum(ss_ext_sales_price)#16 DESC NULLS LAST, d_year#11 ASC NULLS FIRST, i_category_id#6 ASC NULLS FIRST, i_category#7 ASC NULLS FIRST], [d_year#11, i_category_id#6, i_category#7, sum(ss_ext_sales_price)#16] +Input [4]: [d_year#10, i_category_id#6, i_category#7, sum(ss_ext_sales_price)#14] +Arguments: 100, [sum(ss_ext_sales_price)#14 DESC NULLS LAST, d_year#10 ASC NULLS FIRST, i_category_id#6 ASC NULLS FIRST, i_category#7 ASC NULLS FIRST], [d_year#10, i_category_id#6, i_category#7, sum(ss_ext_sales_price)#14] ===== Subqueries ===== @@ -109,25 +109,25 @@ BroadcastExchange (22) (18) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#11, d_moy#17] +Output [3]: [d_date_sk#9, d_year#10, d_moy#15] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_moy,11), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (19) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#17] +Input [3]: [d_date_sk#9, d_year#10, d_moy#15] (20) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#17] -Condition : ((((isnotnull(d_moy#17) AND isnotnull(d_year#11)) AND (d_moy#17 = 11)) AND (d_year#11 = 2000)) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#9, d_year#10, d_moy#15] +Condition : ((((isnotnull(d_moy#15) AND isnotnull(d_year#10)) AND (d_moy#15 = 11)) AND (d_year#10 = 2000)) AND isnotnull(d_date_sk#9)) (21) Project [codegen id : 1] -Output [2]: [d_date_sk#10, d_year#11] -Input [3]: [d_date_sk#10, d_year#11, d_moy#17] +Output [2]: [d_date_sk#9, d_year#10] +Input [3]: [d_date_sk#9, d_year#10, d_moy#15] (22) BroadcastExchange -Input [2]: [d_date_sk#10, d_year#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [2]: [d_date_sk#9, d_year#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q42/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q42/explain.txt index d16b4bca7c3f4..2de983e587e2b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q42/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q42/explain.txt @@ -57,7 +57,7 @@ Condition : isnotnull(ss_item_sk#4) (8) BroadcastExchange Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] @@ -69,55 +69,55 @@ Output [3]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5] Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] (11) Scan parquet default.item -Output [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11] +Output [4]: [i_item_sk#7, i_category_id#8, i_category#9, i_manager_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,1), IsNotNull(i_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11] +Input [4]: [i_item_sk#7, i_category_id#8, i_category#9, i_manager_id#10] (13) Filter [codegen id : 2] -Input [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11] -Condition : ((isnotnull(i_manager_id#11) AND (i_manager_id#11 = 1)) AND isnotnull(i_item_sk#8)) +Input [4]: [i_item_sk#7, i_category_id#8, i_category#9, i_manager_id#10] +Condition : ((isnotnull(i_manager_id#10) AND (i_manager_id#10 = 1)) AND isnotnull(i_item_sk#7)) (14) Project [codegen id : 2] -Output [3]: [i_item_sk#8, i_category_id#9, i_category#10] -Input [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11] +Output [3]: [i_item_sk#7, i_category_id#8, i_category#9] +Input [4]: [i_item_sk#7, i_category_id#8, i_category#9, i_manager_id#10] (15) BroadcastExchange -Input [3]: [i_item_sk#8, i_category_id#9, i_category#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Input [3]: [i_item_sk#7, i_category_id#8, i_category#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#4] -Right keys [1]: [i_item_sk#8] +Right keys [1]: [i_item_sk#7] Join condition: None (17) Project [codegen id : 3] -Output [4]: [d_year#2, ss_ext_sales_price#5, i_category_id#9, i_category#10] -Input [6]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#8, i_category_id#9, i_category#10] +Output [4]: [d_year#2, ss_ext_sales_price#5, i_category_id#8, i_category#9] +Input [6]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#7, i_category_id#8, i_category#9] (18) HashAggregate [codegen id : 3] -Input [4]: [d_year#2, ss_ext_sales_price#5, i_category_id#9, i_category#10] -Keys [3]: [d_year#2, i_category_id#9, i_category#10] +Input [4]: [d_year#2, ss_ext_sales_price#5, i_category_id#8, i_category#9] +Keys [3]: [d_year#2, i_category_id#8, i_category#9] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum#13] -Results [4]: [d_year#2, i_category_id#9, i_category#10, sum#14] +Aggregate Attributes [1]: [sum#11] +Results [4]: [d_year#2, i_category_id#8, i_category#9, sum#12] (19) Exchange -Input [4]: [d_year#2, i_category_id#9, i_category#10, sum#14] -Arguments: hashpartitioning(d_year#2, i_category_id#9, i_category#10, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [d_year#2, i_category_id#8, i_category#9, sum#12] +Arguments: hashpartitioning(d_year#2, i_category_id#8, i_category#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [4]: [d_year#2, i_category_id#9, i_category#10, sum#14] -Keys [3]: [d_year#2, i_category_id#9, i_category#10] +Input [4]: [d_year#2, i_category_id#8, i_category#9, sum#12] +Keys [3]: [d_year#2, i_category_id#8, i_category#9] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#16] -Results [4]: [d_year#2, i_category_id#9, i_category#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#16,17,2) AS sum(ss_ext_sales_price)#17] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#13] +Results [4]: [d_year#2, i_category_id#8, i_category#9, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#13,17,2) AS sum(ss_ext_sales_price)#14] (21) TakeOrderedAndProject -Input [4]: [d_year#2, i_category_id#9, i_category#10, sum(ss_ext_sales_price)#17] -Arguments: 100, [sum(ss_ext_sales_price)#17 DESC NULLS LAST, d_year#2 ASC NULLS FIRST, i_category_id#9 ASC NULLS FIRST, i_category#10 ASC NULLS FIRST], [d_year#2, i_category_id#9, i_category#10, sum(ss_ext_sales_price)#17] +Input [4]: [d_year#2, i_category_id#8, i_category#9, sum(ss_ext_sales_price)#14] +Arguments: 100, [sum(ss_ext_sales_price)#14 DESC NULLS LAST, d_year#2 ASC NULLS FIRST, i_category_id#8 ASC NULLS FIRST, i_category#9 ASC NULLS FIRST], [d_year#2, i_category_id#8, i_category#9, sum(ss_ext_sales_price)#14] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q43.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q43.sf100/explain.txt index 7efea217cb931..480be419b0ad9 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q43.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q43.sf100/explain.txt @@ -42,88 +42,88 @@ Input [3]: [d_date_sk#1, d_year#2, d_day_name#3] (5) BroadcastExchange Input [2]: [d_date_sk#1, d_day_name#3] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#4] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.store_sales -Output [3]: [ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7] +Output [3]: [ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ss_sold_date_sk#6), dynamicpruningexpression(ss_sold_date_sk#6 IN dynamicpruning#7)] PushedFilters: [IsNotNull(ss_store_sk)] ReadSchema: struct (7) ColumnarToRow -Input [3]: [ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7] +Input [3]: [ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6] (8) Filter -Input [3]: [ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7] -Condition : isnotnull(ss_store_sk#5) +Input [3]: [ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6] +Condition : isnotnull(ss_store_sk#4) (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] -Right keys [1]: [ss_sold_date_sk#7] +Right keys [1]: [ss_sold_date_sk#6] Join condition: None (10) Project [codegen id : 3] -Output [3]: [d_day_name#3, ss_store_sk#5, ss_sales_price#6] -Input [5]: [d_date_sk#1, d_day_name#3, ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7] +Output [3]: [d_day_name#3, ss_store_sk#4, ss_sales_price#5] +Input [5]: [d_date_sk#1, d_day_name#3, ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6] (11) Scan parquet default.store -Output [4]: [s_store_sk#9, s_store_id#10, s_store_name#11, s_gmt_offset#12] +Output [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_gmt_offset), EqualTo(s_gmt_offset,-5.00), IsNotNull(s_store_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [s_store_sk#9, s_store_id#10, s_store_name#11, s_gmt_offset#12] +Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] (13) Filter [codegen id : 2] -Input [4]: [s_store_sk#9, s_store_id#10, s_store_name#11, s_gmt_offset#12] -Condition : ((isnotnull(s_gmt_offset#12) AND (s_gmt_offset#12 = -5.00)) AND isnotnull(s_store_sk#9)) +Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] +Condition : ((isnotnull(s_gmt_offset#11) AND (s_gmt_offset#11 = -5.00)) AND isnotnull(s_store_sk#8)) (14) Project [codegen id : 2] -Output [3]: [s_store_sk#9, s_store_id#10, s_store_name#11] -Input [4]: [s_store_sk#9, s_store_id#10, s_store_name#11, s_gmt_offset#12] +Output [3]: [s_store_sk#8, s_store_id#9, s_store_name#10] +Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] (15) BroadcastExchange -Input [3]: [s_store_sk#9, s_store_id#10, s_store_name#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] +Input [3]: [s_store_sk#8, s_store_id#9, s_store_name#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [ss_store_sk#5] -Right keys [1]: [s_store_sk#9] +Left keys [1]: [ss_store_sk#4] +Right keys [1]: [s_store_sk#8] Join condition: None (17) Project [codegen id : 3] -Output [4]: [d_day_name#3, ss_sales_price#6, s_store_id#10, s_store_name#11] -Input [6]: [d_day_name#3, ss_store_sk#5, ss_sales_price#6, s_store_sk#9, s_store_id#10, s_store_name#11] +Output [4]: [d_day_name#3, ss_sales_price#5, s_store_id#9, s_store_name#10] +Input [6]: [d_day_name#3, ss_store_sk#4, ss_sales_price#5, s_store_sk#8, s_store_id#9, s_store_name#10] (18) HashAggregate [codegen id : 3] -Input [4]: [d_day_name#3, ss_sales_price#6, s_store_id#10, s_store_name#11] -Keys [2]: [s_store_name#11, s_store_id#10] -Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#6 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#6 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#6 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#6 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#6 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#6 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#6 END))] -Aggregate Attributes [7]: [sum#14, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20] -Results [9]: [s_store_name#11, s_store_id#10, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27] +Input [4]: [d_day_name#3, ss_sales_price#5, s_store_id#9, s_store_name#10] +Keys [2]: [s_store_name#10, s_store_id#9] +Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))] +Aggregate Attributes [7]: [sum#12, sum#13, sum#14, sum#15, sum#16, sum#17, sum#18] +Results [9]: [s_store_name#10, s_store_id#9, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25] (19) Exchange -Input [9]: [s_store_name#11, s_store_id#10, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27] -Arguments: hashpartitioning(s_store_name#11, s_store_id#10, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [9]: [s_store_name#10, s_store_id#9, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25] +Arguments: hashpartitioning(s_store_name#10, s_store_id#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [9]: [s_store_name#11, s_store_id#10, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27] -Keys [2]: [s_store_name#11, s_store_id#10] -Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#6 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#6 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#6 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#6 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#6 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#6 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#6 END))] -Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#6 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#6 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#6 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#6 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#6 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#6 END))#34, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#6 END))#35] -Results [9]: [s_store_name#11, s_store_id#10, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#6 END))#29,17,2) AS sun_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#6 END))#30,17,2) AS mon_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#6 END))#31,17,2) AS tue_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#6 END))#32,17,2) AS wed_sales#39, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#6 END))#33,17,2) AS thu_sales#40, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#6 END))#34,17,2) AS fri_sales#41, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#6 END))#35,17,2) AS sat_sales#42] +Input [9]: [s_store_name#10, s_store_id#9, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25] +Keys [2]: [s_store_name#10, s_store_id#9] +Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))] +Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))#32] +Results [9]: [s_store_name#10, s_store_id#9, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END))#26,17,2) AS sun_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END))#27,17,2) AS mon_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END))#28,17,2) AS tue_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END))#29,17,2) AS wed_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END))#30,17,2) AS thu_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END))#31,17,2) AS fri_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))#32,17,2) AS sat_sales#39] (21) TakeOrderedAndProject -Input [9]: [s_store_name#11, s_store_id#10, sun_sales#36, mon_sales#37, tue_sales#38, wed_sales#39, thu_sales#40, fri_sales#41, sat_sales#42] -Arguments: 100, [s_store_name#11 ASC NULLS FIRST, s_store_id#10 ASC NULLS FIRST, sun_sales#36 ASC NULLS FIRST, mon_sales#37 ASC NULLS FIRST, tue_sales#38 ASC NULLS FIRST, wed_sales#39 ASC NULLS FIRST, thu_sales#40 ASC NULLS FIRST, fri_sales#41 ASC NULLS FIRST, sat_sales#42 ASC NULLS FIRST], [s_store_name#11, s_store_id#10, sun_sales#36, mon_sales#37, tue_sales#38, wed_sales#39, thu_sales#40, fri_sales#41, sat_sales#42] +Input [9]: [s_store_name#10, s_store_id#9, sun_sales#33, mon_sales#34, tue_sales#35, wed_sales#36, thu_sales#37, fri_sales#38, sat_sales#39] +Arguments: 100, [s_store_name#10 ASC NULLS FIRST, s_store_id#9 ASC NULLS FIRST, sun_sales#33 ASC NULLS FIRST, mon_sales#34 ASC NULLS FIRST, tue_sales#35 ASC NULLS FIRST, wed_sales#36 ASC NULLS FIRST, thu_sales#37 ASC NULLS FIRST, fri_sales#38 ASC NULLS FIRST, sat_sales#39 ASC NULLS FIRST], [s_store_name#10, s_store_id#9, sun_sales#33, mon_sales#34, tue_sales#35, wed_sales#36, thu_sales#37, fri_sales#38, sat_sales#39] ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 +Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#6 IN dynamicpruning#7 ReusedExchange (22) diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q43/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q43/explain.txt index 5a14bfcb5d0c1..74d1ae65e581b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q43/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q43/explain.txt @@ -57,7 +57,7 @@ Condition : isnotnull(ss_store_sk#4) (8) BroadcastExchange Input [3]: [ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] @@ -69,55 +69,55 @@ Output [3]: [d_day_name#3, ss_store_sk#4, ss_sales_price#5] Input [5]: [d_date_sk#1, d_day_name#3, ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6] (11) Scan parquet default.store -Output [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] +Output [4]: [s_store_sk#7, s_store_id#8, s_store_name#9, s_gmt_offset#10] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_gmt_offset), EqualTo(s_gmt_offset,-5.00), IsNotNull(s_store_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] +Input [4]: [s_store_sk#7, s_store_id#8, s_store_name#9, s_gmt_offset#10] (13) Filter [codegen id : 2] -Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] -Condition : ((isnotnull(s_gmt_offset#11) AND (s_gmt_offset#11 = -5.00)) AND isnotnull(s_store_sk#8)) +Input [4]: [s_store_sk#7, s_store_id#8, s_store_name#9, s_gmt_offset#10] +Condition : ((isnotnull(s_gmt_offset#10) AND (s_gmt_offset#10 = -5.00)) AND isnotnull(s_store_sk#7)) (14) Project [codegen id : 2] -Output [3]: [s_store_sk#8, s_store_id#9, s_store_name#10] -Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11] +Output [3]: [s_store_sk#7, s_store_id#8, s_store_name#9] +Input [4]: [s_store_sk#7, s_store_id#8, s_store_name#9, s_gmt_offset#10] (15) BroadcastExchange -Input [3]: [s_store_sk#8, s_store_id#9, s_store_name#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Input [3]: [s_store_sk#7, s_store_id#8, s_store_name#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_store_sk#4] -Right keys [1]: [s_store_sk#8] +Right keys [1]: [s_store_sk#7] Join condition: None (17) Project [codegen id : 3] -Output [4]: [d_day_name#3, ss_sales_price#5, s_store_id#9, s_store_name#10] -Input [6]: [d_day_name#3, ss_store_sk#4, ss_sales_price#5, s_store_sk#8, s_store_id#9, s_store_name#10] +Output [4]: [d_day_name#3, ss_sales_price#5, s_store_id#8, s_store_name#9] +Input [6]: [d_day_name#3, ss_store_sk#4, ss_sales_price#5, s_store_sk#7, s_store_id#8, s_store_name#9] (18) HashAggregate [codegen id : 3] -Input [4]: [d_day_name#3, ss_sales_price#5, s_store_id#9, s_store_name#10] -Keys [2]: [s_store_name#10, s_store_id#9] +Input [4]: [d_day_name#3, ss_sales_price#5, s_store_id#8, s_store_name#9] +Keys [2]: [s_store_name#9, s_store_id#8] Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))] -Aggregate Attributes [7]: [sum#13, sum#14, sum#15, sum#16, sum#17, sum#18, sum#19] -Results [9]: [s_store_name#10, s_store_id#9, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26] +Aggregate Attributes [7]: [sum#11, sum#12, sum#13, sum#14, sum#15, sum#16, sum#17] +Results [9]: [s_store_name#9, s_store_id#8, sum#18, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24] (19) Exchange -Input [9]: [s_store_name#10, s_store_id#9, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26] -Arguments: hashpartitioning(s_store_name#10, s_store_id#9, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [9]: [s_store_name#9, s_store_id#8, sum#18, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24] +Arguments: hashpartitioning(s_store_name#9, s_store_id#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [9]: [s_store_name#10, s_store_id#9, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26] -Keys [2]: [s_store_name#10, s_store_id#9] +Input [9]: [s_store_name#9, s_store_id#8, sum#18, sum#19, sum#20, sum#21, sum#22, sum#23, sum#24] +Keys [2]: [s_store_name#9, s_store_id#8] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))] -Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END))#33, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))#34] -Results [9]: [s_store_name#10, s_store_id#9, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END))#28,17,2) AS sun_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END))#29,17,2) AS mon_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END))#30,17,2) AS tue_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END))#31,17,2) AS wed_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END))#32,17,2) AS thu_sales#39, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END))#33,17,2) AS fri_sales#40, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))#34,17,2) AS sat_sales#41] +Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))#31] +Results [9]: [s_store_name#9, s_store_id#8, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday ) THEN ss_sales_price#5 END))#25,17,2) AS sun_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday ) THEN ss_sales_price#5 END))#26,17,2) AS mon_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday ) THEN ss_sales_price#5 END))#27,17,2) AS tue_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 END))#28,17,2) AS wed_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday ) THEN ss_sales_price#5 END))#29,17,2) AS thu_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Friday ) THEN ss_sales_price#5 END))#30,17,2) AS fri_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Saturday ) THEN ss_sales_price#5 END))#31,17,2) AS sat_sales#38] (21) TakeOrderedAndProject -Input [9]: [s_store_name#10, s_store_id#9, sun_sales#35, mon_sales#36, tue_sales#37, wed_sales#38, thu_sales#39, fri_sales#40, sat_sales#41] -Arguments: 100, [s_store_name#10 ASC NULLS FIRST, s_store_id#9 ASC NULLS FIRST, sun_sales#35 ASC NULLS FIRST, mon_sales#36 ASC NULLS FIRST, tue_sales#37 ASC NULLS FIRST, wed_sales#38 ASC NULLS FIRST, thu_sales#39 ASC NULLS FIRST, fri_sales#40 ASC NULLS FIRST, sat_sales#41 ASC NULLS FIRST], [s_store_name#10, s_store_id#9, sun_sales#35, mon_sales#36, tue_sales#37, wed_sales#38, thu_sales#39, fri_sales#40, sat_sales#41] +Input [9]: [s_store_name#9, s_store_id#8, sun_sales#32, mon_sales#33, tue_sales#34, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38] +Arguments: 100, [s_store_name#9 ASC NULLS FIRST, s_store_id#8 ASC NULLS FIRST, sun_sales#32 ASC NULLS FIRST, mon_sales#33 ASC NULLS FIRST, tue_sales#34 ASC NULLS FIRST, wed_sales#35 ASC NULLS FIRST, thu_sales#36 ASC NULLS FIRST, fri_sales#37 ASC NULLS FIRST, sat_sales#38 ASC NULLS FIRST], [s_store_name#9, s_store_id#8, sun_sales#32, mon_sales#33, tue_sales#34, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q44.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q44.sf100/explain.txt index 0d7aa6dbdfbb8..afe71668e80f9 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q44.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q44.sf100/explain.txt @@ -59,117 +59,117 @@ Results [3]: [ss_item_sk#1, sum#7, count#8] (6) Exchange Input [3]: [ss_item_sk#1, sum#7, count#8] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (7) HashAggregate [codegen id : 2] Input [3]: [ss_item_sk#1, sum#7, count#8] Keys [1]: [ss_item_sk#1] Functions [1]: [avg(UnscaledValue(ss_net_profit#3))] -Aggregate Attributes [1]: [avg(UnscaledValue(ss_net_profit#3))#10] -Results [2]: [ss_item_sk#1 AS item_sk#11, cast((avg(UnscaledValue(ss_net_profit#3))#10 / 100.0) as decimal(11,6)) AS rank_col#12] +Aggregate Attributes [1]: [avg(UnscaledValue(ss_net_profit#3))#9] +Results [2]: [ss_item_sk#1 AS item_sk#10, cast((avg(UnscaledValue(ss_net_profit#3))#9 / 100.0) as decimal(11,6)) AS rank_col#11] (8) Filter [codegen id : 2] -Input [2]: [item_sk#11, rank_col#12] -Condition : (isnotnull(rank_col#12) AND (cast(rank_col#12 as decimal(13,7)) > CheckOverflow((0.900000 * promote_precision(Subquery scalar-subquery#13, [id=#14])), DecimalType(13,7)))) +Input [2]: [item_sk#10, rank_col#11] +Condition : (isnotnull(rank_col#11) AND (cast(rank_col#11 as decimal(13,7)) > CheckOverflow((0.900000 * promote_precision(Subquery scalar-subquery#12, [id=#13])), DecimalType(13,7)))) (9) Exchange -Input [2]: [item_sk#11, rank_col#12] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#15] +Input [2]: [item_sk#10, rank_col#11] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2] (10) Sort [codegen id : 3] -Input [2]: [item_sk#11, rank_col#12] -Arguments: [rank_col#12 ASC NULLS FIRST], false, 0 +Input [2]: [item_sk#10, rank_col#11] +Arguments: [rank_col#11 ASC NULLS FIRST], false, 0 (11) Window -Input [2]: [item_sk#11, rank_col#12] -Arguments: [rank(rank_col#12) windowspecdefinition(rank_col#12 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rnk#16], [rank_col#12 ASC NULLS FIRST] +Input [2]: [item_sk#10, rank_col#11] +Arguments: [rank(rank_col#11) windowspecdefinition(rank_col#11 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rnk#14], [rank_col#11 ASC NULLS FIRST] (12) Filter [codegen id : 10] -Input [3]: [item_sk#11, rank_col#12, rnk#16] -Condition : ((rnk#16 < 11) AND isnotnull(item_sk#11)) +Input [3]: [item_sk#10, rank_col#11, rnk#14] +Condition : ((rnk#14 < 11) AND isnotnull(item_sk#10)) (13) Project [codegen id : 10] -Output [2]: [item_sk#11, rnk#16] -Input [3]: [item_sk#11, rank_col#12, rnk#16] +Output [2]: [item_sk#10, rnk#14] +Input [3]: [item_sk#10, rank_col#11, rnk#14] (14) ReusedExchange [Reuses operator id: 9] -Output [2]: [item_sk#17, rank_col#18] +Output [2]: [item_sk#15, rank_col#16] (15) Sort [codegen id : 6] -Input [2]: [item_sk#17, rank_col#18] -Arguments: [rank_col#18 DESC NULLS LAST], false, 0 +Input [2]: [item_sk#15, rank_col#16] +Arguments: [rank_col#16 DESC NULLS LAST], false, 0 (16) Window -Input [2]: [item_sk#17, rank_col#18] -Arguments: [rank(rank_col#18) windowspecdefinition(rank_col#18 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rnk#19], [rank_col#18 DESC NULLS LAST] +Input [2]: [item_sk#15, rank_col#16] +Arguments: [rank(rank_col#16) windowspecdefinition(rank_col#16 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rnk#17], [rank_col#16 DESC NULLS LAST] (17) Filter [codegen id : 7] -Input [3]: [item_sk#17, rank_col#18, rnk#19] -Condition : ((rnk#19 < 11) AND isnotnull(item_sk#17)) +Input [3]: [item_sk#15, rank_col#16, rnk#17] +Condition : ((rnk#17 < 11) AND isnotnull(item_sk#15)) (18) Project [codegen id : 7] -Output [2]: [item_sk#17, rnk#19] -Input [3]: [item_sk#17, rank_col#18, rnk#19] +Output [2]: [item_sk#15, rnk#17] +Input [3]: [item_sk#15, rank_col#16, rnk#17] (19) BroadcastExchange -Input [2]: [item_sk#17, rnk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [id=#20] +Input [2]: [item_sk#15, rnk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [plan_id=3] (20) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [rnk#16] -Right keys [1]: [rnk#19] +Left keys [1]: [rnk#14] +Right keys [1]: [rnk#17] Join condition: None (21) Project [codegen id : 10] -Output [3]: [item_sk#11, rnk#16, item_sk#17] -Input [4]: [item_sk#11, rnk#16, item_sk#17, rnk#19] +Output [3]: [item_sk#10, rnk#14, item_sk#15] +Input [4]: [item_sk#10, rnk#14, item_sk#15, rnk#17] (22) Scan parquet default.item -Output [2]: [i_item_sk#21, i_product_name#22] +Output [2]: [i_item_sk#18, i_product_name#19] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 8] -Input [2]: [i_item_sk#21, i_product_name#22] +Input [2]: [i_item_sk#18, i_product_name#19] (24) Filter [codegen id : 8] -Input [2]: [i_item_sk#21, i_product_name#22] -Condition : isnotnull(i_item_sk#21) +Input [2]: [i_item_sk#18, i_product_name#19] +Condition : isnotnull(i_item_sk#18) (25) BroadcastExchange -Input [2]: [i_item_sk#21, i_product_name#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23] +Input [2]: [i_item_sk#18, i_product_name#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (26) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [item_sk#11] -Right keys [1]: [i_item_sk#21] +Left keys [1]: [item_sk#10] +Right keys [1]: [i_item_sk#18] Join condition: None (27) Project [codegen id : 10] -Output [3]: [rnk#16, item_sk#17, i_product_name#22] -Input [5]: [item_sk#11, rnk#16, item_sk#17, i_item_sk#21, i_product_name#22] +Output [3]: [rnk#14, item_sk#15, i_product_name#19] +Input [5]: [item_sk#10, rnk#14, item_sk#15, i_item_sk#18, i_product_name#19] (28) ReusedExchange [Reuses operator id: 25] -Output [2]: [i_item_sk#24, i_product_name#25] +Output [2]: [i_item_sk#20, i_product_name#21] (29) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [item_sk#17] -Right keys [1]: [i_item_sk#24] +Left keys [1]: [item_sk#15] +Right keys [1]: [i_item_sk#20] Join condition: None (30) Project [codegen id : 10] -Output [3]: [rnk#16, i_product_name#22 AS best_performing#26, i_product_name#25 AS worst_performing#27] -Input [5]: [rnk#16, item_sk#17, i_product_name#22, i_item_sk#24, i_product_name#25] +Output [3]: [rnk#14, i_product_name#19 AS best_performing#22, i_product_name#21 AS worst_performing#23] +Input [5]: [rnk#14, item_sk#15, i_product_name#19, i_item_sk#20, i_product_name#21] (31) TakeOrderedAndProject -Input [3]: [rnk#16, best_performing#26, worst_performing#27] -Arguments: 100, [rnk#16 ASC NULLS FIRST], [rnk#16, best_performing#26, worst_performing#27] +Input [3]: [rnk#14, best_performing#22, worst_performing#23] +Arguments: 100, [rnk#14 ASC NULLS FIRST], [rnk#14, best_performing#22, worst_performing#23] ===== Subqueries ===== -Subquery:1 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery#13, [id=#14] +Subquery:1 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery#12, [id=#13] * HashAggregate (38) +- Exchange (37) +- * HashAggregate (36) @@ -180,39 +180,39 @@ Subquery:1 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery (32) Scan parquet default.store_sales -Output [4]: [ss_addr_sk#28, ss_store_sk#29, ss_net_profit#30, ss_sold_date_sk#31] +Output [4]: [ss_addr_sk#24, ss_store_sk#25, ss_net_profit#26, ss_sold_date_sk#27] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_store_sk), EqualTo(ss_store_sk,4), IsNull(ss_addr_sk)] ReadSchema: struct (33) ColumnarToRow [codegen id : 1] -Input [4]: [ss_addr_sk#28, ss_store_sk#29, ss_net_profit#30, ss_sold_date_sk#31] +Input [4]: [ss_addr_sk#24, ss_store_sk#25, ss_net_profit#26, ss_sold_date_sk#27] (34) Filter [codegen id : 1] -Input [4]: [ss_addr_sk#28, ss_store_sk#29, ss_net_profit#30, ss_sold_date_sk#31] -Condition : ((isnotnull(ss_store_sk#29) AND (ss_store_sk#29 = 4)) AND isnull(ss_addr_sk#28)) +Input [4]: [ss_addr_sk#24, ss_store_sk#25, ss_net_profit#26, ss_sold_date_sk#27] +Condition : ((isnotnull(ss_store_sk#25) AND (ss_store_sk#25 = 4)) AND isnull(ss_addr_sk#24)) (35) Project [codegen id : 1] -Output [2]: [ss_store_sk#29, ss_net_profit#30] -Input [4]: [ss_addr_sk#28, ss_store_sk#29, ss_net_profit#30, ss_sold_date_sk#31] +Output [2]: [ss_store_sk#25, ss_net_profit#26] +Input [4]: [ss_addr_sk#24, ss_store_sk#25, ss_net_profit#26, ss_sold_date_sk#27] (36) HashAggregate [codegen id : 1] -Input [2]: [ss_store_sk#29, ss_net_profit#30] -Keys [1]: [ss_store_sk#29] -Functions [1]: [partial_avg(UnscaledValue(ss_net_profit#30))] -Aggregate Attributes [2]: [sum#32, count#33] -Results [3]: [ss_store_sk#29, sum#34, count#35] +Input [2]: [ss_store_sk#25, ss_net_profit#26] +Keys [1]: [ss_store_sk#25] +Functions [1]: [partial_avg(UnscaledValue(ss_net_profit#26))] +Aggregate Attributes [2]: [sum#28, count#29] +Results [3]: [ss_store_sk#25, sum#30, count#31] (37) Exchange -Input [3]: [ss_store_sk#29, sum#34, count#35] -Arguments: hashpartitioning(ss_store_sk#29, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [3]: [ss_store_sk#25, sum#30, count#31] +Arguments: hashpartitioning(ss_store_sk#25, 5), ENSURE_REQUIREMENTS, [plan_id=5] (38) HashAggregate [codegen id : 2] -Input [3]: [ss_store_sk#29, sum#34, count#35] -Keys [1]: [ss_store_sk#29] -Functions [1]: [avg(UnscaledValue(ss_net_profit#30))] -Aggregate Attributes [1]: [avg(UnscaledValue(ss_net_profit#30))#37] -Results [1]: [cast((avg(UnscaledValue(ss_net_profit#30))#37 / 100.0) as decimal(11,6)) AS rank_col#38] +Input [3]: [ss_store_sk#25, sum#30, count#31] +Keys [1]: [ss_store_sk#25] +Functions [1]: [avg(UnscaledValue(ss_net_profit#26))] +Aggregate Attributes [1]: [avg(UnscaledValue(ss_net_profit#26))#32] +Results [1]: [cast((avg(UnscaledValue(ss_net_profit#26))#32 / 100.0) as decimal(11,6)) AS rank_col#33] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q44/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q44/explain.txt index 5783d8b49b6a0..32534fa455e62 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q44/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q44/explain.txt @@ -60,121 +60,121 @@ Results [3]: [ss_item_sk#1, sum#7, count#8] (6) Exchange Input [3]: [ss_item_sk#1, sum#7, count#8] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (7) HashAggregate [codegen id : 2] Input [3]: [ss_item_sk#1, sum#7, count#8] Keys [1]: [ss_item_sk#1] Functions [1]: [avg(UnscaledValue(ss_net_profit#3))] -Aggregate Attributes [1]: [avg(UnscaledValue(ss_net_profit#3))#10] -Results [2]: [ss_item_sk#1 AS item_sk#11, cast((avg(UnscaledValue(ss_net_profit#3))#10 / 100.0) as decimal(11,6)) AS rank_col#12] +Aggregate Attributes [1]: [avg(UnscaledValue(ss_net_profit#3))#9] +Results [2]: [ss_item_sk#1 AS item_sk#10, cast((avg(UnscaledValue(ss_net_profit#3))#9 / 100.0) as decimal(11,6)) AS rank_col#11] (8) Filter [codegen id : 2] -Input [2]: [item_sk#11, rank_col#12] -Condition : (isnotnull(rank_col#12) AND (cast(rank_col#12 as decimal(13,7)) > CheckOverflow((0.900000 * promote_precision(Subquery scalar-subquery#13, [id=#14])), DecimalType(13,7)))) +Input [2]: [item_sk#10, rank_col#11] +Condition : (isnotnull(rank_col#11) AND (cast(rank_col#11 as decimal(13,7)) > CheckOverflow((0.900000 * promote_precision(Subquery scalar-subquery#12, [id=#13])), DecimalType(13,7)))) (9) Exchange -Input [2]: [item_sk#11, rank_col#12] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#15] +Input [2]: [item_sk#10, rank_col#11] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2] (10) Sort [codegen id : 3] -Input [2]: [item_sk#11, rank_col#12] -Arguments: [rank_col#12 ASC NULLS FIRST], false, 0 +Input [2]: [item_sk#10, rank_col#11] +Arguments: [rank_col#11 ASC NULLS FIRST], false, 0 (11) Window -Input [2]: [item_sk#11, rank_col#12] -Arguments: [rank(rank_col#12) windowspecdefinition(rank_col#12 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rnk#16], [rank_col#12 ASC NULLS FIRST] +Input [2]: [item_sk#10, rank_col#11] +Arguments: [rank(rank_col#11) windowspecdefinition(rank_col#11 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rnk#14], [rank_col#11 ASC NULLS FIRST] (12) Filter [codegen id : 4] -Input [3]: [item_sk#11, rank_col#12, rnk#16] -Condition : ((rnk#16 < 11) AND isnotnull(item_sk#11)) +Input [3]: [item_sk#10, rank_col#11, rnk#14] +Condition : ((rnk#14 < 11) AND isnotnull(item_sk#10)) (13) Project [codegen id : 4] -Output [2]: [item_sk#11, rnk#16] -Input [3]: [item_sk#11, rank_col#12, rnk#16] +Output [2]: [item_sk#10, rnk#14] +Input [3]: [item_sk#10, rank_col#11, rnk#14] (14) Sort [codegen id : 4] -Input [2]: [item_sk#11, rnk#16] -Arguments: [rnk#16 ASC NULLS FIRST], false, 0 +Input [2]: [item_sk#10, rnk#14] +Arguments: [rnk#14 ASC NULLS FIRST], false, 0 (15) ReusedExchange [Reuses operator id: 9] -Output [2]: [item_sk#17, rank_col#18] +Output [2]: [item_sk#15, rank_col#16] (16) Sort [codegen id : 7] -Input [2]: [item_sk#17, rank_col#18] -Arguments: [rank_col#18 DESC NULLS LAST], false, 0 +Input [2]: [item_sk#15, rank_col#16] +Arguments: [rank_col#16 DESC NULLS LAST], false, 0 (17) Window -Input [2]: [item_sk#17, rank_col#18] -Arguments: [rank(rank_col#18) windowspecdefinition(rank_col#18 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rnk#19], [rank_col#18 DESC NULLS LAST] +Input [2]: [item_sk#15, rank_col#16] +Arguments: [rank(rank_col#16) windowspecdefinition(rank_col#16 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rnk#17], [rank_col#16 DESC NULLS LAST] (18) Filter [codegen id : 8] -Input [3]: [item_sk#17, rank_col#18, rnk#19] -Condition : ((rnk#19 < 11) AND isnotnull(item_sk#17)) +Input [3]: [item_sk#15, rank_col#16, rnk#17] +Condition : ((rnk#17 < 11) AND isnotnull(item_sk#15)) (19) Project [codegen id : 8] -Output [2]: [item_sk#17, rnk#19] -Input [3]: [item_sk#17, rank_col#18, rnk#19] +Output [2]: [item_sk#15, rnk#17] +Input [3]: [item_sk#15, rank_col#16, rnk#17] (20) Sort [codegen id : 8] -Input [2]: [item_sk#17, rnk#19] -Arguments: [rnk#19 ASC NULLS FIRST], false, 0 +Input [2]: [item_sk#15, rnk#17] +Arguments: [rnk#17 ASC NULLS FIRST], false, 0 (21) SortMergeJoin [codegen id : 11] -Left keys [1]: [rnk#16] -Right keys [1]: [rnk#19] +Left keys [1]: [rnk#14] +Right keys [1]: [rnk#17] Join condition: None (22) Project [codegen id : 11] -Output [3]: [item_sk#11, rnk#16, item_sk#17] -Input [4]: [item_sk#11, rnk#16, item_sk#17, rnk#19] +Output [3]: [item_sk#10, rnk#14, item_sk#15] +Input [4]: [item_sk#10, rnk#14, item_sk#15, rnk#17] (23) Scan parquet default.item -Output [2]: [i_item_sk#20, i_product_name#21] +Output [2]: [i_item_sk#18, i_product_name#19] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (24) ColumnarToRow [codegen id : 9] -Input [2]: [i_item_sk#20, i_product_name#21] +Input [2]: [i_item_sk#18, i_product_name#19] (25) Filter [codegen id : 9] -Input [2]: [i_item_sk#20, i_product_name#21] -Condition : isnotnull(i_item_sk#20) +Input [2]: [i_item_sk#18, i_product_name#19] +Condition : isnotnull(i_item_sk#18) (26) BroadcastExchange -Input [2]: [i_item_sk#20, i_product_name#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#22] +Input [2]: [i_item_sk#18, i_product_name#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (27) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [item_sk#11] -Right keys [1]: [i_item_sk#20] +Left keys [1]: [item_sk#10] +Right keys [1]: [i_item_sk#18] Join condition: None (28) Project [codegen id : 11] -Output [3]: [rnk#16, item_sk#17, i_product_name#21] -Input [5]: [item_sk#11, rnk#16, item_sk#17, i_item_sk#20, i_product_name#21] +Output [3]: [rnk#14, item_sk#15, i_product_name#19] +Input [5]: [item_sk#10, rnk#14, item_sk#15, i_item_sk#18, i_product_name#19] (29) ReusedExchange [Reuses operator id: 26] -Output [2]: [i_item_sk#23, i_product_name#24] +Output [2]: [i_item_sk#20, i_product_name#21] (30) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [item_sk#17] -Right keys [1]: [i_item_sk#23] +Left keys [1]: [item_sk#15] +Right keys [1]: [i_item_sk#20] Join condition: None (31) Project [codegen id : 11] -Output [3]: [rnk#16, i_product_name#21 AS best_performing#25, i_product_name#24 AS worst_performing#26] -Input [5]: [rnk#16, item_sk#17, i_product_name#21, i_item_sk#23, i_product_name#24] +Output [3]: [rnk#14, i_product_name#19 AS best_performing#22, i_product_name#21 AS worst_performing#23] +Input [5]: [rnk#14, item_sk#15, i_product_name#19, i_item_sk#20, i_product_name#21] (32) TakeOrderedAndProject -Input [3]: [rnk#16, best_performing#25, worst_performing#26] -Arguments: 100, [rnk#16 ASC NULLS FIRST], [rnk#16, best_performing#25, worst_performing#26] +Input [3]: [rnk#14, best_performing#22, worst_performing#23] +Arguments: 100, [rnk#14 ASC NULLS FIRST], [rnk#14, best_performing#22, worst_performing#23] ===== Subqueries ===== -Subquery:1 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery#13, [id=#14] +Subquery:1 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery#12, [id=#13] * HashAggregate (39) +- Exchange (38) +- * HashAggregate (37) @@ -185,39 +185,39 @@ Subquery:1 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery (33) Scan parquet default.store_sales -Output [4]: [ss_addr_sk#27, ss_store_sk#28, ss_net_profit#29, ss_sold_date_sk#30] +Output [4]: [ss_addr_sk#24, ss_store_sk#25, ss_net_profit#26, ss_sold_date_sk#27] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_store_sk), EqualTo(ss_store_sk,4), IsNull(ss_addr_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 1] -Input [4]: [ss_addr_sk#27, ss_store_sk#28, ss_net_profit#29, ss_sold_date_sk#30] +Input [4]: [ss_addr_sk#24, ss_store_sk#25, ss_net_profit#26, ss_sold_date_sk#27] (35) Filter [codegen id : 1] -Input [4]: [ss_addr_sk#27, ss_store_sk#28, ss_net_profit#29, ss_sold_date_sk#30] -Condition : ((isnotnull(ss_store_sk#28) AND (ss_store_sk#28 = 4)) AND isnull(ss_addr_sk#27)) +Input [4]: [ss_addr_sk#24, ss_store_sk#25, ss_net_profit#26, ss_sold_date_sk#27] +Condition : ((isnotnull(ss_store_sk#25) AND (ss_store_sk#25 = 4)) AND isnull(ss_addr_sk#24)) (36) Project [codegen id : 1] -Output [2]: [ss_store_sk#28, ss_net_profit#29] -Input [4]: [ss_addr_sk#27, ss_store_sk#28, ss_net_profit#29, ss_sold_date_sk#30] +Output [2]: [ss_store_sk#25, ss_net_profit#26] +Input [4]: [ss_addr_sk#24, ss_store_sk#25, ss_net_profit#26, ss_sold_date_sk#27] (37) HashAggregate [codegen id : 1] -Input [2]: [ss_store_sk#28, ss_net_profit#29] -Keys [1]: [ss_store_sk#28] -Functions [1]: [partial_avg(UnscaledValue(ss_net_profit#29))] -Aggregate Attributes [2]: [sum#31, count#32] -Results [3]: [ss_store_sk#28, sum#33, count#34] +Input [2]: [ss_store_sk#25, ss_net_profit#26] +Keys [1]: [ss_store_sk#25] +Functions [1]: [partial_avg(UnscaledValue(ss_net_profit#26))] +Aggregate Attributes [2]: [sum#28, count#29] +Results [3]: [ss_store_sk#25, sum#30, count#31] (38) Exchange -Input [3]: [ss_store_sk#28, sum#33, count#34] -Arguments: hashpartitioning(ss_store_sk#28, 5), ENSURE_REQUIREMENTS, [id=#35] +Input [3]: [ss_store_sk#25, sum#30, count#31] +Arguments: hashpartitioning(ss_store_sk#25, 5), ENSURE_REQUIREMENTS, [plan_id=4] (39) HashAggregate [codegen id : 2] -Input [3]: [ss_store_sk#28, sum#33, count#34] -Keys [1]: [ss_store_sk#28] -Functions [1]: [avg(UnscaledValue(ss_net_profit#29))] -Aggregate Attributes [1]: [avg(UnscaledValue(ss_net_profit#29))#36] -Results [1]: [cast((avg(UnscaledValue(ss_net_profit#29))#36 / 100.0) as decimal(11,6)) AS rank_col#37] +Input [3]: [ss_store_sk#25, sum#30, count#31] +Keys [1]: [ss_store_sk#25] +Functions [1]: [avg(UnscaledValue(ss_net_profit#26))] +Aggregate Attributes [1]: [avg(UnscaledValue(ss_net_profit#26))#32] +Results [1]: [cast((avg(UnscaledValue(ss_net_profit#26))#32 / 100.0) as decimal(11,6)) AS rank_col#33] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q45.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q45.sf100/explain.txt index d5a234a920211..05c0d0077dc66 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q45.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q45.sf100/explain.txt @@ -86,7 +86,7 @@ Condition : isnotnull(i_item_sk#8) (10) BroadcastExchange Input [2]: [i_item_sk#8, i_item_id#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ws_item_sk#2] @@ -99,138 +99,138 @@ Input [5]: [ws_item_sk#2, ws_bill_customer_sk#3, ws_sales_price#4, i_item_sk#8, (13) Exchange Input [3]: [ws_bill_customer_sk#3, ws_sales_price#4, i_item_id#9] -Arguments: hashpartitioning(ws_bill_customer_sk#3, 5), ENSURE_REQUIREMENTS, [id=#11] +Arguments: hashpartitioning(ws_bill_customer_sk#3, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) Sort [codegen id : 4] Input [3]: [ws_bill_customer_sk#3, ws_sales_price#4, i_item_id#9] Arguments: [ws_bill_customer_sk#3 ASC NULLS FIRST], false, 0 (15) Scan parquet default.customer -Output [2]: [c_customer_sk#12, c_current_addr_sk#13] +Output [2]: [c_customer_sk#10, c_current_addr_sk#11] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [2]: [c_customer_sk#12, c_current_addr_sk#13] +Input [2]: [c_customer_sk#10, c_current_addr_sk#11] (17) Filter [codegen id : 5] -Input [2]: [c_customer_sk#12, c_current_addr_sk#13] -Condition : (isnotnull(c_customer_sk#12) AND isnotnull(c_current_addr_sk#13)) +Input [2]: [c_customer_sk#10, c_current_addr_sk#11] +Condition : (isnotnull(c_customer_sk#10) AND isnotnull(c_current_addr_sk#11)) (18) Exchange -Input [2]: [c_customer_sk#12, c_current_addr_sk#13] -Arguments: hashpartitioning(c_current_addr_sk#13, 5), ENSURE_REQUIREMENTS, [id=#14] +Input [2]: [c_customer_sk#10, c_current_addr_sk#11] +Arguments: hashpartitioning(c_current_addr_sk#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 6] -Input [2]: [c_customer_sk#12, c_current_addr_sk#13] -Arguments: [c_current_addr_sk#13 ASC NULLS FIRST], false, 0 +Input [2]: [c_customer_sk#10, c_current_addr_sk#11] +Arguments: [c_current_addr_sk#11 ASC NULLS FIRST], false, 0 (20) Scan parquet default.customer_address -Output [3]: [ca_address_sk#15, ca_city#16, ca_zip#17] +Output [3]: [ca_address_sk#12, ca_city#13, ca_zip#14] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 7] -Input [3]: [ca_address_sk#15, ca_city#16, ca_zip#17] +Input [3]: [ca_address_sk#12, ca_city#13, ca_zip#14] (22) Filter [codegen id : 7] -Input [3]: [ca_address_sk#15, ca_city#16, ca_zip#17] -Condition : isnotnull(ca_address_sk#15) +Input [3]: [ca_address_sk#12, ca_city#13, ca_zip#14] +Condition : isnotnull(ca_address_sk#12) (23) Exchange -Input [3]: [ca_address_sk#15, ca_city#16, ca_zip#17] -Arguments: hashpartitioning(ca_address_sk#15, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [3]: [ca_address_sk#12, ca_city#13, ca_zip#14] +Arguments: hashpartitioning(ca_address_sk#12, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 8] -Input [3]: [ca_address_sk#15, ca_city#16, ca_zip#17] -Arguments: [ca_address_sk#15 ASC NULLS FIRST], false, 0 +Input [3]: [ca_address_sk#12, ca_city#13, ca_zip#14] +Arguments: [ca_address_sk#12 ASC NULLS FIRST], false, 0 (25) SortMergeJoin [codegen id : 9] -Left keys [1]: [c_current_addr_sk#13] -Right keys [1]: [ca_address_sk#15] +Left keys [1]: [c_current_addr_sk#11] +Right keys [1]: [ca_address_sk#12] Join condition: None (26) Project [codegen id : 9] -Output [3]: [c_customer_sk#12, ca_city#16, ca_zip#17] -Input [5]: [c_customer_sk#12, c_current_addr_sk#13, ca_address_sk#15, ca_city#16, ca_zip#17] +Output [3]: [c_customer_sk#10, ca_city#13, ca_zip#14] +Input [5]: [c_customer_sk#10, c_current_addr_sk#11, ca_address_sk#12, ca_city#13, ca_zip#14] (27) Exchange -Input [3]: [c_customer_sk#12, ca_city#16, ca_zip#17] -Arguments: hashpartitioning(c_customer_sk#12, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [3]: [c_customer_sk#10, ca_city#13, ca_zip#14] +Arguments: hashpartitioning(c_customer_sk#10, 5), ENSURE_REQUIREMENTS, [plan_id=5] (28) Sort [codegen id : 10] -Input [3]: [c_customer_sk#12, ca_city#16, ca_zip#17] -Arguments: [c_customer_sk#12 ASC NULLS FIRST], false, 0 +Input [3]: [c_customer_sk#10, ca_city#13, ca_zip#14] +Arguments: [c_customer_sk#10 ASC NULLS FIRST], false, 0 (29) SortMergeJoin [codegen id : 12] Left keys [1]: [ws_bill_customer_sk#3] -Right keys [1]: [c_customer_sk#12] +Right keys [1]: [c_customer_sk#10] Join condition: None (30) Project [codegen id : 12] -Output [4]: [ws_sales_price#4, ca_city#16, ca_zip#17, i_item_id#9] -Input [6]: [ws_bill_customer_sk#3, ws_sales_price#4, i_item_id#9, c_customer_sk#12, ca_city#16, ca_zip#17] +Output [4]: [ws_sales_price#4, ca_city#13, ca_zip#14, i_item_id#9] +Input [6]: [ws_bill_customer_sk#3, ws_sales_price#4, i_item_id#9, c_customer_sk#10, ca_city#13, ca_zip#14] (31) Scan parquet default.item -Output [2]: [i_item_sk#20, i_item_id#21] +Output [2]: [i_item_sk#15, i_item_id#16] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [In(i_item_sk, [11,13,17,19,2,23,29,3,5,7])] ReadSchema: struct (32) ColumnarToRow [codegen id : 11] -Input [2]: [i_item_sk#20, i_item_id#21] +Input [2]: [i_item_sk#15, i_item_id#16] (33) Filter [codegen id : 11] -Input [2]: [i_item_sk#20, i_item_id#21] -Condition : i_item_sk#20 IN (2,3,5,7,11,13,17,19,23,29) +Input [2]: [i_item_sk#15, i_item_id#16] +Condition : i_item_sk#15 IN (2,3,5,7,11,13,17,19,23,29) (34) Project [codegen id : 11] -Output [1]: [i_item_id#21] -Input [2]: [i_item_sk#20, i_item_id#21] +Output [1]: [i_item_id#16] +Input [2]: [i_item_sk#15, i_item_id#16] (35) BroadcastExchange -Input [1]: [i_item_id#21] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#22] +Input [1]: [i_item_id#16] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=6] (36) BroadcastHashJoin [codegen id : 12] Left keys [1]: [i_item_id#9] -Right keys [1]: [i_item_id#21] +Right keys [1]: [i_item_id#16] Join condition: None (37) Filter [codegen id : 12] -Input [5]: [ws_sales_price#4, ca_city#16, ca_zip#17, i_item_id#9, exists#1] -Condition : (substr(ca_zip#17, 1, 5) IN (85669,86197,88274,83405,86475,85392,85460,80348,81792) OR exists#1) +Input [5]: [ws_sales_price#4, ca_city#13, ca_zip#14, i_item_id#9, exists#1] +Condition : (substr(ca_zip#14, 1, 5) IN (85669,86197,88274,83405,86475,85392,85460,80348,81792) OR exists#1) (38) Project [codegen id : 12] -Output [3]: [ws_sales_price#4, ca_city#16, ca_zip#17] -Input [5]: [ws_sales_price#4, ca_city#16, ca_zip#17, i_item_id#9, exists#1] +Output [3]: [ws_sales_price#4, ca_city#13, ca_zip#14] +Input [5]: [ws_sales_price#4, ca_city#13, ca_zip#14, i_item_id#9, exists#1] (39) HashAggregate [codegen id : 12] -Input [3]: [ws_sales_price#4, ca_city#16, ca_zip#17] -Keys [2]: [ca_zip#17, ca_city#16] +Input [3]: [ws_sales_price#4, ca_city#13, ca_zip#14] +Keys [2]: [ca_zip#14, ca_city#13] Functions [1]: [partial_sum(UnscaledValue(ws_sales_price#4))] -Aggregate Attributes [1]: [sum#23] -Results [3]: [ca_zip#17, ca_city#16, sum#24] +Aggregate Attributes [1]: [sum#17] +Results [3]: [ca_zip#14, ca_city#13, sum#18] (40) Exchange -Input [3]: [ca_zip#17, ca_city#16, sum#24] -Arguments: hashpartitioning(ca_zip#17, ca_city#16, 5), ENSURE_REQUIREMENTS, [id=#25] +Input [3]: [ca_zip#14, ca_city#13, sum#18] +Arguments: hashpartitioning(ca_zip#14, ca_city#13, 5), ENSURE_REQUIREMENTS, [plan_id=7] (41) HashAggregate [codegen id : 13] -Input [3]: [ca_zip#17, ca_city#16, sum#24] -Keys [2]: [ca_zip#17, ca_city#16] +Input [3]: [ca_zip#14, ca_city#13, sum#18] +Keys [2]: [ca_zip#14, ca_city#13] Functions [1]: [sum(UnscaledValue(ws_sales_price#4))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_sales_price#4))#26] -Results [3]: [ca_zip#17, ca_city#16, MakeDecimal(sum(UnscaledValue(ws_sales_price#4))#26,17,2) AS sum(ws_sales_price)#27] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_sales_price#4))#19] +Results [3]: [ca_zip#14, ca_city#13, MakeDecimal(sum(UnscaledValue(ws_sales_price#4))#19,17,2) AS sum(ws_sales_price)#20] (42) TakeOrderedAndProject -Input [3]: [ca_zip#17, ca_city#16, sum(ws_sales_price)#27] -Arguments: 100, [ca_zip#17 ASC NULLS FIRST, ca_city#16 ASC NULLS FIRST], [ca_zip#17, ca_city#16, sum(ws_sales_price)#27] +Input [3]: [ca_zip#14, ca_city#13, sum(ws_sales_price)#20] +Arguments: 100, [ca_zip#14 ASC NULLS FIRST, ca_city#13 ASC NULLS FIRST], [ca_zip#14, ca_city#13, sum(ws_sales_price)#20] ===== Subqueries ===== @@ -243,25 +243,25 @@ BroadcastExchange (47) (43) Scan parquet default.date_dim -Output [3]: [d_date_sk#7, d_year#28, d_qoy#29] +Output [3]: [d_date_sk#7, d_year#21, d_qoy#22] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,2), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#28, d_qoy#29] +Input [3]: [d_date_sk#7, d_year#21, d_qoy#22] (45) Filter [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#28, d_qoy#29] -Condition : ((((isnotnull(d_qoy#29) AND isnotnull(d_year#28)) AND (d_qoy#29 = 2)) AND (d_year#28 = 2001)) AND isnotnull(d_date_sk#7)) +Input [3]: [d_date_sk#7, d_year#21, d_qoy#22] +Condition : ((((isnotnull(d_qoy#22) AND isnotnull(d_year#21)) AND (d_qoy#22 = 2)) AND (d_year#21 = 2001)) AND isnotnull(d_date_sk#7)) (46) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [3]: [d_date_sk#7, d_year#28, d_qoy#29] +Input [3]: [d_date_sk#7, d_year#21, d_qoy#22] (47) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#30] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q45/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q45/explain.txt index 80f9379309580..7dc60b8a0bb81 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q45/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q45/explain.txt @@ -68,7 +68,7 @@ Condition : (isnotnull(c_customer_sk#7) AND isnotnull(c_current_addr_sk#8)) (7) BroadcastExchange Input [2]: [c_customer_sk#7, c_current_addr_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ws_bill_customer_sk#3] @@ -80,127 +80,127 @@ Output [4]: [ws_item_sk#2, ws_sales_price#4, ws_sold_date_sk#5, c_current_addr_s Input [6]: [ws_item_sk#2, ws_bill_customer_sk#3, ws_sales_price#4, ws_sold_date_sk#5, c_customer_sk#7, c_current_addr_sk#8] (10) Scan parquet default.customer_address -Output [3]: [ca_address_sk#10, ca_city#11, ca_zip#12] +Output [3]: [ca_address_sk#9, ca_city#10, ca_zip#11] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [3]: [ca_address_sk#10, ca_city#11, ca_zip#12] +Input [3]: [ca_address_sk#9, ca_city#10, ca_zip#11] (12) Filter [codegen id : 2] -Input [3]: [ca_address_sk#10, ca_city#11, ca_zip#12] -Condition : isnotnull(ca_address_sk#10) +Input [3]: [ca_address_sk#9, ca_city#10, ca_zip#11] +Condition : isnotnull(ca_address_sk#9) (13) BroadcastExchange -Input [3]: [ca_address_sk#10, ca_city#11, ca_zip#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#13] +Input [3]: [ca_address_sk#9, ca_city#10, ca_zip#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 6] Left keys [1]: [c_current_addr_sk#8] -Right keys [1]: [ca_address_sk#10] +Right keys [1]: [ca_address_sk#9] Join condition: None (15) Project [codegen id : 6] -Output [5]: [ws_item_sk#2, ws_sales_price#4, ws_sold_date_sk#5, ca_city#11, ca_zip#12] -Input [7]: [ws_item_sk#2, ws_sales_price#4, ws_sold_date_sk#5, c_current_addr_sk#8, ca_address_sk#10, ca_city#11, ca_zip#12] +Output [5]: [ws_item_sk#2, ws_sales_price#4, ws_sold_date_sk#5, ca_city#10, ca_zip#11] +Input [7]: [ws_item_sk#2, ws_sales_price#4, ws_sold_date_sk#5, c_current_addr_sk#8, ca_address_sk#9, ca_city#10, ca_zip#11] (16) ReusedExchange [Reuses operator id: 41] -Output [1]: [d_date_sk#14] +Output [1]: [d_date_sk#12] (17) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ws_sold_date_sk#5] -Right keys [1]: [d_date_sk#14] +Right keys [1]: [d_date_sk#12] Join condition: None (18) Project [codegen id : 6] -Output [4]: [ws_item_sk#2, ws_sales_price#4, ca_city#11, ca_zip#12] -Input [6]: [ws_item_sk#2, ws_sales_price#4, ws_sold_date_sk#5, ca_city#11, ca_zip#12, d_date_sk#14] +Output [4]: [ws_item_sk#2, ws_sales_price#4, ca_city#10, ca_zip#11] +Input [6]: [ws_item_sk#2, ws_sales_price#4, ws_sold_date_sk#5, ca_city#10, ca_zip#11, d_date_sk#12] (19) Scan parquet default.item -Output [2]: [i_item_sk#15, i_item_id#16] +Output [2]: [i_item_sk#13, i_item_id#14] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#15, i_item_id#16] +Input [2]: [i_item_sk#13, i_item_id#14] (21) Filter [codegen id : 4] -Input [2]: [i_item_sk#15, i_item_id#16] -Condition : isnotnull(i_item_sk#15) +Input [2]: [i_item_sk#13, i_item_id#14] +Condition : isnotnull(i_item_sk#13) (22) BroadcastExchange -Input [2]: [i_item_sk#15, i_item_id#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#17] +Input [2]: [i_item_sk#13, i_item_id#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (23) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ws_item_sk#2] -Right keys [1]: [i_item_sk#15] +Right keys [1]: [i_item_sk#13] Join condition: None (24) Project [codegen id : 6] -Output [4]: [ws_sales_price#4, ca_city#11, ca_zip#12, i_item_id#16] -Input [6]: [ws_item_sk#2, ws_sales_price#4, ca_city#11, ca_zip#12, i_item_sk#15, i_item_id#16] +Output [4]: [ws_sales_price#4, ca_city#10, ca_zip#11, i_item_id#14] +Input [6]: [ws_item_sk#2, ws_sales_price#4, ca_city#10, ca_zip#11, i_item_sk#13, i_item_id#14] (25) Scan parquet default.item -Output [2]: [i_item_sk#18, i_item_id#19] +Output [2]: [i_item_sk#15, i_item_id#16] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [In(i_item_sk, [11,13,17,19,2,23,29,3,5,7])] ReadSchema: struct (26) ColumnarToRow [codegen id : 5] -Input [2]: [i_item_sk#18, i_item_id#19] +Input [2]: [i_item_sk#15, i_item_id#16] (27) Filter [codegen id : 5] -Input [2]: [i_item_sk#18, i_item_id#19] -Condition : i_item_sk#18 IN (2,3,5,7,11,13,17,19,23,29) +Input [2]: [i_item_sk#15, i_item_id#16] +Condition : i_item_sk#15 IN (2,3,5,7,11,13,17,19,23,29) (28) Project [codegen id : 5] -Output [1]: [i_item_id#19] -Input [2]: [i_item_sk#18, i_item_id#19] +Output [1]: [i_item_id#16] +Input [2]: [i_item_sk#15, i_item_id#16] (29) BroadcastExchange -Input [1]: [i_item_id#19] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#20] +Input [1]: [i_item_id#16] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=4] (30) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [i_item_id#16] -Right keys [1]: [i_item_id#19] +Left keys [1]: [i_item_id#14] +Right keys [1]: [i_item_id#16] Join condition: None (31) Filter [codegen id : 6] -Input [5]: [ws_sales_price#4, ca_city#11, ca_zip#12, i_item_id#16, exists#1] -Condition : (substr(ca_zip#12, 1, 5) IN (85669,86197,88274,83405,86475,85392,85460,80348,81792) OR exists#1) +Input [5]: [ws_sales_price#4, ca_city#10, ca_zip#11, i_item_id#14, exists#1] +Condition : (substr(ca_zip#11, 1, 5) IN (85669,86197,88274,83405,86475,85392,85460,80348,81792) OR exists#1) (32) Project [codegen id : 6] -Output [3]: [ws_sales_price#4, ca_city#11, ca_zip#12] -Input [5]: [ws_sales_price#4, ca_city#11, ca_zip#12, i_item_id#16, exists#1] +Output [3]: [ws_sales_price#4, ca_city#10, ca_zip#11] +Input [5]: [ws_sales_price#4, ca_city#10, ca_zip#11, i_item_id#14, exists#1] (33) HashAggregate [codegen id : 6] -Input [3]: [ws_sales_price#4, ca_city#11, ca_zip#12] -Keys [2]: [ca_zip#12, ca_city#11] +Input [3]: [ws_sales_price#4, ca_city#10, ca_zip#11] +Keys [2]: [ca_zip#11, ca_city#10] Functions [1]: [partial_sum(UnscaledValue(ws_sales_price#4))] -Aggregate Attributes [1]: [sum#21] -Results [3]: [ca_zip#12, ca_city#11, sum#22] +Aggregate Attributes [1]: [sum#17] +Results [3]: [ca_zip#11, ca_city#10, sum#18] (34) Exchange -Input [3]: [ca_zip#12, ca_city#11, sum#22] -Arguments: hashpartitioning(ca_zip#12, ca_city#11, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [3]: [ca_zip#11, ca_city#10, sum#18] +Arguments: hashpartitioning(ca_zip#11, ca_city#10, 5), ENSURE_REQUIREMENTS, [plan_id=5] (35) HashAggregate [codegen id : 7] -Input [3]: [ca_zip#12, ca_city#11, sum#22] -Keys [2]: [ca_zip#12, ca_city#11] +Input [3]: [ca_zip#11, ca_city#10, sum#18] +Keys [2]: [ca_zip#11, ca_city#10] Functions [1]: [sum(UnscaledValue(ws_sales_price#4))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_sales_price#4))#24] -Results [3]: [ca_zip#12, ca_city#11, MakeDecimal(sum(UnscaledValue(ws_sales_price#4))#24,17,2) AS sum(ws_sales_price)#25] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_sales_price#4))#19] +Results [3]: [ca_zip#11, ca_city#10, MakeDecimal(sum(UnscaledValue(ws_sales_price#4))#19,17,2) AS sum(ws_sales_price)#20] (36) TakeOrderedAndProject -Input [3]: [ca_zip#12, ca_city#11, sum(ws_sales_price)#25] -Arguments: 100, [ca_zip#12 ASC NULLS FIRST, ca_city#11 ASC NULLS FIRST], [ca_zip#12, ca_city#11, sum(ws_sales_price)#25] +Input [3]: [ca_zip#11, ca_city#10, sum(ws_sales_price)#20] +Arguments: 100, [ca_zip#11 ASC NULLS FIRST, ca_city#10 ASC NULLS FIRST], [ca_zip#11, ca_city#10, sum(ws_sales_price)#20] ===== Subqueries ===== @@ -213,25 +213,25 @@ BroadcastExchange (41) (37) Scan parquet default.date_dim -Output [3]: [d_date_sk#14, d_year#26, d_qoy#27] +Output [3]: [d_date_sk#12, d_year#21, d_qoy#22] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,2), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (38) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#14, d_year#26, d_qoy#27] +Input [3]: [d_date_sk#12, d_year#21, d_qoy#22] (39) Filter [codegen id : 1] -Input [3]: [d_date_sk#14, d_year#26, d_qoy#27] -Condition : ((((isnotnull(d_qoy#27) AND isnotnull(d_year#26)) AND (d_qoy#27 = 2)) AND (d_year#26 = 2001)) AND isnotnull(d_date_sk#14)) +Input [3]: [d_date_sk#12, d_year#21, d_qoy#22] +Condition : ((((isnotnull(d_qoy#22) AND isnotnull(d_year#21)) AND (d_qoy#22 = 2)) AND (d_year#21 = 2001)) AND isnotnull(d_date_sk#12)) (40) Project [codegen id : 1] -Output [1]: [d_date_sk#14] -Input [3]: [d_date_sk#14, d_year#26, d_qoy#27] +Output [1]: [d_date_sk#12] +Input [3]: [d_date_sk#12, d_year#21, d_qoy#22] (41) BroadcastExchange -Input [1]: [d_date_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#28] +Input [1]: [d_date_sk#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q46.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q46.sf100/explain.txt index 07017d1b64697..c4c1d5c370771 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q46.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q46.sf100/explain.txt @@ -64,202 +64,202 @@ Condition : (isnotnull(c_customer_sk#1) AND isnotnull(c_current_addr_sk#2)) (4) Exchange Input [4]: [c_customer_sk#1, c_current_addr_sk#2, c_first_name#3, c_last_name#4] -Arguments: hashpartitioning(c_current_addr_sk#2, 5), ENSURE_REQUIREMENTS, [id=#5] +Arguments: hashpartitioning(c_current_addr_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [4]: [c_customer_sk#1, c_current_addr_sk#2, c_first_name#3, c_last_name#4] Arguments: [c_current_addr_sk#2 ASC NULLS FIRST], false, 0 (6) Scan parquet default.customer_address -Output [2]: [ca_address_sk#6, ca_city#7] +Output [2]: [ca_address_sk#5, ca_city#6] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_city)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [2]: [ca_address_sk#6, ca_city#7] +Input [2]: [ca_address_sk#5, ca_city#6] (8) Filter [codegen id : 3] -Input [2]: [ca_address_sk#6, ca_city#7] -Condition : (isnotnull(ca_address_sk#6) AND isnotnull(ca_city#7)) +Input [2]: [ca_address_sk#5, ca_city#6] +Condition : (isnotnull(ca_address_sk#5) AND isnotnull(ca_city#6)) (9) Exchange -Input [2]: [ca_address_sk#6, ca_city#7] -Arguments: hashpartitioning(ca_address_sk#6, 5), ENSURE_REQUIREMENTS, [id=#8] +Input [2]: [ca_address_sk#5, ca_city#6] +Arguments: hashpartitioning(ca_address_sk#5, 5), ENSURE_REQUIREMENTS, [plan_id=2] (10) Sort [codegen id : 4] -Input [2]: [ca_address_sk#6, ca_city#7] -Arguments: [ca_address_sk#6 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#5, ca_city#6] +Arguments: [ca_address_sk#5 ASC NULLS FIRST], false, 0 (11) SortMergeJoin [codegen id : 5] Left keys [1]: [c_current_addr_sk#2] -Right keys [1]: [ca_address_sk#6] +Right keys [1]: [ca_address_sk#5] Join condition: None (12) Project [codegen id : 5] -Output [4]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#7] -Input [6]: [c_customer_sk#1, c_current_addr_sk#2, c_first_name#3, c_last_name#4, ca_address_sk#6, ca_city#7] +Output [4]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#6] +Input [6]: [c_customer_sk#1, c_current_addr_sk#2, c_first_name#3, c_last_name#4, ca_address_sk#5, ca_city#6] (13) Exchange -Input [4]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#7] -Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#9] +Input [4]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#6] +Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (14) Sort [codegen id : 6] -Input [4]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#7] +Input [4]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#6] Arguments: [c_customer_sk#1 ASC NULLS FIRST], false, 0 (15) Scan parquet default.store_sales -Output [8]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_store_sk#13, ss_ticket_number#14, ss_coupon_amt#15, ss_net_profit#16, ss_sold_date_sk#17] +Output [8]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_coupon_amt#12, ss_net_profit#13, ss_sold_date_sk#14] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#17), dynamicpruningexpression(ss_sold_date_sk#17 IN dynamicpruning#18)] +PartitionFilters: [isnotnull(ss_sold_date_sk#14), dynamicpruningexpression(ss_sold_date_sk#14 IN dynamicpruning#15)] PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (16) ColumnarToRow [codegen id : 10] -Input [8]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_store_sk#13, ss_ticket_number#14, ss_coupon_amt#15, ss_net_profit#16, ss_sold_date_sk#17] +Input [8]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_coupon_amt#12, ss_net_profit#13, ss_sold_date_sk#14] (17) Filter [codegen id : 10] -Input [8]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_store_sk#13, ss_ticket_number#14, ss_coupon_amt#15, ss_net_profit#16, ss_sold_date_sk#17] -Condition : (((isnotnull(ss_store_sk#13) AND isnotnull(ss_hdemo_sk#11)) AND isnotnull(ss_addr_sk#12)) AND isnotnull(ss_customer_sk#10)) +Input [8]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_coupon_amt#12, ss_net_profit#13, ss_sold_date_sk#14] +Condition : (((isnotnull(ss_store_sk#10) AND isnotnull(ss_hdemo_sk#8)) AND isnotnull(ss_addr_sk#9)) AND isnotnull(ss_customer_sk#7)) (18) ReusedExchange [Reuses operator id: 52] -Output [1]: [d_date_sk#19] +Output [1]: [d_date_sk#16] (19) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_sold_date_sk#17] -Right keys [1]: [d_date_sk#19] +Left keys [1]: [ss_sold_date_sk#14] +Right keys [1]: [d_date_sk#16] Join condition: None (20) Project [codegen id : 10] -Output [7]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_store_sk#13, ss_ticket_number#14, ss_coupon_amt#15, ss_net_profit#16] -Input [9]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_store_sk#13, ss_ticket_number#14, ss_coupon_amt#15, ss_net_profit#16, ss_sold_date_sk#17, d_date_sk#19] +Output [7]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_coupon_amt#12, ss_net_profit#13] +Input [9]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_coupon_amt#12, ss_net_profit#13, ss_sold_date_sk#14, d_date_sk#16] (21) Scan parquet default.store -Output [2]: [s_store_sk#20, s_city#21] +Output [2]: [s_store_sk#17, s_city#18] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [In(s_city, [Fairview,Midway]), IsNotNull(s_store_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 8] -Input [2]: [s_store_sk#20, s_city#21] +Input [2]: [s_store_sk#17, s_city#18] (23) Filter [codegen id : 8] -Input [2]: [s_store_sk#20, s_city#21] -Condition : (s_city#21 IN (Fairview,Midway) AND isnotnull(s_store_sk#20)) +Input [2]: [s_store_sk#17, s_city#18] +Condition : (s_city#18 IN (Fairview,Midway) AND isnotnull(s_store_sk#17)) (24) Project [codegen id : 8] -Output [1]: [s_store_sk#20] -Input [2]: [s_store_sk#20, s_city#21] +Output [1]: [s_store_sk#17] +Input [2]: [s_store_sk#17, s_city#18] (25) BroadcastExchange -Input [1]: [s_store_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [s_store_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (26) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_store_sk#13] -Right keys [1]: [s_store_sk#20] +Left keys [1]: [ss_store_sk#10] +Right keys [1]: [s_store_sk#17] Join condition: None (27) Project [codegen id : 10] -Output [6]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_ticket_number#14, ss_coupon_amt#15, ss_net_profit#16] -Input [8]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_store_sk#13, ss_ticket_number#14, ss_coupon_amt#15, ss_net_profit#16, s_store_sk#20] +Output [6]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_ticket_number#11, ss_coupon_amt#12, ss_net_profit#13] +Input [8]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_coupon_amt#12, ss_net_profit#13, s_store_sk#17] (28) Scan parquet default.household_demographics -Output [3]: [hd_demo_sk#23, hd_dep_count#24, hd_vehicle_count#25] +Output [3]: [hd_demo_sk#19, hd_dep_count#20, hd_vehicle_count#21] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [Or(EqualTo(hd_dep_count,4),EqualTo(hd_vehicle_count,3)), IsNotNull(hd_demo_sk)] ReadSchema: struct (29) ColumnarToRow [codegen id : 9] -Input [3]: [hd_demo_sk#23, hd_dep_count#24, hd_vehicle_count#25] +Input [3]: [hd_demo_sk#19, hd_dep_count#20, hd_vehicle_count#21] (30) Filter [codegen id : 9] -Input [3]: [hd_demo_sk#23, hd_dep_count#24, hd_vehicle_count#25] -Condition : (((hd_dep_count#24 = 4) OR (hd_vehicle_count#25 = 3)) AND isnotnull(hd_demo_sk#23)) +Input [3]: [hd_demo_sk#19, hd_dep_count#20, hd_vehicle_count#21] +Condition : (((hd_dep_count#20 = 4) OR (hd_vehicle_count#21 = 3)) AND isnotnull(hd_demo_sk#19)) (31) Project [codegen id : 9] -Output [1]: [hd_demo_sk#23] -Input [3]: [hd_demo_sk#23, hd_dep_count#24, hd_vehicle_count#25] +Output [1]: [hd_demo_sk#19] +Input [3]: [hd_demo_sk#19, hd_dep_count#20, hd_vehicle_count#21] (32) BroadcastExchange -Input [1]: [hd_demo_sk#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [1]: [hd_demo_sk#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (33) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_hdemo_sk#11] -Right keys [1]: [hd_demo_sk#23] +Left keys [1]: [ss_hdemo_sk#8] +Right keys [1]: [hd_demo_sk#19] Join condition: None (34) Project [codegen id : 10] -Output [5]: [ss_customer_sk#10, ss_addr_sk#12, ss_ticket_number#14, ss_coupon_amt#15, ss_net_profit#16] -Input [7]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_ticket_number#14, ss_coupon_amt#15, ss_net_profit#16, hd_demo_sk#23] +Output [5]: [ss_customer_sk#7, ss_addr_sk#9, ss_ticket_number#11, ss_coupon_amt#12, ss_net_profit#13] +Input [7]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_ticket_number#11, ss_coupon_amt#12, ss_net_profit#13, hd_demo_sk#19] (35) Exchange -Input [5]: [ss_customer_sk#10, ss_addr_sk#12, ss_ticket_number#14, ss_coupon_amt#15, ss_net_profit#16] -Arguments: hashpartitioning(ss_addr_sk#12, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [5]: [ss_customer_sk#7, ss_addr_sk#9, ss_ticket_number#11, ss_coupon_amt#12, ss_net_profit#13] +Arguments: hashpartitioning(ss_addr_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=6] (36) Sort [codegen id : 11] -Input [5]: [ss_customer_sk#10, ss_addr_sk#12, ss_ticket_number#14, ss_coupon_amt#15, ss_net_profit#16] -Arguments: [ss_addr_sk#12 ASC NULLS FIRST], false, 0 +Input [5]: [ss_customer_sk#7, ss_addr_sk#9, ss_ticket_number#11, ss_coupon_amt#12, ss_net_profit#13] +Arguments: [ss_addr_sk#9 ASC NULLS FIRST], false, 0 (37) ReusedExchange [Reuses operator id: 9] -Output [2]: [ca_address_sk#28, ca_city#29] +Output [2]: [ca_address_sk#22, ca_city#23] (38) Sort [codegen id : 13] -Input [2]: [ca_address_sk#28, ca_city#29] -Arguments: [ca_address_sk#28 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#22, ca_city#23] +Arguments: [ca_address_sk#22 ASC NULLS FIRST], false, 0 (39) SortMergeJoin [codegen id : 14] -Left keys [1]: [ss_addr_sk#12] -Right keys [1]: [ca_address_sk#28] +Left keys [1]: [ss_addr_sk#9] +Right keys [1]: [ca_address_sk#22] Join condition: None (40) Project [codegen id : 14] -Output [6]: [ss_customer_sk#10, ss_addr_sk#12, ss_ticket_number#14, ss_coupon_amt#15, ss_net_profit#16, ca_city#29] -Input [7]: [ss_customer_sk#10, ss_addr_sk#12, ss_ticket_number#14, ss_coupon_amt#15, ss_net_profit#16, ca_address_sk#28, ca_city#29] +Output [6]: [ss_customer_sk#7, ss_addr_sk#9, ss_ticket_number#11, ss_coupon_amt#12, ss_net_profit#13, ca_city#23] +Input [7]: [ss_customer_sk#7, ss_addr_sk#9, ss_ticket_number#11, ss_coupon_amt#12, ss_net_profit#13, ca_address_sk#22, ca_city#23] (41) HashAggregate [codegen id : 14] -Input [6]: [ss_customer_sk#10, ss_addr_sk#12, ss_ticket_number#14, ss_coupon_amt#15, ss_net_profit#16, ca_city#29] -Keys [4]: [ss_ticket_number#14, ss_customer_sk#10, ss_addr_sk#12, ca_city#29] -Functions [2]: [partial_sum(UnscaledValue(ss_coupon_amt#15)), partial_sum(UnscaledValue(ss_net_profit#16))] -Aggregate Attributes [2]: [sum#30, sum#31] -Results [6]: [ss_ticket_number#14, ss_customer_sk#10, ss_addr_sk#12, ca_city#29, sum#32, sum#33] +Input [6]: [ss_customer_sk#7, ss_addr_sk#9, ss_ticket_number#11, ss_coupon_amt#12, ss_net_profit#13, ca_city#23] +Keys [4]: [ss_ticket_number#11, ss_customer_sk#7, ss_addr_sk#9, ca_city#23] +Functions [2]: [partial_sum(UnscaledValue(ss_coupon_amt#12)), partial_sum(UnscaledValue(ss_net_profit#13))] +Aggregate Attributes [2]: [sum#24, sum#25] +Results [6]: [ss_ticket_number#11, ss_customer_sk#7, ss_addr_sk#9, ca_city#23, sum#26, sum#27] (42) HashAggregate [codegen id : 14] -Input [6]: [ss_ticket_number#14, ss_customer_sk#10, ss_addr_sk#12, ca_city#29, sum#32, sum#33] -Keys [4]: [ss_ticket_number#14, ss_customer_sk#10, ss_addr_sk#12, ca_city#29] -Functions [2]: [sum(UnscaledValue(ss_coupon_amt#15)), sum(UnscaledValue(ss_net_profit#16))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#15))#34, sum(UnscaledValue(ss_net_profit#16))#35] -Results [5]: [ss_ticket_number#14, ss_customer_sk#10, ca_city#29 AS bought_city#36, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#15))#34,17,2) AS amt#37, MakeDecimal(sum(UnscaledValue(ss_net_profit#16))#35,17,2) AS profit#38] +Input [6]: [ss_ticket_number#11, ss_customer_sk#7, ss_addr_sk#9, ca_city#23, sum#26, sum#27] +Keys [4]: [ss_ticket_number#11, ss_customer_sk#7, ss_addr_sk#9, ca_city#23] +Functions [2]: [sum(UnscaledValue(ss_coupon_amt#12)), sum(UnscaledValue(ss_net_profit#13))] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#12))#28, sum(UnscaledValue(ss_net_profit#13))#29] +Results [5]: [ss_ticket_number#11, ss_customer_sk#7, ca_city#23 AS bought_city#30, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#12))#28,17,2) AS amt#31, MakeDecimal(sum(UnscaledValue(ss_net_profit#13))#29,17,2) AS profit#32] (43) Exchange -Input [5]: [ss_ticket_number#14, ss_customer_sk#10, bought_city#36, amt#37, profit#38] -Arguments: hashpartitioning(ss_customer_sk#10, 5), ENSURE_REQUIREMENTS, [id=#39] +Input [5]: [ss_ticket_number#11, ss_customer_sk#7, bought_city#30, amt#31, profit#32] +Arguments: hashpartitioning(ss_customer_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=7] (44) Sort [codegen id : 15] -Input [5]: [ss_ticket_number#14, ss_customer_sk#10, bought_city#36, amt#37, profit#38] -Arguments: [ss_customer_sk#10 ASC NULLS FIRST], false, 0 +Input [5]: [ss_ticket_number#11, ss_customer_sk#7, bought_city#30, amt#31, profit#32] +Arguments: [ss_customer_sk#7 ASC NULLS FIRST], false, 0 (45) SortMergeJoin [codegen id : 16] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [ss_customer_sk#10] -Join condition: NOT (ca_city#7 = bought_city#36) +Right keys [1]: [ss_customer_sk#7] +Join condition: NOT (ca_city#6 = bought_city#30) (46) Project [codegen id : 16] -Output [7]: [c_last_name#4, c_first_name#3, ca_city#7, bought_city#36, ss_ticket_number#14, amt#37, profit#38] -Input [9]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#7, ss_ticket_number#14, ss_customer_sk#10, bought_city#36, amt#37, profit#38] +Output [7]: [c_last_name#4, c_first_name#3, ca_city#6, bought_city#30, ss_ticket_number#11, amt#31, profit#32] +Input [9]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#6, ss_ticket_number#11, ss_customer_sk#7, bought_city#30, amt#31, profit#32] (47) TakeOrderedAndProject -Input [7]: [c_last_name#4, c_first_name#3, ca_city#7, bought_city#36, ss_ticket_number#14, amt#37, profit#38] -Arguments: 100, [c_last_name#4 ASC NULLS FIRST, c_first_name#3 ASC NULLS FIRST, ca_city#7 ASC NULLS FIRST, bought_city#36 ASC NULLS FIRST, ss_ticket_number#14 ASC NULLS FIRST], [c_last_name#4, c_first_name#3, ca_city#7, bought_city#36, ss_ticket_number#14, amt#37, profit#38] +Input [7]: [c_last_name#4, c_first_name#3, ca_city#6, bought_city#30, ss_ticket_number#11, amt#31, profit#32] +Arguments: 100, [c_last_name#4 ASC NULLS FIRST, c_first_name#3 ASC NULLS FIRST, ca_city#6 ASC NULLS FIRST, bought_city#30 ASC NULLS FIRST, ss_ticket_number#11 ASC NULLS FIRST], [c_last_name#4, c_first_name#3, ca_city#6, bought_city#30, ss_ticket_number#11, amt#31, profit#32] ===== Subqueries ===== -Subquery:1 Hosting operator id = 15 Hosting Expression = ss_sold_date_sk#17 IN dynamicpruning#18 +Subquery:1 Hosting operator id = 15 Hosting Expression = ss_sold_date_sk#14 IN dynamicpruning#15 BroadcastExchange (52) +- * Project (51) +- * Filter (50) @@ -268,25 +268,25 @@ BroadcastExchange (52) (48) Scan parquet default.date_dim -Output [3]: [d_date_sk#19, d_year#40, d_dow#41] +Output [3]: [d_date_sk#16, d_year#33, d_dow#34] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_dow, [0,6]), In(d_year, [1999,2000,2001]), IsNotNull(d_date_sk)] ReadSchema: struct (49) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#19, d_year#40, d_dow#41] +Input [3]: [d_date_sk#16, d_year#33, d_dow#34] (50) Filter [codegen id : 1] -Input [3]: [d_date_sk#19, d_year#40, d_dow#41] -Condition : ((d_dow#41 IN (6,0) AND d_year#40 IN (1999,2000,2001)) AND isnotnull(d_date_sk#19)) +Input [3]: [d_date_sk#16, d_year#33, d_dow#34] +Condition : ((d_dow#34 IN (6,0) AND d_year#33 IN (1999,2000,2001)) AND isnotnull(d_date_sk#16)) (51) Project [codegen id : 1] -Output [1]: [d_date_sk#19] -Input [3]: [d_date_sk#19, d_year#40, d_dow#41] +Output [1]: [d_date_sk#16] +Input [3]: [d_date_sk#16, d_year#33, d_dow#34] (52) BroadcastExchange -Input [1]: [d_date_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#42] +Input [1]: [d_date_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q46/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q46/explain.txt index 879f2f2ed51d7..c48542dd8ffad 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q46/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q46/explain.txt @@ -87,7 +87,7 @@ Input [2]: [s_store_sk#11, s_city#12] (11) BroadcastExchange Input [1]: [s_store_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_store_sk#4] @@ -99,123 +99,123 @@ Output [6]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_store_sk#11] (14) Scan parquet default.household_demographics -Output [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] +Output [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [Or(EqualTo(hd_dep_count,4),EqualTo(hd_vehicle_count,3)), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] +Input [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15] (16) Filter [codegen id : 3] -Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] -Condition : (((hd_dep_count#15 = 4) OR (hd_vehicle_count#16 = 3)) AND isnotnull(hd_demo_sk#14)) +Input [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15] +Condition : (((hd_dep_count#14 = 4) OR (hd_vehicle_count#15 = 3)) AND isnotnull(hd_demo_sk#13)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#14] -Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] +Output [1]: [hd_demo_sk#13] +Input [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15] (18) BroadcastExchange -Input [1]: [hd_demo_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Input [1]: [hd_demo_sk#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#14] +Right keys [1]: [hd_demo_sk#13] Join condition: None (20) Project [codegen id : 5] Output [5]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7] -Input [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, hd_demo_sk#14] +Input [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, hd_demo_sk#13] (21) Scan parquet default.customer_address -Output [2]: [ca_address_sk#18, ca_city#19] +Output [2]: [ca_address_sk#16, ca_city#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_city)] ReadSchema: struct (22) ColumnarToRow [codegen id : 4] -Input [2]: [ca_address_sk#18, ca_city#19] +Input [2]: [ca_address_sk#16, ca_city#17] (23) Filter [codegen id : 4] -Input [2]: [ca_address_sk#18, ca_city#19] -Condition : (isnotnull(ca_address_sk#18) AND isnotnull(ca_city#19)) +Input [2]: [ca_address_sk#16, ca_city#17] +Condition : (isnotnull(ca_address_sk#16) AND isnotnull(ca_city#17)) (24) BroadcastExchange -Input [2]: [ca_address_sk#18, ca_city#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#20] +Input [2]: [ca_address_sk#16, ca_city#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (25) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_addr_sk#3] -Right keys [1]: [ca_address_sk#18] +Right keys [1]: [ca_address_sk#16] Join condition: None (26) Project [codegen id : 5] -Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#19] -Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_address_sk#18, ca_city#19] +Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#17] +Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_address_sk#16, ca_city#17] (27) HashAggregate [codegen id : 5] -Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#19] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#19] +Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#17] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17] Functions [2]: [partial_sum(UnscaledValue(ss_coupon_amt#6)), partial_sum(UnscaledValue(ss_net_profit#7))] -Aggregate Attributes [2]: [sum#21, sum#22] -Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#19, sum#23, sum#24] +Aggregate Attributes [2]: [sum#18, sum#19] +Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17, sum#20, sum#21] (28) Exchange -Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#19, sum#23, sum#24] -Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#19, 5), ENSURE_REQUIREMENTS, [id=#25] +Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17, sum#20, sum#21] +Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 8] -Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#19, sum#23, sum#24] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#19] +Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17, sum#20, sum#21] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#17] Functions [2]: [sum(UnscaledValue(ss_coupon_amt#6)), sum(UnscaledValue(ss_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#26, sum(UnscaledValue(ss_net_profit#7))#27] -Results [5]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#19 AS bought_city#28, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#26,17,2) AS amt#29, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#27,17,2) AS profit#30] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#22, sum(UnscaledValue(ss_net_profit#7))#23] +Results [5]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#17 AS bought_city#24, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#22,17,2) AS amt#25, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#23,17,2) AS profit#26] (30) Scan parquet default.customer -Output [4]: [c_customer_sk#31, c_current_addr_sk#32, c_first_name#33, c_last_name#34] +Output [4]: [c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 6] -Input [4]: [c_customer_sk#31, c_current_addr_sk#32, c_first_name#33, c_last_name#34] +Input [4]: [c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] (32) Filter [codegen id : 6] -Input [4]: [c_customer_sk#31, c_current_addr_sk#32, c_first_name#33, c_last_name#34] -Condition : (isnotnull(c_customer_sk#31) AND isnotnull(c_current_addr_sk#32)) +Input [4]: [c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] +Condition : (isnotnull(c_customer_sk#27) AND isnotnull(c_current_addr_sk#28)) (33) BroadcastExchange -Input [4]: [c_customer_sk#31, c_current_addr_sk#32, c_first_name#33, c_last_name#34] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#35] +Input [4]: [c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#31] +Right keys [1]: [c_customer_sk#27] Join condition: None (35) Project [codegen id : 8] -Output [7]: [ss_ticket_number#5, bought_city#28, amt#29, profit#30, c_current_addr_sk#32, c_first_name#33, c_last_name#34] -Input [9]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#28, amt#29, profit#30, c_customer_sk#31, c_current_addr_sk#32, c_first_name#33, c_last_name#34] +Output [7]: [ss_ticket_number#5, bought_city#24, amt#25, profit#26, c_current_addr_sk#28, c_first_name#29, c_last_name#30] +Input [9]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#24, amt#25, profit#26, c_customer_sk#27, c_current_addr_sk#28, c_first_name#29, c_last_name#30] (36) ReusedExchange [Reuses operator id: 24] -Output [2]: [ca_address_sk#36, ca_city#37] +Output [2]: [ca_address_sk#31, ca_city#32] (37) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [c_current_addr_sk#32] -Right keys [1]: [ca_address_sk#36] -Join condition: NOT (ca_city#37 = bought_city#28) +Left keys [1]: [c_current_addr_sk#28] +Right keys [1]: [ca_address_sk#31] +Join condition: NOT (ca_city#32 = bought_city#24) (38) Project [codegen id : 8] -Output [7]: [c_last_name#34, c_first_name#33, ca_city#37, bought_city#28, ss_ticket_number#5, amt#29, profit#30] -Input [9]: [ss_ticket_number#5, bought_city#28, amt#29, profit#30, c_current_addr_sk#32, c_first_name#33, c_last_name#34, ca_address_sk#36, ca_city#37] +Output [7]: [c_last_name#30, c_first_name#29, ca_city#32, bought_city#24, ss_ticket_number#5, amt#25, profit#26] +Input [9]: [ss_ticket_number#5, bought_city#24, amt#25, profit#26, c_current_addr_sk#28, c_first_name#29, c_last_name#30, ca_address_sk#31, ca_city#32] (39) TakeOrderedAndProject -Input [7]: [c_last_name#34, c_first_name#33, ca_city#37, bought_city#28, ss_ticket_number#5, amt#29, profit#30] -Arguments: 100, [c_last_name#34 ASC NULLS FIRST, c_first_name#33 ASC NULLS FIRST, ca_city#37 ASC NULLS FIRST, bought_city#28 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#34, c_first_name#33, ca_city#37, bought_city#28, ss_ticket_number#5, amt#29, profit#30] +Input [7]: [c_last_name#30, c_first_name#29, ca_city#32, bought_city#24, ss_ticket_number#5, amt#25, profit#26] +Arguments: 100, [c_last_name#30 ASC NULLS FIRST, c_first_name#29 ASC NULLS FIRST, ca_city#32 ASC NULLS FIRST, bought_city#24 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#30, c_first_name#29, ca_city#32, bought_city#24, ss_ticket_number#5, amt#25, profit#26] ===== Subqueries ===== @@ -228,25 +228,25 @@ BroadcastExchange (44) (40) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#38, d_dow#39] +Output [3]: [d_date_sk#10, d_year#33, d_dow#34] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_dow, [0,6]), In(d_year, [1999,2000,2001]), IsNotNull(d_date_sk)] ReadSchema: struct (41) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#38, d_dow#39] +Input [3]: [d_date_sk#10, d_year#33, d_dow#34] (42) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#38, d_dow#39] -Condition : ((d_dow#39 IN (6,0) AND d_year#38 IN (1999,2000,2001)) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#10, d_year#33, d_dow#34] +Condition : ((d_dow#34 IN (6,0) AND d_year#33 IN (1999,2000,2001)) AND isnotnull(d_date_sk#10)) (43) Project [codegen id : 1] Output [1]: [d_date_sk#10] -Input [3]: [d_date_sk#10, d_year#38, d_dow#39] +Input [3]: [d_date_sk#10, d_year#33, d_dow#34] (44) BroadcastExchange Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q47.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q47.sf100/explain.txt index 23dfbecdbca9d..0dad98fba1969 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q47.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q47.sf100/explain.txt @@ -96,7 +96,7 @@ Condition : ((isnotnull(s_store_sk#9) AND isnotnull(s_store_name#10)) AND isnotn (10) BroadcastExchange Input [3]: [s_store_sk#9, s_store_name#10, s_company_name#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_store_sk#2] @@ -109,175 +109,175 @@ Input [8]: [ss_item_sk#1, ss_store_sk#2, ss_sales_price#3, d_year#7, d_moy#8, s_ (13) Exchange Input [6]: [ss_item_sk#1, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#13] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) Sort [codegen id : 4] Input [6]: [ss_item_sk#1, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (15) Scan parquet default.item -Output [3]: [i_item_sk#14, i_brand#15, i_category#16] +Output [3]: [i_item_sk#12, i_brand#13, i_category#14] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_category), IsNotNull(i_brand)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [3]: [i_item_sk#14, i_brand#15, i_category#16] +Input [3]: [i_item_sk#12, i_brand#13, i_category#14] (17) Filter [codegen id : 5] -Input [3]: [i_item_sk#14, i_brand#15, i_category#16] -Condition : ((isnotnull(i_item_sk#14) AND isnotnull(i_category#16)) AND isnotnull(i_brand#15)) +Input [3]: [i_item_sk#12, i_brand#13, i_category#14] +Condition : ((isnotnull(i_item_sk#12) AND isnotnull(i_category#14)) AND isnotnull(i_brand#13)) (18) Exchange -Input [3]: [i_item_sk#14, i_brand#15, i_category#16] -Arguments: hashpartitioning(i_item_sk#14, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [3]: [i_item_sk#12, i_brand#13, i_category#14] +Arguments: hashpartitioning(i_item_sk#12, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 6] -Input [3]: [i_item_sk#14, i_brand#15, i_category#16] -Arguments: [i_item_sk#14 ASC NULLS FIRST], false, 0 +Input [3]: [i_item_sk#12, i_brand#13, i_category#14] +Arguments: [i_item_sk#12 ASC NULLS FIRST], false, 0 (20) SortMergeJoin [codegen id : 7] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#14] +Right keys [1]: [i_item_sk#12] Join condition: None (21) Project [codegen id : 7] -Output [7]: [i_brand#15, i_category#16, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11] -Input [9]: [ss_item_sk#1, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11, i_item_sk#14, i_brand#15, i_category#16] +Output [7]: [i_brand#13, i_category#14, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11] +Input [9]: [ss_item_sk#1, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11, i_item_sk#12, i_brand#13, i_category#14] (22) HashAggregate [codegen id : 7] -Input [7]: [i_brand#15, i_category#16, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11] -Keys [6]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8] +Input [7]: [i_brand#13, i_category#14, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11] +Keys [6]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8] Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#3))] -Aggregate Attributes [1]: [sum#18] -Results [7]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum#19] +Aggregate Attributes [1]: [sum#15] +Results [7]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum#16] (23) Exchange -Input [7]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum#19] -Arguments: hashpartitioning(i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [7]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum#16] +Arguments: hashpartitioning(i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) HashAggregate [codegen id : 8] -Input [7]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum#19] -Keys [6]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8] +Input [7]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum#16] +Keys [6]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8] Functions [1]: [sum(UnscaledValue(ss_sales_price#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#3))#21] -Results [8]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#21,17,2) AS sum_sales#22, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#21,17,2) AS _w0#23] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#3))#17] +Results [8]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#17,17,2) AS sum_sales#18, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#17,17,2) AS _w0#19] (25) Exchange -Input [8]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, _w0#23] -Arguments: hashpartitioning(i_category#16, i_brand#15, s_store_name#10, s_company_name#11, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [8]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, _w0#19] +Arguments: hashpartitioning(i_category#14, i_brand#13, s_store_name#10, s_company_name#11, 5), ENSURE_REQUIREMENTS, [plan_id=5] (26) Sort [codegen id : 9] -Input [8]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, _w0#23] -Arguments: [i_category#16 ASC NULLS FIRST, i_brand#15 ASC NULLS FIRST, s_store_name#10 ASC NULLS FIRST, s_company_name#11 ASC NULLS FIRST, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST], false, 0 +Input [8]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, _w0#19] +Arguments: [i_category#14 ASC NULLS FIRST, i_brand#13 ASC NULLS FIRST, s_store_name#10 ASC NULLS FIRST, s_company_name#11 ASC NULLS FIRST, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST], false, 0 (27) Window -Input [8]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, _w0#23] -Arguments: [rank(d_year#7, d_moy#8) windowspecdefinition(i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#25], [i_category#16, i_brand#15, s_store_name#10, s_company_name#11], [d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST] +Input [8]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, _w0#19] +Arguments: [rank(d_year#7, d_moy#8) windowspecdefinition(i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#20], [i_category#14, i_brand#13, s_store_name#10, s_company_name#11], [d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST] (28) Filter [codegen id : 10] -Input [9]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, _w0#23, rn#25] +Input [9]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, _w0#19, rn#20] Condition : (isnotnull(d_year#7) AND (d_year#7 = 1999)) (29) Window -Input [9]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, _w0#23, rn#25] -Arguments: [avg(_w0#23) windowspecdefinition(i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#26], [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7] +Input [9]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, _w0#19, rn#20] +Arguments: [avg(_w0#19) windowspecdefinition(i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#21], [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7] (30) Filter [codegen id : 11] -Input [10]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, _w0#23, rn#25, avg_monthly_sales#26] -Condition : ((isnotnull(avg_monthly_sales#26) AND (avg_monthly_sales#26 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) +Input [10]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, _w0#19, rn#20, avg_monthly_sales#21] +Condition : ((isnotnull(avg_monthly_sales#21) AND (avg_monthly_sales#21 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#21 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#21 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) (31) Project [codegen id : 11] -Output [9]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#26, rn#25] -Input [10]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, _w0#23, rn#25, avg_monthly_sales#26] +Output [9]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, avg_monthly_sales#21, rn#20] +Input [10]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, _w0#19, rn#20, avg_monthly_sales#21] (32) Exchange -Input [9]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#26, rn#25] -Arguments: hashpartitioning(i_category#16, i_brand#15, s_store_name#10, s_company_name#11, rn#25, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [9]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, avg_monthly_sales#21, rn#20] +Arguments: hashpartitioning(i_category#14, i_brand#13, s_store_name#10, s_company_name#11, rn#20, 5), ENSURE_REQUIREMENTS, [plan_id=6] (33) Sort [codegen id : 12] -Input [9]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#26, rn#25] -Arguments: [i_category#16 ASC NULLS FIRST, i_brand#15 ASC NULLS FIRST, s_store_name#10 ASC NULLS FIRST, s_company_name#11 ASC NULLS FIRST, rn#25 ASC NULLS FIRST], false, 0 +Input [9]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, avg_monthly_sales#21, rn#20] +Arguments: [i_category#14 ASC NULLS FIRST, i_brand#13 ASC NULLS FIRST, s_store_name#10 ASC NULLS FIRST, s_company_name#11 ASC NULLS FIRST, rn#20 ASC NULLS FIRST], false, 0 (34) ReusedExchange [Reuses operator id: 23] -Output [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum#34] +Output [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum#28] (35) HashAggregate [codegen id : 20] -Input [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum#34] -Keys [6]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33] -Functions [1]: [sum(UnscaledValue(ss_sales_price#35))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#35))#21] -Results [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, MakeDecimal(sum(UnscaledValue(ss_sales_price#35))#21,17,2) AS sum_sales#22] +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum#28] +Keys [6]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27] +Functions [1]: [sum(UnscaledValue(ss_sales_price#29))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#29))#17] +Results [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, MakeDecimal(sum(UnscaledValue(ss_sales_price#29))#17,17,2) AS sum_sales#18] (36) Exchange -Input [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum_sales#22] -Arguments: hashpartitioning(i_category#28, i_brand#29, s_store_name#30, s_company_name#31, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18] +Arguments: hashpartitioning(i_category#22, i_brand#23, s_store_name#24, s_company_name#25, 5), ENSURE_REQUIREMENTS, [plan_id=7] (37) Sort [codegen id : 21] -Input [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum_sales#22] -Arguments: [i_category#28 ASC NULLS FIRST, i_brand#29 ASC NULLS FIRST, s_store_name#30 ASC NULLS FIRST, s_company_name#31 ASC NULLS FIRST, d_year#32 ASC NULLS FIRST, d_moy#33 ASC NULLS FIRST], false, 0 +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18] +Arguments: [i_category#22 ASC NULLS FIRST, i_brand#23 ASC NULLS FIRST, s_store_name#24 ASC NULLS FIRST, s_company_name#25 ASC NULLS FIRST, d_year#26 ASC NULLS FIRST, d_moy#27 ASC NULLS FIRST], false, 0 (38) Window -Input [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum_sales#22] -Arguments: [rank(d_year#32, d_moy#33) windowspecdefinition(i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32 ASC NULLS FIRST, d_moy#33 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#37], [i_category#28, i_brand#29, s_store_name#30, s_company_name#31], [d_year#32 ASC NULLS FIRST, d_moy#33 ASC NULLS FIRST] +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18] +Arguments: [rank(d_year#26, d_moy#27) windowspecdefinition(i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26 ASC NULLS FIRST, d_moy#27 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#30], [i_category#22, i_brand#23, s_store_name#24, s_company_name#25], [d_year#26 ASC NULLS FIRST, d_moy#27 ASC NULLS FIRST] (39) Project [codegen id : 22] -Output [6]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, sum_sales#22 AS sum_sales#38, rn#37] -Input [8]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum_sales#22, rn#37] +Output [6]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, sum_sales#18 AS sum_sales#31, rn#30] +Input [8]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18, rn#30] (40) Exchange -Input [6]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, sum_sales#38, rn#37] -Arguments: hashpartitioning(i_category#28, i_brand#29, s_store_name#30, s_company_name#31, (rn#37 + 1), 5), ENSURE_REQUIREMENTS, [id=#39] +Input [6]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, sum_sales#31, rn#30] +Arguments: hashpartitioning(i_category#22, i_brand#23, s_store_name#24, s_company_name#25, (rn#30 + 1), 5), ENSURE_REQUIREMENTS, [plan_id=8] (41) Sort [codegen id : 23] -Input [6]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, sum_sales#38, rn#37] -Arguments: [i_category#28 ASC NULLS FIRST, i_brand#29 ASC NULLS FIRST, s_store_name#30 ASC NULLS FIRST, s_company_name#31 ASC NULLS FIRST, (rn#37 + 1) ASC NULLS FIRST], false, 0 +Input [6]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, sum_sales#31, rn#30] +Arguments: [i_category#22 ASC NULLS FIRST, i_brand#23 ASC NULLS FIRST, s_store_name#24 ASC NULLS FIRST, s_company_name#25 ASC NULLS FIRST, (rn#30 + 1) ASC NULLS FIRST], false, 0 (42) SortMergeJoin [codegen id : 24] -Left keys [5]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, rn#25] -Right keys [5]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, (rn#37 + 1)] +Left keys [5]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, rn#20] +Right keys [5]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, (rn#30 + 1)] Join condition: None (43) Project [codegen id : 24] -Output [10]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#26, rn#25, sum_sales#38] -Input [15]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#26, rn#25, i_category#28, i_brand#29, s_store_name#30, s_company_name#31, sum_sales#38, rn#37] +Output [10]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, avg_monthly_sales#21, rn#20, sum_sales#31] +Input [15]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, avg_monthly_sales#21, rn#20, i_category#22, i_brand#23, s_store_name#24, s_company_name#25, sum_sales#31, rn#30] (44) ReusedExchange [Reuses operator id: 36] -Output [7]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#22] +Output [7]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18] (45) Sort [codegen id : 33] -Input [7]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#22] -Arguments: [i_category#40 ASC NULLS FIRST, i_brand#41 ASC NULLS FIRST, s_store_name#42 ASC NULLS FIRST, s_company_name#43 ASC NULLS FIRST, d_year#44 ASC NULLS FIRST, d_moy#45 ASC NULLS FIRST], false, 0 +Input [7]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18] +Arguments: [i_category#32 ASC NULLS FIRST, i_brand#33 ASC NULLS FIRST, s_store_name#34 ASC NULLS FIRST, s_company_name#35 ASC NULLS FIRST, d_year#36 ASC NULLS FIRST, d_moy#37 ASC NULLS FIRST], false, 0 (46) Window -Input [7]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#22] -Arguments: [rank(d_year#44, d_moy#45) windowspecdefinition(i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44 ASC NULLS FIRST, d_moy#45 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#46], [i_category#40, i_brand#41, s_store_name#42, s_company_name#43], [d_year#44 ASC NULLS FIRST, d_moy#45 ASC NULLS FIRST] +Input [7]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18] +Arguments: [rank(d_year#36, d_moy#37) windowspecdefinition(i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36 ASC NULLS FIRST, d_moy#37 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#38], [i_category#32, i_brand#33, s_store_name#34, s_company_name#35], [d_year#36 ASC NULLS FIRST, d_moy#37 ASC NULLS FIRST] (47) Project [codegen id : 34] -Output [6]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, sum_sales#22 AS sum_sales#47, rn#46] -Input [8]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#22, rn#46] +Output [6]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, sum_sales#18 AS sum_sales#39, rn#38] +Input [8]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18, rn#38] (48) Exchange -Input [6]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, sum_sales#47, rn#46] -Arguments: hashpartitioning(i_category#40, i_brand#41, s_store_name#42, s_company_name#43, (rn#46 - 1), 5), ENSURE_REQUIREMENTS, [id=#48] +Input [6]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, sum_sales#39, rn#38] +Arguments: hashpartitioning(i_category#32, i_brand#33, s_store_name#34, s_company_name#35, (rn#38 - 1), 5), ENSURE_REQUIREMENTS, [plan_id=9] (49) Sort [codegen id : 35] -Input [6]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, sum_sales#47, rn#46] -Arguments: [i_category#40 ASC NULLS FIRST, i_brand#41 ASC NULLS FIRST, s_store_name#42 ASC NULLS FIRST, s_company_name#43 ASC NULLS FIRST, (rn#46 - 1) ASC NULLS FIRST], false, 0 +Input [6]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, sum_sales#39, rn#38] +Arguments: [i_category#32 ASC NULLS FIRST, i_brand#33 ASC NULLS FIRST, s_store_name#34 ASC NULLS FIRST, s_company_name#35 ASC NULLS FIRST, (rn#38 - 1) ASC NULLS FIRST], false, 0 (50) SortMergeJoin [codegen id : 36] -Left keys [5]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, rn#25] -Right keys [5]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, (rn#46 - 1)] +Left keys [5]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, rn#20] +Right keys [5]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, (rn#38 - 1)] Join condition: None (51) Project [codegen id : 36] -Output [10]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, avg_monthly_sales#26, sum_sales#22, sum_sales#38 AS psum#49, sum_sales#47 AS nsum#50] -Input [16]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#26, rn#25, sum_sales#38, i_category#40, i_brand#41, s_store_name#42, s_company_name#43, sum_sales#47, rn#46] +Output [10]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, avg_monthly_sales#21, sum_sales#18, sum_sales#31 AS psum#40, sum_sales#39 AS nsum#41] +Input [16]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, avg_monthly_sales#21, rn#20, sum_sales#31, i_category#32, i_brand#33, s_store_name#34, s_company_name#35, sum_sales#39, rn#38] (52) TakeOrderedAndProject -Input [10]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, avg_monthly_sales#26, sum_sales#22, psum#49, nsum#50] -Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, s_store_name#10 ASC NULLS FIRST], [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, avg_monthly_sales#26, sum_sales#22, psum#49, nsum#50] +Input [10]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, avg_monthly_sales#21, sum_sales#18, psum#40, nsum#41] +Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#21 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, s_store_name#10 ASC NULLS FIRST], [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, avg_monthly_sales#21, sum_sales#18, psum#40, nsum#41] ===== Subqueries ===== @@ -304,6 +304,6 @@ Condition : ((((d_year#7 = 1999) OR ((d_year#7 = 1998) AND (d_moy#8 = 12))) OR ( (56) BroadcastExchange Input [3]: [d_date_sk#6, d_year#7, d_moy#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#51] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=10] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q47/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q47/explain.txt index e7faf392ad879..e55defd7ff65c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q47/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q47/explain.txt @@ -77,7 +77,7 @@ Condition : (isnotnull(ss_item_sk#4) AND isnotnull(ss_store_sk#5)) (7) BroadcastExchange Input [4]: [ss_item_sk#4, ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] @@ -89,160 +89,160 @@ Output [5]: [i_brand#2, i_category#3, ss_store_sk#5, ss_sales_price#6, ss_sold_d Input [7]: [i_item_sk#1, i_brand#2, i_category#3, ss_item_sk#4, ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7] (10) ReusedExchange [Reuses operator id: 49] -Output [3]: [d_date_sk#10, d_year#11, d_moy#12] +Output [3]: [d_date_sk#9, d_year#10, d_moy#11] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_date_sk#7] -Right keys [1]: [d_date_sk#10] +Right keys [1]: [d_date_sk#9] Join condition: None (12) Project [codegen id : 4] -Output [6]: [i_brand#2, i_category#3, ss_store_sk#5, ss_sales_price#6, d_year#11, d_moy#12] -Input [8]: [i_brand#2, i_category#3, ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7, d_date_sk#10, d_year#11, d_moy#12] +Output [6]: [i_brand#2, i_category#3, ss_store_sk#5, ss_sales_price#6, d_year#10, d_moy#11] +Input [8]: [i_brand#2, i_category#3, ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7, d_date_sk#9, d_year#10, d_moy#11] (13) Scan parquet default.store -Output [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] +Output [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_name), IsNotNull(s_company_name)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] (15) Filter [codegen id : 3] -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] -Condition : ((isnotnull(s_store_sk#13) AND isnotnull(s_store_name#14)) AND isnotnull(s_company_name#15)) +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] +Condition : ((isnotnull(s_store_sk#12) AND isnotnull(s_store_name#13)) AND isnotnull(s_company_name#14)) (16) BroadcastExchange -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#16] +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#5] -Right keys [1]: [s_store_sk#13] +Right keys [1]: [s_store_sk#12] Join condition: None (18) Project [codegen id : 4] -Output [7]: [i_brand#2, i_category#3, ss_sales_price#6, d_year#11, d_moy#12, s_store_name#14, s_company_name#15] -Input [9]: [i_brand#2, i_category#3, ss_store_sk#5, ss_sales_price#6, d_year#11, d_moy#12, s_store_sk#13, s_store_name#14, s_company_name#15] +Output [7]: [i_brand#2, i_category#3, ss_sales_price#6, d_year#10, d_moy#11, s_store_name#13, s_company_name#14] +Input [9]: [i_brand#2, i_category#3, ss_store_sk#5, ss_sales_price#6, d_year#10, d_moy#11, s_store_sk#12, s_store_name#13, s_company_name#14] (19) HashAggregate [codegen id : 4] -Input [7]: [i_brand#2, i_category#3, ss_sales_price#6, d_year#11, d_moy#12, s_store_name#14, s_company_name#15] -Keys [6]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12] +Input [7]: [i_brand#2, i_category#3, ss_sales_price#6, d_year#10, d_moy#11, s_store_name#13, s_company_name#14] +Keys [6]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11] Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [1]: [sum#17] -Results [7]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum#18] +Aggregate Attributes [1]: [sum#15] +Results [7]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum#16] (20) Exchange -Input [7]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum#18] -Arguments: hashpartitioning(i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [7]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum#16] +Arguments: hashpartitioning(i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 5] -Input [7]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum#18] -Keys [6]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12] +Input [7]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum#16] +Keys [6]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11] Functions [1]: [sum(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#6))#20] -Results [8]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, MakeDecimal(sum(UnscaledValue(ss_sales_price#6))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#6))#20,17,2) AS _w0#22] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#6))#17] +Results [8]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, MakeDecimal(sum(UnscaledValue(ss_sales_price#6))#17,17,2) AS sum_sales#18, MakeDecimal(sum(UnscaledValue(ss_sales_price#6))#17,17,2) AS _w0#19] (22) Exchange -Input [8]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, _w0#22] -Arguments: hashpartitioning(i_category#3, i_brand#2, s_store_name#14, s_company_name#15, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [8]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, _w0#19] +Arguments: hashpartitioning(i_category#3, i_brand#2, s_store_name#13, s_company_name#14, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) Sort [codegen id : 6] -Input [8]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, _w0#22] -Arguments: [i_category#3 ASC NULLS FIRST, i_brand#2 ASC NULLS FIRST, s_store_name#14 ASC NULLS FIRST, s_company_name#15 ASC NULLS FIRST, d_year#11 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST], false, 0 +Input [8]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, _w0#19] +Arguments: [i_category#3 ASC NULLS FIRST, i_brand#2 ASC NULLS FIRST, s_store_name#13 ASC NULLS FIRST, s_company_name#14 ASC NULLS FIRST, d_year#10 ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST], false, 0 (24) Window -Input [8]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, _w0#22] -Arguments: [rank(d_year#11, d_moy#12) windowspecdefinition(i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#24], [i_category#3, i_brand#2, s_store_name#14, s_company_name#15], [d_year#11 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST] +Input [8]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, _w0#19] +Arguments: [rank(d_year#10, d_moy#11) windowspecdefinition(i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10 ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#20], [i_category#3, i_brand#2, s_store_name#13, s_company_name#14], [d_year#10 ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST] (25) Filter [codegen id : 7] -Input [9]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, _w0#22, rn#24] -Condition : (isnotnull(d_year#11) AND (d_year#11 = 1999)) +Input [9]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, _w0#19, rn#20] +Condition : (isnotnull(d_year#10) AND (d_year#10 = 1999)) (26) Window -Input [9]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, _w0#22, rn#24] -Arguments: [avg(_w0#22) windowspecdefinition(i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#25], [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11] +Input [9]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, _w0#19, rn#20] +Arguments: [avg(_w0#19) windowspecdefinition(i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#21], [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10] (27) Filter [codegen id : 22] -Input [10]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, _w0#22, rn#24, avg_monthly_sales#25] -Condition : ((isnotnull(avg_monthly_sales#25) AND (avg_monthly_sales#25 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) +Input [10]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, _w0#19, rn#20, avg_monthly_sales#21] +Condition : ((isnotnull(avg_monthly_sales#21) AND (avg_monthly_sales#21 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#21 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#21 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) (28) Project [codegen id : 22] -Output [9]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#25, rn#24] -Input [10]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, _w0#22, rn#24, avg_monthly_sales#25] +Output [9]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, avg_monthly_sales#21, rn#20] +Input [10]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, _w0#19, rn#20, avg_monthly_sales#21] (29) ReusedExchange [Reuses operator id: 20] -Output [7]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31, sum#32] +Output [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum#28] (30) HashAggregate [codegen id : 12] -Input [7]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31, sum#32] -Keys [6]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31] -Functions [1]: [sum(UnscaledValue(ss_sales_price#33))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#33))#20] -Results [7]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31, MakeDecimal(sum(UnscaledValue(ss_sales_price#33))#20,17,2) AS sum_sales#21] +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum#28] +Keys [6]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27] +Functions [1]: [sum(UnscaledValue(ss_sales_price#29))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#29))#17] +Results [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, MakeDecimal(sum(UnscaledValue(ss_sales_price#29))#17,17,2) AS sum_sales#18] (31) Exchange -Input [7]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31, sum_sales#21] -Arguments: hashpartitioning(i_category#26, i_brand#27, s_store_name#28, s_company_name#29, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18] +Arguments: hashpartitioning(i_category#22, i_brand#23, s_store_name#24, s_company_name#25, 5), ENSURE_REQUIREMENTS, [plan_id=5] (32) Sort [codegen id : 13] -Input [7]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31, sum_sales#21] -Arguments: [i_category#26 ASC NULLS FIRST, i_brand#27 ASC NULLS FIRST, s_store_name#28 ASC NULLS FIRST, s_company_name#29 ASC NULLS FIRST, d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST], false, 0 +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18] +Arguments: [i_category#22 ASC NULLS FIRST, i_brand#23 ASC NULLS FIRST, s_store_name#24 ASC NULLS FIRST, s_company_name#25 ASC NULLS FIRST, d_year#26 ASC NULLS FIRST, d_moy#27 ASC NULLS FIRST], false, 0 (33) Window -Input [7]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31, sum_sales#21] -Arguments: [rank(d_year#30, d_moy#31) windowspecdefinition(i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#35], [i_category#26, i_brand#27, s_store_name#28, s_company_name#29], [d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST] +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18] +Arguments: [rank(d_year#26, d_moy#27) windowspecdefinition(i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26 ASC NULLS FIRST, d_moy#27 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#30], [i_category#22, i_brand#23, s_store_name#24, s_company_name#25], [d_year#26 ASC NULLS FIRST, d_moy#27 ASC NULLS FIRST] (34) Project [codegen id : 14] -Output [6]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, sum_sales#21 AS sum_sales#36, rn#35] -Input [8]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31, sum_sales#21, rn#35] +Output [6]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, sum_sales#18 AS sum_sales#31, rn#30] +Input [8]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18, rn#30] (35) BroadcastExchange -Input [6]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, sum_sales#36, rn#35] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, false] + 1)),false), [id=#37] +Input [6]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, sum_sales#31, rn#30] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, false] + 1)),false), [plan_id=6] (36) BroadcastHashJoin [codegen id : 22] -Left keys [5]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, rn#24] -Right keys [5]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, (rn#35 + 1)] +Left keys [5]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, rn#20] +Right keys [5]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, (rn#30 + 1)] Join condition: None (37) Project [codegen id : 22] -Output [10]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#25, rn#24, sum_sales#36] -Input [15]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#25, rn#24, i_category#26, i_brand#27, s_store_name#28, s_company_name#29, sum_sales#36, rn#35] +Output [10]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, avg_monthly_sales#21, rn#20, sum_sales#31] +Input [15]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, avg_monthly_sales#21, rn#20, i_category#22, i_brand#23, s_store_name#24, s_company_name#25, sum_sales#31, rn#30] (38) ReusedExchange [Reuses operator id: 31] -Output [7]: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, d_year#42, d_moy#43, sum_sales#21] +Output [7]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18] (39) Sort [codegen id : 20] -Input [7]: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, d_year#42, d_moy#43, sum_sales#21] -Arguments: [i_category#38 ASC NULLS FIRST, i_brand#39 ASC NULLS FIRST, s_store_name#40 ASC NULLS FIRST, s_company_name#41 ASC NULLS FIRST, d_year#42 ASC NULLS FIRST, d_moy#43 ASC NULLS FIRST], false, 0 +Input [7]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18] +Arguments: [i_category#32 ASC NULLS FIRST, i_brand#33 ASC NULLS FIRST, s_store_name#34 ASC NULLS FIRST, s_company_name#35 ASC NULLS FIRST, d_year#36 ASC NULLS FIRST, d_moy#37 ASC NULLS FIRST], false, 0 (40) Window -Input [7]: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, d_year#42, d_moy#43, sum_sales#21] -Arguments: [rank(d_year#42, d_moy#43) windowspecdefinition(i_category#38, i_brand#39, s_store_name#40, s_company_name#41, d_year#42 ASC NULLS FIRST, d_moy#43 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#44], [i_category#38, i_brand#39, s_store_name#40, s_company_name#41], [d_year#42 ASC NULLS FIRST, d_moy#43 ASC NULLS FIRST] +Input [7]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18] +Arguments: [rank(d_year#36, d_moy#37) windowspecdefinition(i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36 ASC NULLS FIRST, d_moy#37 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#38], [i_category#32, i_brand#33, s_store_name#34, s_company_name#35], [d_year#36 ASC NULLS FIRST, d_moy#37 ASC NULLS FIRST] (41) Project [codegen id : 21] -Output [6]: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, sum_sales#21 AS sum_sales#45, rn#44] -Input [8]: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, d_year#42, d_moy#43, sum_sales#21, rn#44] +Output [6]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, sum_sales#18 AS sum_sales#39, rn#38] +Input [8]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18, rn#38] (42) BroadcastExchange -Input [6]: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, sum_sales#45, rn#44] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, false] - 1)),false), [id=#46] +Input [6]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, sum_sales#39, rn#38] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, false] - 1)),false), [plan_id=7] (43) BroadcastHashJoin [codegen id : 22] -Left keys [5]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, rn#24] -Right keys [5]: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, (rn#44 - 1)] +Left keys [5]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, rn#20] +Right keys [5]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, (rn#38 - 1)] Join condition: None (44) Project [codegen id : 22] -Output [10]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, avg_monthly_sales#25, sum_sales#21, sum_sales#36 AS psum#47, sum_sales#45 AS nsum#48] -Input [16]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#25, rn#24, sum_sales#36, i_category#38, i_brand#39, s_store_name#40, s_company_name#41, sum_sales#45, rn#44] +Output [10]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, avg_monthly_sales#21, sum_sales#18, sum_sales#31 AS psum#40, sum_sales#39 AS nsum#41] +Input [16]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, avg_monthly_sales#21, rn#20, sum_sales#31, i_category#32, i_brand#33, s_store_name#34, s_company_name#35, sum_sales#39, rn#38] (45) TakeOrderedAndProject -Input [10]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, avg_monthly_sales#25, sum_sales#21, psum#47, nsum#48] -Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, s_store_name#14 ASC NULLS FIRST], [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, avg_monthly_sales#25, sum_sales#21, psum#47, nsum#48] +Input [10]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, avg_monthly_sales#21, sum_sales#18, psum#40, nsum#41] +Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#21 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, s_store_name#13 ASC NULLS FIRST], [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, avg_monthly_sales#21, sum_sales#18, psum#40, nsum#41] ===== Subqueries ===== @@ -254,21 +254,21 @@ BroadcastExchange (49) (46) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#11, d_moy#12] +Output [3]: [d_date_sk#9, d_year#10, d_moy#11] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [Or(Or(EqualTo(d_year,1999),And(EqualTo(d_year,1998),EqualTo(d_moy,12))),And(EqualTo(d_year,2000),EqualTo(d_moy,1))), IsNotNull(d_date_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#12] +Input [3]: [d_date_sk#9, d_year#10, d_moy#11] (48) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#12] -Condition : ((((d_year#11 = 1999) OR ((d_year#11 = 1998) AND (d_moy#12 = 12))) OR ((d_year#11 = 2000) AND (d_moy#12 = 1))) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#9, d_year#10, d_moy#11] +Condition : ((((d_year#10 = 1999) OR ((d_year#10 = 1998) AND (d_moy#11 = 12))) OR ((d_year#10 = 2000) AND (d_moy#11 = 1))) AND isnotnull(d_date_sk#9)) (49) BroadcastExchange -Input [3]: [d_date_sk#10, d_year#11, d_moy#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#49] +Input [3]: [d_date_sk#9, d_year#10, d_moy#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q48.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q48.sf100/explain.txt index c1cdc24ac44d8..5fa1b48ce7546 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q48.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q48.sf100/explain.txt @@ -60,7 +60,7 @@ Condition : isnotnull(s_store_sk#9) (7) BroadcastExchange Input [1]: [s_store_sk#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_store_sk#3] @@ -72,92 +72,92 @@ Output [6]: [ss_cdemo_sk#1, ss_addr_sk#2, ss_quantity#4, ss_sales_price#5, ss_ne Input [8]: [ss_cdemo_sk#1, ss_addr_sk#2, ss_store_sk#3, ss_quantity#4, ss_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, s_store_sk#9] (10) Scan parquet default.customer_demographics -Output [3]: [cd_demo_sk#11, cd_marital_status#12, cd_education_status#13] +Output [3]: [cd_demo_sk#10, cd_marital_status#11, cd_education_status#12] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), Or(Or(And(EqualTo(cd_marital_status,M),EqualTo(cd_education_status,4 yr Degree )),And(EqualTo(cd_marital_status,D),EqualTo(cd_education_status,2 yr Degree ))),And(EqualTo(cd_marital_status,S),EqualTo(cd_education_status,College )))] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [3]: [cd_demo_sk#11, cd_marital_status#12, cd_education_status#13] +Input [3]: [cd_demo_sk#10, cd_marital_status#11, cd_education_status#12] (12) Filter [codegen id : 2] -Input [3]: [cd_demo_sk#11, cd_marital_status#12, cd_education_status#13] -Condition : (isnotnull(cd_demo_sk#11) AND ((((cd_marital_status#12 = M) AND (cd_education_status#13 = 4 yr Degree )) OR ((cd_marital_status#12 = D) AND (cd_education_status#13 = 2 yr Degree ))) OR ((cd_marital_status#12 = S) AND (cd_education_status#13 = College )))) +Input [3]: [cd_demo_sk#10, cd_marital_status#11, cd_education_status#12] +Condition : (isnotnull(cd_demo_sk#10) AND ((((cd_marital_status#11 = M) AND (cd_education_status#12 = 4 yr Degree )) OR ((cd_marital_status#11 = D) AND (cd_education_status#12 = 2 yr Degree ))) OR ((cd_marital_status#11 = S) AND (cd_education_status#12 = College )))) (13) BroadcastExchange -Input [3]: [cd_demo_sk#11, cd_marital_status#12, cd_education_status#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Input [3]: [cd_demo_sk#10, cd_marital_status#11, cd_education_status#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_cdemo_sk#1] -Right keys [1]: [cd_demo_sk#11] -Join condition: ((((((cd_marital_status#12 = M) AND (cd_education_status#13 = 4 yr Degree )) AND (ss_sales_price#5 >= 100.00)) AND (ss_sales_price#5 <= 150.00)) OR ((((cd_marital_status#12 = D) AND (cd_education_status#13 = 2 yr Degree )) AND (ss_sales_price#5 >= 50.00)) AND (ss_sales_price#5 <= 100.00))) OR ((((cd_marital_status#12 = S) AND (cd_education_status#13 = College )) AND (ss_sales_price#5 >= 150.00)) AND (ss_sales_price#5 <= 200.00))) +Right keys [1]: [cd_demo_sk#10] +Join condition: ((((((cd_marital_status#11 = M) AND (cd_education_status#12 = 4 yr Degree )) AND (ss_sales_price#5 >= 100.00)) AND (ss_sales_price#5 <= 150.00)) OR ((((cd_marital_status#11 = D) AND (cd_education_status#12 = 2 yr Degree )) AND (ss_sales_price#5 >= 50.00)) AND (ss_sales_price#5 <= 100.00))) OR ((((cd_marital_status#11 = S) AND (cd_education_status#12 = College )) AND (ss_sales_price#5 >= 150.00)) AND (ss_sales_price#5 <= 200.00))) (15) Project [codegen id : 5] Output [4]: [ss_addr_sk#2, ss_quantity#4, ss_net_profit#6, ss_sold_date_sk#7] -Input [9]: [ss_cdemo_sk#1, ss_addr_sk#2, ss_quantity#4, ss_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, cd_demo_sk#11, cd_marital_status#12, cd_education_status#13] +Input [9]: [ss_cdemo_sk#1, ss_addr_sk#2, ss_quantity#4, ss_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, cd_demo_sk#10, cd_marital_status#11, cd_education_status#12] (16) Scan parquet default.customer_address -Output [3]: [ca_address_sk#15, ca_state#16, ca_country#17] +Output [3]: [ca_address_sk#13, ca_state#14, ca_country#15] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), EqualTo(ca_country,United States), IsNotNull(ca_address_sk), Or(Or(In(ca_state, [CO,OH,TX]),In(ca_state, [KY,MN,OR])),In(ca_state, [CA,MS,VA]))] ReadSchema: struct (17) ColumnarToRow [codegen id : 3] -Input [3]: [ca_address_sk#15, ca_state#16, ca_country#17] +Input [3]: [ca_address_sk#13, ca_state#14, ca_country#15] (18) Filter [codegen id : 3] -Input [3]: [ca_address_sk#15, ca_state#16, ca_country#17] -Condition : (((isnotnull(ca_country#17) AND (ca_country#17 = United States)) AND isnotnull(ca_address_sk#15)) AND ((ca_state#16 IN (CO,OH,TX) OR ca_state#16 IN (OR,MN,KY)) OR ca_state#16 IN (VA,CA,MS))) +Input [3]: [ca_address_sk#13, ca_state#14, ca_country#15] +Condition : (((isnotnull(ca_country#15) AND (ca_country#15 = United States)) AND isnotnull(ca_address_sk#13)) AND ((ca_state#14 IN (CO,OH,TX) OR ca_state#14 IN (OR,MN,KY)) OR ca_state#14 IN (VA,CA,MS))) (19) Project [codegen id : 3] -Output [2]: [ca_address_sk#15, ca_state#16] -Input [3]: [ca_address_sk#15, ca_state#16, ca_country#17] +Output [2]: [ca_address_sk#13, ca_state#14] +Input [3]: [ca_address_sk#13, ca_state#14, ca_country#15] (20) BroadcastExchange -Input [2]: [ca_address_sk#15, ca_state#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [2]: [ca_address_sk#13, ca_state#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_addr_sk#2] -Right keys [1]: [ca_address_sk#15] -Join condition: ((((ca_state#16 IN (CO,OH,TX) AND (ss_net_profit#6 >= 0.00)) AND (ss_net_profit#6 <= 2000.00)) OR ((ca_state#16 IN (OR,MN,KY) AND (ss_net_profit#6 >= 150.00)) AND (ss_net_profit#6 <= 3000.00))) OR ((ca_state#16 IN (VA,CA,MS) AND (ss_net_profit#6 >= 50.00)) AND (ss_net_profit#6 <= 25000.00))) +Right keys [1]: [ca_address_sk#13] +Join condition: ((((ca_state#14 IN (CO,OH,TX) AND (ss_net_profit#6 >= 0.00)) AND (ss_net_profit#6 <= 2000.00)) OR ((ca_state#14 IN (OR,MN,KY) AND (ss_net_profit#6 >= 150.00)) AND (ss_net_profit#6 <= 3000.00))) OR ((ca_state#14 IN (VA,CA,MS) AND (ss_net_profit#6 >= 50.00)) AND (ss_net_profit#6 <= 25000.00))) (22) Project [codegen id : 5] Output [2]: [ss_quantity#4, ss_sold_date_sk#7] -Input [6]: [ss_addr_sk#2, ss_quantity#4, ss_net_profit#6, ss_sold_date_sk#7, ca_address_sk#15, ca_state#16] +Input [6]: [ss_addr_sk#2, ss_quantity#4, ss_net_profit#6, ss_sold_date_sk#7, ca_address_sk#13, ca_state#14] (23) ReusedExchange [Reuses operator id: 33] -Output [1]: [d_date_sk#19] +Output [1]: [d_date_sk#16] (24) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_sold_date_sk#7] -Right keys [1]: [d_date_sk#19] +Right keys [1]: [d_date_sk#16] Join condition: None (25) Project [codegen id : 5] Output [1]: [ss_quantity#4] -Input [3]: [ss_quantity#4, ss_sold_date_sk#7, d_date_sk#19] +Input [3]: [ss_quantity#4, ss_sold_date_sk#7, d_date_sk#16] (26) HashAggregate [codegen id : 5] Input [1]: [ss_quantity#4] Keys: [] Functions [1]: [partial_sum(ss_quantity#4)] -Aggregate Attributes [1]: [sum#20] -Results [1]: [sum#21] +Aggregate Attributes [1]: [sum#17] +Results [1]: [sum#18] (27) Exchange -Input [1]: [sum#21] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#22] +Input [1]: [sum#18] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 6] -Input [1]: [sum#21] +Input [1]: [sum#18] Keys: [] Functions [1]: [sum(ss_quantity#4)] -Aggregate Attributes [1]: [sum(ss_quantity#4)#23] -Results [1]: [sum(ss_quantity#4)#23 AS sum(ss_quantity)#24] +Aggregate Attributes [1]: [sum(ss_quantity#4)#19] +Results [1]: [sum(ss_quantity#4)#19 AS sum(ss_quantity)#20] ===== Subqueries ===== @@ -170,25 +170,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [2]: [d_date_sk#19, d_year#25] +Output [2]: [d_date_sk#16, d_year#21] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#19, d_year#25] +Input [2]: [d_date_sk#16, d_year#21] (31) Filter [codegen id : 1] -Input [2]: [d_date_sk#19, d_year#25] -Condition : ((isnotnull(d_year#25) AND (d_year#25 = 2001)) AND isnotnull(d_date_sk#19)) +Input [2]: [d_date_sk#16, d_year#21] +Condition : ((isnotnull(d_year#21) AND (d_year#21 = 2001)) AND isnotnull(d_date_sk#16)) (32) Project [codegen id : 1] -Output [1]: [d_date_sk#19] -Input [2]: [d_date_sk#19, d_year#25] +Output [1]: [d_date_sk#16] +Input [2]: [d_date_sk#16, d_year#21] (33) BroadcastExchange -Input [1]: [d_date_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [1]: [d_date_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q48/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q48/explain.txt index c1cdc24ac44d8..5fa1b48ce7546 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q48/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q48/explain.txt @@ -60,7 +60,7 @@ Condition : isnotnull(s_store_sk#9) (7) BroadcastExchange Input [1]: [s_store_sk#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_store_sk#3] @@ -72,92 +72,92 @@ Output [6]: [ss_cdemo_sk#1, ss_addr_sk#2, ss_quantity#4, ss_sales_price#5, ss_ne Input [8]: [ss_cdemo_sk#1, ss_addr_sk#2, ss_store_sk#3, ss_quantity#4, ss_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, s_store_sk#9] (10) Scan parquet default.customer_demographics -Output [3]: [cd_demo_sk#11, cd_marital_status#12, cd_education_status#13] +Output [3]: [cd_demo_sk#10, cd_marital_status#11, cd_education_status#12] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), Or(Or(And(EqualTo(cd_marital_status,M),EqualTo(cd_education_status,4 yr Degree )),And(EqualTo(cd_marital_status,D),EqualTo(cd_education_status,2 yr Degree ))),And(EqualTo(cd_marital_status,S),EqualTo(cd_education_status,College )))] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [3]: [cd_demo_sk#11, cd_marital_status#12, cd_education_status#13] +Input [3]: [cd_demo_sk#10, cd_marital_status#11, cd_education_status#12] (12) Filter [codegen id : 2] -Input [3]: [cd_demo_sk#11, cd_marital_status#12, cd_education_status#13] -Condition : (isnotnull(cd_demo_sk#11) AND ((((cd_marital_status#12 = M) AND (cd_education_status#13 = 4 yr Degree )) OR ((cd_marital_status#12 = D) AND (cd_education_status#13 = 2 yr Degree ))) OR ((cd_marital_status#12 = S) AND (cd_education_status#13 = College )))) +Input [3]: [cd_demo_sk#10, cd_marital_status#11, cd_education_status#12] +Condition : (isnotnull(cd_demo_sk#10) AND ((((cd_marital_status#11 = M) AND (cd_education_status#12 = 4 yr Degree )) OR ((cd_marital_status#11 = D) AND (cd_education_status#12 = 2 yr Degree ))) OR ((cd_marital_status#11 = S) AND (cd_education_status#12 = College )))) (13) BroadcastExchange -Input [3]: [cd_demo_sk#11, cd_marital_status#12, cd_education_status#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Input [3]: [cd_demo_sk#10, cd_marital_status#11, cd_education_status#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_cdemo_sk#1] -Right keys [1]: [cd_demo_sk#11] -Join condition: ((((((cd_marital_status#12 = M) AND (cd_education_status#13 = 4 yr Degree )) AND (ss_sales_price#5 >= 100.00)) AND (ss_sales_price#5 <= 150.00)) OR ((((cd_marital_status#12 = D) AND (cd_education_status#13 = 2 yr Degree )) AND (ss_sales_price#5 >= 50.00)) AND (ss_sales_price#5 <= 100.00))) OR ((((cd_marital_status#12 = S) AND (cd_education_status#13 = College )) AND (ss_sales_price#5 >= 150.00)) AND (ss_sales_price#5 <= 200.00))) +Right keys [1]: [cd_demo_sk#10] +Join condition: ((((((cd_marital_status#11 = M) AND (cd_education_status#12 = 4 yr Degree )) AND (ss_sales_price#5 >= 100.00)) AND (ss_sales_price#5 <= 150.00)) OR ((((cd_marital_status#11 = D) AND (cd_education_status#12 = 2 yr Degree )) AND (ss_sales_price#5 >= 50.00)) AND (ss_sales_price#5 <= 100.00))) OR ((((cd_marital_status#11 = S) AND (cd_education_status#12 = College )) AND (ss_sales_price#5 >= 150.00)) AND (ss_sales_price#5 <= 200.00))) (15) Project [codegen id : 5] Output [4]: [ss_addr_sk#2, ss_quantity#4, ss_net_profit#6, ss_sold_date_sk#7] -Input [9]: [ss_cdemo_sk#1, ss_addr_sk#2, ss_quantity#4, ss_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, cd_demo_sk#11, cd_marital_status#12, cd_education_status#13] +Input [9]: [ss_cdemo_sk#1, ss_addr_sk#2, ss_quantity#4, ss_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, cd_demo_sk#10, cd_marital_status#11, cd_education_status#12] (16) Scan parquet default.customer_address -Output [3]: [ca_address_sk#15, ca_state#16, ca_country#17] +Output [3]: [ca_address_sk#13, ca_state#14, ca_country#15] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), EqualTo(ca_country,United States), IsNotNull(ca_address_sk), Or(Or(In(ca_state, [CO,OH,TX]),In(ca_state, [KY,MN,OR])),In(ca_state, [CA,MS,VA]))] ReadSchema: struct (17) ColumnarToRow [codegen id : 3] -Input [3]: [ca_address_sk#15, ca_state#16, ca_country#17] +Input [3]: [ca_address_sk#13, ca_state#14, ca_country#15] (18) Filter [codegen id : 3] -Input [3]: [ca_address_sk#15, ca_state#16, ca_country#17] -Condition : (((isnotnull(ca_country#17) AND (ca_country#17 = United States)) AND isnotnull(ca_address_sk#15)) AND ((ca_state#16 IN (CO,OH,TX) OR ca_state#16 IN (OR,MN,KY)) OR ca_state#16 IN (VA,CA,MS))) +Input [3]: [ca_address_sk#13, ca_state#14, ca_country#15] +Condition : (((isnotnull(ca_country#15) AND (ca_country#15 = United States)) AND isnotnull(ca_address_sk#13)) AND ((ca_state#14 IN (CO,OH,TX) OR ca_state#14 IN (OR,MN,KY)) OR ca_state#14 IN (VA,CA,MS))) (19) Project [codegen id : 3] -Output [2]: [ca_address_sk#15, ca_state#16] -Input [3]: [ca_address_sk#15, ca_state#16, ca_country#17] +Output [2]: [ca_address_sk#13, ca_state#14] +Input [3]: [ca_address_sk#13, ca_state#14, ca_country#15] (20) BroadcastExchange -Input [2]: [ca_address_sk#15, ca_state#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [2]: [ca_address_sk#13, ca_state#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_addr_sk#2] -Right keys [1]: [ca_address_sk#15] -Join condition: ((((ca_state#16 IN (CO,OH,TX) AND (ss_net_profit#6 >= 0.00)) AND (ss_net_profit#6 <= 2000.00)) OR ((ca_state#16 IN (OR,MN,KY) AND (ss_net_profit#6 >= 150.00)) AND (ss_net_profit#6 <= 3000.00))) OR ((ca_state#16 IN (VA,CA,MS) AND (ss_net_profit#6 >= 50.00)) AND (ss_net_profit#6 <= 25000.00))) +Right keys [1]: [ca_address_sk#13] +Join condition: ((((ca_state#14 IN (CO,OH,TX) AND (ss_net_profit#6 >= 0.00)) AND (ss_net_profit#6 <= 2000.00)) OR ((ca_state#14 IN (OR,MN,KY) AND (ss_net_profit#6 >= 150.00)) AND (ss_net_profit#6 <= 3000.00))) OR ((ca_state#14 IN (VA,CA,MS) AND (ss_net_profit#6 >= 50.00)) AND (ss_net_profit#6 <= 25000.00))) (22) Project [codegen id : 5] Output [2]: [ss_quantity#4, ss_sold_date_sk#7] -Input [6]: [ss_addr_sk#2, ss_quantity#4, ss_net_profit#6, ss_sold_date_sk#7, ca_address_sk#15, ca_state#16] +Input [6]: [ss_addr_sk#2, ss_quantity#4, ss_net_profit#6, ss_sold_date_sk#7, ca_address_sk#13, ca_state#14] (23) ReusedExchange [Reuses operator id: 33] -Output [1]: [d_date_sk#19] +Output [1]: [d_date_sk#16] (24) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_sold_date_sk#7] -Right keys [1]: [d_date_sk#19] +Right keys [1]: [d_date_sk#16] Join condition: None (25) Project [codegen id : 5] Output [1]: [ss_quantity#4] -Input [3]: [ss_quantity#4, ss_sold_date_sk#7, d_date_sk#19] +Input [3]: [ss_quantity#4, ss_sold_date_sk#7, d_date_sk#16] (26) HashAggregate [codegen id : 5] Input [1]: [ss_quantity#4] Keys: [] Functions [1]: [partial_sum(ss_quantity#4)] -Aggregate Attributes [1]: [sum#20] -Results [1]: [sum#21] +Aggregate Attributes [1]: [sum#17] +Results [1]: [sum#18] (27) Exchange -Input [1]: [sum#21] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#22] +Input [1]: [sum#18] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 6] -Input [1]: [sum#21] +Input [1]: [sum#18] Keys: [] Functions [1]: [sum(ss_quantity#4)] -Aggregate Attributes [1]: [sum(ss_quantity#4)#23] -Results [1]: [sum(ss_quantity#4)#23 AS sum(ss_quantity)#24] +Aggregate Attributes [1]: [sum(ss_quantity#4)#19] +Results [1]: [sum(ss_quantity#4)#19 AS sum(ss_quantity)#20] ===== Subqueries ===== @@ -170,25 +170,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [2]: [d_date_sk#19, d_year#25] +Output [2]: [d_date_sk#16, d_year#21] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#19, d_year#25] +Input [2]: [d_date_sk#16, d_year#21] (31) Filter [codegen id : 1] -Input [2]: [d_date_sk#19, d_year#25] -Condition : ((isnotnull(d_year#25) AND (d_year#25 = 2001)) AND isnotnull(d_date_sk#19)) +Input [2]: [d_date_sk#16, d_year#21] +Condition : ((isnotnull(d_year#21) AND (d_year#21 = 2001)) AND isnotnull(d_date_sk#16)) (32) Project [codegen id : 1] -Output [1]: [d_date_sk#19] -Input [2]: [d_date_sk#19, d_year#25] +Output [1]: [d_date_sk#16] +Input [2]: [d_date_sk#16, d_year#21] (33) BroadcastExchange -Input [1]: [d_date_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [1]: [d_date_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q49.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q49.sf100/explain.txt index 65606c025adc4..a73794d268177 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q49.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q49.sf100/explain.txt @@ -120,356 +120,356 @@ Input [6]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_so (8) Exchange Input [4]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4] -Arguments: hashpartitioning(ws_order_number#2, ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ws_order_number#2, ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (9) Sort [codegen id : 3] Input [4]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4] Arguments: [ws_order_number#2 ASC NULLS FIRST, ws_item_sk#1 ASC NULLS FIRST], false, 0 (10) Scan parquet default.web_returns -Output [5]: [wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13, wr_returned_date_sk#14] +Output [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_return_amt), GreaterThan(wr_return_amt,10000.00), IsNotNull(wr_order_number), IsNotNull(wr_item_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 4] -Input [5]: [wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13, wr_returned_date_sk#14] +Input [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] (12) Filter [codegen id : 4] -Input [5]: [wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13, wr_returned_date_sk#14] -Condition : (((isnotnull(wr_return_amt#13) AND (wr_return_amt#13 > 10000.00)) AND isnotnull(wr_order_number#11)) AND isnotnull(wr_item_sk#10)) +Input [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] +Condition : (((isnotnull(wr_return_amt#12) AND (wr_return_amt#12 > 10000.00)) AND isnotnull(wr_order_number#10)) AND isnotnull(wr_item_sk#9)) (13) Project [codegen id : 4] -Output [4]: [wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13] -Input [5]: [wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13, wr_returned_date_sk#14] +Output [4]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12] +Input [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] (14) Exchange -Input [4]: [wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13] -Arguments: hashpartitioning(wr_order_number#11, wr_item_sk#10, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12] +Arguments: hashpartitioning(wr_order_number#10, wr_item_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) Sort [codegen id : 5] -Input [4]: [wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13] -Arguments: [wr_order_number#11 ASC NULLS FIRST, wr_item_sk#10 ASC NULLS FIRST], false, 0 +Input [4]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12] +Arguments: [wr_order_number#10 ASC NULLS FIRST, wr_item_sk#9 ASC NULLS FIRST], false, 0 (16) SortMergeJoin [codegen id : 6] Left keys [2]: [ws_order_number#2, ws_item_sk#1] -Right keys [2]: [wr_order_number#11, wr_item_sk#10] +Right keys [2]: [wr_order_number#10, wr_item_sk#9] Join condition: None (17) Project [codegen id : 6] -Output [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#12, wr_return_amt#13] -Input [8]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13] +Output [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#11, wr_return_amt#12] +Input [8]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12] (18) HashAggregate [codegen id : 6] -Input [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#12, wr_return_amt#13] +Input [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#11, wr_return_amt#12] Keys [1]: [ws_item_sk#1] -Functions [4]: [partial_sum(coalesce(wr_return_quantity#12, 0)), partial_sum(coalesce(ws_quantity#3, 0)), partial_sum(coalesce(cast(wr_return_amt#13 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] -Aggregate Attributes [6]: [sum#16, sum#17, sum#18, isEmpty#19, sum#20, isEmpty#21] -Results [7]: [ws_item_sk#1, sum#22, sum#23, sum#24, isEmpty#25, sum#26, isEmpty#27] +Functions [4]: [partial_sum(coalesce(wr_return_quantity#11, 0)), partial_sum(coalesce(ws_quantity#3, 0)), partial_sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] +Aggregate Attributes [6]: [sum#14, sum#15, sum#16, isEmpty#17, sum#18, isEmpty#19] +Results [7]: [ws_item_sk#1, sum#20, sum#21, sum#22, isEmpty#23, sum#24, isEmpty#25] (19) Exchange -Input [7]: [ws_item_sk#1, sum#22, sum#23, sum#24, isEmpty#25, sum#26, isEmpty#27] -Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [7]: [ws_item_sk#1, sum#20, sum#21, sum#22, isEmpty#23, sum#24, isEmpty#25] +Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 7] -Input [7]: [ws_item_sk#1, sum#22, sum#23, sum#24, isEmpty#25, sum#26, isEmpty#27] +Input [7]: [ws_item_sk#1, sum#20, sum#21, sum#22, isEmpty#23, sum#24, isEmpty#25] Keys [1]: [ws_item_sk#1] -Functions [4]: [sum(coalesce(wr_return_quantity#12, 0)), sum(coalesce(ws_quantity#3, 0)), sum(coalesce(cast(wr_return_amt#13 as decimal(12,2)), 0.00)), sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] -Aggregate Attributes [4]: [sum(coalesce(wr_return_quantity#12, 0))#29, sum(coalesce(ws_quantity#3, 0))#30, sum(coalesce(cast(wr_return_amt#13 as decimal(12,2)), 0.00))#31, sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#32] -Results [3]: [ws_item_sk#1 AS item#33, CheckOverflow((promote_precision(cast(sum(coalesce(wr_return_quantity#12, 0))#29 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ws_quantity#3, 0))#30 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#34, CheckOverflow((promote_precision(cast(sum(coalesce(cast(wr_return_amt#13 as decimal(12,2)), 0.00))#31 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#32 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#35] +Functions [4]: [sum(coalesce(wr_return_quantity#11, 0)), sum(coalesce(ws_quantity#3, 0)), sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00)), sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] +Aggregate Attributes [4]: [sum(coalesce(wr_return_quantity#11, 0))#26, sum(coalesce(ws_quantity#3, 0))#27, sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00))#28, sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#29] +Results [3]: [ws_item_sk#1 AS item#30, CheckOverflow((promote_precision(cast(sum(coalesce(wr_return_quantity#11, 0))#26 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ws_quantity#3, 0))#27 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#31, CheckOverflow((promote_precision(cast(sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00))#28 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#29 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#32] (21) Exchange -Input [3]: [item#33, return_ratio#34, currency_ratio#35] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#36] +Input [3]: [item#30, return_ratio#31, currency_ratio#32] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (22) Sort [codegen id : 8] -Input [3]: [item#33, return_ratio#34, currency_ratio#35] -Arguments: [return_ratio#34 ASC NULLS FIRST], false, 0 +Input [3]: [item#30, return_ratio#31, currency_ratio#32] +Arguments: [return_ratio#31 ASC NULLS FIRST], false, 0 (23) Window -Input [3]: [item#33, return_ratio#34, currency_ratio#35] -Arguments: [rank(return_ratio#34) windowspecdefinition(return_ratio#34 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#37], [return_ratio#34 ASC NULLS FIRST] +Input [3]: [item#30, return_ratio#31, currency_ratio#32] +Arguments: [rank(return_ratio#31) windowspecdefinition(return_ratio#31 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#33], [return_ratio#31 ASC NULLS FIRST] (24) Sort [codegen id : 9] -Input [4]: [item#33, return_ratio#34, currency_ratio#35, return_rank#37] -Arguments: [currency_ratio#35 ASC NULLS FIRST], false, 0 +Input [4]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33] +Arguments: [currency_ratio#32 ASC NULLS FIRST], false, 0 (25) Window -Input [4]: [item#33, return_ratio#34, currency_ratio#35, return_rank#37] -Arguments: [rank(currency_ratio#35) windowspecdefinition(currency_ratio#35 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#38], [currency_ratio#35 ASC NULLS FIRST] +Input [4]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33] +Arguments: [rank(currency_ratio#32) windowspecdefinition(currency_ratio#32 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#34], [currency_ratio#32 ASC NULLS FIRST] (26) Filter [codegen id : 10] -Input [5]: [item#33, return_ratio#34, currency_ratio#35, return_rank#37, currency_rank#38] -Condition : ((return_rank#37 <= 10) OR (currency_rank#38 <= 10)) +Input [5]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33, currency_rank#34] +Condition : ((return_rank#33 <= 10) OR (currency_rank#34 <= 10)) (27) Project [codegen id : 10] -Output [5]: [web AS channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] -Input [5]: [item#33, return_ratio#34, currency_ratio#35, return_rank#37, currency_rank#38] +Output [5]: [web AS channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Input [5]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33, currency_rank#34] (28) Scan parquet default.catalog_sales -Output [6]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43, cs_net_profit#44, cs_sold_date_sk#45] +Output [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#45), dynamicpruningexpression(cs_sold_date_sk#45 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(cs_sold_date_sk#41), dynamicpruningexpression(cs_sold_date_sk#41 IN dynamicpruning#7)] PushedFilters: [IsNotNull(cs_net_profit), IsNotNull(cs_net_paid), IsNotNull(cs_quantity), GreaterThan(cs_net_profit,1.00), GreaterThan(cs_net_paid,0.00), GreaterThan(cs_quantity,0), IsNotNull(cs_order_number), IsNotNull(cs_item_sk)] ReadSchema: struct (29) ColumnarToRow [codegen id : 12] -Input [6]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43, cs_net_profit#44, cs_sold_date_sk#45] +Input [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] (30) Filter [codegen id : 12] -Input [6]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43, cs_net_profit#44, cs_sold_date_sk#45] -Condition : (((((((isnotnull(cs_net_profit#44) AND isnotnull(cs_net_paid#43)) AND isnotnull(cs_quantity#42)) AND (cs_net_profit#44 > 1.00)) AND (cs_net_paid#43 > 0.00)) AND (cs_quantity#42 > 0)) AND isnotnull(cs_order_number#41)) AND isnotnull(cs_item_sk#40)) +Input [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] +Condition : (((((((isnotnull(cs_net_profit#40) AND isnotnull(cs_net_paid#39)) AND isnotnull(cs_quantity#38)) AND (cs_net_profit#40 > 1.00)) AND (cs_net_paid#39 > 0.00)) AND (cs_quantity#38 > 0)) AND isnotnull(cs_order_number#37)) AND isnotnull(cs_item_sk#36)) (31) Project [codegen id : 12] -Output [5]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43, cs_sold_date_sk#45] -Input [6]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43, cs_net_profit#44, cs_sold_date_sk#45] +Output [5]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_sold_date_sk#41] +Input [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] (32) ReusedExchange [Reuses operator id: 91] -Output [1]: [d_date_sk#46] +Output [1]: [d_date_sk#42] (33) BroadcastHashJoin [codegen id : 12] -Left keys [1]: [cs_sold_date_sk#45] -Right keys [1]: [d_date_sk#46] +Left keys [1]: [cs_sold_date_sk#41] +Right keys [1]: [d_date_sk#42] Join condition: None (34) Project [codegen id : 12] -Output [4]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43] -Input [6]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43, cs_sold_date_sk#45, d_date_sk#46] +Output [4]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39] +Input [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_sold_date_sk#41, d_date_sk#42] (35) Exchange -Input [4]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43] -Arguments: hashpartitioning(cs_order_number#41, cs_item_sk#40, 5), ENSURE_REQUIREMENTS, [id=#47] +Input [4]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39] +Arguments: hashpartitioning(cs_order_number#37, cs_item_sk#36, 5), ENSURE_REQUIREMENTS, [plan_id=5] (36) Sort [codegen id : 13] -Input [4]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43] -Arguments: [cs_order_number#41 ASC NULLS FIRST, cs_item_sk#40 ASC NULLS FIRST], false, 0 +Input [4]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39] +Arguments: [cs_order_number#37 ASC NULLS FIRST, cs_item_sk#36 ASC NULLS FIRST], false, 0 (37) Scan parquet default.catalog_returns -Output [5]: [cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51, cr_returned_date_sk#52] +Output [5]: [cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46, cr_returned_date_sk#47] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_return_amount), GreaterThan(cr_return_amount,10000.00), IsNotNull(cr_order_number), IsNotNull(cr_item_sk)] ReadSchema: struct (38) ColumnarToRow [codegen id : 14] -Input [5]: [cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51, cr_returned_date_sk#52] +Input [5]: [cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46, cr_returned_date_sk#47] (39) Filter [codegen id : 14] -Input [5]: [cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51, cr_returned_date_sk#52] -Condition : (((isnotnull(cr_return_amount#51) AND (cr_return_amount#51 > 10000.00)) AND isnotnull(cr_order_number#49)) AND isnotnull(cr_item_sk#48)) +Input [5]: [cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46, cr_returned_date_sk#47] +Condition : (((isnotnull(cr_return_amount#46) AND (cr_return_amount#46 > 10000.00)) AND isnotnull(cr_order_number#44)) AND isnotnull(cr_item_sk#43)) (40) Project [codegen id : 14] -Output [4]: [cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51] -Input [5]: [cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51, cr_returned_date_sk#52] +Output [4]: [cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46] +Input [5]: [cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46, cr_returned_date_sk#47] (41) Exchange -Input [4]: [cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51] -Arguments: hashpartitioning(cr_order_number#49, cr_item_sk#48, 5), ENSURE_REQUIREMENTS, [id=#53] +Input [4]: [cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46] +Arguments: hashpartitioning(cr_order_number#44, cr_item_sk#43, 5), ENSURE_REQUIREMENTS, [plan_id=6] (42) Sort [codegen id : 15] -Input [4]: [cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51] -Arguments: [cr_order_number#49 ASC NULLS FIRST, cr_item_sk#48 ASC NULLS FIRST], false, 0 +Input [4]: [cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46] +Arguments: [cr_order_number#44 ASC NULLS FIRST, cr_item_sk#43 ASC NULLS FIRST], false, 0 (43) SortMergeJoin [codegen id : 16] -Left keys [2]: [cs_order_number#41, cs_item_sk#40] -Right keys [2]: [cr_order_number#49, cr_item_sk#48] +Left keys [2]: [cs_order_number#37, cs_item_sk#36] +Right keys [2]: [cr_order_number#44, cr_item_sk#43] Join condition: None (44) Project [codegen id : 16] -Output [5]: [cs_item_sk#40, cs_quantity#42, cs_net_paid#43, cr_return_quantity#50, cr_return_amount#51] -Input [8]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43, cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51] +Output [5]: [cs_item_sk#36, cs_quantity#38, cs_net_paid#39, cr_return_quantity#45, cr_return_amount#46] +Input [8]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46] (45) HashAggregate [codegen id : 16] -Input [5]: [cs_item_sk#40, cs_quantity#42, cs_net_paid#43, cr_return_quantity#50, cr_return_amount#51] -Keys [1]: [cs_item_sk#40] -Functions [4]: [partial_sum(coalesce(cr_return_quantity#50, 0)), partial_sum(coalesce(cs_quantity#42, 0)), partial_sum(coalesce(cast(cr_return_amount#51 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(cs_net_paid#43 as decimal(12,2)), 0.00))] -Aggregate Attributes [6]: [sum#54, sum#55, sum#56, isEmpty#57, sum#58, isEmpty#59] -Results [7]: [cs_item_sk#40, sum#60, sum#61, sum#62, isEmpty#63, sum#64, isEmpty#65] +Input [5]: [cs_item_sk#36, cs_quantity#38, cs_net_paid#39, cr_return_quantity#45, cr_return_amount#46] +Keys [1]: [cs_item_sk#36] +Functions [4]: [partial_sum(coalesce(cr_return_quantity#45, 0)), partial_sum(coalesce(cs_quantity#38, 0)), partial_sum(coalesce(cast(cr_return_amount#46 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))] +Aggregate Attributes [6]: [sum#48, sum#49, sum#50, isEmpty#51, sum#52, isEmpty#53] +Results [7]: [cs_item_sk#36, sum#54, sum#55, sum#56, isEmpty#57, sum#58, isEmpty#59] (46) Exchange -Input [7]: [cs_item_sk#40, sum#60, sum#61, sum#62, isEmpty#63, sum#64, isEmpty#65] -Arguments: hashpartitioning(cs_item_sk#40, 5), ENSURE_REQUIREMENTS, [id=#66] +Input [7]: [cs_item_sk#36, sum#54, sum#55, sum#56, isEmpty#57, sum#58, isEmpty#59] +Arguments: hashpartitioning(cs_item_sk#36, 5), ENSURE_REQUIREMENTS, [plan_id=7] (47) HashAggregate [codegen id : 17] -Input [7]: [cs_item_sk#40, sum#60, sum#61, sum#62, isEmpty#63, sum#64, isEmpty#65] -Keys [1]: [cs_item_sk#40] -Functions [4]: [sum(coalesce(cr_return_quantity#50, 0)), sum(coalesce(cs_quantity#42, 0)), sum(coalesce(cast(cr_return_amount#51 as decimal(12,2)), 0.00)), sum(coalesce(cast(cs_net_paid#43 as decimal(12,2)), 0.00))] -Aggregate Attributes [4]: [sum(coalesce(cr_return_quantity#50, 0))#67, sum(coalesce(cs_quantity#42, 0))#68, sum(coalesce(cast(cr_return_amount#51 as decimal(12,2)), 0.00))#69, sum(coalesce(cast(cs_net_paid#43 as decimal(12,2)), 0.00))#70] -Results [3]: [cs_item_sk#40 AS item#71, CheckOverflow((promote_precision(cast(sum(coalesce(cr_return_quantity#50, 0))#67 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cs_quantity#42, 0))#68 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#72, CheckOverflow((promote_precision(cast(sum(coalesce(cast(cr_return_amount#51 as decimal(12,2)), 0.00))#69 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(cs_net_paid#43 as decimal(12,2)), 0.00))#70 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#73] +Input [7]: [cs_item_sk#36, sum#54, sum#55, sum#56, isEmpty#57, sum#58, isEmpty#59] +Keys [1]: [cs_item_sk#36] +Functions [4]: [sum(coalesce(cr_return_quantity#45, 0)), sum(coalesce(cs_quantity#38, 0)), sum(coalesce(cast(cr_return_amount#46 as decimal(12,2)), 0.00)), sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))] +Aggregate Attributes [4]: [sum(coalesce(cr_return_quantity#45, 0))#60, sum(coalesce(cs_quantity#38, 0))#61, sum(coalesce(cast(cr_return_amount#46 as decimal(12,2)), 0.00))#62, sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))#63] +Results [3]: [cs_item_sk#36 AS item#64, CheckOverflow((promote_precision(cast(sum(coalesce(cr_return_quantity#45, 0))#60 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cs_quantity#38, 0))#61 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#65, CheckOverflow((promote_precision(cast(sum(coalesce(cast(cr_return_amount#46 as decimal(12,2)), 0.00))#62 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))#63 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#66] (48) Exchange -Input [3]: [item#71, return_ratio#72, currency_ratio#73] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#74] +Input [3]: [item#64, return_ratio#65, currency_ratio#66] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8] (49) Sort [codegen id : 18] -Input [3]: [item#71, return_ratio#72, currency_ratio#73] -Arguments: [return_ratio#72 ASC NULLS FIRST], false, 0 +Input [3]: [item#64, return_ratio#65, currency_ratio#66] +Arguments: [return_ratio#65 ASC NULLS FIRST], false, 0 (50) Window -Input [3]: [item#71, return_ratio#72, currency_ratio#73] -Arguments: [rank(return_ratio#72) windowspecdefinition(return_ratio#72 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#75], [return_ratio#72 ASC NULLS FIRST] +Input [3]: [item#64, return_ratio#65, currency_ratio#66] +Arguments: [rank(return_ratio#65) windowspecdefinition(return_ratio#65 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#67], [return_ratio#65 ASC NULLS FIRST] (51) Sort [codegen id : 19] -Input [4]: [item#71, return_ratio#72, currency_ratio#73, return_rank#75] -Arguments: [currency_ratio#73 ASC NULLS FIRST], false, 0 +Input [4]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67] +Arguments: [currency_ratio#66 ASC NULLS FIRST], false, 0 (52) Window -Input [4]: [item#71, return_ratio#72, currency_ratio#73, return_rank#75] -Arguments: [rank(currency_ratio#73) windowspecdefinition(currency_ratio#73 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#76], [currency_ratio#73 ASC NULLS FIRST] +Input [4]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67] +Arguments: [rank(currency_ratio#66) windowspecdefinition(currency_ratio#66 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#68], [currency_ratio#66 ASC NULLS FIRST] (53) Filter [codegen id : 20] -Input [5]: [item#71, return_ratio#72, currency_ratio#73, return_rank#75, currency_rank#76] -Condition : ((return_rank#75 <= 10) OR (currency_rank#76 <= 10)) +Input [5]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67, currency_rank#68] +Condition : ((return_rank#67 <= 10) OR (currency_rank#68 <= 10)) (54) Project [codegen id : 20] -Output [5]: [catalog AS channel#77, item#71, return_ratio#72, return_rank#75, currency_rank#76] -Input [5]: [item#71, return_ratio#72, currency_ratio#73, return_rank#75, currency_rank#76] +Output [5]: [catalog AS channel#69, item#64, return_ratio#65, return_rank#67, currency_rank#68] +Input [5]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67, currency_rank#68] (55) Scan parquet default.store_sales -Output [6]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81, ss_net_profit#82, ss_sold_date_sk#83] +Output [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#83), dynamicpruningexpression(ss_sold_date_sk#83 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(ss_sold_date_sk#75), dynamicpruningexpression(ss_sold_date_sk#75 IN dynamicpruning#7)] PushedFilters: [IsNotNull(ss_net_profit), IsNotNull(ss_net_paid), IsNotNull(ss_quantity), GreaterThan(ss_net_profit,1.00), GreaterThan(ss_net_paid,0.00), GreaterThan(ss_quantity,0), IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk)] ReadSchema: struct (56) ColumnarToRow [codegen id : 22] -Input [6]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81, ss_net_profit#82, ss_sold_date_sk#83] +Input [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] (57) Filter [codegen id : 22] -Input [6]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81, ss_net_profit#82, ss_sold_date_sk#83] -Condition : (((((((isnotnull(ss_net_profit#82) AND isnotnull(ss_net_paid#81)) AND isnotnull(ss_quantity#80)) AND (ss_net_profit#82 > 1.00)) AND (ss_net_paid#81 > 0.00)) AND (ss_quantity#80 > 0)) AND isnotnull(ss_ticket_number#79)) AND isnotnull(ss_item_sk#78)) +Input [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] +Condition : (((((((isnotnull(ss_net_profit#74) AND isnotnull(ss_net_paid#73)) AND isnotnull(ss_quantity#72)) AND (ss_net_profit#74 > 1.00)) AND (ss_net_paid#73 > 0.00)) AND (ss_quantity#72 > 0)) AND isnotnull(ss_ticket_number#71)) AND isnotnull(ss_item_sk#70)) (58) Project [codegen id : 22] -Output [5]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81, ss_sold_date_sk#83] -Input [6]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81, ss_net_profit#82, ss_sold_date_sk#83] +Output [5]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_sold_date_sk#75] +Input [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] (59) ReusedExchange [Reuses operator id: 91] -Output [1]: [d_date_sk#84] +Output [1]: [d_date_sk#76] (60) BroadcastHashJoin [codegen id : 22] -Left keys [1]: [ss_sold_date_sk#83] -Right keys [1]: [d_date_sk#84] +Left keys [1]: [ss_sold_date_sk#75] +Right keys [1]: [d_date_sk#76] Join condition: None (61) Project [codegen id : 22] -Output [4]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81] -Input [6]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81, ss_sold_date_sk#83, d_date_sk#84] +Output [4]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73] +Input [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_sold_date_sk#75, d_date_sk#76] (62) Exchange -Input [4]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81] -Arguments: hashpartitioning(ss_ticket_number#79, ss_item_sk#78, 5), ENSURE_REQUIREMENTS, [id=#85] +Input [4]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73] +Arguments: hashpartitioning(ss_ticket_number#71, ss_item_sk#70, 5), ENSURE_REQUIREMENTS, [plan_id=9] (63) Sort [codegen id : 23] -Input [4]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81] -Arguments: [ss_ticket_number#79 ASC NULLS FIRST, ss_item_sk#78 ASC NULLS FIRST], false, 0 +Input [4]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73] +Arguments: [ss_ticket_number#71 ASC NULLS FIRST, ss_item_sk#70 ASC NULLS FIRST], false, 0 (64) Scan parquet default.store_returns -Output [5]: [sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89, sr_returned_date_sk#90] +Output [5]: [sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80, sr_returned_date_sk#81] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_return_amt), GreaterThan(sr_return_amt,10000.00), IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct (65) ColumnarToRow [codegen id : 24] -Input [5]: [sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89, sr_returned_date_sk#90] +Input [5]: [sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80, sr_returned_date_sk#81] (66) Filter [codegen id : 24] -Input [5]: [sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89, sr_returned_date_sk#90] -Condition : (((isnotnull(sr_return_amt#89) AND (sr_return_amt#89 > 10000.00)) AND isnotnull(sr_ticket_number#87)) AND isnotnull(sr_item_sk#86)) +Input [5]: [sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80, sr_returned_date_sk#81] +Condition : (((isnotnull(sr_return_amt#80) AND (sr_return_amt#80 > 10000.00)) AND isnotnull(sr_ticket_number#78)) AND isnotnull(sr_item_sk#77)) (67) Project [codegen id : 24] -Output [4]: [sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89] -Input [5]: [sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89, sr_returned_date_sk#90] +Output [4]: [sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80] +Input [5]: [sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80, sr_returned_date_sk#81] (68) Exchange -Input [4]: [sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89] -Arguments: hashpartitioning(sr_ticket_number#87, sr_item_sk#86, 5), ENSURE_REQUIREMENTS, [id=#91] +Input [4]: [sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80] +Arguments: hashpartitioning(sr_ticket_number#78, sr_item_sk#77, 5), ENSURE_REQUIREMENTS, [plan_id=10] (69) Sort [codegen id : 25] -Input [4]: [sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89] -Arguments: [sr_ticket_number#87 ASC NULLS FIRST, sr_item_sk#86 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80] +Arguments: [sr_ticket_number#78 ASC NULLS FIRST, sr_item_sk#77 ASC NULLS FIRST], false, 0 (70) SortMergeJoin [codegen id : 26] -Left keys [2]: [ss_ticket_number#79, ss_item_sk#78] -Right keys [2]: [sr_ticket_number#87, sr_item_sk#86] +Left keys [2]: [ss_ticket_number#71, ss_item_sk#70] +Right keys [2]: [sr_ticket_number#78, sr_item_sk#77] Join condition: None (71) Project [codegen id : 26] -Output [5]: [ss_item_sk#78, ss_quantity#80, ss_net_paid#81, sr_return_quantity#88, sr_return_amt#89] -Input [8]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81, sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89] +Output [5]: [ss_item_sk#70, ss_quantity#72, ss_net_paid#73, sr_return_quantity#79, sr_return_amt#80] +Input [8]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80] (72) HashAggregate [codegen id : 26] -Input [5]: [ss_item_sk#78, ss_quantity#80, ss_net_paid#81, sr_return_quantity#88, sr_return_amt#89] -Keys [1]: [ss_item_sk#78] -Functions [4]: [partial_sum(coalesce(sr_return_quantity#88, 0)), partial_sum(coalesce(ss_quantity#80, 0)), partial_sum(coalesce(cast(sr_return_amt#89 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ss_net_paid#81 as decimal(12,2)), 0.00))] -Aggregate Attributes [6]: [sum#92, sum#93, sum#94, isEmpty#95, sum#96, isEmpty#97] -Results [7]: [ss_item_sk#78, sum#98, sum#99, sum#100, isEmpty#101, sum#102, isEmpty#103] +Input [5]: [ss_item_sk#70, ss_quantity#72, ss_net_paid#73, sr_return_quantity#79, sr_return_amt#80] +Keys [1]: [ss_item_sk#70] +Functions [4]: [partial_sum(coalesce(sr_return_quantity#79, 0)), partial_sum(coalesce(ss_quantity#72, 0)), partial_sum(coalesce(cast(sr_return_amt#80 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))] +Aggregate Attributes [6]: [sum#82, sum#83, sum#84, isEmpty#85, sum#86, isEmpty#87] +Results [7]: [ss_item_sk#70, sum#88, sum#89, sum#90, isEmpty#91, sum#92, isEmpty#93] (73) Exchange -Input [7]: [ss_item_sk#78, sum#98, sum#99, sum#100, isEmpty#101, sum#102, isEmpty#103] -Arguments: hashpartitioning(ss_item_sk#78, 5), ENSURE_REQUIREMENTS, [id=#104] +Input [7]: [ss_item_sk#70, sum#88, sum#89, sum#90, isEmpty#91, sum#92, isEmpty#93] +Arguments: hashpartitioning(ss_item_sk#70, 5), ENSURE_REQUIREMENTS, [plan_id=11] (74) HashAggregate [codegen id : 27] -Input [7]: [ss_item_sk#78, sum#98, sum#99, sum#100, isEmpty#101, sum#102, isEmpty#103] -Keys [1]: [ss_item_sk#78] -Functions [4]: [sum(coalesce(sr_return_quantity#88, 0)), sum(coalesce(ss_quantity#80, 0)), sum(coalesce(cast(sr_return_amt#89 as decimal(12,2)), 0.00)), sum(coalesce(cast(ss_net_paid#81 as decimal(12,2)), 0.00))] -Aggregate Attributes [4]: [sum(coalesce(sr_return_quantity#88, 0))#105, sum(coalesce(ss_quantity#80, 0))#106, sum(coalesce(cast(sr_return_amt#89 as decimal(12,2)), 0.00))#107, sum(coalesce(cast(ss_net_paid#81 as decimal(12,2)), 0.00))#108] -Results [3]: [ss_item_sk#78 AS item#109, CheckOverflow((promote_precision(cast(sum(coalesce(sr_return_quantity#88, 0))#105 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ss_quantity#80, 0))#106 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#110, CheckOverflow((promote_precision(cast(sum(coalesce(cast(sr_return_amt#89 as decimal(12,2)), 0.00))#107 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ss_net_paid#81 as decimal(12,2)), 0.00))#108 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#111] +Input [7]: [ss_item_sk#70, sum#88, sum#89, sum#90, isEmpty#91, sum#92, isEmpty#93] +Keys [1]: [ss_item_sk#70] +Functions [4]: [sum(coalesce(sr_return_quantity#79, 0)), sum(coalesce(ss_quantity#72, 0)), sum(coalesce(cast(sr_return_amt#80 as decimal(12,2)), 0.00)), sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))] +Aggregate Attributes [4]: [sum(coalesce(sr_return_quantity#79, 0))#94, sum(coalesce(ss_quantity#72, 0))#95, sum(coalesce(cast(sr_return_amt#80 as decimal(12,2)), 0.00))#96, sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))#97] +Results [3]: [ss_item_sk#70 AS item#98, CheckOverflow((promote_precision(cast(sum(coalesce(sr_return_quantity#79, 0))#94 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ss_quantity#72, 0))#95 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#99, CheckOverflow((promote_precision(cast(sum(coalesce(cast(sr_return_amt#80 as decimal(12,2)), 0.00))#96 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))#97 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#100] (75) Exchange -Input [3]: [item#109, return_ratio#110, currency_ratio#111] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#112] +Input [3]: [item#98, return_ratio#99, currency_ratio#100] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12] (76) Sort [codegen id : 28] -Input [3]: [item#109, return_ratio#110, currency_ratio#111] -Arguments: [return_ratio#110 ASC NULLS FIRST], false, 0 +Input [3]: [item#98, return_ratio#99, currency_ratio#100] +Arguments: [return_ratio#99 ASC NULLS FIRST], false, 0 (77) Window -Input [3]: [item#109, return_ratio#110, currency_ratio#111] -Arguments: [rank(return_ratio#110) windowspecdefinition(return_ratio#110 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#113], [return_ratio#110 ASC NULLS FIRST] +Input [3]: [item#98, return_ratio#99, currency_ratio#100] +Arguments: [rank(return_ratio#99) windowspecdefinition(return_ratio#99 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#101], [return_ratio#99 ASC NULLS FIRST] (78) Sort [codegen id : 29] -Input [4]: [item#109, return_ratio#110, currency_ratio#111, return_rank#113] -Arguments: [currency_ratio#111 ASC NULLS FIRST], false, 0 +Input [4]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101] +Arguments: [currency_ratio#100 ASC NULLS FIRST], false, 0 (79) Window -Input [4]: [item#109, return_ratio#110, currency_ratio#111, return_rank#113] -Arguments: [rank(currency_ratio#111) windowspecdefinition(currency_ratio#111 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#114], [currency_ratio#111 ASC NULLS FIRST] +Input [4]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101] +Arguments: [rank(currency_ratio#100) windowspecdefinition(currency_ratio#100 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#102], [currency_ratio#100 ASC NULLS FIRST] (80) Filter [codegen id : 30] -Input [5]: [item#109, return_ratio#110, currency_ratio#111, return_rank#113, currency_rank#114] -Condition : ((return_rank#113 <= 10) OR (currency_rank#114 <= 10)) +Input [5]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101, currency_rank#102] +Condition : ((return_rank#101 <= 10) OR (currency_rank#102 <= 10)) (81) Project [codegen id : 30] -Output [5]: [store AS channel#115, item#109, return_ratio#110, return_rank#113, currency_rank#114] -Input [5]: [item#109, return_ratio#110, currency_ratio#111, return_rank#113, currency_rank#114] +Output [5]: [store AS channel#103, item#98, return_ratio#99, return_rank#101, currency_rank#102] +Input [5]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101, currency_rank#102] (82) Union (83) HashAggregate [codegen id : 31] -Input [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] -Keys [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Keys [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] +Results [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] (84) Exchange -Input [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] -Arguments: hashpartitioning(channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38, 5), ENSURE_REQUIREMENTS, [id=#116] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Arguments: hashpartitioning(channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34, 5), ENSURE_REQUIREMENTS, [plan_id=13] (85) HashAggregate [codegen id : 32] -Input [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] -Keys [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Keys [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] +Results [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] (86) TakeOrderedAndProject -Input [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] -Arguments: 100, [channel#39 ASC NULLS FIRST, return_rank#37 ASC NULLS FIRST, currency_rank#38 ASC NULLS FIRST], [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Arguments: 100, [channel#35 ASC NULLS FIRST, return_rank#33 ASC NULLS FIRST, currency_rank#34 ASC NULLS FIRST], [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] ===== Subqueries ===== @@ -482,29 +482,29 @@ BroadcastExchange (91) (87) Scan parquet default.date_dim -Output [3]: [d_date_sk#8, d_year#117, d_moy#118] +Output [3]: [d_date_sk#8, d_year#104, d_moy#105] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,12), IsNotNull(d_date_sk)] ReadSchema: struct (88) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#8, d_year#117, d_moy#118] +Input [3]: [d_date_sk#8, d_year#104, d_moy#105] (89) Filter [codegen id : 1] -Input [3]: [d_date_sk#8, d_year#117, d_moy#118] -Condition : ((((isnotnull(d_year#117) AND isnotnull(d_moy#118)) AND (d_year#117 = 2001)) AND (d_moy#118 = 12)) AND isnotnull(d_date_sk#8)) +Input [3]: [d_date_sk#8, d_year#104, d_moy#105] +Condition : ((((isnotnull(d_year#104) AND isnotnull(d_moy#105)) AND (d_year#104 = 2001)) AND (d_moy#105 = 12)) AND isnotnull(d_date_sk#8)) (90) Project [codegen id : 1] Output [1]: [d_date_sk#8] -Input [3]: [d_date_sk#8, d_year#117, d_moy#118] +Input [3]: [d_date_sk#8, d_year#104, d_moy#105] (91) BroadcastExchange Input [1]: [d_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#119] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=14] -Subquery:2 Hosting operator id = 28 Hosting Expression = cs_sold_date_sk#45 IN dynamicpruning#7 +Subquery:2 Hosting operator id = 28 Hosting Expression = cs_sold_date_sk#41 IN dynamicpruning#7 -Subquery:3 Hosting operator id = 55 Hosting Expression = ss_sold_date_sk#83 IN dynamicpruning#7 +Subquery:3 Hosting operator id = 55 Hosting Expression = ss_sold_date_sk#75 IN dynamicpruning#7 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q49/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q49/explain.txt index ac64de5188462..371ed43fb99f6 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q49/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q49/explain.txt @@ -99,332 +99,332 @@ Input [6]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_ne (5) BroadcastExchange Input [5]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [plan_id=1] (6) Scan parquet default.web_returns -Output [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] +Output [5]: [wr_item_sk#8, wr_order_number#9, wr_return_quantity#10, wr_return_amt#11, wr_returned_date_sk#12] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_return_amt), GreaterThan(wr_return_amt,10000.00), IsNotNull(wr_order_number), IsNotNull(wr_item_sk)] ReadSchema: struct (7) ColumnarToRow -Input [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] +Input [5]: [wr_item_sk#8, wr_order_number#9, wr_return_quantity#10, wr_return_amt#11, wr_returned_date_sk#12] (8) Filter -Input [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] -Condition : (((isnotnull(wr_return_amt#12) AND (wr_return_amt#12 > 10000.00)) AND isnotnull(wr_order_number#10)) AND isnotnull(wr_item_sk#9)) +Input [5]: [wr_item_sk#8, wr_order_number#9, wr_return_quantity#10, wr_return_amt#11, wr_returned_date_sk#12] +Condition : (((isnotnull(wr_return_amt#11) AND (wr_return_amt#11 > 10000.00)) AND isnotnull(wr_order_number#9)) AND isnotnull(wr_item_sk#8)) (9) Project -Output [4]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12] -Input [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] +Output [4]: [wr_item_sk#8, wr_order_number#9, wr_return_quantity#10, wr_return_amt#11] +Input [5]: [wr_item_sk#8, wr_order_number#9, wr_return_quantity#10, wr_return_amt#11, wr_returned_date_sk#12] (10) BroadcastHashJoin [codegen id : 3] Left keys [2]: [ws_order_number#2, ws_item_sk#1] -Right keys [2]: [wr_order_number#10, wr_item_sk#9] +Right keys [2]: [wr_order_number#9, wr_item_sk#8] Join condition: None (11) Project [codegen id : 3] -Output [6]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_return_quantity#11, wr_return_amt#12] -Input [9]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12] +Output [6]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_return_quantity#10, wr_return_amt#11] +Input [9]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_item_sk#8, wr_order_number#9, wr_return_quantity#10, wr_return_amt#11] (12) ReusedExchange [Reuses operator id: 82] -Output [1]: [d_date_sk#14] +Output [1]: [d_date_sk#13] (13) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ws_sold_date_sk#6] -Right keys [1]: [d_date_sk#14] +Right keys [1]: [d_date_sk#13] Join condition: None (14) Project [codegen id : 3] -Output [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#11, wr_return_amt#12] -Input [7]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_return_quantity#11, wr_return_amt#12, d_date_sk#14] +Output [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#10, wr_return_amt#11] +Input [7]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_return_quantity#10, wr_return_amt#11, d_date_sk#13] (15) HashAggregate [codegen id : 3] -Input [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#11, wr_return_amt#12] +Input [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#10, wr_return_amt#11] Keys [1]: [ws_item_sk#1] -Functions [4]: [partial_sum(coalesce(wr_return_quantity#11, 0)), partial_sum(coalesce(ws_quantity#3, 0)), partial_sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] -Aggregate Attributes [6]: [sum#15, sum#16, sum#17, isEmpty#18, sum#19, isEmpty#20] -Results [7]: [ws_item_sk#1, sum#21, sum#22, sum#23, isEmpty#24, sum#25, isEmpty#26] +Functions [4]: [partial_sum(coalesce(wr_return_quantity#10, 0)), partial_sum(coalesce(ws_quantity#3, 0)), partial_sum(coalesce(cast(wr_return_amt#11 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] +Aggregate Attributes [6]: [sum#14, sum#15, sum#16, isEmpty#17, sum#18, isEmpty#19] +Results [7]: [ws_item_sk#1, sum#20, sum#21, sum#22, isEmpty#23, sum#24, isEmpty#25] (16) Exchange -Input [7]: [ws_item_sk#1, sum#21, sum#22, sum#23, isEmpty#24, sum#25, isEmpty#26] -Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [7]: [ws_item_sk#1, sum#20, sum#21, sum#22, isEmpty#23, sum#24, isEmpty#25] +Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (17) HashAggregate [codegen id : 4] -Input [7]: [ws_item_sk#1, sum#21, sum#22, sum#23, isEmpty#24, sum#25, isEmpty#26] +Input [7]: [ws_item_sk#1, sum#20, sum#21, sum#22, isEmpty#23, sum#24, isEmpty#25] Keys [1]: [ws_item_sk#1] -Functions [4]: [sum(coalesce(wr_return_quantity#11, 0)), sum(coalesce(ws_quantity#3, 0)), sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00)), sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] -Aggregate Attributes [4]: [sum(coalesce(wr_return_quantity#11, 0))#28, sum(coalesce(ws_quantity#3, 0))#29, sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00))#30, sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#31] -Results [3]: [ws_item_sk#1 AS item#32, CheckOverflow((promote_precision(cast(sum(coalesce(wr_return_quantity#11, 0))#28 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ws_quantity#3, 0))#29 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#33, CheckOverflow((promote_precision(cast(sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00))#30 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#31 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#34] +Functions [4]: [sum(coalesce(wr_return_quantity#10, 0)), sum(coalesce(ws_quantity#3, 0)), sum(coalesce(cast(wr_return_amt#11 as decimal(12,2)), 0.00)), sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] +Aggregate Attributes [4]: [sum(coalesce(wr_return_quantity#10, 0))#26, sum(coalesce(ws_quantity#3, 0))#27, sum(coalesce(cast(wr_return_amt#11 as decimal(12,2)), 0.00))#28, sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#29] +Results [3]: [ws_item_sk#1 AS item#30, CheckOverflow((promote_precision(cast(sum(coalesce(wr_return_quantity#10, 0))#26 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ws_quantity#3, 0))#27 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#31, CheckOverflow((promote_precision(cast(sum(coalesce(cast(wr_return_amt#11 as decimal(12,2)), 0.00))#28 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#29 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#32] (18) Exchange -Input [3]: [item#32, return_ratio#33, currency_ratio#34] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#35] +Input [3]: [item#30, return_ratio#31, currency_ratio#32] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 5] -Input [3]: [item#32, return_ratio#33, currency_ratio#34] -Arguments: [return_ratio#33 ASC NULLS FIRST], false, 0 +Input [3]: [item#30, return_ratio#31, currency_ratio#32] +Arguments: [return_ratio#31 ASC NULLS FIRST], false, 0 (20) Window -Input [3]: [item#32, return_ratio#33, currency_ratio#34] -Arguments: [rank(return_ratio#33) windowspecdefinition(return_ratio#33 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#36], [return_ratio#33 ASC NULLS FIRST] +Input [3]: [item#30, return_ratio#31, currency_ratio#32] +Arguments: [rank(return_ratio#31) windowspecdefinition(return_ratio#31 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#33], [return_ratio#31 ASC NULLS FIRST] (21) Sort [codegen id : 6] -Input [4]: [item#32, return_ratio#33, currency_ratio#34, return_rank#36] -Arguments: [currency_ratio#34 ASC NULLS FIRST], false, 0 +Input [4]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33] +Arguments: [currency_ratio#32 ASC NULLS FIRST], false, 0 (22) Window -Input [4]: [item#32, return_ratio#33, currency_ratio#34, return_rank#36] -Arguments: [rank(currency_ratio#34) windowspecdefinition(currency_ratio#34 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#37], [currency_ratio#34 ASC NULLS FIRST] +Input [4]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33] +Arguments: [rank(currency_ratio#32) windowspecdefinition(currency_ratio#32 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#34], [currency_ratio#32 ASC NULLS FIRST] (23) Filter [codegen id : 7] -Input [5]: [item#32, return_ratio#33, currency_ratio#34, return_rank#36, currency_rank#37] -Condition : ((return_rank#36 <= 10) OR (currency_rank#37 <= 10)) +Input [5]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33, currency_rank#34] +Condition : ((return_rank#33 <= 10) OR (currency_rank#34 <= 10)) (24) Project [codegen id : 7] -Output [5]: [web AS channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] -Input [5]: [item#32, return_ratio#33, currency_ratio#34, return_rank#36, currency_rank#37] +Output [5]: [web AS channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Input [5]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33, currency_rank#34] (25) Scan parquet default.catalog_sales -Output [6]: [cs_item_sk#39, cs_order_number#40, cs_quantity#41, cs_net_paid#42, cs_net_profit#43, cs_sold_date_sk#44] +Output [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#44), dynamicpruningexpression(cs_sold_date_sk#44 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(cs_sold_date_sk#41), dynamicpruningexpression(cs_sold_date_sk#41 IN dynamicpruning#7)] PushedFilters: [IsNotNull(cs_net_profit), IsNotNull(cs_net_paid), IsNotNull(cs_quantity), GreaterThan(cs_net_profit,1.00), GreaterThan(cs_net_paid,0.00), GreaterThan(cs_quantity,0), IsNotNull(cs_order_number), IsNotNull(cs_item_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 8] -Input [6]: [cs_item_sk#39, cs_order_number#40, cs_quantity#41, cs_net_paid#42, cs_net_profit#43, cs_sold_date_sk#44] +Input [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] (27) Filter [codegen id : 8] -Input [6]: [cs_item_sk#39, cs_order_number#40, cs_quantity#41, cs_net_paid#42, cs_net_profit#43, cs_sold_date_sk#44] -Condition : (((((((isnotnull(cs_net_profit#43) AND isnotnull(cs_net_paid#42)) AND isnotnull(cs_quantity#41)) AND (cs_net_profit#43 > 1.00)) AND (cs_net_paid#42 > 0.00)) AND (cs_quantity#41 > 0)) AND isnotnull(cs_order_number#40)) AND isnotnull(cs_item_sk#39)) +Input [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] +Condition : (((((((isnotnull(cs_net_profit#40) AND isnotnull(cs_net_paid#39)) AND isnotnull(cs_quantity#38)) AND (cs_net_profit#40 > 1.00)) AND (cs_net_paid#39 > 0.00)) AND (cs_quantity#38 > 0)) AND isnotnull(cs_order_number#37)) AND isnotnull(cs_item_sk#36)) (28) Project [codegen id : 8] -Output [5]: [cs_item_sk#39, cs_order_number#40, cs_quantity#41, cs_net_paid#42, cs_sold_date_sk#44] -Input [6]: [cs_item_sk#39, cs_order_number#40, cs_quantity#41, cs_net_paid#42, cs_net_profit#43, cs_sold_date_sk#44] +Output [5]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_sold_date_sk#41] +Input [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] (29) BroadcastExchange -Input [5]: [cs_item_sk#39, cs_order_number#40, cs_quantity#41, cs_net_paid#42, cs_sold_date_sk#44] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [id=#45] +Input [5]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_sold_date_sk#41] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [plan_id=4] (30) Scan parquet default.catalog_returns -Output [5]: [cr_item_sk#46, cr_order_number#47, cr_return_quantity#48, cr_return_amount#49, cr_returned_date_sk#50] +Output [5]: [cr_item_sk#42, cr_order_number#43, cr_return_quantity#44, cr_return_amount#45, cr_returned_date_sk#46] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_return_amount), GreaterThan(cr_return_amount,10000.00), IsNotNull(cr_order_number), IsNotNull(cr_item_sk)] ReadSchema: struct (31) ColumnarToRow -Input [5]: [cr_item_sk#46, cr_order_number#47, cr_return_quantity#48, cr_return_amount#49, cr_returned_date_sk#50] +Input [5]: [cr_item_sk#42, cr_order_number#43, cr_return_quantity#44, cr_return_amount#45, cr_returned_date_sk#46] (32) Filter -Input [5]: [cr_item_sk#46, cr_order_number#47, cr_return_quantity#48, cr_return_amount#49, cr_returned_date_sk#50] -Condition : (((isnotnull(cr_return_amount#49) AND (cr_return_amount#49 > 10000.00)) AND isnotnull(cr_order_number#47)) AND isnotnull(cr_item_sk#46)) +Input [5]: [cr_item_sk#42, cr_order_number#43, cr_return_quantity#44, cr_return_amount#45, cr_returned_date_sk#46] +Condition : (((isnotnull(cr_return_amount#45) AND (cr_return_amount#45 > 10000.00)) AND isnotnull(cr_order_number#43)) AND isnotnull(cr_item_sk#42)) (33) Project -Output [4]: [cr_item_sk#46, cr_order_number#47, cr_return_quantity#48, cr_return_amount#49] -Input [5]: [cr_item_sk#46, cr_order_number#47, cr_return_quantity#48, cr_return_amount#49, cr_returned_date_sk#50] +Output [4]: [cr_item_sk#42, cr_order_number#43, cr_return_quantity#44, cr_return_amount#45] +Input [5]: [cr_item_sk#42, cr_order_number#43, cr_return_quantity#44, cr_return_amount#45, cr_returned_date_sk#46] (34) BroadcastHashJoin [codegen id : 10] -Left keys [2]: [cs_order_number#40, cs_item_sk#39] -Right keys [2]: [cr_order_number#47, cr_item_sk#46] +Left keys [2]: [cs_order_number#37, cs_item_sk#36] +Right keys [2]: [cr_order_number#43, cr_item_sk#42] Join condition: None (35) Project [codegen id : 10] -Output [6]: [cs_item_sk#39, cs_quantity#41, cs_net_paid#42, cs_sold_date_sk#44, cr_return_quantity#48, cr_return_amount#49] -Input [9]: [cs_item_sk#39, cs_order_number#40, cs_quantity#41, cs_net_paid#42, cs_sold_date_sk#44, cr_item_sk#46, cr_order_number#47, cr_return_quantity#48, cr_return_amount#49] +Output [6]: [cs_item_sk#36, cs_quantity#38, cs_net_paid#39, cs_sold_date_sk#41, cr_return_quantity#44, cr_return_amount#45] +Input [9]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_sold_date_sk#41, cr_item_sk#42, cr_order_number#43, cr_return_quantity#44, cr_return_amount#45] (36) ReusedExchange [Reuses operator id: 82] -Output [1]: [d_date_sk#51] +Output [1]: [d_date_sk#47] (37) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cs_sold_date_sk#44] -Right keys [1]: [d_date_sk#51] +Left keys [1]: [cs_sold_date_sk#41] +Right keys [1]: [d_date_sk#47] Join condition: None (38) Project [codegen id : 10] -Output [5]: [cs_item_sk#39, cs_quantity#41, cs_net_paid#42, cr_return_quantity#48, cr_return_amount#49] -Input [7]: [cs_item_sk#39, cs_quantity#41, cs_net_paid#42, cs_sold_date_sk#44, cr_return_quantity#48, cr_return_amount#49, d_date_sk#51] +Output [5]: [cs_item_sk#36, cs_quantity#38, cs_net_paid#39, cr_return_quantity#44, cr_return_amount#45] +Input [7]: [cs_item_sk#36, cs_quantity#38, cs_net_paid#39, cs_sold_date_sk#41, cr_return_quantity#44, cr_return_amount#45, d_date_sk#47] (39) HashAggregate [codegen id : 10] -Input [5]: [cs_item_sk#39, cs_quantity#41, cs_net_paid#42, cr_return_quantity#48, cr_return_amount#49] -Keys [1]: [cs_item_sk#39] -Functions [4]: [partial_sum(coalesce(cr_return_quantity#48, 0)), partial_sum(coalesce(cs_quantity#41, 0)), partial_sum(coalesce(cast(cr_return_amount#49 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(cs_net_paid#42 as decimal(12,2)), 0.00))] -Aggregate Attributes [6]: [sum#52, sum#53, sum#54, isEmpty#55, sum#56, isEmpty#57] -Results [7]: [cs_item_sk#39, sum#58, sum#59, sum#60, isEmpty#61, sum#62, isEmpty#63] +Input [5]: [cs_item_sk#36, cs_quantity#38, cs_net_paid#39, cr_return_quantity#44, cr_return_amount#45] +Keys [1]: [cs_item_sk#36] +Functions [4]: [partial_sum(coalesce(cr_return_quantity#44, 0)), partial_sum(coalesce(cs_quantity#38, 0)), partial_sum(coalesce(cast(cr_return_amount#45 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))] +Aggregate Attributes [6]: [sum#48, sum#49, sum#50, isEmpty#51, sum#52, isEmpty#53] +Results [7]: [cs_item_sk#36, sum#54, sum#55, sum#56, isEmpty#57, sum#58, isEmpty#59] (40) Exchange -Input [7]: [cs_item_sk#39, sum#58, sum#59, sum#60, isEmpty#61, sum#62, isEmpty#63] -Arguments: hashpartitioning(cs_item_sk#39, 5), ENSURE_REQUIREMENTS, [id=#64] +Input [7]: [cs_item_sk#36, sum#54, sum#55, sum#56, isEmpty#57, sum#58, isEmpty#59] +Arguments: hashpartitioning(cs_item_sk#36, 5), ENSURE_REQUIREMENTS, [plan_id=5] (41) HashAggregate [codegen id : 11] -Input [7]: [cs_item_sk#39, sum#58, sum#59, sum#60, isEmpty#61, sum#62, isEmpty#63] -Keys [1]: [cs_item_sk#39] -Functions [4]: [sum(coalesce(cr_return_quantity#48, 0)), sum(coalesce(cs_quantity#41, 0)), sum(coalesce(cast(cr_return_amount#49 as decimal(12,2)), 0.00)), sum(coalesce(cast(cs_net_paid#42 as decimal(12,2)), 0.00))] -Aggregate Attributes [4]: [sum(coalesce(cr_return_quantity#48, 0))#65, sum(coalesce(cs_quantity#41, 0))#66, sum(coalesce(cast(cr_return_amount#49 as decimal(12,2)), 0.00))#67, sum(coalesce(cast(cs_net_paid#42 as decimal(12,2)), 0.00))#68] -Results [3]: [cs_item_sk#39 AS item#69, CheckOverflow((promote_precision(cast(sum(coalesce(cr_return_quantity#48, 0))#65 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cs_quantity#41, 0))#66 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#70, CheckOverflow((promote_precision(cast(sum(coalesce(cast(cr_return_amount#49 as decimal(12,2)), 0.00))#67 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(cs_net_paid#42 as decimal(12,2)), 0.00))#68 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#71] +Input [7]: [cs_item_sk#36, sum#54, sum#55, sum#56, isEmpty#57, sum#58, isEmpty#59] +Keys [1]: [cs_item_sk#36] +Functions [4]: [sum(coalesce(cr_return_quantity#44, 0)), sum(coalesce(cs_quantity#38, 0)), sum(coalesce(cast(cr_return_amount#45 as decimal(12,2)), 0.00)), sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))] +Aggregate Attributes [4]: [sum(coalesce(cr_return_quantity#44, 0))#60, sum(coalesce(cs_quantity#38, 0))#61, sum(coalesce(cast(cr_return_amount#45 as decimal(12,2)), 0.00))#62, sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))#63] +Results [3]: [cs_item_sk#36 AS item#64, CheckOverflow((promote_precision(cast(sum(coalesce(cr_return_quantity#44, 0))#60 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cs_quantity#38, 0))#61 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#65, CheckOverflow((promote_precision(cast(sum(coalesce(cast(cr_return_amount#45 as decimal(12,2)), 0.00))#62 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))#63 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#66] (42) Exchange -Input [3]: [item#69, return_ratio#70, currency_ratio#71] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#72] +Input [3]: [item#64, return_ratio#65, currency_ratio#66] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6] (43) Sort [codegen id : 12] -Input [3]: [item#69, return_ratio#70, currency_ratio#71] -Arguments: [return_ratio#70 ASC NULLS FIRST], false, 0 +Input [3]: [item#64, return_ratio#65, currency_ratio#66] +Arguments: [return_ratio#65 ASC NULLS FIRST], false, 0 (44) Window -Input [3]: [item#69, return_ratio#70, currency_ratio#71] -Arguments: [rank(return_ratio#70) windowspecdefinition(return_ratio#70 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#73], [return_ratio#70 ASC NULLS FIRST] +Input [3]: [item#64, return_ratio#65, currency_ratio#66] +Arguments: [rank(return_ratio#65) windowspecdefinition(return_ratio#65 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#67], [return_ratio#65 ASC NULLS FIRST] (45) Sort [codegen id : 13] -Input [4]: [item#69, return_ratio#70, currency_ratio#71, return_rank#73] -Arguments: [currency_ratio#71 ASC NULLS FIRST], false, 0 +Input [4]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67] +Arguments: [currency_ratio#66 ASC NULLS FIRST], false, 0 (46) Window -Input [4]: [item#69, return_ratio#70, currency_ratio#71, return_rank#73] -Arguments: [rank(currency_ratio#71) windowspecdefinition(currency_ratio#71 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#74], [currency_ratio#71 ASC NULLS FIRST] +Input [4]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67] +Arguments: [rank(currency_ratio#66) windowspecdefinition(currency_ratio#66 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#68], [currency_ratio#66 ASC NULLS FIRST] (47) Filter [codegen id : 14] -Input [5]: [item#69, return_ratio#70, currency_ratio#71, return_rank#73, currency_rank#74] -Condition : ((return_rank#73 <= 10) OR (currency_rank#74 <= 10)) +Input [5]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67, currency_rank#68] +Condition : ((return_rank#67 <= 10) OR (currency_rank#68 <= 10)) (48) Project [codegen id : 14] -Output [5]: [catalog AS channel#75, item#69, return_ratio#70, return_rank#73, currency_rank#74] -Input [5]: [item#69, return_ratio#70, currency_ratio#71, return_rank#73, currency_rank#74] +Output [5]: [catalog AS channel#69, item#64, return_ratio#65, return_rank#67, currency_rank#68] +Input [5]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67, currency_rank#68] (49) Scan parquet default.store_sales -Output [6]: [ss_item_sk#76, ss_ticket_number#77, ss_quantity#78, ss_net_paid#79, ss_net_profit#80, ss_sold_date_sk#81] +Output [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#81), dynamicpruningexpression(ss_sold_date_sk#81 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(ss_sold_date_sk#75), dynamicpruningexpression(ss_sold_date_sk#75 IN dynamicpruning#7)] PushedFilters: [IsNotNull(ss_net_profit), IsNotNull(ss_net_paid), IsNotNull(ss_quantity), GreaterThan(ss_net_profit,1.00), GreaterThan(ss_net_paid,0.00), GreaterThan(ss_quantity,0), IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk)] ReadSchema: struct (50) ColumnarToRow [codegen id : 15] -Input [6]: [ss_item_sk#76, ss_ticket_number#77, ss_quantity#78, ss_net_paid#79, ss_net_profit#80, ss_sold_date_sk#81] +Input [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] (51) Filter [codegen id : 15] -Input [6]: [ss_item_sk#76, ss_ticket_number#77, ss_quantity#78, ss_net_paid#79, ss_net_profit#80, ss_sold_date_sk#81] -Condition : (((((((isnotnull(ss_net_profit#80) AND isnotnull(ss_net_paid#79)) AND isnotnull(ss_quantity#78)) AND (ss_net_profit#80 > 1.00)) AND (ss_net_paid#79 > 0.00)) AND (ss_quantity#78 > 0)) AND isnotnull(ss_ticket_number#77)) AND isnotnull(ss_item_sk#76)) +Input [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] +Condition : (((((((isnotnull(ss_net_profit#74) AND isnotnull(ss_net_paid#73)) AND isnotnull(ss_quantity#72)) AND (ss_net_profit#74 > 1.00)) AND (ss_net_paid#73 > 0.00)) AND (ss_quantity#72 > 0)) AND isnotnull(ss_ticket_number#71)) AND isnotnull(ss_item_sk#70)) (52) Project [codegen id : 15] -Output [5]: [ss_item_sk#76, ss_ticket_number#77, ss_quantity#78, ss_net_paid#79, ss_sold_date_sk#81] -Input [6]: [ss_item_sk#76, ss_ticket_number#77, ss_quantity#78, ss_net_paid#79, ss_net_profit#80, ss_sold_date_sk#81] +Output [5]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_sold_date_sk#75] +Input [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] (53) BroadcastExchange -Input [5]: [ss_item_sk#76, ss_ticket_number#77, ss_quantity#78, ss_net_paid#79, ss_sold_date_sk#81] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [id=#82] +Input [5]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_sold_date_sk#75] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [plan_id=7] (54) Scan parquet default.store_returns -Output [5]: [sr_item_sk#83, sr_ticket_number#84, sr_return_quantity#85, sr_return_amt#86, sr_returned_date_sk#87] +Output [5]: [sr_item_sk#76, sr_ticket_number#77, sr_return_quantity#78, sr_return_amt#79, sr_returned_date_sk#80] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_return_amt), GreaterThan(sr_return_amt,10000.00), IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct (55) ColumnarToRow -Input [5]: [sr_item_sk#83, sr_ticket_number#84, sr_return_quantity#85, sr_return_amt#86, sr_returned_date_sk#87] +Input [5]: [sr_item_sk#76, sr_ticket_number#77, sr_return_quantity#78, sr_return_amt#79, sr_returned_date_sk#80] (56) Filter -Input [5]: [sr_item_sk#83, sr_ticket_number#84, sr_return_quantity#85, sr_return_amt#86, sr_returned_date_sk#87] -Condition : (((isnotnull(sr_return_amt#86) AND (sr_return_amt#86 > 10000.00)) AND isnotnull(sr_ticket_number#84)) AND isnotnull(sr_item_sk#83)) +Input [5]: [sr_item_sk#76, sr_ticket_number#77, sr_return_quantity#78, sr_return_amt#79, sr_returned_date_sk#80] +Condition : (((isnotnull(sr_return_amt#79) AND (sr_return_amt#79 > 10000.00)) AND isnotnull(sr_ticket_number#77)) AND isnotnull(sr_item_sk#76)) (57) Project -Output [4]: [sr_item_sk#83, sr_ticket_number#84, sr_return_quantity#85, sr_return_amt#86] -Input [5]: [sr_item_sk#83, sr_ticket_number#84, sr_return_quantity#85, sr_return_amt#86, sr_returned_date_sk#87] +Output [4]: [sr_item_sk#76, sr_ticket_number#77, sr_return_quantity#78, sr_return_amt#79] +Input [5]: [sr_item_sk#76, sr_ticket_number#77, sr_return_quantity#78, sr_return_amt#79, sr_returned_date_sk#80] (58) BroadcastHashJoin [codegen id : 17] -Left keys [2]: [ss_ticket_number#77, ss_item_sk#76] -Right keys [2]: [sr_ticket_number#84, sr_item_sk#83] +Left keys [2]: [ss_ticket_number#71, ss_item_sk#70] +Right keys [2]: [sr_ticket_number#77, sr_item_sk#76] Join condition: None (59) Project [codegen id : 17] -Output [6]: [ss_item_sk#76, ss_quantity#78, ss_net_paid#79, ss_sold_date_sk#81, sr_return_quantity#85, sr_return_amt#86] -Input [9]: [ss_item_sk#76, ss_ticket_number#77, ss_quantity#78, ss_net_paid#79, ss_sold_date_sk#81, sr_item_sk#83, sr_ticket_number#84, sr_return_quantity#85, sr_return_amt#86] +Output [6]: [ss_item_sk#70, ss_quantity#72, ss_net_paid#73, ss_sold_date_sk#75, sr_return_quantity#78, sr_return_amt#79] +Input [9]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_sold_date_sk#75, sr_item_sk#76, sr_ticket_number#77, sr_return_quantity#78, sr_return_amt#79] (60) ReusedExchange [Reuses operator id: 82] -Output [1]: [d_date_sk#88] +Output [1]: [d_date_sk#81] (61) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ss_sold_date_sk#81] -Right keys [1]: [d_date_sk#88] +Left keys [1]: [ss_sold_date_sk#75] +Right keys [1]: [d_date_sk#81] Join condition: None (62) Project [codegen id : 17] -Output [5]: [ss_item_sk#76, ss_quantity#78, ss_net_paid#79, sr_return_quantity#85, sr_return_amt#86] -Input [7]: [ss_item_sk#76, ss_quantity#78, ss_net_paid#79, ss_sold_date_sk#81, sr_return_quantity#85, sr_return_amt#86, d_date_sk#88] +Output [5]: [ss_item_sk#70, ss_quantity#72, ss_net_paid#73, sr_return_quantity#78, sr_return_amt#79] +Input [7]: [ss_item_sk#70, ss_quantity#72, ss_net_paid#73, ss_sold_date_sk#75, sr_return_quantity#78, sr_return_amt#79, d_date_sk#81] (63) HashAggregate [codegen id : 17] -Input [5]: [ss_item_sk#76, ss_quantity#78, ss_net_paid#79, sr_return_quantity#85, sr_return_amt#86] -Keys [1]: [ss_item_sk#76] -Functions [4]: [partial_sum(coalesce(sr_return_quantity#85, 0)), partial_sum(coalesce(ss_quantity#78, 0)), partial_sum(coalesce(cast(sr_return_amt#86 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ss_net_paid#79 as decimal(12,2)), 0.00))] -Aggregate Attributes [6]: [sum#89, sum#90, sum#91, isEmpty#92, sum#93, isEmpty#94] -Results [7]: [ss_item_sk#76, sum#95, sum#96, sum#97, isEmpty#98, sum#99, isEmpty#100] +Input [5]: [ss_item_sk#70, ss_quantity#72, ss_net_paid#73, sr_return_quantity#78, sr_return_amt#79] +Keys [1]: [ss_item_sk#70] +Functions [4]: [partial_sum(coalesce(sr_return_quantity#78, 0)), partial_sum(coalesce(ss_quantity#72, 0)), partial_sum(coalesce(cast(sr_return_amt#79 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))] +Aggregate Attributes [6]: [sum#82, sum#83, sum#84, isEmpty#85, sum#86, isEmpty#87] +Results [7]: [ss_item_sk#70, sum#88, sum#89, sum#90, isEmpty#91, sum#92, isEmpty#93] (64) Exchange -Input [7]: [ss_item_sk#76, sum#95, sum#96, sum#97, isEmpty#98, sum#99, isEmpty#100] -Arguments: hashpartitioning(ss_item_sk#76, 5), ENSURE_REQUIREMENTS, [id=#101] +Input [7]: [ss_item_sk#70, sum#88, sum#89, sum#90, isEmpty#91, sum#92, isEmpty#93] +Arguments: hashpartitioning(ss_item_sk#70, 5), ENSURE_REQUIREMENTS, [plan_id=8] (65) HashAggregate [codegen id : 18] -Input [7]: [ss_item_sk#76, sum#95, sum#96, sum#97, isEmpty#98, sum#99, isEmpty#100] -Keys [1]: [ss_item_sk#76] -Functions [4]: [sum(coalesce(sr_return_quantity#85, 0)), sum(coalesce(ss_quantity#78, 0)), sum(coalesce(cast(sr_return_amt#86 as decimal(12,2)), 0.00)), sum(coalesce(cast(ss_net_paid#79 as decimal(12,2)), 0.00))] -Aggregate Attributes [4]: [sum(coalesce(sr_return_quantity#85, 0))#102, sum(coalesce(ss_quantity#78, 0))#103, sum(coalesce(cast(sr_return_amt#86 as decimal(12,2)), 0.00))#104, sum(coalesce(cast(ss_net_paid#79 as decimal(12,2)), 0.00))#105] -Results [3]: [ss_item_sk#76 AS item#106, CheckOverflow((promote_precision(cast(sum(coalesce(sr_return_quantity#85, 0))#102 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ss_quantity#78, 0))#103 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#107, CheckOverflow((promote_precision(cast(sum(coalesce(cast(sr_return_amt#86 as decimal(12,2)), 0.00))#104 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ss_net_paid#79 as decimal(12,2)), 0.00))#105 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#108] +Input [7]: [ss_item_sk#70, sum#88, sum#89, sum#90, isEmpty#91, sum#92, isEmpty#93] +Keys [1]: [ss_item_sk#70] +Functions [4]: [sum(coalesce(sr_return_quantity#78, 0)), sum(coalesce(ss_quantity#72, 0)), sum(coalesce(cast(sr_return_amt#79 as decimal(12,2)), 0.00)), sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))] +Aggregate Attributes [4]: [sum(coalesce(sr_return_quantity#78, 0))#94, sum(coalesce(ss_quantity#72, 0))#95, sum(coalesce(cast(sr_return_amt#79 as decimal(12,2)), 0.00))#96, sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))#97] +Results [3]: [ss_item_sk#70 AS item#98, CheckOverflow((promote_precision(cast(sum(coalesce(sr_return_quantity#78, 0))#94 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ss_quantity#72, 0))#95 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#99, CheckOverflow((promote_precision(cast(sum(coalesce(cast(sr_return_amt#79 as decimal(12,2)), 0.00))#96 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))#97 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#100] (66) Exchange -Input [3]: [item#106, return_ratio#107, currency_ratio#108] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#109] +Input [3]: [item#98, return_ratio#99, currency_ratio#100] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=9] (67) Sort [codegen id : 19] -Input [3]: [item#106, return_ratio#107, currency_ratio#108] -Arguments: [return_ratio#107 ASC NULLS FIRST], false, 0 +Input [3]: [item#98, return_ratio#99, currency_ratio#100] +Arguments: [return_ratio#99 ASC NULLS FIRST], false, 0 (68) Window -Input [3]: [item#106, return_ratio#107, currency_ratio#108] -Arguments: [rank(return_ratio#107) windowspecdefinition(return_ratio#107 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#110], [return_ratio#107 ASC NULLS FIRST] +Input [3]: [item#98, return_ratio#99, currency_ratio#100] +Arguments: [rank(return_ratio#99) windowspecdefinition(return_ratio#99 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#101], [return_ratio#99 ASC NULLS FIRST] (69) Sort [codegen id : 20] -Input [4]: [item#106, return_ratio#107, currency_ratio#108, return_rank#110] -Arguments: [currency_ratio#108 ASC NULLS FIRST], false, 0 +Input [4]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101] +Arguments: [currency_ratio#100 ASC NULLS FIRST], false, 0 (70) Window -Input [4]: [item#106, return_ratio#107, currency_ratio#108, return_rank#110] -Arguments: [rank(currency_ratio#108) windowspecdefinition(currency_ratio#108 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#111], [currency_ratio#108 ASC NULLS FIRST] +Input [4]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101] +Arguments: [rank(currency_ratio#100) windowspecdefinition(currency_ratio#100 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#102], [currency_ratio#100 ASC NULLS FIRST] (71) Filter [codegen id : 21] -Input [5]: [item#106, return_ratio#107, currency_ratio#108, return_rank#110, currency_rank#111] -Condition : ((return_rank#110 <= 10) OR (currency_rank#111 <= 10)) +Input [5]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101, currency_rank#102] +Condition : ((return_rank#101 <= 10) OR (currency_rank#102 <= 10)) (72) Project [codegen id : 21] -Output [5]: [store AS channel#112, item#106, return_ratio#107, return_rank#110, currency_rank#111] -Input [5]: [item#106, return_ratio#107, currency_ratio#108, return_rank#110, currency_rank#111] +Output [5]: [store AS channel#103, item#98, return_ratio#99, return_rank#101, currency_rank#102] +Input [5]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101, currency_rank#102] (73) Union (74) HashAggregate [codegen id : 22] -Input [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] -Keys [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Keys [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] +Results [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] (75) Exchange -Input [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] -Arguments: hashpartitioning(channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37, 5), ENSURE_REQUIREMENTS, [id=#113] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Arguments: hashpartitioning(channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34, 5), ENSURE_REQUIREMENTS, [plan_id=10] (76) HashAggregate [codegen id : 23] -Input [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] -Keys [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Keys [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] +Results [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] (77) TakeOrderedAndProject -Input [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] -Arguments: 100, [channel#38 ASC NULLS FIRST, return_rank#36 ASC NULLS FIRST, currency_rank#37 ASC NULLS FIRST], [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Arguments: 100, [channel#35 ASC NULLS FIRST, return_rank#33 ASC NULLS FIRST, currency_rank#34 ASC NULLS FIRST], [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] ===== Subqueries ===== @@ -437,29 +437,29 @@ BroadcastExchange (82) (78) Scan parquet default.date_dim -Output [3]: [d_date_sk#14, d_year#114, d_moy#115] +Output [3]: [d_date_sk#13, d_year#104, d_moy#105] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,12), IsNotNull(d_date_sk)] ReadSchema: struct (79) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#14, d_year#114, d_moy#115] +Input [3]: [d_date_sk#13, d_year#104, d_moy#105] (80) Filter [codegen id : 1] -Input [3]: [d_date_sk#14, d_year#114, d_moy#115] -Condition : ((((isnotnull(d_year#114) AND isnotnull(d_moy#115)) AND (d_year#114 = 2001)) AND (d_moy#115 = 12)) AND isnotnull(d_date_sk#14)) +Input [3]: [d_date_sk#13, d_year#104, d_moy#105] +Condition : ((((isnotnull(d_year#104) AND isnotnull(d_moy#105)) AND (d_year#104 = 2001)) AND (d_moy#105 = 12)) AND isnotnull(d_date_sk#13)) (81) Project [codegen id : 1] -Output [1]: [d_date_sk#14] -Input [3]: [d_date_sk#14, d_year#114, d_moy#115] +Output [1]: [d_date_sk#13] +Input [3]: [d_date_sk#13, d_year#104, d_moy#105] (82) BroadcastExchange -Input [1]: [d_date_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#116] +Input [1]: [d_date_sk#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11] -Subquery:2 Hosting operator id = 25 Hosting Expression = cs_sold_date_sk#44 IN dynamicpruning#7 +Subquery:2 Hosting operator id = 25 Hosting Expression = cs_sold_date_sk#41 IN dynamicpruning#7 -Subquery:3 Hosting operator id = 49 Hosting Expression = ss_sold_date_sk#81 IN dynamicpruning#7 +Subquery:3 Hosting operator id = 49 Hosting Expression = ss_sold_date_sk#75 IN dynamicpruning#7 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5.sf100/explain.txt index 29a88fbab1b3c..08dff69c2d637 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5.sf100/explain.txt @@ -134,7 +134,7 @@ Condition : isnotnull(s_store_sk#22) (13) BroadcastExchange Input [2]: [s_store_sk#22, s_store_id#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (14) BroadcastHashJoin [codegen id : 5] Left keys [1]: [store_sk#6] @@ -146,290 +146,290 @@ Output [6]: [date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11, s_s Input [8]: [store_sk#6, date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_sk#22, s_store_id#23] (16) ReusedExchange [Reuses operator id: 82] -Output [1]: [d_date_sk#25] +Output [1]: [d_date_sk#24] (17) BroadcastHashJoin [codegen id : 5] Left keys [1]: [date_sk#7] -Right keys [1]: [d_date_sk#25] +Right keys [1]: [d_date_sk#24] Join condition: None (18) Project [codegen id : 5] Output [5]: [sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#23] -Input [7]: [date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#23, d_date_sk#25] +Input [7]: [date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#23, d_date_sk#24] (19) HashAggregate [codegen id : 5] Input [5]: [sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#23] Keys [1]: [s_store_id#23] Functions [4]: [partial_sum(UnscaledValue(sales_price#8)), partial_sum(UnscaledValue(return_amt#10)), partial_sum(UnscaledValue(profit#9)), partial_sum(UnscaledValue(net_loss#11))] -Aggregate Attributes [4]: [sum#26, sum#27, sum#28, sum#29] -Results [5]: [s_store_id#23, sum#30, sum#31, sum#32, sum#33] +Aggregate Attributes [4]: [sum#25, sum#26, sum#27, sum#28] +Results [5]: [s_store_id#23, sum#29, sum#30, sum#31, sum#32] (20) Exchange -Input [5]: [s_store_id#23, sum#30, sum#31, sum#32, sum#33] -Arguments: hashpartitioning(s_store_id#23, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [5]: [s_store_id#23, sum#29, sum#30, sum#31, sum#32] +Arguments: hashpartitioning(s_store_id#23, 5), ENSURE_REQUIREMENTS, [plan_id=2] (21) HashAggregate [codegen id : 6] -Input [5]: [s_store_id#23, sum#30, sum#31, sum#32, sum#33] +Input [5]: [s_store_id#23, sum#29, sum#30, sum#31, sum#32] Keys [1]: [s_store_id#23] Functions [4]: [sum(UnscaledValue(sales_price#8)), sum(UnscaledValue(return_amt#10)), sum(UnscaledValue(profit#9)), sum(UnscaledValue(net_loss#11))] -Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#8))#35, sum(UnscaledValue(return_amt#10))#36, sum(UnscaledValue(profit#9))#37, sum(UnscaledValue(net_loss#11))#38] -Results [5]: [MakeDecimal(sum(UnscaledValue(sales_price#8))#35,17,2) AS sales#39, MakeDecimal(sum(UnscaledValue(return_amt#10))#36,17,2) AS returns#40, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#9))#37,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#11))#38,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#41, store channel AS channel#42, concat(store, s_store_id#23) AS id#43] +Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#8))#33, sum(UnscaledValue(return_amt#10))#34, sum(UnscaledValue(profit#9))#35, sum(UnscaledValue(net_loss#11))#36] +Results [5]: [MakeDecimal(sum(UnscaledValue(sales_price#8))#33,17,2) AS sales#37, MakeDecimal(sum(UnscaledValue(return_amt#10))#34,17,2) AS returns#38, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#9))#35,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#11))#36,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#39, store channel AS channel#40, concat(store, s_store_id#23) AS id#41] (22) Scan parquet default.catalog_sales -Output [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] +Output [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#47), dynamicpruningexpression(cs_sold_date_sk#47 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#45), dynamicpruningexpression(cs_sold_date_sk#45 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cs_catalog_page_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 7] -Input [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] +Input [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] (24) Filter [codegen id : 7] -Input [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] -Condition : isnotnull(cs_catalog_page_sk#44) +Input [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] +Condition : isnotnull(cs_catalog_page_sk#42) (25) Project [codegen id : 7] -Output [6]: [cs_catalog_page_sk#44 AS page_sk#48, cs_sold_date_sk#47 AS date_sk#49, cs_ext_sales_price#45 AS sales_price#50, cs_net_profit#46 AS profit#51, 0.00 AS return_amt#52, 0.00 AS net_loss#53] -Input [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] +Output [6]: [cs_catalog_page_sk#42 AS page_sk#46, cs_sold_date_sk#45 AS date_sk#47, cs_ext_sales_price#43 AS sales_price#48, cs_net_profit#44 AS profit#49, 0.00 AS return_amt#50, 0.00 AS net_loss#51] +Input [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] (26) Scan parquet default.catalog_returns -Output [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Output [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cr_returned_date_sk#57), dynamicpruningexpression(cr_returned_date_sk#57 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cr_returned_date_sk#55), dynamicpruningexpression(cr_returned_date_sk#55 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cr_catalog_page_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 8] -Input [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Input [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] (28) Filter [codegen id : 8] -Input [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] -Condition : isnotnull(cr_catalog_page_sk#54) +Input [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] +Condition : isnotnull(cr_catalog_page_sk#52) (29) Project [codegen id : 8] -Output [6]: [cr_catalog_page_sk#54 AS page_sk#58, cr_returned_date_sk#57 AS date_sk#59, 0.00 AS sales_price#60, 0.00 AS profit#61, cr_return_amount#55 AS return_amt#62, cr_net_loss#56 AS net_loss#63] -Input [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Output [6]: [cr_catalog_page_sk#52 AS page_sk#56, cr_returned_date_sk#55 AS date_sk#57, 0.00 AS sales_price#58, 0.00 AS profit#59, cr_return_amount#53 AS return_amt#60, cr_net_loss#54 AS net_loss#61] +Input [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] (30) Union (31) Scan parquet default.catalog_page -Output [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] +Output [2]: [cp_catalog_page_sk#62, cp_catalog_page_id#63] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_page] PushedFilters: [IsNotNull(cp_catalog_page_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 9] -Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] +Input [2]: [cp_catalog_page_sk#62, cp_catalog_page_id#63] (33) Filter [codegen id : 9] -Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] -Condition : isnotnull(cp_catalog_page_sk#64) +Input [2]: [cp_catalog_page_sk#62, cp_catalog_page_id#63] +Condition : isnotnull(cp_catalog_page_sk#62) (34) BroadcastExchange -Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#66] +Input [2]: [cp_catalog_page_sk#62, cp_catalog_page_id#63] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (35) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [page_sk#48] -Right keys [1]: [cp_catalog_page_sk#64] +Left keys [1]: [page_sk#46] +Right keys [1]: [cp_catalog_page_sk#62] Join condition: None (36) Project [codegen id : 11] -Output [6]: [date_sk#49, sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_id#65] -Input [8]: [page_sk#48, date_sk#49, sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_sk#64, cp_catalog_page_id#65] +Output [6]: [date_sk#47, sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_id#63] +Input [8]: [page_sk#46, date_sk#47, sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_sk#62, cp_catalog_page_id#63] (37) ReusedExchange [Reuses operator id: 82] -Output [1]: [d_date_sk#67] +Output [1]: [d_date_sk#64] (38) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [date_sk#49] -Right keys [1]: [d_date_sk#67] +Left keys [1]: [date_sk#47] +Right keys [1]: [d_date_sk#64] Join condition: None (39) Project [codegen id : 11] -Output [5]: [sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_id#65] -Input [7]: [date_sk#49, sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_id#65, d_date_sk#67] +Output [5]: [sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_id#63] +Input [7]: [date_sk#47, sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_id#63, d_date_sk#64] (40) HashAggregate [codegen id : 11] -Input [5]: [sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_id#65] -Keys [1]: [cp_catalog_page_id#65] -Functions [4]: [partial_sum(UnscaledValue(sales_price#50)), partial_sum(UnscaledValue(return_amt#52)), partial_sum(UnscaledValue(profit#51)), partial_sum(UnscaledValue(net_loss#53))] -Aggregate Attributes [4]: [sum#68, sum#69, sum#70, sum#71] -Results [5]: [cp_catalog_page_id#65, sum#72, sum#73, sum#74, sum#75] +Input [5]: [sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_id#63] +Keys [1]: [cp_catalog_page_id#63] +Functions [4]: [partial_sum(UnscaledValue(sales_price#48)), partial_sum(UnscaledValue(return_amt#50)), partial_sum(UnscaledValue(profit#49)), partial_sum(UnscaledValue(net_loss#51))] +Aggregate Attributes [4]: [sum#65, sum#66, sum#67, sum#68] +Results [5]: [cp_catalog_page_id#63, sum#69, sum#70, sum#71, sum#72] (41) Exchange -Input [5]: [cp_catalog_page_id#65, sum#72, sum#73, sum#74, sum#75] -Arguments: hashpartitioning(cp_catalog_page_id#65, 5), ENSURE_REQUIREMENTS, [id=#76] +Input [5]: [cp_catalog_page_id#63, sum#69, sum#70, sum#71, sum#72] +Arguments: hashpartitioning(cp_catalog_page_id#63, 5), ENSURE_REQUIREMENTS, [plan_id=4] (42) HashAggregate [codegen id : 12] -Input [5]: [cp_catalog_page_id#65, sum#72, sum#73, sum#74, sum#75] -Keys [1]: [cp_catalog_page_id#65] -Functions [4]: [sum(UnscaledValue(sales_price#50)), sum(UnscaledValue(return_amt#52)), sum(UnscaledValue(profit#51)), sum(UnscaledValue(net_loss#53))] -Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#50))#77, sum(UnscaledValue(return_amt#52))#78, sum(UnscaledValue(profit#51))#79, sum(UnscaledValue(net_loss#53))#80] -Results [5]: [MakeDecimal(sum(UnscaledValue(sales_price#50))#77,17,2) AS sales#81, MakeDecimal(sum(UnscaledValue(return_amt#52))#78,17,2) AS returns#82, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#51))#79,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#53))#80,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#83, catalog channel AS channel#84, concat(catalog_page, cp_catalog_page_id#65) AS id#85] +Input [5]: [cp_catalog_page_id#63, sum#69, sum#70, sum#71, sum#72] +Keys [1]: [cp_catalog_page_id#63] +Functions [4]: [sum(UnscaledValue(sales_price#48)), sum(UnscaledValue(return_amt#50)), sum(UnscaledValue(profit#49)), sum(UnscaledValue(net_loss#51))] +Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#48))#73, sum(UnscaledValue(return_amt#50))#74, sum(UnscaledValue(profit#49))#75, sum(UnscaledValue(net_loss#51))#76] +Results [5]: [MakeDecimal(sum(UnscaledValue(sales_price#48))#73,17,2) AS sales#77, MakeDecimal(sum(UnscaledValue(return_amt#50))#74,17,2) AS returns#78, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#49))#75,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#51))#76,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#79, catalog channel AS channel#80, concat(catalog_page, cp_catalog_page_id#63) AS id#81] (43) Scan parquet default.web_sales -Output [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] +Output [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#89), dynamicpruningexpression(ws_sold_date_sk#89 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#85), dynamicpruningexpression(ws_sold_date_sk#85 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_web_site_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 13] -Input [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] +Input [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] (45) Filter [codegen id : 13] -Input [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] -Condition : isnotnull(ws_web_site_sk#86) +Input [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] +Condition : isnotnull(ws_web_site_sk#82) (46) Project [codegen id : 13] -Output [6]: [ws_web_site_sk#86 AS wsr_web_site_sk#90, ws_sold_date_sk#89 AS date_sk#91, ws_ext_sales_price#87 AS sales_price#92, ws_net_profit#88 AS profit#93, 0.00 AS return_amt#94, 0.00 AS net_loss#95] -Input [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] +Output [6]: [ws_web_site_sk#82 AS wsr_web_site_sk#86, ws_sold_date_sk#85 AS date_sk#87, ws_ext_sales_price#83 AS sales_price#88, ws_net_profit#84 AS profit#89, 0.00 AS return_amt#90, 0.00 AS net_loss#91] +Input [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] (47) Scan parquet default.web_returns -Output [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] +Output [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(wr_returned_date_sk#100), dynamicpruningexpression(wr_returned_date_sk#100 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(wr_returned_date_sk#96), dynamicpruningexpression(wr_returned_date_sk#96 IN dynamicpruning#5)] ReadSchema: struct (48) ColumnarToRow [codegen id : 14] -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] +Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] (49) Exchange -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] -Arguments: hashpartitioning(wr_item_sk#96, wr_order_number#97, 5), ENSURE_REQUIREMENTS, [id=#101] +Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] +Arguments: hashpartitioning(wr_item_sk#92, wr_order_number#93, 5), ENSURE_REQUIREMENTS, [plan_id=5] (50) Sort [codegen id : 15] -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] -Arguments: [wr_item_sk#96 ASC NULLS FIRST, wr_order_number#97 ASC NULLS FIRST], false, 0 +Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] +Arguments: [wr_item_sk#92 ASC NULLS FIRST, wr_order_number#93 ASC NULLS FIRST], false, 0 (51) Scan parquet default.web_sales -Output [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] +Output [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_order_number), IsNotNull(ws_web_site_sk)] ReadSchema: struct (52) ColumnarToRow [codegen id : 16] -Input [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] +Input [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] (53) Filter [codegen id : 16] -Input [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] -Condition : ((isnotnull(ws_item_sk#102) AND isnotnull(ws_order_number#104)) AND isnotnull(ws_web_site_sk#103)) +Input [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] +Condition : ((isnotnull(ws_item_sk#97) AND isnotnull(ws_order_number#99)) AND isnotnull(ws_web_site_sk#98)) (54) Project [codegen id : 16] -Output [3]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104] -Input [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] +Output [3]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99] +Input [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] (55) Exchange -Input [3]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104] -Arguments: hashpartitioning(ws_item_sk#102, ws_order_number#104, 5), ENSURE_REQUIREMENTS, [id=#106] +Input [3]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99] +Arguments: hashpartitioning(ws_item_sk#97, ws_order_number#99, 5), ENSURE_REQUIREMENTS, [plan_id=6] (56) Sort [codegen id : 17] -Input [3]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104] -Arguments: [ws_item_sk#102 ASC NULLS FIRST, ws_order_number#104 ASC NULLS FIRST], false, 0 +Input [3]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99] +Arguments: [ws_item_sk#97 ASC NULLS FIRST, ws_order_number#99 ASC NULLS FIRST], false, 0 (57) SortMergeJoin [codegen id : 18] -Left keys [2]: [wr_item_sk#96, wr_order_number#97] -Right keys [2]: [ws_item_sk#102, ws_order_number#104] +Left keys [2]: [wr_item_sk#92, wr_order_number#93] +Right keys [2]: [ws_item_sk#97, ws_order_number#99] Join condition: None (58) Project [codegen id : 18] -Output [6]: [ws_web_site_sk#103 AS wsr_web_site_sk#107, wr_returned_date_sk#100 AS date_sk#108, 0.00 AS sales_price#109, 0.00 AS profit#110, wr_return_amt#98 AS return_amt#111, wr_net_loss#99 AS net_loss#112] -Input [8]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100, ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104] +Output [6]: [ws_web_site_sk#98 AS wsr_web_site_sk#101, wr_returned_date_sk#96 AS date_sk#102, 0.00 AS sales_price#103, 0.00 AS profit#104, wr_return_amt#94 AS return_amt#105, wr_net_loss#95 AS net_loss#106] +Input [8]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96, ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99] (59) Union (60) Scan parquet default.web_site -Output [2]: [web_site_sk#113, web_site_id#114] +Output [2]: [web_site_sk#107, web_site_id#108] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_site_sk)] ReadSchema: struct (61) ColumnarToRow [codegen id : 19] -Input [2]: [web_site_sk#113, web_site_id#114] +Input [2]: [web_site_sk#107, web_site_id#108] (62) Filter [codegen id : 19] -Input [2]: [web_site_sk#113, web_site_id#114] -Condition : isnotnull(web_site_sk#113) +Input [2]: [web_site_sk#107, web_site_id#108] +Condition : isnotnull(web_site_sk#107) (63) BroadcastExchange -Input [2]: [web_site_sk#113, web_site_id#114] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#115] +Input [2]: [web_site_sk#107, web_site_id#108] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (64) BroadcastHashJoin [codegen id : 21] -Left keys [1]: [wsr_web_site_sk#90] -Right keys [1]: [web_site_sk#113] +Left keys [1]: [wsr_web_site_sk#86] +Right keys [1]: [web_site_sk#107] Join condition: None (65) Project [codegen id : 21] -Output [6]: [date_sk#91, sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_id#114] -Input [8]: [wsr_web_site_sk#90, date_sk#91, sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_sk#113, web_site_id#114] +Output [6]: [date_sk#87, sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_id#108] +Input [8]: [wsr_web_site_sk#86, date_sk#87, sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_sk#107, web_site_id#108] (66) ReusedExchange [Reuses operator id: 82] -Output [1]: [d_date_sk#116] +Output [1]: [d_date_sk#109] (67) BroadcastHashJoin [codegen id : 21] -Left keys [1]: [date_sk#91] -Right keys [1]: [d_date_sk#116] +Left keys [1]: [date_sk#87] +Right keys [1]: [d_date_sk#109] Join condition: None (68) Project [codegen id : 21] -Output [5]: [sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_id#114] -Input [7]: [date_sk#91, sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_id#114, d_date_sk#116] +Output [5]: [sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_id#108] +Input [7]: [date_sk#87, sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_id#108, d_date_sk#109] (69) HashAggregate [codegen id : 21] -Input [5]: [sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_id#114] -Keys [1]: [web_site_id#114] -Functions [4]: [partial_sum(UnscaledValue(sales_price#92)), partial_sum(UnscaledValue(return_amt#94)), partial_sum(UnscaledValue(profit#93)), partial_sum(UnscaledValue(net_loss#95))] -Aggregate Attributes [4]: [sum#117, sum#118, sum#119, sum#120] -Results [5]: [web_site_id#114, sum#121, sum#122, sum#123, sum#124] +Input [5]: [sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_id#108] +Keys [1]: [web_site_id#108] +Functions [4]: [partial_sum(UnscaledValue(sales_price#88)), partial_sum(UnscaledValue(return_amt#90)), partial_sum(UnscaledValue(profit#89)), partial_sum(UnscaledValue(net_loss#91))] +Aggregate Attributes [4]: [sum#110, sum#111, sum#112, sum#113] +Results [5]: [web_site_id#108, sum#114, sum#115, sum#116, sum#117] (70) Exchange -Input [5]: [web_site_id#114, sum#121, sum#122, sum#123, sum#124] -Arguments: hashpartitioning(web_site_id#114, 5), ENSURE_REQUIREMENTS, [id=#125] +Input [5]: [web_site_id#108, sum#114, sum#115, sum#116, sum#117] +Arguments: hashpartitioning(web_site_id#108, 5), ENSURE_REQUIREMENTS, [plan_id=8] (71) HashAggregate [codegen id : 22] -Input [5]: [web_site_id#114, sum#121, sum#122, sum#123, sum#124] -Keys [1]: [web_site_id#114] -Functions [4]: [sum(UnscaledValue(sales_price#92)), sum(UnscaledValue(return_amt#94)), sum(UnscaledValue(profit#93)), sum(UnscaledValue(net_loss#95))] -Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#92))#126, sum(UnscaledValue(return_amt#94))#127, sum(UnscaledValue(profit#93))#128, sum(UnscaledValue(net_loss#95))#129] -Results [5]: [MakeDecimal(sum(UnscaledValue(sales_price#92))#126,17,2) AS sales#130, MakeDecimal(sum(UnscaledValue(return_amt#94))#127,17,2) AS returns#131, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#93))#128,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#95))#129,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#132, web channel AS channel#133, concat(web_site, web_site_id#114) AS id#134] +Input [5]: [web_site_id#108, sum#114, sum#115, sum#116, sum#117] +Keys [1]: [web_site_id#108] +Functions [4]: [sum(UnscaledValue(sales_price#88)), sum(UnscaledValue(return_amt#90)), sum(UnscaledValue(profit#89)), sum(UnscaledValue(net_loss#91))] +Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#88))#118, sum(UnscaledValue(return_amt#90))#119, sum(UnscaledValue(profit#89))#120, sum(UnscaledValue(net_loss#91))#121] +Results [5]: [MakeDecimal(sum(UnscaledValue(sales_price#88))#118,17,2) AS sales#122, MakeDecimal(sum(UnscaledValue(return_amt#90))#119,17,2) AS returns#123, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#89))#120,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#91))#121,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#124, web channel AS channel#125, concat(web_site, web_site_id#108) AS id#126] (72) Union (73) Expand [codegen id : 23] -Input [5]: [sales#39, returns#40, profit#41, channel#42, id#43] -Arguments: [[sales#39, returns#40, profit#41, channel#42, id#43, 0], [sales#39, returns#40, profit#41, channel#42, null, 1], [sales#39, returns#40, profit#41, null, null, 3]], [sales#39, returns#40, profit#41, channel#135, id#136, spark_grouping_id#137] +Input [5]: [sales#37, returns#38, profit#39, channel#40, id#41] +Arguments: [[sales#37, returns#38, profit#39, channel#40, id#41, 0], [sales#37, returns#38, profit#39, channel#40, null, 1], [sales#37, returns#38, profit#39, null, null, 3]], [sales#37, returns#38, profit#39, channel#127, id#128, spark_grouping_id#129] (74) HashAggregate [codegen id : 23] -Input [6]: [sales#39, returns#40, profit#41, channel#135, id#136, spark_grouping_id#137] -Keys [3]: [channel#135, id#136, spark_grouping_id#137] -Functions [3]: [partial_sum(sales#39), partial_sum(returns#40), partial_sum(profit#41)] -Aggregate Attributes [6]: [sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] -Results [9]: [channel#135, id#136, spark_grouping_id#137, sum#144, isEmpty#145, sum#146, isEmpty#147, sum#148, isEmpty#149] +Input [6]: [sales#37, returns#38, profit#39, channel#127, id#128, spark_grouping_id#129] +Keys [3]: [channel#127, id#128, spark_grouping_id#129] +Functions [3]: [partial_sum(sales#37), partial_sum(returns#38), partial_sum(profit#39)] +Aggregate Attributes [6]: [sum#130, isEmpty#131, sum#132, isEmpty#133, sum#134, isEmpty#135] +Results [9]: [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141] (75) Exchange -Input [9]: [channel#135, id#136, spark_grouping_id#137, sum#144, isEmpty#145, sum#146, isEmpty#147, sum#148, isEmpty#149] -Arguments: hashpartitioning(channel#135, id#136, spark_grouping_id#137, 5), ENSURE_REQUIREMENTS, [id=#150] +Input [9]: [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141] +Arguments: hashpartitioning(channel#127, id#128, spark_grouping_id#129, 5), ENSURE_REQUIREMENTS, [plan_id=9] (76) HashAggregate [codegen id : 24] -Input [9]: [channel#135, id#136, spark_grouping_id#137, sum#144, isEmpty#145, sum#146, isEmpty#147, sum#148, isEmpty#149] -Keys [3]: [channel#135, id#136, spark_grouping_id#137] -Functions [3]: [sum(sales#39), sum(returns#40), sum(profit#41)] -Aggregate Attributes [3]: [sum(sales#39)#151, sum(returns#40)#152, sum(profit#41)#153] -Results [5]: [channel#135, id#136, sum(sales#39)#151 AS sales#154, sum(returns#40)#152 AS returns#155, sum(profit#41)#153 AS profit#156] +Input [9]: [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141] +Keys [3]: [channel#127, id#128, spark_grouping_id#129] +Functions [3]: [sum(sales#37), sum(returns#38), sum(profit#39)] +Aggregate Attributes [3]: [sum(sales#37)#142, sum(returns#38)#143, sum(profit#39)#144] +Results [5]: [channel#127, id#128, sum(sales#37)#142 AS sales#145, sum(returns#38)#143 AS returns#146, sum(profit#39)#144 AS profit#147] (77) TakeOrderedAndProject -Input [5]: [channel#135, id#136, sales#154, returns#155, profit#156] -Arguments: 100, [channel#135 ASC NULLS FIRST, id#136 ASC NULLS FIRST], [channel#135, id#136, sales#154, returns#155, profit#156] +Input [5]: [channel#127, id#128, sales#145, returns#146, profit#147] +Arguments: 100, [channel#127 ASC NULLS FIRST, id#128 ASC NULLS FIRST], [channel#127, id#128, sales#145, returns#146, profit#147] ===== Subqueries ===== @@ -442,35 +442,35 @@ BroadcastExchange (82) (78) Scan parquet default.date_dim -Output [2]: [d_date_sk#25, d_date#157] +Output [2]: [d_date_sk#24, d_date#148] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-08-23), LessThanOrEqual(d_date,2000-09-06), IsNotNull(d_date_sk)] ReadSchema: struct (79) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#25, d_date#157] +Input [2]: [d_date_sk#24, d_date#148] (80) Filter [codegen id : 1] -Input [2]: [d_date_sk#25, d_date#157] -Condition : (((isnotnull(d_date#157) AND (d_date#157 >= 2000-08-23)) AND (d_date#157 <= 2000-09-06)) AND isnotnull(d_date_sk#25)) +Input [2]: [d_date_sk#24, d_date#148] +Condition : (((isnotnull(d_date#148) AND (d_date#148 >= 2000-08-23)) AND (d_date#148 <= 2000-09-06)) AND isnotnull(d_date_sk#24)) (81) Project [codegen id : 1] -Output [1]: [d_date_sk#25] -Input [2]: [d_date_sk#25, d_date#157] +Output [1]: [d_date_sk#24] +Input [2]: [d_date_sk#24, d_date#148] (82) BroadcastExchange -Input [1]: [d_date_sk#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#158] +Input [1]: [d_date_sk#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] Subquery:2 Hosting operator id = 5 Hosting Expression = sr_returned_date_sk#15 IN dynamicpruning#5 -Subquery:3 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#47 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#45 IN dynamicpruning#5 -Subquery:4 Hosting operator id = 26 Hosting Expression = cr_returned_date_sk#57 IN dynamicpruning#5 +Subquery:4 Hosting operator id = 26 Hosting Expression = cr_returned_date_sk#55 IN dynamicpruning#5 -Subquery:5 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#89 IN dynamicpruning#5 +Subquery:5 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#85 IN dynamicpruning#5 -Subquery:6 Hosting operator id = 47 Hosting Expression = wr_returned_date_sk#100 IN dynamicpruning#5 +Subquery:6 Hosting operator id = 47 Hosting Expression = wr_returned_date_sk#96 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5/explain.txt index a9e5929f70b54..ad669da0de9e3 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q5/explain.txt @@ -143,7 +143,7 @@ Condition : isnotnull(s_store_sk#23) (16) BroadcastExchange Input [2]: [s_store_sk#23, s_store_id#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (17) BroadcastHashJoin [codegen id : 5] Left keys [1]: [store_sk#6] @@ -158,263 +158,263 @@ Input [7]: [store_sk#6, sales_price#8, profit#9, return_amt#10, net_loss#11, s_s Input [5]: [sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#24] Keys [1]: [s_store_id#24] Functions [4]: [partial_sum(UnscaledValue(sales_price#8)), partial_sum(UnscaledValue(return_amt#10)), partial_sum(UnscaledValue(profit#9)), partial_sum(UnscaledValue(net_loss#11))] -Aggregate Attributes [4]: [sum#26, sum#27, sum#28, sum#29] -Results [5]: [s_store_id#24, sum#30, sum#31, sum#32, sum#33] +Aggregate Attributes [4]: [sum#25, sum#26, sum#27, sum#28] +Results [5]: [s_store_id#24, sum#29, sum#30, sum#31, sum#32] (20) Exchange -Input [5]: [s_store_id#24, sum#30, sum#31, sum#32, sum#33] -Arguments: hashpartitioning(s_store_id#24, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [5]: [s_store_id#24, sum#29, sum#30, sum#31, sum#32] +Arguments: hashpartitioning(s_store_id#24, 5), ENSURE_REQUIREMENTS, [plan_id=2] (21) HashAggregate [codegen id : 6] -Input [5]: [s_store_id#24, sum#30, sum#31, sum#32, sum#33] +Input [5]: [s_store_id#24, sum#29, sum#30, sum#31, sum#32] Keys [1]: [s_store_id#24] Functions [4]: [sum(UnscaledValue(sales_price#8)), sum(UnscaledValue(return_amt#10)), sum(UnscaledValue(profit#9)), sum(UnscaledValue(net_loss#11))] -Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#8))#35, sum(UnscaledValue(return_amt#10))#36, sum(UnscaledValue(profit#9))#37, sum(UnscaledValue(net_loss#11))#38] -Results [5]: [MakeDecimal(sum(UnscaledValue(sales_price#8))#35,17,2) AS sales#39, MakeDecimal(sum(UnscaledValue(return_amt#10))#36,17,2) AS returns#40, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#9))#37,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#11))#38,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#41, store channel AS channel#42, concat(store, s_store_id#24) AS id#43] +Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#8))#33, sum(UnscaledValue(return_amt#10))#34, sum(UnscaledValue(profit#9))#35, sum(UnscaledValue(net_loss#11))#36] +Results [5]: [MakeDecimal(sum(UnscaledValue(sales_price#8))#33,17,2) AS sales#37, MakeDecimal(sum(UnscaledValue(return_amt#10))#34,17,2) AS returns#38, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#9))#35,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#11))#36,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#39, store channel AS channel#40, concat(store, s_store_id#24) AS id#41] (22) Scan parquet default.catalog_sales -Output [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] +Output [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#47), dynamicpruningexpression(cs_sold_date_sk#47 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#45), dynamicpruningexpression(cs_sold_date_sk#45 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cs_catalog_page_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 7] -Input [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] +Input [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] (24) Filter [codegen id : 7] -Input [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] -Condition : isnotnull(cs_catalog_page_sk#44) +Input [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] +Condition : isnotnull(cs_catalog_page_sk#42) (25) Project [codegen id : 7] -Output [6]: [cs_catalog_page_sk#44 AS page_sk#48, cs_sold_date_sk#47 AS date_sk#49, cs_ext_sales_price#45 AS sales_price#50, cs_net_profit#46 AS profit#51, 0.00 AS return_amt#52, 0.00 AS net_loss#53] -Input [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] +Output [6]: [cs_catalog_page_sk#42 AS page_sk#46, cs_sold_date_sk#45 AS date_sk#47, cs_ext_sales_price#43 AS sales_price#48, cs_net_profit#44 AS profit#49, 0.00 AS return_amt#50, 0.00 AS net_loss#51] +Input [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] (26) Scan parquet default.catalog_returns -Output [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Output [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cr_returned_date_sk#57), dynamicpruningexpression(cr_returned_date_sk#57 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cr_returned_date_sk#55), dynamicpruningexpression(cr_returned_date_sk#55 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cr_catalog_page_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 8] -Input [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Input [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] (28) Filter [codegen id : 8] -Input [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] -Condition : isnotnull(cr_catalog_page_sk#54) +Input [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] +Condition : isnotnull(cr_catalog_page_sk#52) (29) Project [codegen id : 8] -Output [6]: [cr_catalog_page_sk#54 AS page_sk#58, cr_returned_date_sk#57 AS date_sk#59, 0.00 AS sales_price#60, 0.00 AS profit#61, cr_return_amount#55 AS return_amt#62, cr_net_loss#56 AS net_loss#63] -Input [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Output [6]: [cr_catalog_page_sk#52 AS page_sk#56, cr_returned_date_sk#55 AS date_sk#57, 0.00 AS sales_price#58, 0.00 AS profit#59, cr_return_amount#53 AS return_amt#60, cr_net_loss#54 AS net_loss#61] +Input [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] (30) Union (31) ReusedExchange [Reuses operator id: 79] -Output [1]: [d_date_sk#64] +Output [1]: [d_date_sk#62] (32) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [date_sk#49] -Right keys [1]: [d_date_sk#64] +Left keys [1]: [date_sk#47] +Right keys [1]: [d_date_sk#62] Join condition: None (33) Project [codegen id : 11] -Output [5]: [page_sk#48, sales_price#50, profit#51, return_amt#52, net_loss#53] -Input [7]: [page_sk#48, date_sk#49, sales_price#50, profit#51, return_amt#52, net_loss#53, d_date_sk#64] +Output [5]: [page_sk#46, sales_price#48, profit#49, return_amt#50, net_loss#51] +Input [7]: [page_sk#46, date_sk#47, sales_price#48, profit#49, return_amt#50, net_loss#51, d_date_sk#62] (34) Scan parquet default.catalog_page -Output [2]: [cp_catalog_page_sk#65, cp_catalog_page_id#66] +Output [2]: [cp_catalog_page_sk#63, cp_catalog_page_id#64] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_page] PushedFilters: [IsNotNull(cp_catalog_page_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 10] -Input [2]: [cp_catalog_page_sk#65, cp_catalog_page_id#66] +Input [2]: [cp_catalog_page_sk#63, cp_catalog_page_id#64] (36) Filter [codegen id : 10] -Input [2]: [cp_catalog_page_sk#65, cp_catalog_page_id#66] -Condition : isnotnull(cp_catalog_page_sk#65) +Input [2]: [cp_catalog_page_sk#63, cp_catalog_page_id#64] +Condition : isnotnull(cp_catalog_page_sk#63) (37) BroadcastExchange -Input [2]: [cp_catalog_page_sk#65, cp_catalog_page_id#66] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#67] +Input [2]: [cp_catalog_page_sk#63, cp_catalog_page_id#64] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (38) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [page_sk#48] -Right keys [1]: [cp_catalog_page_sk#65] +Left keys [1]: [page_sk#46] +Right keys [1]: [cp_catalog_page_sk#63] Join condition: None (39) Project [codegen id : 11] -Output [5]: [sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_id#66] -Input [7]: [page_sk#48, sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_sk#65, cp_catalog_page_id#66] +Output [5]: [sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_id#64] +Input [7]: [page_sk#46, sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_sk#63, cp_catalog_page_id#64] (40) HashAggregate [codegen id : 11] -Input [5]: [sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_id#66] -Keys [1]: [cp_catalog_page_id#66] -Functions [4]: [partial_sum(UnscaledValue(sales_price#50)), partial_sum(UnscaledValue(return_amt#52)), partial_sum(UnscaledValue(profit#51)), partial_sum(UnscaledValue(net_loss#53))] -Aggregate Attributes [4]: [sum#68, sum#69, sum#70, sum#71] -Results [5]: [cp_catalog_page_id#66, sum#72, sum#73, sum#74, sum#75] +Input [5]: [sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_id#64] +Keys [1]: [cp_catalog_page_id#64] +Functions [4]: [partial_sum(UnscaledValue(sales_price#48)), partial_sum(UnscaledValue(return_amt#50)), partial_sum(UnscaledValue(profit#49)), partial_sum(UnscaledValue(net_loss#51))] +Aggregate Attributes [4]: [sum#65, sum#66, sum#67, sum#68] +Results [5]: [cp_catalog_page_id#64, sum#69, sum#70, sum#71, sum#72] (41) Exchange -Input [5]: [cp_catalog_page_id#66, sum#72, sum#73, sum#74, sum#75] -Arguments: hashpartitioning(cp_catalog_page_id#66, 5), ENSURE_REQUIREMENTS, [id=#76] +Input [5]: [cp_catalog_page_id#64, sum#69, sum#70, sum#71, sum#72] +Arguments: hashpartitioning(cp_catalog_page_id#64, 5), ENSURE_REQUIREMENTS, [plan_id=4] (42) HashAggregate [codegen id : 12] -Input [5]: [cp_catalog_page_id#66, sum#72, sum#73, sum#74, sum#75] -Keys [1]: [cp_catalog_page_id#66] -Functions [4]: [sum(UnscaledValue(sales_price#50)), sum(UnscaledValue(return_amt#52)), sum(UnscaledValue(profit#51)), sum(UnscaledValue(net_loss#53))] -Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#50))#77, sum(UnscaledValue(return_amt#52))#78, sum(UnscaledValue(profit#51))#79, sum(UnscaledValue(net_loss#53))#80] -Results [5]: [MakeDecimal(sum(UnscaledValue(sales_price#50))#77,17,2) AS sales#81, MakeDecimal(sum(UnscaledValue(return_amt#52))#78,17,2) AS returns#82, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#51))#79,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#53))#80,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#83, catalog channel AS channel#84, concat(catalog_page, cp_catalog_page_id#66) AS id#85] +Input [5]: [cp_catalog_page_id#64, sum#69, sum#70, sum#71, sum#72] +Keys [1]: [cp_catalog_page_id#64] +Functions [4]: [sum(UnscaledValue(sales_price#48)), sum(UnscaledValue(return_amt#50)), sum(UnscaledValue(profit#49)), sum(UnscaledValue(net_loss#51))] +Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#48))#73, sum(UnscaledValue(return_amt#50))#74, sum(UnscaledValue(profit#49))#75, sum(UnscaledValue(net_loss#51))#76] +Results [5]: [MakeDecimal(sum(UnscaledValue(sales_price#48))#73,17,2) AS sales#77, MakeDecimal(sum(UnscaledValue(return_amt#50))#74,17,2) AS returns#78, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#49))#75,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#51))#76,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#79, catalog channel AS channel#80, concat(catalog_page, cp_catalog_page_id#64) AS id#81] (43) Scan parquet default.web_sales -Output [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] +Output [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#89), dynamicpruningexpression(ws_sold_date_sk#89 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#85), dynamicpruningexpression(ws_sold_date_sk#85 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_web_site_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 13] -Input [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] +Input [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] (45) Filter [codegen id : 13] -Input [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] -Condition : isnotnull(ws_web_site_sk#86) +Input [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] +Condition : isnotnull(ws_web_site_sk#82) (46) Project [codegen id : 13] -Output [6]: [ws_web_site_sk#86 AS wsr_web_site_sk#90, ws_sold_date_sk#89 AS date_sk#91, ws_ext_sales_price#87 AS sales_price#92, ws_net_profit#88 AS profit#93, 0.00 AS return_amt#94, 0.00 AS net_loss#95] -Input [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] +Output [6]: [ws_web_site_sk#82 AS wsr_web_site_sk#86, ws_sold_date_sk#85 AS date_sk#87, ws_ext_sales_price#83 AS sales_price#88, ws_net_profit#84 AS profit#89, 0.00 AS return_amt#90, 0.00 AS net_loss#91] +Input [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] (47) Scan parquet default.web_returns -Output [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] +Output [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(wr_returned_date_sk#100), dynamicpruningexpression(wr_returned_date_sk#100 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(wr_returned_date_sk#96), dynamicpruningexpression(wr_returned_date_sk#96 IN dynamicpruning#5)] ReadSchema: struct (48) ColumnarToRow [codegen id : 14] -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] +Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] (49) BroadcastExchange -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, true] as bigint), 32) | (cast(input[1, int, true] as bigint) & 4294967295))),false), [id=#101] +Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, true] as bigint), 32) | (cast(input[1, int, true] as bigint) & 4294967295))),false), [plan_id=5] (50) Scan parquet default.web_sales -Output [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] +Output [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_order_number), IsNotNull(ws_web_site_sk)] ReadSchema: struct (51) ColumnarToRow -Input [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] +Input [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] (52) Filter -Input [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] -Condition : ((isnotnull(ws_item_sk#102) AND isnotnull(ws_order_number#104)) AND isnotnull(ws_web_site_sk#103)) +Input [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] +Condition : ((isnotnull(ws_item_sk#97) AND isnotnull(ws_order_number#99)) AND isnotnull(ws_web_site_sk#98)) (53) Project -Output [3]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104] -Input [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] +Output [3]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99] +Input [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] (54) BroadcastHashJoin [codegen id : 15] -Left keys [2]: [wr_item_sk#96, wr_order_number#97] -Right keys [2]: [ws_item_sk#102, ws_order_number#104] +Left keys [2]: [wr_item_sk#92, wr_order_number#93] +Right keys [2]: [ws_item_sk#97, ws_order_number#99] Join condition: None (55) Project [codegen id : 15] -Output [6]: [ws_web_site_sk#103 AS wsr_web_site_sk#106, wr_returned_date_sk#100 AS date_sk#107, 0.00 AS sales_price#108, 0.00 AS profit#109, wr_return_amt#98 AS return_amt#110, wr_net_loss#99 AS net_loss#111] -Input [8]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100, ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104] +Output [6]: [ws_web_site_sk#98 AS wsr_web_site_sk#101, wr_returned_date_sk#96 AS date_sk#102, 0.00 AS sales_price#103, 0.00 AS profit#104, wr_return_amt#94 AS return_amt#105, wr_net_loss#95 AS net_loss#106] +Input [8]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96, ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99] (56) Union (57) ReusedExchange [Reuses operator id: 79] -Output [1]: [d_date_sk#112] +Output [1]: [d_date_sk#107] (58) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [date_sk#91] -Right keys [1]: [d_date_sk#112] +Left keys [1]: [date_sk#87] +Right keys [1]: [d_date_sk#107] Join condition: None (59) Project [codegen id : 18] -Output [5]: [wsr_web_site_sk#90, sales_price#92, profit#93, return_amt#94, net_loss#95] -Input [7]: [wsr_web_site_sk#90, date_sk#91, sales_price#92, profit#93, return_amt#94, net_loss#95, d_date_sk#112] +Output [5]: [wsr_web_site_sk#86, sales_price#88, profit#89, return_amt#90, net_loss#91] +Input [7]: [wsr_web_site_sk#86, date_sk#87, sales_price#88, profit#89, return_amt#90, net_loss#91, d_date_sk#107] (60) Scan parquet default.web_site -Output [2]: [web_site_sk#113, web_site_id#114] +Output [2]: [web_site_sk#108, web_site_id#109] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_site_sk)] ReadSchema: struct (61) ColumnarToRow [codegen id : 17] -Input [2]: [web_site_sk#113, web_site_id#114] +Input [2]: [web_site_sk#108, web_site_id#109] (62) Filter [codegen id : 17] -Input [2]: [web_site_sk#113, web_site_id#114] -Condition : isnotnull(web_site_sk#113) +Input [2]: [web_site_sk#108, web_site_id#109] +Condition : isnotnull(web_site_sk#108) (63) BroadcastExchange -Input [2]: [web_site_sk#113, web_site_id#114] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#115] +Input [2]: [web_site_sk#108, web_site_id#109] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] (64) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [wsr_web_site_sk#90] -Right keys [1]: [web_site_sk#113] +Left keys [1]: [wsr_web_site_sk#86] +Right keys [1]: [web_site_sk#108] Join condition: None (65) Project [codegen id : 18] -Output [5]: [sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_id#114] -Input [7]: [wsr_web_site_sk#90, sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_sk#113, web_site_id#114] +Output [5]: [sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_id#109] +Input [7]: [wsr_web_site_sk#86, sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_sk#108, web_site_id#109] (66) HashAggregate [codegen id : 18] -Input [5]: [sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_id#114] -Keys [1]: [web_site_id#114] -Functions [4]: [partial_sum(UnscaledValue(sales_price#92)), partial_sum(UnscaledValue(return_amt#94)), partial_sum(UnscaledValue(profit#93)), partial_sum(UnscaledValue(net_loss#95))] -Aggregate Attributes [4]: [sum#116, sum#117, sum#118, sum#119] -Results [5]: [web_site_id#114, sum#120, sum#121, sum#122, sum#123] +Input [5]: [sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_id#109] +Keys [1]: [web_site_id#109] +Functions [4]: [partial_sum(UnscaledValue(sales_price#88)), partial_sum(UnscaledValue(return_amt#90)), partial_sum(UnscaledValue(profit#89)), partial_sum(UnscaledValue(net_loss#91))] +Aggregate Attributes [4]: [sum#110, sum#111, sum#112, sum#113] +Results [5]: [web_site_id#109, sum#114, sum#115, sum#116, sum#117] (67) Exchange -Input [5]: [web_site_id#114, sum#120, sum#121, sum#122, sum#123] -Arguments: hashpartitioning(web_site_id#114, 5), ENSURE_REQUIREMENTS, [id=#124] +Input [5]: [web_site_id#109, sum#114, sum#115, sum#116, sum#117] +Arguments: hashpartitioning(web_site_id#109, 5), ENSURE_REQUIREMENTS, [plan_id=7] (68) HashAggregate [codegen id : 19] -Input [5]: [web_site_id#114, sum#120, sum#121, sum#122, sum#123] -Keys [1]: [web_site_id#114] -Functions [4]: [sum(UnscaledValue(sales_price#92)), sum(UnscaledValue(return_amt#94)), sum(UnscaledValue(profit#93)), sum(UnscaledValue(net_loss#95))] -Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#92))#125, sum(UnscaledValue(return_amt#94))#126, sum(UnscaledValue(profit#93))#127, sum(UnscaledValue(net_loss#95))#128] -Results [5]: [MakeDecimal(sum(UnscaledValue(sales_price#92))#125,17,2) AS sales#129, MakeDecimal(sum(UnscaledValue(return_amt#94))#126,17,2) AS returns#130, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#93))#127,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#95))#128,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#131, web channel AS channel#132, concat(web_site, web_site_id#114) AS id#133] +Input [5]: [web_site_id#109, sum#114, sum#115, sum#116, sum#117] +Keys [1]: [web_site_id#109] +Functions [4]: [sum(UnscaledValue(sales_price#88)), sum(UnscaledValue(return_amt#90)), sum(UnscaledValue(profit#89)), sum(UnscaledValue(net_loss#91))] +Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#88))#118, sum(UnscaledValue(return_amt#90))#119, sum(UnscaledValue(profit#89))#120, sum(UnscaledValue(net_loss#91))#121] +Results [5]: [MakeDecimal(sum(UnscaledValue(sales_price#88))#118,17,2) AS sales#122, MakeDecimal(sum(UnscaledValue(return_amt#90))#119,17,2) AS returns#123, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#89))#120,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#91))#121,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#124, web channel AS channel#125, concat(web_site, web_site_id#109) AS id#126] (69) Union (70) Expand [codegen id : 20] -Input [5]: [sales#39, returns#40, profit#41, channel#42, id#43] -Arguments: [[sales#39, returns#40, profit#41, channel#42, id#43, 0], [sales#39, returns#40, profit#41, channel#42, null, 1], [sales#39, returns#40, profit#41, null, null, 3]], [sales#39, returns#40, profit#41, channel#134, id#135, spark_grouping_id#136] +Input [5]: [sales#37, returns#38, profit#39, channel#40, id#41] +Arguments: [[sales#37, returns#38, profit#39, channel#40, id#41, 0], [sales#37, returns#38, profit#39, channel#40, null, 1], [sales#37, returns#38, profit#39, null, null, 3]], [sales#37, returns#38, profit#39, channel#127, id#128, spark_grouping_id#129] (71) HashAggregate [codegen id : 20] -Input [6]: [sales#39, returns#40, profit#41, channel#134, id#135, spark_grouping_id#136] -Keys [3]: [channel#134, id#135, spark_grouping_id#136] -Functions [3]: [partial_sum(sales#39), partial_sum(returns#40), partial_sum(profit#41)] -Aggregate Attributes [6]: [sum#137, isEmpty#138, sum#139, isEmpty#140, sum#141, isEmpty#142] -Results [9]: [channel#134, id#135, spark_grouping_id#136, sum#143, isEmpty#144, sum#145, isEmpty#146, sum#147, isEmpty#148] +Input [6]: [sales#37, returns#38, profit#39, channel#127, id#128, spark_grouping_id#129] +Keys [3]: [channel#127, id#128, spark_grouping_id#129] +Functions [3]: [partial_sum(sales#37), partial_sum(returns#38), partial_sum(profit#39)] +Aggregate Attributes [6]: [sum#130, isEmpty#131, sum#132, isEmpty#133, sum#134, isEmpty#135] +Results [9]: [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141] (72) Exchange -Input [9]: [channel#134, id#135, spark_grouping_id#136, sum#143, isEmpty#144, sum#145, isEmpty#146, sum#147, isEmpty#148] -Arguments: hashpartitioning(channel#134, id#135, spark_grouping_id#136, 5), ENSURE_REQUIREMENTS, [id=#149] +Input [9]: [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141] +Arguments: hashpartitioning(channel#127, id#128, spark_grouping_id#129, 5), ENSURE_REQUIREMENTS, [plan_id=8] (73) HashAggregate [codegen id : 21] -Input [9]: [channel#134, id#135, spark_grouping_id#136, sum#143, isEmpty#144, sum#145, isEmpty#146, sum#147, isEmpty#148] -Keys [3]: [channel#134, id#135, spark_grouping_id#136] -Functions [3]: [sum(sales#39), sum(returns#40), sum(profit#41)] -Aggregate Attributes [3]: [sum(sales#39)#150, sum(returns#40)#151, sum(profit#41)#152] -Results [5]: [channel#134, id#135, sum(sales#39)#150 AS sales#153, sum(returns#40)#151 AS returns#154, sum(profit#41)#152 AS profit#155] +Input [9]: [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141] +Keys [3]: [channel#127, id#128, spark_grouping_id#129] +Functions [3]: [sum(sales#37), sum(returns#38), sum(profit#39)] +Aggregate Attributes [3]: [sum(sales#37)#142, sum(returns#38)#143, sum(profit#39)#144] +Results [5]: [channel#127, id#128, sum(sales#37)#142 AS sales#145, sum(returns#38)#143 AS returns#146, sum(profit#39)#144 AS profit#147] (74) TakeOrderedAndProject -Input [5]: [channel#134, id#135, sales#153, returns#154, profit#155] -Arguments: 100, [channel#134 ASC NULLS FIRST, id#135 ASC NULLS FIRST], [channel#134, id#135, sales#153, returns#154, profit#155] +Input [5]: [channel#127, id#128, sales#145, returns#146, profit#147] +Arguments: 100, [channel#127 ASC NULLS FIRST, id#128 ASC NULLS FIRST], [channel#127, id#128, sales#145, returns#146, profit#147] ===== Subqueries ===== @@ -427,35 +427,35 @@ BroadcastExchange (79) (75) Scan parquet default.date_dim -Output [2]: [d_date_sk#22, d_date#156] +Output [2]: [d_date_sk#22, d_date#148] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-08-23), LessThanOrEqual(d_date,2000-09-06), IsNotNull(d_date_sk)] ReadSchema: struct (76) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#22, d_date#156] +Input [2]: [d_date_sk#22, d_date#148] (77) Filter [codegen id : 1] -Input [2]: [d_date_sk#22, d_date#156] -Condition : (((isnotnull(d_date#156) AND (d_date#156 >= 2000-08-23)) AND (d_date#156 <= 2000-09-06)) AND isnotnull(d_date_sk#22)) +Input [2]: [d_date_sk#22, d_date#148] +Condition : (((isnotnull(d_date#148) AND (d_date#148 >= 2000-08-23)) AND (d_date#148 <= 2000-09-06)) AND isnotnull(d_date_sk#22)) (78) Project [codegen id : 1] Output [1]: [d_date_sk#22] -Input [2]: [d_date_sk#22, d_date#156] +Input [2]: [d_date_sk#22, d_date#148] (79) BroadcastExchange Input [1]: [d_date_sk#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#157] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] Subquery:2 Hosting operator id = 5 Hosting Expression = sr_returned_date_sk#15 IN dynamicpruning#5 -Subquery:3 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#47 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#45 IN dynamicpruning#5 -Subquery:4 Hosting operator id = 26 Hosting Expression = cr_returned_date_sk#57 IN dynamicpruning#5 +Subquery:4 Hosting operator id = 26 Hosting Expression = cr_returned_date_sk#55 IN dynamicpruning#5 -Subquery:5 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#89 IN dynamicpruning#5 +Subquery:5 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#85 IN dynamicpruning#5 -Subquery:6 Hosting operator id = 47 Hosting Expression = wr_returned_date_sk#100 IN dynamicpruning#5 +Subquery:6 Hosting operator id = 47 Hosting Expression = wr_returned_date_sk#96 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q50.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q50.sf100/explain.txt index 97f8d567853e7..c286bc1e2d331 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q50.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q50.sf100/explain.txt @@ -61,119 +61,119 @@ Input [5]: [sr_item_sk#1, sr_customer_sk#2, sr_ticket_number#3, sr_returned_date (7) Exchange Input [4]: [sr_item_sk#1, sr_customer_sk#2, sr_ticket_number#3, sr_returned_date_sk#4] -Arguments: hashpartitioning(sr_ticket_number#3, sr_item_sk#1, sr_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#7] +Arguments: hashpartitioning(sr_ticket_number#3, sr_item_sk#1, sr_customer_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=1] (8) Sort [codegen id : 3] Input [4]: [sr_item_sk#1, sr_customer_sk#2, sr_ticket_number#3, sr_returned_date_sk#4] Arguments: [sr_ticket_number#3 ASC NULLS FIRST, sr_item_sk#1 ASC NULLS FIRST, sr_customer_sk#2 ASC NULLS FIRST], false, 0 (9) Scan parquet default.store_sales -Output [5]: [ss_item_sk#8, ss_customer_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_sold_date_sk#12] +Output [5]: [ss_item_sk#7, ss_customer_sk#8, ss_store_sk#9, ss_ticket_number#10, ss_sold_date_sk#11] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#12)] +PartitionFilters: [isnotnull(ss_sold_date_sk#11)] PushedFilters: [IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (10) ColumnarToRow [codegen id : 4] -Input [5]: [ss_item_sk#8, ss_customer_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_sold_date_sk#12] +Input [5]: [ss_item_sk#7, ss_customer_sk#8, ss_store_sk#9, ss_ticket_number#10, ss_sold_date_sk#11] (11) Filter [codegen id : 4] -Input [5]: [ss_item_sk#8, ss_customer_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_sold_date_sk#12] -Condition : (((isnotnull(ss_ticket_number#11) AND isnotnull(ss_item_sk#8)) AND isnotnull(ss_customer_sk#9)) AND isnotnull(ss_store_sk#10)) +Input [5]: [ss_item_sk#7, ss_customer_sk#8, ss_store_sk#9, ss_ticket_number#10, ss_sold_date_sk#11] +Condition : (((isnotnull(ss_ticket_number#10) AND isnotnull(ss_item_sk#7)) AND isnotnull(ss_customer_sk#8)) AND isnotnull(ss_store_sk#9)) (12) Exchange -Input [5]: [ss_item_sk#8, ss_customer_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_sold_date_sk#12] -Arguments: hashpartitioning(ss_ticket_number#11, ss_item_sk#8, ss_customer_sk#9, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [5]: [ss_item_sk#7, ss_customer_sk#8, ss_store_sk#9, ss_ticket_number#10, ss_sold_date_sk#11] +Arguments: hashpartitioning(ss_ticket_number#10, ss_item_sk#7, ss_customer_sk#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (13) Sort [codegen id : 5] -Input [5]: [ss_item_sk#8, ss_customer_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_sold_date_sk#12] -Arguments: [ss_ticket_number#11 ASC NULLS FIRST, ss_item_sk#8 ASC NULLS FIRST, ss_customer_sk#9 ASC NULLS FIRST], false, 0 +Input [5]: [ss_item_sk#7, ss_customer_sk#8, ss_store_sk#9, ss_ticket_number#10, ss_sold_date_sk#11] +Arguments: [ss_ticket_number#10 ASC NULLS FIRST, ss_item_sk#7 ASC NULLS FIRST, ss_customer_sk#8 ASC NULLS FIRST], false, 0 (14) SortMergeJoin [codegen id : 8] Left keys [3]: [sr_ticket_number#3, sr_item_sk#1, sr_customer_sk#2] -Right keys [3]: [ss_ticket_number#11, ss_item_sk#8, ss_customer_sk#9] +Right keys [3]: [ss_ticket_number#10, ss_item_sk#7, ss_customer_sk#8] Join condition: None (15) Project [codegen id : 8] -Output [3]: [sr_returned_date_sk#4, ss_store_sk#10, ss_sold_date_sk#12] -Input [9]: [sr_item_sk#1, sr_customer_sk#2, sr_ticket_number#3, sr_returned_date_sk#4, ss_item_sk#8, ss_customer_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_sold_date_sk#12] +Output [3]: [sr_returned_date_sk#4, ss_store_sk#9, ss_sold_date_sk#11] +Input [9]: [sr_item_sk#1, sr_customer_sk#2, sr_ticket_number#3, sr_returned_date_sk#4, ss_item_sk#7, ss_customer_sk#8, ss_store_sk#9, ss_ticket_number#10, ss_sold_date_sk#11] (16) Scan parquet default.date_dim -Output [1]: [d_date_sk#14] +Output [1]: [d_date_sk#12] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 6] -Input [1]: [d_date_sk#14] +Input [1]: [d_date_sk#12] (18) Filter [codegen id : 6] -Input [1]: [d_date_sk#14] -Condition : isnotnull(d_date_sk#14) +Input [1]: [d_date_sk#12] +Condition : isnotnull(d_date_sk#12) (19) BroadcastExchange -Input [1]: [d_date_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Input [1]: [d_date_sk#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (20) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ss_sold_date_sk#12] -Right keys [1]: [d_date_sk#14] +Left keys [1]: [ss_sold_date_sk#11] +Right keys [1]: [d_date_sk#12] Join condition: None (21) Project [codegen id : 8] -Output [3]: [sr_returned_date_sk#4, ss_store_sk#10, ss_sold_date_sk#12] -Input [4]: [sr_returned_date_sk#4, ss_store_sk#10, ss_sold_date_sk#12, d_date_sk#14] +Output [3]: [sr_returned_date_sk#4, ss_store_sk#9, ss_sold_date_sk#11] +Input [4]: [sr_returned_date_sk#4, ss_store_sk#9, ss_sold_date_sk#11, d_date_sk#12] (22) Scan parquet default.store -Output [11]: [s_store_sk#16, s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26] +Output [11]: [s_store_sk#13, s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 7] -Input [11]: [s_store_sk#16, s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26] +Input [11]: [s_store_sk#13, s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23] (24) Filter [codegen id : 7] -Input [11]: [s_store_sk#16, s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26] -Condition : isnotnull(s_store_sk#16) +Input [11]: [s_store_sk#13, s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23] +Condition : isnotnull(s_store_sk#13) (25) BroadcastExchange -Input [11]: [s_store_sk#16, s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#27] +Input [11]: [s_store_sk#13, s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (26) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ss_store_sk#10] -Right keys [1]: [s_store_sk#16] +Left keys [1]: [ss_store_sk#9] +Right keys [1]: [s_store_sk#13] Join condition: None (27) Project [codegen id : 8] -Output [12]: [ss_sold_date_sk#12, sr_returned_date_sk#4, s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26] -Input [14]: [sr_returned_date_sk#4, ss_store_sk#10, ss_sold_date_sk#12, s_store_sk#16, s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26] +Output [12]: [ss_sold_date_sk#11, sr_returned_date_sk#4, s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23] +Input [14]: [sr_returned_date_sk#4, ss_store_sk#9, ss_sold_date_sk#11, s_store_sk#13, s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23] (28) HashAggregate [codegen id : 8] -Input [12]: [ss_sold_date_sk#12, sr_returned_date_sk#4, s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26] -Keys [10]: [s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26] -Functions [5]: [partial_sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 30) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 30) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 60)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 60) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 90)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 90) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 120)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 120) THEN 1 ELSE 0 END)] -Aggregate Attributes [5]: [sum#28, sum#29, sum#30, sum#31, sum#32] -Results [15]: [s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26, sum#33, sum#34, sum#35, sum#36, sum#37] +Input [12]: [ss_sold_date_sk#11, sr_returned_date_sk#4, s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23] +Keys [10]: [s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23] +Functions [5]: [partial_sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 30) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 30) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 60)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 60) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 90)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 90) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 120)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 120) THEN 1 ELSE 0 END)] +Aggregate Attributes [5]: [sum#24, sum#25, sum#26, sum#27, sum#28] +Results [15]: [s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23, sum#29, sum#30, sum#31, sum#32, sum#33] (29) Exchange -Input [15]: [s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26, sum#33, sum#34, sum#35, sum#36, sum#37] -Arguments: hashpartitioning(s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [15]: [s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23, sum#29, sum#30, sum#31, sum#32, sum#33] +Arguments: hashpartitioning(s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23, 5), ENSURE_REQUIREMENTS, [plan_id=5] (30) HashAggregate [codegen id : 9] -Input [15]: [s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26, sum#33, sum#34, sum#35, sum#36, sum#37] -Keys [10]: [s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26] -Functions [5]: [sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 30) THEN 1 ELSE 0 END), sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 30) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 60)) THEN 1 ELSE 0 END), sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 60) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 90)) THEN 1 ELSE 0 END), sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 90) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 120)) THEN 1 ELSE 0 END), sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 120) THEN 1 ELSE 0 END)] -Aggregate Attributes [5]: [sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 30) THEN 1 ELSE 0 END)#39, sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 30) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 60)) THEN 1 ELSE 0 END)#40, sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 60) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 90)) THEN 1 ELSE 0 END)#41, sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 90) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 120)) THEN 1 ELSE 0 END)#42, sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 120) THEN 1 ELSE 0 END)#43] -Results [15]: [s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26, sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 30) THEN 1 ELSE 0 END)#39 AS 30 days #44, sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 30) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 60)) THEN 1 ELSE 0 END)#40 AS 31 - 60 days #45, sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 60) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 90)) THEN 1 ELSE 0 END)#41 AS 61 - 90 days #46, sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 90) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#12) <= 120)) THEN 1 ELSE 0 END)#42 AS 91 - 120 days #47, sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#12) > 120) THEN 1 ELSE 0 END)#43 AS >120 days #48] +Input [15]: [s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23, sum#29, sum#30, sum#31, sum#32, sum#33] +Keys [10]: [s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23] +Functions [5]: [sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 30) THEN 1 ELSE 0 END), sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 30) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 60)) THEN 1 ELSE 0 END), sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 60) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 90)) THEN 1 ELSE 0 END), sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 90) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 120)) THEN 1 ELSE 0 END), sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 120) THEN 1 ELSE 0 END)] +Aggregate Attributes [5]: [sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 30) THEN 1 ELSE 0 END)#34, sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 30) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 60)) THEN 1 ELSE 0 END)#35, sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 60) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 90)) THEN 1 ELSE 0 END)#36, sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 90) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 120)) THEN 1 ELSE 0 END)#37, sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 120) THEN 1 ELSE 0 END)#38] +Results [15]: [s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23, sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 30) THEN 1 ELSE 0 END)#34 AS 30 days #39, sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 30) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 60)) THEN 1 ELSE 0 END)#35 AS 31 - 60 days #40, sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 60) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 90)) THEN 1 ELSE 0 END)#36 AS 61 - 90 days #41, sum(CASE WHEN (((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 90) AND ((sr_returned_date_sk#4 - ss_sold_date_sk#11) <= 120)) THEN 1 ELSE 0 END)#37 AS 91 - 120 days #42, sum(CASE WHEN ((sr_returned_date_sk#4 - ss_sold_date_sk#11) > 120) THEN 1 ELSE 0 END)#38 AS >120 days #43] (31) TakeOrderedAndProject -Input [15]: [s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26, 30 days #44, 31 - 60 days #45, 61 - 90 days #46, 91 - 120 days #47, >120 days #48] -Arguments: 100, [s_store_name#17 ASC NULLS FIRST, s_company_id#18 ASC NULLS FIRST, s_street_number#19 ASC NULLS FIRST, s_street_name#20 ASC NULLS FIRST, s_street_type#21 ASC NULLS FIRST, s_suite_number#22 ASC NULLS FIRST, s_city#23 ASC NULLS FIRST, s_county#24 ASC NULLS FIRST, s_state#25 ASC NULLS FIRST, s_zip#26 ASC NULLS FIRST], [s_store_name#17, s_company_id#18, s_street_number#19, s_street_name#20, s_street_type#21, s_suite_number#22, s_city#23, s_county#24, s_state#25, s_zip#26, 30 days #44, 31 - 60 days #45, 61 - 90 days #46, 91 - 120 days #47, >120 days #48] +Input [15]: [s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23, 30 days #39, 31 - 60 days #40, 61 - 90 days #41, 91 - 120 days #42, >120 days #43] +Arguments: 100, [s_store_name#14 ASC NULLS FIRST, s_company_id#15 ASC NULLS FIRST, s_street_number#16 ASC NULLS FIRST, s_street_name#17 ASC NULLS FIRST, s_street_type#18 ASC NULLS FIRST, s_suite_number#19 ASC NULLS FIRST, s_city#20 ASC NULLS FIRST, s_county#21 ASC NULLS FIRST, s_state#22 ASC NULLS FIRST, s_zip#23 ASC NULLS FIRST], [s_store_name#14, s_company_id#15, s_street_number#16, s_street_name#17, s_street_type#18, s_suite_number#19, s_city#20, s_county#21, s_state#22, s_zip#23, 30 days #39, 31 - 60 days #40, 61 - 90 days #41, 91 - 120 days #42, >120 days #43] ===== Subqueries ===== @@ -186,25 +186,25 @@ BroadcastExchange (36) (32) Scan parquet default.date_dim -Output [3]: [d_date_sk#6, d_year#49, d_moy#50] +Output [3]: [d_date_sk#6, d_year#44, d_moy#45] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,8), IsNotNull(d_date_sk)] ReadSchema: struct (33) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#49, d_moy#50] +Input [3]: [d_date_sk#6, d_year#44, d_moy#45] (34) Filter [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#49, d_moy#50] -Condition : ((((isnotnull(d_year#49) AND isnotnull(d_moy#50)) AND (d_year#49 = 2001)) AND (d_moy#50 = 8)) AND isnotnull(d_date_sk#6)) +Input [3]: [d_date_sk#6, d_year#44, d_moy#45] +Condition : ((((isnotnull(d_year#44) AND isnotnull(d_moy#45)) AND (d_year#44 = 2001)) AND (d_moy#45 = 8)) AND isnotnull(d_date_sk#6)) (35) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [3]: [d_date_sk#6, d_year#49, d_moy#50] +Input [3]: [d_date_sk#6, d_year#44, d_moy#45] (36) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#51] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q50/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q50/explain.txt index 060953c80f295..925bee4192e0b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q50/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q50/explain.txt @@ -61,7 +61,7 @@ Condition : ((isnotnull(sr_ticket_number#8) AND isnotnull(sr_item_sk#6)) AND isn (7) BroadcastExchange Input [4]: [sr_item_sk#6, sr_customer_sk#7, sr_ticket_number#8, sr_returned_date_sk#9] -Arguments: HashedRelationBroadcastMode(List(input[2, int, false], input[0, int, false], input[1, int, false]),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(input[2, int, false], input[0, int, false], input[1, int, false]),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 5] Left keys [3]: [ss_ticket_number#4, ss_item_sk#1, ss_customer_sk#2] @@ -73,92 +73,92 @@ Output [3]: [ss_store_sk#3, ss_sold_date_sk#5, sr_returned_date_sk#9] Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5, sr_item_sk#6, sr_customer_sk#7, sr_ticket_number#8, sr_returned_date_sk#9] (10) Scan parquet default.store -Output [11]: [s_store_sk#12, s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22] +Output [11]: [s_store_sk#11, s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [11]: [s_store_sk#12, s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22] +Input [11]: [s_store_sk#11, s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21] (12) Filter [codegen id : 2] -Input [11]: [s_store_sk#12, s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22] -Condition : isnotnull(s_store_sk#12) +Input [11]: [s_store_sk#11, s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21] +Condition : isnotnull(s_store_sk#11) (13) BroadcastExchange -Input [11]: [s_store_sk#12, s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23] +Input [11]: [s_store_sk#11, s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#12] +Right keys [1]: [s_store_sk#11] Join condition: None (15) Project [codegen id : 5] -Output [12]: [ss_sold_date_sk#5, sr_returned_date_sk#9, s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22] -Input [14]: [ss_store_sk#3, ss_sold_date_sk#5, sr_returned_date_sk#9, s_store_sk#12, s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22] +Output [12]: [ss_sold_date_sk#5, sr_returned_date_sk#9, s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21] +Input [14]: [ss_store_sk#3, ss_sold_date_sk#5, sr_returned_date_sk#9, s_store_sk#11, s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21] (16) Scan parquet default.date_dim -Output [1]: [d_date_sk#24] +Output [1]: [d_date_sk#22] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 3] -Input [1]: [d_date_sk#24] +Input [1]: [d_date_sk#22] (18) Filter [codegen id : 3] -Input [1]: [d_date_sk#24] -Condition : isnotnull(d_date_sk#24) +Input [1]: [d_date_sk#22] +Condition : isnotnull(d_date_sk#22) (19) BroadcastExchange -Input [1]: [d_date_sk#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#25] +Input [1]: [d_date_sk#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (20) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_sold_date_sk#5] -Right keys [1]: [d_date_sk#24] +Right keys [1]: [d_date_sk#22] Join condition: None (21) Project [codegen id : 5] -Output [12]: [ss_sold_date_sk#5, sr_returned_date_sk#9, s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22] -Input [13]: [ss_sold_date_sk#5, sr_returned_date_sk#9, s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22, d_date_sk#24] +Output [12]: [ss_sold_date_sk#5, sr_returned_date_sk#9, s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21] +Input [13]: [ss_sold_date_sk#5, sr_returned_date_sk#9, s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21, d_date_sk#22] (22) ReusedExchange [Reuses operator id: 33] -Output [1]: [d_date_sk#26] +Output [1]: [d_date_sk#23] (23) BroadcastHashJoin [codegen id : 5] Left keys [1]: [sr_returned_date_sk#9] -Right keys [1]: [d_date_sk#26] +Right keys [1]: [d_date_sk#23] Join condition: None (24) Project [codegen id : 5] -Output [12]: [ss_sold_date_sk#5, sr_returned_date_sk#9, s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22] -Input [13]: [ss_sold_date_sk#5, sr_returned_date_sk#9, s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22, d_date_sk#26] +Output [12]: [ss_sold_date_sk#5, sr_returned_date_sk#9, s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21] +Input [13]: [ss_sold_date_sk#5, sr_returned_date_sk#9, s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21, d_date_sk#23] (25) HashAggregate [codegen id : 5] -Input [12]: [ss_sold_date_sk#5, sr_returned_date_sk#9, s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22] -Keys [10]: [s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22] +Input [12]: [ss_sold_date_sk#5, sr_returned_date_sk#9, s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21] +Keys [10]: [s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21] Functions [5]: [partial_sum(CASE WHEN ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 30) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 60) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 90) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN ((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)] -Aggregate Attributes [5]: [sum#27, sum#28, sum#29, sum#30, sum#31] -Results [15]: [s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22, sum#32, sum#33, sum#34, sum#35, sum#36] +Aggregate Attributes [5]: [sum#24, sum#25, sum#26, sum#27, sum#28] +Results [15]: [s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21, sum#29, sum#30, sum#31, sum#32, sum#33] (26) Exchange -Input [15]: [s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22, sum#32, sum#33, sum#34, sum#35, sum#36] -Arguments: hashpartitioning(s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22, 5), ENSURE_REQUIREMENTS, [id=#37] +Input [15]: [s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21, sum#29, sum#30, sum#31, sum#32, sum#33] +Arguments: hashpartitioning(s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21, 5), ENSURE_REQUIREMENTS, [plan_id=4] (27) HashAggregate [codegen id : 6] -Input [15]: [s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22, sum#32, sum#33, sum#34, sum#35, sum#36] -Keys [10]: [s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22] +Input [15]: [s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21, sum#29, sum#30, sum#31, sum#32, sum#33] +Keys [10]: [s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21] Functions [5]: [sum(CASE WHEN ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END), sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 30) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END), sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 60) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END), sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 90) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END), sum(CASE WHEN ((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)] -Aggregate Attributes [5]: [sum(CASE WHEN ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#38, sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 30) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#39, sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 60) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#40, sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 90) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#41, sum(CASE WHEN ((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#42] -Results [15]: [s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22, sum(CASE WHEN ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#38 AS 30 days #43, sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 30) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#39 AS 31 - 60 days #44, sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 60) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#40 AS 61 - 90 days #45, sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 90) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#41 AS 91 - 120 days #46, sum(CASE WHEN ((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#42 AS >120 days #47] +Aggregate Attributes [5]: [sum(CASE WHEN ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#34, sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 30) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#35, sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 60) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#36, sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 90) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#37, sum(CASE WHEN ((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#38] +Results [15]: [s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21, sum(CASE WHEN ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#34 AS 30 days #39, sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 30) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#35 AS 31 - 60 days #40, sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 60) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#36 AS 61 - 90 days #41, sum(CASE WHEN (((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 90) AND ((sr_returned_date_sk#9 - ss_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#37 AS 91 - 120 days #42, sum(CASE WHEN ((sr_returned_date_sk#9 - ss_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#38 AS >120 days #43] (28) TakeOrderedAndProject -Input [15]: [s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22, 30 days #43, 31 - 60 days #44, 61 - 90 days #45, 91 - 120 days #46, >120 days #47] -Arguments: 100, [s_store_name#13 ASC NULLS FIRST, s_company_id#14 ASC NULLS FIRST, s_street_number#15 ASC NULLS FIRST, s_street_name#16 ASC NULLS FIRST, s_street_type#17 ASC NULLS FIRST, s_suite_number#18 ASC NULLS FIRST, s_city#19 ASC NULLS FIRST, s_county#20 ASC NULLS FIRST, s_state#21 ASC NULLS FIRST, s_zip#22 ASC NULLS FIRST], [s_store_name#13, s_company_id#14, s_street_number#15, s_street_name#16, s_street_type#17, s_suite_number#18, s_city#19, s_county#20, s_state#21, s_zip#22, 30 days #43, 31 - 60 days #44, 61 - 90 days #45, 91 - 120 days #46, >120 days #47] +Input [15]: [s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21, 30 days #39, 31 - 60 days #40, 61 - 90 days #41, 91 - 120 days #42, >120 days #43] +Arguments: 100, [s_store_name#12 ASC NULLS FIRST, s_company_id#13 ASC NULLS FIRST, s_street_number#14 ASC NULLS FIRST, s_street_name#15 ASC NULLS FIRST, s_street_type#16 ASC NULLS FIRST, s_suite_number#17 ASC NULLS FIRST, s_city#18 ASC NULLS FIRST, s_county#19 ASC NULLS FIRST, s_state#20 ASC NULLS FIRST, s_zip#21 ASC NULLS FIRST], [s_store_name#12, s_company_id#13, s_street_number#14, s_street_name#15, s_street_type#16, s_suite_number#17, s_city#18, s_county#19, s_state#20, s_zip#21, 30 days #39, 31 - 60 days #40, 61 - 90 days #41, 91 - 120 days #42, >120 days #43] ===== Subqueries ===== @@ -171,25 +171,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [3]: [d_date_sk#26, d_year#48, d_moy#49] +Output [3]: [d_date_sk#23, d_year#44, d_moy#45] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,8), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#26, d_year#48, d_moy#49] +Input [3]: [d_date_sk#23, d_year#44, d_moy#45] (31) Filter [codegen id : 1] -Input [3]: [d_date_sk#26, d_year#48, d_moy#49] -Condition : ((((isnotnull(d_year#48) AND isnotnull(d_moy#49)) AND (d_year#48 = 2001)) AND (d_moy#49 = 8)) AND isnotnull(d_date_sk#26)) +Input [3]: [d_date_sk#23, d_year#44, d_moy#45] +Condition : ((((isnotnull(d_year#44) AND isnotnull(d_moy#45)) AND (d_year#44 = 2001)) AND (d_moy#45 = 8)) AND isnotnull(d_date_sk#23)) (32) Project [codegen id : 1] -Output [1]: [d_date_sk#26] -Input [3]: [d_date_sk#26, d_year#48, d_moy#49] +Output [1]: [d_date_sk#23] +Input [3]: [d_date_sk#23, d_year#44, d_moy#45] (33) BroadcastExchange -Input [1]: [d_date_sk#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#50] +Input [1]: [d_date_sk#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q51.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q51.sf100/explain.txt index cbb189e2de060..1b1b37929bb6b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q51.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q51.sf100/explain.txt @@ -74,136 +74,136 @@ Results [3]: [ws_item_sk#1, d_date#6, sum#8] (8) Exchange Input [3]: [ws_item_sk#1, d_date#6, sum#8] -Arguments: hashpartitioning(ws_item_sk#1, d_date#6, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ws_item_sk#1, d_date#6, 5), ENSURE_REQUIREMENTS, [plan_id=1] (9) HashAggregate [codegen id : 3] Input [3]: [ws_item_sk#1, d_date#6, sum#8] Keys [2]: [ws_item_sk#1, d_date#6] Functions [1]: [sum(UnscaledValue(ws_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_sales_price#2))#10] -Results [4]: [ws_item_sk#1 AS item_sk#11, d_date#6, MakeDecimal(sum(UnscaledValue(ws_sales_price#2))#10,17,2) AS _w0#12, ws_item_sk#1] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_sales_price#2))#9] +Results [4]: [ws_item_sk#1 AS item_sk#10, d_date#6, MakeDecimal(sum(UnscaledValue(ws_sales_price#2))#9,17,2) AS _w0#11, ws_item_sk#1] (10) Exchange -Input [4]: [item_sk#11, d_date#6, _w0#12, ws_item_sk#1] -Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [4]: [item_sk#10, d_date#6, _w0#11, ws_item_sk#1] +Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [4]: [item_sk#11, d_date#6, _w0#12, ws_item_sk#1] +Input [4]: [item_sk#10, d_date#6, _w0#11, ws_item_sk#1] Arguments: [ws_item_sk#1 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0 (12) Window -Input [4]: [item_sk#11, d_date#6, _w0#12, ws_item_sk#1] -Arguments: [sum(_w0#12) windowspecdefinition(ws_item_sk#1, d_date#6 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS cume_sales#14], [ws_item_sk#1], [d_date#6 ASC NULLS FIRST] +Input [4]: [item_sk#10, d_date#6, _w0#11, ws_item_sk#1] +Arguments: [sum(_w0#11) windowspecdefinition(ws_item_sk#1, d_date#6 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS cume_sales#12], [ws_item_sk#1], [d_date#6 ASC NULLS FIRST] (13) Project [codegen id : 5] -Output [3]: [item_sk#11, d_date#6, cume_sales#14] -Input [5]: [item_sk#11, d_date#6, _w0#12, ws_item_sk#1, cume_sales#14] +Output [3]: [item_sk#10, d_date#6, cume_sales#12] +Input [5]: [item_sk#10, d_date#6, _w0#11, ws_item_sk#1, cume_sales#12] (14) Exchange -Input [3]: [item_sk#11, d_date#6, cume_sales#14] -Arguments: hashpartitioning(item_sk#11, d_date#6, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [3]: [item_sk#10, d_date#6, cume_sales#12] +Arguments: hashpartitioning(item_sk#10, d_date#6, 5), ENSURE_REQUIREMENTS, [plan_id=3] (15) Sort [codegen id : 6] -Input [3]: [item_sk#11, d_date#6, cume_sales#14] -Arguments: [item_sk#11 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0 +Input [3]: [item_sk#10, d_date#6, cume_sales#12] +Arguments: [item_sk#10 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0 (16) Scan parquet default.store_sales -Output [3]: [ss_item_sk#16, ss_sales_price#17, ss_sold_date_sk#18] +Output [3]: [ss_item_sk#13, ss_sales_price#14, ss_sold_date_sk#15] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#18), dynamicpruningexpression(ss_sold_date_sk#18 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(ss_sold_date_sk#15), dynamicpruningexpression(ss_sold_date_sk#15 IN dynamicpruning#4)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 8] -Input [3]: [ss_item_sk#16, ss_sales_price#17, ss_sold_date_sk#18] +Input [3]: [ss_item_sk#13, ss_sales_price#14, ss_sold_date_sk#15] (18) Filter [codegen id : 8] -Input [3]: [ss_item_sk#16, ss_sales_price#17, ss_sold_date_sk#18] -Condition : isnotnull(ss_item_sk#16) +Input [3]: [ss_item_sk#13, ss_sales_price#14, ss_sold_date_sk#15] +Condition : isnotnull(ss_item_sk#13) (19) ReusedExchange [Reuses operator id: 42] -Output [2]: [d_date_sk#19, d_date#20] +Output [2]: [d_date_sk#16, d_date#17] (20) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ss_sold_date_sk#18] -Right keys [1]: [d_date_sk#19] +Left keys [1]: [ss_sold_date_sk#15] +Right keys [1]: [d_date_sk#16] Join condition: None (21) Project [codegen id : 8] -Output [3]: [ss_item_sk#16, ss_sales_price#17, d_date#20] -Input [5]: [ss_item_sk#16, ss_sales_price#17, ss_sold_date_sk#18, d_date_sk#19, d_date#20] +Output [3]: [ss_item_sk#13, ss_sales_price#14, d_date#17] +Input [5]: [ss_item_sk#13, ss_sales_price#14, ss_sold_date_sk#15, d_date_sk#16, d_date#17] (22) HashAggregate [codegen id : 8] -Input [3]: [ss_item_sk#16, ss_sales_price#17, d_date#20] -Keys [2]: [ss_item_sk#16, d_date#20] -Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#17))] -Aggregate Attributes [1]: [sum#21] -Results [3]: [ss_item_sk#16, d_date#20, sum#22] +Input [3]: [ss_item_sk#13, ss_sales_price#14, d_date#17] +Keys [2]: [ss_item_sk#13, d_date#17] +Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#14))] +Aggregate Attributes [1]: [sum#18] +Results [3]: [ss_item_sk#13, d_date#17, sum#19] (23) Exchange -Input [3]: [ss_item_sk#16, d_date#20, sum#22] -Arguments: hashpartitioning(ss_item_sk#16, d_date#20, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [3]: [ss_item_sk#13, d_date#17, sum#19] +Arguments: hashpartitioning(ss_item_sk#13, d_date#17, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) HashAggregate [codegen id : 9] -Input [3]: [ss_item_sk#16, d_date#20, sum#22] -Keys [2]: [ss_item_sk#16, d_date#20] -Functions [1]: [sum(UnscaledValue(ss_sales_price#17))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#17))#24] -Results [4]: [ss_item_sk#16 AS item_sk#25, d_date#20, MakeDecimal(sum(UnscaledValue(ss_sales_price#17))#24,17,2) AS _w0#26, ss_item_sk#16] +Input [3]: [ss_item_sk#13, d_date#17, sum#19] +Keys [2]: [ss_item_sk#13, d_date#17] +Functions [1]: [sum(UnscaledValue(ss_sales_price#14))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#14))#20] +Results [4]: [ss_item_sk#13 AS item_sk#21, d_date#17, MakeDecimal(sum(UnscaledValue(ss_sales_price#14))#20,17,2) AS _w0#22, ss_item_sk#13] (25) Exchange -Input [4]: [item_sk#25, d_date#20, _w0#26, ss_item_sk#16] -Arguments: hashpartitioning(ss_item_sk#16, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [4]: [item_sk#21, d_date#17, _w0#22, ss_item_sk#13] +Arguments: hashpartitioning(ss_item_sk#13, 5), ENSURE_REQUIREMENTS, [plan_id=5] (26) Sort [codegen id : 10] -Input [4]: [item_sk#25, d_date#20, _w0#26, ss_item_sk#16] -Arguments: [ss_item_sk#16 ASC NULLS FIRST, d_date#20 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#21, d_date#17, _w0#22, ss_item_sk#13] +Arguments: [ss_item_sk#13 ASC NULLS FIRST, d_date#17 ASC NULLS FIRST], false, 0 (27) Window -Input [4]: [item_sk#25, d_date#20, _w0#26, ss_item_sk#16] -Arguments: [sum(_w0#26) windowspecdefinition(ss_item_sk#16, d_date#20 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS cume_sales#28], [ss_item_sk#16], [d_date#20 ASC NULLS FIRST] +Input [4]: [item_sk#21, d_date#17, _w0#22, ss_item_sk#13] +Arguments: [sum(_w0#22) windowspecdefinition(ss_item_sk#13, d_date#17 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS cume_sales#23], [ss_item_sk#13], [d_date#17 ASC NULLS FIRST] (28) Project [codegen id : 11] -Output [3]: [item_sk#25, d_date#20, cume_sales#28] -Input [5]: [item_sk#25, d_date#20, _w0#26, ss_item_sk#16, cume_sales#28] +Output [3]: [item_sk#21, d_date#17, cume_sales#23] +Input [5]: [item_sk#21, d_date#17, _w0#22, ss_item_sk#13, cume_sales#23] (29) Exchange -Input [3]: [item_sk#25, d_date#20, cume_sales#28] -Arguments: hashpartitioning(item_sk#25, d_date#20, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [3]: [item_sk#21, d_date#17, cume_sales#23] +Arguments: hashpartitioning(item_sk#21, d_date#17, 5), ENSURE_REQUIREMENTS, [plan_id=6] (30) Sort [codegen id : 12] -Input [3]: [item_sk#25, d_date#20, cume_sales#28] -Arguments: [item_sk#25 ASC NULLS FIRST, d_date#20 ASC NULLS FIRST], false, 0 +Input [3]: [item_sk#21, d_date#17, cume_sales#23] +Arguments: [item_sk#21 ASC NULLS FIRST, d_date#17 ASC NULLS FIRST], false, 0 (31) SortMergeJoin [codegen id : 13] -Left keys [2]: [item_sk#11, d_date#6] -Right keys [2]: [item_sk#25, d_date#20] +Left keys [2]: [item_sk#10, d_date#6] +Right keys [2]: [item_sk#21, d_date#17] Join condition: None (32) Project [codegen id : 13] -Output [4]: [CASE WHEN isnotnull(item_sk#11) THEN item_sk#11 ELSE item_sk#25 END AS item_sk#30, CASE WHEN isnotnull(d_date#6) THEN d_date#6 ELSE d_date#20 END AS d_date#31, cume_sales#14 AS web_sales#32, cume_sales#28 AS store_sales#33] -Input [6]: [item_sk#11, d_date#6, cume_sales#14, item_sk#25, d_date#20, cume_sales#28] +Output [4]: [CASE WHEN isnotnull(item_sk#10) THEN item_sk#10 ELSE item_sk#21 END AS item_sk#24, CASE WHEN isnotnull(d_date#6) THEN d_date#6 ELSE d_date#17 END AS d_date#25, cume_sales#12 AS web_sales#26, cume_sales#23 AS store_sales#27] +Input [6]: [item_sk#10, d_date#6, cume_sales#12, item_sk#21, d_date#17, cume_sales#23] (33) Exchange -Input [4]: [item_sk#30, d_date#31, web_sales#32, store_sales#33] -Arguments: hashpartitioning(item_sk#30, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [4]: [item_sk#24, d_date#25, web_sales#26, store_sales#27] +Arguments: hashpartitioning(item_sk#24, 5), ENSURE_REQUIREMENTS, [plan_id=7] (34) Sort [codegen id : 14] -Input [4]: [item_sk#30, d_date#31, web_sales#32, store_sales#33] -Arguments: [item_sk#30 ASC NULLS FIRST, d_date#31 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#24, d_date#25, web_sales#26, store_sales#27] +Arguments: [item_sk#24 ASC NULLS FIRST, d_date#25 ASC NULLS FIRST], false, 0 (35) Window -Input [4]: [item_sk#30, d_date#31, web_sales#32, store_sales#33] -Arguments: [max(web_sales#32) windowspecdefinition(item_sk#30, d_date#31 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS web_cumulative#35, max(store_sales#33) windowspecdefinition(item_sk#30, d_date#31 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS store_cumulative#36], [item_sk#30], [d_date#31 ASC NULLS FIRST] +Input [4]: [item_sk#24, d_date#25, web_sales#26, store_sales#27] +Arguments: [max(web_sales#26) windowspecdefinition(item_sk#24, d_date#25 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS web_cumulative#28, max(store_sales#27) windowspecdefinition(item_sk#24, d_date#25 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS store_cumulative#29], [item_sk#24], [d_date#25 ASC NULLS FIRST] (36) Filter [codegen id : 15] -Input [6]: [item_sk#30, d_date#31, web_sales#32, store_sales#33, web_cumulative#35, store_cumulative#36] -Condition : ((isnotnull(web_cumulative#35) AND isnotnull(store_cumulative#36)) AND (web_cumulative#35 > store_cumulative#36)) +Input [6]: [item_sk#24, d_date#25, web_sales#26, store_sales#27, web_cumulative#28, store_cumulative#29] +Condition : ((isnotnull(web_cumulative#28) AND isnotnull(store_cumulative#29)) AND (web_cumulative#28 > store_cumulative#29)) (37) TakeOrderedAndProject -Input [6]: [item_sk#30, d_date#31, web_sales#32, store_sales#33, web_cumulative#35, store_cumulative#36] -Arguments: 100, [item_sk#30 ASC NULLS FIRST, d_date#31 ASC NULLS FIRST], [item_sk#30, d_date#31, web_sales#32, store_sales#33, web_cumulative#35, store_cumulative#36] +Input [6]: [item_sk#24, d_date#25, web_sales#26, store_sales#27, web_cumulative#28, store_cumulative#29] +Arguments: 100, [item_sk#24 ASC NULLS FIRST, d_date#25 ASC NULLS FIRST], [item_sk#24, d_date#25, web_sales#26, store_sales#27, web_cumulative#28, store_cumulative#29] ===== Subqueries ===== @@ -216,27 +216,27 @@ BroadcastExchange (42) (38) Scan parquet default.date_dim -Output [3]: [d_date_sk#5, d_date#6, d_month_seq#37] +Output [3]: [d_date_sk#5, d_date#6, d_month_seq#30] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (39) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#5, d_date#6, d_month_seq#37] +Input [3]: [d_date_sk#5, d_date#6, d_month_seq#30] (40) Filter [codegen id : 1] -Input [3]: [d_date_sk#5, d_date#6, d_month_seq#37] -Condition : (((isnotnull(d_month_seq#37) AND (d_month_seq#37 >= 1200)) AND (d_month_seq#37 <= 1211)) AND isnotnull(d_date_sk#5)) +Input [3]: [d_date_sk#5, d_date#6, d_month_seq#30] +Condition : (((isnotnull(d_month_seq#30) AND (d_month_seq#30 >= 1200)) AND (d_month_seq#30 <= 1211)) AND isnotnull(d_date_sk#5)) (41) Project [codegen id : 1] Output [2]: [d_date_sk#5, d_date#6] -Input [3]: [d_date_sk#5, d_date#6, d_month_seq#37] +Input [3]: [d_date_sk#5, d_date#6, d_month_seq#30] (42) BroadcastExchange Input [2]: [d_date_sk#5, d_date#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#38] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 16 Hosting Expression = ss_sold_date_sk#18 IN dynamicpruning#4 +Subquery:2 Hosting operator id = 16 Hosting Expression = ss_sold_date_sk#15 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q51/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q51/explain.txt index cbb189e2de060..1b1b37929bb6b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q51/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q51/explain.txt @@ -74,136 +74,136 @@ Results [3]: [ws_item_sk#1, d_date#6, sum#8] (8) Exchange Input [3]: [ws_item_sk#1, d_date#6, sum#8] -Arguments: hashpartitioning(ws_item_sk#1, d_date#6, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ws_item_sk#1, d_date#6, 5), ENSURE_REQUIREMENTS, [plan_id=1] (9) HashAggregate [codegen id : 3] Input [3]: [ws_item_sk#1, d_date#6, sum#8] Keys [2]: [ws_item_sk#1, d_date#6] Functions [1]: [sum(UnscaledValue(ws_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_sales_price#2))#10] -Results [4]: [ws_item_sk#1 AS item_sk#11, d_date#6, MakeDecimal(sum(UnscaledValue(ws_sales_price#2))#10,17,2) AS _w0#12, ws_item_sk#1] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_sales_price#2))#9] +Results [4]: [ws_item_sk#1 AS item_sk#10, d_date#6, MakeDecimal(sum(UnscaledValue(ws_sales_price#2))#9,17,2) AS _w0#11, ws_item_sk#1] (10) Exchange -Input [4]: [item_sk#11, d_date#6, _w0#12, ws_item_sk#1] -Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [4]: [item_sk#10, d_date#6, _w0#11, ws_item_sk#1] +Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [4]: [item_sk#11, d_date#6, _w0#12, ws_item_sk#1] +Input [4]: [item_sk#10, d_date#6, _w0#11, ws_item_sk#1] Arguments: [ws_item_sk#1 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0 (12) Window -Input [4]: [item_sk#11, d_date#6, _w0#12, ws_item_sk#1] -Arguments: [sum(_w0#12) windowspecdefinition(ws_item_sk#1, d_date#6 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS cume_sales#14], [ws_item_sk#1], [d_date#6 ASC NULLS FIRST] +Input [4]: [item_sk#10, d_date#6, _w0#11, ws_item_sk#1] +Arguments: [sum(_w0#11) windowspecdefinition(ws_item_sk#1, d_date#6 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS cume_sales#12], [ws_item_sk#1], [d_date#6 ASC NULLS FIRST] (13) Project [codegen id : 5] -Output [3]: [item_sk#11, d_date#6, cume_sales#14] -Input [5]: [item_sk#11, d_date#6, _w0#12, ws_item_sk#1, cume_sales#14] +Output [3]: [item_sk#10, d_date#6, cume_sales#12] +Input [5]: [item_sk#10, d_date#6, _w0#11, ws_item_sk#1, cume_sales#12] (14) Exchange -Input [3]: [item_sk#11, d_date#6, cume_sales#14] -Arguments: hashpartitioning(item_sk#11, d_date#6, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [3]: [item_sk#10, d_date#6, cume_sales#12] +Arguments: hashpartitioning(item_sk#10, d_date#6, 5), ENSURE_REQUIREMENTS, [plan_id=3] (15) Sort [codegen id : 6] -Input [3]: [item_sk#11, d_date#6, cume_sales#14] -Arguments: [item_sk#11 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0 +Input [3]: [item_sk#10, d_date#6, cume_sales#12] +Arguments: [item_sk#10 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0 (16) Scan parquet default.store_sales -Output [3]: [ss_item_sk#16, ss_sales_price#17, ss_sold_date_sk#18] +Output [3]: [ss_item_sk#13, ss_sales_price#14, ss_sold_date_sk#15] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#18), dynamicpruningexpression(ss_sold_date_sk#18 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(ss_sold_date_sk#15), dynamicpruningexpression(ss_sold_date_sk#15 IN dynamicpruning#4)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 8] -Input [3]: [ss_item_sk#16, ss_sales_price#17, ss_sold_date_sk#18] +Input [3]: [ss_item_sk#13, ss_sales_price#14, ss_sold_date_sk#15] (18) Filter [codegen id : 8] -Input [3]: [ss_item_sk#16, ss_sales_price#17, ss_sold_date_sk#18] -Condition : isnotnull(ss_item_sk#16) +Input [3]: [ss_item_sk#13, ss_sales_price#14, ss_sold_date_sk#15] +Condition : isnotnull(ss_item_sk#13) (19) ReusedExchange [Reuses operator id: 42] -Output [2]: [d_date_sk#19, d_date#20] +Output [2]: [d_date_sk#16, d_date#17] (20) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ss_sold_date_sk#18] -Right keys [1]: [d_date_sk#19] +Left keys [1]: [ss_sold_date_sk#15] +Right keys [1]: [d_date_sk#16] Join condition: None (21) Project [codegen id : 8] -Output [3]: [ss_item_sk#16, ss_sales_price#17, d_date#20] -Input [5]: [ss_item_sk#16, ss_sales_price#17, ss_sold_date_sk#18, d_date_sk#19, d_date#20] +Output [3]: [ss_item_sk#13, ss_sales_price#14, d_date#17] +Input [5]: [ss_item_sk#13, ss_sales_price#14, ss_sold_date_sk#15, d_date_sk#16, d_date#17] (22) HashAggregate [codegen id : 8] -Input [3]: [ss_item_sk#16, ss_sales_price#17, d_date#20] -Keys [2]: [ss_item_sk#16, d_date#20] -Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#17))] -Aggregate Attributes [1]: [sum#21] -Results [3]: [ss_item_sk#16, d_date#20, sum#22] +Input [3]: [ss_item_sk#13, ss_sales_price#14, d_date#17] +Keys [2]: [ss_item_sk#13, d_date#17] +Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#14))] +Aggregate Attributes [1]: [sum#18] +Results [3]: [ss_item_sk#13, d_date#17, sum#19] (23) Exchange -Input [3]: [ss_item_sk#16, d_date#20, sum#22] -Arguments: hashpartitioning(ss_item_sk#16, d_date#20, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [3]: [ss_item_sk#13, d_date#17, sum#19] +Arguments: hashpartitioning(ss_item_sk#13, d_date#17, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) HashAggregate [codegen id : 9] -Input [3]: [ss_item_sk#16, d_date#20, sum#22] -Keys [2]: [ss_item_sk#16, d_date#20] -Functions [1]: [sum(UnscaledValue(ss_sales_price#17))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#17))#24] -Results [4]: [ss_item_sk#16 AS item_sk#25, d_date#20, MakeDecimal(sum(UnscaledValue(ss_sales_price#17))#24,17,2) AS _w0#26, ss_item_sk#16] +Input [3]: [ss_item_sk#13, d_date#17, sum#19] +Keys [2]: [ss_item_sk#13, d_date#17] +Functions [1]: [sum(UnscaledValue(ss_sales_price#14))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#14))#20] +Results [4]: [ss_item_sk#13 AS item_sk#21, d_date#17, MakeDecimal(sum(UnscaledValue(ss_sales_price#14))#20,17,2) AS _w0#22, ss_item_sk#13] (25) Exchange -Input [4]: [item_sk#25, d_date#20, _w0#26, ss_item_sk#16] -Arguments: hashpartitioning(ss_item_sk#16, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [4]: [item_sk#21, d_date#17, _w0#22, ss_item_sk#13] +Arguments: hashpartitioning(ss_item_sk#13, 5), ENSURE_REQUIREMENTS, [plan_id=5] (26) Sort [codegen id : 10] -Input [4]: [item_sk#25, d_date#20, _w0#26, ss_item_sk#16] -Arguments: [ss_item_sk#16 ASC NULLS FIRST, d_date#20 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#21, d_date#17, _w0#22, ss_item_sk#13] +Arguments: [ss_item_sk#13 ASC NULLS FIRST, d_date#17 ASC NULLS FIRST], false, 0 (27) Window -Input [4]: [item_sk#25, d_date#20, _w0#26, ss_item_sk#16] -Arguments: [sum(_w0#26) windowspecdefinition(ss_item_sk#16, d_date#20 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS cume_sales#28], [ss_item_sk#16], [d_date#20 ASC NULLS FIRST] +Input [4]: [item_sk#21, d_date#17, _w0#22, ss_item_sk#13] +Arguments: [sum(_w0#22) windowspecdefinition(ss_item_sk#13, d_date#17 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS cume_sales#23], [ss_item_sk#13], [d_date#17 ASC NULLS FIRST] (28) Project [codegen id : 11] -Output [3]: [item_sk#25, d_date#20, cume_sales#28] -Input [5]: [item_sk#25, d_date#20, _w0#26, ss_item_sk#16, cume_sales#28] +Output [3]: [item_sk#21, d_date#17, cume_sales#23] +Input [5]: [item_sk#21, d_date#17, _w0#22, ss_item_sk#13, cume_sales#23] (29) Exchange -Input [3]: [item_sk#25, d_date#20, cume_sales#28] -Arguments: hashpartitioning(item_sk#25, d_date#20, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [3]: [item_sk#21, d_date#17, cume_sales#23] +Arguments: hashpartitioning(item_sk#21, d_date#17, 5), ENSURE_REQUIREMENTS, [plan_id=6] (30) Sort [codegen id : 12] -Input [3]: [item_sk#25, d_date#20, cume_sales#28] -Arguments: [item_sk#25 ASC NULLS FIRST, d_date#20 ASC NULLS FIRST], false, 0 +Input [3]: [item_sk#21, d_date#17, cume_sales#23] +Arguments: [item_sk#21 ASC NULLS FIRST, d_date#17 ASC NULLS FIRST], false, 0 (31) SortMergeJoin [codegen id : 13] -Left keys [2]: [item_sk#11, d_date#6] -Right keys [2]: [item_sk#25, d_date#20] +Left keys [2]: [item_sk#10, d_date#6] +Right keys [2]: [item_sk#21, d_date#17] Join condition: None (32) Project [codegen id : 13] -Output [4]: [CASE WHEN isnotnull(item_sk#11) THEN item_sk#11 ELSE item_sk#25 END AS item_sk#30, CASE WHEN isnotnull(d_date#6) THEN d_date#6 ELSE d_date#20 END AS d_date#31, cume_sales#14 AS web_sales#32, cume_sales#28 AS store_sales#33] -Input [6]: [item_sk#11, d_date#6, cume_sales#14, item_sk#25, d_date#20, cume_sales#28] +Output [4]: [CASE WHEN isnotnull(item_sk#10) THEN item_sk#10 ELSE item_sk#21 END AS item_sk#24, CASE WHEN isnotnull(d_date#6) THEN d_date#6 ELSE d_date#17 END AS d_date#25, cume_sales#12 AS web_sales#26, cume_sales#23 AS store_sales#27] +Input [6]: [item_sk#10, d_date#6, cume_sales#12, item_sk#21, d_date#17, cume_sales#23] (33) Exchange -Input [4]: [item_sk#30, d_date#31, web_sales#32, store_sales#33] -Arguments: hashpartitioning(item_sk#30, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [4]: [item_sk#24, d_date#25, web_sales#26, store_sales#27] +Arguments: hashpartitioning(item_sk#24, 5), ENSURE_REQUIREMENTS, [plan_id=7] (34) Sort [codegen id : 14] -Input [4]: [item_sk#30, d_date#31, web_sales#32, store_sales#33] -Arguments: [item_sk#30 ASC NULLS FIRST, d_date#31 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#24, d_date#25, web_sales#26, store_sales#27] +Arguments: [item_sk#24 ASC NULLS FIRST, d_date#25 ASC NULLS FIRST], false, 0 (35) Window -Input [4]: [item_sk#30, d_date#31, web_sales#32, store_sales#33] -Arguments: [max(web_sales#32) windowspecdefinition(item_sk#30, d_date#31 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS web_cumulative#35, max(store_sales#33) windowspecdefinition(item_sk#30, d_date#31 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS store_cumulative#36], [item_sk#30], [d_date#31 ASC NULLS FIRST] +Input [4]: [item_sk#24, d_date#25, web_sales#26, store_sales#27] +Arguments: [max(web_sales#26) windowspecdefinition(item_sk#24, d_date#25 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS web_cumulative#28, max(store_sales#27) windowspecdefinition(item_sk#24, d_date#25 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS store_cumulative#29], [item_sk#24], [d_date#25 ASC NULLS FIRST] (36) Filter [codegen id : 15] -Input [6]: [item_sk#30, d_date#31, web_sales#32, store_sales#33, web_cumulative#35, store_cumulative#36] -Condition : ((isnotnull(web_cumulative#35) AND isnotnull(store_cumulative#36)) AND (web_cumulative#35 > store_cumulative#36)) +Input [6]: [item_sk#24, d_date#25, web_sales#26, store_sales#27, web_cumulative#28, store_cumulative#29] +Condition : ((isnotnull(web_cumulative#28) AND isnotnull(store_cumulative#29)) AND (web_cumulative#28 > store_cumulative#29)) (37) TakeOrderedAndProject -Input [6]: [item_sk#30, d_date#31, web_sales#32, store_sales#33, web_cumulative#35, store_cumulative#36] -Arguments: 100, [item_sk#30 ASC NULLS FIRST, d_date#31 ASC NULLS FIRST], [item_sk#30, d_date#31, web_sales#32, store_sales#33, web_cumulative#35, store_cumulative#36] +Input [6]: [item_sk#24, d_date#25, web_sales#26, store_sales#27, web_cumulative#28, store_cumulative#29] +Arguments: 100, [item_sk#24 ASC NULLS FIRST, d_date#25 ASC NULLS FIRST], [item_sk#24, d_date#25, web_sales#26, store_sales#27, web_cumulative#28, store_cumulative#29] ===== Subqueries ===== @@ -216,27 +216,27 @@ BroadcastExchange (42) (38) Scan parquet default.date_dim -Output [3]: [d_date_sk#5, d_date#6, d_month_seq#37] +Output [3]: [d_date_sk#5, d_date#6, d_month_seq#30] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (39) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#5, d_date#6, d_month_seq#37] +Input [3]: [d_date_sk#5, d_date#6, d_month_seq#30] (40) Filter [codegen id : 1] -Input [3]: [d_date_sk#5, d_date#6, d_month_seq#37] -Condition : (((isnotnull(d_month_seq#37) AND (d_month_seq#37 >= 1200)) AND (d_month_seq#37 <= 1211)) AND isnotnull(d_date_sk#5)) +Input [3]: [d_date_sk#5, d_date#6, d_month_seq#30] +Condition : (((isnotnull(d_month_seq#30) AND (d_month_seq#30 >= 1200)) AND (d_month_seq#30 <= 1211)) AND isnotnull(d_date_sk#5)) (41) Project [codegen id : 1] Output [2]: [d_date_sk#5, d_date#6] -Input [3]: [d_date_sk#5, d_date#6, d_month_seq#37] +Input [3]: [d_date_sk#5, d_date#6, d_month_seq#30] (42) BroadcastExchange Input [2]: [d_date_sk#5, d_date#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#38] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 16 Hosting Expression = ss_sold_date_sk#18 IN dynamicpruning#4 +Subquery:2 Hosting operator id = 16 Hosting Expression = ss_sold_date_sk#15 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q52.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q52.sf100/explain.txt index 2c8c5e970052f..ac70b590af0cd 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q52.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q52.sf100/explain.txt @@ -53,7 +53,7 @@ Input [4]: [i_item_sk#5, i_brand_id#6, i_brand#7, i_manager_id#8] (8) BroadcastExchange Input [3]: [i_item_sk#5, i_brand_id#6, i_brand#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#1] @@ -65,38 +65,38 @@ Output [4]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_brand_id#6, i_brand#7] Input [6]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_sk#5, i_brand_id#6, i_brand#7] (11) ReusedExchange [Reuses operator id: 22] -Output [2]: [d_date_sk#10, d_year#11] +Output [2]: [d_date_sk#9, d_year#10] (12) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_sold_date_sk#3] -Right keys [1]: [d_date_sk#10] +Right keys [1]: [d_date_sk#9] Join condition: None (13) Project [codegen id : 3] -Output [4]: [d_year#11, ss_ext_sales_price#2, i_brand_id#6, i_brand#7] -Input [6]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_brand_id#6, i_brand#7, d_date_sk#10, d_year#11] +Output [4]: [d_year#10, ss_ext_sales_price#2, i_brand_id#6, i_brand#7] +Input [6]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_brand_id#6, i_brand#7, d_date_sk#9, d_year#10] (14) HashAggregate [codegen id : 3] -Input [4]: [d_year#11, ss_ext_sales_price#2, i_brand_id#6, i_brand#7] -Keys [3]: [d_year#11, i_brand#7, i_brand_id#6] +Input [4]: [d_year#10, ss_ext_sales_price#2, i_brand_id#6, i_brand#7] +Keys [3]: [d_year#10, i_brand#7, i_brand_id#6] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#12] -Results [4]: [d_year#11, i_brand#7, i_brand_id#6, sum#13] +Aggregate Attributes [1]: [sum#11] +Results [4]: [d_year#10, i_brand#7, i_brand_id#6, sum#12] (15) Exchange -Input [4]: [d_year#11, i_brand#7, i_brand_id#6, sum#13] -Arguments: hashpartitioning(d_year#11, i_brand#7, i_brand_id#6, 5), ENSURE_REQUIREMENTS, [id=#14] +Input [4]: [d_year#10, i_brand#7, i_brand_id#6, sum#12] +Arguments: hashpartitioning(d_year#10, i_brand#7, i_brand_id#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (16) HashAggregate [codegen id : 4] -Input [4]: [d_year#11, i_brand#7, i_brand_id#6, sum#13] -Keys [3]: [d_year#11, i_brand#7, i_brand_id#6] +Input [4]: [d_year#10, i_brand#7, i_brand_id#6, sum#12] +Keys [3]: [d_year#10, i_brand#7, i_brand_id#6] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#15] -Results [4]: [d_year#11, i_brand_id#6 AS brand_id#16, i_brand#7 AS brand#17, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#15,17,2) AS ext_price#18] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#13] +Results [4]: [d_year#10, i_brand_id#6 AS brand_id#14, i_brand#7 AS brand#15, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#13,17,2) AS ext_price#16] (17) TakeOrderedAndProject -Input [4]: [d_year#11, brand_id#16, brand#17, ext_price#18] -Arguments: 100, [d_year#11 ASC NULLS FIRST, ext_price#18 DESC NULLS LAST, brand_id#16 ASC NULLS FIRST], [d_year#11, brand_id#16, brand#17, ext_price#18] +Input [4]: [d_year#10, brand_id#14, brand#15, ext_price#16] +Arguments: 100, [d_year#10 ASC NULLS FIRST, ext_price#16 DESC NULLS LAST, brand_id#14 ASC NULLS FIRST], [d_year#10, brand_id#14, brand#15, ext_price#16] ===== Subqueries ===== @@ -109,25 +109,25 @@ BroadcastExchange (22) (18) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#11, d_moy#19] +Output [3]: [d_date_sk#9, d_year#10, d_moy#17] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_moy,11), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (19) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#19] +Input [3]: [d_date_sk#9, d_year#10, d_moy#17] (20) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#19] -Condition : ((((isnotnull(d_moy#19) AND isnotnull(d_year#11)) AND (d_moy#19 = 11)) AND (d_year#11 = 2000)) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#9, d_year#10, d_moy#17] +Condition : ((((isnotnull(d_moy#17) AND isnotnull(d_year#10)) AND (d_moy#17 = 11)) AND (d_year#10 = 2000)) AND isnotnull(d_date_sk#9)) (21) Project [codegen id : 1] -Output [2]: [d_date_sk#10, d_year#11] -Input [3]: [d_date_sk#10, d_year#11, d_moy#19] +Output [2]: [d_date_sk#9, d_year#10] +Input [3]: [d_date_sk#9, d_year#10, d_moy#17] (22) BroadcastExchange -Input [2]: [d_date_sk#10, d_year#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20] +Input [2]: [d_date_sk#9, d_year#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q52/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q52/explain.txt index e6e106706fb07..c2dcd53f86ae3 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q52/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q52/explain.txt @@ -57,7 +57,7 @@ Condition : isnotnull(ss_item_sk#4) (8) BroadcastExchange Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] @@ -69,55 +69,55 @@ Output [3]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5] Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] (11) Scan parquet default.item -Output [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] +Output [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,1), IsNotNull(i_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] (13) Filter [codegen id : 2] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] -Condition : ((isnotnull(i_manager_id#11) AND (i_manager_id#11 = 1)) AND isnotnull(i_item_sk#8)) +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] +Condition : ((isnotnull(i_manager_id#10) AND (i_manager_id#10 = 1)) AND isnotnull(i_item_sk#7)) (14) Project [codegen id : 2] -Output [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] +Output [3]: [i_item_sk#7, i_brand_id#8, i_brand#9] +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] (15) BroadcastExchange -Input [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Input [3]: [i_item_sk#7, i_brand_id#8, i_brand#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#4] -Right keys [1]: [i_item_sk#8] +Right keys [1]: [i_item_sk#7] Join condition: None (17) Project [codegen id : 3] -Output [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#9, i_brand#10] -Input [6]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#8, i_brand_id#9, i_brand#10] +Output [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#8, i_brand#9] +Input [6]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#7, i_brand_id#8, i_brand#9] (18) HashAggregate [codegen id : 3] -Input [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#9, i_brand#10] -Keys [3]: [d_year#2, i_brand#10, i_brand_id#9] +Input [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#8, i_brand#9] +Keys [3]: [d_year#2, i_brand#9, i_brand_id#8] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum#13] -Results [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14] +Aggregate Attributes [1]: [sum#11] +Results [4]: [d_year#2, i_brand#9, i_brand_id#8, sum#12] (19) Exchange -Input [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14] -Arguments: hashpartitioning(d_year#2, i_brand#10, i_brand_id#9, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [d_year#2, i_brand#9, i_brand_id#8, sum#12] +Arguments: hashpartitioning(d_year#2, i_brand#9, i_brand_id#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14] -Keys [3]: [d_year#2, i_brand#10, i_brand_id#9] +Input [4]: [d_year#2, i_brand#9, i_brand_id#8, sum#12] +Keys [3]: [d_year#2, i_brand#9, i_brand_id#8] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#16] -Results [4]: [d_year#2, i_brand_id#9 AS brand_id#17, i_brand#10 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#16,17,2) AS ext_price#19] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#13] +Results [4]: [d_year#2, i_brand_id#8 AS brand_id#14, i_brand#9 AS brand#15, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#13,17,2) AS ext_price#16] (21) TakeOrderedAndProject -Input [4]: [d_year#2, brand_id#17, brand#18, ext_price#19] -Arguments: 100, [d_year#2 ASC NULLS FIRST, ext_price#19 DESC NULLS LAST, brand_id#17 ASC NULLS FIRST], [d_year#2, brand_id#17, brand#18, ext_price#19] +Input [4]: [d_year#2, brand_id#14, brand#15, ext_price#16] +Arguments: 100, [d_year#2 ASC NULLS FIRST, ext_price#16 DESC NULLS LAST, brand_id#14 ASC NULLS FIRST], [d_year#2, brand_id#14, brand#15, ext_price#16] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q53.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q53.sf100/explain.txt index 694852c3ed6b0..507650dfadc19 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q53.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q53.sf100/explain.txt @@ -49,116 +49,116 @@ Input [5]: [i_item_sk#1, i_brand#2, i_class#3, i_category#4, i_manufact_id#5] (5) BroadcastExchange Input [2]: [i_item_sk#1, i_manufact_id#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.store_sales -Output [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] +Output [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#14), dynamicpruningexpression(ss_sold_date_sk#14 IN dynamicpruning#15)] +PartitionFilters: [isnotnull(ss_sold_date_sk#13), dynamicpruningexpression(ss_sold_date_sk#13 IN dynamicpruning#14)] PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (7) ColumnarToRow -Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] +Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] (8) Filter -Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] -Condition : (isnotnull(ss_item_sk#11) AND isnotnull(ss_store_sk#12)) +Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] +Condition : (isnotnull(ss_item_sk#10) AND isnotnull(ss_store_sk#11)) (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] -Right keys [1]: [ss_item_sk#11] +Right keys [1]: [ss_item_sk#10] Join condition: None (10) Project [codegen id : 4] -Output [4]: [i_manufact_id#5, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] -Input [6]: [i_item_sk#1, i_manufact_id#5, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] +Output [4]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] +Input [6]: [i_item_sk#1, i_manufact_id#5, ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] (11) Scan parquet default.store -Output [1]: [s_store_sk#16] +Output [1]: [s_store_sk#15] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [1]: [s_store_sk#16] +Input [1]: [s_store_sk#15] (13) Filter [codegen id : 2] -Input [1]: [s_store_sk#16] -Condition : isnotnull(s_store_sk#16) +Input [1]: [s_store_sk#15] +Condition : isnotnull(s_store_sk#15) (14) BroadcastExchange -Input [1]: [s_store_sk#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#17] +Input [1]: [s_store_sk#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_store_sk#12] -Right keys [1]: [s_store_sk#16] +Left keys [1]: [ss_store_sk#11] +Right keys [1]: [s_store_sk#15] Join condition: None (16) Project [codegen id : 4] -Output [3]: [i_manufact_id#5, ss_sales_price#13, ss_sold_date_sk#14] -Input [5]: [i_manufact_id#5, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14, s_store_sk#16] +Output [3]: [i_manufact_id#5, ss_sales_price#12, ss_sold_date_sk#13] +Input [5]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13, s_store_sk#15] (17) ReusedExchange [Reuses operator id: 33] -Output [2]: [d_date_sk#18, d_qoy#19] +Output [2]: [d_date_sk#16, d_qoy#17] (18) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#14] -Right keys [1]: [d_date_sk#18] +Left keys [1]: [ss_sold_date_sk#13] +Right keys [1]: [d_date_sk#16] Join condition: None (19) Project [codegen id : 4] -Output [3]: [i_manufact_id#5, ss_sales_price#13, d_qoy#19] -Input [5]: [i_manufact_id#5, ss_sales_price#13, ss_sold_date_sk#14, d_date_sk#18, d_qoy#19] +Output [3]: [i_manufact_id#5, ss_sales_price#12, d_qoy#17] +Input [5]: [i_manufact_id#5, ss_sales_price#12, ss_sold_date_sk#13, d_date_sk#16, d_qoy#17] (20) HashAggregate [codegen id : 4] -Input [3]: [i_manufact_id#5, ss_sales_price#13, d_qoy#19] -Keys [2]: [i_manufact_id#5, d_qoy#19] -Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#13))] -Aggregate Attributes [1]: [sum#20] -Results [3]: [i_manufact_id#5, d_qoy#19, sum#21] +Input [3]: [i_manufact_id#5, ss_sales_price#12, d_qoy#17] +Keys [2]: [i_manufact_id#5, d_qoy#17] +Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#12))] +Aggregate Attributes [1]: [sum#18] +Results [3]: [i_manufact_id#5, d_qoy#17, sum#19] (21) Exchange -Input [3]: [i_manufact_id#5, d_qoy#19, sum#21] -Arguments: hashpartitioning(i_manufact_id#5, d_qoy#19, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [3]: [i_manufact_id#5, d_qoy#17, sum#19] +Arguments: hashpartitioning(i_manufact_id#5, d_qoy#17, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 5] -Input [3]: [i_manufact_id#5, d_qoy#19, sum#21] -Keys [2]: [i_manufact_id#5, d_qoy#19] -Functions [1]: [sum(UnscaledValue(ss_sales_price#13))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#13))#23] -Results [3]: [i_manufact_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#23,17,2) AS sum_sales#24, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#23,17,2) AS _w0#25] +Input [3]: [i_manufact_id#5, d_qoy#17, sum#19] +Keys [2]: [i_manufact_id#5, d_qoy#17] +Functions [1]: [sum(UnscaledValue(ss_sales_price#12))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#12))#20] +Results [3]: [i_manufact_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS _w0#22] (23) Exchange -Input [3]: [i_manufact_id#5, sum_sales#24, _w0#25] -Arguments: hashpartitioning(i_manufact_id#5, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [3]: [i_manufact_id#5, sum_sales#21, _w0#22] +Arguments: hashpartitioning(i_manufact_id#5, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 6] -Input [3]: [i_manufact_id#5, sum_sales#24, _w0#25] +Input [3]: [i_manufact_id#5, sum_sales#21, _w0#22] Arguments: [i_manufact_id#5 ASC NULLS FIRST], false, 0 (25) Window -Input [3]: [i_manufact_id#5, sum_sales#24, _w0#25] -Arguments: [avg(_w0#25) windowspecdefinition(i_manufact_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_quarterly_sales#27], [i_manufact_id#5] +Input [3]: [i_manufact_id#5, sum_sales#21, _w0#22] +Arguments: [avg(_w0#22) windowspecdefinition(i_manufact_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_quarterly_sales#23], [i_manufact_id#5] (26) Filter [codegen id : 7] -Input [4]: [i_manufact_id#5, sum_sales#24, _w0#25, avg_quarterly_sales#27] -Condition : (isnotnull(avg_quarterly_sales#27) AND ((avg_quarterly_sales#27 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#24 as decimal(22,6))) - promote_precision(cast(avg_quarterly_sales#27 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_quarterly_sales#27 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) +Input [4]: [i_manufact_id#5, sum_sales#21, _w0#22, avg_quarterly_sales#23] +Condition : (isnotnull(avg_quarterly_sales#23) AND ((avg_quarterly_sales#23 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_quarterly_sales#23 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_quarterly_sales#23 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) (27) Project [codegen id : 7] -Output [3]: [i_manufact_id#5, sum_sales#24, avg_quarterly_sales#27] -Input [4]: [i_manufact_id#5, sum_sales#24, _w0#25, avg_quarterly_sales#27] +Output [3]: [i_manufact_id#5, sum_sales#21, avg_quarterly_sales#23] +Input [4]: [i_manufact_id#5, sum_sales#21, _w0#22, avg_quarterly_sales#23] (28) TakeOrderedAndProject -Input [3]: [i_manufact_id#5, sum_sales#24, avg_quarterly_sales#27] -Arguments: 100, [avg_quarterly_sales#27 ASC NULLS FIRST, sum_sales#24 ASC NULLS FIRST, i_manufact_id#5 ASC NULLS FIRST], [i_manufact_id#5, sum_sales#24, avg_quarterly_sales#27] +Input [3]: [i_manufact_id#5, sum_sales#21, avg_quarterly_sales#23] +Arguments: 100, [avg_quarterly_sales#23 ASC NULLS FIRST, sum_sales#21 ASC NULLS FIRST, i_manufact_id#5 ASC NULLS FIRST], [i_manufact_id#5, sum_sales#21, avg_quarterly_sales#23] ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#14 IN dynamicpruning#15 +Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#13 IN dynamicpruning#14 BroadcastExchange (33) +- * Project (32) +- * Filter (31) @@ -167,25 +167,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [3]: [d_date_sk#18, d_month_seq#28, d_qoy#19] +Output [3]: [d_date_sk#16, d_month_seq#24, d_qoy#17] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_month_seq, [1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211]), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#18, d_month_seq#28, d_qoy#19] +Input [3]: [d_date_sk#16, d_month_seq#24, d_qoy#17] (31) Filter [codegen id : 1] -Input [3]: [d_date_sk#18, d_month_seq#28, d_qoy#19] -Condition : (d_month_seq#28 INSET 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211 AND isnotnull(d_date_sk#18)) +Input [3]: [d_date_sk#16, d_month_seq#24, d_qoy#17] +Condition : (d_month_seq#24 INSET 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211 AND isnotnull(d_date_sk#16)) (32) Project [codegen id : 1] -Output [2]: [d_date_sk#18, d_qoy#19] -Input [3]: [d_date_sk#18, d_month_seq#28, d_qoy#19] +Output [2]: [d_date_sk#16, d_qoy#17] +Input [3]: [d_date_sk#16, d_month_seq#24, d_qoy#17] (33) BroadcastExchange -Input [2]: [d_date_sk#18, d_qoy#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#29] +Input [2]: [d_date_sk#16, d_qoy#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q53/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q53/explain.txt index 91364dcce16e4..9e09bfb0dfb3f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q53/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q53/explain.txt @@ -64,7 +64,7 @@ Condition : (isnotnull(ss_item_sk#10) AND isnotnull(ss_store_sk#11)) (8) BroadcastExchange Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] @@ -76,85 +76,85 @@ Output [4]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk Input [6]: [i_item_sk#1, i_manufact_id#5, ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] (11) ReusedExchange [Reuses operator id: 33] -Output [2]: [d_date_sk#16, d_qoy#17] +Output [2]: [d_date_sk#15, d_qoy#16] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_date_sk#13] -Right keys [1]: [d_date_sk#16] +Right keys [1]: [d_date_sk#15] Join condition: None (13) Project [codegen id : 4] -Output [4]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, d_qoy#17] -Input [6]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13, d_date_sk#16, d_qoy#17] +Output [4]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, d_qoy#16] +Input [6]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13, d_date_sk#15, d_qoy#16] (14) Scan parquet default.store -Output [1]: [s_store_sk#18] +Output [1]: [s_store_sk#17] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [1]: [s_store_sk#18] +Input [1]: [s_store_sk#17] (16) Filter [codegen id : 3] -Input [1]: [s_store_sk#18] -Condition : isnotnull(s_store_sk#18) +Input [1]: [s_store_sk#17] +Condition : isnotnull(s_store_sk#17) (17) BroadcastExchange -Input [1]: [s_store_sk#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19] +Input [1]: [s_store_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#11] -Right keys [1]: [s_store_sk#18] +Right keys [1]: [s_store_sk#17] Join condition: None (19) Project [codegen id : 4] -Output [3]: [i_manufact_id#5, ss_sales_price#12, d_qoy#17] -Input [5]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, d_qoy#17, s_store_sk#18] +Output [3]: [i_manufact_id#5, ss_sales_price#12, d_qoy#16] +Input [5]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, d_qoy#16, s_store_sk#17] (20) HashAggregate [codegen id : 4] -Input [3]: [i_manufact_id#5, ss_sales_price#12, d_qoy#17] -Keys [2]: [i_manufact_id#5, d_qoy#17] +Input [3]: [i_manufact_id#5, ss_sales_price#12, d_qoy#16] +Keys [2]: [i_manufact_id#5, d_qoy#16] Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#12))] -Aggregate Attributes [1]: [sum#20] -Results [3]: [i_manufact_id#5, d_qoy#17, sum#21] +Aggregate Attributes [1]: [sum#18] +Results [3]: [i_manufact_id#5, d_qoy#16, sum#19] (21) Exchange -Input [3]: [i_manufact_id#5, d_qoy#17, sum#21] -Arguments: hashpartitioning(i_manufact_id#5, d_qoy#17, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [3]: [i_manufact_id#5, d_qoy#16, sum#19] +Arguments: hashpartitioning(i_manufact_id#5, d_qoy#16, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 5] -Input [3]: [i_manufact_id#5, d_qoy#17, sum#21] -Keys [2]: [i_manufact_id#5, d_qoy#17] +Input [3]: [i_manufact_id#5, d_qoy#16, sum#19] +Keys [2]: [i_manufact_id#5, d_qoy#16] Functions [1]: [sum(UnscaledValue(ss_sales_price#12))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#12))#23] -Results [3]: [i_manufact_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#23,17,2) AS sum_sales#24, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#23,17,2) AS _w0#25] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#12))#20] +Results [3]: [i_manufact_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS _w0#22] (23) Exchange -Input [3]: [i_manufact_id#5, sum_sales#24, _w0#25] -Arguments: hashpartitioning(i_manufact_id#5, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [3]: [i_manufact_id#5, sum_sales#21, _w0#22] +Arguments: hashpartitioning(i_manufact_id#5, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 6] -Input [3]: [i_manufact_id#5, sum_sales#24, _w0#25] +Input [3]: [i_manufact_id#5, sum_sales#21, _w0#22] Arguments: [i_manufact_id#5 ASC NULLS FIRST], false, 0 (25) Window -Input [3]: [i_manufact_id#5, sum_sales#24, _w0#25] -Arguments: [avg(_w0#25) windowspecdefinition(i_manufact_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_quarterly_sales#27], [i_manufact_id#5] +Input [3]: [i_manufact_id#5, sum_sales#21, _w0#22] +Arguments: [avg(_w0#22) windowspecdefinition(i_manufact_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_quarterly_sales#23], [i_manufact_id#5] (26) Filter [codegen id : 7] -Input [4]: [i_manufact_id#5, sum_sales#24, _w0#25, avg_quarterly_sales#27] -Condition : (isnotnull(avg_quarterly_sales#27) AND ((avg_quarterly_sales#27 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#24 as decimal(22,6))) - promote_precision(cast(avg_quarterly_sales#27 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_quarterly_sales#27 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) +Input [4]: [i_manufact_id#5, sum_sales#21, _w0#22, avg_quarterly_sales#23] +Condition : (isnotnull(avg_quarterly_sales#23) AND ((avg_quarterly_sales#23 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_quarterly_sales#23 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_quarterly_sales#23 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) (27) Project [codegen id : 7] -Output [3]: [i_manufact_id#5, sum_sales#24, avg_quarterly_sales#27] -Input [4]: [i_manufact_id#5, sum_sales#24, _w0#25, avg_quarterly_sales#27] +Output [3]: [i_manufact_id#5, sum_sales#21, avg_quarterly_sales#23] +Input [4]: [i_manufact_id#5, sum_sales#21, _w0#22, avg_quarterly_sales#23] (28) TakeOrderedAndProject -Input [3]: [i_manufact_id#5, sum_sales#24, avg_quarterly_sales#27] -Arguments: 100, [avg_quarterly_sales#27 ASC NULLS FIRST, sum_sales#24 ASC NULLS FIRST, i_manufact_id#5 ASC NULLS FIRST], [i_manufact_id#5, sum_sales#24, avg_quarterly_sales#27] +Input [3]: [i_manufact_id#5, sum_sales#21, avg_quarterly_sales#23] +Arguments: 100, [avg_quarterly_sales#23 ASC NULLS FIRST, sum_sales#21 ASC NULLS FIRST, i_manufact_id#5 ASC NULLS FIRST], [i_manufact_id#5, sum_sales#21, avg_quarterly_sales#23] ===== Subqueries ===== @@ -167,25 +167,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [3]: [d_date_sk#16, d_month_seq#28, d_qoy#17] +Output [3]: [d_date_sk#15, d_month_seq#24, d_qoy#16] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_month_seq, [1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211]), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#16, d_month_seq#28, d_qoy#17] +Input [3]: [d_date_sk#15, d_month_seq#24, d_qoy#16] (31) Filter [codegen id : 1] -Input [3]: [d_date_sk#16, d_month_seq#28, d_qoy#17] -Condition : (d_month_seq#28 INSET 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211 AND isnotnull(d_date_sk#16)) +Input [3]: [d_date_sk#15, d_month_seq#24, d_qoy#16] +Condition : (d_month_seq#24 INSET 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211 AND isnotnull(d_date_sk#15)) (32) Project [codegen id : 1] -Output [2]: [d_date_sk#16, d_qoy#17] -Input [3]: [d_date_sk#16, d_month_seq#28, d_qoy#17] +Output [2]: [d_date_sk#15, d_qoy#16] +Input [3]: [d_date_sk#15, d_month_seq#24, d_qoy#16] (33) BroadcastExchange -Input [2]: [d_date_sk#16, d_qoy#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#29] +Input [2]: [d_date_sk#15, d_qoy#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q54.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q54.sf100/explain.txt index 543281ef9100e..9d1a92004c794 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q54.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q54.sf100/explain.txt @@ -90,7 +90,7 @@ Condition : (isnotnull(s_county#4) AND isnotnull(s_state#5)) (7) BroadcastExchange Input [2]: [s_county#4, s_state#5] -Arguments: HashedRelationBroadcastMode(List(input[0, string, false], input[1, string, false]),false), [id=#6] +Arguments: HashedRelationBroadcastMode(List(input[0, string, false], input[1, string, false]),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 2] Left keys [2]: [ca_county#2, ca_state#3] @@ -103,240 +103,240 @@ Input [5]: [ca_address_sk#1, ca_county#2, ca_state#3, s_county#4, s_state#5] (10) BroadcastExchange Input [1]: [ca_address_sk#1] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (11) Scan parquet default.catalog_sales -Output [3]: [cs_bill_customer_sk#8, cs_item_sk#9, cs_sold_date_sk#10] +Output [3]: [cs_bill_customer_sk#6, cs_item_sk#7, cs_sold_date_sk#8] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#10), dynamicpruningexpression(cs_sold_date_sk#10 IN dynamicpruning#11)] +PartitionFilters: [isnotnull(cs_sold_date_sk#8), dynamicpruningexpression(cs_sold_date_sk#8 IN dynamicpruning#9)] PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_bill_customer_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 3] -Input [3]: [cs_bill_customer_sk#8, cs_item_sk#9, cs_sold_date_sk#10] +Input [3]: [cs_bill_customer_sk#6, cs_item_sk#7, cs_sold_date_sk#8] (13) Filter [codegen id : 3] -Input [3]: [cs_bill_customer_sk#8, cs_item_sk#9, cs_sold_date_sk#10] -Condition : (isnotnull(cs_item_sk#9) AND isnotnull(cs_bill_customer_sk#8)) +Input [3]: [cs_bill_customer_sk#6, cs_item_sk#7, cs_sold_date_sk#8] +Condition : (isnotnull(cs_item_sk#7) AND isnotnull(cs_bill_customer_sk#6)) (14) Project [codegen id : 3] -Output [3]: [cs_sold_date_sk#10 AS sold_date_sk#12, cs_bill_customer_sk#8 AS customer_sk#13, cs_item_sk#9 AS item_sk#14] -Input [3]: [cs_bill_customer_sk#8, cs_item_sk#9, cs_sold_date_sk#10] +Output [3]: [cs_sold_date_sk#8 AS sold_date_sk#10, cs_bill_customer_sk#6 AS customer_sk#11, cs_item_sk#7 AS item_sk#12] +Input [3]: [cs_bill_customer_sk#6, cs_item_sk#7, cs_sold_date_sk#8] (15) Scan parquet default.web_sales -Output [3]: [ws_item_sk#15, ws_bill_customer_sk#16, ws_sold_date_sk#17] +Output [3]: [ws_item_sk#13, ws_bill_customer_sk#14, ws_sold_date_sk#15] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#17), dynamicpruningexpression(ws_sold_date_sk#17 IN dynamicpruning#11)] +PartitionFilters: [isnotnull(ws_sold_date_sk#15), dynamicpruningexpression(ws_sold_date_sk#15 IN dynamicpruning#9)] PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (16) ColumnarToRow [codegen id : 4] -Input [3]: [ws_item_sk#15, ws_bill_customer_sk#16, ws_sold_date_sk#17] +Input [3]: [ws_item_sk#13, ws_bill_customer_sk#14, ws_sold_date_sk#15] (17) Filter [codegen id : 4] -Input [3]: [ws_item_sk#15, ws_bill_customer_sk#16, ws_sold_date_sk#17] -Condition : (isnotnull(ws_item_sk#15) AND isnotnull(ws_bill_customer_sk#16)) +Input [3]: [ws_item_sk#13, ws_bill_customer_sk#14, ws_sold_date_sk#15] +Condition : (isnotnull(ws_item_sk#13) AND isnotnull(ws_bill_customer_sk#14)) (18) Project [codegen id : 4] -Output [3]: [ws_sold_date_sk#17 AS sold_date_sk#18, ws_bill_customer_sk#16 AS customer_sk#19, ws_item_sk#15 AS item_sk#20] -Input [3]: [ws_item_sk#15, ws_bill_customer_sk#16, ws_sold_date_sk#17] +Output [3]: [ws_sold_date_sk#15 AS sold_date_sk#16, ws_bill_customer_sk#14 AS customer_sk#17, ws_item_sk#13 AS item_sk#18] +Input [3]: [ws_item_sk#13, ws_bill_customer_sk#14, ws_sold_date_sk#15] (19) Union (20) ReusedExchange [Reuses operator id: 64] -Output [1]: [d_date_sk#21] +Output [1]: [d_date_sk#19] (21) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [sold_date_sk#12] -Right keys [1]: [d_date_sk#21] +Left keys [1]: [sold_date_sk#10] +Right keys [1]: [d_date_sk#19] Join condition: None (22) Project [codegen id : 7] -Output [2]: [customer_sk#13, item_sk#14] -Input [4]: [sold_date_sk#12, customer_sk#13, item_sk#14, d_date_sk#21] +Output [2]: [customer_sk#11, item_sk#12] +Input [4]: [sold_date_sk#10, customer_sk#11, item_sk#12, d_date_sk#19] (23) Scan parquet default.item -Output [3]: [i_item_sk#22, i_class#23, i_category#24] +Output [3]: [i_item_sk#20, i_class#21, i_category#22] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_category), IsNotNull(i_class), EqualTo(i_category,Women ), EqualTo(i_class,maternity ), IsNotNull(i_item_sk)] ReadSchema: struct (24) ColumnarToRow [codegen id : 6] -Input [3]: [i_item_sk#22, i_class#23, i_category#24] +Input [3]: [i_item_sk#20, i_class#21, i_category#22] (25) Filter [codegen id : 6] -Input [3]: [i_item_sk#22, i_class#23, i_category#24] -Condition : ((((isnotnull(i_category#24) AND isnotnull(i_class#23)) AND (i_category#24 = Women )) AND (i_class#23 = maternity )) AND isnotnull(i_item_sk#22)) +Input [3]: [i_item_sk#20, i_class#21, i_category#22] +Condition : ((((isnotnull(i_category#22) AND isnotnull(i_class#21)) AND (i_category#22 = Women )) AND (i_class#21 = maternity )) AND isnotnull(i_item_sk#20)) (26) Project [codegen id : 6] -Output [1]: [i_item_sk#22] -Input [3]: [i_item_sk#22, i_class#23, i_category#24] +Output [1]: [i_item_sk#20] +Input [3]: [i_item_sk#20, i_class#21, i_category#22] (27) BroadcastExchange -Input [1]: [i_item_sk#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [i_item_sk#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (28) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [item_sk#14] -Right keys [1]: [i_item_sk#22] +Left keys [1]: [item_sk#12] +Right keys [1]: [i_item_sk#20] Join condition: None (29) Project [codegen id : 7] -Output [1]: [customer_sk#13] -Input [3]: [customer_sk#13, item_sk#14, i_item_sk#22] +Output [1]: [customer_sk#11] +Input [3]: [customer_sk#11, item_sk#12, i_item_sk#20] (30) Exchange -Input [1]: [customer_sk#13] -Arguments: hashpartitioning(customer_sk#13, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [1]: [customer_sk#11] +Arguments: hashpartitioning(customer_sk#11, 5), ENSURE_REQUIREMENTS, [plan_id=4] (31) Sort [codegen id : 8] -Input [1]: [customer_sk#13] -Arguments: [customer_sk#13 ASC NULLS FIRST], false, 0 +Input [1]: [customer_sk#11] +Arguments: [customer_sk#11 ASC NULLS FIRST], false, 0 (32) Scan parquet default.customer -Output [2]: [c_customer_sk#27, c_current_addr_sk#28] +Output [2]: [c_customer_sk#23, c_current_addr_sk#24] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (33) ColumnarToRow [codegen id : 9] -Input [2]: [c_customer_sk#27, c_current_addr_sk#28] +Input [2]: [c_customer_sk#23, c_current_addr_sk#24] (34) Filter [codegen id : 9] -Input [2]: [c_customer_sk#27, c_current_addr_sk#28] -Condition : (isnotnull(c_customer_sk#27) AND isnotnull(c_current_addr_sk#28)) +Input [2]: [c_customer_sk#23, c_current_addr_sk#24] +Condition : (isnotnull(c_customer_sk#23) AND isnotnull(c_current_addr_sk#24)) (35) Exchange -Input [2]: [c_customer_sk#27, c_current_addr_sk#28] -Arguments: hashpartitioning(c_customer_sk#27, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [2]: [c_customer_sk#23, c_current_addr_sk#24] +Arguments: hashpartitioning(c_customer_sk#23, 5), ENSURE_REQUIREMENTS, [plan_id=5] (36) Sort [codegen id : 10] -Input [2]: [c_customer_sk#27, c_current_addr_sk#28] -Arguments: [c_customer_sk#27 ASC NULLS FIRST], false, 0 +Input [2]: [c_customer_sk#23, c_current_addr_sk#24] +Arguments: [c_customer_sk#23 ASC NULLS FIRST], false, 0 (37) SortMergeJoin -Left keys [1]: [customer_sk#13] -Right keys [1]: [c_customer_sk#27] +Left keys [1]: [customer_sk#11] +Right keys [1]: [c_customer_sk#23] Join condition: None (38) Project -Output [2]: [c_customer_sk#27, c_current_addr_sk#28] -Input [3]: [customer_sk#13, c_customer_sk#27, c_current_addr_sk#28] +Output [2]: [c_customer_sk#23, c_current_addr_sk#24] +Input [3]: [customer_sk#11, c_customer_sk#23, c_current_addr_sk#24] (39) HashAggregate -Input [2]: [c_customer_sk#27, c_current_addr_sk#28] -Keys [2]: [c_customer_sk#27, c_current_addr_sk#28] +Input [2]: [c_customer_sk#23, c_current_addr_sk#24] +Keys [2]: [c_customer_sk#23, c_current_addr_sk#24] Functions: [] Aggregate Attributes: [] -Results [2]: [c_customer_sk#27, c_current_addr_sk#28] +Results [2]: [c_customer_sk#23, c_current_addr_sk#24] (40) HashAggregate -Input [2]: [c_customer_sk#27, c_current_addr_sk#28] -Keys [2]: [c_customer_sk#27, c_current_addr_sk#28] +Input [2]: [c_customer_sk#23, c_current_addr_sk#24] +Keys [2]: [c_customer_sk#23, c_current_addr_sk#24] Functions: [] Aggregate Attributes: [] -Results [2]: [c_customer_sk#27, c_current_addr_sk#28] +Results [2]: [c_customer_sk#23, c_current_addr_sk#24] (41) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ca_address_sk#1] -Right keys [1]: [c_current_addr_sk#28] +Right keys [1]: [c_current_addr_sk#24] Join condition: None (42) Project [codegen id : 11] -Output [1]: [c_customer_sk#27] -Input [3]: [ca_address_sk#1, c_customer_sk#27, c_current_addr_sk#28] +Output [1]: [c_customer_sk#23] +Input [3]: [ca_address_sk#1, c_customer_sk#23, c_current_addr_sk#24] (43) Sort [codegen id : 11] -Input [1]: [c_customer_sk#27] -Arguments: [c_customer_sk#27 ASC NULLS FIRST], false, 0 +Input [1]: [c_customer_sk#23] +Arguments: [c_customer_sk#23 ASC NULLS FIRST], false, 0 (44) Scan parquet default.store_sales -Output [3]: [ss_customer_sk#30, ss_ext_sales_price#31, ss_sold_date_sk#32] +Output [3]: [ss_customer_sk#25, ss_ext_sales_price#26, ss_sold_date_sk#27] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#32), dynamicpruningexpression(ss_sold_date_sk#32 IN dynamicpruning#33)] +PartitionFilters: [isnotnull(ss_sold_date_sk#27), dynamicpruningexpression(ss_sold_date_sk#27 IN dynamicpruning#28)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 13] -Input [3]: [ss_customer_sk#30, ss_ext_sales_price#31, ss_sold_date_sk#32] +Input [3]: [ss_customer_sk#25, ss_ext_sales_price#26, ss_sold_date_sk#27] (46) Filter [codegen id : 13] -Input [3]: [ss_customer_sk#30, ss_ext_sales_price#31, ss_sold_date_sk#32] -Condition : isnotnull(ss_customer_sk#30) +Input [3]: [ss_customer_sk#25, ss_ext_sales_price#26, ss_sold_date_sk#27] +Condition : isnotnull(ss_customer_sk#25) (47) ReusedExchange [Reuses operator id: 69] -Output [1]: [d_date_sk#34] +Output [1]: [d_date_sk#29] (48) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_sold_date_sk#32] -Right keys [1]: [d_date_sk#34] +Left keys [1]: [ss_sold_date_sk#27] +Right keys [1]: [d_date_sk#29] Join condition: None (49) Project [codegen id : 13] -Output [2]: [ss_customer_sk#30, ss_ext_sales_price#31] -Input [4]: [ss_customer_sk#30, ss_ext_sales_price#31, ss_sold_date_sk#32, d_date_sk#34] +Output [2]: [ss_customer_sk#25, ss_ext_sales_price#26] +Input [4]: [ss_customer_sk#25, ss_ext_sales_price#26, ss_sold_date_sk#27, d_date_sk#29] (50) Exchange -Input [2]: [ss_customer_sk#30, ss_ext_sales_price#31] -Arguments: hashpartitioning(ss_customer_sk#30, 5), ENSURE_REQUIREMENTS, [id=#35] +Input [2]: [ss_customer_sk#25, ss_ext_sales_price#26] +Arguments: hashpartitioning(ss_customer_sk#25, 5), ENSURE_REQUIREMENTS, [plan_id=6] (51) Sort [codegen id : 14] -Input [2]: [ss_customer_sk#30, ss_ext_sales_price#31] -Arguments: [ss_customer_sk#30 ASC NULLS FIRST], false, 0 +Input [2]: [ss_customer_sk#25, ss_ext_sales_price#26] +Arguments: [ss_customer_sk#25 ASC NULLS FIRST], false, 0 (52) SortMergeJoin [codegen id : 15] -Left keys [1]: [c_customer_sk#27] -Right keys [1]: [ss_customer_sk#30] +Left keys [1]: [c_customer_sk#23] +Right keys [1]: [ss_customer_sk#25] Join condition: None (53) Project [codegen id : 15] -Output [2]: [c_customer_sk#27, ss_ext_sales_price#31] -Input [3]: [c_customer_sk#27, ss_customer_sk#30, ss_ext_sales_price#31] +Output [2]: [c_customer_sk#23, ss_ext_sales_price#26] +Input [3]: [c_customer_sk#23, ss_customer_sk#25, ss_ext_sales_price#26] (54) HashAggregate [codegen id : 15] -Input [2]: [c_customer_sk#27, ss_ext_sales_price#31] -Keys [1]: [c_customer_sk#27] -Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#31))] -Aggregate Attributes [1]: [sum#36] -Results [2]: [c_customer_sk#27, sum#37] +Input [2]: [c_customer_sk#23, ss_ext_sales_price#26] +Keys [1]: [c_customer_sk#23] +Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#26))] +Aggregate Attributes [1]: [sum#30] +Results [2]: [c_customer_sk#23, sum#31] (55) HashAggregate [codegen id : 15] -Input [2]: [c_customer_sk#27, sum#37] -Keys [1]: [c_customer_sk#27] -Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#31))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#31))#38] -Results [1]: [cast(CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#31))#38,17,2)) / 50.00), DecimalType(21,6)) as int) AS segment#39] +Input [2]: [c_customer_sk#23, sum#31] +Keys [1]: [c_customer_sk#23] +Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#26))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#26))#32] +Results [1]: [cast(CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#26))#32,17,2)) / 50.00), DecimalType(21,6)) as int) AS segment#33] (56) HashAggregate [codegen id : 15] -Input [1]: [segment#39] -Keys [1]: [segment#39] +Input [1]: [segment#33] +Keys [1]: [segment#33] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#40] -Results [2]: [segment#39, count#41] +Aggregate Attributes [1]: [count#34] +Results [2]: [segment#33, count#35] (57) Exchange -Input [2]: [segment#39, count#41] -Arguments: hashpartitioning(segment#39, 5), ENSURE_REQUIREMENTS, [id=#42] +Input [2]: [segment#33, count#35] +Arguments: hashpartitioning(segment#33, 5), ENSURE_REQUIREMENTS, [plan_id=7] (58) HashAggregate [codegen id : 16] -Input [2]: [segment#39, count#41] -Keys [1]: [segment#39] +Input [2]: [segment#33, count#35] +Keys [1]: [segment#33] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#43] -Results [3]: [segment#39, count(1)#43 AS num_customers#44, (segment#39 * 50) AS segment_base#45] +Aggregate Attributes [1]: [count(1)#36] +Results [3]: [segment#33, count(1)#36 AS num_customers#37, (segment#33 * 50) AS segment_base#38] (59) TakeOrderedAndProject -Input [3]: [segment#39, num_customers#44, segment_base#45] -Arguments: 100, [segment#39 ASC NULLS FIRST, num_customers#44 ASC NULLS FIRST], [segment#39, num_customers#44, segment_base#45] +Input [3]: [segment#33, num_customers#37, segment_base#38] +Arguments: 100, [segment#33 ASC NULLS FIRST, num_customers#37 ASC NULLS FIRST], [segment#33, num_customers#37, segment_base#38] ===== Subqueries ===== -Subquery:1 Hosting operator id = 11 Hosting Expression = cs_sold_date_sk#10 IN dynamicpruning#11 +Subquery:1 Hosting operator id = 11 Hosting Expression = cs_sold_date_sk#8 IN dynamicpruning#9 BroadcastExchange (64) +- * Project (63) +- * Filter (62) @@ -345,30 +345,30 @@ BroadcastExchange (64) (60) Scan parquet default.date_dim -Output [3]: [d_date_sk#21, d_year#46, d_moy#47] +Output [3]: [d_date_sk#19, d_year#39, d_moy#40] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_moy,12), EqualTo(d_year,1998), IsNotNull(d_date_sk)] ReadSchema: struct (61) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#21, d_year#46, d_moy#47] +Input [3]: [d_date_sk#19, d_year#39, d_moy#40] (62) Filter [codegen id : 1] -Input [3]: [d_date_sk#21, d_year#46, d_moy#47] -Condition : ((((isnotnull(d_moy#47) AND isnotnull(d_year#46)) AND (d_moy#47 = 12)) AND (d_year#46 = 1998)) AND isnotnull(d_date_sk#21)) +Input [3]: [d_date_sk#19, d_year#39, d_moy#40] +Condition : ((((isnotnull(d_moy#40) AND isnotnull(d_year#39)) AND (d_moy#40 = 12)) AND (d_year#39 = 1998)) AND isnotnull(d_date_sk#19)) (63) Project [codegen id : 1] -Output [1]: [d_date_sk#21] -Input [3]: [d_date_sk#21, d_year#46, d_moy#47] +Output [1]: [d_date_sk#19] +Input [3]: [d_date_sk#19, d_year#39, d_moy#40] (64) BroadcastExchange -Input [1]: [d_date_sk#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#48] +Input [1]: [d_date_sk#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 15 Hosting Expression = ws_sold_date_sk#17 IN dynamicpruning#11 +Subquery:2 Hosting operator id = 15 Hosting Expression = ws_sold_date_sk#15 IN dynamicpruning#9 -Subquery:3 Hosting operator id = 44 Hosting Expression = ss_sold_date_sk#32 IN dynamicpruning#33 +Subquery:3 Hosting operator id = 44 Hosting Expression = ss_sold_date_sk#27 IN dynamicpruning#28 BroadcastExchange (69) +- * Project (68) +- * Filter (67) @@ -377,28 +377,28 @@ BroadcastExchange (69) (65) Scan parquet default.date_dim -Output [2]: [d_date_sk#34, d_month_seq#49] +Output [2]: [d_date_sk#29, d_month_seq#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), IsNotNull(d_date_sk)] ReadSchema: struct (66) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#34, d_month_seq#49] +Input [2]: [d_date_sk#29, d_month_seq#41] (67) Filter [codegen id : 1] -Input [2]: [d_date_sk#34, d_month_seq#49] -Condition : (((isnotnull(d_month_seq#49) AND (d_month_seq#49 >= Subquery scalar-subquery#50, [id=#51])) AND (d_month_seq#49 <= Subquery scalar-subquery#52, [id=#53])) AND isnotnull(d_date_sk#34)) +Input [2]: [d_date_sk#29, d_month_seq#41] +Condition : (((isnotnull(d_month_seq#41) AND (d_month_seq#41 >= Subquery scalar-subquery#42, [id=#43])) AND (d_month_seq#41 <= Subquery scalar-subquery#44, [id=#45])) AND isnotnull(d_date_sk#29)) (68) Project [codegen id : 1] -Output [1]: [d_date_sk#34] -Input [2]: [d_date_sk#34, d_month_seq#49] +Output [1]: [d_date_sk#29] +Input [2]: [d_date_sk#29, d_month_seq#41] (69) BroadcastExchange -Input [1]: [d_date_sk#34] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#54] +Input [1]: [d_date_sk#29] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:4 Hosting operator id = 67 Hosting Expression = Subquery scalar-subquery#50, [id=#51] +Subquery:4 Hosting operator id = 67 Hosting Expression = Subquery scalar-subquery#42, [id=#43] * HashAggregate (76) +- Exchange (75) +- * HashAggregate (74) @@ -409,42 +409,42 @@ Subquery:4 Hosting operator id = 67 Hosting Expression = Subquery scalar-subquer (70) Scan parquet default.date_dim -Output [3]: [d_month_seq#55, d_year#56, d_moy#57] +Output [3]: [d_month_seq#46, d_year#47, d_moy#48] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,12)] ReadSchema: struct (71) ColumnarToRow [codegen id : 1] -Input [3]: [d_month_seq#55, d_year#56, d_moy#57] +Input [3]: [d_month_seq#46, d_year#47, d_moy#48] (72) Filter [codegen id : 1] -Input [3]: [d_month_seq#55, d_year#56, d_moy#57] -Condition : (((isnotnull(d_year#56) AND isnotnull(d_moy#57)) AND (d_year#56 = 1998)) AND (d_moy#57 = 12)) +Input [3]: [d_month_seq#46, d_year#47, d_moy#48] +Condition : (((isnotnull(d_year#47) AND isnotnull(d_moy#48)) AND (d_year#47 = 1998)) AND (d_moy#48 = 12)) (73) Project [codegen id : 1] -Output [1]: [(d_month_seq#55 + 1) AS (d_month_seq + 1)#58] -Input [3]: [d_month_seq#55, d_year#56, d_moy#57] +Output [1]: [(d_month_seq#46 + 1) AS (d_month_seq + 1)#49] +Input [3]: [d_month_seq#46, d_year#47, d_moy#48] (74) HashAggregate [codegen id : 1] -Input [1]: [(d_month_seq + 1)#58] -Keys [1]: [(d_month_seq + 1)#58] +Input [1]: [(d_month_seq + 1)#49] +Keys [1]: [(d_month_seq + 1)#49] Functions: [] Aggregate Attributes: [] -Results [1]: [(d_month_seq + 1)#58] +Results [1]: [(d_month_seq + 1)#49] (75) Exchange -Input [1]: [(d_month_seq + 1)#58] -Arguments: hashpartitioning((d_month_seq + 1)#58, 5), ENSURE_REQUIREMENTS, [id=#59] +Input [1]: [(d_month_seq + 1)#49] +Arguments: hashpartitioning((d_month_seq + 1)#49, 5), ENSURE_REQUIREMENTS, [plan_id=10] (76) HashAggregate [codegen id : 2] -Input [1]: [(d_month_seq + 1)#58] -Keys [1]: [(d_month_seq + 1)#58] +Input [1]: [(d_month_seq + 1)#49] +Keys [1]: [(d_month_seq + 1)#49] Functions: [] Aggregate Attributes: [] -Results [1]: [(d_month_seq + 1)#58] +Results [1]: [(d_month_seq + 1)#49] -Subquery:5 Hosting operator id = 67 Hosting Expression = Subquery scalar-subquery#52, [id=#53] +Subquery:5 Hosting operator id = 67 Hosting Expression = Subquery scalar-subquery#44, [id=#45] * HashAggregate (83) +- Exchange (82) +- * HashAggregate (81) @@ -455,39 +455,39 @@ Subquery:5 Hosting operator id = 67 Hosting Expression = Subquery scalar-subquer (77) Scan parquet default.date_dim -Output [3]: [d_month_seq#60, d_year#61, d_moy#62] +Output [3]: [d_month_seq#50, d_year#51, d_moy#52] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,12)] ReadSchema: struct (78) ColumnarToRow [codegen id : 1] -Input [3]: [d_month_seq#60, d_year#61, d_moy#62] +Input [3]: [d_month_seq#50, d_year#51, d_moy#52] (79) Filter [codegen id : 1] -Input [3]: [d_month_seq#60, d_year#61, d_moy#62] -Condition : (((isnotnull(d_year#61) AND isnotnull(d_moy#62)) AND (d_year#61 = 1998)) AND (d_moy#62 = 12)) +Input [3]: [d_month_seq#50, d_year#51, d_moy#52] +Condition : (((isnotnull(d_year#51) AND isnotnull(d_moy#52)) AND (d_year#51 = 1998)) AND (d_moy#52 = 12)) (80) Project [codegen id : 1] -Output [1]: [(d_month_seq#60 + 3) AS (d_month_seq + 3)#63] -Input [3]: [d_month_seq#60, d_year#61, d_moy#62] +Output [1]: [(d_month_seq#50 + 3) AS (d_month_seq + 3)#53] +Input [3]: [d_month_seq#50, d_year#51, d_moy#52] (81) HashAggregate [codegen id : 1] -Input [1]: [(d_month_seq + 3)#63] -Keys [1]: [(d_month_seq + 3)#63] +Input [1]: [(d_month_seq + 3)#53] +Keys [1]: [(d_month_seq + 3)#53] Functions: [] Aggregate Attributes: [] -Results [1]: [(d_month_seq + 3)#63] +Results [1]: [(d_month_seq + 3)#53] (82) Exchange -Input [1]: [(d_month_seq + 3)#63] -Arguments: hashpartitioning((d_month_seq + 3)#63, 5), ENSURE_REQUIREMENTS, [id=#64] +Input [1]: [(d_month_seq + 3)#53] +Arguments: hashpartitioning((d_month_seq + 3)#53, 5), ENSURE_REQUIREMENTS, [plan_id=11] (83) HashAggregate [codegen id : 2] -Input [1]: [(d_month_seq + 3)#63] -Keys [1]: [(d_month_seq + 3)#63] +Input [1]: [(d_month_seq + 3)#53] +Keys [1]: [(d_month_seq + 3)#53] Functions: [] Aggregate Attributes: [] -Results [1]: [(d_month_seq + 3)#63] +Results [1]: [(d_month_seq + 3)#53] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q54/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q54/explain.txt index 4c65587bee530..3377b58db4712 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q54/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q54/explain.txt @@ -117,7 +117,7 @@ Input [3]: [i_item_sk#14, i_class#15, i_category#16] (14) BroadcastExchange Input [1]: [i_item_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (15) BroadcastHashJoin [codegen id : 6] Left keys [1]: [item_sk#7] @@ -129,195 +129,195 @@ Output [2]: [sold_date_sk#5, customer_sk#6] Input [4]: [sold_date_sk#5, customer_sk#6, item_sk#7, i_item_sk#14] (17) ReusedExchange [Reuses operator id: 61] -Output [1]: [d_date_sk#18] +Output [1]: [d_date_sk#17] (18) BroadcastHashJoin [codegen id : 6] Left keys [1]: [sold_date_sk#5] -Right keys [1]: [d_date_sk#18] +Right keys [1]: [d_date_sk#17] Join condition: None (19) Project [codegen id : 6] Output [1]: [customer_sk#6] -Input [3]: [sold_date_sk#5, customer_sk#6, d_date_sk#18] +Input [3]: [sold_date_sk#5, customer_sk#6, d_date_sk#17] (20) Scan parquet default.customer -Output [2]: [c_customer_sk#19, c_current_addr_sk#20] +Output [2]: [c_customer_sk#18, c_current_addr_sk#19] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 5] -Input [2]: [c_customer_sk#19, c_current_addr_sk#20] +Input [2]: [c_customer_sk#18, c_current_addr_sk#19] (22) Filter [codegen id : 5] -Input [2]: [c_customer_sk#19, c_current_addr_sk#20] -Condition : (isnotnull(c_customer_sk#19) AND isnotnull(c_current_addr_sk#20)) +Input [2]: [c_customer_sk#18, c_current_addr_sk#19] +Condition : (isnotnull(c_customer_sk#18) AND isnotnull(c_current_addr_sk#19)) (23) BroadcastExchange -Input [2]: [c_customer_sk#19, c_current_addr_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21] +Input [2]: [c_customer_sk#18, c_current_addr_sk#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (24) BroadcastHashJoin [codegen id : 6] Left keys [1]: [customer_sk#6] -Right keys [1]: [c_customer_sk#19] +Right keys [1]: [c_customer_sk#18] Join condition: None (25) Project [codegen id : 6] -Output [2]: [c_customer_sk#19, c_current_addr_sk#20] -Input [3]: [customer_sk#6, c_customer_sk#19, c_current_addr_sk#20] +Output [2]: [c_customer_sk#18, c_current_addr_sk#19] +Input [3]: [customer_sk#6, c_customer_sk#18, c_current_addr_sk#19] (26) HashAggregate [codegen id : 6] -Input [2]: [c_customer_sk#19, c_current_addr_sk#20] -Keys [2]: [c_customer_sk#19, c_current_addr_sk#20] +Input [2]: [c_customer_sk#18, c_current_addr_sk#19] +Keys [2]: [c_customer_sk#18, c_current_addr_sk#19] Functions: [] Aggregate Attributes: [] -Results [2]: [c_customer_sk#19, c_current_addr_sk#20] +Results [2]: [c_customer_sk#18, c_current_addr_sk#19] (27) Exchange -Input [2]: [c_customer_sk#19, c_current_addr_sk#20] -Arguments: hashpartitioning(c_customer_sk#19, c_current_addr_sk#20, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [2]: [c_customer_sk#18, c_current_addr_sk#19] +Arguments: hashpartitioning(c_customer_sk#18, c_current_addr_sk#19, 5), ENSURE_REQUIREMENTS, [plan_id=3] (28) HashAggregate [codegen id : 11] -Input [2]: [c_customer_sk#19, c_current_addr_sk#20] -Keys [2]: [c_customer_sk#19, c_current_addr_sk#20] +Input [2]: [c_customer_sk#18, c_current_addr_sk#19] +Keys [2]: [c_customer_sk#18, c_current_addr_sk#19] Functions: [] Aggregate Attributes: [] -Results [2]: [c_customer_sk#19, c_current_addr_sk#20] +Results [2]: [c_customer_sk#18, c_current_addr_sk#19] (29) Scan parquet default.store_sales -Output [3]: [ss_customer_sk#23, ss_ext_sales_price#24, ss_sold_date_sk#25] +Output [3]: [ss_customer_sk#20, ss_ext_sales_price#21, ss_sold_date_sk#22] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#25), dynamicpruningexpression(ss_sold_date_sk#25 IN dynamicpruning#26)] +PartitionFilters: [isnotnull(ss_sold_date_sk#22), dynamicpruningexpression(ss_sold_date_sk#22 IN dynamicpruning#23)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 7] -Input [3]: [ss_customer_sk#23, ss_ext_sales_price#24, ss_sold_date_sk#25] +Input [3]: [ss_customer_sk#20, ss_ext_sales_price#21, ss_sold_date_sk#22] (31) Filter [codegen id : 7] -Input [3]: [ss_customer_sk#23, ss_ext_sales_price#24, ss_sold_date_sk#25] -Condition : isnotnull(ss_customer_sk#23) +Input [3]: [ss_customer_sk#20, ss_ext_sales_price#21, ss_sold_date_sk#22] +Condition : isnotnull(ss_customer_sk#20) (32) BroadcastExchange -Input [3]: [ss_customer_sk#23, ss_ext_sales_price#24, ss_sold_date_sk#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#27] +Input [3]: [ss_customer_sk#20, ss_ext_sales_price#21, ss_sold_date_sk#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (33) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [c_customer_sk#19] -Right keys [1]: [ss_customer_sk#23] +Left keys [1]: [c_customer_sk#18] +Right keys [1]: [ss_customer_sk#20] Join condition: None (34) Project [codegen id : 11] -Output [4]: [c_customer_sk#19, c_current_addr_sk#20, ss_ext_sales_price#24, ss_sold_date_sk#25] -Input [5]: [c_customer_sk#19, c_current_addr_sk#20, ss_customer_sk#23, ss_ext_sales_price#24, ss_sold_date_sk#25] +Output [4]: [c_customer_sk#18, c_current_addr_sk#19, ss_ext_sales_price#21, ss_sold_date_sk#22] +Input [5]: [c_customer_sk#18, c_current_addr_sk#19, ss_customer_sk#20, ss_ext_sales_price#21, ss_sold_date_sk#22] (35) Scan parquet default.customer_address -Output [3]: [ca_address_sk#28, ca_county#29, ca_state#30] +Output [3]: [ca_address_sk#24, ca_county#25, ca_state#26] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_county), IsNotNull(ca_state)] ReadSchema: struct (36) ColumnarToRow [codegen id : 8] -Input [3]: [ca_address_sk#28, ca_county#29, ca_state#30] +Input [3]: [ca_address_sk#24, ca_county#25, ca_state#26] (37) Filter [codegen id : 8] -Input [3]: [ca_address_sk#28, ca_county#29, ca_state#30] -Condition : ((isnotnull(ca_address_sk#28) AND isnotnull(ca_county#29)) AND isnotnull(ca_state#30)) +Input [3]: [ca_address_sk#24, ca_county#25, ca_state#26] +Condition : ((isnotnull(ca_address_sk#24) AND isnotnull(ca_county#25)) AND isnotnull(ca_state#26)) (38) BroadcastExchange -Input [3]: [ca_address_sk#28, ca_county#29, ca_state#30] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#31] +Input [3]: [ca_address_sk#24, ca_county#25, ca_state#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (39) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [c_current_addr_sk#20] -Right keys [1]: [ca_address_sk#28] +Left keys [1]: [c_current_addr_sk#19] +Right keys [1]: [ca_address_sk#24] Join condition: None (40) Project [codegen id : 11] -Output [5]: [c_customer_sk#19, ss_ext_sales_price#24, ss_sold_date_sk#25, ca_county#29, ca_state#30] -Input [7]: [c_customer_sk#19, c_current_addr_sk#20, ss_ext_sales_price#24, ss_sold_date_sk#25, ca_address_sk#28, ca_county#29, ca_state#30] +Output [5]: [c_customer_sk#18, ss_ext_sales_price#21, ss_sold_date_sk#22, ca_county#25, ca_state#26] +Input [7]: [c_customer_sk#18, c_current_addr_sk#19, ss_ext_sales_price#21, ss_sold_date_sk#22, ca_address_sk#24, ca_county#25, ca_state#26] (41) Scan parquet default.store -Output [2]: [s_county#32, s_state#33] +Output [2]: [s_county#27, s_state#28] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_county), IsNotNull(s_state)] ReadSchema: struct (42) ColumnarToRow [codegen id : 9] -Input [2]: [s_county#32, s_state#33] +Input [2]: [s_county#27, s_state#28] (43) Filter [codegen id : 9] -Input [2]: [s_county#32, s_state#33] -Condition : (isnotnull(s_county#32) AND isnotnull(s_state#33)) +Input [2]: [s_county#27, s_state#28] +Condition : (isnotnull(s_county#27) AND isnotnull(s_state#28)) (44) BroadcastExchange -Input [2]: [s_county#32, s_state#33] -Arguments: HashedRelationBroadcastMode(List(input[0, string, false], input[1, string, false]),false), [id=#34] +Input [2]: [s_county#27, s_state#28] +Arguments: HashedRelationBroadcastMode(List(input[0, string, false], input[1, string, false]),false), [plan_id=6] (45) BroadcastHashJoin [codegen id : 11] -Left keys [2]: [ca_county#29, ca_state#30] -Right keys [2]: [s_county#32, s_state#33] +Left keys [2]: [ca_county#25, ca_state#26] +Right keys [2]: [s_county#27, s_state#28] Join condition: None (46) Project [codegen id : 11] -Output [3]: [c_customer_sk#19, ss_ext_sales_price#24, ss_sold_date_sk#25] -Input [7]: [c_customer_sk#19, ss_ext_sales_price#24, ss_sold_date_sk#25, ca_county#29, ca_state#30, s_county#32, s_state#33] +Output [3]: [c_customer_sk#18, ss_ext_sales_price#21, ss_sold_date_sk#22] +Input [7]: [c_customer_sk#18, ss_ext_sales_price#21, ss_sold_date_sk#22, ca_county#25, ca_state#26, s_county#27, s_state#28] (47) ReusedExchange [Reuses operator id: 66] -Output [1]: [d_date_sk#35] +Output [1]: [d_date_sk#29] (48) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [ss_sold_date_sk#25] -Right keys [1]: [d_date_sk#35] +Left keys [1]: [ss_sold_date_sk#22] +Right keys [1]: [d_date_sk#29] Join condition: None (49) Project [codegen id : 11] -Output [2]: [c_customer_sk#19, ss_ext_sales_price#24] -Input [4]: [c_customer_sk#19, ss_ext_sales_price#24, ss_sold_date_sk#25, d_date_sk#35] +Output [2]: [c_customer_sk#18, ss_ext_sales_price#21] +Input [4]: [c_customer_sk#18, ss_ext_sales_price#21, ss_sold_date_sk#22, d_date_sk#29] (50) HashAggregate [codegen id : 11] -Input [2]: [c_customer_sk#19, ss_ext_sales_price#24] -Keys [1]: [c_customer_sk#19] -Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#24))] -Aggregate Attributes [1]: [sum#36] -Results [2]: [c_customer_sk#19, sum#37] +Input [2]: [c_customer_sk#18, ss_ext_sales_price#21] +Keys [1]: [c_customer_sk#18] +Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#21))] +Aggregate Attributes [1]: [sum#30] +Results [2]: [c_customer_sk#18, sum#31] (51) Exchange -Input [2]: [c_customer_sk#19, sum#37] -Arguments: hashpartitioning(c_customer_sk#19, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [2]: [c_customer_sk#18, sum#31] +Arguments: hashpartitioning(c_customer_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=7] (52) HashAggregate [codegen id : 12] -Input [2]: [c_customer_sk#19, sum#37] -Keys [1]: [c_customer_sk#19] -Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#24))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#24))#39] -Results [1]: [cast(CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#24))#39,17,2)) / 50.00), DecimalType(21,6)) as int) AS segment#40] +Input [2]: [c_customer_sk#18, sum#31] +Keys [1]: [c_customer_sk#18] +Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#21))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#21))#32] +Results [1]: [cast(CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#21))#32,17,2)) / 50.00), DecimalType(21,6)) as int) AS segment#33] (53) HashAggregate [codegen id : 12] -Input [1]: [segment#40] -Keys [1]: [segment#40] +Input [1]: [segment#33] +Keys [1]: [segment#33] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#41] -Results [2]: [segment#40, count#42] +Aggregate Attributes [1]: [count#34] +Results [2]: [segment#33, count#35] (54) Exchange -Input [2]: [segment#40, count#42] -Arguments: hashpartitioning(segment#40, 5), ENSURE_REQUIREMENTS, [id=#43] +Input [2]: [segment#33, count#35] +Arguments: hashpartitioning(segment#33, 5), ENSURE_REQUIREMENTS, [plan_id=8] (55) HashAggregate [codegen id : 13] -Input [2]: [segment#40, count#42] -Keys [1]: [segment#40] +Input [2]: [segment#33, count#35] +Keys [1]: [segment#33] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#44] -Results [3]: [segment#40, count(1)#44 AS num_customers#45, (segment#40 * 50) AS segment_base#46] +Aggregate Attributes [1]: [count(1)#36] +Results [3]: [segment#33, count(1)#36 AS num_customers#37, (segment#33 * 50) AS segment_base#38] (56) TakeOrderedAndProject -Input [3]: [segment#40, num_customers#45, segment_base#46] -Arguments: 100, [segment#40 ASC NULLS FIRST, num_customers#45 ASC NULLS FIRST], [segment#40, num_customers#45, segment_base#46] +Input [3]: [segment#33, num_customers#37, segment_base#38] +Arguments: 100, [segment#33 ASC NULLS FIRST, num_customers#37 ASC NULLS FIRST], [segment#33, num_customers#37, segment_base#38] ===== Subqueries ===== @@ -330,30 +330,30 @@ BroadcastExchange (61) (57) Scan parquet default.date_dim -Output [3]: [d_date_sk#18, d_year#47, d_moy#48] +Output [3]: [d_date_sk#17, d_year#39, d_moy#40] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_moy,12), EqualTo(d_year,1998), IsNotNull(d_date_sk)] ReadSchema: struct (58) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#18, d_year#47, d_moy#48] +Input [3]: [d_date_sk#17, d_year#39, d_moy#40] (59) Filter [codegen id : 1] -Input [3]: [d_date_sk#18, d_year#47, d_moy#48] -Condition : ((((isnotnull(d_moy#48) AND isnotnull(d_year#47)) AND (d_moy#48 = 12)) AND (d_year#47 = 1998)) AND isnotnull(d_date_sk#18)) +Input [3]: [d_date_sk#17, d_year#39, d_moy#40] +Condition : ((((isnotnull(d_moy#40) AND isnotnull(d_year#39)) AND (d_moy#40 = 12)) AND (d_year#39 = 1998)) AND isnotnull(d_date_sk#17)) (60) Project [codegen id : 1] -Output [1]: [d_date_sk#18] -Input [3]: [d_date_sk#18, d_year#47, d_moy#48] +Output [1]: [d_date_sk#17] +Input [3]: [d_date_sk#17, d_year#39, d_moy#40] (61) BroadcastExchange -Input [1]: [d_date_sk#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#49] +Input [1]: [d_date_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] Subquery:2 Hosting operator id = 5 Hosting Expression = ws_sold_date_sk#10 IN dynamicpruning#4 -Subquery:3 Hosting operator id = 29 Hosting Expression = ss_sold_date_sk#25 IN dynamicpruning#26 +Subquery:3 Hosting operator id = 29 Hosting Expression = ss_sold_date_sk#22 IN dynamicpruning#23 BroadcastExchange (66) +- * Project (65) +- * Filter (64) @@ -362,28 +362,28 @@ BroadcastExchange (66) (62) Scan parquet default.date_dim -Output [2]: [d_date_sk#35, d_month_seq#50] +Output [2]: [d_date_sk#29, d_month_seq#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), IsNotNull(d_date_sk)] ReadSchema: struct (63) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#35, d_month_seq#50] +Input [2]: [d_date_sk#29, d_month_seq#41] (64) Filter [codegen id : 1] -Input [2]: [d_date_sk#35, d_month_seq#50] -Condition : (((isnotnull(d_month_seq#50) AND (d_month_seq#50 >= Subquery scalar-subquery#51, [id=#52])) AND (d_month_seq#50 <= Subquery scalar-subquery#53, [id=#54])) AND isnotnull(d_date_sk#35)) +Input [2]: [d_date_sk#29, d_month_seq#41] +Condition : (((isnotnull(d_month_seq#41) AND (d_month_seq#41 >= Subquery scalar-subquery#42, [id=#43])) AND (d_month_seq#41 <= Subquery scalar-subquery#44, [id=#45])) AND isnotnull(d_date_sk#29)) (65) Project [codegen id : 1] -Output [1]: [d_date_sk#35] -Input [2]: [d_date_sk#35, d_month_seq#50] +Output [1]: [d_date_sk#29] +Input [2]: [d_date_sk#29, d_month_seq#41] (66) BroadcastExchange -Input [1]: [d_date_sk#35] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#55] +Input [1]: [d_date_sk#29] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -Subquery:4 Hosting operator id = 64 Hosting Expression = Subquery scalar-subquery#51, [id=#52] +Subquery:4 Hosting operator id = 64 Hosting Expression = Subquery scalar-subquery#42, [id=#43] * HashAggregate (73) +- Exchange (72) +- * HashAggregate (71) @@ -394,42 +394,42 @@ Subquery:4 Hosting operator id = 64 Hosting Expression = Subquery scalar-subquer (67) Scan parquet default.date_dim -Output [3]: [d_month_seq#56, d_year#57, d_moy#58] +Output [3]: [d_month_seq#46, d_year#47, d_moy#48] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,12)] ReadSchema: struct (68) ColumnarToRow [codegen id : 1] -Input [3]: [d_month_seq#56, d_year#57, d_moy#58] +Input [3]: [d_month_seq#46, d_year#47, d_moy#48] (69) Filter [codegen id : 1] -Input [3]: [d_month_seq#56, d_year#57, d_moy#58] -Condition : (((isnotnull(d_year#57) AND isnotnull(d_moy#58)) AND (d_year#57 = 1998)) AND (d_moy#58 = 12)) +Input [3]: [d_month_seq#46, d_year#47, d_moy#48] +Condition : (((isnotnull(d_year#47) AND isnotnull(d_moy#48)) AND (d_year#47 = 1998)) AND (d_moy#48 = 12)) (70) Project [codegen id : 1] -Output [1]: [(d_month_seq#56 + 1) AS (d_month_seq + 1)#59] -Input [3]: [d_month_seq#56, d_year#57, d_moy#58] +Output [1]: [(d_month_seq#46 + 1) AS (d_month_seq + 1)#49] +Input [3]: [d_month_seq#46, d_year#47, d_moy#48] (71) HashAggregate [codegen id : 1] -Input [1]: [(d_month_seq + 1)#59] -Keys [1]: [(d_month_seq + 1)#59] +Input [1]: [(d_month_seq + 1)#49] +Keys [1]: [(d_month_seq + 1)#49] Functions: [] Aggregate Attributes: [] -Results [1]: [(d_month_seq + 1)#59] +Results [1]: [(d_month_seq + 1)#49] (72) Exchange -Input [1]: [(d_month_seq + 1)#59] -Arguments: hashpartitioning((d_month_seq + 1)#59, 5), ENSURE_REQUIREMENTS, [id=#60] +Input [1]: [(d_month_seq + 1)#49] +Arguments: hashpartitioning((d_month_seq + 1)#49, 5), ENSURE_REQUIREMENTS, [plan_id=11] (73) HashAggregate [codegen id : 2] -Input [1]: [(d_month_seq + 1)#59] -Keys [1]: [(d_month_seq + 1)#59] +Input [1]: [(d_month_seq + 1)#49] +Keys [1]: [(d_month_seq + 1)#49] Functions: [] Aggregate Attributes: [] -Results [1]: [(d_month_seq + 1)#59] +Results [1]: [(d_month_seq + 1)#49] -Subquery:5 Hosting operator id = 64 Hosting Expression = Subquery scalar-subquery#53, [id=#54] +Subquery:5 Hosting operator id = 64 Hosting Expression = Subquery scalar-subquery#44, [id=#45] * HashAggregate (80) +- Exchange (79) +- * HashAggregate (78) @@ -440,39 +440,39 @@ Subquery:5 Hosting operator id = 64 Hosting Expression = Subquery scalar-subquer (74) Scan parquet default.date_dim -Output [3]: [d_month_seq#61, d_year#62, d_moy#63] +Output [3]: [d_month_seq#50, d_year#51, d_moy#52] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,12)] ReadSchema: struct (75) ColumnarToRow [codegen id : 1] -Input [3]: [d_month_seq#61, d_year#62, d_moy#63] +Input [3]: [d_month_seq#50, d_year#51, d_moy#52] (76) Filter [codegen id : 1] -Input [3]: [d_month_seq#61, d_year#62, d_moy#63] -Condition : (((isnotnull(d_year#62) AND isnotnull(d_moy#63)) AND (d_year#62 = 1998)) AND (d_moy#63 = 12)) +Input [3]: [d_month_seq#50, d_year#51, d_moy#52] +Condition : (((isnotnull(d_year#51) AND isnotnull(d_moy#52)) AND (d_year#51 = 1998)) AND (d_moy#52 = 12)) (77) Project [codegen id : 1] -Output [1]: [(d_month_seq#61 + 3) AS (d_month_seq + 3)#64] -Input [3]: [d_month_seq#61, d_year#62, d_moy#63] +Output [1]: [(d_month_seq#50 + 3) AS (d_month_seq + 3)#53] +Input [3]: [d_month_seq#50, d_year#51, d_moy#52] (78) HashAggregate [codegen id : 1] -Input [1]: [(d_month_seq + 3)#64] -Keys [1]: [(d_month_seq + 3)#64] +Input [1]: [(d_month_seq + 3)#53] +Keys [1]: [(d_month_seq + 3)#53] Functions: [] Aggregate Attributes: [] -Results [1]: [(d_month_seq + 3)#64] +Results [1]: [(d_month_seq + 3)#53] (79) Exchange -Input [1]: [(d_month_seq + 3)#64] -Arguments: hashpartitioning((d_month_seq + 3)#64, 5), ENSURE_REQUIREMENTS, [id=#65] +Input [1]: [(d_month_seq + 3)#53] +Arguments: hashpartitioning((d_month_seq + 3)#53, 5), ENSURE_REQUIREMENTS, [plan_id=12] (80) HashAggregate [codegen id : 2] -Input [1]: [(d_month_seq + 3)#64] -Keys [1]: [(d_month_seq + 3)#64] +Input [1]: [(d_month_seq + 3)#53] +Keys [1]: [(d_month_seq + 3)#53] Functions: [] Aggregate Attributes: [] -Results [1]: [(d_month_seq + 3)#64] +Results [1]: [(d_month_seq + 3)#53] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q55.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q55.sf100/explain.txt index c6870bd3ac6a3..2d13f622c6ce1 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q55.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q55.sf100/explain.txt @@ -53,7 +53,7 @@ Input [4]: [i_item_sk#5, i_brand_id#6, i_brand#7, i_manager_id#8] (8) BroadcastExchange Input [3]: [i_item_sk#5, i_brand_id#6, i_brand#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#1] @@ -65,38 +65,38 @@ Output [4]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_brand_id#6, i_brand#7] Input [6]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_sk#5, i_brand_id#6, i_brand#7] (11) ReusedExchange [Reuses operator id: 22] -Output [1]: [d_date_sk#10] +Output [1]: [d_date_sk#9] (12) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_sold_date_sk#3] -Right keys [1]: [d_date_sk#10] +Right keys [1]: [d_date_sk#9] Join condition: None (13) Project [codegen id : 3] Output [3]: [ss_ext_sales_price#2, i_brand_id#6, i_brand#7] -Input [5]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_brand_id#6, i_brand#7, d_date_sk#10] +Input [5]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_brand_id#6, i_brand#7, d_date_sk#9] (14) HashAggregate [codegen id : 3] Input [3]: [ss_ext_sales_price#2, i_brand_id#6, i_brand#7] Keys [2]: [i_brand#7, i_brand_id#6] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#11] -Results [3]: [i_brand#7, i_brand_id#6, sum#12] +Aggregate Attributes [1]: [sum#10] +Results [3]: [i_brand#7, i_brand_id#6, sum#11] (15) Exchange -Input [3]: [i_brand#7, i_brand_id#6, sum#12] -Arguments: hashpartitioning(i_brand#7, i_brand_id#6, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [3]: [i_brand#7, i_brand_id#6, sum#11] +Arguments: hashpartitioning(i_brand#7, i_brand_id#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (16) HashAggregate [codegen id : 4] -Input [3]: [i_brand#7, i_brand_id#6, sum#12] +Input [3]: [i_brand#7, i_brand_id#6, sum#11] Keys [2]: [i_brand#7, i_brand_id#6] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#14] -Results [3]: [i_brand_id#6 AS brand_id#15, i_brand#7 AS brand#16, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS ext_price#17] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#12] +Results [3]: [i_brand_id#6 AS brand_id#13, i_brand#7 AS brand#14, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#12,17,2) AS ext_price#15] (17) TakeOrderedAndProject -Input [3]: [brand_id#15, brand#16, ext_price#17] -Arguments: 100, [ext_price#17 DESC NULLS LAST, brand_id#15 ASC NULLS FIRST], [brand_id#15, brand#16, ext_price#17] +Input [3]: [brand_id#13, brand#14, ext_price#15] +Arguments: 100, [ext_price#15 DESC NULLS LAST, brand_id#13 ASC NULLS FIRST], [brand_id#13, brand#14, ext_price#15] ===== Subqueries ===== @@ -109,25 +109,25 @@ BroadcastExchange (22) (18) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#18, d_moy#19] +Output [3]: [d_date_sk#9, d_year#16, d_moy#17] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_moy,11), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct (19) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#18, d_moy#19] +Input [3]: [d_date_sk#9, d_year#16, d_moy#17] (20) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#18, d_moy#19] -Condition : ((((isnotnull(d_moy#19) AND isnotnull(d_year#18)) AND (d_moy#19 = 11)) AND (d_year#18 = 1999)) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#9, d_year#16, d_moy#17] +Condition : ((((isnotnull(d_moy#17) AND isnotnull(d_year#16)) AND (d_moy#17 = 11)) AND (d_year#16 = 1999)) AND isnotnull(d_date_sk#9)) (21) Project [codegen id : 1] -Output [1]: [d_date_sk#10] -Input [3]: [d_date_sk#10, d_year#18, d_moy#19] +Output [1]: [d_date_sk#9] +Input [3]: [d_date_sk#9, d_year#16, d_moy#17] (22) BroadcastExchange -Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20] +Input [1]: [d_date_sk#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q55/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q55/explain.txt index 25b423382e332..782b7ffb509b7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q55/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q55/explain.txt @@ -57,7 +57,7 @@ Condition : isnotnull(ss_item_sk#4) (8) BroadcastExchange Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [d_date_sk#1] @@ -69,55 +69,55 @@ Output [2]: [ss_item_sk#4, ss_ext_sales_price#5] Input [4]: [d_date_sk#1, ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6] (11) Scan parquet default.item -Output [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] +Output [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,28), IsNotNull(i_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] (13) Filter [codegen id : 2] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] -Condition : ((isnotnull(i_manager_id#11) AND (i_manager_id#11 = 28)) AND isnotnull(i_item_sk#8)) +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] +Condition : ((isnotnull(i_manager_id#10) AND (i_manager_id#10 = 28)) AND isnotnull(i_item_sk#7)) (14) Project [codegen id : 2] -Output [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] -Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11] +Output [3]: [i_item_sk#7, i_brand_id#8, i_brand#9] +Input [4]: [i_item_sk#7, i_brand_id#8, i_brand#9, i_manager_id#10] (15) BroadcastExchange -Input [3]: [i_item_sk#8, i_brand_id#9, i_brand#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Input [3]: [i_item_sk#7, i_brand_id#8, i_brand#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#4] -Right keys [1]: [i_item_sk#8] +Right keys [1]: [i_item_sk#7] Join condition: None (17) Project [codegen id : 3] -Output [3]: [ss_ext_sales_price#5, i_brand_id#9, i_brand#10] -Input [5]: [ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#8, i_brand_id#9, i_brand#10] +Output [3]: [ss_ext_sales_price#5, i_brand_id#8, i_brand#9] +Input [5]: [ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#7, i_brand_id#8, i_brand#9] (18) HashAggregate [codegen id : 3] -Input [3]: [ss_ext_sales_price#5, i_brand_id#9, i_brand#10] -Keys [2]: [i_brand#10, i_brand_id#9] +Input [3]: [ss_ext_sales_price#5, i_brand_id#8, i_brand#9] +Keys [2]: [i_brand#9, i_brand_id#8] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum#13] -Results [3]: [i_brand#10, i_brand_id#9, sum#14] +Aggregate Attributes [1]: [sum#11] +Results [3]: [i_brand#9, i_brand_id#8, sum#12] (19) Exchange -Input [3]: [i_brand#10, i_brand_id#9, sum#14] -Arguments: hashpartitioning(i_brand#10, i_brand_id#9, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [3]: [i_brand#9, i_brand_id#8, sum#12] +Arguments: hashpartitioning(i_brand#9, i_brand_id#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [3]: [i_brand#10, i_brand_id#9, sum#14] -Keys [2]: [i_brand#10, i_brand_id#9] +Input [3]: [i_brand#9, i_brand_id#8, sum#12] +Keys [2]: [i_brand#9, i_brand_id#8] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#16] -Results [3]: [i_brand_id#9 AS brand_id#17, i_brand#10 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#16,17,2) AS ext_price#19] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#13] +Results [3]: [i_brand_id#8 AS brand_id#14, i_brand#9 AS brand#15, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#13,17,2) AS ext_price#16] (21) TakeOrderedAndProject -Input [3]: [brand_id#17, brand#18, ext_price#19] -Arguments: 100, [ext_price#19 DESC NULLS LAST, brand_id#17 ASC NULLS FIRST], [brand_id#17, brand#18, ext_price#19] +Input [3]: [brand_id#14, brand#15, ext_price#16] +Arguments: 100, [ext_price#16 DESC NULLS LAST, brand_id#14 ASC NULLS FIRST], [brand_id#14, brand#15, ext_price#16] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56.sf100/explain.txt index a7b59fe5d5ea7..7f10a26fd226f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56.sf100/explain.txt @@ -111,7 +111,7 @@ Input [2]: [ca_address_sk#7, ca_gmt_offset#8] (11) BroadcastExchange Input [1]: [ca_address_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_addr_sk#2] @@ -123,238 +123,238 @@ Output [2]: [ss_item_sk#1, ss_ext_sales_price#3] Input [4]: [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3, ca_address_sk#7] (14) Scan parquet default.item -Output [2]: [i_item_sk#10, i_item_id#11] +Output [2]: [i_item_sk#9, i_item_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#10, i_item_id#11] +Input [2]: [i_item_sk#9, i_item_id#10] (16) Filter [codegen id : 4] -Input [2]: [i_item_sk#10, i_item_id#11] -Condition : isnotnull(i_item_sk#10) +Input [2]: [i_item_sk#9, i_item_id#10] +Condition : isnotnull(i_item_sk#9) (17) Scan parquet default.item -Output [2]: [i_item_id#12, i_color#13] +Output [2]: [i_item_id#11, i_color#12] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [In(i_color, [blanched ,burnished ,slate ])] ReadSchema: struct (18) ColumnarToRow [codegen id : 3] -Input [2]: [i_item_id#12, i_color#13] +Input [2]: [i_item_id#11, i_color#12] (19) Filter [codegen id : 3] -Input [2]: [i_item_id#12, i_color#13] -Condition : i_color#13 IN (slate ,blanched ,burnished ) +Input [2]: [i_item_id#11, i_color#12] +Condition : i_color#12 IN (slate ,blanched ,burnished ) (20) Project [codegen id : 3] -Output [1]: [i_item_id#12] -Input [2]: [i_item_id#12, i_color#13] +Output [1]: [i_item_id#11] +Input [2]: [i_item_id#11, i_color#12] (21) BroadcastExchange -Input [1]: [i_item_id#12] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#14] +Input [1]: [i_item_id#11] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=2] (22) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [i_item_id#11] -Right keys [1]: [i_item_id#12] +Left keys [1]: [i_item_id#10] +Right keys [1]: [i_item_id#11] Join condition: None (23) BroadcastExchange -Input [2]: [i_item_sk#10, i_item_id#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Input [2]: [i_item_sk#9, i_item_id#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#10] +Right keys [1]: [i_item_sk#9] Join condition: None (25) Project [codegen id : 5] -Output [2]: [ss_ext_sales_price#3, i_item_id#11] -Input [4]: [ss_item_sk#1, ss_ext_sales_price#3, i_item_sk#10, i_item_id#11] +Output [2]: [ss_ext_sales_price#3, i_item_id#10] +Input [4]: [ss_item_sk#1, ss_ext_sales_price#3, i_item_sk#9, i_item_id#10] (26) HashAggregate [codegen id : 5] -Input [2]: [ss_ext_sales_price#3, i_item_id#11] -Keys [1]: [i_item_id#11] +Input [2]: [ss_ext_sales_price#3, i_item_id#10] +Keys [1]: [i_item_id#10] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [1]: [sum#16] -Results [2]: [i_item_id#11, sum#17] +Aggregate Attributes [1]: [sum#13] +Results [2]: [i_item_id#10, sum#14] (27) Exchange -Input [2]: [i_item_id#11, sum#17] -Arguments: hashpartitioning(i_item_id#11, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [2]: [i_item_id#10, sum#14] +Arguments: hashpartitioning(i_item_id#10, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 6] -Input [2]: [i_item_id#11, sum#17] -Keys [1]: [i_item_id#11] +Input [2]: [i_item_id#10, sum#14] +Keys [1]: [i_item_id#10] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#3))#19] -Results [2]: [i_item_id#11, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#19,17,2) AS total_sales#20] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#3))#15] +Results [2]: [i_item_id#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#15,17,2) AS total_sales#16] (29) Scan parquet default.catalog_sales -Output [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] +Output [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#24), dynamicpruningexpression(cs_sold_date_sk#24 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#20), dynamicpruningexpression(cs_sold_date_sk#20 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cs_bill_addr_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 11] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] (31) Filter [codegen id : 11] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] -Condition : (isnotnull(cs_bill_addr_sk#21) AND isnotnull(cs_item_sk#22)) +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] +Condition : (isnotnull(cs_bill_addr_sk#17) AND isnotnull(cs_item_sk#18)) (32) ReusedExchange [Reuses operator id: 68] -Output [1]: [d_date_sk#25] +Output [1]: [d_date_sk#21] (33) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_sold_date_sk#24] -Right keys [1]: [d_date_sk#25] +Left keys [1]: [cs_sold_date_sk#20] +Right keys [1]: [d_date_sk#21] Join condition: None (34) Project [codegen id : 11] -Output [3]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23] -Input [5]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24, d_date_sk#25] +Output [3]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19] +Input [5]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20, d_date_sk#21] (35) ReusedExchange [Reuses operator id: 11] -Output [1]: [ca_address_sk#26] +Output [1]: [ca_address_sk#22] (36) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_bill_addr_sk#21] -Right keys [1]: [ca_address_sk#26] +Left keys [1]: [cs_bill_addr_sk#17] +Right keys [1]: [ca_address_sk#22] Join condition: None (37) Project [codegen id : 11] -Output [2]: [cs_item_sk#22, cs_ext_sales_price#23] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, ca_address_sk#26] +Output [2]: [cs_item_sk#18, cs_ext_sales_price#19] +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, ca_address_sk#22] (38) ReusedExchange [Reuses operator id: 23] -Output [2]: [i_item_sk#27, i_item_id#28] +Output [2]: [i_item_sk#23, i_item_id#24] (39) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_item_sk#22] -Right keys [1]: [i_item_sk#27] +Left keys [1]: [cs_item_sk#18] +Right keys [1]: [i_item_sk#23] Join condition: None (40) Project [codegen id : 11] -Output [2]: [cs_ext_sales_price#23, i_item_id#28] -Input [4]: [cs_item_sk#22, cs_ext_sales_price#23, i_item_sk#27, i_item_id#28] +Output [2]: [cs_ext_sales_price#19, i_item_id#24] +Input [4]: [cs_item_sk#18, cs_ext_sales_price#19, i_item_sk#23, i_item_id#24] (41) HashAggregate [codegen id : 11] -Input [2]: [cs_ext_sales_price#23, i_item_id#28] -Keys [1]: [i_item_id#28] -Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#23))] -Aggregate Attributes [1]: [sum#29] -Results [2]: [i_item_id#28, sum#30] +Input [2]: [cs_ext_sales_price#19, i_item_id#24] +Keys [1]: [i_item_id#24] +Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#19))] +Aggregate Attributes [1]: [sum#25] +Results [2]: [i_item_id#24, sum#26] (42) Exchange -Input [2]: [i_item_id#28, sum#30] -Arguments: hashpartitioning(i_item_id#28, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [2]: [i_item_id#24, sum#26] +Arguments: hashpartitioning(i_item_id#24, 5), ENSURE_REQUIREMENTS, [plan_id=5] (43) HashAggregate [codegen id : 12] -Input [2]: [i_item_id#28, sum#30] -Keys [1]: [i_item_id#28] -Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#23))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#23))#32] -Results [2]: [i_item_id#28, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#23))#32,17,2) AS total_sales#33] +Input [2]: [i_item_id#24, sum#26] +Keys [1]: [i_item_id#24] +Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#19))] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#19))#27] +Results [2]: [i_item_id#24, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#19))#27,17,2) AS total_sales#28] (44) Scan parquet default.web_sales -Output [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] +Output [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#37), dynamicpruningexpression(ws_sold_date_sk#37 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#32), dynamicpruningexpression(ws_sold_date_sk#32 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_bill_addr_sk), IsNotNull(ws_item_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 17] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] (46) Filter [codegen id : 17] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] -Condition : (isnotnull(ws_bill_addr_sk#35) AND isnotnull(ws_item_sk#34)) +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] +Condition : (isnotnull(ws_bill_addr_sk#30) AND isnotnull(ws_item_sk#29)) (47) ReusedExchange [Reuses operator id: 68] -Output [1]: [d_date_sk#38] +Output [1]: [d_date_sk#33] (48) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_sold_date_sk#37] -Right keys [1]: [d_date_sk#38] +Left keys [1]: [ws_sold_date_sk#32] +Right keys [1]: [d_date_sk#33] Join condition: None (49) Project [codegen id : 17] -Output [3]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36] -Input [5]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37, d_date_sk#38] +Output [3]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31] +Input [5]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32, d_date_sk#33] (50) ReusedExchange [Reuses operator id: 11] -Output [1]: [ca_address_sk#39] +Output [1]: [ca_address_sk#34] (51) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_bill_addr_sk#35] -Right keys [1]: [ca_address_sk#39] +Left keys [1]: [ws_bill_addr_sk#30] +Right keys [1]: [ca_address_sk#34] Join condition: None (52) Project [codegen id : 17] -Output [2]: [ws_item_sk#34, ws_ext_sales_price#36] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ca_address_sk#39] +Output [2]: [ws_item_sk#29, ws_ext_sales_price#31] +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ca_address_sk#34] (53) ReusedExchange [Reuses operator id: 23] -Output [2]: [i_item_sk#40, i_item_id#41] +Output [2]: [i_item_sk#35, i_item_id#36] (54) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_item_sk#34] -Right keys [1]: [i_item_sk#40] +Left keys [1]: [ws_item_sk#29] +Right keys [1]: [i_item_sk#35] Join condition: None (55) Project [codegen id : 17] -Output [2]: [ws_ext_sales_price#36, i_item_id#41] -Input [4]: [ws_item_sk#34, ws_ext_sales_price#36, i_item_sk#40, i_item_id#41] +Output [2]: [ws_ext_sales_price#31, i_item_id#36] +Input [4]: [ws_item_sk#29, ws_ext_sales_price#31, i_item_sk#35, i_item_id#36] (56) HashAggregate [codegen id : 17] -Input [2]: [ws_ext_sales_price#36, i_item_id#41] -Keys [1]: [i_item_id#41] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#36))] -Aggregate Attributes [1]: [sum#42] -Results [2]: [i_item_id#41, sum#43] +Input [2]: [ws_ext_sales_price#31, i_item_id#36] +Keys [1]: [i_item_id#36] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#31))] +Aggregate Attributes [1]: [sum#37] +Results [2]: [i_item_id#36, sum#38] (57) Exchange -Input [2]: [i_item_id#41, sum#43] -Arguments: hashpartitioning(i_item_id#41, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [2]: [i_item_id#36, sum#38] +Arguments: hashpartitioning(i_item_id#36, 5), ENSURE_REQUIREMENTS, [plan_id=6] (58) HashAggregate [codegen id : 18] -Input [2]: [i_item_id#41, sum#43] -Keys [1]: [i_item_id#41] -Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#36))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#36))#45] -Results [2]: [i_item_id#41, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#36))#45,17,2) AS total_sales#46] +Input [2]: [i_item_id#36, sum#38] +Keys [1]: [i_item_id#36] +Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#31))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#31))#39] +Results [2]: [i_item_id#36, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#31))#39,17,2) AS total_sales#40] (59) Union (60) HashAggregate [codegen id : 19] -Input [2]: [i_item_id#11, total_sales#20] -Keys [1]: [i_item_id#11] -Functions [1]: [partial_sum(total_sales#20)] -Aggregate Attributes [2]: [sum#47, isEmpty#48] -Results [3]: [i_item_id#11, sum#49, isEmpty#50] +Input [2]: [i_item_id#10, total_sales#16] +Keys [1]: [i_item_id#10] +Functions [1]: [partial_sum(total_sales#16)] +Aggregate Attributes [2]: [sum#41, isEmpty#42] +Results [3]: [i_item_id#10, sum#43, isEmpty#44] (61) Exchange -Input [3]: [i_item_id#11, sum#49, isEmpty#50] -Arguments: hashpartitioning(i_item_id#11, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [3]: [i_item_id#10, sum#43, isEmpty#44] +Arguments: hashpartitioning(i_item_id#10, 5), ENSURE_REQUIREMENTS, [plan_id=7] (62) HashAggregate [codegen id : 20] -Input [3]: [i_item_id#11, sum#49, isEmpty#50] -Keys [1]: [i_item_id#11] -Functions [1]: [sum(total_sales#20)] -Aggregate Attributes [1]: [sum(total_sales#20)#52] -Results [2]: [i_item_id#11, sum(total_sales#20)#52 AS total_sales#53] +Input [3]: [i_item_id#10, sum#43, isEmpty#44] +Keys [1]: [i_item_id#10] +Functions [1]: [sum(total_sales#16)] +Aggregate Attributes [1]: [sum(total_sales#16)#45] +Results [2]: [i_item_id#10, sum(total_sales#16)#45 AS total_sales#46] (63) TakeOrderedAndProject -Input [2]: [i_item_id#11, total_sales#53] -Arguments: 100, [total_sales#53 ASC NULLS FIRST], [i_item_id#11, total_sales#53] +Input [2]: [i_item_id#10, total_sales#46] +Arguments: 100, [total_sales#46 ASC NULLS FIRST], [i_item_id#10, total_sales#46] ===== Subqueries ===== @@ -367,29 +367,29 @@ BroadcastExchange (68) (64) Scan parquet default.date_dim -Output [3]: [d_date_sk#6, d_year#54, d_moy#55] +Output [3]: [d_date_sk#6, d_year#47, d_moy#48] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,2), IsNotNull(d_date_sk)] ReadSchema: struct (65) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] (66) Filter [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] -Condition : ((((isnotnull(d_year#54) AND isnotnull(d_moy#55)) AND (d_year#54 = 2001)) AND (d_moy#55 = 2)) AND isnotnull(d_date_sk#6)) +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] +Condition : ((((isnotnull(d_year#47) AND isnotnull(d_moy#48)) AND (d_year#47 = 2001)) AND (d_moy#48 = 2)) AND isnotnull(d_date_sk#6)) (67) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] (68) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#56] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 29 Hosting Expression = cs_sold_date_sk#24 IN dynamicpruning#5 +Subquery:2 Hosting operator id = 29 Hosting Expression = cs_sold_date_sk#20 IN dynamicpruning#5 -Subquery:3 Hosting operator id = 44 Hosting Expression = ws_sold_date_sk#37 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 44 Hosting Expression = ws_sold_date_sk#32 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56/explain.txt index a7b59fe5d5ea7..7f10a26fd226f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q56/explain.txt @@ -111,7 +111,7 @@ Input [2]: [ca_address_sk#7, ca_gmt_offset#8] (11) BroadcastExchange Input [1]: [ca_address_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_addr_sk#2] @@ -123,238 +123,238 @@ Output [2]: [ss_item_sk#1, ss_ext_sales_price#3] Input [4]: [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3, ca_address_sk#7] (14) Scan parquet default.item -Output [2]: [i_item_sk#10, i_item_id#11] +Output [2]: [i_item_sk#9, i_item_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#10, i_item_id#11] +Input [2]: [i_item_sk#9, i_item_id#10] (16) Filter [codegen id : 4] -Input [2]: [i_item_sk#10, i_item_id#11] -Condition : isnotnull(i_item_sk#10) +Input [2]: [i_item_sk#9, i_item_id#10] +Condition : isnotnull(i_item_sk#9) (17) Scan parquet default.item -Output [2]: [i_item_id#12, i_color#13] +Output [2]: [i_item_id#11, i_color#12] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [In(i_color, [blanched ,burnished ,slate ])] ReadSchema: struct (18) ColumnarToRow [codegen id : 3] -Input [2]: [i_item_id#12, i_color#13] +Input [2]: [i_item_id#11, i_color#12] (19) Filter [codegen id : 3] -Input [2]: [i_item_id#12, i_color#13] -Condition : i_color#13 IN (slate ,blanched ,burnished ) +Input [2]: [i_item_id#11, i_color#12] +Condition : i_color#12 IN (slate ,blanched ,burnished ) (20) Project [codegen id : 3] -Output [1]: [i_item_id#12] -Input [2]: [i_item_id#12, i_color#13] +Output [1]: [i_item_id#11] +Input [2]: [i_item_id#11, i_color#12] (21) BroadcastExchange -Input [1]: [i_item_id#12] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#14] +Input [1]: [i_item_id#11] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=2] (22) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [i_item_id#11] -Right keys [1]: [i_item_id#12] +Left keys [1]: [i_item_id#10] +Right keys [1]: [i_item_id#11] Join condition: None (23) BroadcastExchange -Input [2]: [i_item_sk#10, i_item_id#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Input [2]: [i_item_sk#9, i_item_id#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#10] +Right keys [1]: [i_item_sk#9] Join condition: None (25) Project [codegen id : 5] -Output [2]: [ss_ext_sales_price#3, i_item_id#11] -Input [4]: [ss_item_sk#1, ss_ext_sales_price#3, i_item_sk#10, i_item_id#11] +Output [2]: [ss_ext_sales_price#3, i_item_id#10] +Input [4]: [ss_item_sk#1, ss_ext_sales_price#3, i_item_sk#9, i_item_id#10] (26) HashAggregate [codegen id : 5] -Input [2]: [ss_ext_sales_price#3, i_item_id#11] -Keys [1]: [i_item_id#11] +Input [2]: [ss_ext_sales_price#3, i_item_id#10] +Keys [1]: [i_item_id#10] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [1]: [sum#16] -Results [2]: [i_item_id#11, sum#17] +Aggregate Attributes [1]: [sum#13] +Results [2]: [i_item_id#10, sum#14] (27) Exchange -Input [2]: [i_item_id#11, sum#17] -Arguments: hashpartitioning(i_item_id#11, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [2]: [i_item_id#10, sum#14] +Arguments: hashpartitioning(i_item_id#10, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 6] -Input [2]: [i_item_id#11, sum#17] -Keys [1]: [i_item_id#11] +Input [2]: [i_item_id#10, sum#14] +Keys [1]: [i_item_id#10] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#3))#19] -Results [2]: [i_item_id#11, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#19,17,2) AS total_sales#20] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#3))#15] +Results [2]: [i_item_id#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#15,17,2) AS total_sales#16] (29) Scan parquet default.catalog_sales -Output [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] +Output [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#24), dynamicpruningexpression(cs_sold_date_sk#24 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#20), dynamicpruningexpression(cs_sold_date_sk#20 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cs_bill_addr_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 11] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] (31) Filter [codegen id : 11] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] -Condition : (isnotnull(cs_bill_addr_sk#21) AND isnotnull(cs_item_sk#22)) +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] +Condition : (isnotnull(cs_bill_addr_sk#17) AND isnotnull(cs_item_sk#18)) (32) ReusedExchange [Reuses operator id: 68] -Output [1]: [d_date_sk#25] +Output [1]: [d_date_sk#21] (33) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_sold_date_sk#24] -Right keys [1]: [d_date_sk#25] +Left keys [1]: [cs_sold_date_sk#20] +Right keys [1]: [d_date_sk#21] Join condition: None (34) Project [codegen id : 11] -Output [3]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23] -Input [5]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24, d_date_sk#25] +Output [3]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19] +Input [5]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20, d_date_sk#21] (35) ReusedExchange [Reuses operator id: 11] -Output [1]: [ca_address_sk#26] +Output [1]: [ca_address_sk#22] (36) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_bill_addr_sk#21] -Right keys [1]: [ca_address_sk#26] +Left keys [1]: [cs_bill_addr_sk#17] +Right keys [1]: [ca_address_sk#22] Join condition: None (37) Project [codegen id : 11] -Output [2]: [cs_item_sk#22, cs_ext_sales_price#23] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, ca_address_sk#26] +Output [2]: [cs_item_sk#18, cs_ext_sales_price#19] +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, ca_address_sk#22] (38) ReusedExchange [Reuses operator id: 23] -Output [2]: [i_item_sk#27, i_item_id#28] +Output [2]: [i_item_sk#23, i_item_id#24] (39) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_item_sk#22] -Right keys [1]: [i_item_sk#27] +Left keys [1]: [cs_item_sk#18] +Right keys [1]: [i_item_sk#23] Join condition: None (40) Project [codegen id : 11] -Output [2]: [cs_ext_sales_price#23, i_item_id#28] -Input [4]: [cs_item_sk#22, cs_ext_sales_price#23, i_item_sk#27, i_item_id#28] +Output [2]: [cs_ext_sales_price#19, i_item_id#24] +Input [4]: [cs_item_sk#18, cs_ext_sales_price#19, i_item_sk#23, i_item_id#24] (41) HashAggregate [codegen id : 11] -Input [2]: [cs_ext_sales_price#23, i_item_id#28] -Keys [1]: [i_item_id#28] -Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#23))] -Aggregate Attributes [1]: [sum#29] -Results [2]: [i_item_id#28, sum#30] +Input [2]: [cs_ext_sales_price#19, i_item_id#24] +Keys [1]: [i_item_id#24] +Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#19))] +Aggregate Attributes [1]: [sum#25] +Results [2]: [i_item_id#24, sum#26] (42) Exchange -Input [2]: [i_item_id#28, sum#30] -Arguments: hashpartitioning(i_item_id#28, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [2]: [i_item_id#24, sum#26] +Arguments: hashpartitioning(i_item_id#24, 5), ENSURE_REQUIREMENTS, [plan_id=5] (43) HashAggregate [codegen id : 12] -Input [2]: [i_item_id#28, sum#30] -Keys [1]: [i_item_id#28] -Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#23))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#23))#32] -Results [2]: [i_item_id#28, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#23))#32,17,2) AS total_sales#33] +Input [2]: [i_item_id#24, sum#26] +Keys [1]: [i_item_id#24] +Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#19))] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#19))#27] +Results [2]: [i_item_id#24, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#19))#27,17,2) AS total_sales#28] (44) Scan parquet default.web_sales -Output [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] +Output [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#37), dynamicpruningexpression(ws_sold_date_sk#37 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#32), dynamicpruningexpression(ws_sold_date_sk#32 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_bill_addr_sk), IsNotNull(ws_item_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 17] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] (46) Filter [codegen id : 17] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] -Condition : (isnotnull(ws_bill_addr_sk#35) AND isnotnull(ws_item_sk#34)) +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] +Condition : (isnotnull(ws_bill_addr_sk#30) AND isnotnull(ws_item_sk#29)) (47) ReusedExchange [Reuses operator id: 68] -Output [1]: [d_date_sk#38] +Output [1]: [d_date_sk#33] (48) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_sold_date_sk#37] -Right keys [1]: [d_date_sk#38] +Left keys [1]: [ws_sold_date_sk#32] +Right keys [1]: [d_date_sk#33] Join condition: None (49) Project [codegen id : 17] -Output [3]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36] -Input [5]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37, d_date_sk#38] +Output [3]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31] +Input [5]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32, d_date_sk#33] (50) ReusedExchange [Reuses operator id: 11] -Output [1]: [ca_address_sk#39] +Output [1]: [ca_address_sk#34] (51) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_bill_addr_sk#35] -Right keys [1]: [ca_address_sk#39] +Left keys [1]: [ws_bill_addr_sk#30] +Right keys [1]: [ca_address_sk#34] Join condition: None (52) Project [codegen id : 17] -Output [2]: [ws_item_sk#34, ws_ext_sales_price#36] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ca_address_sk#39] +Output [2]: [ws_item_sk#29, ws_ext_sales_price#31] +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ca_address_sk#34] (53) ReusedExchange [Reuses operator id: 23] -Output [2]: [i_item_sk#40, i_item_id#41] +Output [2]: [i_item_sk#35, i_item_id#36] (54) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_item_sk#34] -Right keys [1]: [i_item_sk#40] +Left keys [1]: [ws_item_sk#29] +Right keys [1]: [i_item_sk#35] Join condition: None (55) Project [codegen id : 17] -Output [2]: [ws_ext_sales_price#36, i_item_id#41] -Input [4]: [ws_item_sk#34, ws_ext_sales_price#36, i_item_sk#40, i_item_id#41] +Output [2]: [ws_ext_sales_price#31, i_item_id#36] +Input [4]: [ws_item_sk#29, ws_ext_sales_price#31, i_item_sk#35, i_item_id#36] (56) HashAggregate [codegen id : 17] -Input [2]: [ws_ext_sales_price#36, i_item_id#41] -Keys [1]: [i_item_id#41] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#36))] -Aggregate Attributes [1]: [sum#42] -Results [2]: [i_item_id#41, sum#43] +Input [2]: [ws_ext_sales_price#31, i_item_id#36] +Keys [1]: [i_item_id#36] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#31))] +Aggregate Attributes [1]: [sum#37] +Results [2]: [i_item_id#36, sum#38] (57) Exchange -Input [2]: [i_item_id#41, sum#43] -Arguments: hashpartitioning(i_item_id#41, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [2]: [i_item_id#36, sum#38] +Arguments: hashpartitioning(i_item_id#36, 5), ENSURE_REQUIREMENTS, [plan_id=6] (58) HashAggregate [codegen id : 18] -Input [2]: [i_item_id#41, sum#43] -Keys [1]: [i_item_id#41] -Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#36))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#36))#45] -Results [2]: [i_item_id#41, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#36))#45,17,2) AS total_sales#46] +Input [2]: [i_item_id#36, sum#38] +Keys [1]: [i_item_id#36] +Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#31))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#31))#39] +Results [2]: [i_item_id#36, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#31))#39,17,2) AS total_sales#40] (59) Union (60) HashAggregate [codegen id : 19] -Input [2]: [i_item_id#11, total_sales#20] -Keys [1]: [i_item_id#11] -Functions [1]: [partial_sum(total_sales#20)] -Aggregate Attributes [2]: [sum#47, isEmpty#48] -Results [3]: [i_item_id#11, sum#49, isEmpty#50] +Input [2]: [i_item_id#10, total_sales#16] +Keys [1]: [i_item_id#10] +Functions [1]: [partial_sum(total_sales#16)] +Aggregate Attributes [2]: [sum#41, isEmpty#42] +Results [3]: [i_item_id#10, sum#43, isEmpty#44] (61) Exchange -Input [3]: [i_item_id#11, sum#49, isEmpty#50] -Arguments: hashpartitioning(i_item_id#11, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [3]: [i_item_id#10, sum#43, isEmpty#44] +Arguments: hashpartitioning(i_item_id#10, 5), ENSURE_REQUIREMENTS, [plan_id=7] (62) HashAggregate [codegen id : 20] -Input [3]: [i_item_id#11, sum#49, isEmpty#50] -Keys [1]: [i_item_id#11] -Functions [1]: [sum(total_sales#20)] -Aggregate Attributes [1]: [sum(total_sales#20)#52] -Results [2]: [i_item_id#11, sum(total_sales#20)#52 AS total_sales#53] +Input [3]: [i_item_id#10, sum#43, isEmpty#44] +Keys [1]: [i_item_id#10] +Functions [1]: [sum(total_sales#16)] +Aggregate Attributes [1]: [sum(total_sales#16)#45] +Results [2]: [i_item_id#10, sum(total_sales#16)#45 AS total_sales#46] (63) TakeOrderedAndProject -Input [2]: [i_item_id#11, total_sales#53] -Arguments: 100, [total_sales#53 ASC NULLS FIRST], [i_item_id#11, total_sales#53] +Input [2]: [i_item_id#10, total_sales#46] +Arguments: 100, [total_sales#46 ASC NULLS FIRST], [i_item_id#10, total_sales#46] ===== Subqueries ===== @@ -367,29 +367,29 @@ BroadcastExchange (68) (64) Scan parquet default.date_dim -Output [3]: [d_date_sk#6, d_year#54, d_moy#55] +Output [3]: [d_date_sk#6, d_year#47, d_moy#48] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,2), IsNotNull(d_date_sk)] ReadSchema: struct (65) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] (66) Filter [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] -Condition : ((((isnotnull(d_year#54) AND isnotnull(d_moy#55)) AND (d_year#54 = 2001)) AND (d_moy#55 = 2)) AND isnotnull(d_date_sk#6)) +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] +Condition : ((((isnotnull(d_year#47) AND isnotnull(d_moy#48)) AND (d_year#47 = 2001)) AND (d_moy#48 = 2)) AND isnotnull(d_date_sk#6)) (67) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] (68) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#56] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 29 Hosting Expression = cs_sold_date_sk#24 IN dynamicpruning#5 +Subquery:2 Hosting operator id = 29 Hosting Expression = cs_sold_date_sk#20 IN dynamicpruning#5 -Subquery:3 Hosting operator id = 44 Hosting Expression = ws_sold_date_sk#37 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 44 Hosting Expression = ws_sold_date_sk#32 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q57.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q57.sf100/explain.txt index 0b933a733f888..cd93eea6a1c8e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q57.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q57.sf100/explain.txt @@ -96,7 +96,7 @@ Condition : (isnotnull(cc_call_center_sk#9) AND isnotnull(cc_name#10)) (10) BroadcastExchange Input [2]: [cc_call_center_sk#9, cc_name#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_call_center_sk#1] @@ -109,175 +109,175 @@ Input [7]: [cs_call_center_sk#1, cs_item_sk#2, cs_sales_price#3, d_year#7, d_moy (13) Exchange Input [5]: [cs_item_sk#2, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10] -Arguments: hashpartitioning(cs_item_sk#2, 5), ENSURE_REQUIREMENTS, [id=#12] +Arguments: hashpartitioning(cs_item_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) Sort [codegen id : 4] Input [5]: [cs_item_sk#2, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10] Arguments: [cs_item_sk#2 ASC NULLS FIRST], false, 0 (15) Scan parquet default.item -Output [3]: [i_item_sk#13, i_brand#14, i_category#15] +Output [3]: [i_item_sk#11, i_brand#12, i_category#13] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_category), IsNotNull(i_brand)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [3]: [i_item_sk#13, i_brand#14, i_category#15] +Input [3]: [i_item_sk#11, i_brand#12, i_category#13] (17) Filter [codegen id : 5] -Input [3]: [i_item_sk#13, i_brand#14, i_category#15] -Condition : ((isnotnull(i_item_sk#13) AND isnotnull(i_category#15)) AND isnotnull(i_brand#14)) +Input [3]: [i_item_sk#11, i_brand#12, i_category#13] +Condition : ((isnotnull(i_item_sk#11) AND isnotnull(i_category#13)) AND isnotnull(i_brand#12)) (18) Exchange -Input [3]: [i_item_sk#13, i_brand#14, i_category#15] -Arguments: hashpartitioning(i_item_sk#13, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [3]: [i_item_sk#11, i_brand#12, i_category#13] +Arguments: hashpartitioning(i_item_sk#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 6] -Input [3]: [i_item_sk#13, i_brand#14, i_category#15] -Arguments: [i_item_sk#13 ASC NULLS FIRST], false, 0 +Input [3]: [i_item_sk#11, i_brand#12, i_category#13] +Arguments: [i_item_sk#11 ASC NULLS FIRST], false, 0 (20) SortMergeJoin [codegen id : 7] Left keys [1]: [cs_item_sk#2] -Right keys [1]: [i_item_sk#13] +Right keys [1]: [i_item_sk#11] Join condition: None (21) Project [codegen id : 7] -Output [6]: [i_brand#14, i_category#15, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10] -Input [8]: [cs_item_sk#2, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10, i_item_sk#13, i_brand#14, i_category#15] +Output [6]: [i_brand#12, i_category#13, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10] +Input [8]: [cs_item_sk#2, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10, i_item_sk#11, i_brand#12, i_category#13] (22) HashAggregate [codegen id : 7] -Input [6]: [i_brand#14, i_category#15, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10] -Keys [5]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8] +Input [6]: [i_brand#12, i_category#13, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10] +Keys [5]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8] Functions [1]: [partial_sum(UnscaledValue(cs_sales_price#3))] -Aggregate Attributes [1]: [sum#17] -Results [6]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum#18] +Aggregate Attributes [1]: [sum#14] +Results [6]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum#15] (23) Exchange -Input [6]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum#18] -Arguments: hashpartitioning(i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [6]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum#15] +Arguments: hashpartitioning(i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) HashAggregate [codegen id : 8] -Input [6]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum#18] -Keys [5]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8] +Input [6]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum#15] +Keys [5]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8] Functions [1]: [sum(UnscaledValue(cs_sales_price#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#3))#20] -Results [7]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, MakeDecimal(sum(UnscaledValue(cs_sales_price#3))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(cs_sales_price#3))#20,17,2) AS _w0#22] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#3))#16] +Results [7]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, MakeDecimal(sum(UnscaledValue(cs_sales_price#3))#16,17,2) AS sum_sales#17, MakeDecimal(sum(UnscaledValue(cs_sales_price#3))#16,17,2) AS _w0#18] (25) Exchange -Input [7]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, _w0#22] -Arguments: hashpartitioning(i_category#15, i_brand#14, cc_name#10, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [7]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, _w0#18] +Arguments: hashpartitioning(i_category#13, i_brand#12, cc_name#10, 5), ENSURE_REQUIREMENTS, [plan_id=5] (26) Sort [codegen id : 9] -Input [7]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, _w0#22] -Arguments: [i_category#15 ASC NULLS FIRST, i_brand#14 ASC NULLS FIRST, cc_name#10 ASC NULLS FIRST, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST], false, 0 +Input [7]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, _w0#18] +Arguments: [i_category#13 ASC NULLS FIRST, i_brand#12 ASC NULLS FIRST, cc_name#10 ASC NULLS FIRST, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST], false, 0 (27) Window -Input [7]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, _w0#22] -Arguments: [rank(d_year#7, d_moy#8) windowspecdefinition(i_category#15, i_brand#14, cc_name#10, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#24], [i_category#15, i_brand#14, cc_name#10], [d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST] +Input [7]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, _w0#18] +Arguments: [rank(d_year#7, d_moy#8) windowspecdefinition(i_category#13, i_brand#12, cc_name#10, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#19], [i_category#13, i_brand#12, cc_name#10], [d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST] (28) Filter [codegen id : 10] -Input [8]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, _w0#22, rn#24] +Input [8]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, _w0#18, rn#19] Condition : (isnotnull(d_year#7) AND (d_year#7 = 1999)) (29) Window -Input [8]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, _w0#22, rn#24] -Arguments: [avg(_w0#22) windowspecdefinition(i_category#15, i_brand#14, cc_name#10, d_year#7, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#25], [i_category#15, i_brand#14, cc_name#10, d_year#7] +Input [8]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, _w0#18, rn#19] +Arguments: [avg(_w0#18) windowspecdefinition(i_category#13, i_brand#12, cc_name#10, d_year#7, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#20], [i_category#13, i_brand#12, cc_name#10, d_year#7] (30) Filter [codegen id : 11] -Input [9]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, _w0#22, rn#24, avg_monthly_sales#25] -Condition : ((isnotnull(avg_monthly_sales#25) AND (avg_monthly_sales#25 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) +Input [9]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, _w0#18, rn#19, avg_monthly_sales#20] +Condition : ((isnotnull(avg_monthly_sales#20) AND (avg_monthly_sales#20 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#17 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) (31) Project [codegen id : 11] -Output [8]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, avg_monthly_sales#25, rn#24] -Input [9]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, _w0#22, rn#24, avg_monthly_sales#25] +Output [8]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, avg_monthly_sales#20, rn#19] +Input [9]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, _w0#18, rn#19, avg_monthly_sales#20] (32) Exchange -Input [8]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, avg_monthly_sales#25, rn#24] -Arguments: hashpartitioning(i_category#15, i_brand#14, cc_name#10, rn#24, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [8]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, avg_monthly_sales#20, rn#19] +Arguments: hashpartitioning(i_category#13, i_brand#12, cc_name#10, rn#19, 5), ENSURE_REQUIREMENTS, [plan_id=6] (33) Sort [codegen id : 12] -Input [8]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, avg_monthly_sales#25, rn#24] -Arguments: [i_category#15 ASC NULLS FIRST, i_brand#14 ASC NULLS FIRST, cc_name#10 ASC NULLS FIRST, rn#24 ASC NULLS FIRST], false, 0 +Input [8]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, avg_monthly_sales#20, rn#19] +Arguments: [i_category#13 ASC NULLS FIRST, i_brand#12 ASC NULLS FIRST, cc_name#10 ASC NULLS FIRST, rn#19 ASC NULLS FIRST], false, 0 (34) ReusedExchange [Reuses operator id: 23] -Output [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum#32] +Output [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum#26] (35) HashAggregate [codegen id : 20] -Input [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum#32] -Keys [5]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31] -Functions [1]: [sum(UnscaledValue(cs_sales_price#33))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#33))#20] -Results [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, MakeDecimal(sum(UnscaledValue(cs_sales_price#33))#20,17,2) AS sum_sales#21] +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum#26] +Keys [5]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25] +Functions [1]: [sum(UnscaledValue(cs_sales_price#27))] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#27))#16] +Results [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, MakeDecimal(sum(UnscaledValue(cs_sales_price#27))#16,17,2) AS sum_sales#17] (36) Exchange -Input [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum_sales#21] -Arguments: hashpartitioning(i_category#27, i_brand#28, cc_name#29, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17] +Arguments: hashpartitioning(i_category#21, i_brand#22, cc_name#23, 5), ENSURE_REQUIREMENTS, [plan_id=7] (37) Sort [codegen id : 21] -Input [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum_sales#21] -Arguments: [i_category#27 ASC NULLS FIRST, i_brand#28 ASC NULLS FIRST, cc_name#29 ASC NULLS FIRST, d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST], false, 0 +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17] +Arguments: [i_category#21 ASC NULLS FIRST, i_brand#22 ASC NULLS FIRST, cc_name#23 ASC NULLS FIRST, d_year#24 ASC NULLS FIRST, d_moy#25 ASC NULLS FIRST], false, 0 (38) Window -Input [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum_sales#21] -Arguments: [rank(d_year#30, d_moy#31) windowspecdefinition(i_category#27, i_brand#28, cc_name#29, d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#35], [i_category#27, i_brand#28, cc_name#29], [d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST] +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17] +Arguments: [rank(d_year#24, d_moy#25) windowspecdefinition(i_category#21, i_brand#22, cc_name#23, d_year#24 ASC NULLS FIRST, d_moy#25 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#28], [i_category#21, i_brand#22, cc_name#23], [d_year#24 ASC NULLS FIRST, d_moy#25 ASC NULLS FIRST] (39) Project [codegen id : 22] -Output [5]: [i_category#27, i_brand#28, cc_name#29, sum_sales#21 AS sum_sales#36, rn#35] -Input [7]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum_sales#21, rn#35] +Output [5]: [i_category#21, i_brand#22, cc_name#23, sum_sales#17 AS sum_sales#29, rn#28] +Input [7]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17, rn#28] (40) Exchange -Input [5]: [i_category#27, i_brand#28, cc_name#29, sum_sales#36, rn#35] -Arguments: hashpartitioning(i_category#27, i_brand#28, cc_name#29, (rn#35 + 1), 5), ENSURE_REQUIREMENTS, [id=#37] +Input [5]: [i_category#21, i_brand#22, cc_name#23, sum_sales#29, rn#28] +Arguments: hashpartitioning(i_category#21, i_brand#22, cc_name#23, (rn#28 + 1), 5), ENSURE_REQUIREMENTS, [plan_id=8] (41) Sort [codegen id : 23] -Input [5]: [i_category#27, i_brand#28, cc_name#29, sum_sales#36, rn#35] -Arguments: [i_category#27 ASC NULLS FIRST, i_brand#28 ASC NULLS FIRST, cc_name#29 ASC NULLS FIRST, (rn#35 + 1) ASC NULLS FIRST], false, 0 +Input [5]: [i_category#21, i_brand#22, cc_name#23, sum_sales#29, rn#28] +Arguments: [i_category#21 ASC NULLS FIRST, i_brand#22 ASC NULLS FIRST, cc_name#23 ASC NULLS FIRST, (rn#28 + 1) ASC NULLS FIRST], false, 0 (42) SortMergeJoin [codegen id : 24] -Left keys [4]: [i_category#15, i_brand#14, cc_name#10, rn#24] -Right keys [4]: [i_category#27, i_brand#28, cc_name#29, (rn#35 + 1)] +Left keys [4]: [i_category#13, i_brand#12, cc_name#10, rn#19] +Right keys [4]: [i_category#21, i_brand#22, cc_name#23, (rn#28 + 1)] Join condition: None (43) Project [codegen id : 24] -Output [9]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, avg_monthly_sales#25, rn#24, sum_sales#36] -Input [13]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, avg_monthly_sales#25, rn#24, i_category#27, i_brand#28, cc_name#29, sum_sales#36, rn#35] +Output [9]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, avg_monthly_sales#20, rn#19, sum_sales#29] +Input [13]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, avg_monthly_sales#20, rn#19, i_category#21, i_brand#22, cc_name#23, sum_sales#29, rn#28] (44) ReusedExchange [Reuses operator id: 36] -Output [6]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#21] +Output [6]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17] (45) Sort [codegen id : 33] -Input [6]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#21] -Arguments: [i_category#38 ASC NULLS FIRST, i_brand#39 ASC NULLS FIRST, cc_name#40 ASC NULLS FIRST, d_year#41 ASC NULLS FIRST, d_moy#42 ASC NULLS FIRST], false, 0 +Input [6]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17] +Arguments: [i_category#30 ASC NULLS FIRST, i_brand#31 ASC NULLS FIRST, cc_name#32 ASC NULLS FIRST, d_year#33 ASC NULLS FIRST, d_moy#34 ASC NULLS FIRST], false, 0 (46) Window -Input [6]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#21] -Arguments: [rank(d_year#41, d_moy#42) windowspecdefinition(i_category#38, i_brand#39, cc_name#40, d_year#41 ASC NULLS FIRST, d_moy#42 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#43], [i_category#38, i_brand#39, cc_name#40], [d_year#41 ASC NULLS FIRST, d_moy#42 ASC NULLS FIRST] +Input [6]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17] +Arguments: [rank(d_year#33, d_moy#34) windowspecdefinition(i_category#30, i_brand#31, cc_name#32, d_year#33 ASC NULLS FIRST, d_moy#34 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#35], [i_category#30, i_brand#31, cc_name#32], [d_year#33 ASC NULLS FIRST, d_moy#34 ASC NULLS FIRST] (47) Project [codegen id : 34] -Output [5]: [i_category#38, i_brand#39, cc_name#40, sum_sales#21 AS sum_sales#44, rn#43] -Input [7]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#21, rn#43] +Output [5]: [i_category#30, i_brand#31, cc_name#32, sum_sales#17 AS sum_sales#36, rn#35] +Input [7]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17, rn#35] (48) Exchange -Input [5]: [i_category#38, i_brand#39, cc_name#40, sum_sales#44, rn#43] -Arguments: hashpartitioning(i_category#38, i_brand#39, cc_name#40, (rn#43 - 1), 5), ENSURE_REQUIREMENTS, [id=#45] +Input [5]: [i_category#30, i_brand#31, cc_name#32, sum_sales#36, rn#35] +Arguments: hashpartitioning(i_category#30, i_brand#31, cc_name#32, (rn#35 - 1), 5), ENSURE_REQUIREMENTS, [plan_id=9] (49) Sort [codegen id : 35] -Input [5]: [i_category#38, i_brand#39, cc_name#40, sum_sales#44, rn#43] -Arguments: [i_category#38 ASC NULLS FIRST, i_brand#39 ASC NULLS FIRST, cc_name#40 ASC NULLS FIRST, (rn#43 - 1) ASC NULLS FIRST], false, 0 +Input [5]: [i_category#30, i_brand#31, cc_name#32, sum_sales#36, rn#35] +Arguments: [i_category#30 ASC NULLS FIRST, i_brand#31 ASC NULLS FIRST, cc_name#32 ASC NULLS FIRST, (rn#35 - 1) ASC NULLS FIRST], false, 0 (50) SortMergeJoin [codegen id : 36] -Left keys [4]: [i_category#15, i_brand#14, cc_name#10, rn#24] -Right keys [4]: [i_category#38, i_brand#39, cc_name#40, (rn#43 - 1)] +Left keys [4]: [i_category#13, i_brand#12, cc_name#10, rn#19] +Right keys [4]: [i_category#30, i_brand#31, cc_name#32, (rn#35 - 1)] Join condition: None (51) Project [codegen id : 36] -Output [9]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, avg_monthly_sales#25, sum_sales#21, sum_sales#36 AS psum#46, sum_sales#44 AS nsum#47] -Input [14]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, avg_monthly_sales#25, rn#24, sum_sales#36, i_category#38, i_brand#39, cc_name#40, sum_sales#44, rn#43] +Output [9]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, avg_monthly_sales#20, sum_sales#17, sum_sales#29 AS psum#37, sum_sales#36 AS nsum#38] +Input [14]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, avg_monthly_sales#20, rn#19, sum_sales#29, i_category#30, i_brand#31, cc_name#32, sum_sales#36, rn#35] (52) TakeOrderedAndProject -Input [9]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, avg_monthly_sales#25, sum_sales#21, psum#46, nsum#47] -Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, cc_name#10 ASC NULLS FIRST], [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, avg_monthly_sales#25, sum_sales#21, psum#46, nsum#47] +Input [9]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, avg_monthly_sales#20, sum_sales#17, psum#37, nsum#38] +Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#17 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, cc_name#10 ASC NULLS FIRST], [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, avg_monthly_sales#20, sum_sales#17, psum#37, nsum#38] ===== Subqueries ===== @@ -304,6 +304,6 @@ Condition : ((((d_year#7 = 1999) OR ((d_year#7 = 1998) AND (d_moy#8 = 12))) OR ( (56) BroadcastExchange Input [3]: [d_date_sk#6, d_year#7, d_moy#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#48] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=10] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q57/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q57/explain.txt index 6b2736ef4008f..7abc61f31e616 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q57/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q57/explain.txt @@ -77,7 +77,7 @@ Condition : (isnotnull(cs_item_sk#5) AND isnotnull(cs_call_center_sk#4)) (7) BroadcastExchange Input [4]: [cs_call_center_sk#4, cs_item_sk#5, cs_sales_price#6, cs_sold_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] @@ -89,160 +89,160 @@ Output [5]: [i_brand#2, i_category#3, cs_call_center_sk#4, cs_sales_price#6, cs_ Input [7]: [i_item_sk#1, i_brand#2, i_category#3, cs_call_center_sk#4, cs_item_sk#5, cs_sales_price#6, cs_sold_date_sk#7] (10) ReusedExchange [Reuses operator id: 49] -Output [3]: [d_date_sk#10, d_year#11, d_moy#12] +Output [3]: [d_date_sk#9, d_year#10, d_moy#11] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_sold_date_sk#7] -Right keys [1]: [d_date_sk#10] +Right keys [1]: [d_date_sk#9] Join condition: None (12) Project [codegen id : 4] -Output [6]: [i_brand#2, i_category#3, cs_call_center_sk#4, cs_sales_price#6, d_year#11, d_moy#12] -Input [8]: [i_brand#2, i_category#3, cs_call_center_sk#4, cs_sales_price#6, cs_sold_date_sk#7, d_date_sk#10, d_year#11, d_moy#12] +Output [6]: [i_brand#2, i_category#3, cs_call_center_sk#4, cs_sales_price#6, d_year#10, d_moy#11] +Input [8]: [i_brand#2, i_category#3, cs_call_center_sk#4, cs_sales_price#6, cs_sold_date_sk#7, d_date_sk#9, d_year#10, d_moy#11] (13) Scan parquet default.call_center -Output [2]: [cc_call_center_sk#13, cc_name#14] +Output [2]: [cc_call_center_sk#12, cc_name#13] Batched: true Location [not included in comparison]/{warehouse_dir}/call_center] PushedFilters: [IsNotNull(cc_call_center_sk), IsNotNull(cc_name)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [2]: [cc_call_center_sk#13, cc_name#14] +Input [2]: [cc_call_center_sk#12, cc_name#13] (15) Filter [codegen id : 3] -Input [2]: [cc_call_center_sk#13, cc_name#14] -Condition : (isnotnull(cc_call_center_sk#13) AND isnotnull(cc_name#14)) +Input [2]: [cc_call_center_sk#12, cc_name#13] +Condition : (isnotnull(cc_call_center_sk#12) AND isnotnull(cc_name#13)) (16) BroadcastExchange -Input [2]: [cc_call_center_sk#13, cc_name#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Input [2]: [cc_call_center_sk#12, cc_name#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_call_center_sk#4] -Right keys [1]: [cc_call_center_sk#13] +Right keys [1]: [cc_call_center_sk#12] Join condition: None (18) Project [codegen id : 4] -Output [6]: [i_brand#2, i_category#3, cs_sales_price#6, d_year#11, d_moy#12, cc_name#14] -Input [8]: [i_brand#2, i_category#3, cs_call_center_sk#4, cs_sales_price#6, d_year#11, d_moy#12, cc_call_center_sk#13, cc_name#14] +Output [6]: [i_brand#2, i_category#3, cs_sales_price#6, d_year#10, d_moy#11, cc_name#13] +Input [8]: [i_brand#2, i_category#3, cs_call_center_sk#4, cs_sales_price#6, d_year#10, d_moy#11, cc_call_center_sk#12, cc_name#13] (19) HashAggregate [codegen id : 4] -Input [6]: [i_brand#2, i_category#3, cs_sales_price#6, d_year#11, d_moy#12, cc_name#14] -Keys [5]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12] +Input [6]: [i_brand#2, i_category#3, cs_sales_price#6, d_year#10, d_moy#11, cc_name#13] +Keys [5]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11] Functions [1]: [partial_sum(UnscaledValue(cs_sales_price#6))] -Aggregate Attributes [1]: [sum#16] -Results [6]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum#17] +Aggregate Attributes [1]: [sum#14] +Results [6]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum#15] (20) Exchange -Input [6]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum#17] -Arguments: hashpartitioning(i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [6]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum#15] +Arguments: hashpartitioning(i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 5] -Input [6]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum#17] -Keys [5]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12] +Input [6]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum#15] +Keys [5]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11] Functions [1]: [sum(UnscaledValue(cs_sales_price#6))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#6))#19] -Results [7]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, MakeDecimal(sum(UnscaledValue(cs_sales_price#6))#19,17,2) AS sum_sales#20, MakeDecimal(sum(UnscaledValue(cs_sales_price#6))#19,17,2) AS _w0#21] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#6))#16] +Results [7]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, MakeDecimal(sum(UnscaledValue(cs_sales_price#6))#16,17,2) AS sum_sales#17, MakeDecimal(sum(UnscaledValue(cs_sales_price#6))#16,17,2) AS _w0#18] (22) Exchange -Input [7]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, _w0#21] -Arguments: hashpartitioning(i_category#3, i_brand#2, cc_name#14, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [7]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, _w0#18] +Arguments: hashpartitioning(i_category#3, i_brand#2, cc_name#13, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) Sort [codegen id : 6] -Input [7]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, _w0#21] -Arguments: [i_category#3 ASC NULLS FIRST, i_brand#2 ASC NULLS FIRST, cc_name#14 ASC NULLS FIRST, d_year#11 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST], false, 0 +Input [7]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, _w0#18] +Arguments: [i_category#3 ASC NULLS FIRST, i_brand#2 ASC NULLS FIRST, cc_name#13 ASC NULLS FIRST, d_year#10 ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST], false, 0 (24) Window -Input [7]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, _w0#21] -Arguments: [rank(d_year#11, d_moy#12) windowspecdefinition(i_category#3, i_brand#2, cc_name#14, d_year#11 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#23], [i_category#3, i_brand#2, cc_name#14], [d_year#11 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST] +Input [7]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, _w0#18] +Arguments: [rank(d_year#10, d_moy#11) windowspecdefinition(i_category#3, i_brand#2, cc_name#13, d_year#10 ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#19], [i_category#3, i_brand#2, cc_name#13], [d_year#10 ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST] (25) Filter [codegen id : 7] -Input [8]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, _w0#21, rn#23] -Condition : (isnotnull(d_year#11) AND (d_year#11 = 1999)) +Input [8]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, _w0#18, rn#19] +Condition : (isnotnull(d_year#10) AND (d_year#10 = 1999)) (26) Window -Input [8]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, _w0#21, rn#23] -Arguments: [avg(_w0#21) windowspecdefinition(i_category#3, i_brand#2, cc_name#14, d_year#11, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#24], [i_category#3, i_brand#2, cc_name#14, d_year#11] +Input [8]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, _w0#18, rn#19] +Arguments: [avg(_w0#18) windowspecdefinition(i_category#3, i_brand#2, cc_name#13, d_year#10, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#20], [i_category#3, i_brand#2, cc_name#13, d_year#10] (27) Filter [codegen id : 22] -Input [9]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, _w0#21, rn#23, avg_monthly_sales#24] -Condition : ((isnotnull(avg_monthly_sales#24) AND (avg_monthly_sales#24 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#20 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) +Input [9]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, _w0#18, rn#19, avg_monthly_sales#20] +Condition : ((isnotnull(avg_monthly_sales#20) AND (avg_monthly_sales#20 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#17 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) (28) Project [codegen id : 22] -Output [8]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, avg_monthly_sales#24, rn#23] -Input [9]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, _w0#21, rn#23, avg_monthly_sales#24] +Output [8]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, avg_monthly_sales#20, rn#19] +Input [9]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, _w0#18, rn#19, avg_monthly_sales#20] (29) ReusedExchange [Reuses operator id: 20] -Output [6]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29, sum#30] +Output [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum#26] (30) HashAggregate [codegen id : 12] -Input [6]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29, sum#30] -Keys [5]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29] -Functions [1]: [sum(UnscaledValue(cs_sales_price#31))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#31))#19] -Results [6]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29, MakeDecimal(sum(UnscaledValue(cs_sales_price#31))#19,17,2) AS sum_sales#20] +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum#26] +Keys [5]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25] +Functions [1]: [sum(UnscaledValue(cs_sales_price#27))] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#27))#16] +Results [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, MakeDecimal(sum(UnscaledValue(cs_sales_price#27))#16,17,2) AS sum_sales#17] (31) Exchange -Input [6]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29, sum_sales#20] -Arguments: hashpartitioning(i_category#25, i_brand#26, cc_name#27, 5), ENSURE_REQUIREMENTS, [id=#32] +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17] +Arguments: hashpartitioning(i_category#21, i_brand#22, cc_name#23, 5), ENSURE_REQUIREMENTS, [plan_id=5] (32) Sort [codegen id : 13] -Input [6]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29, sum_sales#20] -Arguments: [i_category#25 ASC NULLS FIRST, i_brand#26 ASC NULLS FIRST, cc_name#27 ASC NULLS FIRST, d_year#28 ASC NULLS FIRST, d_moy#29 ASC NULLS FIRST], false, 0 +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17] +Arguments: [i_category#21 ASC NULLS FIRST, i_brand#22 ASC NULLS FIRST, cc_name#23 ASC NULLS FIRST, d_year#24 ASC NULLS FIRST, d_moy#25 ASC NULLS FIRST], false, 0 (33) Window -Input [6]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29, sum_sales#20] -Arguments: [rank(d_year#28, d_moy#29) windowspecdefinition(i_category#25, i_brand#26, cc_name#27, d_year#28 ASC NULLS FIRST, d_moy#29 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#33], [i_category#25, i_brand#26, cc_name#27], [d_year#28 ASC NULLS FIRST, d_moy#29 ASC NULLS FIRST] +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17] +Arguments: [rank(d_year#24, d_moy#25) windowspecdefinition(i_category#21, i_brand#22, cc_name#23, d_year#24 ASC NULLS FIRST, d_moy#25 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#28], [i_category#21, i_brand#22, cc_name#23], [d_year#24 ASC NULLS FIRST, d_moy#25 ASC NULLS FIRST] (34) Project [codegen id : 14] -Output [5]: [i_category#25, i_brand#26, cc_name#27, sum_sales#20 AS sum_sales#34, rn#33] -Input [7]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29, sum_sales#20, rn#33] +Output [5]: [i_category#21, i_brand#22, cc_name#23, sum_sales#17 AS sum_sales#29, rn#28] +Input [7]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17, rn#28] (35) BroadcastExchange -Input [5]: [i_category#25, i_brand#26, cc_name#27, sum_sales#34, rn#33] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, false] + 1)),false), [id=#35] +Input [5]: [i_category#21, i_brand#22, cc_name#23, sum_sales#29, rn#28] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, false] + 1)),false), [plan_id=6] (36) BroadcastHashJoin [codegen id : 22] -Left keys [4]: [i_category#3, i_brand#2, cc_name#14, rn#23] -Right keys [4]: [i_category#25, i_brand#26, cc_name#27, (rn#33 + 1)] +Left keys [4]: [i_category#3, i_brand#2, cc_name#13, rn#19] +Right keys [4]: [i_category#21, i_brand#22, cc_name#23, (rn#28 + 1)] Join condition: None (37) Project [codegen id : 22] -Output [9]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, avg_monthly_sales#24, rn#23, sum_sales#34] -Input [13]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, avg_monthly_sales#24, rn#23, i_category#25, i_brand#26, cc_name#27, sum_sales#34, rn#33] +Output [9]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, avg_monthly_sales#20, rn#19, sum_sales#29] +Input [13]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, avg_monthly_sales#20, rn#19, i_category#21, i_brand#22, cc_name#23, sum_sales#29, rn#28] (38) ReusedExchange [Reuses operator id: 31] -Output [6]: [i_category#36, i_brand#37, cc_name#38, d_year#39, d_moy#40, sum_sales#20] +Output [6]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17] (39) Sort [codegen id : 20] -Input [6]: [i_category#36, i_brand#37, cc_name#38, d_year#39, d_moy#40, sum_sales#20] -Arguments: [i_category#36 ASC NULLS FIRST, i_brand#37 ASC NULLS FIRST, cc_name#38 ASC NULLS FIRST, d_year#39 ASC NULLS FIRST, d_moy#40 ASC NULLS FIRST], false, 0 +Input [6]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17] +Arguments: [i_category#30 ASC NULLS FIRST, i_brand#31 ASC NULLS FIRST, cc_name#32 ASC NULLS FIRST, d_year#33 ASC NULLS FIRST, d_moy#34 ASC NULLS FIRST], false, 0 (40) Window -Input [6]: [i_category#36, i_brand#37, cc_name#38, d_year#39, d_moy#40, sum_sales#20] -Arguments: [rank(d_year#39, d_moy#40) windowspecdefinition(i_category#36, i_brand#37, cc_name#38, d_year#39 ASC NULLS FIRST, d_moy#40 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#41], [i_category#36, i_brand#37, cc_name#38], [d_year#39 ASC NULLS FIRST, d_moy#40 ASC NULLS FIRST] +Input [6]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17] +Arguments: [rank(d_year#33, d_moy#34) windowspecdefinition(i_category#30, i_brand#31, cc_name#32, d_year#33 ASC NULLS FIRST, d_moy#34 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#35], [i_category#30, i_brand#31, cc_name#32], [d_year#33 ASC NULLS FIRST, d_moy#34 ASC NULLS FIRST] (41) Project [codegen id : 21] -Output [5]: [i_category#36, i_brand#37, cc_name#38, sum_sales#20 AS sum_sales#42, rn#41] -Input [7]: [i_category#36, i_brand#37, cc_name#38, d_year#39, d_moy#40, sum_sales#20, rn#41] +Output [5]: [i_category#30, i_brand#31, cc_name#32, sum_sales#17 AS sum_sales#36, rn#35] +Input [7]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17, rn#35] (42) BroadcastExchange -Input [5]: [i_category#36, i_brand#37, cc_name#38, sum_sales#42, rn#41] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, false] - 1)),false), [id=#43] +Input [5]: [i_category#30, i_brand#31, cc_name#32, sum_sales#36, rn#35] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, false] - 1)),false), [plan_id=7] (43) BroadcastHashJoin [codegen id : 22] -Left keys [4]: [i_category#3, i_brand#2, cc_name#14, rn#23] -Right keys [4]: [i_category#36, i_brand#37, cc_name#38, (rn#41 - 1)] +Left keys [4]: [i_category#3, i_brand#2, cc_name#13, rn#19] +Right keys [4]: [i_category#30, i_brand#31, cc_name#32, (rn#35 - 1)] Join condition: None (44) Project [codegen id : 22] -Output [9]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, avg_monthly_sales#24, sum_sales#20, sum_sales#34 AS psum#44, sum_sales#42 AS nsum#45] -Input [14]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, avg_monthly_sales#24, rn#23, sum_sales#34, i_category#36, i_brand#37, cc_name#38, sum_sales#42, rn#41] +Output [9]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, avg_monthly_sales#20, sum_sales#17, sum_sales#29 AS psum#37, sum_sales#36 AS nsum#38] +Input [14]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, avg_monthly_sales#20, rn#19, sum_sales#29, i_category#30, i_brand#31, cc_name#32, sum_sales#36, rn#35] (45) TakeOrderedAndProject -Input [9]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, avg_monthly_sales#24, sum_sales#20, psum#44, nsum#45] -Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#20 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, cc_name#14 ASC NULLS FIRST], [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, avg_monthly_sales#24, sum_sales#20, psum#44, nsum#45] +Input [9]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, avg_monthly_sales#20, sum_sales#17, psum#37, nsum#38] +Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#17 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, cc_name#13 ASC NULLS FIRST], [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, avg_monthly_sales#20, sum_sales#17, psum#37, nsum#38] ===== Subqueries ===== @@ -254,21 +254,21 @@ BroadcastExchange (49) (46) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#11, d_moy#12] +Output [3]: [d_date_sk#9, d_year#10, d_moy#11] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [Or(Or(EqualTo(d_year,1999),And(EqualTo(d_year,1998),EqualTo(d_moy,12))),And(EqualTo(d_year,2000),EqualTo(d_moy,1))), IsNotNull(d_date_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#12] +Input [3]: [d_date_sk#9, d_year#10, d_moy#11] (48) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#12] -Condition : ((((d_year#11 = 1999) OR ((d_year#11 = 1998) AND (d_moy#12 = 12))) OR ((d_year#11 = 2000) AND (d_moy#12 = 1))) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#9, d_year#10, d_moy#11] +Condition : ((((d_year#10 = 1999) OR ((d_year#10 = 1998) AND (d_moy#11 = 12))) OR ((d_year#10 = 2000) AND (d_moy#11 = 1))) AND isnotnull(d_date_sk#9)) (49) BroadcastExchange -Input [3]: [d_date_sk#10, d_year#11, d_moy#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#46] +Input [3]: [d_date_sk#9, d_year#10, d_moy#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58.sf100/explain.txt index abbd29292b260..2f88e2378af8b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58.sf100/explain.txt @@ -93,7 +93,7 @@ Condition : (isnotnull(i_item_sk#6) AND isnotnull(i_item_id#7)) (10) BroadcastExchange Input [2]: [i_item_sk#6, i_item_id#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_item_sk#1] @@ -108,175 +108,175 @@ Input [4]: [ss_item_sk#1, ss_ext_sales_price#2, i_item_sk#6, i_item_id#7] Input [2]: [ss_ext_sales_price#2, i_item_id#7] Keys [1]: [i_item_id#7] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#9] -Results [2]: [i_item_id#7, sum#10] +Aggregate Attributes [1]: [sum#8] +Results [2]: [i_item_id#7, sum#9] (14) Exchange -Input [2]: [i_item_id#7, sum#10] -Arguments: hashpartitioning(i_item_id#7, 5), ENSURE_REQUIREMENTS, [id=#11] +Input [2]: [i_item_id#7, sum#9] +Arguments: hashpartitioning(i_item_id#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 15] -Input [2]: [i_item_id#7, sum#10] +Input [2]: [i_item_id#7, sum#9] Keys [1]: [i_item_id#7] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#12] -Results [2]: [i_item_id#7 AS item_id#13, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#12,17,2) AS ss_item_rev#14] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#10] +Results [2]: [i_item_id#7 AS item_id#11, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#10,17,2) AS ss_item_rev#12] (16) Filter [codegen id : 15] -Input [2]: [item_id#13, ss_item_rev#14] -Condition : isnotnull(ss_item_rev#14) +Input [2]: [item_id#11, ss_item_rev#12] +Condition : isnotnull(ss_item_rev#12) (17) Scan parquet default.catalog_sales -Output [3]: [cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17] +Output [3]: [cs_item_sk#13, cs_ext_sales_price#14, cs_sold_date_sk#15] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#17), dynamicpruningexpression(cs_sold_date_sk#17 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(cs_sold_date_sk#15), dynamicpruningexpression(cs_sold_date_sk#15 IN dynamicpruning#4)] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (18) ColumnarToRow [codegen id : 8] -Input [3]: [cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17] +Input [3]: [cs_item_sk#13, cs_ext_sales_price#14, cs_sold_date_sk#15] (19) Filter [codegen id : 8] -Input [3]: [cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17] -Condition : isnotnull(cs_item_sk#15) +Input [3]: [cs_item_sk#13, cs_ext_sales_price#14, cs_sold_date_sk#15] +Condition : isnotnull(cs_item_sk#13) (20) ReusedExchange [Reuses operator id: 60] -Output [1]: [d_date_sk#18] +Output [1]: [d_date_sk#16] (21) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_sold_date_sk#17] -Right keys [1]: [d_date_sk#18] +Left keys [1]: [cs_sold_date_sk#15] +Right keys [1]: [d_date_sk#16] Join condition: None (22) Project [codegen id : 8] -Output [2]: [cs_item_sk#15, cs_ext_sales_price#16] -Input [4]: [cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17, d_date_sk#18] +Output [2]: [cs_item_sk#13, cs_ext_sales_price#14] +Input [4]: [cs_item_sk#13, cs_ext_sales_price#14, cs_sold_date_sk#15, d_date_sk#16] (23) ReusedExchange [Reuses operator id: 10] -Output [2]: [i_item_sk#19, i_item_id#20] +Output [2]: [i_item_sk#17, i_item_id#18] (24) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_item_sk#15] -Right keys [1]: [i_item_sk#19] +Left keys [1]: [cs_item_sk#13] +Right keys [1]: [i_item_sk#17] Join condition: None (25) Project [codegen id : 8] -Output [2]: [cs_ext_sales_price#16, i_item_id#20] -Input [4]: [cs_item_sk#15, cs_ext_sales_price#16, i_item_sk#19, i_item_id#20] +Output [2]: [cs_ext_sales_price#14, i_item_id#18] +Input [4]: [cs_item_sk#13, cs_ext_sales_price#14, i_item_sk#17, i_item_id#18] (26) HashAggregate [codegen id : 8] -Input [2]: [cs_ext_sales_price#16, i_item_id#20] -Keys [1]: [i_item_id#20] -Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#16))] -Aggregate Attributes [1]: [sum#21] -Results [2]: [i_item_id#20, sum#22] +Input [2]: [cs_ext_sales_price#14, i_item_id#18] +Keys [1]: [i_item_id#18] +Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#14))] +Aggregate Attributes [1]: [sum#19] +Results [2]: [i_item_id#18, sum#20] (27) Exchange -Input [2]: [i_item_id#20, sum#22] -Arguments: hashpartitioning(i_item_id#20, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [2]: [i_item_id#18, sum#20] +Arguments: hashpartitioning(i_item_id#18, 5), ENSURE_REQUIREMENTS, [plan_id=3] (28) HashAggregate [codegen id : 9] -Input [2]: [i_item_id#20, sum#22] -Keys [1]: [i_item_id#20] -Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#16))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#16))#24] -Results [2]: [i_item_id#20 AS item_id#25, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#16))#24,17,2) AS cs_item_rev#26] +Input [2]: [i_item_id#18, sum#20] +Keys [1]: [i_item_id#18] +Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#14))] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#14))#21] +Results [2]: [i_item_id#18 AS item_id#22, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#14))#21,17,2) AS cs_item_rev#23] (29) Filter [codegen id : 9] -Input [2]: [item_id#25, cs_item_rev#26] -Condition : isnotnull(cs_item_rev#26) +Input [2]: [item_id#22, cs_item_rev#23] +Condition : isnotnull(cs_item_rev#23) (30) BroadcastExchange -Input [2]: [item_id#25, cs_item_rev#26] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#27] +Input [2]: [item_id#22, cs_item_rev#23] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=4] (31) BroadcastHashJoin [codegen id : 15] -Left keys [1]: [item_id#13] -Right keys [1]: [item_id#25] -Join condition: ((((cast(ss_item_rev#14 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(cs_item_rev#26)), DecimalType(19,3))) AND (cast(ss_item_rev#14 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(cs_item_rev#26)), DecimalType(20,3)))) AND (cast(cs_item_rev#26 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ss_item_rev#14)), DecimalType(19,3)))) AND (cast(cs_item_rev#26 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ss_item_rev#14)), DecimalType(20,3)))) +Left keys [1]: [item_id#11] +Right keys [1]: [item_id#22] +Join condition: ((((cast(ss_item_rev#12 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(cs_item_rev#23)), DecimalType(19,3))) AND (cast(ss_item_rev#12 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(cs_item_rev#23)), DecimalType(20,3)))) AND (cast(cs_item_rev#23 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ss_item_rev#12)), DecimalType(19,3)))) AND (cast(cs_item_rev#23 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ss_item_rev#12)), DecimalType(20,3)))) (32) Project [codegen id : 15] -Output [3]: [item_id#13, ss_item_rev#14, cs_item_rev#26] -Input [4]: [item_id#13, ss_item_rev#14, item_id#25, cs_item_rev#26] +Output [3]: [item_id#11, ss_item_rev#12, cs_item_rev#23] +Input [4]: [item_id#11, ss_item_rev#12, item_id#22, cs_item_rev#23] (33) Scan parquet default.web_sales -Output [3]: [ws_item_sk#28, ws_ext_sales_price#29, ws_sold_date_sk#30] +Output [3]: [ws_item_sk#24, ws_ext_sales_price#25, ws_sold_date_sk#26] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#30), dynamicpruningexpression(ws_sold_date_sk#30 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(ws_sold_date_sk#26), dynamicpruningexpression(ws_sold_date_sk#26 IN dynamicpruning#4)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 13] -Input [3]: [ws_item_sk#28, ws_ext_sales_price#29, ws_sold_date_sk#30] +Input [3]: [ws_item_sk#24, ws_ext_sales_price#25, ws_sold_date_sk#26] (35) Filter [codegen id : 13] -Input [3]: [ws_item_sk#28, ws_ext_sales_price#29, ws_sold_date_sk#30] -Condition : isnotnull(ws_item_sk#28) +Input [3]: [ws_item_sk#24, ws_ext_sales_price#25, ws_sold_date_sk#26] +Condition : isnotnull(ws_item_sk#24) (36) ReusedExchange [Reuses operator id: 60] -Output [1]: [d_date_sk#31] +Output [1]: [d_date_sk#27] (37) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ws_sold_date_sk#30] -Right keys [1]: [d_date_sk#31] +Left keys [1]: [ws_sold_date_sk#26] +Right keys [1]: [d_date_sk#27] Join condition: None (38) Project [codegen id : 13] -Output [2]: [ws_item_sk#28, ws_ext_sales_price#29] -Input [4]: [ws_item_sk#28, ws_ext_sales_price#29, ws_sold_date_sk#30, d_date_sk#31] +Output [2]: [ws_item_sk#24, ws_ext_sales_price#25] +Input [4]: [ws_item_sk#24, ws_ext_sales_price#25, ws_sold_date_sk#26, d_date_sk#27] (39) ReusedExchange [Reuses operator id: 10] -Output [2]: [i_item_sk#32, i_item_id#33] +Output [2]: [i_item_sk#28, i_item_id#29] (40) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ws_item_sk#28] -Right keys [1]: [i_item_sk#32] +Left keys [1]: [ws_item_sk#24] +Right keys [1]: [i_item_sk#28] Join condition: None (41) Project [codegen id : 13] -Output [2]: [ws_ext_sales_price#29, i_item_id#33] -Input [4]: [ws_item_sk#28, ws_ext_sales_price#29, i_item_sk#32, i_item_id#33] +Output [2]: [ws_ext_sales_price#25, i_item_id#29] +Input [4]: [ws_item_sk#24, ws_ext_sales_price#25, i_item_sk#28, i_item_id#29] (42) HashAggregate [codegen id : 13] -Input [2]: [ws_ext_sales_price#29, i_item_id#33] -Keys [1]: [i_item_id#33] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#29))] -Aggregate Attributes [1]: [sum#34] -Results [2]: [i_item_id#33, sum#35] +Input [2]: [ws_ext_sales_price#25, i_item_id#29] +Keys [1]: [i_item_id#29] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#25))] +Aggregate Attributes [1]: [sum#30] +Results [2]: [i_item_id#29, sum#31] (43) Exchange -Input [2]: [i_item_id#33, sum#35] -Arguments: hashpartitioning(i_item_id#33, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [2]: [i_item_id#29, sum#31] +Arguments: hashpartitioning(i_item_id#29, 5), ENSURE_REQUIREMENTS, [plan_id=5] (44) HashAggregate [codegen id : 14] -Input [2]: [i_item_id#33, sum#35] -Keys [1]: [i_item_id#33] -Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#29))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#29))#37] -Results [2]: [i_item_id#33 AS item_id#38, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#29))#37,17,2) AS ws_item_rev#39] +Input [2]: [i_item_id#29, sum#31] +Keys [1]: [i_item_id#29] +Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#25))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#25))#32] +Results [2]: [i_item_id#29 AS item_id#33, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#25))#32,17,2) AS ws_item_rev#34] (45) Filter [codegen id : 14] -Input [2]: [item_id#38, ws_item_rev#39] -Condition : isnotnull(ws_item_rev#39) +Input [2]: [item_id#33, ws_item_rev#34] +Condition : isnotnull(ws_item_rev#34) (46) BroadcastExchange -Input [2]: [item_id#38, ws_item_rev#39] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#40] +Input [2]: [item_id#33, ws_item_rev#34] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=6] (47) BroadcastHashJoin [codegen id : 15] -Left keys [1]: [item_id#13] -Right keys [1]: [item_id#38] -Join condition: ((((((((cast(ss_item_rev#14 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ws_item_rev#39)), DecimalType(19,3))) AND (cast(ss_item_rev#14 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ws_item_rev#39)), DecimalType(20,3)))) AND (cast(cs_item_rev#26 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ws_item_rev#39)), DecimalType(19,3)))) AND (cast(cs_item_rev#26 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ws_item_rev#39)), DecimalType(20,3)))) AND (cast(ws_item_rev#39 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ss_item_rev#14)), DecimalType(19,3)))) AND (cast(ws_item_rev#39 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ss_item_rev#14)), DecimalType(20,3)))) AND (cast(ws_item_rev#39 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(cs_item_rev#26)), DecimalType(19,3)))) AND (cast(ws_item_rev#39 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(cs_item_rev#26)), DecimalType(20,3)))) +Left keys [1]: [item_id#11] +Right keys [1]: [item_id#33] +Join condition: ((((((((cast(ss_item_rev#12 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ws_item_rev#34)), DecimalType(19,3))) AND (cast(ss_item_rev#12 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ws_item_rev#34)), DecimalType(20,3)))) AND (cast(cs_item_rev#23 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ws_item_rev#34)), DecimalType(19,3)))) AND (cast(cs_item_rev#23 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ws_item_rev#34)), DecimalType(20,3)))) AND (cast(ws_item_rev#34 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ss_item_rev#12)), DecimalType(19,3)))) AND (cast(ws_item_rev#34 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ss_item_rev#12)), DecimalType(20,3)))) AND (cast(ws_item_rev#34 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(cs_item_rev#23)), DecimalType(19,3)))) AND (cast(ws_item_rev#34 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(cs_item_rev#23)), DecimalType(20,3)))) (48) Project [codegen id : 15] -Output [8]: [item_id#13, ss_item_rev#14, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(ss_item_rev#14 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#14 as decimal(18,2))) + promote_precision(cast(cs_item_rev#26 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#39 as decimal(19,2)))), DecimalType(19,2)))), DecimalType(38,21))) / 3.000000000000000000000), DecimalType(38,21))) * 100.000000000000000000000), DecimalType(38,17)) AS ss_dev#41, cs_item_rev#26, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(cs_item_rev#26 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#14 as decimal(18,2))) + promote_precision(cast(cs_item_rev#26 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#39 as decimal(19,2)))), DecimalType(19,2)))), DecimalType(38,21))) / 3.000000000000000000000), DecimalType(38,21))) * 100.000000000000000000000), DecimalType(38,17)) AS cs_dev#42, ws_item_rev#39, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(ws_item_rev#39 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#14 as decimal(18,2))) + promote_precision(cast(cs_item_rev#26 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#39 as decimal(19,2)))), DecimalType(19,2)))), DecimalType(38,21))) / 3.000000000000000000000), DecimalType(38,21))) * 100.000000000000000000000), DecimalType(38,17)) AS ws_dev#43, CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#14 as decimal(18,2))) + promote_precision(cast(cs_item_rev#26 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#39 as decimal(19,2)))), DecimalType(19,2))) / 3.00), DecimalType(23,6)) AS average#44] -Input [5]: [item_id#13, ss_item_rev#14, cs_item_rev#26, item_id#38, ws_item_rev#39] +Output [8]: [item_id#11, ss_item_rev#12, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(ss_item_rev#12 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#12 as decimal(18,2))) + promote_precision(cast(cs_item_rev#23 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#34 as decimal(19,2)))), DecimalType(19,2)))), DecimalType(38,21))) / 3.000000000000000000000), DecimalType(38,21))) * 100.000000000000000000000), DecimalType(38,17)) AS ss_dev#35, cs_item_rev#23, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(cs_item_rev#23 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#12 as decimal(18,2))) + promote_precision(cast(cs_item_rev#23 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#34 as decimal(19,2)))), DecimalType(19,2)))), DecimalType(38,21))) / 3.000000000000000000000), DecimalType(38,21))) * 100.000000000000000000000), DecimalType(38,17)) AS cs_dev#36, ws_item_rev#34, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(ws_item_rev#34 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#12 as decimal(18,2))) + promote_precision(cast(cs_item_rev#23 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#34 as decimal(19,2)))), DecimalType(19,2)))), DecimalType(38,21))) / 3.000000000000000000000), DecimalType(38,21))) * 100.000000000000000000000), DecimalType(38,17)) AS ws_dev#37, CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#12 as decimal(18,2))) + promote_precision(cast(cs_item_rev#23 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#34 as decimal(19,2)))), DecimalType(19,2))) / 3.00), DecimalType(23,6)) AS average#38] +Input [5]: [item_id#11, ss_item_rev#12, cs_item_rev#23, item_id#33, ws_item_rev#34] (49) TakeOrderedAndProject -Input [8]: [item_id#13, ss_item_rev#14, ss_dev#41, cs_item_rev#26, cs_dev#42, ws_item_rev#39, ws_dev#43, average#44] -Arguments: 100, [item_id#13 ASC NULLS FIRST, ss_item_rev#14 ASC NULLS FIRST], [item_id#13, ss_item_rev#14, ss_dev#41, cs_item_rev#26, cs_dev#42, ws_item_rev#39, ws_dev#43, average#44] +Input [8]: [item_id#11, ss_item_rev#12, ss_dev#35, cs_item_rev#23, cs_dev#36, ws_item_rev#34, ws_dev#37, average#38] +Arguments: 100, [item_id#11 ASC NULLS FIRST, ss_item_rev#12 ASC NULLS FIRST], [item_id#11, ss_item_rev#12, ss_dev#35, cs_item_rev#23, cs_dev#36, ws_item_rev#34, ws_dev#37, average#38] ===== Subqueries ===== @@ -295,55 +295,55 @@ BroadcastExchange (60) (50) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_date#45] +Output [2]: [d_date_sk#5, d_date#39] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 2] -Input [2]: [d_date_sk#5, d_date#45] +Input [2]: [d_date_sk#5, d_date#39] (52) Filter [codegen id : 2] -Input [2]: [d_date_sk#5, d_date#45] +Input [2]: [d_date_sk#5, d_date#39] Condition : isnotnull(d_date_sk#5) (53) Scan parquet default.date_dim -Output [2]: [d_date#46, d_week_seq#47] +Output [2]: [d_date#40, d_week_seq#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_week_seq)] ReadSchema: struct (54) ColumnarToRow [codegen id : 1] -Input [2]: [d_date#46, d_week_seq#47] +Input [2]: [d_date#40, d_week_seq#41] (55) Filter [codegen id : 1] -Input [2]: [d_date#46, d_week_seq#47] -Condition : (isnotnull(d_week_seq#47) AND (d_week_seq#47 = Subquery scalar-subquery#48, [id=#49])) +Input [2]: [d_date#40, d_week_seq#41] +Condition : (isnotnull(d_week_seq#41) AND (d_week_seq#41 = Subquery scalar-subquery#42, [id=#43])) (56) Project [codegen id : 1] -Output [1]: [d_date#46] -Input [2]: [d_date#46, d_week_seq#47] +Output [1]: [d_date#40] +Input [2]: [d_date#40, d_week_seq#41] (57) BroadcastExchange -Input [1]: [d_date#46] -Arguments: HashedRelationBroadcastMode(List(input[0, date, true]),false), [id=#50] +Input [1]: [d_date#40] +Arguments: HashedRelationBroadcastMode(List(input[0, date, true]),false), [plan_id=7] (58) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [d_date#45] -Right keys [1]: [d_date#46] +Left keys [1]: [d_date#39] +Right keys [1]: [d_date#40] Join condition: None (59) Project [codegen id : 2] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_date#45] +Input [2]: [d_date_sk#5, d_date#39] (60) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#51] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 55 Hosting Expression = Subquery scalar-subquery#48, [id=#49] +Subquery:2 Hosting operator id = 55 Hosting Expression = Subquery scalar-subquery#42, [id=#43] * Project (64) +- * Filter (63) +- * ColumnarToRow (62) @@ -351,25 +351,25 @@ Subquery:2 Hosting operator id = 55 Hosting Expression = Subquery scalar-subquer (61) Scan parquet default.date_dim -Output [2]: [d_date#52, d_week_seq#53] +Output [2]: [d_date#44, d_week_seq#45] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), EqualTo(d_date,2000-01-03)] ReadSchema: struct (62) ColumnarToRow [codegen id : 1] -Input [2]: [d_date#52, d_week_seq#53] +Input [2]: [d_date#44, d_week_seq#45] (63) Filter [codegen id : 1] -Input [2]: [d_date#52, d_week_seq#53] -Condition : (isnotnull(d_date#52) AND (d_date#52 = 2000-01-03)) +Input [2]: [d_date#44, d_week_seq#45] +Condition : (isnotnull(d_date#44) AND (d_date#44 = 2000-01-03)) (64) Project [codegen id : 1] -Output [1]: [d_week_seq#53] -Input [2]: [d_date#52, d_week_seq#53] +Output [1]: [d_week_seq#45] +Input [2]: [d_date#44, d_week_seq#45] -Subquery:3 Hosting operator id = 17 Hosting Expression = cs_sold_date_sk#17 IN dynamicpruning#4 +Subquery:3 Hosting operator id = 17 Hosting Expression = cs_sold_date_sk#15 IN dynamicpruning#4 -Subquery:4 Hosting operator id = 33 Hosting Expression = ws_sold_date_sk#30 IN dynamicpruning#4 +Subquery:4 Hosting operator id = 33 Hosting Expression = ws_sold_date_sk#26 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58/explain.txt index 47651c0f92dca..4f2b027a0b088 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q58/explain.txt @@ -81,7 +81,7 @@ Condition : (isnotnull(i_item_sk#5) AND isnotnull(i_item_id#6)) (7) BroadcastExchange Input [2]: [i_item_sk#5, i_item_id#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_item_sk#1] @@ -93,190 +93,190 @@ Output [3]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6] Input [5]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_sk#5, i_item_id#6] (10) ReusedExchange [Reuses operator id: 60] -Output [1]: [d_date_sk#8] +Output [1]: [d_date_sk#7] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_date_sk#3] -Right keys [1]: [d_date_sk#8] +Right keys [1]: [d_date_sk#7] Join condition: None (12) Project [codegen id : 4] Output [2]: [ss_ext_sales_price#2, i_item_id#6] -Input [4]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, d_date_sk#8] +Input [4]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, d_date_sk#7] (13) HashAggregate [codegen id : 4] Input [2]: [ss_ext_sales_price#2, i_item_id#6] Keys [1]: [i_item_id#6] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#9] -Results [2]: [i_item_id#6, sum#10] +Aggregate Attributes [1]: [sum#8] +Results [2]: [i_item_id#6, sum#9] (14) Exchange -Input [2]: [i_item_id#6, sum#10] -Arguments: hashpartitioning(i_item_id#6, 5), ENSURE_REQUIREMENTS, [id=#11] +Input [2]: [i_item_id#6, sum#9] +Arguments: hashpartitioning(i_item_id#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 15] -Input [2]: [i_item_id#6, sum#10] +Input [2]: [i_item_id#6, sum#9] Keys [1]: [i_item_id#6] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#12] -Results [2]: [i_item_id#6 AS item_id#13, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#12,17,2) AS ss_item_rev#14] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#10] +Results [2]: [i_item_id#6 AS item_id#11, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#10,17,2) AS ss_item_rev#12] (16) Filter [codegen id : 15] -Input [2]: [item_id#13, ss_item_rev#14] -Condition : isnotnull(ss_item_rev#14) +Input [2]: [item_id#11, ss_item_rev#12] +Condition : isnotnull(ss_item_rev#12) (17) Scan parquet default.catalog_sales -Output [3]: [cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17] +Output [3]: [cs_item_sk#13, cs_ext_sales_price#14, cs_sold_date_sk#15] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#17), dynamicpruningexpression(cs_sold_date_sk#17 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(cs_sold_date_sk#15), dynamicpruningexpression(cs_sold_date_sk#15 IN dynamicpruning#4)] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (18) ColumnarToRow [codegen id : 8] -Input [3]: [cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17] +Input [3]: [cs_item_sk#13, cs_ext_sales_price#14, cs_sold_date_sk#15] (19) Filter [codegen id : 8] -Input [3]: [cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17] -Condition : isnotnull(cs_item_sk#15) +Input [3]: [cs_item_sk#13, cs_ext_sales_price#14, cs_sold_date_sk#15] +Condition : isnotnull(cs_item_sk#13) (20) ReusedExchange [Reuses operator id: 7] -Output [2]: [i_item_sk#18, i_item_id#19] +Output [2]: [i_item_sk#16, i_item_id#17] (21) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_item_sk#15] -Right keys [1]: [i_item_sk#18] +Left keys [1]: [cs_item_sk#13] +Right keys [1]: [i_item_sk#16] Join condition: None (22) Project [codegen id : 8] -Output [3]: [cs_ext_sales_price#16, cs_sold_date_sk#17, i_item_id#19] -Input [5]: [cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17, i_item_sk#18, i_item_id#19] +Output [3]: [cs_ext_sales_price#14, cs_sold_date_sk#15, i_item_id#17] +Input [5]: [cs_item_sk#13, cs_ext_sales_price#14, cs_sold_date_sk#15, i_item_sk#16, i_item_id#17] (23) ReusedExchange [Reuses operator id: 60] -Output [1]: [d_date_sk#20] +Output [1]: [d_date_sk#18] (24) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_sold_date_sk#17] -Right keys [1]: [d_date_sk#20] +Left keys [1]: [cs_sold_date_sk#15] +Right keys [1]: [d_date_sk#18] Join condition: None (25) Project [codegen id : 8] -Output [2]: [cs_ext_sales_price#16, i_item_id#19] -Input [4]: [cs_ext_sales_price#16, cs_sold_date_sk#17, i_item_id#19, d_date_sk#20] +Output [2]: [cs_ext_sales_price#14, i_item_id#17] +Input [4]: [cs_ext_sales_price#14, cs_sold_date_sk#15, i_item_id#17, d_date_sk#18] (26) HashAggregate [codegen id : 8] -Input [2]: [cs_ext_sales_price#16, i_item_id#19] -Keys [1]: [i_item_id#19] -Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#16))] -Aggregate Attributes [1]: [sum#21] -Results [2]: [i_item_id#19, sum#22] +Input [2]: [cs_ext_sales_price#14, i_item_id#17] +Keys [1]: [i_item_id#17] +Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#14))] +Aggregate Attributes [1]: [sum#19] +Results [2]: [i_item_id#17, sum#20] (27) Exchange -Input [2]: [i_item_id#19, sum#22] -Arguments: hashpartitioning(i_item_id#19, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [2]: [i_item_id#17, sum#20] +Arguments: hashpartitioning(i_item_id#17, 5), ENSURE_REQUIREMENTS, [plan_id=3] (28) HashAggregate [codegen id : 9] -Input [2]: [i_item_id#19, sum#22] -Keys [1]: [i_item_id#19] -Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#16))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#16))#24] -Results [2]: [i_item_id#19 AS item_id#25, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#16))#24,17,2) AS cs_item_rev#26] +Input [2]: [i_item_id#17, sum#20] +Keys [1]: [i_item_id#17] +Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#14))] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#14))#21] +Results [2]: [i_item_id#17 AS item_id#22, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#14))#21,17,2) AS cs_item_rev#23] (29) Filter [codegen id : 9] -Input [2]: [item_id#25, cs_item_rev#26] -Condition : isnotnull(cs_item_rev#26) +Input [2]: [item_id#22, cs_item_rev#23] +Condition : isnotnull(cs_item_rev#23) (30) BroadcastExchange -Input [2]: [item_id#25, cs_item_rev#26] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#27] +Input [2]: [item_id#22, cs_item_rev#23] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=4] (31) BroadcastHashJoin [codegen id : 15] -Left keys [1]: [item_id#13] -Right keys [1]: [item_id#25] -Join condition: ((((cast(ss_item_rev#14 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(cs_item_rev#26)), DecimalType(19,3))) AND (cast(ss_item_rev#14 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(cs_item_rev#26)), DecimalType(20,3)))) AND (cast(cs_item_rev#26 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ss_item_rev#14)), DecimalType(19,3)))) AND (cast(cs_item_rev#26 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ss_item_rev#14)), DecimalType(20,3)))) +Left keys [1]: [item_id#11] +Right keys [1]: [item_id#22] +Join condition: ((((cast(ss_item_rev#12 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(cs_item_rev#23)), DecimalType(19,3))) AND (cast(ss_item_rev#12 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(cs_item_rev#23)), DecimalType(20,3)))) AND (cast(cs_item_rev#23 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ss_item_rev#12)), DecimalType(19,3)))) AND (cast(cs_item_rev#23 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ss_item_rev#12)), DecimalType(20,3)))) (32) Project [codegen id : 15] -Output [3]: [item_id#13, ss_item_rev#14, cs_item_rev#26] -Input [4]: [item_id#13, ss_item_rev#14, item_id#25, cs_item_rev#26] +Output [3]: [item_id#11, ss_item_rev#12, cs_item_rev#23] +Input [4]: [item_id#11, ss_item_rev#12, item_id#22, cs_item_rev#23] (33) Scan parquet default.web_sales -Output [3]: [ws_item_sk#28, ws_ext_sales_price#29, ws_sold_date_sk#30] +Output [3]: [ws_item_sk#24, ws_ext_sales_price#25, ws_sold_date_sk#26] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#30), dynamicpruningexpression(ws_sold_date_sk#30 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(ws_sold_date_sk#26), dynamicpruningexpression(ws_sold_date_sk#26 IN dynamicpruning#4)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 13] -Input [3]: [ws_item_sk#28, ws_ext_sales_price#29, ws_sold_date_sk#30] +Input [3]: [ws_item_sk#24, ws_ext_sales_price#25, ws_sold_date_sk#26] (35) Filter [codegen id : 13] -Input [3]: [ws_item_sk#28, ws_ext_sales_price#29, ws_sold_date_sk#30] -Condition : isnotnull(ws_item_sk#28) +Input [3]: [ws_item_sk#24, ws_ext_sales_price#25, ws_sold_date_sk#26] +Condition : isnotnull(ws_item_sk#24) (36) ReusedExchange [Reuses operator id: 7] -Output [2]: [i_item_sk#31, i_item_id#32] +Output [2]: [i_item_sk#27, i_item_id#28] (37) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ws_item_sk#28] -Right keys [1]: [i_item_sk#31] +Left keys [1]: [ws_item_sk#24] +Right keys [1]: [i_item_sk#27] Join condition: None (38) Project [codegen id : 13] -Output [3]: [ws_ext_sales_price#29, ws_sold_date_sk#30, i_item_id#32] -Input [5]: [ws_item_sk#28, ws_ext_sales_price#29, ws_sold_date_sk#30, i_item_sk#31, i_item_id#32] +Output [3]: [ws_ext_sales_price#25, ws_sold_date_sk#26, i_item_id#28] +Input [5]: [ws_item_sk#24, ws_ext_sales_price#25, ws_sold_date_sk#26, i_item_sk#27, i_item_id#28] (39) ReusedExchange [Reuses operator id: 60] -Output [1]: [d_date_sk#33] +Output [1]: [d_date_sk#29] (40) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ws_sold_date_sk#30] -Right keys [1]: [d_date_sk#33] +Left keys [1]: [ws_sold_date_sk#26] +Right keys [1]: [d_date_sk#29] Join condition: None (41) Project [codegen id : 13] -Output [2]: [ws_ext_sales_price#29, i_item_id#32] -Input [4]: [ws_ext_sales_price#29, ws_sold_date_sk#30, i_item_id#32, d_date_sk#33] +Output [2]: [ws_ext_sales_price#25, i_item_id#28] +Input [4]: [ws_ext_sales_price#25, ws_sold_date_sk#26, i_item_id#28, d_date_sk#29] (42) HashAggregate [codegen id : 13] -Input [2]: [ws_ext_sales_price#29, i_item_id#32] -Keys [1]: [i_item_id#32] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#29))] -Aggregate Attributes [1]: [sum#34] -Results [2]: [i_item_id#32, sum#35] +Input [2]: [ws_ext_sales_price#25, i_item_id#28] +Keys [1]: [i_item_id#28] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#25))] +Aggregate Attributes [1]: [sum#30] +Results [2]: [i_item_id#28, sum#31] (43) Exchange -Input [2]: [i_item_id#32, sum#35] -Arguments: hashpartitioning(i_item_id#32, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [2]: [i_item_id#28, sum#31] +Arguments: hashpartitioning(i_item_id#28, 5), ENSURE_REQUIREMENTS, [plan_id=5] (44) HashAggregate [codegen id : 14] -Input [2]: [i_item_id#32, sum#35] -Keys [1]: [i_item_id#32] -Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#29))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#29))#37] -Results [2]: [i_item_id#32 AS item_id#38, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#29))#37,17,2) AS ws_item_rev#39] +Input [2]: [i_item_id#28, sum#31] +Keys [1]: [i_item_id#28] +Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#25))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#25))#32] +Results [2]: [i_item_id#28 AS item_id#33, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#25))#32,17,2) AS ws_item_rev#34] (45) Filter [codegen id : 14] -Input [2]: [item_id#38, ws_item_rev#39] -Condition : isnotnull(ws_item_rev#39) +Input [2]: [item_id#33, ws_item_rev#34] +Condition : isnotnull(ws_item_rev#34) (46) BroadcastExchange -Input [2]: [item_id#38, ws_item_rev#39] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#40] +Input [2]: [item_id#33, ws_item_rev#34] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=6] (47) BroadcastHashJoin [codegen id : 15] -Left keys [1]: [item_id#13] -Right keys [1]: [item_id#38] -Join condition: ((((((((cast(ss_item_rev#14 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ws_item_rev#39)), DecimalType(19,3))) AND (cast(ss_item_rev#14 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ws_item_rev#39)), DecimalType(20,3)))) AND (cast(cs_item_rev#26 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ws_item_rev#39)), DecimalType(19,3)))) AND (cast(cs_item_rev#26 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ws_item_rev#39)), DecimalType(20,3)))) AND (cast(ws_item_rev#39 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ss_item_rev#14)), DecimalType(19,3)))) AND (cast(ws_item_rev#39 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ss_item_rev#14)), DecimalType(20,3)))) AND (cast(ws_item_rev#39 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(cs_item_rev#26)), DecimalType(19,3)))) AND (cast(ws_item_rev#39 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(cs_item_rev#26)), DecimalType(20,3)))) +Left keys [1]: [item_id#11] +Right keys [1]: [item_id#33] +Join condition: ((((((((cast(ss_item_rev#12 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ws_item_rev#34)), DecimalType(19,3))) AND (cast(ss_item_rev#12 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ws_item_rev#34)), DecimalType(20,3)))) AND (cast(cs_item_rev#23 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ws_item_rev#34)), DecimalType(19,3)))) AND (cast(cs_item_rev#23 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ws_item_rev#34)), DecimalType(20,3)))) AND (cast(ws_item_rev#34 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(ss_item_rev#12)), DecimalType(19,3)))) AND (cast(ws_item_rev#34 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(ss_item_rev#12)), DecimalType(20,3)))) AND (cast(ws_item_rev#34 as decimal(19,3)) >= CheckOverflow((0.90 * promote_precision(cs_item_rev#23)), DecimalType(19,3)))) AND (cast(ws_item_rev#34 as decimal(20,3)) <= CheckOverflow((1.10 * promote_precision(cs_item_rev#23)), DecimalType(20,3)))) (48) Project [codegen id : 15] -Output [8]: [item_id#13, ss_item_rev#14, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(ss_item_rev#14 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#14 as decimal(18,2))) + promote_precision(cast(cs_item_rev#26 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#39 as decimal(19,2)))), DecimalType(19,2)))), DecimalType(38,21))) / 3.000000000000000000000), DecimalType(38,21))) * 100.000000000000000000000), DecimalType(38,17)) AS ss_dev#41, cs_item_rev#26, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(cs_item_rev#26 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#14 as decimal(18,2))) + promote_precision(cast(cs_item_rev#26 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#39 as decimal(19,2)))), DecimalType(19,2)))), DecimalType(38,21))) / 3.000000000000000000000), DecimalType(38,21))) * 100.000000000000000000000), DecimalType(38,17)) AS cs_dev#42, ws_item_rev#39, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(ws_item_rev#39 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#14 as decimal(18,2))) + promote_precision(cast(cs_item_rev#26 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#39 as decimal(19,2)))), DecimalType(19,2)))), DecimalType(38,21))) / 3.000000000000000000000), DecimalType(38,21))) * 100.000000000000000000000), DecimalType(38,17)) AS ws_dev#43, CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#14 as decimal(18,2))) + promote_precision(cast(cs_item_rev#26 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#39 as decimal(19,2)))), DecimalType(19,2))) / 3.00), DecimalType(23,6)) AS average#44] -Input [5]: [item_id#13, ss_item_rev#14, cs_item_rev#26, item_id#38, ws_item_rev#39] +Output [8]: [item_id#11, ss_item_rev#12, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(ss_item_rev#12 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#12 as decimal(18,2))) + promote_precision(cast(cs_item_rev#23 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#34 as decimal(19,2)))), DecimalType(19,2)))), DecimalType(38,21))) / 3.000000000000000000000), DecimalType(38,21))) * 100.000000000000000000000), DecimalType(38,17)) AS ss_dev#35, cs_item_rev#23, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(cs_item_rev#23 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#12 as decimal(18,2))) + promote_precision(cast(cs_item_rev#23 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#34 as decimal(19,2)))), DecimalType(19,2)))), DecimalType(38,21))) / 3.000000000000000000000), DecimalType(38,21))) * 100.000000000000000000000), DecimalType(38,17)) AS cs_dev#36, ws_item_rev#34, CheckOverflow((promote_precision(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(ws_item_rev#34 as decimal(19,2))) / promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#12 as decimal(18,2))) + promote_precision(cast(cs_item_rev#23 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#34 as decimal(19,2)))), DecimalType(19,2)))), DecimalType(38,21))) / 3.000000000000000000000), DecimalType(38,21))) * 100.000000000000000000000), DecimalType(38,17)) AS ws_dev#37, CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(ss_item_rev#12 as decimal(18,2))) + promote_precision(cast(cs_item_rev#23 as decimal(18,2)))), DecimalType(18,2)) as decimal(19,2))) + promote_precision(cast(ws_item_rev#34 as decimal(19,2)))), DecimalType(19,2))) / 3.00), DecimalType(23,6)) AS average#38] +Input [5]: [item_id#11, ss_item_rev#12, cs_item_rev#23, item_id#33, ws_item_rev#34] (49) TakeOrderedAndProject -Input [8]: [item_id#13, ss_item_rev#14, ss_dev#41, cs_item_rev#26, cs_dev#42, ws_item_rev#39, ws_dev#43, average#44] -Arguments: 100, [item_id#13 ASC NULLS FIRST, ss_item_rev#14 ASC NULLS FIRST], [item_id#13, ss_item_rev#14, ss_dev#41, cs_item_rev#26, cs_dev#42, ws_item_rev#39, ws_dev#43, average#44] +Input [8]: [item_id#11, ss_item_rev#12, ss_dev#35, cs_item_rev#23, cs_dev#36, ws_item_rev#34, ws_dev#37, average#38] +Arguments: 100, [item_id#11 ASC NULLS FIRST, ss_item_rev#12 ASC NULLS FIRST], [item_id#11, ss_item_rev#12, ss_dev#35, cs_item_rev#23, cs_dev#36, ws_item_rev#34, ws_dev#37, average#38] ===== Subqueries ===== @@ -295,55 +295,55 @@ BroadcastExchange (60) (50) Scan parquet default.date_dim -Output [2]: [d_date_sk#8, d_date#45] +Output [2]: [d_date_sk#7, d_date#39] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 2] -Input [2]: [d_date_sk#8, d_date#45] +Input [2]: [d_date_sk#7, d_date#39] (52) Filter [codegen id : 2] -Input [2]: [d_date_sk#8, d_date#45] -Condition : isnotnull(d_date_sk#8) +Input [2]: [d_date_sk#7, d_date#39] +Condition : isnotnull(d_date_sk#7) (53) Scan parquet default.date_dim -Output [2]: [d_date#46, d_week_seq#47] +Output [2]: [d_date#40, d_week_seq#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_week_seq)] ReadSchema: struct (54) ColumnarToRow [codegen id : 1] -Input [2]: [d_date#46, d_week_seq#47] +Input [2]: [d_date#40, d_week_seq#41] (55) Filter [codegen id : 1] -Input [2]: [d_date#46, d_week_seq#47] -Condition : (isnotnull(d_week_seq#47) AND (d_week_seq#47 = Subquery scalar-subquery#48, [id=#49])) +Input [2]: [d_date#40, d_week_seq#41] +Condition : (isnotnull(d_week_seq#41) AND (d_week_seq#41 = Subquery scalar-subquery#42, [id=#43])) (56) Project [codegen id : 1] -Output [1]: [d_date#46] -Input [2]: [d_date#46, d_week_seq#47] +Output [1]: [d_date#40] +Input [2]: [d_date#40, d_week_seq#41] (57) BroadcastExchange -Input [1]: [d_date#46] -Arguments: HashedRelationBroadcastMode(List(input[0, date, true]),false), [id=#50] +Input [1]: [d_date#40] +Arguments: HashedRelationBroadcastMode(List(input[0, date, true]),false), [plan_id=7] (58) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [d_date#45] -Right keys [1]: [d_date#46] +Left keys [1]: [d_date#39] +Right keys [1]: [d_date#40] Join condition: None (59) Project [codegen id : 2] -Output [1]: [d_date_sk#8] -Input [2]: [d_date_sk#8, d_date#45] +Output [1]: [d_date_sk#7] +Input [2]: [d_date_sk#7, d_date#39] (60) BroadcastExchange -Input [1]: [d_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#51] +Input [1]: [d_date_sk#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 55 Hosting Expression = Subquery scalar-subquery#48, [id=#49] +Subquery:2 Hosting operator id = 55 Hosting Expression = Subquery scalar-subquery#42, [id=#43] * Project (64) +- * Filter (63) +- * ColumnarToRow (62) @@ -351,25 +351,25 @@ Subquery:2 Hosting operator id = 55 Hosting Expression = Subquery scalar-subquer (61) Scan parquet default.date_dim -Output [2]: [d_date#52, d_week_seq#53] +Output [2]: [d_date#44, d_week_seq#45] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), EqualTo(d_date,2000-01-03)] ReadSchema: struct (62) ColumnarToRow [codegen id : 1] -Input [2]: [d_date#52, d_week_seq#53] +Input [2]: [d_date#44, d_week_seq#45] (63) Filter [codegen id : 1] -Input [2]: [d_date#52, d_week_seq#53] -Condition : (isnotnull(d_date#52) AND (d_date#52 = 2000-01-03)) +Input [2]: [d_date#44, d_week_seq#45] +Condition : (isnotnull(d_date#44) AND (d_date#44 = 2000-01-03)) (64) Project [codegen id : 1] -Output [1]: [d_week_seq#53] -Input [2]: [d_date#52, d_week_seq#53] +Output [1]: [d_week_seq#45] +Input [2]: [d_date#44, d_week_seq#45] -Subquery:3 Hosting operator id = 17 Hosting Expression = cs_sold_date_sk#17 IN dynamicpruning#4 +Subquery:3 Hosting operator id = 17 Hosting Expression = cs_sold_date_sk#15 IN dynamicpruning#4 -Subquery:4 Hosting operator id = 33 Hosting Expression = ws_sold_date_sk#30 IN dynamicpruning#4 +Subquery:4 Hosting operator id = 33 Hosting Expression = ws_sold_date_sk#26 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q59.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q59.sf100/explain.txt index be6cb14346fdf..551e26665035b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q59.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q59.sf100/explain.txt @@ -86,7 +86,7 @@ Condition : ((isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) AND might_cont (7) BroadcastExchange Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 2] Left keys [1]: [ss_sold_date_sk#3] @@ -101,77 +101,77 @@ Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_w Input [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [7]: [sum#10, sum#11, sum#12, sum#13, sum#14, sum#15, sum#16] -Results [9]: [d_week_seq#5, ss_store_sk#1, sum#17, sum#18, sum#19, sum#20, sum#21, sum#22, sum#23] +Aggregate Attributes [7]: [sum#9, sum#10, sum#11, sum#12, sum#13, sum#14, sum#15] +Results [9]: [d_week_seq#5, ss_store_sk#1, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21, sum#22] (11) Exchange -Input [9]: [d_week_seq#5, ss_store_sk#1, sum#17, sum#18, sum#19, sum#20, sum#21, sum#22, sum#23] -Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [9]: [d_week_seq#5, ss_store_sk#1, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21, sum#22] +Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) HashAggregate [codegen id : 10] -Input [9]: [d_week_seq#5, ss_store_sk#1, sum#17, sum#18, sum#19, sum#20, sum#21, sum#22, sum#23] +Input [9]: [d_week_seq#5, ss_store_sk#1, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21, sum#22] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#31] -Results [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#25,17,2) AS sun_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#26,17,2) AS mon_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#27,17,2) AS tue_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#28,17,2) AS wed_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#29,17,2) AS thu_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#30,17,2) AS fri_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#31,17,2) AS sat_sales#38] +Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29] +Results [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#25,17,2) AS tue_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26,17,2) AS wed_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27,17,2) AS thu_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28,17,2) AS fri_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29,17,2) AS sat_sales#36] (13) Scan parquet default.store -Output [3]: [s_store_sk#39, s_store_id#40, s_store_name#41] +Output [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [3]: [s_store_sk#39, s_store_id#40, s_store_name#41] +Input [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] (15) Filter [codegen id : 3] -Input [3]: [s_store_sk#39, s_store_id#40, s_store_name#41] -Condition : (isnotnull(s_store_sk#39) AND isnotnull(s_store_id#40)) +Input [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] +Condition : (isnotnull(s_store_sk#37) AND isnotnull(s_store_id#38)) (16) BroadcastExchange -Input [3]: [s_store_sk#39, s_store_id#40, s_store_name#41] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#42] +Input [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (17) BroadcastHashJoin [codegen id : 10] Left keys [1]: [ss_store_sk#1] -Right keys [1]: [s_store_sk#39] +Right keys [1]: [s_store_sk#37] Join condition: None (18) Project [codegen id : 10] -Output [10]: [d_week_seq#5, sun_sales#32, mon_sales#33, tue_sales#34, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38, s_store_id#40, s_store_name#41] -Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#32, mon_sales#33, tue_sales#34, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38, s_store_sk#39, s_store_id#40, s_store_name#41] +Output [10]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#38, s_store_name#39] +Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#37, s_store_id#38, s_store_name#39] (19) Scan parquet default.date_dim -Output [2]: [d_month_seq#43, d_week_seq#44] +Output [2]: [d_month_seq#40, d_week_seq#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_week_seq)] ReadSchema: struct (20) ColumnarToRow [codegen id : 4] -Input [2]: [d_month_seq#43, d_week_seq#44] +Input [2]: [d_month_seq#40, d_week_seq#41] (21) Filter [codegen id : 4] -Input [2]: [d_month_seq#43, d_week_seq#44] -Condition : (((isnotnull(d_month_seq#43) AND (d_month_seq#43 >= 1212)) AND (d_month_seq#43 <= 1223)) AND isnotnull(d_week_seq#44)) +Input [2]: [d_month_seq#40, d_week_seq#41] +Condition : (((isnotnull(d_month_seq#40) AND (d_month_seq#40 >= 1212)) AND (d_month_seq#40 <= 1223)) AND isnotnull(d_week_seq#41)) (22) Project [codegen id : 4] -Output [1]: [d_week_seq#44] -Input [2]: [d_month_seq#43, d_week_seq#44] +Output [1]: [d_week_seq#41] +Input [2]: [d_month_seq#40, d_week_seq#41] (23) BroadcastExchange -Input [1]: [d_week_seq#44] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#45] +Input [1]: [d_week_seq#41] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (24) BroadcastHashJoin [codegen id : 10] Left keys [1]: [d_week_seq#5] -Right keys [1]: [d_week_seq#44] +Right keys [1]: [d_week_seq#41] Join condition: None (25) Project [codegen id : 10] -Output [10]: [s_store_name#41 AS s_store_name1#46, d_week_seq#5 AS d_week_seq1#47, s_store_id#40 AS s_store_id1#48, sun_sales#32 AS sun_sales1#49, mon_sales#33 AS mon_sales1#50, tue_sales#34 AS tue_sales1#51, wed_sales#35 AS wed_sales1#52, thu_sales#36 AS thu_sales1#53, fri_sales#37 AS fri_sales1#54, sat_sales#38 AS sat_sales1#55] -Input [11]: [d_week_seq#5, sun_sales#32, mon_sales#33, tue_sales#34, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38, s_store_id#40, s_store_name#41, d_week_seq#44] +Output [10]: [s_store_name#39 AS s_store_name1#42, d_week_seq#5 AS d_week_seq1#43, s_store_id#38 AS s_store_id1#44, sun_sales#30 AS sun_sales1#45, mon_sales#31 AS mon_sales1#46, tue_sales#32 AS tue_sales1#47, wed_sales#33 AS wed_sales1#48, thu_sales#34 AS thu_sales1#49, fri_sales#35 AS fri_sales1#50, sat_sales#36 AS sat_sales1#51] +Input [11]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#38, s_store_name#39, d_week_seq#41] (26) Scan parquet default.store_sales Output [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3] @@ -200,11 +200,11 @@ Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] (31) Filter [codegen id : 5] Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Condition : ((isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) AND might_contain(Subquery scalar-subquery#56, [id=#57], xxhash64(d_week_seq#5, 42))) +Condition : ((isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) AND might_contain(Subquery scalar-subquery#52, [id=#53], xxhash64(d_week_seq#5, 42))) (32) BroadcastExchange Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#58] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (33) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_sold_date_sk#3] @@ -219,94 +219,94 @@ Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_w Input [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [7]: [sum#59, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65] -Results [9]: [d_week_seq#5, ss_store_sk#1, sum#66, sum#67, sum#68, sum#69, sum#70, sum#71, sum#72] +Aggregate Attributes [7]: [sum#54, sum#55, sum#56, sum#57, sum#58, sum#59, sum#60] +Results [9]: [d_week_seq#5, ss_store_sk#1, sum#61, sum#62, sum#63, sum#64, sum#65, sum#66, sum#67] (36) Exchange -Input [9]: [d_week_seq#5, ss_store_sk#1, sum#66, sum#67, sum#68, sum#69, sum#70, sum#71, sum#72] -Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [id=#73] +Input [9]: [d_week_seq#5, ss_store_sk#1, sum#61, sum#62, sum#63, sum#64, sum#65, sum#66, sum#67] +Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=6] (37) HashAggregate [codegen id : 9] -Input [9]: [d_week_seq#5, ss_store_sk#1, sum#66, sum#67, sum#68, sum#69, sum#70, sum#71, sum#72] +Input [9]: [d_week_seq#5, ss_store_sk#1, sum#61, sum#62, sum#63, sum#64, sum#65, sum#66, sum#67] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#31] -Results [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#25,17,2) AS sun_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#26,17,2) AS mon_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#27,17,2) AS tue_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#28,17,2) AS wed_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#29,17,2) AS thu_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#30,17,2) AS fri_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#31,17,2) AS sat_sales#38] +Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29] +Results [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#25,17,2) AS tue_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26,17,2) AS wed_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27,17,2) AS thu_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28,17,2) AS fri_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29,17,2) AS sat_sales#36] (38) Scan parquet default.store -Output [2]: [s_store_sk#74, s_store_id#75] +Output [2]: [s_store_sk#68, s_store_id#69] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct (39) ColumnarToRow [codegen id : 7] -Input [2]: [s_store_sk#74, s_store_id#75] +Input [2]: [s_store_sk#68, s_store_id#69] (40) Filter [codegen id : 7] -Input [2]: [s_store_sk#74, s_store_id#75] -Condition : (isnotnull(s_store_sk#74) AND isnotnull(s_store_id#75)) +Input [2]: [s_store_sk#68, s_store_id#69] +Condition : (isnotnull(s_store_sk#68) AND isnotnull(s_store_id#69)) (41) BroadcastExchange -Input [2]: [s_store_sk#74, s_store_id#75] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#76] +Input [2]: [s_store_sk#68, s_store_id#69] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (42) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#1] -Right keys [1]: [s_store_sk#74] +Right keys [1]: [s_store_sk#68] Join condition: None (43) Project [codegen id : 9] -Output [9]: [d_week_seq#5, sun_sales#32, mon_sales#33, tue_sales#34, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38, s_store_id#75] -Input [11]: [d_week_seq#5, ss_store_sk#1, sun_sales#32, mon_sales#33, tue_sales#34, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38, s_store_sk#74, s_store_id#75] +Output [9]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#69] +Input [11]: [d_week_seq#5, ss_store_sk#1, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#68, s_store_id#69] (44) Scan parquet default.date_dim -Output [2]: [d_month_seq#77, d_week_seq#78] +Output [2]: [d_month_seq#70, d_week_seq#71] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1224), LessThanOrEqual(d_month_seq,1235), IsNotNull(d_week_seq)] ReadSchema: struct (45) ColumnarToRow [codegen id : 8] -Input [2]: [d_month_seq#77, d_week_seq#78] +Input [2]: [d_month_seq#70, d_week_seq#71] (46) Filter [codegen id : 8] -Input [2]: [d_month_seq#77, d_week_seq#78] -Condition : (((isnotnull(d_month_seq#77) AND (d_month_seq#77 >= 1224)) AND (d_month_seq#77 <= 1235)) AND isnotnull(d_week_seq#78)) +Input [2]: [d_month_seq#70, d_week_seq#71] +Condition : (((isnotnull(d_month_seq#70) AND (d_month_seq#70 >= 1224)) AND (d_month_seq#70 <= 1235)) AND isnotnull(d_week_seq#71)) (47) Project [codegen id : 8] -Output [1]: [d_week_seq#78] -Input [2]: [d_month_seq#77, d_week_seq#78] +Output [1]: [d_week_seq#71] +Input [2]: [d_month_seq#70, d_week_seq#71] (48) BroadcastExchange -Input [1]: [d_week_seq#78] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#79] +Input [1]: [d_week_seq#71] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] (49) BroadcastHashJoin [codegen id : 9] Left keys [1]: [d_week_seq#5] -Right keys [1]: [d_week_seq#78] +Right keys [1]: [d_week_seq#71] Join condition: None (50) Project [codegen id : 9] -Output [9]: [d_week_seq#5 AS d_week_seq2#80, s_store_id#75 AS s_store_id2#81, sun_sales#32 AS sun_sales2#82, mon_sales#33 AS mon_sales2#83, tue_sales#34 AS tue_sales2#84, wed_sales#35 AS wed_sales2#85, thu_sales#36 AS thu_sales2#86, fri_sales#37 AS fri_sales2#87, sat_sales#38 AS sat_sales2#88] -Input [10]: [d_week_seq#5, sun_sales#32, mon_sales#33, tue_sales#34, wed_sales#35, thu_sales#36, fri_sales#37, sat_sales#38, s_store_id#75, d_week_seq#78] +Output [9]: [d_week_seq#5 AS d_week_seq2#72, s_store_id#69 AS s_store_id2#73, sun_sales#30 AS sun_sales2#74, mon_sales#31 AS mon_sales2#75, tue_sales#32 AS tue_sales2#76, wed_sales#33 AS wed_sales2#77, thu_sales#34 AS thu_sales2#78, fri_sales#35 AS fri_sales2#79, sat_sales#36 AS sat_sales2#80] +Input [10]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#69, d_week_seq#71] (51) BroadcastExchange -Input [9]: [d_week_seq2#80, s_store_id2#81, sun_sales2#82, mon_sales2#83, tue_sales2#84, wed_sales2#85, thu_sales2#86, fri_sales2#87, sat_sales2#88] -Arguments: HashedRelationBroadcastMode(List(input[1, string, true], (input[0, int, true] - 52)),false), [id=#89] +Input [9]: [d_week_seq2#72, s_store_id2#73, sun_sales2#74, mon_sales2#75, tue_sales2#76, wed_sales2#77, thu_sales2#78, fri_sales2#79, sat_sales2#80] +Arguments: HashedRelationBroadcastMode(List(input[1, string, true], (input[0, int, true] - 52)),false), [plan_id=9] (52) BroadcastHashJoin [codegen id : 10] -Left keys [2]: [s_store_id1#48, d_week_seq1#47] -Right keys [2]: [s_store_id2#81, (d_week_seq2#80 - 52)] +Left keys [2]: [s_store_id1#44, d_week_seq1#43] +Right keys [2]: [s_store_id2#73, (d_week_seq2#72 - 52)] Join condition: None (53) Project [codegen id : 10] -Output [10]: [s_store_name1#46, s_store_id1#48, d_week_seq1#47, CheckOverflow((promote_precision(sun_sales1#49) / promote_precision(sun_sales2#82)), DecimalType(37,20)) AS (sun_sales1 / sun_sales2)#90, CheckOverflow((promote_precision(mon_sales1#50) / promote_precision(mon_sales2#83)), DecimalType(37,20)) AS (mon_sales1 / mon_sales2)#91, CheckOverflow((promote_precision(tue_sales1#51) / promote_precision(tue_sales2#84)), DecimalType(37,20)) AS (tue_sales1 / tue_sales2)#92, CheckOverflow((promote_precision(wed_sales1#52) / promote_precision(wed_sales2#85)), DecimalType(37,20)) AS (wed_sales1 / wed_sales2)#93, CheckOverflow((promote_precision(thu_sales1#53) / promote_precision(thu_sales2#86)), DecimalType(37,20)) AS (thu_sales1 / thu_sales2)#94, CheckOverflow((promote_precision(fri_sales1#54) / promote_precision(fri_sales2#87)), DecimalType(37,20)) AS (fri_sales1 / fri_sales2)#95, CheckOverflow((promote_precision(sat_sales1#55) / promote_precision(sat_sales2#88)), DecimalType(37,20)) AS (sat_sales1 / sat_sales2)#96] -Input [19]: [s_store_name1#46, d_week_seq1#47, s_store_id1#48, sun_sales1#49, mon_sales1#50, tue_sales1#51, wed_sales1#52, thu_sales1#53, fri_sales1#54, sat_sales1#55, d_week_seq2#80, s_store_id2#81, sun_sales2#82, mon_sales2#83, tue_sales2#84, wed_sales2#85, thu_sales2#86, fri_sales2#87, sat_sales2#88] +Output [10]: [s_store_name1#42, s_store_id1#44, d_week_seq1#43, CheckOverflow((promote_precision(sun_sales1#45) / promote_precision(sun_sales2#74)), DecimalType(37,20)) AS (sun_sales1 / sun_sales2)#81, CheckOverflow((promote_precision(mon_sales1#46) / promote_precision(mon_sales2#75)), DecimalType(37,20)) AS (mon_sales1 / mon_sales2)#82, CheckOverflow((promote_precision(tue_sales1#47) / promote_precision(tue_sales2#76)), DecimalType(37,20)) AS (tue_sales1 / tue_sales2)#83, CheckOverflow((promote_precision(wed_sales1#48) / promote_precision(wed_sales2#77)), DecimalType(37,20)) AS (wed_sales1 / wed_sales2)#84, CheckOverflow((promote_precision(thu_sales1#49) / promote_precision(thu_sales2#78)), DecimalType(37,20)) AS (thu_sales1 / thu_sales2)#85, CheckOverflow((promote_precision(fri_sales1#50) / promote_precision(fri_sales2#79)), DecimalType(37,20)) AS (fri_sales1 / fri_sales2)#86, CheckOverflow((promote_precision(sat_sales1#51) / promote_precision(sat_sales2#80)), DecimalType(37,20)) AS (sat_sales1 / sat_sales2)#87] +Input [19]: [s_store_name1#42, d_week_seq1#43, s_store_id1#44, sun_sales1#45, mon_sales1#46, tue_sales1#47, wed_sales1#48, thu_sales1#49, fri_sales1#50, sat_sales1#51, d_week_seq2#72, s_store_id2#73, sun_sales2#74, mon_sales2#75, tue_sales2#76, wed_sales2#77, thu_sales2#78, fri_sales2#79, sat_sales2#80] (54) TakeOrderedAndProject -Input [10]: [s_store_name1#46, s_store_id1#48, d_week_seq1#47, (sun_sales1 / sun_sales2)#90, (mon_sales1 / mon_sales2)#91, (tue_sales1 / tue_sales2)#92, (wed_sales1 / wed_sales2)#93, (thu_sales1 / thu_sales2)#94, (fri_sales1 / fri_sales2)#95, (sat_sales1 / sat_sales2)#96] -Arguments: 100, [s_store_name1#46 ASC NULLS FIRST, s_store_id1#48 ASC NULLS FIRST, d_week_seq1#47 ASC NULLS FIRST], [s_store_name1#46, s_store_id1#48, d_week_seq1#47, (sun_sales1 / sun_sales2)#90, (mon_sales1 / mon_sales2)#91, (tue_sales1 / tue_sales2)#92, (wed_sales1 / wed_sales2)#93, (thu_sales1 / thu_sales2)#94, (fri_sales1 / fri_sales2)#95, (sat_sales1 / sat_sales2)#96] +Input [10]: [s_store_name1#42, s_store_id1#44, d_week_seq1#43, (sun_sales1 / sun_sales2)#81, (mon_sales1 / mon_sales2)#82, (tue_sales1 / tue_sales2)#83, (wed_sales1 / wed_sales2)#84, (thu_sales1 / thu_sales2)#85, (fri_sales1 / fri_sales2)#86, (sat_sales1 / sat_sales2)#87] +Arguments: 100, [s_store_name1#42 ASC NULLS FIRST, s_store_id1#44 ASC NULLS FIRST, d_week_seq1#43 ASC NULLS FIRST], [s_store_name1#42, s_store_id1#44, d_week_seq1#43, (sun_sales1 / sun_sales2)#81, (mon_sales1 / mon_sales2)#82, (tue_sales1 / tue_sales2)#83, (wed_sales1 / wed_sales2)#84, (thu_sales1 / thu_sales2)#85, (fri_sales1 / fri_sales2)#86, (sat_sales1 / sat_sales2)#87] ===== Subqueries ===== @@ -321,42 +321,42 @@ ObjectHashAggregate (61) (55) Scan parquet default.date_dim -Output [2]: [d_month_seq#43, d_week_seq#44] +Output [2]: [d_month_seq#40, d_week_seq#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_week_seq)] ReadSchema: struct (56) ColumnarToRow [codegen id : 1] -Input [2]: [d_month_seq#43, d_week_seq#44] +Input [2]: [d_month_seq#40, d_week_seq#41] (57) Filter [codegen id : 1] -Input [2]: [d_month_seq#43, d_week_seq#44] -Condition : (((isnotnull(d_month_seq#43) AND (d_month_seq#43 >= 1212)) AND (d_month_seq#43 <= 1223)) AND isnotnull(d_week_seq#44)) +Input [2]: [d_month_seq#40, d_week_seq#41] +Condition : (((isnotnull(d_month_seq#40) AND (d_month_seq#40 >= 1212)) AND (d_month_seq#40 <= 1223)) AND isnotnull(d_week_seq#41)) (58) Project [codegen id : 1] -Output [1]: [d_week_seq#44] -Input [2]: [d_month_seq#43, d_week_seq#44] +Output [1]: [d_week_seq#41] +Input [2]: [d_month_seq#40, d_week_seq#41] (59) ObjectHashAggregate -Input [1]: [d_week_seq#44] +Input [1]: [d_week_seq#41] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#44, 42), 335, 2680, 0, 0)] -Aggregate Attributes [1]: [buf#97] -Results [1]: [buf#98] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#41, 42), 335, 2680, 0, 0)] +Aggregate Attributes [1]: [buf#88] +Results [1]: [buf#89] (60) Exchange -Input [1]: [buf#98] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#99] +Input [1]: [buf#89] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10] (61) ObjectHashAggregate -Input [1]: [buf#98] +Input [1]: [buf#89] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#44, 42), 335, 2680, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#44, 42), 335, 2680, 0, 0)#100] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#44, 42), 335, 2680, 0, 0)#100 AS bloomFilter#101] +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#41, 42), 335, 2680, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#41, 42), 335, 2680, 0, 0)#90] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#41, 42), 335, 2680, 0, 0)#90 AS bloomFilter#91] -Subquery:2 Hosting operator id = 31 Hosting Expression = Subquery scalar-subquery#56, [id=#57] +Subquery:2 Hosting operator id = 31 Hosting Expression = Subquery scalar-subquery#52, [id=#53] ObjectHashAggregate (68) +- Exchange (67) +- ObjectHashAggregate (66) @@ -367,39 +367,39 @@ ObjectHashAggregate (68) (62) Scan parquet default.date_dim -Output [2]: [d_month_seq#77, d_week_seq#78] +Output [2]: [d_month_seq#70, d_week_seq#71] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1224), LessThanOrEqual(d_month_seq,1235), IsNotNull(d_week_seq)] ReadSchema: struct (63) ColumnarToRow [codegen id : 1] -Input [2]: [d_month_seq#77, d_week_seq#78] +Input [2]: [d_month_seq#70, d_week_seq#71] (64) Filter [codegen id : 1] -Input [2]: [d_month_seq#77, d_week_seq#78] -Condition : (((isnotnull(d_month_seq#77) AND (d_month_seq#77 >= 1224)) AND (d_month_seq#77 <= 1235)) AND isnotnull(d_week_seq#78)) +Input [2]: [d_month_seq#70, d_week_seq#71] +Condition : (((isnotnull(d_month_seq#70) AND (d_month_seq#70 >= 1224)) AND (d_month_seq#70 <= 1235)) AND isnotnull(d_week_seq#71)) (65) Project [codegen id : 1] -Output [1]: [d_week_seq#78] -Input [2]: [d_month_seq#77, d_week_seq#78] +Output [1]: [d_week_seq#71] +Input [2]: [d_month_seq#70, d_week_seq#71] (66) ObjectHashAggregate -Input [1]: [d_week_seq#78] +Input [1]: [d_week_seq#71] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#78, 42), 335, 2680, 0, 0)] -Aggregate Attributes [1]: [buf#102] -Results [1]: [buf#103] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_week_seq#71, 42), 335, 2680, 0, 0)] +Aggregate Attributes [1]: [buf#92] +Results [1]: [buf#93] (67) Exchange -Input [1]: [buf#103] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#104] +Input [1]: [buf#93] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11] (68) ObjectHashAggregate -Input [1]: [buf#103] +Input [1]: [buf#93] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#78, 42), 335, 2680, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#78, 42), 335, 2680, 0, 0)#105] -Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#78, 42), 335, 2680, 0, 0)#105 AS bloomFilter#106] +Functions [1]: [bloom_filter_agg(xxhash64(d_week_seq#71, 42), 335, 2680, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_week_seq#71, 42), 335, 2680, 0, 0)#94] +Results [1]: [bloom_filter_agg(xxhash64(d_week_seq#71, 42), 335, 2680, 0, 0)#94 AS bloomFilter#95] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q59/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q59/explain.txt index 1e9c240705bd8..e9788fb36a43c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q59/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q59/explain.txt @@ -76,7 +76,7 @@ Condition : (isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5)) (7) BroadcastExchange Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 2] Left keys [1]: [ss_sold_date_sk#3] @@ -91,160 +91,160 @@ Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_w Input [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [7]: [sum#8, sum#9, sum#10, sum#11, sum#12, sum#13, sum#14] -Results [9]: [d_week_seq#5, ss_store_sk#1, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21] +Aggregate Attributes [7]: [sum#7, sum#8, sum#9, sum#10, sum#11, sum#12, sum#13] +Results [9]: [d_week_seq#5, ss_store_sk#1, sum#14, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20] (11) Exchange -Input [9]: [d_week_seq#5, ss_store_sk#1, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21] -Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [9]: [d_week_seq#5, ss_store_sk#1, sum#14, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20] +Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) HashAggregate [codegen id : 10] -Input [9]: [d_week_seq#5, ss_store_sk#1, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21] +Input [9]: [d_week_seq#5, ss_store_sk#1, sum#14, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29] -Results [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#25,17,2) AS tue_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26,17,2) AS wed_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27,17,2) AS thu_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28,17,2) AS fri_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29,17,2) AS sat_sales#36] +Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#21, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#22, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#27] +Results [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#21,17,2) AS sun_sales#28, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#22,17,2) AS mon_sales#29, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#23,17,2) AS tue_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#24,17,2) AS wed_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#25,17,2) AS thu_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#26,17,2) AS fri_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#27,17,2) AS sat_sales#34] (13) Scan parquet default.store -Output [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] +Output [3]: [s_store_sk#35, s_store_id#36, s_store_name#37] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] +Input [3]: [s_store_sk#35, s_store_id#36, s_store_name#37] (15) Filter [codegen id : 3] -Input [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] -Condition : (isnotnull(s_store_sk#37) AND isnotnull(s_store_id#38)) +Input [3]: [s_store_sk#35, s_store_id#36, s_store_name#37] +Condition : (isnotnull(s_store_sk#35) AND isnotnull(s_store_id#36)) (16) BroadcastExchange -Input [3]: [s_store_sk#37, s_store_id#38, s_store_name#39] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#40] +Input [3]: [s_store_sk#35, s_store_id#36, s_store_name#37] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (17) BroadcastHashJoin [codegen id : 10] Left keys [1]: [ss_store_sk#1] -Right keys [1]: [s_store_sk#37] +Right keys [1]: [s_store_sk#35] Join condition: None (18) Project [codegen id : 10] -Output [10]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#38, s_store_name#39] -Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#37, s_store_id#38, s_store_name#39] +Output [10]: [d_week_seq#5, sun_sales#28, mon_sales#29, tue_sales#30, wed_sales#31, thu_sales#32, fri_sales#33, sat_sales#34, s_store_id#36, s_store_name#37] +Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#28, mon_sales#29, tue_sales#30, wed_sales#31, thu_sales#32, fri_sales#33, sat_sales#34, s_store_sk#35, s_store_id#36, s_store_name#37] (19) Scan parquet default.date_dim -Output [2]: [d_month_seq#41, d_week_seq#42] +Output [2]: [d_month_seq#38, d_week_seq#39] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_week_seq)] ReadSchema: struct (20) ColumnarToRow [codegen id : 4] -Input [2]: [d_month_seq#41, d_week_seq#42] +Input [2]: [d_month_seq#38, d_week_seq#39] (21) Filter [codegen id : 4] -Input [2]: [d_month_seq#41, d_week_seq#42] -Condition : (((isnotnull(d_month_seq#41) AND (d_month_seq#41 >= 1212)) AND (d_month_seq#41 <= 1223)) AND isnotnull(d_week_seq#42)) +Input [2]: [d_month_seq#38, d_week_seq#39] +Condition : (((isnotnull(d_month_seq#38) AND (d_month_seq#38 >= 1212)) AND (d_month_seq#38 <= 1223)) AND isnotnull(d_week_seq#39)) (22) Project [codegen id : 4] -Output [1]: [d_week_seq#42] -Input [2]: [d_month_seq#41, d_week_seq#42] +Output [1]: [d_week_seq#39] +Input [2]: [d_month_seq#38, d_week_seq#39] (23) BroadcastExchange -Input [1]: [d_week_seq#42] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#43] +Input [1]: [d_week_seq#39] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (24) BroadcastHashJoin [codegen id : 10] Left keys [1]: [d_week_seq#5] -Right keys [1]: [d_week_seq#42] +Right keys [1]: [d_week_seq#39] Join condition: None (25) Project [codegen id : 10] -Output [10]: [s_store_name#39 AS s_store_name1#44, d_week_seq#5 AS d_week_seq1#45, s_store_id#38 AS s_store_id1#46, sun_sales#30 AS sun_sales1#47, mon_sales#31 AS mon_sales1#48, tue_sales#32 AS tue_sales1#49, wed_sales#33 AS wed_sales1#50, thu_sales#34 AS thu_sales1#51, fri_sales#35 AS fri_sales1#52, sat_sales#36 AS sat_sales1#53] -Input [11]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#38, s_store_name#39, d_week_seq#42] +Output [10]: [s_store_name#37 AS s_store_name1#40, d_week_seq#5 AS d_week_seq1#41, s_store_id#36 AS s_store_id1#42, sun_sales#28 AS sun_sales1#43, mon_sales#29 AS mon_sales1#44, tue_sales#30 AS tue_sales1#45, wed_sales#31 AS wed_sales1#46, thu_sales#32 AS thu_sales1#47, fri_sales#33 AS fri_sales1#48, sat_sales#34 AS sat_sales1#49] +Input [11]: [d_week_seq#5, sun_sales#28, mon_sales#29, tue_sales#30, wed_sales#31, thu_sales#32, fri_sales#33, sat_sales#34, s_store_id#36, s_store_name#37, d_week_seq#39] (26) ReusedExchange [Reuses operator id: 11] -Output [9]: [d_week_seq#5, ss_store_sk#1, sum#54, sum#55, sum#56, sum#57, sum#58, sum#59, sum#60] +Output [9]: [d_week_seq#5, ss_store_sk#1, sum#50, sum#51, sum#52, sum#53, sum#54, sum#55, sum#56] (27) HashAggregate [codegen id : 9] -Input [9]: [d_week_seq#5, ss_store_sk#1, sum#54, sum#55, sum#56, sum#57, sum#58, sum#59, sum#60] +Input [9]: [d_week_seq#5, ss_store_sk#1, sum#50, sum#51, sum#52, sum#53, sum#54, sum#55, sum#56] Keys [2]: [d_week_seq#5, ss_store_sk#1] Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))] -Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29] -Results [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#23,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#24,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#25,17,2) AS tue_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#26,17,2) AS wed_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#27,17,2) AS thu_sales#34, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#28,17,2) AS fri_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#29,17,2) AS sat_sales#36] +Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#21, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#22, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#27] +Results [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday ) THEN ss_sales_price#2 END))#21,17,2) AS sun_sales#28, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday ) THEN ss_sales_price#2 END))#22,17,2) AS mon_sales#29, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday ) THEN ss_sales_price#2 END))#23,17,2) AS tue_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END))#24,17,2) AS wed_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END))#25,17,2) AS thu_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday ) THEN ss_sales_price#2 END))#26,17,2) AS fri_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))#27,17,2) AS sat_sales#34] (28) Scan parquet default.store -Output [2]: [s_store_sk#61, s_store_id#62] +Output [2]: [s_store_sk#57, s_store_id#58] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_id)] ReadSchema: struct (29) ColumnarToRow [codegen id : 7] -Input [2]: [s_store_sk#61, s_store_id#62] +Input [2]: [s_store_sk#57, s_store_id#58] (30) Filter [codegen id : 7] -Input [2]: [s_store_sk#61, s_store_id#62] -Condition : (isnotnull(s_store_sk#61) AND isnotnull(s_store_id#62)) +Input [2]: [s_store_sk#57, s_store_id#58] +Condition : (isnotnull(s_store_sk#57) AND isnotnull(s_store_id#58)) (31) BroadcastExchange -Input [2]: [s_store_sk#61, s_store_id#62] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#63] +Input [2]: [s_store_sk#57, s_store_id#58] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (32) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#1] -Right keys [1]: [s_store_sk#61] +Right keys [1]: [s_store_sk#57] Join condition: None (33) Project [codegen id : 9] -Output [9]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#62] -Input [11]: [d_week_seq#5, ss_store_sk#1, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#61, s_store_id#62] +Output [9]: [d_week_seq#5, sun_sales#28, mon_sales#29, tue_sales#30, wed_sales#31, thu_sales#32, fri_sales#33, sat_sales#34, s_store_id#58] +Input [11]: [d_week_seq#5, ss_store_sk#1, sun_sales#28, mon_sales#29, tue_sales#30, wed_sales#31, thu_sales#32, fri_sales#33, sat_sales#34, s_store_sk#57, s_store_id#58] (34) Scan parquet default.date_dim -Output [2]: [d_month_seq#64, d_week_seq#65] +Output [2]: [d_month_seq#59, d_week_seq#60] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1224), LessThanOrEqual(d_month_seq,1235), IsNotNull(d_week_seq)] ReadSchema: struct (35) ColumnarToRow [codegen id : 8] -Input [2]: [d_month_seq#64, d_week_seq#65] +Input [2]: [d_month_seq#59, d_week_seq#60] (36) Filter [codegen id : 8] -Input [2]: [d_month_seq#64, d_week_seq#65] -Condition : (((isnotnull(d_month_seq#64) AND (d_month_seq#64 >= 1224)) AND (d_month_seq#64 <= 1235)) AND isnotnull(d_week_seq#65)) +Input [2]: [d_month_seq#59, d_week_seq#60] +Condition : (((isnotnull(d_month_seq#59) AND (d_month_seq#59 >= 1224)) AND (d_month_seq#59 <= 1235)) AND isnotnull(d_week_seq#60)) (37) Project [codegen id : 8] -Output [1]: [d_week_seq#65] -Input [2]: [d_month_seq#64, d_week_seq#65] +Output [1]: [d_week_seq#60] +Input [2]: [d_month_seq#59, d_week_seq#60] (38) BroadcastExchange -Input [1]: [d_week_seq#65] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#66] +Input [1]: [d_week_seq#60] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] (39) BroadcastHashJoin [codegen id : 9] Left keys [1]: [d_week_seq#5] -Right keys [1]: [d_week_seq#65] +Right keys [1]: [d_week_seq#60] Join condition: None (40) Project [codegen id : 9] -Output [9]: [d_week_seq#5 AS d_week_seq2#67, s_store_id#62 AS s_store_id2#68, sun_sales#30 AS sun_sales2#69, mon_sales#31 AS mon_sales2#70, tue_sales#32 AS tue_sales2#71, wed_sales#33 AS wed_sales2#72, thu_sales#34 AS thu_sales2#73, fri_sales#35 AS fri_sales2#74, sat_sales#36 AS sat_sales2#75] -Input [10]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#62, d_week_seq#65] +Output [9]: [d_week_seq#5 AS d_week_seq2#61, s_store_id#58 AS s_store_id2#62, sun_sales#28 AS sun_sales2#63, mon_sales#29 AS mon_sales2#64, tue_sales#30 AS tue_sales2#65, wed_sales#31 AS wed_sales2#66, thu_sales#32 AS thu_sales2#67, fri_sales#33 AS fri_sales2#68, sat_sales#34 AS sat_sales2#69] +Input [10]: [d_week_seq#5, sun_sales#28, mon_sales#29, tue_sales#30, wed_sales#31, thu_sales#32, fri_sales#33, sat_sales#34, s_store_id#58, d_week_seq#60] (41) BroadcastExchange -Input [9]: [d_week_seq2#67, s_store_id2#68, sun_sales2#69, mon_sales2#70, tue_sales2#71, wed_sales2#72, thu_sales2#73, fri_sales2#74, sat_sales2#75] -Arguments: HashedRelationBroadcastMode(List(input[1, string, true], (input[0, int, true] - 52)),false), [id=#76] +Input [9]: [d_week_seq2#61, s_store_id2#62, sun_sales2#63, mon_sales2#64, tue_sales2#65, wed_sales2#66, thu_sales2#67, fri_sales2#68, sat_sales2#69] +Arguments: HashedRelationBroadcastMode(List(input[1, string, true], (input[0, int, true] - 52)),false), [plan_id=7] (42) BroadcastHashJoin [codegen id : 10] -Left keys [2]: [s_store_id1#46, d_week_seq1#45] -Right keys [2]: [s_store_id2#68, (d_week_seq2#67 - 52)] +Left keys [2]: [s_store_id1#42, d_week_seq1#41] +Right keys [2]: [s_store_id2#62, (d_week_seq2#61 - 52)] Join condition: None (43) Project [codegen id : 10] -Output [10]: [s_store_name1#44, s_store_id1#46, d_week_seq1#45, CheckOverflow((promote_precision(sun_sales1#47) / promote_precision(sun_sales2#69)), DecimalType(37,20)) AS (sun_sales1 / sun_sales2)#77, CheckOverflow((promote_precision(mon_sales1#48) / promote_precision(mon_sales2#70)), DecimalType(37,20)) AS (mon_sales1 / mon_sales2)#78, CheckOverflow((promote_precision(tue_sales1#49) / promote_precision(tue_sales2#71)), DecimalType(37,20)) AS (tue_sales1 / tue_sales2)#79, CheckOverflow((promote_precision(wed_sales1#50) / promote_precision(wed_sales2#72)), DecimalType(37,20)) AS (wed_sales1 / wed_sales2)#80, CheckOverflow((promote_precision(thu_sales1#51) / promote_precision(thu_sales2#73)), DecimalType(37,20)) AS (thu_sales1 / thu_sales2)#81, CheckOverflow((promote_precision(fri_sales1#52) / promote_precision(fri_sales2#74)), DecimalType(37,20)) AS (fri_sales1 / fri_sales2)#82, CheckOverflow((promote_precision(sat_sales1#53) / promote_precision(sat_sales2#75)), DecimalType(37,20)) AS (sat_sales1 / sat_sales2)#83] -Input [19]: [s_store_name1#44, d_week_seq1#45, s_store_id1#46, sun_sales1#47, mon_sales1#48, tue_sales1#49, wed_sales1#50, thu_sales1#51, fri_sales1#52, sat_sales1#53, d_week_seq2#67, s_store_id2#68, sun_sales2#69, mon_sales2#70, tue_sales2#71, wed_sales2#72, thu_sales2#73, fri_sales2#74, sat_sales2#75] +Output [10]: [s_store_name1#40, s_store_id1#42, d_week_seq1#41, CheckOverflow((promote_precision(sun_sales1#43) / promote_precision(sun_sales2#63)), DecimalType(37,20)) AS (sun_sales1 / sun_sales2)#70, CheckOverflow((promote_precision(mon_sales1#44) / promote_precision(mon_sales2#64)), DecimalType(37,20)) AS (mon_sales1 / mon_sales2)#71, CheckOverflow((promote_precision(tue_sales1#45) / promote_precision(tue_sales2#65)), DecimalType(37,20)) AS (tue_sales1 / tue_sales2)#72, CheckOverflow((promote_precision(wed_sales1#46) / promote_precision(wed_sales2#66)), DecimalType(37,20)) AS (wed_sales1 / wed_sales2)#73, CheckOverflow((promote_precision(thu_sales1#47) / promote_precision(thu_sales2#67)), DecimalType(37,20)) AS (thu_sales1 / thu_sales2)#74, CheckOverflow((promote_precision(fri_sales1#48) / promote_precision(fri_sales2#68)), DecimalType(37,20)) AS (fri_sales1 / fri_sales2)#75, CheckOverflow((promote_precision(sat_sales1#49) / promote_precision(sat_sales2#69)), DecimalType(37,20)) AS (sat_sales1 / sat_sales2)#76] +Input [19]: [s_store_name1#40, d_week_seq1#41, s_store_id1#42, sun_sales1#43, mon_sales1#44, tue_sales1#45, wed_sales1#46, thu_sales1#47, fri_sales1#48, sat_sales1#49, d_week_seq2#61, s_store_id2#62, sun_sales2#63, mon_sales2#64, tue_sales2#65, wed_sales2#66, thu_sales2#67, fri_sales2#68, sat_sales2#69] (44) TakeOrderedAndProject -Input [10]: [s_store_name1#44, s_store_id1#46, d_week_seq1#45, (sun_sales1 / sun_sales2)#77, (mon_sales1 / mon_sales2)#78, (tue_sales1 / tue_sales2)#79, (wed_sales1 / wed_sales2)#80, (thu_sales1 / thu_sales2)#81, (fri_sales1 / fri_sales2)#82, (sat_sales1 / sat_sales2)#83] -Arguments: 100, [s_store_name1#44 ASC NULLS FIRST, s_store_id1#46 ASC NULLS FIRST, d_week_seq1#45 ASC NULLS FIRST], [s_store_name1#44, s_store_id1#46, d_week_seq1#45, (sun_sales1 / sun_sales2)#77, (mon_sales1 / mon_sales2)#78, (tue_sales1 / tue_sales2)#79, (wed_sales1 / wed_sales2)#80, (thu_sales1 / thu_sales2)#81, (fri_sales1 / fri_sales2)#82, (sat_sales1 / sat_sales2)#83] +Input [10]: [s_store_name1#40, s_store_id1#42, d_week_seq1#41, (sun_sales1 / sun_sales2)#70, (mon_sales1 / mon_sales2)#71, (tue_sales1 / tue_sales2)#72, (wed_sales1 / wed_sales2)#73, (thu_sales1 / thu_sales2)#74, (fri_sales1 / fri_sales2)#75, (sat_sales1 / sat_sales2)#76] +Arguments: 100, [s_store_name1#40 ASC NULLS FIRST, s_store_id1#42 ASC NULLS FIRST, d_week_seq1#41 ASC NULLS FIRST], [s_store_name1#40, s_store_id1#42, d_week_seq1#41, (sun_sales1 / sun_sales2)#70, (mon_sales1 / mon_sales2)#71, (tue_sales1 / tue_sales2)#72, (wed_sales1 / wed_sales2)#73, (thu_sales1 / thu_sales2)#74, (fri_sales1 / fri_sales2)#75, (sat_sales1 / sat_sales2)#76] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60.sf100/explain.txt index 5ba9cf5ab20b6..76c4cf1b4354c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60.sf100/explain.txt @@ -111,7 +111,7 @@ Input [2]: [ca_address_sk#7, ca_gmt_offset#8] (11) BroadcastExchange Input [1]: [ca_address_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_addr_sk#2] @@ -123,238 +123,238 @@ Output [2]: [ss_item_sk#1, ss_ext_sales_price#3] Input [4]: [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3, ca_address_sk#7] (14) Scan parquet default.item -Output [2]: [i_item_sk#10, i_item_id#11] +Output [2]: [i_item_sk#9, i_item_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#10, i_item_id#11] +Input [2]: [i_item_sk#9, i_item_id#10] (16) Filter [codegen id : 4] -Input [2]: [i_item_sk#10, i_item_id#11] -Condition : isnotnull(i_item_sk#10) +Input [2]: [i_item_sk#9, i_item_id#10] +Condition : isnotnull(i_item_sk#9) (17) Scan parquet default.item -Output [2]: [i_item_id#12, i_category#13] +Output [2]: [i_item_id#11, i_category#12] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_category), EqualTo(i_category,Music )] ReadSchema: struct (18) ColumnarToRow [codegen id : 3] -Input [2]: [i_item_id#12, i_category#13] +Input [2]: [i_item_id#11, i_category#12] (19) Filter [codegen id : 3] -Input [2]: [i_item_id#12, i_category#13] -Condition : (isnotnull(i_category#13) AND (i_category#13 = Music )) +Input [2]: [i_item_id#11, i_category#12] +Condition : (isnotnull(i_category#12) AND (i_category#12 = Music )) (20) Project [codegen id : 3] -Output [1]: [i_item_id#12] -Input [2]: [i_item_id#12, i_category#13] +Output [1]: [i_item_id#11] +Input [2]: [i_item_id#11, i_category#12] (21) BroadcastExchange -Input [1]: [i_item_id#12] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#14] +Input [1]: [i_item_id#11] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=2] (22) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [i_item_id#11] -Right keys [1]: [i_item_id#12] +Left keys [1]: [i_item_id#10] +Right keys [1]: [i_item_id#11] Join condition: None (23) BroadcastExchange -Input [2]: [i_item_sk#10, i_item_id#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Input [2]: [i_item_sk#9, i_item_id#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#10] +Right keys [1]: [i_item_sk#9] Join condition: None (25) Project [codegen id : 5] -Output [2]: [ss_ext_sales_price#3, i_item_id#11] -Input [4]: [ss_item_sk#1, ss_ext_sales_price#3, i_item_sk#10, i_item_id#11] +Output [2]: [ss_ext_sales_price#3, i_item_id#10] +Input [4]: [ss_item_sk#1, ss_ext_sales_price#3, i_item_sk#9, i_item_id#10] (26) HashAggregate [codegen id : 5] -Input [2]: [ss_ext_sales_price#3, i_item_id#11] -Keys [1]: [i_item_id#11] +Input [2]: [ss_ext_sales_price#3, i_item_id#10] +Keys [1]: [i_item_id#10] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [1]: [sum#16] -Results [2]: [i_item_id#11, sum#17] +Aggregate Attributes [1]: [sum#13] +Results [2]: [i_item_id#10, sum#14] (27) Exchange -Input [2]: [i_item_id#11, sum#17] -Arguments: hashpartitioning(i_item_id#11, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [2]: [i_item_id#10, sum#14] +Arguments: hashpartitioning(i_item_id#10, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 6] -Input [2]: [i_item_id#11, sum#17] -Keys [1]: [i_item_id#11] +Input [2]: [i_item_id#10, sum#14] +Keys [1]: [i_item_id#10] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#3))#19] -Results [2]: [i_item_id#11, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#19,17,2) AS total_sales#20] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#3))#15] +Results [2]: [i_item_id#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#15,17,2) AS total_sales#16] (29) Scan parquet default.catalog_sales -Output [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] +Output [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#24), dynamicpruningexpression(cs_sold_date_sk#24 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#20), dynamicpruningexpression(cs_sold_date_sk#20 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cs_bill_addr_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 11] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] (31) Filter [codegen id : 11] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] -Condition : (isnotnull(cs_bill_addr_sk#21) AND isnotnull(cs_item_sk#22)) +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] +Condition : (isnotnull(cs_bill_addr_sk#17) AND isnotnull(cs_item_sk#18)) (32) ReusedExchange [Reuses operator id: 68] -Output [1]: [d_date_sk#25] +Output [1]: [d_date_sk#21] (33) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_sold_date_sk#24] -Right keys [1]: [d_date_sk#25] +Left keys [1]: [cs_sold_date_sk#20] +Right keys [1]: [d_date_sk#21] Join condition: None (34) Project [codegen id : 11] -Output [3]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23] -Input [5]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24, d_date_sk#25] +Output [3]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19] +Input [5]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20, d_date_sk#21] (35) ReusedExchange [Reuses operator id: 11] -Output [1]: [ca_address_sk#26] +Output [1]: [ca_address_sk#22] (36) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_bill_addr_sk#21] -Right keys [1]: [ca_address_sk#26] +Left keys [1]: [cs_bill_addr_sk#17] +Right keys [1]: [ca_address_sk#22] Join condition: None (37) Project [codegen id : 11] -Output [2]: [cs_item_sk#22, cs_ext_sales_price#23] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, ca_address_sk#26] +Output [2]: [cs_item_sk#18, cs_ext_sales_price#19] +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, ca_address_sk#22] (38) ReusedExchange [Reuses operator id: 23] -Output [2]: [i_item_sk#27, i_item_id#28] +Output [2]: [i_item_sk#23, i_item_id#24] (39) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_item_sk#22] -Right keys [1]: [i_item_sk#27] +Left keys [1]: [cs_item_sk#18] +Right keys [1]: [i_item_sk#23] Join condition: None (40) Project [codegen id : 11] -Output [2]: [cs_ext_sales_price#23, i_item_id#28] -Input [4]: [cs_item_sk#22, cs_ext_sales_price#23, i_item_sk#27, i_item_id#28] +Output [2]: [cs_ext_sales_price#19, i_item_id#24] +Input [4]: [cs_item_sk#18, cs_ext_sales_price#19, i_item_sk#23, i_item_id#24] (41) HashAggregate [codegen id : 11] -Input [2]: [cs_ext_sales_price#23, i_item_id#28] -Keys [1]: [i_item_id#28] -Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#23))] -Aggregate Attributes [1]: [sum#29] -Results [2]: [i_item_id#28, sum#30] +Input [2]: [cs_ext_sales_price#19, i_item_id#24] +Keys [1]: [i_item_id#24] +Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#19))] +Aggregate Attributes [1]: [sum#25] +Results [2]: [i_item_id#24, sum#26] (42) Exchange -Input [2]: [i_item_id#28, sum#30] -Arguments: hashpartitioning(i_item_id#28, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [2]: [i_item_id#24, sum#26] +Arguments: hashpartitioning(i_item_id#24, 5), ENSURE_REQUIREMENTS, [plan_id=5] (43) HashAggregate [codegen id : 12] -Input [2]: [i_item_id#28, sum#30] -Keys [1]: [i_item_id#28] -Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#23))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#23))#32] -Results [2]: [i_item_id#28, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#23))#32,17,2) AS total_sales#33] +Input [2]: [i_item_id#24, sum#26] +Keys [1]: [i_item_id#24] +Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#19))] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#19))#27] +Results [2]: [i_item_id#24, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#19))#27,17,2) AS total_sales#28] (44) Scan parquet default.web_sales -Output [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] +Output [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#37), dynamicpruningexpression(ws_sold_date_sk#37 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#32), dynamicpruningexpression(ws_sold_date_sk#32 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_bill_addr_sk), IsNotNull(ws_item_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 17] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] (46) Filter [codegen id : 17] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] -Condition : (isnotnull(ws_bill_addr_sk#35) AND isnotnull(ws_item_sk#34)) +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] +Condition : (isnotnull(ws_bill_addr_sk#30) AND isnotnull(ws_item_sk#29)) (47) ReusedExchange [Reuses operator id: 68] -Output [1]: [d_date_sk#38] +Output [1]: [d_date_sk#33] (48) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_sold_date_sk#37] -Right keys [1]: [d_date_sk#38] +Left keys [1]: [ws_sold_date_sk#32] +Right keys [1]: [d_date_sk#33] Join condition: None (49) Project [codegen id : 17] -Output [3]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36] -Input [5]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37, d_date_sk#38] +Output [3]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31] +Input [5]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32, d_date_sk#33] (50) ReusedExchange [Reuses operator id: 11] -Output [1]: [ca_address_sk#39] +Output [1]: [ca_address_sk#34] (51) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_bill_addr_sk#35] -Right keys [1]: [ca_address_sk#39] +Left keys [1]: [ws_bill_addr_sk#30] +Right keys [1]: [ca_address_sk#34] Join condition: None (52) Project [codegen id : 17] -Output [2]: [ws_item_sk#34, ws_ext_sales_price#36] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ca_address_sk#39] +Output [2]: [ws_item_sk#29, ws_ext_sales_price#31] +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ca_address_sk#34] (53) ReusedExchange [Reuses operator id: 23] -Output [2]: [i_item_sk#40, i_item_id#41] +Output [2]: [i_item_sk#35, i_item_id#36] (54) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_item_sk#34] -Right keys [1]: [i_item_sk#40] +Left keys [1]: [ws_item_sk#29] +Right keys [1]: [i_item_sk#35] Join condition: None (55) Project [codegen id : 17] -Output [2]: [ws_ext_sales_price#36, i_item_id#41] -Input [4]: [ws_item_sk#34, ws_ext_sales_price#36, i_item_sk#40, i_item_id#41] +Output [2]: [ws_ext_sales_price#31, i_item_id#36] +Input [4]: [ws_item_sk#29, ws_ext_sales_price#31, i_item_sk#35, i_item_id#36] (56) HashAggregate [codegen id : 17] -Input [2]: [ws_ext_sales_price#36, i_item_id#41] -Keys [1]: [i_item_id#41] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#36))] -Aggregate Attributes [1]: [sum#42] -Results [2]: [i_item_id#41, sum#43] +Input [2]: [ws_ext_sales_price#31, i_item_id#36] +Keys [1]: [i_item_id#36] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#31))] +Aggregate Attributes [1]: [sum#37] +Results [2]: [i_item_id#36, sum#38] (57) Exchange -Input [2]: [i_item_id#41, sum#43] -Arguments: hashpartitioning(i_item_id#41, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [2]: [i_item_id#36, sum#38] +Arguments: hashpartitioning(i_item_id#36, 5), ENSURE_REQUIREMENTS, [plan_id=6] (58) HashAggregate [codegen id : 18] -Input [2]: [i_item_id#41, sum#43] -Keys [1]: [i_item_id#41] -Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#36))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#36))#45] -Results [2]: [i_item_id#41, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#36))#45,17,2) AS total_sales#46] +Input [2]: [i_item_id#36, sum#38] +Keys [1]: [i_item_id#36] +Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#31))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#31))#39] +Results [2]: [i_item_id#36, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#31))#39,17,2) AS total_sales#40] (59) Union (60) HashAggregate [codegen id : 19] -Input [2]: [i_item_id#11, total_sales#20] -Keys [1]: [i_item_id#11] -Functions [1]: [partial_sum(total_sales#20)] -Aggregate Attributes [2]: [sum#47, isEmpty#48] -Results [3]: [i_item_id#11, sum#49, isEmpty#50] +Input [2]: [i_item_id#10, total_sales#16] +Keys [1]: [i_item_id#10] +Functions [1]: [partial_sum(total_sales#16)] +Aggregate Attributes [2]: [sum#41, isEmpty#42] +Results [3]: [i_item_id#10, sum#43, isEmpty#44] (61) Exchange -Input [3]: [i_item_id#11, sum#49, isEmpty#50] -Arguments: hashpartitioning(i_item_id#11, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [3]: [i_item_id#10, sum#43, isEmpty#44] +Arguments: hashpartitioning(i_item_id#10, 5), ENSURE_REQUIREMENTS, [plan_id=7] (62) HashAggregate [codegen id : 20] -Input [3]: [i_item_id#11, sum#49, isEmpty#50] -Keys [1]: [i_item_id#11] -Functions [1]: [sum(total_sales#20)] -Aggregate Attributes [1]: [sum(total_sales#20)#52] -Results [2]: [i_item_id#11, sum(total_sales#20)#52 AS total_sales#53] +Input [3]: [i_item_id#10, sum#43, isEmpty#44] +Keys [1]: [i_item_id#10] +Functions [1]: [sum(total_sales#16)] +Aggregate Attributes [1]: [sum(total_sales#16)#45] +Results [2]: [i_item_id#10, sum(total_sales#16)#45 AS total_sales#46] (63) TakeOrderedAndProject -Input [2]: [i_item_id#11, total_sales#53] -Arguments: 100, [i_item_id#11 ASC NULLS FIRST, total_sales#53 ASC NULLS FIRST], [i_item_id#11, total_sales#53] +Input [2]: [i_item_id#10, total_sales#46] +Arguments: 100, [i_item_id#10 ASC NULLS FIRST, total_sales#46 ASC NULLS FIRST], [i_item_id#10, total_sales#46] ===== Subqueries ===== @@ -367,29 +367,29 @@ BroadcastExchange (68) (64) Scan parquet default.date_dim -Output [3]: [d_date_sk#6, d_year#54, d_moy#55] +Output [3]: [d_date_sk#6, d_year#47, d_moy#48] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,9), IsNotNull(d_date_sk)] ReadSchema: struct (65) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] (66) Filter [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] -Condition : ((((isnotnull(d_year#54) AND isnotnull(d_moy#55)) AND (d_year#54 = 1998)) AND (d_moy#55 = 9)) AND isnotnull(d_date_sk#6)) +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] +Condition : ((((isnotnull(d_year#47) AND isnotnull(d_moy#48)) AND (d_year#47 = 1998)) AND (d_moy#48 = 9)) AND isnotnull(d_date_sk#6)) (67) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] (68) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#56] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 29 Hosting Expression = cs_sold_date_sk#24 IN dynamicpruning#5 +Subquery:2 Hosting operator id = 29 Hosting Expression = cs_sold_date_sk#20 IN dynamicpruning#5 -Subquery:3 Hosting operator id = 44 Hosting Expression = ws_sold_date_sk#37 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 44 Hosting Expression = ws_sold_date_sk#32 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60/explain.txt index 5ba9cf5ab20b6..76c4cf1b4354c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q60/explain.txt @@ -111,7 +111,7 @@ Input [2]: [ca_address_sk#7, ca_gmt_offset#8] (11) BroadcastExchange Input [1]: [ca_address_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_addr_sk#2] @@ -123,238 +123,238 @@ Output [2]: [ss_item_sk#1, ss_ext_sales_price#3] Input [4]: [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3, ca_address_sk#7] (14) Scan parquet default.item -Output [2]: [i_item_sk#10, i_item_id#11] +Output [2]: [i_item_sk#9, i_item_id#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#10, i_item_id#11] +Input [2]: [i_item_sk#9, i_item_id#10] (16) Filter [codegen id : 4] -Input [2]: [i_item_sk#10, i_item_id#11] -Condition : isnotnull(i_item_sk#10) +Input [2]: [i_item_sk#9, i_item_id#10] +Condition : isnotnull(i_item_sk#9) (17) Scan parquet default.item -Output [2]: [i_item_id#12, i_category#13] +Output [2]: [i_item_id#11, i_category#12] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_category), EqualTo(i_category,Music )] ReadSchema: struct (18) ColumnarToRow [codegen id : 3] -Input [2]: [i_item_id#12, i_category#13] +Input [2]: [i_item_id#11, i_category#12] (19) Filter [codegen id : 3] -Input [2]: [i_item_id#12, i_category#13] -Condition : (isnotnull(i_category#13) AND (i_category#13 = Music )) +Input [2]: [i_item_id#11, i_category#12] +Condition : (isnotnull(i_category#12) AND (i_category#12 = Music )) (20) Project [codegen id : 3] -Output [1]: [i_item_id#12] -Input [2]: [i_item_id#12, i_category#13] +Output [1]: [i_item_id#11] +Input [2]: [i_item_id#11, i_category#12] (21) BroadcastExchange -Input [1]: [i_item_id#12] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#14] +Input [1]: [i_item_id#11] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=2] (22) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [i_item_id#11] -Right keys [1]: [i_item_id#12] +Left keys [1]: [i_item_id#10] +Right keys [1]: [i_item_id#11] Join condition: None (23) BroadcastExchange -Input [2]: [i_item_sk#10, i_item_id#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Input [2]: [i_item_sk#9, i_item_id#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#10] +Right keys [1]: [i_item_sk#9] Join condition: None (25) Project [codegen id : 5] -Output [2]: [ss_ext_sales_price#3, i_item_id#11] -Input [4]: [ss_item_sk#1, ss_ext_sales_price#3, i_item_sk#10, i_item_id#11] +Output [2]: [ss_ext_sales_price#3, i_item_id#10] +Input [4]: [ss_item_sk#1, ss_ext_sales_price#3, i_item_sk#9, i_item_id#10] (26) HashAggregate [codegen id : 5] -Input [2]: [ss_ext_sales_price#3, i_item_id#11] -Keys [1]: [i_item_id#11] +Input [2]: [ss_ext_sales_price#3, i_item_id#10] +Keys [1]: [i_item_id#10] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [1]: [sum#16] -Results [2]: [i_item_id#11, sum#17] +Aggregate Attributes [1]: [sum#13] +Results [2]: [i_item_id#10, sum#14] (27) Exchange -Input [2]: [i_item_id#11, sum#17] -Arguments: hashpartitioning(i_item_id#11, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [2]: [i_item_id#10, sum#14] +Arguments: hashpartitioning(i_item_id#10, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 6] -Input [2]: [i_item_id#11, sum#17] -Keys [1]: [i_item_id#11] +Input [2]: [i_item_id#10, sum#14] +Keys [1]: [i_item_id#10] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#3))#19] -Results [2]: [i_item_id#11, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#19,17,2) AS total_sales#20] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#3))#15] +Results [2]: [i_item_id#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#15,17,2) AS total_sales#16] (29) Scan parquet default.catalog_sales -Output [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] +Output [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#24), dynamicpruningexpression(cs_sold_date_sk#24 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#20), dynamicpruningexpression(cs_sold_date_sk#20 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cs_bill_addr_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 11] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] (31) Filter [codegen id : 11] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24] -Condition : (isnotnull(cs_bill_addr_sk#21) AND isnotnull(cs_item_sk#22)) +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20] +Condition : (isnotnull(cs_bill_addr_sk#17) AND isnotnull(cs_item_sk#18)) (32) ReusedExchange [Reuses operator id: 68] -Output [1]: [d_date_sk#25] +Output [1]: [d_date_sk#21] (33) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_sold_date_sk#24] -Right keys [1]: [d_date_sk#25] +Left keys [1]: [cs_sold_date_sk#20] +Right keys [1]: [d_date_sk#21] Join condition: None (34) Project [codegen id : 11] -Output [3]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23] -Input [5]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, cs_sold_date_sk#24, d_date_sk#25] +Output [3]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19] +Input [5]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, cs_sold_date_sk#20, d_date_sk#21] (35) ReusedExchange [Reuses operator id: 11] -Output [1]: [ca_address_sk#26] +Output [1]: [ca_address_sk#22] (36) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_bill_addr_sk#21] -Right keys [1]: [ca_address_sk#26] +Left keys [1]: [cs_bill_addr_sk#17] +Right keys [1]: [ca_address_sk#22] Join condition: None (37) Project [codegen id : 11] -Output [2]: [cs_item_sk#22, cs_ext_sales_price#23] -Input [4]: [cs_bill_addr_sk#21, cs_item_sk#22, cs_ext_sales_price#23, ca_address_sk#26] +Output [2]: [cs_item_sk#18, cs_ext_sales_price#19] +Input [4]: [cs_bill_addr_sk#17, cs_item_sk#18, cs_ext_sales_price#19, ca_address_sk#22] (38) ReusedExchange [Reuses operator id: 23] -Output [2]: [i_item_sk#27, i_item_id#28] +Output [2]: [i_item_sk#23, i_item_id#24] (39) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_item_sk#22] -Right keys [1]: [i_item_sk#27] +Left keys [1]: [cs_item_sk#18] +Right keys [1]: [i_item_sk#23] Join condition: None (40) Project [codegen id : 11] -Output [2]: [cs_ext_sales_price#23, i_item_id#28] -Input [4]: [cs_item_sk#22, cs_ext_sales_price#23, i_item_sk#27, i_item_id#28] +Output [2]: [cs_ext_sales_price#19, i_item_id#24] +Input [4]: [cs_item_sk#18, cs_ext_sales_price#19, i_item_sk#23, i_item_id#24] (41) HashAggregate [codegen id : 11] -Input [2]: [cs_ext_sales_price#23, i_item_id#28] -Keys [1]: [i_item_id#28] -Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#23))] -Aggregate Attributes [1]: [sum#29] -Results [2]: [i_item_id#28, sum#30] +Input [2]: [cs_ext_sales_price#19, i_item_id#24] +Keys [1]: [i_item_id#24] +Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#19))] +Aggregate Attributes [1]: [sum#25] +Results [2]: [i_item_id#24, sum#26] (42) Exchange -Input [2]: [i_item_id#28, sum#30] -Arguments: hashpartitioning(i_item_id#28, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [2]: [i_item_id#24, sum#26] +Arguments: hashpartitioning(i_item_id#24, 5), ENSURE_REQUIREMENTS, [plan_id=5] (43) HashAggregate [codegen id : 12] -Input [2]: [i_item_id#28, sum#30] -Keys [1]: [i_item_id#28] -Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#23))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#23))#32] -Results [2]: [i_item_id#28, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#23))#32,17,2) AS total_sales#33] +Input [2]: [i_item_id#24, sum#26] +Keys [1]: [i_item_id#24] +Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#19))] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#19))#27] +Results [2]: [i_item_id#24, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#19))#27,17,2) AS total_sales#28] (44) Scan parquet default.web_sales -Output [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] +Output [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#37), dynamicpruningexpression(ws_sold_date_sk#37 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#32), dynamicpruningexpression(ws_sold_date_sk#32 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_bill_addr_sk), IsNotNull(ws_item_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 17] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] (46) Filter [codegen id : 17] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37] -Condition : (isnotnull(ws_bill_addr_sk#35) AND isnotnull(ws_item_sk#34)) +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32] +Condition : (isnotnull(ws_bill_addr_sk#30) AND isnotnull(ws_item_sk#29)) (47) ReusedExchange [Reuses operator id: 68] -Output [1]: [d_date_sk#38] +Output [1]: [d_date_sk#33] (48) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_sold_date_sk#37] -Right keys [1]: [d_date_sk#38] +Left keys [1]: [ws_sold_date_sk#32] +Right keys [1]: [d_date_sk#33] Join condition: None (49) Project [codegen id : 17] -Output [3]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36] -Input [5]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ws_sold_date_sk#37, d_date_sk#38] +Output [3]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31] +Input [5]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ws_sold_date_sk#32, d_date_sk#33] (50) ReusedExchange [Reuses operator id: 11] -Output [1]: [ca_address_sk#39] +Output [1]: [ca_address_sk#34] (51) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_bill_addr_sk#35] -Right keys [1]: [ca_address_sk#39] +Left keys [1]: [ws_bill_addr_sk#30] +Right keys [1]: [ca_address_sk#34] Join condition: None (52) Project [codegen id : 17] -Output [2]: [ws_item_sk#34, ws_ext_sales_price#36] -Input [4]: [ws_item_sk#34, ws_bill_addr_sk#35, ws_ext_sales_price#36, ca_address_sk#39] +Output [2]: [ws_item_sk#29, ws_ext_sales_price#31] +Input [4]: [ws_item_sk#29, ws_bill_addr_sk#30, ws_ext_sales_price#31, ca_address_sk#34] (53) ReusedExchange [Reuses operator id: 23] -Output [2]: [i_item_sk#40, i_item_id#41] +Output [2]: [i_item_sk#35, i_item_id#36] (54) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_item_sk#34] -Right keys [1]: [i_item_sk#40] +Left keys [1]: [ws_item_sk#29] +Right keys [1]: [i_item_sk#35] Join condition: None (55) Project [codegen id : 17] -Output [2]: [ws_ext_sales_price#36, i_item_id#41] -Input [4]: [ws_item_sk#34, ws_ext_sales_price#36, i_item_sk#40, i_item_id#41] +Output [2]: [ws_ext_sales_price#31, i_item_id#36] +Input [4]: [ws_item_sk#29, ws_ext_sales_price#31, i_item_sk#35, i_item_id#36] (56) HashAggregate [codegen id : 17] -Input [2]: [ws_ext_sales_price#36, i_item_id#41] -Keys [1]: [i_item_id#41] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#36))] -Aggregate Attributes [1]: [sum#42] -Results [2]: [i_item_id#41, sum#43] +Input [2]: [ws_ext_sales_price#31, i_item_id#36] +Keys [1]: [i_item_id#36] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#31))] +Aggregate Attributes [1]: [sum#37] +Results [2]: [i_item_id#36, sum#38] (57) Exchange -Input [2]: [i_item_id#41, sum#43] -Arguments: hashpartitioning(i_item_id#41, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [2]: [i_item_id#36, sum#38] +Arguments: hashpartitioning(i_item_id#36, 5), ENSURE_REQUIREMENTS, [plan_id=6] (58) HashAggregate [codegen id : 18] -Input [2]: [i_item_id#41, sum#43] -Keys [1]: [i_item_id#41] -Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#36))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#36))#45] -Results [2]: [i_item_id#41, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#36))#45,17,2) AS total_sales#46] +Input [2]: [i_item_id#36, sum#38] +Keys [1]: [i_item_id#36] +Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#31))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#31))#39] +Results [2]: [i_item_id#36, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#31))#39,17,2) AS total_sales#40] (59) Union (60) HashAggregate [codegen id : 19] -Input [2]: [i_item_id#11, total_sales#20] -Keys [1]: [i_item_id#11] -Functions [1]: [partial_sum(total_sales#20)] -Aggregate Attributes [2]: [sum#47, isEmpty#48] -Results [3]: [i_item_id#11, sum#49, isEmpty#50] +Input [2]: [i_item_id#10, total_sales#16] +Keys [1]: [i_item_id#10] +Functions [1]: [partial_sum(total_sales#16)] +Aggregate Attributes [2]: [sum#41, isEmpty#42] +Results [3]: [i_item_id#10, sum#43, isEmpty#44] (61) Exchange -Input [3]: [i_item_id#11, sum#49, isEmpty#50] -Arguments: hashpartitioning(i_item_id#11, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [3]: [i_item_id#10, sum#43, isEmpty#44] +Arguments: hashpartitioning(i_item_id#10, 5), ENSURE_REQUIREMENTS, [plan_id=7] (62) HashAggregate [codegen id : 20] -Input [3]: [i_item_id#11, sum#49, isEmpty#50] -Keys [1]: [i_item_id#11] -Functions [1]: [sum(total_sales#20)] -Aggregate Attributes [1]: [sum(total_sales#20)#52] -Results [2]: [i_item_id#11, sum(total_sales#20)#52 AS total_sales#53] +Input [3]: [i_item_id#10, sum#43, isEmpty#44] +Keys [1]: [i_item_id#10] +Functions [1]: [sum(total_sales#16)] +Aggregate Attributes [1]: [sum(total_sales#16)#45] +Results [2]: [i_item_id#10, sum(total_sales#16)#45 AS total_sales#46] (63) TakeOrderedAndProject -Input [2]: [i_item_id#11, total_sales#53] -Arguments: 100, [i_item_id#11 ASC NULLS FIRST, total_sales#53 ASC NULLS FIRST], [i_item_id#11, total_sales#53] +Input [2]: [i_item_id#10, total_sales#46] +Arguments: 100, [i_item_id#10 ASC NULLS FIRST, total_sales#46 ASC NULLS FIRST], [i_item_id#10, total_sales#46] ===== Subqueries ===== @@ -367,29 +367,29 @@ BroadcastExchange (68) (64) Scan parquet default.date_dim -Output [3]: [d_date_sk#6, d_year#54, d_moy#55] +Output [3]: [d_date_sk#6, d_year#47, d_moy#48] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,9), IsNotNull(d_date_sk)] ReadSchema: struct (65) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] (66) Filter [codegen id : 1] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] -Condition : ((((isnotnull(d_year#54) AND isnotnull(d_moy#55)) AND (d_year#54 = 1998)) AND (d_moy#55 = 9)) AND isnotnull(d_date_sk#6)) +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] +Condition : ((((isnotnull(d_year#47) AND isnotnull(d_moy#48)) AND (d_year#47 = 1998)) AND (d_moy#48 = 9)) AND isnotnull(d_date_sk#6)) (67) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [3]: [d_date_sk#6, d_year#54, d_moy#55] +Input [3]: [d_date_sk#6, d_year#47, d_moy#48] (68) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#56] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 29 Hosting Expression = cs_sold_date_sk#24 IN dynamicpruning#5 +Subquery:2 Hosting operator id = 29 Hosting Expression = cs_sold_date_sk#20 IN dynamicpruning#5 -Subquery:3 Hosting operator id = 44 Hosting Expression = ws_sold_date_sk#37 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 44 Hosting Expression = ws_sold_date_sk#32 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q61.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q61.sf100/explain.txt index e83c4be6f7e5a..9fe0cc0d94dc1 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q61.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q61.sf100/explain.txt @@ -112,7 +112,7 @@ Input [2]: [i_item_sk#9, i_category#10] (11) BroadcastExchange Input [1]: [i_item_sk#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 7] Left keys [1]: [ss_item_sk#1] @@ -124,234 +124,234 @@ Output [4]: [ss_customer_sk#2, ss_store_sk#3, ss_promo_sk#4, ss_ext_sales_price# Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_promo_sk#4, ss_ext_sales_price#5, i_item_sk#9] (14) Scan parquet default.promotion -Output [4]: [p_promo_sk#12, p_channel_dmail#13, p_channel_email#14, p_channel_tv#15] +Output [4]: [p_promo_sk#11, p_channel_dmail#12, p_channel_email#13, p_channel_tv#14] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [Or(Or(EqualTo(p_channel_dmail,Y),EqualTo(p_channel_email,Y)),EqualTo(p_channel_tv,Y)), IsNotNull(p_promo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [4]: [p_promo_sk#12, p_channel_dmail#13, p_channel_email#14, p_channel_tv#15] +Input [4]: [p_promo_sk#11, p_channel_dmail#12, p_channel_email#13, p_channel_tv#14] (16) Filter [codegen id : 3] -Input [4]: [p_promo_sk#12, p_channel_dmail#13, p_channel_email#14, p_channel_tv#15] -Condition : ((((p_channel_dmail#13 = Y) OR (p_channel_email#14 = Y)) OR (p_channel_tv#15 = Y)) AND isnotnull(p_promo_sk#12)) +Input [4]: [p_promo_sk#11, p_channel_dmail#12, p_channel_email#13, p_channel_tv#14] +Condition : ((((p_channel_dmail#12 = Y) OR (p_channel_email#13 = Y)) OR (p_channel_tv#14 = Y)) AND isnotnull(p_promo_sk#11)) (17) Project [codegen id : 3] -Output [1]: [p_promo_sk#12] -Input [4]: [p_promo_sk#12, p_channel_dmail#13, p_channel_email#14, p_channel_tv#15] +Output [1]: [p_promo_sk#11] +Input [4]: [p_promo_sk#11, p_channel_dmail#12, p_channel_email#13, p_channel_tv#14] (18) BroadcastExchange -Input [1]: [p_promo_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16] +Input [1]: [p_promo_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 7] Left keys [1]: [ss_promo_sk#4] -Right keys [1]: [p_promo_sk#12] +Right keys [1]: [p_promo_sk#11] Join condition: None (20) Project [codegen id : 7] Output [3]: [ss_customer_sk#2, ss_store_sk#3, ss_ext_sales_price#5] -Input [5]: [ss_customer_sk#2, ss_store_sk#3, ss_promo_sk#4, ss_ext_sales_price#5, p_promo_sk#12] +Input [5]: [ss_customer_sk#2, ss_store_sk#3, ss_promo_sk#4, ss_ext_sales_price#5, p_promo_sk#11] (21) Scan parquet default.store -Output [2]: [s_store_sk#17, s_gmt_offset#18] +Output [2]: [s_store_sk#15, s_gmt_offset#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_gmt_offset), EqualTo(s_gmt_offset,-5.00), IsNotNull(s_store_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 4] -Input [2]: [s_store_sk#17, s_gmt_offset#18] +Input [2]: [s_store_sk#15, s_gmt_offset#16] (23) Filter [codegen id : 4] -Input [2]: [s_store_sk#17, s_gmt_offset#18] -Condition : ((isnotnull(s_gmt_offset#18) AND (s_gmt_offset#18 = -5.00)) AND isnotnull(s_store_sk#17)) +Input [2]: [s_store_sk#15, s_gmt_offset#16] +Condition : ((isnotnull(s_gmt_offset#16) AND (s_gmt_offset#16 = -5.00)) AND isnotnull(s_store_sk#15)) (24) Project [codegen id : 4] -Output [1]: [s_store_sk#17] -Input [2]: [s_store_sk#17, s_gmt_offset#18] +Output [1]: [s_store_sk#15] +Input [2]: [s_store_sk#15, s_gmt_offset#16] (25) BroadcastExchange -Input [1]: [s_store_sk#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#19] +Input [1]: [s_store_sk#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (26) BroadcastHashJoin [codegen id : 7] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#17] +Right keys [1]: [s_store_sk#15] Join condition: None (27) Project [codegen id : 7] Output [2]: [ss_customer_sk#2, ss_ext_sales_price#5] -Input [4]: [ss_customer_sk#2, ss_store_sk#3, ss_ext_sales_price#5, s_store_sk#17] +Input [4]: [ss_customer_sk#2, ss_store_sk#3, ss_ext_sales_price#5, s_store_sk#15] (28) Scan parquet default.customer -Output [2]: [c_customer_sk#20, c_current_addr_sk#21] +Output [2]: [c_customer_sk#17, c_current_addr_sk#18] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (29) ColumnarToRow [codegen id : 6] -Input [2]: [c_customer_sk#20, c_current_addr_sk#21] +Input [2]: [c_customer_sk#17, c_current_addr_sk#18] (30) Filter [codegen id : 6] -Input [2]: [c_customer_sk#20, c_current_addr_sk#21] -Condition : (isnotnull(c_customer_sk#20) AND isnotnull(c_current_addr_sk#21)) +Input [2]: [c_customer_sk#17, c_current_addr_sk#18] +Condition : (isnotnull(c_customer_sk#17) AND isnotnull(c_current_addr_sk#18)) (31) Scan parquet default.customer_address -Output [2]: [ca_address_sk#22, ca_gmt_offset#23] +Output [2]: [ca_address_sk#19, ca_gmt_offset#20] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_gmt_offset), EqualTo(ca_gmt_offset,-5.00), IsNotNull(ca_address_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 5] -Input [2]: [ca_address_sk#22, ca_gmt_offset#23] +Input [2]: [ca_address_sk#19, ca_gmt_offset#20] (33) Filter [codegen id : 5] -Input [2]: [ca_address_sk#22, ca_gmt_offset#23] -Condition : ((isnotnull(ca_gmt_offset#23) AND (ca_gmt_offset#23 = -5.00)) AND isnotnull(ca_address_sk#22)) +Input [2]: [ca_address_sk#19, ca_gmt_offset#20] +Condition : ((isnotnull(ca_gmt_offset#20) AND (ca_gmt_offset#20 = -5.00)) AND isnotnull(ca_address_sk#19)) (34) Project [codegen id : 5] -Output [1]: [ca_address_sk#22] -Input [2]: [ca_address_sk#22, ca_gmt_offset#23] +Output [1]: [ca_address_sk#19] +Input [2]: [ca_address_sk#19, ca_gmt_offset#20] (35) BroadcastExchange -Input [1]: [ca_address_sk#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#24] +Input [1]: [ca_address_sk#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (36) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [c_current_addr_sk#21] -Right keys [1]: [ca_address_sk#22] +Left keys [1]: [c_current_addr_sk#18] +Right keys [1]: [ca_address_sk#19] Join condition: None (37) Project [codegen id : 6] -Output [1]: [c_customer_sk#20] -Input [3]: [c_customer_sk#20, c_current_addr_sk#21, ca_address_sk#22] +Output [1]: [c_customer_sk#17] +Input [3]: [c_customer_sk#17, c_current_addr_sk#18, ca_address_sk#19] (38) BroadcastExchange -Input [1]: [c_customer_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [c_customer_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (39) BroadcastHashJoin [codegen id : 7] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#20] +Right keys [1]: [c_customer_sk#17] Join condition: None (40) Project [codegen id : 7] Output [1]: [ss_ext_sales_price#5] -Input [3]: [ss_customer_sk#2, ss_ext_sales_price#5, c_customer_sk#20] +Input [3]: [ss_customer_sk#2, ss_ext_sales_price#5, c_customer_sk#17] (41) HashAggregate [codegen id : 7] Input [1]: [ss_ext_sales_price#5] Keys: [] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum#26] -Results [1]: [sum#27] +Aggregate Attributes [1]: [sum#21] +Results [1]: [sum#22] (42) Exchange -Input [1]: [sum#27] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#28] +Input [1]: [sum#22] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6] (43) HashAggregate [codegen id : 15] -Input [1]: [sum#27] +Input [1]: [sum#22] Keys: [] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#29] -Results [1]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#29,17,2) AS promotions#30] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#23] +Results [1]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#23,17,2) AS promotions#24] (44) Scan parquet default.store_sales -Output [5]: [ss_item_sk#31, ss_customer_sk#32, ss_store_sk#33, ss_ext_sales_price#34, ss_sold_date_sk#35] +Output [5]: [ss_item_sk#25, ss_customer_sk#26, ss_store_sk#27, ss_ext_sales_price#28, ss_sold_date_sk#29] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#35), dynamicpruningexpression(ss_sold_date_sk#35 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(ss_sold_date_sk#29), dynamicpruningexpression(ss_sold_date_sk#29 IN dynamicpruning#7)] PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_item_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 13] -Input [5]: [ss_item_sk#31, ss_customer_sk#32, ss_store_sk#33, ss_ext_sales_price#34, ss_sold_date_sk#35] +Input [5]: [ss_item_sk#25, ss_customer_sk#26, ss_store_sk#27, ss_ext_sales_price#28, ss_sold_date_sk#29] (46) Filter [codegen id : 13] -Input [5]: [ss_item_sk#31, ss_customer_sk#32, ss_store_sk#33, ss_ext_sales_price#34, ss_sold_date_sk#35] -Condition : ((isnotnull(ss_store_sk#33) AND isnotnull(ss_customer_sk#32)) AND isnotnull(ss_item_sk#31)) +Input [5]: [ss_item_sk#25, ss_customer_sk#26, ss_store_sk#27, ss_ext_sales_price#28, ss_sold_date_sk#29] +Condition : ((isnotnull(ss_store_sk#27) AND isnotnull(ss_customer_sk#26)) AND isnotnull(ss_item_sk#25)) (47) ReusedExchange [Reuses operator id: 69] -Output [1]: [d_date_sk#36] +Output [1]: [d_date_sk#30] (48) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_sold_date_sk#35] -Right keys [1]: [d_date_sk#36] +Left keys [1]: [ss_sold_date_sk#29] +Right keys [1]: [d_date_sk#30] Join condition: None (49) Project [codegen id : 13] -Output [4]: [ss_item_sk#31, ss_customer_sk#32, ss_store_sk#33, ss_ext_sales_price#34] -Input [6]: [ss_item_sk#31, ss_customer_sk#32, ss_store_sk#33, ss_ext_sales_price#34, ss_sold_date_sk#35, d_date_sk#36] +Output [4]: [ss_item_sk#25, ss_customer_sk#26, ss_store_sk#27, ss_ext_sales_price#28] +Input [6]: [ss_item_sk#25, ss_customer_sk#26, ss_store_sk#27, ss_ext_sales_price#28, ss_sold_date_sk#29, d_date_sk#30] (50) ReusedExchange [Reuses operator id: 11] -Output [1]: [i_item_sk#37] +Output [1]: [i_item_sk#31] (51) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_item_sk#31] -Right keys [1]: [i_item_sk#37] +Left keys [1]: [ss_item_sk#25] +Right keys [1]: [i_item_sk#31] Join condition: None (52) Project [codegen id : 13] -Output [3]: [ss_customer_sk#32, ss_store_sk#33, ss_ext_sales_price#34] -Input [5]: [ss_item_sk#31, ss_customer_sk#32, ss_store_sk#33, ss_ext_sales_price#34, i_item_sk#37] +Output [3]: [ss_customer_sk#26, ss_store_sk#27, ss_ext_sales_price#28] +Input [5]: [ss_item_sk#25, ss_customer_sk#26, ss_store_sk#27, ss_ext_sales_price#28, i_item_sk#31] (53) ReusedExchange [Reuses operator id: 25] -Output [1]: [s_store_sk#38] +Output [1]: [s_store_sk#32] (54) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_store_sk#33] -Right keys [1]: [s_store_sk#38] +Left keys [1]: [ss_store_sk#27] +Right keys [1]: [s_store_sk#32] Join condition: None (55) Project [codegen id : 13] -Output [2]: [ss_customer_sk#32, ss_ext_sales_price#34] -Input [4]: [ss_customer_sk#32, ss_store_sk#33, ss_ext_sales_price#34, s_store_sk#38] +Output [2]: [ss_customer_sk#26, ss_ext_sales_price#28] +Input [4]: [ss_customer_sk#26, ss_store_sk#27, ss_ext_sales_price#28, s_store_sk#32] (56) ReusedExchange [Reuses operator id: 38] -Output [1]: [c_customer_sk#39] +Output [1]: [c_customer_sk#33] (57) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_customer_sk#32] -Right keys [1]: [c_customer_sk#39] +Left keys [1]: [ss_customer_sk#26] +Right keys [1]: [c_customer_sk#33] Join condition: None (58) Project [codegen id : 13] -Output [1]: [ss_ext_sales_price#34] -Input [3]: [ss_customer_sk#32, ss_ext_sales_price#34, c_customer_sk#39] +Output [1]: [ss_ext_sales_price#28] +Input [3]: [ss_customer_sk#26, ss_ext_sales_price#28, c_customer_sk#33] (59) HashAggregate [codegen id : 13] -Input [1]: [ss_ext_sales_price#34] +Input [1]: [ss_ext_sales_price#28] Keys: [] -Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#34))] -Aggregate Attributes [1]: [sum#40] -Results [1]: [sum#41] +Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#28))] +Aggregate Attributes [1]: [sum#34] +Results [1]: [sum#35] (60) Exchange -Input [1]: [sum#41] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#42] +Input [1]: [sum#35] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (61) HashAggregate [codegen id : 14] -Input [1]: [sum#41] +Input [1]: [sum#35] Keys: [] -Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#34))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#34))#43] -Results [1]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#34))#43,17,2) AS total#44] +Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#28))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#28))#36] +Results [1]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#28))#36,17,2) AS total#37] (62) BroadcastExchange -Input [1]: [total#44] -Arguments: IdentityBroadcastMode, [id=#45] +Input [1]: [total#37] +Arguments: IdentityBroadcastMode, [plan_id=8] (63) BroadcastNestedLoopJoin [codegen id : 15] Join condition: None (64) Project [codegen id : 15] -Output [3]: [promotions#30, total#44, CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(promotions#30 as decimal(15,4))) / promote_precision(cast(total#44 as decimal(15,4)))), DecimalType(35,20))) * 100.00000000000000000000), DecimalType(38,19)) AS ((CAST(promotions AS DECIMAL(15,4)) / CAST(total AS DECIMAL(15,4))) * 100)#46] -Input [2]: [promotions#30, total#44] +Output [3]: [promotions#24, total#37, CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(promotions#24 as decimal(15,4))) / promote_precision(cast(total#37 as decimal(15,4)))), DecimalType(35,20))) * 100.00000000000000000000), DecimalType(38,19)) AS ((CAST(promotions AS DECIMAL(15,4)) / CAST(total AS DECIMAL(15,4))) * 100)#38] +Input [2]: [promotions#24, total#37] ===== Subqueries ===== @@ -364,27 +364,27 @@ BroadcastExchange (69) (65) Scan parquet default.date_dim -Output [3]: [d_date_sk#8, d_year#47, d_moy#48] +Output [3]: [d_date_sk#8, d_year#39, d_moy#40] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,11), IsNotNull(d_date_sk)] ReadSchema: struct (66) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#8, d_year#47, d_moy#48] +Input [3]: [d_date_sk#8, d_year#39, d_moy#40] (67) Filter [codegen id : 1] -Input [3]: [d_date_sk#8, d_year#47, d_moy#48] -Condition : ((((isnotnull(d_year#47) AND isnotnull(d_moy#48)) AND (d_year#47 = 1998)) AND (d_moy#48 = 11)) AND isnotnull(d_date_sk#8)) +Input [3]: [d_date_sk#8, d_year#39, d_moy#40] +Condition : ((((isnotnull(d_year#39) AND isnotnull(d_moy#40)) AND (d_year#39 = 1998)) AND (d_moy#40 = 11)) AND isnotnull(d_date_sk#8)) (68) Project [codegen id : 1] Output [1]: [d_date_sk#8] -Input [3]: [d_date_sk#8, d_year#47, d_moy#48] +Input [3]: [d_date_sk#8, d_year#39, d_moy#40] (69) BroadcastExchange Input [1]: [d_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#49] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:2 Hosting operator id = 44 Hosting Expression = ss_sold_date_sk#35 IN dynamicpruning#7 +Subquery:2 Hosting operator id = 44 Hosting Expression = ss_sold_date_sk#29 IN dynamicpruning#7 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q61/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q61/explain.txt index ebf1161c7a1f0..356747eb87d6f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q61/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q61/explain.txt @@ -103,7 +103,7 @@ Input [2]: [s_store_sk#8, s_gmt_offset#9] (8) BroadcastExchange Input [1]: [s_store_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 7] Left keys [1]: [ss_store_sk#3] @@ -115,258 +115,258 @@ Output [5]: [ss_item_sk#1, ss_customer_sk#2, ss_promo_sk#4, ss_ext_sales_price#5 Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_promo_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6, s_store_sk#8] (11) Scan parquet default.promotion -Output [4]: [p_promo_sk#11, p_channel_dmail#12, p_channel_email#13, p_channel_tv#14] +Output [4]: [p_promo_sk#10, p_channel_dmail#11, p_channel_email#12, p_channel_tv#13] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [Or(Or(EqualTo(p_channel_dmail,Y),EqualTo(p_channel_email,Y)),EqualTo(p_channel_tv,Y)), IsNotNull(p_promo_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [p_promo_sk#11, p_channel_dmail#12, p_channel_email#13, p_channel_tv#14] +Input [4]: [p_promo_sk#10, p_channel_dmail#11, p_channel_email#12, p_channel_tv#13] (13) Filter [codegen id : 2] -Input [4]: [p_promo_sk#11, p_channel_dmail#12, p_channel_email#13, p_channel_tv#14] -Condition : ((((p_channel_dmail#12 = Y) OR (p_channel_email#13 = Y)) OR (p_channel_tv#14 = Y)) AND isnotnull(p_promo_sk#11)) +Input [4]: [p_promo_sk#10, p_channel_dmail#11, p_channel_email#12, p_channel_tv#13] +Condition : ((((p_channel_dmail#11 = Y) OR (p_channel_email#12 = Y)) OR (p_channel_tv#13 = Y)) AND isnotnull(p_promo_sk#10)) (14) Project [codegen id : 2] -Output [1]: [p_promo_sk#11] -Input [4]: [p_promo_sk#11, p_channel_dmail#12, p_channel_email#13, p_channel_tv#14] +Output [1]: [p_promo_sk#10] +Input [4]: [p_promo_sk#10, p_channel_dmail#11, p_channel_email#12, p_channel_tv#13] (15) BroadcastExchange -Input [1]: [p_promo_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [p_promo_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 7] Left keys [1]: [ss_promo_sk#4] -Right keys [1]: [p_promo_sk#11] +Right keys [1]: [p_promo_sk#10] Join condition: None (17) Project [codegen id : 7] Output [4]: [ss_item_sk#1, ss_customer_sk#2, ss_ext_sales_price#5, ss_sold_date_sk#6] -Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_promo_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6, p_promo_sk#11] +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_promo_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6, p_promo_sk#10] (18) ReusedExchange [Reuses operator id: 72] -Output [1]: [d_date_sk#16] +Output [1]: [d_date_sk#14] (19) BroadcastHashJoin [codegen id : 7] Left keys [1]: [ss_sold_date_sk#6] -Right keys [1]: [d_date_sk#16] +Right keys [1]: [d_date_sk#14] Join condition: None (20) Project [codegen id : 7] Output [3]: [ss_item_sk#1, ss_customer_sk#2, ss_ext_sales_price#5] -Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ext_sales_price#5, ss_sold_date_sk#6, d_date_sk#16] +Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ext_sales_price#5, ss_sold_date_sk#6, d_date_sk#14] (21) Scan parquet default.customer -Output [2]: [c_customer_sk#17, c_current_addr_sk#18] +Output [2]: [c_customer_sk#15, c_current_addr_sk#16] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 4] -Input [2]: [c_customer_sk#17, c_current_addr_sk#18] +Input [2]: [c_customer_sk#15, c_current_addr_sk#16] (23) Filter [codegen id : 4] -Input [2]: [c_customer_sk#17, c_current_addr_sk#18] -Condition : (isnotnull(c_customer_sk#17) AND isnotnull(c_current_addr_sk#18)) +Input [2]: [c_customer_sk#15, c_current_addr_sk#16] +Condition : (isnotnull(c_customer_sk#15) AND isnotnull(c_current_addr_sk#16)) (24) BroadcastExchange -Input [2]: [c_customer_sk#17, c_current_addr_sk#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19] +Input [2]: [c_customer_sk#15, c_current_addr_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (25) BroadcastHashJoin [codegen id : 7] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#17] +Right keys [1]: [c_customer_sk#15] Join condition: None (26) Project [codegen id : 7] -Output [3]: [ss_item_sk#1, ss_ext_sales_price#5, c_current_addr_sk#18] -Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ext_sales_price#5, c_customer_sk#17, c_current_addr_sk#18] +Output [3]: [ss_item_sk#1, ss_ext_sales_price#5, c_current_addr_sk#16] +Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ext_sales_price#5, c_customer_sk#15, c_current_addr_sk#16] (27) Scan parquet default.customer_address -Output [2]: [ca_address_sk#20, ca_gmt_offset#21] +Output [2]: [ca_address_sk#17, ca_gmt_offset#18] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_gmt_offset), EqualTo(ca_gmt_offset,-5.00), IsNotNull(ca_address_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 5] -Input [2]: [ca_address_sk#20, ca_gmt_offset#21] +Input [2]: [ca_address_sk#17, ca_gmt_offset#18] (29) Filter [codegen id : 5] -Input [2]: [ca_address_sk#20, ca_gmt_offset#21] -Condition : ((isnotnull(ca_gmt_offset#21) AND (ca_gmt_offset#21 = -5.00)) AND isnotnull(ca_address_sk#20)) +Input [2]: [ca_address_sk#17, ca_gmt_offset#18] +Condition : ((isnotnull(ca_gmt_offset#18) AND (ca_gmt_offset#18 = -5.00)) AND isnotnull(ca_address_sk#17)) (30) Project [codegen id : 5] -Output [1]: [ca_address_sk#20] -Input [2]: [ca_address_sk#20, ca_gmt_offset#21] +Output [1]: [ca_address_sk#17] +Input [2]: [ca_address_sk#17, ca_gmt_offset#18] (31) BroadcastExchange -Input [1]: [ca_address_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [ca_address_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (32) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [c_current_addr_sk#18] -Right keys [1]: [ca_address_sk#20] +Left keys [1]: [c_current_addr_sk#16] +Right keys [1]: [ca_address_sk#17] Join condition: None (33) Project [codegen id : 7] Output [2]: [ss_item_sk#1, ss_ext_sales_price#5] -Input [4]: [ss_item_sk#1, ss_ext_sales_price#5, c_current_addr_sk#18, ca_address_sk#20] +Input [4]: [ss_item_sk#1, ss_ext_sales_price#5, c_current_addr_sk#16, ca_address_sk#17] (34) Scan parquet default.item -Output [2]: [i_item_sk#23, i_category#24] +Output [2]: [i_item_sk#19, i_category#20] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_category), EqualTo(i_category,Jewelry ), IsNotNull(i_item_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 6] -Input [2]: [i_item_sk#23, i_category#24] +Input [2]: [i_item_sk#19, i_category#20] (36) Filter [codegen id : 6] -Input [2]: [i_item_sk#23, i_category#24] -Condition : ((isnotnull(i_category#24) AND (i_category#24 = Jewelry )) AND isnotnull(i_item_sk#23)) +Input [2]: [i_item_sk#19, i_category#20] +Condition : ((isnotnull(i_category#20) AND (i_category#20 = Jewelry )) AND isnotnull(i_item_sk#19)) (37) Project [codegen id : 6] -Output [1]: [i_item_sk#23] -Input [2]: [i_item_sk#23, i_category#24] +Output [1]: [i_item_sk#19] +Input [2]: [i_item_sk#19, i_category#20] (38) BroadcastExchange -Input [1]: [i_item_sk#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [i_item_sk#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (39) BroadcastHashJoin [codegen id : 7] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#23] +Right keys [1]: [i_item_sk#19] Join condition: None (40) Project [codegen id : 7] Output [1]: [ss_ext_sales_price#5] -Input [3]: [ss_item_sk#1, ss_ext_sales_price#5, i_item_sk#23] +Input [3]: [ss_item_sk#1, ss_ext_sales_price#5, i_item_sk#19] (41) HashAggregate [codegen id : 7] Input [1]: [ss_ext_sales_price#5] Keys: [] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum#26] -Results [1]: [sum#27] +Aggregate Attributes [1]: [sum#21] +Results [1]: [sum#22] (42) Exchange -Input [1]: [sum#27] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#28] +Input [1]: [sum#22] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6] (43) HashAggregate [codegen id : 15] -Input [1]: [sum#27] +Input [1]: [sum#22] Keys: [] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#29] -Results [1]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#29,17,2) AS promotions#30] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#23] +Results [1]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#23,17,2) AS promotions#24] (44) Scan parquet default.store_sales -Output [5]: [ss_item_sk#31, ss_customer_sk#32, ss_store_sk#33, ss_ext_sales_price#34, ss_sold_date_sk#35] +Output [5]: [ss_item_sk#25, ss_customer_sk#26, ss_store_sk#27, ss_ext_sales_price#28, ss_sold_date_sk#29] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#35), dynamicpruningexpression(ss_sold_date_sk#35 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(ss_sold_date_sk#29), dynamicpruningexpression(ss_sold_date_sk#29 IN dynamicpruning#7)] PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_item_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 13] -Input [5]: [ss_item_sk#31, ss_customer_sk#32, ss_store_sk#33, ss_ext_sales_price#34, ss_sold_date_sk#35] +Input [5]: [ss_item_sk#25, ss_customer_sk#26, ss_store_sk#27, ss_ext_sales_price#28, ss_sold_date_sk#29] (46) Filter [codegen id : 13] -Input [5]: [ss_item_sk#31, ss_customer_sk#32, ss_store_sk#33, ss_ext_sales_price#34, ss_sold_date_sk#35] -Condition : ((isnotnull(ss_store_sk#33) AND isnotnull(ss_customer_sk#32)) AND isnotnull(ss_item_sk#31)) +Input [5]: [ss_item_sk#25, ss_customer_sk#26, ss_store_sk#27, ss_ext_sales_price#28, ss_sold_date_sk#29] +Condition : ((isnotnull(ss_store_sk#27) AND isnotnull(ss_customer_sk#26)) AND isnotnull(ss_item_sk#25)) (47) ReusedExchange [Reuses operator id: 8] -Output [1]: [s_store_sk#36] +Output [1]: [s_store_sk#30] (48) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_store_sk#33] -Right keys [1]: [s_store_sk#36] +Left keys [1]: [ss_store_sk#27] +Right keys [1]: [s_store_sk#30] Join condition: None (49) Project [codegen id : 13] -Output [4]: [ss_item_sk#31, ss_customer_sk#32, ss_ext_sales_price#34, ss_sold_date_sk#35] -Input [6]: [ss_item_sk#31, ss_customer_sk#32, ss_store_sk#33, ss_ext_sales_price#34, ss_sold_date_sk#35, s_store_sk#36] +Output [4]: [ss_item_sk#25, ss_customer_sk#26, ss_ext_sales_price#28, ss_sold_date_sk#29] +Input [6]: [ss_item_sk#25, ss_customer_sk#26, ss_store_sk#27, ss_ext_sales_price#28, ss_sold_date_sk#29, s_store_sk#30] (50) ReusedExchange [Reuses operator id: 72] -Output [1]: [d_date_sk#37] +Output [1]: [d_date_sk#31] (51) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_sold_date_sk#35] -Right keys [1]: [d_date_sk#37] +Left keys [1]: [ss_sold_date_sk#29] +Right keys [1]: [d_date_sk#31] Join condition: None (52) Project [codegen id : 13] -Output [3]: [ss_item_sk#31, ss_customer_sk#32, ss_ext_sales_price#34] -Input [5]: [ss_item_sk#31, ss_customer_sk#32, ss_ext_sales_price#34, ss_sold_date_sk#35, d_date_sk#37] +Output [3]: [ss_item_sk#25, ss_customer_sk#26, ss_ext_sales_price#28] +Input [5]: [ss_item_sk#25, ss_customer_sk#26, ss_ext_sales_price#28, ss_sold_date_sk#29, d_date_sk#31] (53) ReusedExchange [Reuses operator id: 24] -Output [2]: [c_customer_sk#38, c_current_addr_sk#39] +Output [2]: [c_customer_sk#32, c_current_addr_sk#33] (54) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_customer_sk#32] -Right keys [1]: [c_customer_sk#38] +Left keys [1]: [ss_customer_sk#26] +Right keys [1]: [c_customer_sk#32] Join condition: None (55) Project [codegen id : 13] -Output [3]: [ss_item_sk#31, ss_ext_sales_price#34, c_current_addr_sk#39] -Input [5]: [ss_item_sk#31, ss_customer_sk#32, ss_ext_sales_price#34, c_customer_sk#38, c_current_addr_sk#39] +Output [3]: [ss_item_sk#25, ss_ext_sales_price#28, c_current_addr_sk#33] +Input [5]: [ss_item_sk#25, ss_customer_sk#26, ss_ext_sales_price#28, c_customer_sk#32, c_current_addr_sk#33] (56) ReusedExchange [Reuses operator id: 31] -Output [1]: [ca_address_sk#40] +Output [1]: [ca_address_sk#34] (57) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [c_current_addr_sk#39] -Right keys [1]: [ca_address_sk#40] +Left keys [1]: [c_current_addr_sk#33] +Right keys [1]: [ca_address_sk#34] Join condition: None (58) Project [codegen id : 13] -Output [2]: [ss_item_sk#31, ss_ext_sales_price#34] -Input [4]: [ss_item_sk#31, ss_ext_sales_price#34, c_current_addr_sk#39, ca_address_sk#40] +Output [2]: [ss_item_sk#25, ss_ext_sales_price#28] +Input [4]: [ss_item_sk#25, ss_ext_sales_price#28, c_current_addr_sk#33, ca_address_sk#34] (59) ReusedExchange [Reuses operator id: 38] -Output [1]: [i_item_sk#41] +Output [1]: [i_item_sk#35] (60) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_item_sk#31] -Right keys [1]: [i_item_sk#41] +Left keys [1]: [ss_item_sk#25] +Right keys [1]: [i_item_sk#35] Join condition: None (61) Project [codegen id : 13] -Output [1]: [ss_ext_sales_price#34] -Input [3]: [ss_item_sk#31, ss_ext_sales_price#34, i_item_sk#41] +Output [1]: [ss_ext_sales_price#28] +Input [3]: [ss_item_sk#25, ss_ext_sales_price#28, i_item_sk#35] (62) HashAggregate [codegen id : 13] -Input [1]: [ss_ext_sales_price#34] +Input [1]: [ss_ext_sales_price#28] Keys: [] -Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#34))] -Aggregate Attributes [1]: [sum#42] -Results [1]: [sum#43] +Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#28))] +Aggregate Attributes [1]: [sum#36] +Results [1]: [sum#37] (63) Exchange -Input [1]: [sum#43] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#44] +Input [1]: [sum#37] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (64) HashAggregate [codegen id : 14] -Input [1]: [sum#43] +Input [1]: [sum#37] Keys: [] -Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#34))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#34))#45] -Results [1]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#34))#45,17,2) AS total#46] +Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#28))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#28))#38] +Results [1]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#28))#38,17,2) AS total#39] (65) BroadcastExchange -Input [1]: [total#46] -Arguments: IdentityBroadcastMode, [id=#47] +Input [1]: [total#39] +Arguments: IdentityBroadcastMode, [plan_id=8] (66) BroadcastNestedLoopJoin [codegen id : 15] Join condition: None (67) Project [codegen id : 15] -Output [3]: [promotions#30, total#46, CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(promotions#30 as decimal(15,4))) / promote_precision(cast(total#46 as decimal(15,4)))), DecimalType(35,20))) * 100.00000000000000000000), DecimalType(38,19)) AS ((CAST(promotions AS DECIMAL(15,4)) / CAST(total AS DECIMAL(15,4))) * 100)#48] -Input [2]: [promotions#30, total#46] +Output [3]: [promotions#24, total#39, CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(promotions#24 as decimal(15,4))) / promote_precision(cast(total#39 as decimal(15,4)))), DecimalType(35,20))) * 100.00000000000000000000), DecimalType(38,19)) AS ((CAST(promotions AS DECIMAL(15,4)) / CAST(total AS DECIMAL(15,4))) * 100)#40] +Input [2]: [promotions#24, total#39] ===== Subqueries ===== @@ -379,27 +379,27 @@ BroadcastExchange (72) (68) Scan parquet default.date_dim -Output [3]: [d_date_sk#16, d_year#49, d_moy#50] +Output [3]: [d_date_sk#14, d_year#41, d_moy#42] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,11), IsNotNull(d_date_sk)] ReadSchema: struct (69) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#16, d_year#49, d_moy#50] +Input [3]: [d_date_sk#14, d_year#41, d_moy#42] (70) Filter [codegen id : 1] -Input [3]: [d_date_sk#16, d_year#49, d_moy#50] -Condition : ((((isnotnull(d_year#49) AND isnotnull(d_moy#50)) AND (d_year#49 = 1998)) AND (d_moy#50 = 11)) AND isnotnull(d_date_sk#16)) +Input [3]: [d_date_sk#14, d_year#41, d_moy#42] +Condition : ((((isnotnull(d_year#41) AND isnotnull(d_moy#42)) AND (d_year#41 = 1998)) AND (d_moy#42 = 11)) AND isnotnull(d_date_sk#14)) (71) Project [codegen id : 1] -Output [1]: [d_date_sk#16] -Input [3]: [d_date_sk#16, d_year#49, d_moy#50] +Output [1]: [d_date_sk#14] +Input [3]: [d_date_sk#14, d_year#41, d_moy#42] (72) BroadcastExchange -Input [1]: [d_date_sk#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#51] +Input [1]: [d_date_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:2 Hosting operator id = 44 Hosting Expression = ss_sold_date_sk#35 IN dynamicpruning#7 +Subquery:2 Hosting operator id = 44 Hosting Expression = ss_sold_date_sk#29 IN dynamicpruning#7 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q62.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q62.sf100/explain.txt index 0c82f6182c240..b0bdb98017246 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q62.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q62.sf100/explain.txt @@ -67,7 +67,7 @@ Input [2]: [d_date_sk#6, d_month_seq#7] (8) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_ship_date_sk#1] @@ -79,105 +79,105 @@ Output [5]: [ws_ship_date_sk#1, ws_web_site_sk#2, ws_ship_mode_sk#3, ws_warehous Input [6]: [ws_ship_date_sk#1, ws_web_site_sk#2, ws_ship_mode_sk#3, ws_warehouse_sk#4, ws_sold_date_sk#5, d_date_sk#6] (11) Scan parquet default.web_site -Output [2]: [web_site_sk#9, web_name#10] +Output [2]: [web_site_sk#8, web_name#9] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_site_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [2]: [web_site_sk#9, web_name#10] +Input [2]: [web_site_sk#8, web_name#9] (13) Filter [codegen id : 2] -Input [2]: [web_site_sk#9, web_name#10] -Condition : isnotnull(web_site_sk#9) +Input [2]: [web_site_sk#8, web_name#9] +Condition : isnotnull(web_site_sk#8) (14) BroadcastExchange -Input [2]: [web_site_sk#9, web_name#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Input [2]: [web_site_sk#8, web_name#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_web_site_sk#2] -Right keys [1]: [web_site_sk#9] +Right keys [1]: [web_site_sk#8] Join condition: None (16) Project [codegen id : 5] -Output [5]: [ws_ship_date_sk#1, ws_ship_mode_sk#3, ws_warehouse_sk#4, ws_sold_date_sk#5, web_name#10] -Input [7]: [ws_ship_date_sk#1, ws_web_site_sk#2, ws_ship_mode_sk#3, ws_warehouse_sk#4, ws_sold_date_sk#5, web_site_sk#9, web_name#10] +Output [5]: [ws_ship_date_sk#1, ws_ship_mode_sk#3, ws_warehouse_sk#4, ws_sold_date_sk#5, web_name#9] +Input [7]: [ws_ship_date_sk#1, ws_web_site_sk#2, ws_ship_mode_sk#3, ws_warehouse_sk#4, ws_sold_date_sk#5, web_site_sk#8, web_name#9] (17) Scan parquet default.ship_mode -Output [2]: [sm_ship_mode_sk#12, sm_type#13] +Output [2]: [sm_ship_mode_sk#10, sm_type#11] Batched: true Location [not included in comparison]/{warehouse_dir}/ship_mode] PushedFilters: [IsNotNull(sm_ship_mode_sk)] ReadSchema: struct (18) ColumnarToRow [codegen id : 3] -Input [2]: [sm_ship_mode_sk#12, sm_type#13] +Input [2]: [sm_ship_mode_sk#10, sm_type#11] (19) Filter [codegen id : 3] -Input [2]: [sm_ship_mode_sk#12, sm_type#13] -Condition : isnotnull(sm_ship_mode_sk#12) +Input [2]: [sm_ship_mode_sk#10, sm_type#11] +Condition : isnotnull(sm_ship_mode_sk#10) (20) BroadcastExchange -Input [2]: [sm_ship_mode_sk#12, sm_type#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Input [2]: [sm_ship_mode_sk#10, sm_type#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_ship_mode_sk#3] -Right keys [1]: [sm_ship_mode_sk#12] +Right keys [1]: [sm_ship_mode_sk#10] Join condition: None (22) Project [codegen id : 5] -Output [5]: [ws_ship_date_sk#1, ws_warehouse_sk#4, ws_sold_date_sk#5, web_name#10, sm_type#13] -Input [7]: [ws_ship_date_sk#1, ws_ship_mode_sk#3, ws_warehouse_sk#4, ws_sold_date_sk#5, web_name#10, sm_ship_mode_sk#12, sm_type#13] +Output [5]: [ws_ship_date_sk#1, ws_warehouse_sk#4, ws_sold_date_sk#5, web_name#9, sm_type#11] +Input [7]: [ws_ship_date_sk#1, ws_ship_mode_sk#3, ws_warehouse_sk#4, ws_sold_date_sk#5, web_name#9, sm_ship_mode_sk#10, sm_type#11] (23) Scan parquet default.warehouse -Output [2]: [w_warehouse_sk#15, w_warehouse_name#16] +Output [2]: [w_warehouse_sk#12, w_warehouse_name#13] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (24) ColumnarToRow [codegen id : 4] -Input [2]: [w_warehouse_sk#15, w_warehouse_name#16] +Input [2]: [w_warehouse_sk#12, w_warehouse_name#13] (25) Filter [codegen id : 4] -Input [2]: [w_warehouse_sk#15, w_warehouse_name#16] -Condition : isnotnull(w_warehouse_sk#15) +Input [2]: [w_warehouse_sk#12, w_warehouse_name#13] +Condition : isnotnull(w_warehouse_sk#12) (26) BroadcastExchange -Input [2]: [w_warehouse_sk#15, w_warehouse_name#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#17] +Input [2]: [w_warehouse_sk#12, w_warehouse_name#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (27) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_warehouse_sk#4] -Right keys [1]: [w_warehouse_sk#15] +Right keys [1]: [w_warehouse_sk#12] Join condition: None (28) Project [codegen id : 5] -Output [5]: [ws_ship_date_sk#1, ws_sold_date_sk#5, sm_type#13, web_name#10, substr(w_warehouse_name#16, 1, 20) AS _groupingexpression#18] -Input [7]: [ws_ship_date_sk#1, ws_warehouse_sk#4, ws_sold_date_sk#5, web_name#10, sm_type#13, w_warehouse_sk#15, w_warehouse_name#16] +Output [5]: [ws_ship_date_sk#1, ws_sold_date_sk#5, sm_type#11, web_name#9, substr(w_warehouse_name#13, 1, 20) AS _groupingexpression#14] +Input [7]: [ws_ship_date_sk#1, ws_warehouse_sk#4, ws_sold_date_sk#5, web_name#9, sm_type#11, w_warehouse_sk#12, w_warehouse_name#13] (29) HashAggregate [codegen id : 5] -Input [5]: [ws_ship_date_sk#1, ws_sold_date_sk#5, sm_type#13, web_name#10, _groupingexpression#18] -Keys [3]: [_groupingexpression#18, sm_type#13, web_name#10] +Input [5]: [ws_ship_date_sk#1, ws_sold_date_sk#5, sm_type#11, web_name#9, _groupingexpression#14] +Keys [3]: [_groupingexpression#14, sm_type#11, web_name#9] Functions [5]: [partial_sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 30) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 60) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 90) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)] -Aggregate Attributes [5]: [sum#19, sum#20, sum#21, sum#22, sum#23] -Results [8]: [_groupingexpression#18, sm_type#13, web_name#10, sum#24, sum#25, sum#26, sum#27, sum#28] +Aggregate Attributes [5]: [sum#15, sum#16, sum#17, sum#18, sum#19] +Results [8]: [_groupingexpression#14, sm_type#11, web_name#9, sum#20, sum#21, sum#22, sum#23, sum#24] (30) Exchange -Input [8]: [_groupingexpression#18, sm_type#13, web_name#10, sum#24, sum#25, sum#26, sum#27, sum#28] -Arguments: hashpartitioning(_groupingexpression#18, sm_type#13, web_name#10, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [8]: [_groupingexpression#14, sm_type#11, web_name#9, sum#20, sum#21, sum#22, sum#23, sum#24] +Arguments: hashpartitioning(_groupingexpression#14, sm_type#11, web_name#9, 5), ENSURE_REQUIREMENTS, [plan_id=5] (31) HashAggregate [codegen id : 6] -Input [8]: [_groupingexpression#18, sm_type#13, web_name#10, sum#24, sum#25, sum#26, sum#27, sum#28] -Keys [3]: [_groupingexpression#18, sm_type#13, web_name#10] +Input [8]: [_groupingexpression#14, sm_type#11, web_name#9, sum#20, sum#21, sum#22, sum#23, sum#24] +Keys [3]: [_groupingexpression#14, sm_type#11, web_name#9] Functions [5]: [sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END), sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 30) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END), sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 60) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END), sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 90) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END), sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)] -Aggregate Attributes [5]: [sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#30, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 30) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#31, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 60) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#32, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 90) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#33, sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#34] -Results [8]: [_groupingexpression#18 AS substr(w_warehouse_name, 1, 20)#35, sm_type#13, web_name#10, sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#30 AS 30 days #36, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 30) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#31 AS 31 - 60 days #37, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 60) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#32 AS 61 - 90 days #38, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 90) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#33 AS 91 - 120 days #39, sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#34 AS >120 days #40] +Aggregate Attributes [5]: [sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#25, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 30) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#26, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 60) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#27, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 90) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#28, sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#29] +Results [8]: [_groupingexpression#14 AS substr(w_warehouse_name, 1, 20)#30, sm_type#11, web_name#9, sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#25 AS 30 days #31, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 30) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#26 AS 31 - 60 days #32, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 60) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#27 AS 61 - 90 days #33, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 90) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#28 AS 91 - 120 days #34, sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#29 AS >120 days #35] (32) TakeOrderedAndProject -Input [8]: [substr(w_warehouse_name, 1, 20)#35, sm_type#13, web_name#10, 30 days #36, 31 - 60 days #37, 61 - 90 days #38, 91 - 120 days #39, >120 days #40] -Arguments: 100, [substr(w_warehouse_name, 1, 20)#35 ASC NULLS FIRST, sm_type#13 ASC NULLS FIRST, web_name#10 ASC NULLS FIRST], [substr(w_warehouse_name, 1, 20)#35, sm_type#13, web_name#10, 30 days #36, 31 - 60 days #37, 61 - 90 days #38, 91 - 120 days #39, >120 days #40] +Input [8]: [substr(w_warehouse_name, 1, 20)#30, sm_type#11, web_name#9, 30 days #31, 31 - 60 days #32, 61 - 90 days #33, 91 - 120 days #34, >120 days #35] +Arguments: 100, [substr(w_warehouse_name, 1, 20)#30 ASC NULLS FIRST, sm_type#11 ASC NULLS FIRST, web_name#9 ASC NULLS FIRST], [substr(w_warehouse_name, 1, 20)#30, sm_type#11, web_name#9, 30 days #31, 31 - 60 days #32, 61 - 90 days #33, 91 - 120 days #34, >120 days #35] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q62/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q62/explain.txt index 752025ebea0a5..66b58e864668b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q62/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q62/explain.txt @@ -63,7 +63,7 @@ Condition : isnotnull(w_warehouse_sk#6) (7) BroadcastExchange Input [2]: [w_warehouse_sk#6, w_warehouse_name#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_warehouse_sk#4] @@ -75,109 +75,109 @@ Output [5]: [ws_ship_date_sk#1, ws_web_site_sk#2, ws_ship_mode_sk#3, ws_sold_dat Input [7]: [ws_ship_date_sk#1, ws_web_site_sk#2, ws_ship_mode_sk#3, ws_warehouse_sk#4, ws_sold_date_sk#5, w_warehouse_sk#6, w_warehouse_name#7] (10) Scan parquet default.ship_mode -Output [2]: [sm_ship_mode_sk#9, sm_type#10] +Output [2]: [sm_ship_mode_sk#8, sm_type#9] Batched: true Location [not included in comparison]/{warehouse_dir}/ship_mode] PushedFilters: [IsNotNull(sm_ship_mode_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [2]: [sm_ship_mode_sk#9, sm_type#10] +Input [2]: [sm_ship_mode_sk#8, sm_type#9] (12) Filter [codegen id : 2] -Input [2]: [sm_ship_mode_sk#9, sm_type#10] -Condition : isnotnull(sm_ship_mode_sk#9) +Input [2]: [sm_ship_mode_sk#8, sm_type#9] +Condition : isnotnull(sm_ship_mode_sk#8) (13) BroadcastExchange -Input [2]: [sm_ship_mode_sk#9, sm_type#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Input [2]: [sm_ship_mode_sk#8, sm_type#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_ship_mode_sk#3] -Right keys [1]: [sm_ship_mode_sk#9] +Right keys [1]: [sm_ship_mode_sk#8] Join condition: None (15) Project [codegen id : 5] -Output [5]: [ws_ship_date_sk#1, ws_web_site_sk#2, ws_sold_date_sk#5, w_warehouse_name#7, sm_type#10] -Input [7]: [ws_ship_date_sk#1, ws_web_site_sk#2, ws_ship_mode_sk#3, ws_sold_date_sk#5, w_warehouse_name#7, sm_ship_mode_sk#9, sm_type#10] +Output [5]: [ws_ship_date_sk#1, ws_web_site_sk#2, ws_sold_date_sk#5, w_warehouse_name#7, sm_type#9] +Input [7]: [ws_ship_date_sk#1, ws_web_site_sk#2, ws_ship_mode_sk#3, ws_sold_date_sk#5, w_warehouse_name#7, sm_ship_mode_sk#8, sm_type#9] (16) Scan parquet default.web_site -Output [2]: [web_site_sk#12, web_name#13] +Output [2]: [web_site_sk#10, web_name#11] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_site_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 3] -Input [2]: [web_site_sk#12, web_name#13] +Input [2]: [web_site_sk#10, web_name#11] (18) Filter [codegen id : 3] -Input [2]: [web_site_sk#12, web_name#13] -Condition : isnotnull(web_site_sk#12) +Input [2]: [web_site_sk#10, web_name#11] +Condition : isnotnull(web_site_sk#10) (19) BroadcastExchange -Input [2]: [web_site_sk#12, web_name#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Input [2]: [web_site_sk#10, web_name#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (20) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_web_site_sk#2] -Right keys [1]: [web_site_sk#12] +Right keys [1]: [web_site_sk#10] Join condition: None (21) Project [codegen id : 5] -Output [5]: [ws_ship_date_sk#1, ws_sold_date_sk#5, w_warehouse_name#7, sm_type#10, web_name#13] -Input [7]: [ws_ship_date_sk#1, ws_web_site_sk#2, ws_sold_date_sk#5, w_warehouse_name#7, sm_type#10, web_site_sk#12, web_name#13] +Output [5]: [ws_ship_date_sk#1, ws_sold_date_sk#5, w_warehouse_name#7, sm_type#9, web_name#11] +Input [7]: [ws_ship_date_sk#1, ws_web_site_sk#2, ws_sold_date_sk#5, w_warehouse_name#7, sm_type#9, web_site_sk#10, web_name#11] (22) Scan parquet default.date_dim -Output [2]: [d_date_sk#15, d_month_seq#16] +Output [2]: [d_date_sk#12, d_month_seq#13] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 4] -Input [2]: [d_date_sk#15, d_month_seq#16] +Input [2]: [d_date_sk#12, d_month_seq#13] (24) Filter [codegen id : 4] -Input [2]: [d_date_sk#15, d_month_seq#16] -Condition : (((isnotnull(d_month_seq#16) AND (d_month_seq#16 >= 1200)) AND (d_month_seq#16 <= 1211)) AND isnotnull(d_date_sk#15)) +Input [2]: [d_date_sk#12, d_month_seq#13] +Condition : (((isnotnull(d_month_seq#13) AND (d_month_seq#13 >= 1200)) AND (d_month_seq#13 <= 1211)) AND isnotnull(d_date_sk#12)) (25) Project [codegen id : 4] -Output [1]: [d_date_sk#15] -Input [2]: [d_date_sk#15, d_month_seq#16] +Output [1]: [d_date_sk#12] +Input [2]: [d_date_sk#12, d_month_seq#13] (26) BroadcastExchange -Input [1]: [d_date_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Input [1]: [d_date_sk#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (27) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_ship_date_sk#1] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#12] Join condition: None (28) Project [codegen id : 5] -Output [5]: [ws_ship_date_sk#1, ws_sold_date_sk#5, sm_type#10, web_name#13, substr(w_warehouse_name#7, 1, 20) AS _groupingexpression#18] -Input [6]: [ws_ship_date_sk#1, ws_sold_date_sk#5, w_warehouse_name#7, sm_type#10, web_name#13, d_date_sk#15] +Output [5]: [ws_ship_date_sk#1, ws_sold_date_sk#5, sm_type#9, web_name#11, substr(w_warehouse_name#7, 1, 20) AS _groupingexpression#14] +Input [6]: [ws_ship_date_sk#1, ws_sold_date_sk#5, w_warehouse_name#7, sm_type#9, web_name#11, d_date_sk#12] (29) HashAggregate [codegen id : 5] -Input [5]: [ws_ship_date_sk#1, ws_sold_date_sk#5, sm_type#10, web_name#13, _groupingexpression#18] -Keys [3]: [_groupingexpression#18, sm_type#10, web_name#13] +Input [5]: [ws_ship_date_sk#1, ws_sold_date_sk#5, sm_type#9, web_name#11, _groupingexpression#14] +Keys [3]: [_groupingexpression#14, sm_type#9, web_name#11] Functions [5]: [partial_sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 30) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 60) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 90) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)] -Aggregate Attributes [5]: [sum#19, sum#20, sum#21, sum#22, sum#23] -Results [8]: [_groupingexpression#18, sm_type#10, web_name#13, sum#24, sum#25, sum#26, sum#27, sum#28] +Aggregate Attributes [5]: [sum#15, sum#16, sum#17, sum#18, sum#19] +Results [8]: [_groupingexpression#14, sm_type#9, web_name#11, sum#20, sum#21, sum#22, sum#23, sum#24] (30) Exchange -Input [8]: [_groupingexpression#18, sm_type#10, web_name#13, sum#24, sum#25, sum#26, sum#27, sum#28] -Arguments: hashpartitioning(_groupingexpression#18, sm_type#10, web_name#13, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [8]: [_groupingexpression#14, sm_type#9, web_name#11, sum#20, sum#21, sum#22, sum#23, sum#24] +Arguments: hashpartitioning(_groupingexpression#14, sm_type#9, web_name#11, 5), ENSURE_REQUIREMENTS, [plan_id=5] (31) HashAggregate [codegen id : 6] -Input [8]: [_groupingexpression#18, sm_type#10, web_name#13, sum#24, sum#25, sum#26, sum#27, sum#28] -Keys [3]: [_groupingexpression#18, sm_type#10, web_name#13] +Input [8]: [_groupingexpression#14, sm_type#9, web_name#11, sum#20, sum#21, sum#22, sum#23, sum#24] +Keys [3]: [_groupingexpression#14, sm_type#9, web_name#11] Functions [5]: [sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END), sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 30) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END), sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 60) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END), sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 90) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END), sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)] -Aggregate Attributes [5]: [sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#30, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 30) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#31, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 60) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#32, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 90) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#33, sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#34] -Results [8]: [_groupingexpression#18 AS substr(w_warehouse_name, 1, 20)#35, sm_type#10, web_name#13, sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#30 AS 30 days #36, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 30) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#31 AS 31 - 60 days #37, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 60) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#32 AS 61 - 90 days #38, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 90) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#33 AS 91 - 120 days #39, sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#34 AS >120 days #40] +Aggregate Attributes [5]: [sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#25, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 30) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#26, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 60) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#27, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 90) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#28, sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#29] +Results [8]: [_groupingexpression#14 AS substr(w_warehouse_name, 1, 20)#30, sm_type#9, web_name#11, sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#25 AS 30 days #31, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 30) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#26 AS 31 - 60 days #32, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 60) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#27 AS 61 - 90 days #33, sum(CASE WHEN (((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 90) AND ((ws_ship_date_sk#1 - ws_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#28 AS 91 - 120 days #34, sum(CASE WHEN ((ws_ship_date_sk#1 - ws_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#29 AS >120 days #35] (32) TakeOrderedAndProject -Input [8]: [substr(w_warehouse_name, 1, 20)#35, sm_type#10, web_name#13, 30 days #36, 31 - 60 days #37, 61 - 90 days #38, 91 - 120 days #39, >120 days #40] -Arguments: 100, [substr(w_warehouse_name, 1, 20)#35 ASC NULLS FIRST, sm_type#10 ASC NULLS FIRST, web_name#13 ASC NULLS FIRST], [substr(w_warehouse_name, 1, 20)#35, sm_type#10, web_name#13, 30 days #36, 31 - 60 days #37, 61 - 90 days #38, 91 - 120 days #39, >120 days #40] +Input [8]: [substr(w_warehouse_name, 1, 20)#30, sm_type#9, web_name#11, 30 days #31, 31 - 60 days #32, 61 - 90 days #33, 91 - 120 days #34, >120 days #35] +Arguments: 100, [substr(w_warehouse_name, 1, 20)#30 ASC NULLS FIRST, sm_type#9 ASC NULLS FIRST, web_name#11 ASC NULLS FIRST], [substr(w_warehouse_name, 1, 20)#30, sm_type#9, web_name#11, 30 days #31, 31 - 60 days #32, 61 - 90 days #33, 91 - 120 days #34, >120 days #35] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q63.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q63.sf100/explain.txt index fe91e93a55aba..fdc937b6de91e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q63.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q63.sf100/explain.txt @@ -49,116 +49,116 @@ Input [5]: [i_item_sk#1, i_brand#2, i_class#3, i_category#4, i_manager_id#5] (5) BroadcastExchange Input [2]: [i_item_sk#1, i_manager_id#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.store_sales -Output [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] +Output [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#14), dynamicpruningexpression(ss_sold_date_sk#14 IN dynamicpruning#15)] +PartitionFilters: [isnotnull(ss_sold_date_sk#13), dynamicpruningexpression(ss_sold_date_sk#13 IN dynamicpruning#14)] PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (7) ColumnarToRow -Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] +Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] (8) Filter -Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] -Condition : (isnotnull(ss_item_sk#11) AND isnotnull(ss_store_sk#12)) +Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] +Condition : (isnotnull(ss_item_sk#10) AND isnotnull(ss_store_sk#11)) (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] -Right keys [1]: [ss_item_sk#11] +Right keys [1]: [ss_item_sk#10] Join condition: None (10) Project [codegen id : 4] -Output [4]: [i_manager_id#5, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] -Input [6]: [i_item_sk#1, i_manager_id#5, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] +Output [4]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] +Input [6]: [i_item_sk#1, i_manager_id#5, ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] (11) Scan parquet default.store -Output [1]: [s_store_sk#16] +Output [1]: [s_store_sk#15] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [1]: [s_store_sk#16] +Input [1]: [s_store_sk#15] (13) Filter [codegen id : 2] -Input [1]: [s_store_sk#16] -Condition : isnotnull(s_store_sk#16) +Input [1]: [s_store_sk#15] +Condition : isnotnull(s_store_sk#15) (14) BroadcastExchange -Input [1]: [s_store_sk#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#17] +Input [1]: [s_store_sk#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_store_sk#12] -Right keys [1]: [s_store_sk#16] +Left keys [1]: [ss_store_sk#11] +Right keys [1]: [s_store_sk#15] Join condition: None (16) Project [codegen id : 4] -Output [3]: [i_manager_id#5, ss_sales_price#13, ss_sold_date_sk#14] -Input [5]: [i_manager_id#5, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14, s_store_sk#16] +Output [3]: [i_manager_id#5, ss_sales_price#12, ss_sold_date_sk#13] +Input [5]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13, s_store_sk#15] (17) ReusedExchange [Reuses operator id: 33] -Output [2]: [d_date_sk#18, d_moy#19] +Output [2]: [d_date_sk#16, d_moy#17] (18) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#14] -Right keys [1]: [d_date_sk#18] +Left keys [1]: [ss_sold_date_sk#13] +Right keys [1]: [d_date_sk#16] Join condition: None (19) Project [codegen id : 4] -Output [3]: [i_manager_id#5, ss_sales_price#13, d_moy#19] -Input [5]: [i_manager_id#5, ss_sales_price#13, ss_sold_date_sk#14, d_date_sk#18, d_moy#19] +Output [3]: [i_manager_id#5, ss_sales_price#12, d_moy#17] +Input [5]: [i_manager_id#5, ss_sales_price#12, ss_sold_date_sk#13, d_date_sk#16, d_moy#17] (20) HashAggregate [codegen id : 4] -Input [3]: [i_manager_id#5, ss_sales_price#13, d_moy#19] -Keys [2]: [i_manager_id#5, d_moy#19] -Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#13))] -Aggregate Attributes [1]: [sum#20] -Results [3]: [i_manager_id#5, d_moy#19, sum#21] +Input [3]: [i_manager_id#5, ss_sales_price#12, d_moy#17] +Keys [2]: [i_manager_id#5, d_moy#17] +Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#12))] +Aggregate Attributes [1]: [sum#18] +Results [3]: [i_manager_id#5, d_moy#17, sum#19] (21) Exchange -Input [3]: [i_manager_id#5, d_moy#19, sum#21] -Arguments: hashpartitioning(i_manager_id#5, d_moy#19, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [3]: [i_manager_id#5, d_moy#17, sum#19] +Arguments: hashpartitioning(i_manager_id#5, d_moy#17, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 5] -Input [3]: [i_manager_id#5, d_moy#19, sum#21] -Keys [2]: [i_manager_id#5, d_moy#19] -Functions [1]: [sum(UnscaledValue(ss_sales_price#13))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#13))#23] -Results [3]: [i_manager_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#23,17,2) AS sum_sales#24, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#23,17,2) AS _w0#25] +Input [3]: [i_manager_id#5, d_moy#17, sum#19] +Keys [2]: [i_manager_id#5, d_moy#17] +Functions [1]: [sum(UnscaledValue(ss_sales_price#12))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#12))#20] +Results [3]: [i_manager_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS _w0#22] (23) Exchange -Input [3]: [i_manager_id#5, sum_sales#24, _w0#25] -Arguments: hashpartitioning(i_manager_id#5, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [3]: [i_manager_id#5, sum_sales#21, _w0#22] +Arguments: hashpartitioning(i_manager_id#5, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 6] -Input [3]: [i_manager_id#5, sum_sales#24, _w0#25] +Input [3]: [i_manager_id#5, sum_sales#21, _w0#22] Arguments: [i_manager_id#5 ASC NULLS FIRST], false, 0 (25) Window -Input [3]: [i_manager_id#5, sum_sales#24, _w0#25] -Arguments: [avg(_w0#25) windowspecdefinition(i_manager_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#27], [i_manager_id#5] +Input [3]: [i_manager_id#5, sum_sales#21, _w0#22] +Arguments: [avg(_w0#22) windowspecdefinition(i_manager_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#23], [i_manager_id#5] (26) Filter [codegen id : 7] -Input [4]: [i_manager_id#5, sum_sales#24, _w0#25, avg_monthly_sales#27] -Condition : (isnotnull(avg_monthly_sales#27) AND ((avg_monthly_sales#27 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#24 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#27 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#27 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) +Input [4]: [i_manager_id#5, sum_sales#21, _w0#22, avg_monthly_sales#23] +Condition : (isnotnull(avg_monthly_sales#23) AND ((avg_monthly_sales#23 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#23 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#23 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) (27) Project [codegen id : 7] -Output [3]: [i_manager_id#5, sum_sales#24, avg_monthly_sales#27] -Input [4]: [i_manager_id#5, sum_sales#24, _w0#25, avg_monthly_sales#27] +Output [3]: [i_manager_id#5, sum_sales#21, avg_monthly_sales#23] +Input [4]: [i_manager_id#5, sum_sales#21, _w0#22, avg_monthly_sales#23] (28) TakeOrderedAndProject -Input [3]: [i_manager_id#5, sum_sales#24, avg_monthly_sales#27] -Arguments: 100, [i_manager_id#5 ASC NULLS FIRST, avg_monthly_sales#27 ASC NULLS FIRST, sum_sales#24 ASC NULLS FIRST], [i_manager_id#5, sum_sales#24, avg_monthly_sales#27] +Input [3]: [i_manager_id#5, sum_sales#21, avg_monthly_sales#23] +Arguments: 100, [i_manager_id#5 ASC NULLS FIRST, avg_monthly_sales#23 ASC NULLS FIRST, sum_sales#21 ASC NULLS FIRST], [i_manager_id#5, sum_sales#21, avg_monthly_sales#23] ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#14 IN dynamicpruning#15 +Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#13 IN dynamicpruning#14 BroadcastExchange (33) +- * Project (32) +- * Filter (31) @@ -167,25 +167,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [3]: [d_date_sk#18, d_month_seq#28, d_moy#19] +Output [3]: [d_date_sk#16, d_month_seq#24, d_moy#17] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_month_seq, [1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211]), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#18, d_month_seq#28, d_moy#19] +Input [3]: [d_date_sk#16, d_month_seq#24, d_moy#17] (31) Filter [codegen id : 1] -Input [3]: [d_date_sk#18, d_month_seq#28, d_moy#19] -Condition : (d_month_seq#28 INSET 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211 AND isnotnull(d_date_sk#18)) +Input [3]: [d_date_sk#16, d_month_seq#24, d_moy#17] +Condition : (d_month_seq#24 INSET 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211 AND isnotnull(d_date_sk#16)) (32) Project [codegen id : 1] -Output [2]: [d_date_sk#18, d_moy#19] -Input [3]: [d_date_sk#18, d_month_seq#28, d_moy#19] +Output [2]: [d_date_sk#16, d_moy#17] +Input [3]: [d_date_sk#16, d_month_seq#24, d_moy#17] (33) BroadcastExchange -Input [2]: [d_date_sk#18, d_moy#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#29] +Input [2]: [d_date_sk#16, d_moy#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q63/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q63/explain.txt index ad0ca3ea63d42..51d52f254de03 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q63/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q63/explain.txt @@ -64,7 +64,7 @@ Condition : (isnotnull(ss_item_sk#10) AND isnotnull(ss_store_sk#11)) (8) BroadcastExchange Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] @@ -76,85 +76,85 @@ Output [4]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk# Input [6]: [i_item_sk#1, i_manager_id#5, ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13] (11) ReusedExchange [Reuses operator id: 33] -Output [2]: [d_date_sk#16, d_moy#17] +Output [2]: [d_date_sk#15, d_moy#16] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_date_sk#13] -Right keys [1]: [d_date_sk#16] +Right keys [1]: [d_date_sk#15] Join condition: None (13) Project [codegen id : 4] -Output [4]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, d_moy#17] -Input [6]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13, d_date_sk#16, d_moy#17] +Output [4]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, d_moy#16] +Input [6]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13, d_date_sk#15, d_moy#16] (14) Scan parquet default.store -Output [1]: [s_store_sk#18] +Output [1]: [s_store_sk#17] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [1]: [s_store_sk#18] +Input [1]: [s_store_sk#17] (16) Filter [codegen id : 3] -Input [1]: [s_store_sk#18] -Condition : isnotnull(s_store_sk#18) +Input [1]: [s_store_sk#17] +Condition : isnotnull(s_store_sk#17) (17) BroadcastExchange -Input [1]: [s_store_sk#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19] +Input [1]: [s_store_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#11] -Right keys [1]: [s_store_sk#18] +Right keys [1]: [s_store_sk#17] Join condition: None (19) Project [codegen id : 4] -Output [3]: [i_manager_id#5, ss_sales_price#12, d_moy#17] -Input [5]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, d_moy#17, s_store_sk#18] +Output [3]: [i_manager_id#5, ss_sales_price#12, d_moy#16] +Input [5]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, d_moy#16, s_store_sk#17] (20) HashAggregate [codegen id : 4] -Input [3]: [i_manager_id#5, ss_sales_price#12, d_moy#17] -Keys [2]: [i_manager_id#5, d_moy#17] +Input [3]: [i_manager_id#5, ss_sales_price#12, d_moy#16] +Keys [2]: [i_manager_id#5, d_moy#16] Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#12))] -Aggregate Attributes [1]: [sum#20] -Results [3]: [i_manager_id#5, d_moy#17, sum#21] +Aggregate Attributes [1]: [sum#18] +Results [3]: [i_manager_id#5, d_moy#16, sum#19] (21) Exchange -Input [3]: [i_manager_id#5, d_moy#17, sum#21] -Arguments: hashpartitioning(i_manager_id#5, d_moy#17, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [3]: [i_manager_id#5, d_moy#16, sum#19] +Arguments: hashpartitioning(i_manager_id#5, d_moy#16, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 5] -Input [3]: [i_manager_id#5, d_moy#17, sum#21] -Keys [2]: [i_manager_id#5, d_moy#17] +Input [3]: [i_manager_id#5, d_moy#16, sum#19] +Keys [2]: [i_manager_id#5, d_moy#16] Functions [1]: [sum(UnscaledValue(ss_sales_price#12))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#12))#23] -Results [3]: [i_manager_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#23,17,2) AS sum_sales#24, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#23,17,2) AS _w0#25] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#12))#20] +Results [3]: [i_manager_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#20,17,2) AS _w0#22] (23) Exchange -Input [3]: [i_manager_id#5, sum_sales#24, _w0#25] -Arguments: hashpartitioning(i_manager_id#5, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [3]: [i_manager_id#5, sum_sales#21, _w0#22] +Arguments: hashpartitioning(i_manager_id#5, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 6] -Input [3]: [i_manager_id#5, sum_sales#24, _w0#25] +Input [3]: [i_manager_id#5, sum_sales#21, _w0#22] Arguments: [i_manager_id#5 ASC NULLS FIRST], false, 0 (25) Window -Input [3]: [i_manager_id#5, sum_sales#24, _w0#25] -Arguments: [avg(_w0#25) windowspecdefinition(i_manager_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#27], [i_manager_id#5] +Input [3]: [i_manager_id#5, sum_sales#21, _w0#22] +Arguments: [avg(_w0#22) windowspecdefinition(i_manager_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#23], [i_manager_id#5] (26) Filter [codegen id : 7] -Input [4]: [i_manager_id#5, sum_sales#24, _w0#25, avg_monthly_sales#27] -Condition : (isnotnull(avg_monthly_sales#27) AND ((avg_monthly_sales#27 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#24 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#27 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#27 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) +Input [4]: [i_manager_id#5, sum_sales#21, _w0#22, avg_monthly_sales#23] +Condition : (isnotnull(avg_monthly_sales#23) AND ((avg_monthly_sales#23 > 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#23 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#23 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) (27) Project [codegen id : 7] -Output [3]: [i_manager_id#5, sum_sales#24, avg_monthly_sales#27] -Input [4]: [i_manager_id#5, sum_sales#24, _w0#25, avg_monthly_sales#27] +Output [3]: [i_manager_id#5, sum_sales#21, avg_monthly_sales#23] +Input [4]: [i_manager_id#5, sum_sales#21, _w0#22, avg_monthly_sales#23] (28) TakeOrderedAndProject -Input [3]: [i_manager_id#5, sum_sales#24, avg_monthly_sales#27] -Arguments: 100, [i_manager_id#5 ASC NULLS FIRST, avg_monthly_sales#27 ASC NULLS FIRST, sum_sales#24 ASC NULLS FIRST], [i_manager_id#5, sum_sales#24, avg_monthly_sales#27] +Input [3]: [i_manager_id#5, sum_sales#21, avg_monthly_sales#23] +Arguments: 100, [i_manager_id#5 ASC NULLS FIRST, avg_monthly_sales#23 ASC NULLS FIRST, sum_sales#21 ASC NULLS FIRST], [i_manager_id#5, sum_sales#21, avg_monthly_sales#23] ===== Subqueries ===== @@ -167,25 +167,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [3]: [d_date_sk#16, d_month_seq#28, d_moy#17] +Output [3]: [d_date_sk#15, d_month_seq#24, d_moy#16] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [In(d_month_seq, [1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211]), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#16, d_month_seq#28, d_moy#17] +Input [3]: [d_date_sk#15, d_month_seq#24, d_moy#16] (31) Filter [codegen id : 1] -Input [3]: [d_date_sk#16, d_month_seq#28, d_moy#17] -Condition : (d_month_seq#28 INSET 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211 AND isnotnull(d_date_sk#16)) +Input [3]: [d_date_sk#15, d_month_seq#24, d_moy#16] +Condition : (d_month_seq#24 INSET 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211 AND isnotnull(d_date_sk#15)) (32) Project [codegen id : 1] -Output [2]: [d_date_sk#16, d_moy#17] -Input [3]: [d_date_sk#16, d_month_seq#28, d_moy#17] +Output [2]: [d_date_sk#15, d_moy#16] +Input [3]: [d_date_sk#15, d_month_seq#24, d_moy#16] (33) BroadcastExchange -Input [2]: [d_date_sk#16, d_moy#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#29] +Input [2]: [d_date_sk#15, d_moy#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q65.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q65.sf100/explain.txt index 474967b54286a..b18b10c69f2cd 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q65.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q65.sf100/explain.txt @@ -78,164 +78,164 @@ Results [3]: [ss_store_sk#2, ss_item_sk#1, sum#8] (8) Exchange Input [3]: [ss_store_sk#2, ss_item_sk#1, sum#8] -Arguments: hashpartitioning(ss_store_sk#2, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ss_store_sk#2, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (9) HashAggregate [codegen id : 8] Input [3]: [ss_store_sk#2, ss_item_sk#1, sum#8] Keys [2]: [ss_store_sk#2, ss_item_sk#1] Functions [1]: [sum(UnscaledValue(ss_sales_price#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#3))#10] -Results [3]: [ss_store_sk#2, ss_item_sk#1, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#10,17,2) AS revenue#11] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#3))#9] +Results [3]: [ss_store_sk#2, ss_item_sk#1, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#9,17,2) AS revenue#10] (10) Filter [codegen id : 8] -Input [3]: [ss_store_sk#2, ss_item_sk#1, revenue#11] -Condition : isnotnull(revenue#11) +Input [3]: [ss_store_sk#2, ss_item_sk#1, revenue#10] +Condition : isnotnull(revenue#10) (11) Scan parquet default.store_sales -Output [4]: [ss_item_sk#12, ss_store_sk#13, ss_sales_price#14, ss_sold_date_sk#15] +Output [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#15), dynamicpruningexpression(ss_sold_date_sk#15 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ss_sold_date_sk#14), dynamicpruningexpression(ss_sold_date_sk#14 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ss_store_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 4] -Input [4]: [ss_item_sk#12, ss_store_sk#13, ss_sales_price#14, ss_sold_date_sk#15] +Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] (13) Filter [codegen id : 4] -Input [4]: [ss_item_sk#12, ss_store_sk#13, ss_sales_price#14, ss_sold_date_sk#15] -Condition : isnotnull(ss_store_sk#13) +Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14] +Condition : isnotnull(ss_store_sk#12) (14) ReusedExchange [Reuses operator id: 46] -Output [1]: [d_date_sk#16] +Output [1]: [d_date_sk#15] (15) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#15] -Right keys [1]: [d_date_sk#16] +Left keys [1]: [ss_sold_date_sk#14] +Right keys [1]: [d_date_sk#15] Join condition: None (16) Project [codegen id : 4] -Output [3]: [ss_item_sk#12, ss_store_sk#13, ss_sales_price#14] -Input [5]: [ss_item_sk#12, ss_store_sk#13, ss_sales_price#14, ss_sold_date_sk#15, d_date_sk#16] +Output [3]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13] +Input [5]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14, d_date_sk#15] (17) HashAggregate [codegen id : 4] -Input [3]: [ss_item_sk#12, ss_store_sk#13, ss_sales_price#14] -Keys [2]: [ss_store_sk#13, ss_item_sk#12] -Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#14))] -Aggregate Attributes [1]: [sum#17] -Results [3]: [ss_store_sk#13, ss_item_sk#12, sum#18] +Input [3]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13] +Keys [2]: [ss_store_sk#12, ss_item_sk#11] +Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#13))] +Aggregate Attributes [1]: [sum#16] +Results [3]: [ss_store_sk#12, ss_item_sk#11, sum#17] (18) Exchange -Input [3]: [ss_store_sk#13, ss_item_sk#12, sum#18] -Arguments: hashpartitioning(ss_store_sk#13, ss_item_sk#12, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [3]: [ss_store_sk#12, ss_item_sk#11, sum#17] +Arguments: hashpartitioning(ss_store_sk#12, ss_item_sk#11, 5), ENSURE_REQUIREMENTS, [plan_id=2] (19) HashAggregate [codegen id : 5] -Input [3]: [ss_store_sk#13, ss_item_sk#12, sum#18] -Keys [2]: [ss_store_sk#13, ss_item_sk#12] -Functions [1]: [sum(UnscaledValue(ss_sales_price#14))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#14))#20] -Results [2]: [ss_store_sk#13, MakeDecimal(sum(UnscaledValue(ss_sales_price#14))#20,17,2) AS revenue#21] +Input [3]: [ss_store_sk#12, ss_item_sk#11, sum#17] +Keys [2]: [ss_store_sk#12, ss_item_sk#11] +Functions [1]: [sum(UnscaledValue(ss_sales_price#13))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#13))#18] +Results [2]: [ss_store_sk#12, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#18,17,2) AS revenue#19] (20) HashAggregate [codegen id : 5] -Input [2]: [ss_store_sk#13, revenue#21] -Keys [1]: [ss_store_sk#13] -Functions [1]: [partial_avg(revenue#21)] -Aggregate Attributes [2]: [sum#22, count#23] -Results [3]: [ss_store_sk#13, sum#24, count#25] +Input [2]: [ss_store_sk#12, revenue#19] +Keys [1]: [ss_store_sk#12] +Functions [1]: [partial_avg(revenue#19)] +Aggregate Attributes [2]: [sum#20, count#21] +Results [3]: [ss_store_sk#12, sum#22, count#23] (21) Exchange -Input [3]: [ss_store_sk#13, sum#24, count#25] -Arguments: hashpartitioning(ss_store_sk#13, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [3]: [ss_store_sk#12, sum#22, count#23] +Arguments: hashpartitioning(ss_store_sk#12, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 6] -Input [3]: [ss_store_sk#13, sum#24, count#25] -Keys [1]: [ss_store_sk#13] -Functions [1]: [avg(revenue#21)] -Aggregate Attributes [1]: [avg(revenue#21)#27] -Results [2]: [ss_store_sk#13, avg(revenue#21)#27 AS ave#28] +Input [3]: [ss_store_sk#12, sum#22, count#23] +Keys [1]: [ss_store_sk#12] +Functions [1]: [avg(revenue#19)] +Aggregate Attributes [1]: [avg(revenue#19)#24] +Results [2]: [ss_store_sk#12, avg(revenue#19)#24 AS ave#25] (23) BroadcastExchange -Input [2]: [ss_store_sk#13, ave#28] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#29] +Input [2]: [ss_store_sk#12, ave#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (24) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_store_sk#2] -Right keys [1]: [ss_store_sk#13] -Join condition: (cast(revenue#11 as decimal(23,7)) <= CheckOverflow((0.100000 * promote_precision(ave#28)), DecimalType(23,7))) +Right keys [1]: [ss_store_sk#12] +Join condition: (cast(revenue#10 as decimal(23,7)) <= CheckOverflow((0.100000 * promote_precision(ave#25)), DecimalType(23,7))) (25) Project [codegen id : 8] -Output [3]: [ss_store_sk#2, ss_item_sk#1, revenue#11] -Input [5]: [ss_store_sk#2, ss_item_sk#1, revenue#11, ss_store_sk#13, ave#28] +Output [3]: [ss_store_sk#2, ss_item_sk#1, revenue#10] +Input [5]: [ss_store_sk#2, ss_item_sk#1, revenue#10, ss_store_sk#12, ave#25] (26) Scan parquet default.store -Output [2]: [s_store_sk#30, s_store_name#31] +Output [2]: [s_store_sk#26, s_store_name#27] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 7] -Input [2]: [s_store_sk#30, s_store_name#31] +Input [2]: [s_store_sk#26, s_store_name#27] (28) Filter [codegen id : 7] -Input [2]: [s_store_sk#30, s_store_name#31] -Condition : isnotnull(s_store_sk#30) +Input [2]: [s_store_sk#26, s_store_name#27] +Condition : isnotnull(s_store_sk#26) (29) BroadcastExchange -Input [2]: [s_store_sk#30, s_store_name#31] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#32] +Input [2]: [s_store_sk#26, s_store_name#27] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (30) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_store_sk#2] -Right keys [1]: [s_store_sk#30] +Right keys [1]: [s_store_sk#26] Join condition: None (31) Project [codegen id : 8] -Output [3]: [ss_item_sk#1, revenue#11, s_store_name#31] -Input [5]: [ss_store_sk#2, ss_item_sk#1, revenue#11, s_store_sk#30, s_store_name#31] +Output [3]: [ss_item_sk#1, revenue#10, s_store_name#27] +Input [5]: [ss_store_sk#2, ss_item_sk#1, revenue#10, s_store_sk#26, s_store_name#27] (32) Exchange -Input [3]: [ss_item_sk#1, revenue#11, s_store_name#31] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#33] +Input [3]: [ss_item_sk#1, revenue#10, s_store_name#27] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=6] (33) Sort [codegen id : 9] -Input [3]: [ss_item_sk#1, revenue#11, s_store_name#31] +Input [3]: [ss_item_sk#1, revenue#10, s_store_name#27] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (34) Scan parquet default.item -Output [5]: [i_item_sk#34, i_item_desc#35, i_current_price#36, i_wholesale_cost#37, i_brand#38] +Output [5]: [i_item_sk#28, i_item_desc#29, i_current_price#30, i_wholesale_cost#31, i_brand#32] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 10] -Input [5]: [i_item_sk#34, i_item_desc#35, i_current_price#36, i_wholesale_cost#37, i_brand#38] +Input [5]: [i_item_sk#28, i_item_desc#29, i_current_price#30, i_wholesale_cost#31, i_brand#32] (36) Filter [codegen id : 10] -Input [5]: [i_item_sk#34, i_item_desc#35, i_current_price#36, i_wholesale_cost#37, i_brand#38] -Condition : isnotnull(i_item_sk#34) +Input [5]: [i_item_sk#28, i_item_desc#29, i_current_price#30, i_wholesale_cost#31, i_brand#32] +Condition : isnotnull(i_item_sk#28) (37) Exchange -Input [5]: [i_item_sk#34, i_item_desc#35, i_current_price#36, i_wholesale_cost#37, i_brand#38] -Arguments: hashpartitioning(i_item_sk#34, 5), ENSURE_REQUIREMENTS, [id=#39] +Input [5]: [i_item_sk#28, i_item_desc#29, i_current_price#30, i_wholesale_cost#31, i_brand#32] +Arguments: hashpartitioning(i_item_sk#28, 5), ENSURE_REQUIREMENTS, [plan_id=7] (38) Sort [codegen id : 11] -Input [5]: [i_item_sk#34, i_item_desc#35, i_current_price#36, i_wholesale_cost#37, i_brand#38] -Arguments: [i_item_sk#34 ASC NULLS FIRST], false, 0 +Input [5]: [i_item_sk#28, i_item_desc#29, i_current_price#30, i_wholesale_cost#31, i_brand#32] +Arguments: [i_item_sk#28 ASC NULLS FIRST], false, 0 (39) SortMergeJoin [codegen id : 12] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#34] +Right keys [1]: [i_item_sk#28] Join condition: None (40) Project [codegen id : 12] -Output [6]: [s_store_name#31, i_item_desc#35, revenue#11, i_current_price#36, i_wholesale_cost#37, i_brand#38] -Input [8]: [ss_item_sk#1, revenue#11, s_store_name#31, i_item_sk#34, i_item_desc#35, i_current_price#36, i_wholesale_cost#37, i_brand#38] +Output [6]: [s_store_name#27, i_item_desc#29, revenue#10, i_current_price#30, i_wholesale_cost#31, i_brand#32] +Input [8]: [ss_item_sk#1, revenue#10, s_store_name#27, i_item_sk#28, i_item_desc#29, i_current_price#30, i_wholesale_cost#31, i_brand#32] (41) TakeOrderedAndProject -Input [6]: [s_store_name#31, i_item_desc#35, revenue#11, i_current_price#36, i_wholesale_cost#37, i_brand#38] -Arguments: 100, [s_store_name#31 ASC NULLS FIRST, i_item_desc#35 ASC NULLS FIRST], [s_store_name#31, i_item_desc#35, revenue#11, i_current_price#36, i_wholesale_cost#37, i_brand#38] +Input [6]: [s_store_name#27, i_item_desc#29, revenue#10, i_current_price#30, i_wholesale_cost#31, i_brand#32] +Arguments: 100, [s_store_name#27 ASC NULLS FIRST, i_item_desc#29 ASC NULLS FIRST], [s_store_name#27, i_item_desc#29, revenue#10, i_current_price#30, i_wholesale_cost#31, i_brand#32] ===== Subqueries ===== @@ -248,27 +248,27 @@ BroadcastExchange (46) (42) Scan parquet default.date_dim -Output [2]: [d_date_sk#6, d_month_seq#40] +Output [2]: [d_date_sk#6, d_month_seq#33] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1176), LessThanOrEqual(d_month_seq,1187), IsNotNull(d_date_sk)] ReadSchema: struct (43) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#6, d_month_seq#40] +Input [2]: [d_date_sk#6, d_month_seq#33] (44) Filter [codegen id : 1] -Input [2]: [d_date_sk#6, d_month_seq#40] -Condition : (((isnotnull(d_month_seq#40) AND (d_month_seq#40 >= 1176)) AND (d_month_seq#40 <= 1187)) AND isnotnull(d_date_sk#6)) +Input [2]: [d_date_sk#6, d_month_seq#33] +Condition : (((isnotnull(d_month_seq#33) AND (d_month_seq#33 >= 1176)) AND (d_month_seq#33 <= 1187)) AND isnotnull(d_date_sk#6)) (45) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [2]: [d_date_sk#6, d_month_seq#40] +Input [2]: [d_date_sk#6, d_month_seq#33] (46) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#41] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 11 Hosting Expression = ss_sold_date_sk#15 IN dynamicpruning#5 +Subquery:2 Hosting operator id = 11 Hosting Expression = ss_sold_date_sk#14 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q65/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q65/explain.txt index c7967bfa915b8..dbacad80d20e0 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q65/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q65/explain.txt @@ -89,22 +89,22 @@ Results [3]: [ss_store_sk#4, ss_item_sk#3, sum#10] (11) Exchange Input [3]: [ss_store_sk#4, ss_item_sk#3, sum#10] -Arguments: hashpartitioning(ss_store_sk#4, ss_item_sk#3, 5), ENSURE_REQUIREMENTS, [id=#11] +Arguments: hashpartitioning(ss_store_sk#4, ss_item_sk#3, 5), ENSURE_REQUIREMENTS, [plan_id=1] (12) HashAggregate [codegen id : 3] Input [3]: [ss_store_sk#4, ss_item_sk#3, sum#10] Keys [2]: [ss_store_sk#4, ss_item_sk#3] Functions [1]: [sum(UnscaledValue(ss_sales_price#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#5))#12] -Results [3]: [ss_store_sk#4, ss_item_sk#3, MakeDecimal(sum(UnscaledValue(ss_sales_price#5))#12,17,2) AS revenue#13] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#5))#11] +Results [3]: [ss_store_sk#4, ss_item_sk#3, MakeDecimal(sum(UnscaledValue(ss_sales_price#5))#11,17,2) AS revenue#12] (13) Filter [codegen id : 3] -Input [3]: [ss_store_sk#4, ss_item_sk#3, revenue#13] -Condition : isnotnull(revenue#13) +Input [3]: [ss_store_sk#4, ss_item_sk#3, revenue#12] +Condition : isnotnull(revenue#12) (14) BroadcastExchange -Input [3]: [ss_store_sk#4, ss_item_sk#3, revenue#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Input [3]: [ss_store_sk#4, ss_item_sk#3, revenue#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 9] Left keys [1]: [s_store_sk#1] @@ -112,115 +112,115 @@ Right keys [1]: [ss_store_sk#4] Join condition: None (16) Project [codegen id : 9] -Output [4]: [s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#13] -Input [5]: [s_store_sk#1, s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#13] +Output [4]: [s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#12] +Input [5]: [s_store_sk#1, s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#12] (17) Scan parquet default.item -Output [5]: [i_item_sk#15, i_item_desc#16, i_current_price#17, i_wholesale_cost#18, i_brand#19] +Output [5]: [i_item_sk#13, i_item_desc#14, i_current_price#15, i_wholesale_cost#16, i_brand#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (18) ColumnarToRow [codegen id : 4] -Input [5]: [i_item_sk#15, i_item_desc#16, i_current_price#17, i_wholesale_cost#18, i_brand#19] +Input [5]: [i_item_sk#13, i_item_desc#14, i_current_price#15, i_wholesale_cost#16, i_brand#17] (19) Filter [codegen id : 4] -Input [5]: [i_item_sk#15, i_item_desc#16, i_current_price#17, i_wholesale_cost#18, i_brand#19] -Condition : isnotnull(i_item_sk#15) +Input [5]: [i_item_sk#13, i_item_desc#14, i_current_price#15, i_wholesale_cost#16, i_brand#17] +Condition : isnotnull(i_item_sk#13) (20) BroadcastExchange -Input [5]: [i_item_sk#15, i_item_desc#16, i_current_price#17, i_wholesale_cost#18, i_brand#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#20] +Input [5]: [i_item_sk#13, i_item_desc#14, i_current_price#15, i_wholesale_cost#16, i_brand#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_item_sk#3] -Right keys [1]: [i_item_sk#15] +Right keys [1]: [i_item_sk#13] Join condition: None (22) Project [codegen id : 9] -Output [7]: [s_store_name#2, ss_store_sk#4, revenue#13, i_item_desc#16, i_current_price#17, i_wholesale_cost#18, i_brand#19] -Input [9]: [s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#13, i_item_sk#15, i_item_desc#16, i_current_price#17, i_wholesale_cost#18, i_brand#19] +Output [7]: [s_store_name#2, ss_store_sk#4, revenue#12, i_item_desc#14, i_current_price#15, i_wholesale_cost#16, i_brand#17] +Input [9]: [s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#12, i_item_sk#13, i_item_desc#14, i_current_price#15, i_wholesale_cost#16, i_brand#17] (23) Scan parquet default.store_sales -Output [4]: [ss_item_sk#21, ss_store_sk#22, ss_sales_price#23, ss_sold_date_sk#24] +Output [4]: [ss_item_sk#18, ss_store_sk#19, ss_sales_price#20, ss_sold_date_sk#21] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#24), dynamicpruningexpression(ss_sold_date_sk#24 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(ss_sold_date_sk#21), dynamicpruningexpression(ss_sold_date_sk#21 IN dynamicpruning#7)] PushedFilters: [IsNotNull(ss_store_sk)] ReadSchema: struct (24) ColumnarToRow [codegen id : 6] -Input [4]: [ss_item_sk#21, ss_store_sk#22, ss_sales_price#23, ss_sold_date_sk#24] +Input [4]: [ss_item_sk#18, ss_store_sk#19, ss_sales_price#20, ss_sold_date_sk#21] (25) Filter [codegen id : 6] -Input [4]: [ss_item_sk#21, ss_store_sk#22, ss_sales_price#23, ss_sold_date_sk#24] -Condition : isnotnull(ss_store_sk#22) +Input [4]: [ss_item_sk#18, ss_store_sk#19, ss_sales_price#20, ss_sold_date_sk#21] +Condition : isnotnull(ss_store_sk#19) (26) ReusedExchange [Reuses operator id: 43] -Output [1]: [d_date_sk#25] +Output [1]: [d_date_sk#22] (27) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ss_sold_date_sk#24] -Right keys [1]: [d_date_sk#25] +Left keys [1]: [ss_sold_date_sk#21] +Right keys [1]: [d_date_sk#22] Join condition: None (28) Project [codegen id : 6] -Output [3]: [ss_item_sk#21, ss_store_sk#22, ss_sales_price#23] -Input [5]: [ss_item_sk#21, ss_store_sk#22, ss_sales_price#23, ss_sold_date_sk#24, d_date_sk#25] +Output [3]: [ss_item_sk#18, ss_store_sk#19, ss_sales_price#20] +Input [5]: [ss_item_sk#18, ss_store_sk#19, ss_sales_price#20, ss_sold_date_sk#21, d_date_sk#22] (29) HashAggregate [codegen id : 6] -Input [3]: [ss_item_sk#21, ss_store_sk#22, ss_sales_price#23] -Keys [2]: [ss_store_sk#22, ss_item_sk#21] -Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#23))] -Aggregate Attributes [1]: [sum#26] -Results [3]: [ss_store_sk#22, ss_item_sk#21, sum#27] +Input [3]: [ss_item_sk#18, ss_store_sk#19, ss_sales_price#20] +Keys [2]: [ss_store_sk#19, ss_item_sk#18] +Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#20))] +Aggregate Attributes [1]: [sum#23] +Results [3]: [ss_store_sk#19, ss_item_sk#18, sum#24] (30) Exchange -Input [3]: [ss_store_sk#22, ss_item_sk#21, sum#27] -Arguments: hashpartitioning(ss_store_sk#22, ss_item_sk#21, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [3]: [ss_store_sk#19, ss_item_sk#18, sum#24] +Arguments: hashpartitioning(ss_store_sk#19, ss_item_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=4] (31) HashAggregate [codegen id : 7] -Input [3]: [ss_store_sk#22, ss_item_sk#21, sum#27] -Keys [2]: [ss_store_sk#22, ss_item_sk#21] -Functions [1]: [sum(UnscaledValue(ss_sales_price#23))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#23))#29] -Results [2]: [ss_store_sk#22, MakeDecimal(sum(UnscaledValue(ss_sales_price#23))#29,17,2) AS revenue#30] +Input [3]: [ss_store_sk#19, ss_item_sk#18, sum#24] +Keys [2]: [ss_store_sk#19, ss_item_sk#18] +Functions [1]: [sum(UnscaledValue(ss_sales_price#20))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#20))#25] +Results [2]: [ss_store_sk#19, MakeDecimal(sum(UnscaledValue(ss_sales_price#20))#25,17,2) AS revenue#26] (32) HashAggregate [codegen id : 7] -Input [2]: [ss_store_sk#22, revenue#30] -Keys [1]: [ss_store_sk#22] -Functions [1]: [partial_avg(revenue#30)] -Aggregate Attributes [2]: [sum#31, count#32] -Results [3]: [ss_store_sk#22, sum#33, count#34] +Input [2]: [ss_store_sk#19, revenue#26] +Keys [1]: [ss_store_sk#19] +Functions [1]: [partial_avg(revenue#26)] +Aggregate Attributes [2]: [sum#27, count#28] +Results [3]: [ss_store_sk#19, sum#29, count#30] (33) Exchange -Input [3]: [ss_store_sk#22, sum#33, count#34] -Arguments: hashpartitioning(ss_store_sk#22, 5), ENSURE_REQUIREMENTS, [id=#35] +Input [3]: [ss_store_sk#19, sum#29, count#30] +Arguments: hashpartitioning(ss_store_sk#19, 5), ENSURE_REQUIREMENTS, [plan_id=5] (34) HashAggregate [codegen id : 8] -Input [3]: [ss_store_sk#22, sum#33, count#34] -Keys [1]: [ss_store_sk#22] -Functions [1]: [avg(revenue#30)] -Aggregate Attributes [1]: [avg(revenue#30)#36] -Results [2]: [ss_store_sk#22, avg(revenue#30)#36 AS ave#37] +Input [3]: [ss_store_sk#19, sum#29, count#30] +Keys [1]: [ss_store_sk#19] +Functions [1]: [avg(revenue#26)] +Aggregate Attributes [1]: [avg(revenue#26)#31] +Results [2]: [ss_store_sk#19, avg(revenue#26)#31 AS ave#32] (35) BroadcastExchange -Input [2]: [ss_store_sk#22, ave#37] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#38] +Input [2]: [ss_store_sk#19, ave#32] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] (36) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#4] -Right keys [1]: [ss_store_sk#22] -Join condition: (cast(revenue#13 as decimal(23,7)) <= CheckOverflow((0.100000 * promote_precision(ave#37)), DecimalType(23,7))) +Right keys [1]: [ss_store_sk#19] +Join condition: (cast(revenue#12 as decimal(23,7)) <= CheckOverflow((0.100000 * promote_precision(ave#32)), DecimalType(23,7))) (37) Project [codegen id : 9] -Output [6]: [s_store_name#2, i_item_desc#16, revenue#13, i_current_price#17, i_wholesale_cost#18, i_brand#19] -Input [9]: [s_store_name#2, ss_store_sk#4, revenue#13, i_item_desc#16, i_current_price#17, i_wholesale_cost#18, i_brand#19, ss_store_sk#22, ave#37] +Output [6]: [s_store_name#2, i_item_desc#14, revenue#12, i_current_price#15, i_wholesale_cost#16, i_brand#17] +Input [9]: [s_store_name#2, ss_store_sk#4, revenue#12, i_item_desc#14, i_current_price#15, i_wholesale_cost#16, i_brand#17, ss_store_sk#19, ave#32] (38) TakeOrderedAndProject -Input [6]: [s_store_name#2, i_item_desc#16, revenue#13, i_current_price#17, i_wholesale_cost#18, i_brand#19] -Arguments: 100, [s_store_name#2 ASC NULLS FIRST, i_item_desc#16 ASC NULLS FIRST], [s_store_name#2, i_item_desc#16, revenue#13, i_current_price#17, i_wholesale_cost#18, i_brand#19] +Input [6]: [s_store_name#2, i_item_desc#14, revenue#12, i_current_price#15, i_wholesale_cost#16, i_brand#17] +Arguments: 100, [s_store_name#2 ASC NULLS FIRST, i_item_desc#14 ASC NULLS FIRST], [s_store_name#2, i_item_desc#14, revenue#12, i_current_price#15, i_wholesale_cost#16, i_brand#17] ===== Subqueries ===== @@ -233,27 +233,27 @@ BroadcastExchange (43) (39) Scan parquet default.date_dim -Output [2]: [d_date_sk#8, d_month_seq#39] +Output [2]: [d_date_sk#8, d_month_seq#33] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1176), LessThanOrEqual(d_month_seq,1187), IsNotNull(d_date_sk)] ReadSchema: struct (40) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#8, d_month_seq#39] +Input [2]: [d_date_sk#8, d_month_seq#33] (41) Filter [codegen id : 1] -Input [2]: [d_date_sk#8, d_month_seq#39] -Condition : (((isnotnull(d_month_seq#39) AND (d_month_seq#39 >= 1176)) AND (d_month_seq#39 <= 1187)) AND isnotnull(d_date_sk#8)) +Input [2]: [d_date_sk#8, d_month_seq#33] +Condition : (((isnotnull(d_month_seq#33) AND (d_month_seq#33 >= 1176)) AND (d_month_seq#33 <= 1187)) AND isnotnull(d_date_sk#8)) (42) Project [codegen id : 1] Output [1]: [d_date_sk#8] -Input [2]: [d_date_sk#8, d_month_seq#39] +Input [2]: [d_date_sk#8, d_month_seq#33] (43) BroadcastExchange Input [1]: [d_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:2 Hosting operator id = 23 Hosting Expression = ss_sold_date_sk#24 IN dynamicpruning#7 +Subquery:2 Hosting operator id = 23 Hosting Expression = ss_sold_date_sk#21 IN dynamicpruning#7 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q66.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q66.sf100/explain.txt index 85aa68cbedd88..fbcec9b4464be 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q66.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q66.sf100/explain.txt @@ -88,7 +88,7 @@ Input [2]: [sm_ship_mode_sk#9, sm_carrier#10] (8) BroadcastExchange Input [1]: [sm_ship_mode_sk#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_ship_mode_sk#2] @@ -100,197 +100,197 @@ Output [6]: [ws_sold_time_sk#1, ws_warehouse_sk#3, ws_quantity#4, ws_ext_sales_p Input [8]: [ws_sold_time_sk#1, ws_ship_mode_sk#2, ws_warehouse_sk#3, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, ws_sold_date_sk#7, sm_ship_mode_sk#9] (11) Scan parquet default.time_dim -Output [2]: [t_time_sk#12, t_time#13] +Output [2]: [t_time_sk#11, t_time#12] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_time), GreaterThanOrEqual(t_time,30838), LessThanOrEqual(t_time,59638), IsNotNull(t_time_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [2]: [t_time_sk#12, t_time#13] +Input [2]: [t_time_sk#11, t_time#12] (13) Filter [codegen id : 2] -Input [2]: [t_time_sk#12, t_time#13] -Condition : (((isnotnull(t_time#13) AND (t_time#13 >= 30838)) AND (t_time#13 <= 59638)) AND isnotnull(t_time_sk#12)) +Input [2]: [t_time_sk#11, t_time#12] +Condition : (((isnotnull(t_time#12) AND (t_time#12 >= 30838)) AND (t_time#12 <= 59638)) AND isnotnull(t_time_sk#11)) (14) Project [codegen id : 2] -Output [1]: [t_time_sk#12] -Input [2]: [t_time_sk#12, t_time#13] +Output [1]: [t_time_sk#11] +Input [2]: [t_time_sk#11, t_time#12] (15) BroadcastExchange -Input [1]: [t_time_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Input [1]: [t_time_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_sold_time_sk#1] -Right keys [1]: [t_time_sk#12] +Right keys [1]: [t_time_sk#11] Join condition: None (17) Project [codegen id : 5] Output [5]: [ws_warehouse_sk#3, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, ws_sold_date_sk#7] -Input [7]: [ws_sold_time_sk#1, ws_warehouse_sk#3, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, ws_sold_date_sk#7, t_time_sk#12] +Input [7]: [ws_sold_time_sk#1, ws_warehouse_sk#3, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, ws_sold_date_sk#7, t_time_sk#11] (18) ReusedExchange [Reuses operator id: 56] -Output [3]: [d_date_sk#15, d_year#16, d_moy#17] +Output [3]: [d_date_sk#13, d_year#14, d_moy#15] (19) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_sold_date_sk#7] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#13] Join condition: None (20) Project [codegen id : 5] -Output [6]: [ws_warehouse_sk#3, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, d_year#16, d_moy#17] -Input [8]: [ws_warehouse_sk#3, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, ws_sold_date_sk#7, d_date_sk#15, d_year#16, d_moy#17] +Output [6]: [ws_warehouse_sk#3, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, d_year#14, d_moy#15] +Input [8]: [ws_warehouse_sk#3, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, ws_sold_date_sk#7, d_date_sk#13, d_year#14, d_moy#15] (21) Scan parquet default.warehouse -Output [7]: [w_warehouse_sk#18, w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24] +Output [7]: [w_warehouse_sk#16, w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 4] -Input [7]: [w_warehouse_sk#18, w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24] +Input [7]: [w_warehouse_sk#16, w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22] (23) Filter [codegen id : 4] -Input [7]: [w_warehouse_sk#18, w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24] -Condition : isnotnull(w_warehouse_sk#18) +Input [7]: [w_warehouse_sk#16, w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22] +Condition : isnotnull(w_warehouse_sk#16) (24) BroadcastExchange -Input [7]: [w_warehouse_sk#18, w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#25] +Input [7]: [w_warehouse_sk#16, w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (25) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_warehouse_sk#3] -Right keys [1]: [w_warehouse_sk#18] +Right keys [1]: [w_warehouse_sk#16] Join condition: None (26) Project [codegen id : 5] -Output [11]: [ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, d_year#16, d_moy#17] -Input [13]: [ws_warehouse_sk#3, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, d_year#16, d_moy#17, w_warehouse_sk#18, w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24] +Output [11]: [ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, d_year#14, d_moy#15] +Input [13]: [ws_warehouse_sk#3, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, d_year#14, d_moy#15, w_warehouse_sk#16, w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22] (27) HashAggregate [codegen id : 5] -Input [11]: [ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, d_year#16, d_moy#17] -Keys [7]: [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, d_year#16] -Functions [24]: [partial_sum(CASE WHEN (d_moy#17 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#17 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] -Aggregate Attributes [48]: [sum#26, isEmpty#27, sum#28, isEmpty#29, sum#30, isEmpty#31, sum#32, isEmpty#33, sum#34, isEmpty#35, sum#36, isEmpty#37, sum#38, isEmpty#39, sum#40, isEmpty#41, sum#42, isEmpty#43, sum#44, isEmpty#45, sum#46, isEmpty#47, sum#48, isEmpty#49, sum#50, isEmpty#51, sum#52, isEmpty#53, sum#54, isEmpty#55, sum#56, isEmpty#57, sum#58, isEmpty#59, sum#60, isEmpty#61, sum#62, isEmpty#63, sum#64, isEmpty#65, sum#66, isEmpty#67, sum#68, isEmpty#69, sum#70, isEmpty#71, sum#72, isEmpty#73] -Results [55]: [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, d_year#16, sum#74, isEmpty#75, sum#76, isEmpty#77, sum#78, isEmpty#79, sum#80, isEmpty#81, sum#82, isEmpty#83, sum#84, isEmpty#85, sum#86, isEmpty#87, sum#88, isEmpty#89, sum#90, isEmpty#91, sum#92, isEmpty#93, sum#94, isEmpty#95, sum#96, isEmpty#97, sum#98, isEmpty#99, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105, sum#106, isEmpty#107, sum#108, isEmpty#109, sum#110, isEmpty#111, sum#112, isEmpty#113, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119, sum#120, isEmpty#121] +Input [11]: [ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, d_year#14, d_moy#15] +Keys [7]: [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, d_year#14] +Functions [24]: [partial_sum(CASE WHEN (d_moy#15 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#15 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] +Aggregate Attributes [48]: [sum#23, isEmpty#24, sum#25, isEmpty#26, sum#27, isEmpty#28, sum#29, isEmpty#30, sum#31, isEmpty#32, sum#33, isEmpty#34, sum#35, isEmpty#36, sum#37, isEmpty#38, sum#39, isEmpty#40, sum#41, isEmpty#42, sum#43, isEmpty#44, sum#45, isEmpty#46, sum#47, isEmpty#48, sum#49, isEmpty#50, sum#51, isEmpty#52, sum#53, isEmpty#54, sum#55, isEmpty#56, sum#57, isEmpty#58, sum#59, isEmpty#60, sum#61, isEmpty#62, sum#63, isEmpty#64, sum#65, isEmpty#66, sum#67, isEmpty#68, sum#69, isEmpty#70] +Results [55]: [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, d_year#14, sum#71, isEmpty#72, sum#73, isEmpty#74, sum#75, isEmpty#76, sum#77, isEmpty#78, sum#79, isEmpty#80, sum#81, isEmpty#82, sum#83, isEmpty#84, sum#85, isEmpty#86, sum#87, isEmpty#88, sum#89, isEmpty#90, sum#91, isEmpty#92, sum#93, isEmpty#94, sum#95, isEmpty#96, sum#97, isEmpty#98, sum#99, isEmpty#100, sum#101, isEmpty#102, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108, sum#109, isEmpty#110, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116, sum#117, isEmpty#118] (28) Exchange -Input [55]: [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, d_year#16, sum#74, isEmpty#75, sum#76, isEmpty#77, sum#78, isEmpty#79, sum#80, isEmpty#81, sum#82, isEmpty#83, sum#84, isEmpty#85, sum#86, isEmpty#87, sum#88, isEmpty#89, sum#90, isEmpty#91, sum#92, isEmpty#93, sum#94, isEmpty#95, sum#96, isEmpty#97, sum#98, isEmpty#99, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105, sum#106, isEmpty#107, sum#108, isEmpty#109, sum#110, isEmpty#111, sum#112, isEmpty#113, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119, sum#120, isEmpty#121] -Arguments: hashpartitioning(w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, d_year#16, 5), ENSURE_REQUIREMENTS, [id=#122] +Input [55]: [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, d_year#14, sum#71, isEmpty#72, sum#73, isEmpty#74, sum#75, isEmpty#76, sum#77, isEmpty#78, sum#79, isEmpty#80, sum#81, isEmpty#82, sum#83, isEmpty#84, sum#85, isEmpty#86, sum#87, isEmpty#88, sum#89, isEmpty#90, sum#91, isEmpty#92, sum#93, isEmpty#94, sum#95, isEmpty#96, sum#97, isEmpty#98, sum#99, isEmpty#100, sum#101, isEmpty#102, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108, sum#109, isEmpty#110, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116, sum#117, isEmpty#118] +Arguments: hashpartitioning(w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, d_year#14, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 6] -Input [55]: [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, d_year#16, sum#74, isEmpty#75, sum#76, isEmpty#77, sum#78, isEmpty#79, sum#80, isEmpty#81, sum#82, isEmpty#83, sum#84, isEmpty#85, sum#86, isEmpty#87, sum#88, isEmpty#89, sum#90, isEmpty#91, sum#92, isEmpty#93, sum#94, isEmpty#95, sum#96, isEmpty#97, sum#98, isEmpty#99, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105, sum#106, isEmpty#107, sum#108, isEmpty#109, sum#110, isEmpty#111, sum#112, isEmpty#113, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119, sum#120, isEmpty#121] -Keys [7]: [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, d_year#16] -Functions [24]: [sum(CASE WHEN (d_moy#17 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#17 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] -Aggregate Attributes [24]: [sum(CASE WHEN (d_moy#17 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#123, sum(CASE WHEN (d_moy#17 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#124, sum(CASE WHEN (d_moy#17 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#125, sum(CASE WHEN (d_moy#17 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#126, sum(CASE WHEN (d_moy#17 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#127, sum(CASE WHEN (d_moy#17 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#128, sum(CASE WHEN (d_moy#17 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#129, sum(CASE WHEN (d_moy#17 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#130, sum(CASE WHEN (d_moy#17 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#131, sum(CASE WHEN (d_moy#17 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#132, sum(CASE WHEN (d_moy#17 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#133, sum(CASE WHEN (d_moy#17 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#134, sum(CASE WHEN (d_moy#17 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#135, sum(CASE WHEN (d_moy#17 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#136, sum(CASE WHEN (d_moy#17 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#137, sum(CASE WHEN (d_moy#17 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#138, sum(CASE WHEN (d_moy#17 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#139, sum(CASE WHEN (d_moy#17 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#140, sum(CASE WHEN (d_moy#17 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#141, sum(CASE WHEN (d_moy#17 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#142, sum(CASE WHEN (d_moy#17 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#143, sum(CASE WHEN (d_moy#17 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#144, sum(CASE WHEN (d_moy#17 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#145, sum(CASE WHEN (d_moy#17 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#146] -Results [32]: [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, DHL,BARIAN AS ship_carriers#147, d_year#16 AS year#148, sum(CASE WHEN (d_moy#17 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#123 AS jan_sales#149, sum(CASE WHEN (d_moy#17 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#124 AS feb_sales#150, sum(CASE WHEN (d_moy#17 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#125 AS mar_sales#151, sum(CASE WHEN (d_moy#17 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#126 AS apr_sales#152, sum(CASE WHEN (d_moy#17 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#127 AS may_sales#153, sum(CASE WHEN (d_moy#17 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#128 AS jun_sales#154, sum(CASE WHEN (d_moy#17 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#129 AS jul_sales#155, sum(CASE WHEN (d_moy#17 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#130 AS aug_sales#156, sum(CASE WHEN (d_moy#17 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#131 AS sep_sales#157, sum(CASE WHEN (d_moy#17 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#132 AS oct_sales#158, sum(CASE WHEN (d_moy#17 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#133 AS nov_sales#159, sum(CASE WHEN (d_moy#17 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#134 AS dec_sales#160, sum(CASE WHEN (d_moy#17 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#135 AS jan_net#161, sum(CASE WHEN (d_moy#17 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#136 AS feb_net#162, sum(CASE WHEN (d_moy#17 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#137 AS mar_net#163, sum(CASE WHEN (d_moy#17 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#138 AS apr_net#164, sum(CASE WHEN (d_moy#17 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#139 AS may_net#165, sum(CASE WHEN (d_moy#17 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#140 AS jun_net#166, sum(CASE WHEN (d_moy#17 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#141 AS jul_net#167, sum(CASE WHEN (d_moy#17 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#142 AS aug_net#168, sum(CASE WHEN (d_moy#17 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#143 AS sep_net#169, sum(CASE WHEN (d_moy#17 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#144 AS oct_net#170, sum(CASE WHEN (d_moy#17 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#145 AS nov_net#171, sum(CASE WHEN (d_moy#17 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#146 AS dec_net#172] +Input [55]: [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, d_year#14, sum#71, isEmpty#72, sum#73, isEmpty#74, sum#75, isEmpty#76, sum#77, isEmpty#78, sum#79, isEmpty#80, sum#81, isEmpty#82, sum#83, isEmpty#84, sum#85, isEmpty#86, sum#87, isEmpty#88, sum#89, isEmpty#90, sum#91, isEmpty#92, sum#93, isEmpty#94, sum#95, isEmpty#96, sum#97, isEmpty#98, sum#99, isEmpty#100, sum#101, isEmpty#102, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108, sum#109, isEmpty#110, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116, sum#117, isEmpty#118] +Keys [7]: [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, d_year#14] +Functions [24]: [sum(CASE WHEN (d_moy#15 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#15 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] +Aggregate Attributes [24]: [sum(CASE WHEN (d_moy#15 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#119, sum(CASE WHEN (d_moy#15 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#120, sum(CASE WHEN (d_moy#15 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#121, sum(CASE WHEN (d_moy#15 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#122, sum(CASE WHEN (d_moy#15 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#123, sum(CASE WHEN (d_moy#15 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#124, sum(CASE WHEN (d_moy#15 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#125, sum(CASE WHEN (d_moy#15 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#126, sum(CASE WHEN (d_moy#15 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#127, sum(CASE WHEN (d_moy#15 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#128, sum(CASE WHEN (d_moy#15 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#129, sum(CASE WHEN (d_moy#15 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#130, sum(CASE WHEN (d_moy#15 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#131, sum(CASE WHEN (d_moy#15 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#132, sum(CASE WHEN (d_moy#15 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#133, sum(CASE WHEN (d_moy#15 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#134, sum(CASE WHEN (d_moy#15 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#135, sum(CASE WHEN (d_moy#15 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#136, sum(CASE WHEN (d_moy#15 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#137, sum(CASE WHEN (d_moy#15 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#138, sum(CASE WHEN (d_moy#15 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#139, sum(CASE WHEN (d_moy#15 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#140, sum(CASE WHEN (d_moy#15 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#141, sum(CASE WHEN (d_moy#15 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#142] +Results [32]: [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, DHL,BARIAN AS ship_carriers#143, d_year#14 AS year#144, sum(CASE WHEN (d_moy#15 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#119 AS jan_sales#145, sum(CASE WHEN (d_moy#15 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#120 AS feb_sales#146, sum(CASE WHEN (d_moy#15 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#121 AS mar_sales#147, sum(CASE WHEN (d_moy#15 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#122 AS apr_sales#148, sum(CASE WHEN (d_moy#15 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#123 AS may_sales#149, sum(CASE WHEN (d_moy#15 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#124 AS jun_sales#150, sum(CASE WHEN (d_moy#15 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#125 AS jul_sales#151, sum(CASE WHEN (d_moy#15 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#126 AS aug_sales#152, sum(CASE WHEN (d_moy#15 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#127 AS sep_sales#153, sum(CASE WHEN (d_moy#15 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#128 AS oct_sales#154, sum(CASE WHEN (d_moy#15 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#129 AS nov_sales#155, sum(CASE WHEN (d_moy#15 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#130 AS dec_sales#156, sum(CASE WHEN (d_moy#15 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#131 AS jan_net#157, sum(CASE WHEN (d_moy#15 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#132 AS feb_net#158, sum(CASE WHEN (d_moy#15 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#133 AS mar_net#159, sum(CASE WHEN (d_moy#15 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#134 AS apr_net#160, sum(CASE WHEN (d_moy#15 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#135 AS may_net#161, sum(CASE WHEN (d_moy#15 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#136 AS jun_net#162, sum(CASE WHEN (d_moy#15 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#137 AS jul_net#163, sum(CASE WHEN (d_moy#15 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#138 AS aug_net#164, sum(CASE WHEN (d_moy#15 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#139 AS sep_net#165, sum(CASE WHEN (d_moy#15 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#140 AS oct_net#166, sum(CASE WHEN (d_moy#15 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#141 AS nov_net#167, sum(CASE WHEN (d_moy#15 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#142 AS dec_net#168] (30) Scan parquet default.catalog_sales -Output [7]: [cs_sold_time_sk#173, cs_ship_mode_sk#174, cs_warehouse_sk#175, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, cs_sold_date_sk#179] +Output [7]: [cs_sold_time_sk#169, cs_ship_mode_sk#170, cs_warehouse_sk#171, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, cs_sold_date_sk#175] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#179), dynamicpruningexpression(cs_sold_date_sk#179 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(cs_sold_date_sk#175), dynamicpruningexpression(cs_sold_date_sk#175 IN dynamicpruning#8)] PushedFilters: [IsNotNull(cs_warehouse_sk), IsNotNull(cs_sold_time_sk), IsNotNull(cs_ship_mode_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 11] -Input [7]: [cs_sold_time_sk#173, cs_ship_mode_sk#174, cs_warehouse_sk#175, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, cs_sold_date_sk#179] +Input [7]: [cs_sold_time_sk#169, cs_ship_mode_sk#170, cs_warehouse_sk#171, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, cs_sold_date_sk#175] (32) Filter [codegen id : 11] -Input [7]: [cs_sold_time_sk#173, cs_ship_mode_sk#174, cs_warehouse_sk#175, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, cs_sold_date_sk#179] -Condition : ((isnotnull(cs_warehouse_sk#175) AND isnotnull(cs_sold_time_sk#173)) AND isnotnull(cs_ship_mode_sk#174)) +Input [7]: [cs_sold_time_sk#169, cs_ship_mode_sk#170, cs_warehouse_sk#171, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, cs_sold_date_sk#175] +Condition : ((isnotnull(cs_warehouse_sk#171) AND isnotnull(cs_sold_time_sk#169)) AND isnotnull(cs_ship_mode_sk#170)) (33) ReusedExchange [Reuses operator id: 8] -Output [1]: [sm_ship_mode_sk#180] +Output [1]: [sm_ship_mode_sk#176] (34) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_ship_mode_sk#174] -Right keys [1]: [sm_ship_mode_sk#180] +Left keys [1]: [cs_ship_mode_sk#170] +Right keys [1]: [sm_ship_mode_sk#176] Join condition: None (35) Project [codegen id : 11] -Output [6]: [cs_sold_time_sk#173, cs_warehouse_sk#175, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, cs_sold_date_sk#179] -Input [8]: [cs_sold_time_sk#173, cs_ship_mode_sk#174, cs_warehouse_sk#175, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, cs_sold_date_sk#179, sm_ship_mode_sk#180] +Output [6]: [cs_sold_time_sk#169, cs_warehouse_sk#171, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, cs_sold_date_sk#175] +Input [8]: [cs_sold_time_sk#169, cs_ship_mode_sk#170, cs_warehouse_sk#171, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, cs_sold_date_sk#175, sm_ship_mode_sk#176] (36) ReusedExchange [Reuses operator id: 15] -Output [1]: [t_time_sk#181] +Output [1]: [t_time_sk#177] (37) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_sold_time_sk#173] -Right keys [1]: [t_time_sk#181] +Left keys [1]: [cs_sold_time_sk#169] +Right keys [1]: [t_time_sk#177] Join condition: None (38) Project [codegen id : 11] -Output [5]: [cs_warehouse_sk#175, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, cs_sold_date_sk#179] -Input [7]: [cs_sold_time_sk#173, cs_warehouse_sk#175, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, cs_sold_date_sk#179, t_time_sk#181] +Output [5]: [cs_warehouse_sk#171, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, cs_sold_date_sk#175] +Input [7]: [cs_sold_time_sk#169, cs_warehouse_sk#171, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, cs_sold_date_sk#175, t_time_sk#177] (39) ReusedExchange [Reuses operator id: 56] -Output [3]: [d_date_sk#182, d_year#183, d_moy#184] +Output [3]: [d_date_sk#178, d_year#179, d_moy#180] (40) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_sold_date_sk#179] -Right keys [1]: [d_date_sk#182] +Left keys [1]: [cs_sold_date_sk#175] +Right keys [1]: [d_date_sk#178] Join condition: None (41) Project [codegen id : 11] -Output [6]: [cs_warehouse_sk#175, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, d_year#183, d_moy#184] -Input [8]: [cs_warehouse_sk#175, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, cs_sold_date_sk#179, d_date_sk#182, d_year#183, d_moy#184] +Output [6]: [cs_warehouse_sk#171, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, d_year#179, d_moy#180] +Input [8]: [cs_warehouse_sk#171, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, cs_sold_date_sk#175, d_date_sk#178, d_year#179, d_moy#180] (42) ReusedExchange [Reuses operator id: 24] -Output [7]: [w_warehouse_sk#185, w_warehouse_name#186, w_warehouse_sq_ft#187, w_city#188, w_county#189, w_state#190, w_country#191] +Output [7]: [w_warehouse_sk#181, w_warehouse_name#182, w_warehouse_sq_ft#183, w_city#184, w_county#185, w_state#186, w_country#187] (43) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_warehouse_sk#175] -Right keys [1]: [w_warehouse_sk#185] +Left keys [1]: [cs_warehouse_sk#171] +Right keys [1]: [w_warehouse_sk#181] Join condition: None (44) Project [codegen id : 11] -Output [11]: [cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, w_warehouse_name#186, w_warehouse_sq_ft#187, w_city#188, w_county#189, w_state#190, w_country#191, d_year#183, d_moy#184] -Input [13]: [cs_warehouse_sk#175, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, d_year#183, d_moy#184, w_warehouse_sk#185, w_warehouse_name#186, w_warehouse_sq_ft#187, w_city#188, w_county#189, w_state#190, w_country#191] +Output [11]: [cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, w_warehouse_name#182, w_warehouse_sq_ft#183, w_city#184, w_county#185, w_state#186, w_country#187, d_year#179, d_moy#180] +Input [13]: [cs_warehouse_sk#171, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, d_year#179, d_moy#180, w_warehouse_sk#181, w_warehouse_name#182, w_warehouse_sq_ft#183, w_city#184, w_county#185, w_state#186, w_country#187] (45) HashAggregate [codegen id : 11] -Input [11]: [cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, w_warehouse_name#186, w_warehouse_sq_ft#187, w_city#188, w_county#189, w_state#190, w_country#191, d_year#183, d_moy#184] -Keys [7]: [w_warehouse_name#186, w_warehouse_sq_ft#187, w_city#188, w_county#189, w_state#190, w_country#191, d_year#183] -Functions [24]: [partial_sum(CASE WHEN (d_moy#184 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#184 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] -Aggregate Attributes [48]: [sum#192, isEmpty#193, sum#194, isEmpty#195, sum#196, isEmpty#197, sum#198, isEmpty#199, sum#200, isEmpty#201, sum#202, isEmpty#203, sum#204, isEmpty#205, sum#206, isEmpty#207, sum#208, isEmpty#209, sum#210, isEmpty#211, sum#212, isEmpty#213, sum#214, isEmpty#215, sum#216, isEmpty#217, sum#218, isEmpty#219, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225, sum#226, isEmpty#227, sum#228, isEmpty#229, sum#230, isEmpty#231, sum#232, isEmpty#233, sum#234, isEmpty#235, sum#236, isEmpty#237, sum#238, isEmpty#239] -Results [55]: [w_warehouse_name#186, w_warehouse_sq_ft#187, w_city#188, w_county#189, w_state#190, w_country#191, d_year#183, sum#240, isEmpty#241, sum#242, isEmpty#243, sum#244, isEmpty#245, sum#246, isEmpty#247, sum#248, isEmpty#249, sum#250, isEmpty#251, sum#252, isEmpty#253, sum#254, isEmpty#255, sum#256, isEmpty#257, sum#258, isEmpty#259, sum#260, isEmpty#261, sum#262, isEmpty#263, sum#264, isEmpty#265, sum#266, isEmpty#267, sum#268, isEmpty#269, sum#270, isEmpty#271, sum#272, isEmpty#273, sum#274, isEmpty#275, sum#276, isEmpty#277, sum#278, isEmpty#279, sum#280, isEmpty#281, sum#282, isEmpty#283, sum#284, isEmpty#285, sum#286, isEmpty#287] +Input [11]: [cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, w_warehouse_name#182, w_warehouse_sq_ft#183, w_city#184, w_county#185, w_state#186, w_country#187, d_year#179, d_moy#180] +Keys [7]: [w_warehouse_name#182, w_warehouse_sq_ft#183, w_city#184, w_county#185, w_state#186, w_country#187, d_year#179] +Functions [24]: [partial_sum(CASE WHEN (d_moy#180 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#180 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] +Aggregate Attributes [48]: [sum#188, isEmpty#189, sum#190, isEmpty#191, sum#192, isEmpty#193, sum#194, isEmpty#195, sum#196, isEmpty#197, sum#198, isEmpty#199, sum#200, isEmpty#201, sum#202, isEmpty#203, sum#204, isEmpty#205, sum#206, isEmpty#207, sum#208, isEmpty#209, sum#210, isEmpty#211, sum#212, isEmpty#213, sum#214, isEmpty#215, sum#216, isEmpty#217, sum#218, isEmpty#219, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225, sum#226, isEmpty#227, sum#228, isEmpty#229, sum#230, isEmpty#231, sum#232, isEmpty#233, sum#234, isEmpty#235] +Results [55]: [w_warehouse_name#182, w_warehouse_sq_ft#183, w_city#184, w_county#185, w_state#186, w_country#187, d_year#179, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241, sum#242, isEmpty#243, sum#244, isEmpty#245, sum#246, isEmpty#247, sum#248, isEmpty#249, sum#250, isEmpty#251, sum#252, isEmpty#253, sum#254, isEmpty#255, sum#256, isEmpty#257, sum#258, isEmpty#259, sum#260, isEmpty#261, sum#262, isEmpty#263, sum#264, isEmpty#265, sum#266, isEmpty#267, sum#268, isEmpty#269, sum#270, isEmpty#271, sum#272, isEmpty#273, sum#274, isEmpty#275, sum#276, isEmpty#277, sum#278, isEmpty#279, sum#280, isEmpty#281, sum#282, isEmpty#283] (46) Exchange -Input [55]: [w_warehouse_name#186, w_warehouse_sq_ft#187, w_city#188, w_county#189, w_state#190, w_country#191, d_year#183, sum#240, isEmpty#241, sum#242, isEmpty#243, sum#244, isEmpty#245, sum#246, isEmpty#247, sum#248, isEmpty#249, sum#250, isEmpty#251, sum#252, isEmpty#253, sum#254, isEmpty#255, sum#256, isEmpty#257, sum#258, isEmpty#259, sum#260, isEmpty#261, sum#262, isEmpty#263, sum#264, isEmpty#265, sum#266, isEmpty#267, sum#268, isEmpty#269, sum#270, isEmpty#271, sum#272, isEmpty#273, sum#274, isEmpty#275, sum#276, isEmpty#277, sum#278, isEmpty#279, sum#280, isEmpty#281, sum#282, isEmpty#283, sum#284, isEmpty#285, sum#286, isEmpty#287] -Arguments: hashpartitioning(w_warehouse_name#186, w_warehouse_sq_ft#187, w_city#188, w_county#189, w_state#190, w_country#191, d_year#183, 5), ENSURE_REQUIREMENTS, [id=#288] +Input [55]: [w_warehouse_name#182, w_warehouse_sq_ft#183, w_city#184, w_county#185, w_state#186, w_country#187, d_year#179, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241, sum#242, isEmpty#243, sum#244, isEmpty#245, sum#246, isEmpty#247, sum#248, isEmpty#249, sum#250, isEmpty#251, sum#252, isEmpty#253, sum#254, isEmpty#255, sum#256, isEmpty#257, sum#258, isEmpty#259, sum#260, isEmpty#261, sum#262, isEmpty#263, sum#264, isEmpty#265, sum#266, isEmpty#267, sum#268, isEmpty#269, sum#270, isEmpty#271, sum#272, isEmpty#273, sum#274, isEmpty#275, sum#276, isEmpty#277, sum#278, isEmpty#279, sum#280, isEmpty#281, sum#282, isEmpty#283] +Arguments: hashpartitioning(w_warehouse_name#182, w_warehouse_sq_ft#183, w_city#184, w_county#185, w_state#186, w_country#187, d_year#179, 5), ENSURE_REQUIREMENTS, [plan_id=5] (47) HashAggregate [codegen id : 12] -Input [55]: [w_warehouse_name#186, w_warehouse_sq_ft#187, w_city#188, w_county#189, w_state#190, w_country#191, d_year#183, sum#240, isEmpty#241, sum#242, isEmpty#243, sum#244, isEmpty#245, sum#246, isEmpty#247, sum#248, isEmpty#249, sum#250, isEmpty#251, sum#252, isEmpty#253, sum#254, isEmpty#255, sum#256, isEmpty#257, sum#258, isEmpty#259, sum#260, isEmpty#261, sum#262, isEmpty#263, sum#264, isEmpty#265, sum#266, isEmpty#267, sum#268, isEmpty#269, sum#270, isEmpty#271, sum#272, isEmpty#273, sum#274, isEmpty#275, sum#276, isEmpty#277, sum#278, isEmpty#279, sum#280, isEmpty#281, sum#282, isEmpty#283, sum#284, isEmpty#285, sum#286, isEmpty#287] -Keys [7]: [w_warehouse_name#186, w_warehouse_sq_ft#187, w_city#188, w_county#189, w_state#190, w_country#191, d_year#183] -Functions [24]: [sum(CASE WHEN (d_moy#184 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#184 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] -Aggregate Attributes [24]: [sum(CASE WHEN (d_moy#184 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#289, sum(CASE WHEN (d_moy#184 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#290, sum(CASE WHEN (d_moy#184 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#291, sum(CASE WHEN (d_moy#184 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#292, sum(CASE WHEN (d_moy#184 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#293, sum(CASE WHEN (d_moy#184 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#294, sum(CASE WHEN (d_moy#184 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#295, sum(CASE WHEN (d_moy#184 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#296, sum(CASE WHEN (d_moy#184 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#297, sum(CASE WHEN (d_moy#184 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#298, sum(CASE WHEN (d_moy#184 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#299, sum(CASE WHEN (d_moy#184 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#300, sum(CASE WHEN (d_moy#184 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#301, sum(CASE WHEN (d_moy#184 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#302, sum(CASE WHEN (d_moy#184 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#303, sum(CASE WHEN (d_moy#184 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#304, sum(CASE WHEN (d_moy#184 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#305, sum(CASE WHEN (d_moy#184 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#306, sum(CASE WHEN (d_moy#184 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#307, sum(CASE WHEN (d_moy#184 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#308, sum(CASE WHEN (d_moy#184 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#309, sum(CASE WHEN (d_moy#184 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#310, sum(CASE WHEN (d_moy#184 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#311, sum(CASE WHEN (d_moy#184 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#312] -Results [32]: [w_warehouse_name#186, w_warehouse_sq_ft#187, w_city#188, w_county#189, w_state#190, w_country#191, DHL,BARIAN AS ship_carriers#313, d_year#183 AS year#314, sum(CASE WHEN (d_moy#184 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#289 AS jan_sales#315, sum(CASE WHEN (d_moy#184 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#290 AS feb_sales#316, sum(CASE WHEN (d_moy#184 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#291 AS mar_sales#317, sum(CASE WHEN (d_moy#184 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#292 AS apr_sales#318, sum(CASE WHEN (d_moy#184 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#293 AS may_sales#319, sum(CASE WHEN (d_moy#184 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#294 AS jun_sales#320, sum(CASE WHEN (d_moy#184 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#295 AS jul_sales#321, sum(CASE WHEN (d_moy#184 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#296 AS aug_sales#322, sum(CASE WHEN (d_moy#184 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#297 AS sep_sales#323, sum(CASE WHEN (d_moy#184 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#298 AS oct_sales#324, sum(CASE WHEN (d_moy#184 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#299 AS nov_sales#325, sum(CASE WHEN (d_moy#184 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#300 AS dec_sales#326, sum(CASE WHEN (d_moy#184 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#301 AS jan_net#327, sum(CASE WHEN (d_moy#184 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#302 AS feb_net#328, sum(CASE WHEN (d_moy#184 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#303 AS mar_net#329, sum(CASE WHEN (d_moy#184 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#304 AS apr_net#330, sum(CASE WHEN (d_moy#184 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#305 AS may_net#331, sum(CASE WHEN (d_moy#184 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#306 AS jun_net#332, sum(CASE WHEN (d_moy#184 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#307 AS jul_net#333, sum(CASE WHEN (d_moy#184 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#308 AS aug_net#334, sum(CASE WHEN (d_moy#184 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#309 AS sep_net#335, sum(CASE WHEN (d_moy#184 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#310 AS oct_net#336, sum(CASE WHEN (d_moy#184 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#311 AS nov_net#337, sum(CASE WHEN (d_moy#184 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#312 AS dec_net#338] +Input [55]: [w_warehouse_name#182, w_warehouse_sq_ft#183, w_city#184, w_county#185, w_state#186, w_country#187, d_year#179, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241, sum#242, isEmpty#243, sum#244, isEmpty#245, sum#246, isEmpty#247, sum#248, isEmpty#249, sum#250, isEmpty#251, sum#252, isEmpty#253, sum#254, isEmpty#255, sum#256, isEmpty#257, sum#258, isEmpty#259, sum#260, isEmpty#261, sum#262, isEmpty#263, sum#264, isEmpty#265, sum#266, isEmpty#267, sum#268, isEmpty#269, sum#270, isEmpty#271, sum#272, isEmpty#273, sum#274, isEmpty#275, sum#276, isEmpty#277, sum#278, isEmpty#279, sum#280, isEmpty#281, sum#282, isEmpty#283] +Keys [7]: [w_warehouse_name#182, w_warehouse_sq_ft#183, w_city#184, w_county#185, w_state#186, w_country#187, d_year#179] +Functions [24]: [sum(CASE WHEN (d_moy#180 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#180 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] +Aggregate Attributes [24]: [sum(CASE WHEN (d_moy#180 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#284, sum(CASE WHEN (d_moy#180 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#285, sum(CASE WHEN (d_moy#180 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#286, sum(CASE WHEN (d_moy#180 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#287, sum(CASE WHEN (d_moy#180 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#288, sum(CASE WHEN (d_moy#180 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#289, sum(CASE WHEN (d_moy#180 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#290, sum(CASE WHEN (d_moy#180 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#291, sum(CASE WHEN (d_moy#180 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#292, sum(CASE WHEN (d_moy#180 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#293, sum(CASE WHEN (d_moy#180 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#294, sum(CASE WHEN (d_moy#180 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#295, sum(CASE WHEN (d_moy#180 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#296, sum(CASE WHEN (d_moy#180 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#297, sum(CASE WHEN (d_moy#180 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#298, sum(CASE WHEN (d_moy#180 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#299, sum(CASE WHEN (d_moy#180 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#300, sum(CASE WHEN (d_moy#180 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#301, sum(CASE WHEN (d_moy#180 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#302, sum(CASE WHEN (d_moy#180 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#303, sum(CASE WHEN (d_moy#180 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#304, sum(CASE WHEN (d_moy#180 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#305, sum(CASE WHEN (d_moy#180 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#306, sum(CASE WHEN (d_moy#180 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#307] +Results [32]: [w_warehouse_name#182, w_warehouse_sq_ft#183, w_city#184, w_county#185, w_state#186, w_country#187, DHL,BARIAN AS ship_carriers#308, d_year#179 AS year#309, sum(CASE WHEN (d_moy#180 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#284 AS jan_sales#310, sum(CASE WHEN (d_moy#180 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#285 AS feb_sales#311, sum(CASE WHEN (d_moy#180 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#286 AS mar_sales#312, sum(CASE WHEN (d_moy#180 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#287 AS apr_sales#313, sum(CASE WHEN (d_moy#180 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#288 AS may_sales#314, sum(CASE WHEN (d_moy#180 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#289 AS jun_sales#315, sum(CASE WHEN (d_moy#180 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#290 AS jul_sales#316, sum(CASE WHEN (d_moy#180 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#291 AS aug_sales#317, sum(CASE WHEN (d_moy#180 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#292 AS sep_sales#318, sum(CASE WHEN (d_moy#180 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#293 AS oct_sales#319, sum(CASE WHEN (d_moy#180 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#294 AS nov_sales#320, sum(CASE WHEN (d_moy#180 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#295 AS dec_sales#321, sum(CASE WHEN (d_moy#180 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#296 AS jan_net#322, sum(CASE WHEN (d_moy#180 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#297 AS feb_net#323, sum(CASE WHEN (d_moy#180 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#298 AS mar_net#324, sum(CASE WHEN (d_moy#180 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#299 AS apr_net#325, sum(CASE WHEN (d_moy#180 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#300 AS may_net#326, sum(CASE WHEN (d_moy#180 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#301 AS jun_net#327, sum(CASE WHEN (d_moy#180 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#302 AS jul_net#328, sum(CASE WHEN (d_moy#180 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#303 AS aug_net#329, sum(CASE WHEN (d_moy#180 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#304 AS sep_net#330, sum(CASE WHEN (d_moy#180 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#305 AS oct_net#331, sum(CASE WHEN (d_moy#180 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#306 AS nov_net#332, sum(CASE WHEN (d_moy#180 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#307 AS dec_net#333] (48) Union (49) HashAggregate [codegen id : 13] -Input [32]: [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, ship_carriers#147, year#148, jan_sales#149, feb_sales#150, mar_sales#151, apr_sales#152, may_sales#153, jun_sales#154, jul_sales#155, aug_sales#156, sep_sales#157, oct_sales#158, nov_sales#159, dec_sales#160, jan_net#161, feb_net#162, mar_net#163, apr_net#164, may_net#165, jun_net#166, jul_net#167, aug_net#168, sep_net#169, oct_net#170, nov_net#171, dec_net#172] -Keys [8]: [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, ship_carriers#147, year#148] -Functions [36]: [partial_sum(jan_sales#149), partial_sum(feb_sales#150), partial_sum(mar_sales#151), partial_sum(apr_sales#152), partial_sum(may_sales#153), partial_sum(jun_sales#154), partial_sum(jul_sales#155), partial_sum(aug_sales#156), partial_sum(sep_sales#157), partial_sum(oct_sales#158), partial_sum(nov_sales#159), partial_sum(dec_sales#160), partial_sum(CheckOverflow((promote_precision(jan_sales#149) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(feb_sales#150) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(mar_sales#151) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(apr_sales#152) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(may_sales#153) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(jun_sales#154) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(jul_sales#155) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(aug_sales#156) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(sep_sales#157) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(oct_sales#158) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(nov_sales#159) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(dec_sales#160) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), partial_sum(jan_net#161), partial_sum(feb_net#162), partial_sum(mar_net#163), partial_sum(apr_net#164), partial_sum(may_net#165), partial_sum(jun_net#166), partial_sum(jul_net#167), partial_sum(aug_net#168), partial_sum(sep_net#169), partial_sum(oct_net#170), partial_sum(nov_net#171), partial_sum(dec_net#172)] -Aggregate Attributes [72]: [sum#339, isEmpty#340, sum#341, isEmpty#342, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348, sum#349, isEmpty#350, sum#351, isEmpty#352, sum#353, isEmpty#354, sum#355, isEmpty#356, sum#357, isEmpty#358, sum#359, isEmpty#360, sum#361, isEmpty#362, sum#363, isEmpty#364, sum#365, isEmpty#366, sum#367, isEmpty#368, sum#369, isEmpty#370, sum#371, isEmpty#372, sum#373, isEmpty#374, sum#375, isEmpty#376, sum#377, isEmpty#378, sum#379, isEmpty#380, sum#381, isEmpty#382, sum#383, isEmpty#384, sum#385, isEmpty#386, sum#387, isEmpty#388, sum#389, isEmpty#390, sum#391, isEmpty#392, sum#393, isEmpty#394, sum#395, isEmpty#396, sum#397, isEmpty#398, sum#399, isEmpty#400, sum#401, isEmpty#402, sum#403, isEmpty#404, sum#405, isEmpty#406, sum#407, isEmpty#408, sum#409, isEmpty#410] -Results [80]: [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, ship_carriers#147, year#148, sum#411, isEmpty#412, sum#413, isEmpty#414, sum#415, isEmpty#416, sum#417, isEmpty#418, sum#419, isEmpty#420, sum#421, isEmpty#422, sum#423, isEmpty#424, sum#425, isEmpty#426, sum#427, isEmpty#428, sum#429, isEmpty#430, sum#431, isEmpty#432, sum#433, isEmpty#434, sum#435, isEmpty#436, sum#437, isEmpty#438, sum#439, isEmpty#440, sum#441, isEmpty#442, sum#443, isEmpty#444, sum#445, isEmpty#446, sum#447, isEmpty#448, sum#449, isEmpty#450, sum#451, isEmpty#452, sum#453, isEmpty#454, sum#455, isEmpty#456, sum#457, isEmpty#458, sum#459, isEmpty#460, sum#461, isEmpty#462, sum#463, isEmpty#464, sum#465, isEmpty#466, sum#467, isEmpty#468, sum#469, isEmpty#470, sum#471, isEmpty#472, sum#473, isEmpty#474, sum#475, isEmpty#476, sum#477, isEmpty#478, sum#479, isEmpty#480, sum#481, isEmpty#482] +Input [32]: [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, ship_carriers#143, year#144, jan_sales#145, feb_sales#146, mar_sales#147, apr_sales#148, may_sales#149, jun_sales#150, jul_sales#151, aug_sales#152, sep_sales#153, oct_sales#154, nov_sales#155, dec_sales#156, jan_net#157, feb_net#158, mar_net#159, apr_net#160, may_net#161, jun_net#162, jul_net#163, aug_net#164, sep_net#165, oct_net#166, nov_net#167, dec_net#168] +Keys [8]: [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, ship_carriers#143, year#144] +Functions [36]: [partial_sum(jan_sales#145), partial_sum(feb_sales#146), partial_sum(mar_sales#147), partial_sum(apr_sales#148), partial_sum(may_sales#149), partial_sum(jun_sales#150), partial_sum(jul_sales#151), partial_sum(aug_sales#152), partial_sum(sep_sales#153), partial_sum(oct_sales#154), partial_sum(nov_sales#155), partial_sum(dec_sales#156), partial_sum(CheckOverflow((promote_precision(jan_sales#145) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(feb_sales#146) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(mar_sales#147) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(apr_sales#148) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(may_sales#149) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(jun_sales#150) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(jul_sales#151) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(aug_sales#152) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(sep_sales#153) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(oct_sales#154) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(nov_sales#155) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(dec_sales#156) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), partial_sum(jan_net#157), partial_sum(feb_net#158), partial_sum(mar_net#159), partial_sum(apr_net#160), partial_sum(may_net#161), partial_sum(jun_net#162), partial_sum(jul_net#163), partial_sum(aug_net#164), partial_sum(sep_net#165), partial_sum(oct_net#166), partial_sum(nov_net#167), partial_sum(dec_net#168)] +Aggregate Attributes [72]: [sum#334, isEmpty#335, sum#336, isEmpty#337, sum#338, isEmpty#339, sum#340, isEmpty#341, sum#342, isEmpty#343, sum#344, isEmpty#345, sum#346, isEmpty#347, sum#348, isEmpty#349, sum#350, isEmpty#351, sum#352, isEmpty#353, sum#354, isEmpty#355, sum#356, isEmpty#357, sum#358, isEmpty#359, sum#360, isEmpty#361, sum#362, isEmpty#363, sum#364, isEmpty#365, sum#366, isEmpty#367, sum#368, isEmpty#369, sum#370, isEmpty#371, sum#372, isEmpty#373, sum#374, isEmpty#375, sum#376, isEmpty#377, sum#378, isEmpty#379, sum#380, isEmpty#381, sum#382, isEmpty#383, sum#384, isEmpty#385, sum#386, isEmpty#387, sum#388, isEmpty#389, sum#390, isEmpty#391, sum#392, isEmpty#393, sum#394, isEmpty#395, sum#396, isEmpty#397, sum#398, isEmpty#399, sum#400, isEmpty#401, sum#402, isEmpty#403, sum#404, isEmpty#405] +Results [80]: [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, ship_carriers#143, year#144, sum#406, isEmpty#407, sum#408, isEmpty#409, sum#410, isEmpty#411, sum#412, isEmpty#413, sum#414, isEmpty#415, sum#416, isEmpty#417, sum#418, isEmpty#419, sum#420, isEmpty#421, sum#422, isEmpty#423, sum#424, isEmpty#425, sum#426, isEmpty#427, sum#428, isEmpty#429, sum#430, isEmpty#431, sum#432, isEmpty#433, sum#434, isEmpty#435, sum#436, isEmpty#437, sum#438, isEmpty#439, sum#440, isEmpty#441, sum#442, isEmpty#443, sum#444, isEmpty#445, sum#446, isEmpty#447, sum#448, isEmpty#449, sum#450, isEmpty#451, sum#452, isEmpty#453, sum#454, isEmpty#455, sum#456, isEmpty#457, sum#458, isEmpty#459, sum#460, isEmpty#461, sum#462, isEmpty#463, sum#464, isEmpty#465, sum#466, isEmpty#467, sum#468, isEmpty#469, sum#470, isEmpty#471, sum#472, isEmpty#473, sum#474, isEmpty#475, sum#476, isEmpty#477] (50) Exchange -Input [80]: [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, ship_carriers#147, year#148, sum#411, isEmpty#412, sum#413, isEmpty#414, sum#415, isEmpty#416, sum#417, isEmpty#418, sum#419, isEmpty#420, sum#421, isEmpty#422, sum#423, isEmpty#424, sum#425, isEmpty#426, sum#427, isEmpty#428, sum#429, isEmpty#430, sum#431, isEmpty#432, sum#433, isEmpty#434, sum#435, isEmpty#436, sum#437, isEmpty#438, sum#439, isEmpty#440, sum#441, isEmpty#442, sum#443, isEmpty#444, sum#445, isEmpty#446, sum#447, isEmpty#448, sum#449, isEmpty#450, sum#451, isEmpty#452, sum#453, isEmpty#454, sum#455, isEmpty#456, sum#457, isEmpty#458, sum#459, isEmpty#460, sum#461, isEmpty#462, sum#463, isEmpty#464, sum#465, isEmpty#466, sum#467, isEmpty#468, sum#469, isEmpty#470, sum#471, isEmpty#472, sum#473, isEmpty#474, sum#475, isEmpty#476, sum#477, isEmpty#478, sum#479, isEmpty#480, sum#481, isEmpty#482] -Arguments: hashpartitioning(w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, ship_carriers#147, year#148, 5), ENSURE_REQUIREMENTS, [id=#483] +Input [80]: [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, ship_carriers#143, year#144, sum#406, isEmpty#407, sum#408, isEmpty#409, sum#410, isEmpty#411, sum#412, isEmpty#413, sum#414, isEmpty#415, sum#416, isEmpty#417, sum#418, isEmpty#419, sum#420, isEmpty#421, sum#422, isEmpty#423, sum#424, isEmpty#425, sum#426, isEmpty#427, sum#428, isEmpty#429, sum#430, isEmpty#431, sum#432, isEmpty#433, sum#434, isEmpty#435, sum#436, isEmpty#437, sum#438, isEmpty#439, sum#440, isEmpty#441, sum#442, isEmpty#443, sum#444, isEmpty#445, sum#446, isEmpty#447, sum#448, isEmpty#449, sum#450, isEmpty#451, sum#452, isEmpty#453, sum#454, isEmpty#455, sum#456, isEmpty#457, sum#458, isEmpty#459, sum#460, isEmpty#461, sum#462, isEmpty#463, sum#464, isEmpty#465, sum#466, isEmpty#467, sum#468, isEmpty#469, sum#470, isEmpty#471, sum#472, isEmpty#473, sum#474, isEmpty#475, sum#476, isEmpty#477] +Arguments: hashpartitioning(w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, ship_carriers#143, year#144, 5), ENSURE_REQUIREMENTS, [plan_id=6] (51) HashAggregate [codegen id : 14] -Input [80]: [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, ship_carriers#147, year#148, sum#411, isEmpty#412, sum#413, isEmpty#414, sum#415, isEmpty#416, sum#417, isEmpty#418, sum#419, isEmpty#420, sum#421, isEmpty#422, sum#423, isEmpty#424, sum#425, isEmpty#426, sum#427, isEmpty#428, sum#429, isEmpty#430, sum#431, isEmpty#432, sum#433, isEmpty#434, sum#435, isEmpty#436, sum#437, isEmpty#438, sum#439, isEmpty#440, sum#441, isEmpty#442, sum#443, isEmpty#444, sum#445, isEmpty#446, sum#447, isEmpty#448, sum#449, isEmpty#450, sum#451, isEmpty#452, sum#453, isEmpty#454, sum#455, isEmpty#456, sum#457, isEmpty#458, sum#459, isEmpty#460, sum#461, isEmpty#462, sum#463, isEmpty#464, sum#465, isEmpty#466, sum#467, isEmpty#468, sum#469, isEmpty#470, sum#471, isEmpty#472, sum#473, isEmpty#474, sum#475, isEmpty#476, sum#477, isEmpty#478, sum#479, isEmpty#480, sum#481, isEmpty#482] -Keys [8]: [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, ship_carriers#147, year#148] -Functions [36]: [sum(jan_sales#149), sum(feb_sales#150), sum(mar_sales#151), sum(apr_sales#152), sum(may_sales#153), sum(jun_sales#154), sum(jul_sales#155), sum(aug_sales#156), sum(sep_sales#157), sum(oct_sales#158), sum(nov_sales#159), sum(dec_sales#160), sum(CheckOverflow((promote_precision(jan_sales#149) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(feb_sales#150) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(mar_sales#151) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(apr_sales#152) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(may_sales#153) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(jun_sales#154) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(jul_sales#155) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(aug_sales#156) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(sep_sales#157) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(oct_sales#158) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(nov_sales#159) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(dec_sales#160) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12))), sum(jan_net#161), sum(feb_net#162), sum(mar_net#163), sum(apr_net#164), sum(may_net#165), sum(jun_net#166), sum(jul_net#167), sum(aug_net#168), sum(sep_net#169), sum(oct_net#170), sum(nov_net#171), sum(dec_net#172)] -Aggregate Attributes [36]: [sum(jan_sales#149)#484, sum(feb_sales#150)#485, sum(mar_sales#151)#486, sum(apr_sales#152)#487, sum(may_sales#153)#488, sum(jun_sales#154)#489, sum(jul_sales#155)#490, sum(aug_sales#156)#491, sum(sep_sales#157)#492, sum(oct_sales#158)#493, sum(nov_sales#159)#494, sum(dec_sales#160)#495, sum(CheckOverflow((promote_precision(jan_sales#149) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#496, sum(CheckOverflow((promote_precision(feb_sales#150) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#497, sum(CheckOverflow((promote_precision(mar_sales#151) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#498, sum(CheckOverflow((promote_precision(apr_sales#152) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#499, sum(CheckOverflow((promote_precision(may_sales#153) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#500, sum(CheckOverflow((promote_precision(jun_sales#154) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#501, sum(CheckOverflow((promote_precision(jul_sales#155) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#502, sum(CheckOverflow((promote_precision(aug_sales#156) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#503, sum(CheckOverflow((promote_precision(sep_sales#157) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#504, sum(CheckOverflow((promote_precision(oct_sales#158) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#505, sum(CheckOverflow((promote_precision(nov_sales#159) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#506, sum(CheckOverflow((promote_precision(dec_sales#160) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#507, sum(jan_net#161)#508, sum(feb_net#162)#509, sum(mar_net#163)#510, sum(apr_net#164)#511, sum(may_net#165)#512, sum(jun_net#166)#513, sum(jul_net#167)#514, sum(aug_net#168)#515, sum(sep_net#169)#516, sum(oct_net#170)#517, sum(nov_net#171)#518, sum(dec_net#172)#519] -Results [44]: [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, ship_carriers#147, year#148, sum(jan_sales#149)#484 AS jan_sales#520, sum(feb_sales#150)#485 AS feb_sales#521, sum(mar_sales#151)#486 AS mar_sales#522, sum(apr_sales#152)#487 AS apr_sales#523, sum(may_sales#153)#488 AS may_sales#524, sum(jun_sales#154)#489 AS jun_sales#525, sum(jul_sales#155)#490 AS jul_sales#526, sum(aug_sales#156)#491 AS aug_sales#527, sum(sep_sales#157)#492 AS sep_sales#528, sum(oct_sales#158)#493 AS oct_sales#529, sum(nov_sales#159)#494 AS nov_sales#530, sum(dec_sales#160)#495 AS dec_sales#531, sum(CheckOverflow((promote_precision(jan_sales#149) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#496 AS jan_sales_per_sq_foot#532, sum(CheckOverflow((promote_precision(feb_sales#150) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#497 AS feb_sales_per_sq_foot#533, sum(CheckOverflow((promote_precision(mar_sales#151) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#498 AS mar_sales_per_sq_foot#534, sum(CheckOverflow((promote_precision(apr_sales#152) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#499 AS apr_sales_per_sq_foot#535, sum(CheckOverflow((promote_precision(may_sales#153) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#500 AS may_sales_per_sq_foot#536, sum(CheckOverflow((promote_precision(jun_sales#154) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#501 AS jun_sales_per_sq_foot#537, sum(CheckOverflow((promote_precision(jul_sales#155) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#502 AS jul_sales_per_sq_foot#538, sum(CheckOverflow((promote_precision(aug_sales#156) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#503 AS aug_sales_per_sq_foot#539, sum(CheckOverflow((promote_precision(sep_sales#157) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#504 AS sep_sales_per_sq_foot#540, sum(CheckOverflow((promote_precision(oct_sales#158) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#505 AS oct_sales_per_sq_foot#541, sum(CheckOverflow((promote_precision(nov_sales#159) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#506 AS nov_sales_per_sq_foot#542, sum(CheckOverflow((promote_precision(dec_sales#160) / promote_precision(cast(w_warehouse_sq_ft#20 as decimal(28,2)))), DecimalType(38,12)))#507 AS dec_sales_per_sq_foot#543, sum(jan_net#161)#508 AS jan_net#544, sum(feb_net#162)#509 AS feb_net#545, sum(mar_net#163)#510 AS mar_net#546, sum(apr_net#164)#511 AS apr_net#547, sum(may_net#165)#512 AS may_net#548, sum(jun_net#166)#513 AS jun_net#549, sum(jul_net#167)#514 AS jul_net#550, sum(aug_net#168)#515 AS aug_net#551, sum(sep_net#169)#516 AS sep_net#552, sum(oct_net#170)#517 AS oct_net#553, sum(nov_net#171)#518 AS nov_net#554, sum(dec_net#172)#519 AS dec_net#555] +Input [80]: [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, ship_carriers#143, year#144, sum#406, isEmpty#407, sum#408, isEmpty#409, sum#410, isEmpty#411, sum#412, isEmpty#413, sum#414, isEmpty#415, sum#416, isEmpty#417, sum#418, isEmpty#419, sum#420, isEmpty#421, sum#422, isEmpty#423, sum#424, isEmpty#425, sum#426, isEmpty#427, sum#428, isEmpty#429, sum#430, isEmpty#431, sum#432, isEmpty#433, sum#434, isEmpty#435, sum#436, isEmpty#437, sum#438, isEmpty#439, sum#440, isEmpty#441, sum#442, isEmpty#443, sum#444, isEmpty#445, sum#446, isEmpty#447, sum#448, isEmpty#449, sum#450, isEmpty#451, sum#452, isEmpty#453, sum#454, isEmpty#455, sum#456, isEmpty#457, sum#458, isEmpty#459, sum#460, isEmpty#461, sum#462, isEmpty#463, sum#464, isEmpty#465, sum#466, isEmpty#467, sum#468, isEmpty#469, sum#470, isEmpty#471, sum#472, isEmpty#473, sum#474, isEmpty#475, sum#476, isEmpty#477] +Keys [8]: [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, ship_carriers#143, year#144] +Functions [36]: [sum(jan_sales#145), sum(feb_sales#146), sum(mar_sales#147), sum(apr_sales#148), sum(may_sales#149), sum(jun_sales#150), sum(jul_sales#151), sum(aug_sales#152), sum(sep_sales#153), sum(oct_sales#154), sum(nov_sales#155), sum(dec_sales#156), sum(CheckOverflow((promote_precision(jan_sales#145) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(feb_sales#146) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(mar_sales#147) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(apr_sales#148) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(may_sales#149) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(jun_sales#150) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(jul_sales#151) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(aug_sales#152) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(sep_sales#153) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(oct_sales#154) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(nov_sales#155) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(dec_sales#156) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12))), sum(jan_net#157), sum(feb_net#158), sum(mar_net#159), sum(apr_net#160), sum(may_net#161), sum(jun_net#162), sum(jul_net#163), sum(aug_net#164), sum(sep_net#165), sum(oct_net#166), sum(nov_net#167), sum(dec_net#168)] +Aggregate Attributes [36]: [sum(jan_sales#145)#478, sum(feb_sales#146)#479, sum(mar_sales#147)#480, sum(apr_sales#148)#481, sum(may_sales#149)#482, sum(jun_sales#150)#483, sum(jul_sales#151)#484, sum(aug_sales#152)#485, sum(sep_sales#153)#486, sum(oct_sales#154)#487, sum(nov_sales#155)#488, sum(dec_sales#156)#489, sum(CheckOverflow((promote_precision(jan_sales#145) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#490, sum(CheckOverflow((promote_precision(feb_sales#146) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#491, sum(CheckOverflow((promote_precision(mar_sales#147) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#492, sum(CheckOverflow((promote_precision(apr_sales#148) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#493, sum(CheckOverflow((promote_precision(may_sales#149) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#494, sum(CheckOverflow((promote_precision(jun_sales#150) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#495, sum(CheckOverflow((promote_precision(jul_sales#151) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#496, sum(CheckOverflow((promote_precision(aug_sales#152) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#497, sum(CheckOverflow((promote_precision(sep_sales#153) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#498, sum(CheckOverflow((promote_precision(oct_sales#154) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#499, sum(CheckOverflow((promote_precision(nov_sales#155) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#500, sum(CheckOverflow((promote_precision(dec_sales#156) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#501, sum(jan_net#157)#502, sum(feb_net#158)#503, sum(mar_net#159)#504, sum(apr_net#160)#505, sum(may_net#161)#506, sum(jun_net#162)#507, sum(jul_net#163)#508, sum(aug_net#164)#509, sum(sep_net#165)#510, sum(oct_net#166)#511, sum(nov_net#167)#512, sum(dec_net#168)#513] +Results [44]: [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, ship_carriers#143, year#144, sum(jan_sales#145)#478 AS jan_sales#514, sum(feb_sales#146)#479 AS feb_sales#515, sum(mar_sales#147)#480 AS mar_sales#516, sum(apr_sales#148)#481 AS apr_sales#517, sum(may_sales#149)#482 AS may_sales#518, sum(jun_sales#150)#483 AS jun_sales#519, sum(jul_sales#151)#484 AS jul_sales#520, sum(aug_sales#152)#485 AS aug_sales#521, sum(sep_sales#153)#486 AS sep_sales#522, sum(oct_sales#154)#487 AS oct_sales#523, sum(nov_sales#155)#488 AS nov_sales#524, sum(dec_sales#156)#489 AS dec_sales#525, sum(CheckOverflow((promote_precision(jan_sales#145) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#490 AS jan_sales_per_sq_foot#526, sum(CheckOverflow((promote_precision(feb_sales#146) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#491 AS feb_sales_per_sq_foot#527, sum(CheckOverflow((promote_precision(mar_sales#147) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#492 AS mar_sales_per_sq_foot#528, sum(CheckOverflow((promote_precision(apr_sales#148) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#493 AS apr_sales_per_sq_foot#529, sum(CheckOverflow((promote_precision(may_sales#149) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#494 AS may_sales_per_sq_foot#530, sum(CheckOverflow((promote_precision(jun_sales#150) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#495 AS jun_sales_per_sq_foot#531, sum(CheckOverflow((promote_precision(jul_sales#151) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#496 AS jul_sales_per_sq_foot#532, sum(CheckOverflow((promote_precision(aug_sales#152) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#497 AS aug_sales_per_sq_foot#533, sum(CheckOverflow((promote_precision(sep_sales#153) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#498 AS sep_sales_per_sq_foot#534, sum(CheckOverflow((promote_precision(oct_sales#154) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#499 AS oct_sales_per_sq_foot#535, sum(CheckOverflow((promote_precision(nov_sales#155) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#500 AS nov_sales_per_sq_foot#536, sum(CheckOverflow((promote_precision(dec_sales#156) / promote_precision(cast(w_warehouse_sq_ft#18 as decimal(28,2)))), DecimalType(38,12)))#501 AS dec_sales_per_sq_foot#537, sum(jan_net#157)#502 AS jan_net#538, sum(feb_net#158)#503 AS feb_net#539, sum(mar_net#159)#504 AS mar_net#540, sum(apr_net#160)#505 AS apr_net#541, sum(may_net#161)#506 AS may_net#542, sum(jun_net#162)#507 AS jun_net#543, sum(jul_net#163)#508 AS jul_net#544, sum(aug_net#164)#509 AS aug_net#545, sum(sep_net#165)#510 AS sep_net#546, sum(oct_net#166)#511 AS oct_net#547, sum(nov_net#167)#512 AS nov_net#548, sum(dec_net#168)#513 AS dec_net#549] (52) TakeOrderedAndProject -Input [44]: [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, ship_carriers#147, year#148, jan_sales#520, feb_sales#521, mar_sales#522, apr_sales#523, may_sales#524, jun_sales#525, jul_sales#526, aug_sales#527, sep_sales#528, oct_sales#529, nov_sales#530, dec_sales#531, jan_sales_per_sq_foot#532, feb_sales_per_sq_foot#533, mar_sales_per_sq_foot#534, apr_sales_per_sq_foot#535, may_sales_per_sq_foot#536, jun_sales_per_sq_foot#537, jul_sales_per_sq_foot#538, aug_sales_per_sq_foot#539, sep_sales_per_sq_foot#540, oct_sales_per_sq_foot#541, nov_sales_per_sq_foot#542, dec_sales_per_sq_foot#543, jan_net#544, feb_net#545, mar_net#546, apr_net#547, may_net#548, jun_net#549, jul_net#550, aug_net#551, sep_net#552, oct_net#553, nov_net#554, dec_net#555] -Arguments: 100, [w_warehouse_name#19 ASC NULLS FIRST], [w_warehouse_name#19, w_warehouse_sq_ft#20, w_city#21, w_county#22, w_state#23, w_country#24, ship_carriers#147, year#148, jan_sales#520, feb_sales#521, mar_sales#522, apr_sales#523, may_sales#524, jun_sales#525, jul_sales#526, aug_sales#527, sep_sales#528, oct_sales#529, nov_sales#530, dec_sales#531, jan_sales_per_sq_foot#532, feb_sales_per_sq_foot#533, mar_sales_per_sq_foot#534, apr_sales_per_sq_foot#535, may_sales_per_sq_foot#536, jun_sales_per_sq_foot#537, jul_sales_per_sq_foot#538, aug_sales_per_sq_foot#539, sep_sales_per_sq_foot#540, oct_sales_per_sq_foot#541, nov_sales_per_sq_foot#542, dec_sales_per_sq_foot#543, jan_net#544, feb_net#545, mar_net#546, apr_net#547, may_net#548, jun_net#549, jul_net#550, aug_net#551, sep_net#552, oct_net#553, nov_net#554, dec_net#555] +Input [44]: [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, ship_carriers#143, year#144, jan_sales#514, feb_sales#515, mar_sales#516, apr_sales#517, may_sales#518, jun_sales#519, jul_sales#520, aug_sales#521, sep_sales#522, oct_sales#523, nov_sales#524, dec_sales#525, jan_sales_per_sq_foot#526, feb_sales_per_sq_foot#527, mar_sales_per_sq_foot#528, apr_sales_per_sq_foot#529, may_sales_per_sq_foot#530, jun_sales_per_sq_foot#531, jul_sales_per_sq_foot#532, aug_sales_per_sq_foot#533, sep_sales_per_sq_foot#534, oct_sales_per_sq_foot#535, nov_sales_per_sq_foot#536, dec_sales_per_sq_foot#537, jan_net#538, feb_net#539, mar_net#540, apr_net#541, may_net#542, jun_net#543, jul_net#544, aug_net#545, sep_net#546, oct_net#547, nov_net#548, dec_net#549] +Arguments: 100, [w_warehouse_name#17 ASC NULLS FIRST], [w_warehouse_name#17, w_warehouse_sq_ft#18, w_city#19, w_county#20, w_state#21, w_country#22, ship_carriers#143, year#144, jan_sales#514, feb_sales#515, mar_sales#516, apr_sales#517, may_sales#518, jun_sales#519, jul_sales#520, aug_sales#521, sep_sales#522, oct_sales#523, nov_sales#524, dec_sales#525, jan_sales_per_sq_foot#526, feb_sales_per_sq_foot#527, mar_sales_per_sq_foot#528, apr_sales_per_sq_foot#529, may_sales_per_sq_foot#530, jun_sales_per_sq_foot#531, jul_sales_per_sq_foot#532, aug_sales_per_sq_foot#533, sep_sales_per_sq_foot#534, oct_sales_per_sq_foot#535, nov_sales_per_sq_foot#536, dec_sales_per_sq_foot#537, jan_net#538, feb_net#539, mar_net#540, apr_net#541, may_net#542, jun_net#543, jul_net#544, aug_net#545, sep_net#546, oct_net#547, nov_net#548, dec_net#549] ===== Subqueries ===== @@ -302,23 +302,23 @@ BroadcastExchange (56) (53) Scan parquet default.date_dim -Output [3]: [d_date_sk#15, d_year#16, d_moy#17] +Output [3]: [d_date_sk#13, d_year#14, d_moy#15] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (54) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#15, d_year#16, d_moy#17] +Input [3]: [d_date_sk#13, d_year#14, d_moy#15] (55) Filter [codegen id : 1] -Input [3]: [d_date_sk#15, d_year#16, d_moy#17] -Condition : ((isnotnull(d_year#16) AND (d_year#16 = 2001)) AND isnotnull(d_date_sk#15)) +Input [3]: [d_date_sk#13, d_year#14, d_moy#15] +Condition : ((isnotnull(d_year#14) AND (d_year#14 = 2001)) AND isnotnull(d_date_sk#13)) (56) BroadcastExchange -Input [3]: [d_date_sk#15, d_year#16, d_moy#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#556] +Input [3]: [d_date_sk#13, d_year#14, d_moy#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] -Subquery:2 Hosting operator id = 30 Hosting Expression = cs_sold_date_sk#179 IN dynamicpruning#8 +Subquery:2 Hosting operator id = 30 Hosting Expression = cs_sold_date_sk#175 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q66/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q66/explain.txt index f0b239a262c26..b2e7d4ee9a6e5 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q66/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q66/explain.txt @@ -84,7 +84,7 @@ Condition : isnotnull(w_warehouse_sk#9) (7) BroadcastExchange Input [7]: [w_warehouse_sk#9, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_warehouse_sk#3] @@ -96,201 +96,201 @@ Output [12]: [ws_sold_time_sk#1, ws_ship_mode_sk#2, ws_quantity#4, ws_ext_sales_ Input [14]: [ws_sold_time_sk#1, ws_ship_mode_sk#2, ws_warehouse_sk#3, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, ws_sold_date_sk#7, w_warehouse_sk#9, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15] (10) ReusedExchange [Reuses operator id: 56] -Output [3]: [d_date_sk#17, d_year#18, d_moy#19] +Output [3]: [d_date_sk#16, d_year#17, d_moy#18] (11) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_sold_date_sk#7] -Right keys [1]: [d_date_sk#17] +Right keys [1]: [d_date_sk#16] Join condition: None (12) Project [codegen id : 5] -Output [13]: [ws_sold_time_sk#1, ws_ship_mode_sk#2, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#18, d_moy#19] -Input [15]: [ws_sold_time_sk#1, ws_ship_mode_sk#2, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, ws_sold_date_sk#7, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_date_sk#17, d_year#18, d_moy#19] +Output [13]: [ws_sold_time_sk#1, ws_ship_mode_sk#2, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#17, d_moy#18] +Input [15]: [ws_sold_time_sk#1, ws_ship_mode_sk#2, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, ws_sold_date_sk#7, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_date_sk#16, d_year#17, d_moy#18] (13) Scan parquet default.time_dim -Output [2]: [t_time_sk#20, t_time#21] +Output [2]: [t_time_sk#19, t_time#20] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_time), GreaterThanOrEqual(t_time,30838), LessThanOrEqual(t_time,59638), IsNotNull(t_time_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [2]: [t_time_sk#20, t_time#21] +Input [2]: [t_time_sk#19, t_time#20] (15) Filter [codegen id : 3] -Input [2]: [t_time_sk#20, t_time#21] -Condition : (((isnotnull(t_time#21) AND (t_time#21 >= 30838)) AND (t_time#21 <= 59638)) AND isnotnull(t_time_sk#20)) +Input [2]: [t_time_sk#19, t_time#20] +Condition : (((isnotnull(t_time#20) AND (t_time#20 >= 30838)) AND (t_time#20 <= 59638)) AND isnotnull(t_time_sk#19)) (16) Project [codegen id : 3] -Output [1]: [t_time_sk#20] -Input [2]: [t_time_sk#20, t_time#21] +Output [1]: [t_time_sk#19] +Input [2]: [t_time_sk#19, t_time#20] (17) BroadcastExchange -Input [1]: [t_time_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [t_time_sk#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_sold_time_sk#1] -Right keys [1]: [t_time_sk#20] +Right keys [1]: [t_time_sk#19] Join condition: None (19) Project [codegen id : 5] -Output [12]: [ws_ship_mode_sk#2, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#18, d_moy#19] -Input [14]: [ws_sold_time_sk#1, ws_ship_mode_sk#2, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#18, d_moy#19, t_time_sk#20] +Output [12]: [ws_ship_mode_sk#2, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#17, d_moy#18] +Input [14]: [ws_sold_time_sk#1, ws_ship_mode_sk#2, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#17, d_moy#18, t_time_sk#19] (20) Scan parquet default.ship_mode -Output [2]: [sm_ship_mode_sk#23, sm_carrier#24] +Output [2]: [sm_ship_mode_sk#21, sm_carrier#22] Batched: true Location [not included in comparison]/{warehouse_dir}/ship_mode] PushedFilters: [In(sm_carrier, [BARIAN ,DHL ]), IsNotNull(sm_ship_mode_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [2]: [sm_ship_mode_sk#23, sm_carrier#24] +Input [2]: [sm_ship_mode_sk#21, sm_carrier#22] (22) Filter [codegen id : 4] -Input [2]: [sm_ship_mode_sk#23, sm_carrier#24] -Condition : (sm_carrier#24 IN (DHL ,BARIAN ) AND isnotnull(sm_ship_mode_sk#23)) +Input [2]: [sm_ship_mode_sk#21, sm_carrier#22] +Condition : (sm_carrier#22 IN (DHL ,BARIAN ) AND isnotnull(sm_ship_mode_sk#21)) (23) Project [codegen id : 4] -Output [1]: [sm_ship_mode_sk#23] -Input [2]: [sm_ship_mode_sk#23, sm_carrier#24] +Output [1]: [sm_ship_mode_sk#21] +Input [2]: [sm_ship_mode_sk#21, sm_carrier#22] (24) BroadcastExchange -Input [1]: [sm_ship_mode_sk#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [sm_ship_mode_sk#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (25) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ws_ship_mode_sk#2] -Right keys [1]: [sm_ship_mode_sk#23] +Right keys [1]: [sm_ship_mode_sk#21] Join condition: None (26) Project [codegen id : 5] -Output [11]: [ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#18, d_moy#19] -Input [13]: [ws_ship_mode_sk#2, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#18, d_moy#19, sm_ship_mode_sk#23] +Output [11]: [ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#17, d_moy#18] +Input [13]: [ws_ship_mode_sk#2, ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#17, d_moy#18, sm_ship_mode_sk#21] (27) HashAggregate [codegen id : 5] -Input [11]: [ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#18, d_moy#19] -Keys [7]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#18] -Functions [24]: [partial_sum(CASE WHEN (d_moy#19 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#19 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] -Aggregate Attributes [48]: [sum#26, isEmpty#27, sum#28, isEmpty#29, sum#30, isEmpty#31, sum#32, isEmpty#33, sum#34, isEmpty#35, sum#36, isEmpty#37, sum#38, isEmpty#39, sum#40, isEmpty#41, sum#42, isEmpty#43, sum#44, isEmpty#45, sum#46, isEmpty#47, sum#48, isEmpty#49, sum#50, isEmpty#51, sum#52, isEmpty#53, sum#54, isEmpty#55, sum#56, isEmpty#57, sum#58, isEmpty#59, sum#60, isEmpty#61, sum#62, isEmpty#63, sum#64, isEmpty#65, sum#66, isEmpty#67, sum#68, isEmpty#69, sum#70, isEmpty#71, sum#72, isEmpty#73] -Results [55]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#18, sum#74, isEmpty#75, sum#76, isEmpty#77, sum#78, isEmpty#79, sum#80, isEmpty#81, sum#82, isEmpty#83, sum#84, isEmpty#85, sum#86, isEmpty#87, sum#88, isEmpty#89, sum#90, isEmpty#91, sum#92, isEmpty#93, sum#94, isEmpty#95, sum#96, isEmpty#97, sum#98, isEmpty#99, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105, sum#106, isEmpty#107, sum#108, isEmpty#109, sum#110, isEmpty#111, sum#112, isEmpty#113, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119, sum#120, isEmpty#121] +Input [11]: [ws_quantity#4, ws_ext_sales_price#5, ws_net_paid#6, w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#17, d_moy#18] +Keys [7]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#17] +Functions [24]: [partial_sum(CASE WHEN (d_moy#18 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#18 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] +Aggregate Attributes [48]: [sum#23, isEmpty#24, sum#25, isEmpty#26, sum#27, isEmpty#28, sum#29, isEmpty#30, sum#31, isEmpty#32, sum#33, isEmpty#34, sum#35, isEmpty#36, sum#37, isEmpty#38, sum#39, isEmpty#40, sum#41, isEmpty#42, sum#43, isEmpty#44, sum#45, isEmpty#46, sum#47, isEmpty#48, sum#49, isEmpty#50, sum#51, isEmpty#52, sum#53, isEmpty#54, sum#55, isEmpty#56, sum#57, isEmpty#58, sum#59, isEmpty#60, sum#61, isEmpty#62, sum#63, isEmpty#64, sum#65, isEmpty#66, sum#67, isEmpty#68, sum#69, isEmpty#70] +Results [55]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#17, sum#71, isEmpty#72, sum#73, isEmpty#74, sum#75, isEmpty#76, sum#77, isEmpty#78, sum#79, isEmpty#80, sum#81, isEmpty#82, sum#83, isEmpty#84, sum#85, isEmpty#86, sum#87, isEmpty#88, sum#89, isEmpty#90, sum#91, isEmpty#92, sum#93, isEmpty#94, sum#95, isEmpty#96, sum#97, isEmpty#98, sum#99, isEmpty#100, sum#101, isEmpty#102, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108, sum#109, isEmpty#110, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116, sum#117, isEmpty#118] (28) Exchange -Input [55]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#18, sum#74, isEmpty#75, sum#76, isEmpty#77, sum#78, isEmpty#79, sum#80, isEmpty#81, sum#82, isEmpty#83, sum#84, isEmpty#85, sum#86, isEmpty#87, sum#88, isEmpty#89, sum#90, isEmpty#91, sum#92, isEmpty#93, sum#94, isEmpty#95, sum#96, isEmpty#97, sum#98, isEmpty#99, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105, sum#106, isEmpty#107, sum#108, isEmpty#109, sum#110, isEmpty#111, sum#112, isEmpty#113, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119, sum#120, isEmpty#121] -Arguments: hashpartitioning(w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#18, 5), ENSURE_REQUIREMENTS, [id=#122] +Input [55]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#17, sum#71, isEmpty#72, sum#73, isEmpty#74, sum#75, isEmpty#76, sum#77, isEmpty#78, sum#79, isEmpty#80, sum#81, isEmpty#82, sum#83, isEmpty#84, sum#85, isEmpty#86, sum#87, isEmpty#88, sum#89, isEmpty#90, sum#91, isEmpty#92, sum#93, isEmpty#94, sum#95, isEmpty#96, sum#97, isEmpty#98, sum#99, isEmpty#100, sum#101, isEmpty#102, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108, sum#109, isEmpty#110, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116, sum#117, isEmpty#118] +Arguments: hashpartitioning(w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#17, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 6] -Input [55]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#18, sum#74, isEmpty#75, sum#76, isEmpty#77, sum#78, isEmpty#79, sum#80, isEmpty#81, sum#82, isEmpty#83, sum#84, isEmpty#85, sum#86, isEmpty#87, sum#88, isEmpty#89, sum#90, isEmpty#91, sum#92, isEmpty#93, sum#94, isEmpty#95, sum#96, isEmpty#97, sum#98, isEmpty#99, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105, sum#106, isEmpty#107, sum#108, isEmpty#109, sum#110, isEmpty#111, sum#112, isEmpty#113, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119, sum#120, isEmpty#121] -Keys [7]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#18] -Functions [24]: [sum(CASE WHEN (d_moy#19 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#19 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] -Aggregate Attributes [24]: [sum(CASE WHEN (d_moy#19 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#123, sum(CASE WHEN (d_moy#19 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#124, sum(CASE WHEN (d_moy#19 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#125, sum(CASE WHEN (d_moy#19 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#126, sum(CASE WHEN (d_moy#19 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#127, sum(CASE WHEN (d_moy#19 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#128, sum(CASE WHEN (d_moy#19 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#129, sum(CASE WHEN (d_moy#19 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#130, sum(CASE WHEN (d_moy#19 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#131, sum(CASE WHEN (d_moy#19 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#132, sum(CASE WHEN (d_moy#19 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#133, sum(CASE WHEN (d_moy#19 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#134, sum(CASE WHEN (d_moy#19 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#135, sum(CASE WHEN (d_moy#19 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#136, sum(CASE WHEN (d_moy#19 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#137, sum(CASE WHEN (d_moy#19 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#138, sum(CASE WHEN (d_moy#19 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#139, sum(CASE WHEN (d_moy#19 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#140, sum(CASE WHEN (d_moy#19 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#141, sum(CASE WHEN (d_moy#19 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#142, sum(CASE WHEN (d_moy#19 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#143, sum(CASE WHEN (d_moy#19 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#144, sum(CASE WHEN (d_moy#19 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#145, sum(CASE WHEN (d_moy#19 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#146] -Results [32]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, DHL,BARIAN AS ship_carriers#147, d_year#18 AS year#148, sum(CASE WHEN (d_moy#19 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#123 AS jan_sales#149, sum(CASE WHEN (d_moy#19 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#124 AS feb_sales#150, sum(CASE WHEN (d_moy#19 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#125 AS mar_sales#151, sum(CASE WHEN (d_moy#19 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#126 AS apr_sales#152, sum(CASE WHEN (d_moy#19 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#127 AS may_sales#153, sum(CASE WHEN (d_moy#19 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#128 AS jun_sales#154, sum(CASE WHEN (d_moy#19 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#129 AS jul_sales#155, sum(CASE WHEN (d_moy#19 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#130 AS aug_sales#156, sum(CASE WHEN (d_moy#19 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#131 AS sep_sales#157, sum(CASE WHEN (d_moy#19 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#132 AS oct_sales#158, sum(CASE WHEN (d_moy#19 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#133 AS nov_sales#159, sum(CASE WHEN (d_moy#19 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#134 AS dec_sales#160, sum(CASE WHEN (d_moy#19 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#135 AS jan_net#161, sum(CASE WHEN (d_moy#19 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#136 AS feb_net#162, sum(CASE WHEN (d_moy#19 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#137 AS mar_net#163, sum(CASE WHEN (d_moy#19 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#138 AS apr_net#164, sum(CASE WHEN (d_moy#19 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#139 AS may_net#165, sum(CASE WHEN (d_moy#19 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#140 AS jun_net#166, sum(CASE WHEN (d_moy#19 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#141 AS jul_net#167, sum(CASE WHEN (d_moy#19 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#142 AS aug_net#168, sum(CASE WHEN (d_moy#19 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#143 AS sep_net#169, sum(CASE WHEN (d_moy#19 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#144 AS oct_net#170, sum(CASE WHEN (d_moy#19 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#145 AS nov_net#171, sum(CASE WHEN (d_moy#19 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#146 AS dec_net#172] +Input [55]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#17, sum#71, isEmpty#72, sum#73, isEmpty#74, sum#75, isEmpty#76, sum#77, isEmpty#78, sum#79, isEmpty#80, sum#81, isEmpty#82, sum#83, isEmpty#84, sum#85, isEmpty#86, sum#87, isEmpty#88, sum#89, isEmpty#90, sum#91, isEmpty#92, sum#93, isEmpty#94, sum#95, isEmpty#96, sum#97, isEmpty#98, sum#99, isEmpty#100, sum#101, isEmpty#102, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108, sum#109, isEmpty#110, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116, sum#117, isEmpty#118] +Keys [7]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, d_year#17] +Functions [24]: [sum(CASE WHEN (d_moy#18 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#18 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] +Aggregate Attributes [24]: [sum(CASE WHEN (d_moy#18 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#119, sum(CASE WHEN (d_moy#18 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#120, sum(CASE WHEN (d_moy#18 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#121, sum(CASE WHEN (d_moy#18 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#122, sum(CASE WHEN (d_moy#18 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#123, sum(CASE WHEN (d_moy#18 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#124, sum(CASE WHEN (d_moy#18 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#125, sum(CASE WHEN (d_moy#18 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#126, sum(CASE WHEN (d_moy#18 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#127, sum(CASE WHEN (d_moy#18 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#128, sum(CASE WHEN (d_moy#18 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#129, sum(CASE WHEN (d_moy#18 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#130, sum(CASE WHEN (d_moy#18 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#131, sum(CASE WHEN (d_moy#18 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#132, sum(CASE WHEN (d_moy#18 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#133, sum(CASE WHEN (d_moy#18 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#134, sum(CASE WHEN (d_moy#18 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#135, sum(CASE WHEN (d_moy#18 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#136, sum(CASE WHEN (d_moy#18 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#137, sum(CASE WHEN (d_moy#18 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#138, sum(CASE WHEN (d_moy#18 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#139, sum(CASE WHEN (d_moy#18 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#140, sum(CASE WHEN (d_moy#18 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#141, sum(CASE WHEN (d_moy#18 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#142] +Results [32]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, DHL,BARIAN AS ship_carriers#143, d_year#17 AS year#144, sum(CASE WHEN (d_moy#18 = 1) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#119 AS jan_sales#145, sum(CASE WHEN (d_moy#18 = 2) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#120 AS feb_sales#146, sum(CASE WHEN (d_moy#18 = 3) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#121 AS mar_sales#147, sum(CASE WHEN (d_moy#18 = 4) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#122 AS apr_sales#148, sum(CASE WHEN (d_moy#18 = 5) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#123 AS may_sales#149, sum(CASE WHEN (d_moy#18 = 6) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#124 AS jun_sales#150, sum(CASE WHEN (d_moy#18 = 7) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#125 AS jul_sales#151, sum(CASE WHEN (d_moy#18 = 8) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#126 AS aug_sales#152, sum(CASE WHEN (d_moy#18 = 9) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#127 AS sep_sales#153, sum(CASE WHEN (d_moy#18 = 10) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#128 AS oct_sales#154, sum(CASE WHEN (d_moy#18 = 11) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#129 AS nov_sales#155, sum(CASE WHEN (d_moy#18 = 12) THEN CheckOverflow((promote_precision(cast(ws_ext_sales_price#5 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#130 AS dec_sales#156, sum(CASE WHEN (d_moy#18 = 1) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#131 AS jan_net#157, sum(CASE WHEN (d_moy#18 = 2) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#132 AS feb_net#158, sum(CASE WHEN (d_moy#18 = 3) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#133 AS mar_net#159, sum(CASE WHEN (d_moy#18 = 4) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#134 AS apr_net#160, sum(CASE WHEN (d_moy#18 = 5) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#135 AS may_net#161, sum(CASE WHEN (d_moy#18 = 6) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#136 AS jun_net#162, sum(CASE WHEN (d_moy#18 = 7) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#137 AS jul_net#163, sum(CASE WHEN (d_moy#18 = 8) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#138 AS aug_net#164, sum(CASE WHEN (d_moy#18 = 9) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#139 AS sep_net#165, sum(CASE WHEN (d_moy#18 = 10) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#140 AS oct_net#166, sum(CASE WHEN (d_moy#18 = 11) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#141 AS nov_net#167, sum(CASE WHEN (d_moy#18 = 12) THEN CheckOverflow((promote_precision(cast(ws_net_paid#6 as decimal(12,2))) * promote_precision(cast(ws_quantity#4 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#142 AS dec_net#168] (30) Scan parquet default.catalog_sales -Output [7]: [cs_sold_time_sk#173, cs_ship_mode_sk#174, cs_warehouse_sk#175, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, cs_sold_date_sk#179] +Output [7]: [cs_sold_time_sk#169, cs_ship_mode_sk#170, cs_warehouse_sk#171, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, cs_sold_date_sk#175] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#179), dynamicpruningexpression(cs_sold_date_sk#179 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(cs_sold_date_sk#175), dynamicpruningexpression(cs_sold_date_sk#175 IN dynamicpruning#8)] PushedFilters: [IsNotNull(cs_warehouse_sk), IsNotNull(cs_sold_time_sk), IsNotNull(cs_ship_mode_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 11] -Input [7]: [cs_sold_time_sk#173, cs_ship_mode_sk#174, cs_warehouse_sk#175, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, cs_sold_date_sk#179] +Input [7]: [cs_sold_time_sk#169, cs_ship_mode_sk#170, cs_warehouse_sk#171, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, cs_sold_date_sk#175] (32) Filter [codegen id : 11] -Input [7]: [cs_sold_time_sk#173, cs_ship_mode_sk#174, cs_warehouse_sk#175, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, cs_sold_date_sk#179] -Condition : ((isnotnull(cs_warehouse_sk#175) AND isnotnull(cs_sold_time_sk#173)) AND isnotnull(cs_ship_mode_sk#174)) +Input [7]: [cs_sold_time_sk#169, cs_ship_mode_sk#170, cs_warehouse_sk#171, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, cs_sold_date_sk#175] +Condition : ((isnotnull(cs_warehouse_sk#171) AND isnotnull(cs_sold_time_sk#169)) AND isnotnull(cs_ship_mode_sk#170)) (33) ReusedExchange [Reuses operator id: 7] -Output [7]: [w_warehouse_sk#180, w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186] +Output [7]: [w_warehouse_sk#176, w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182] (34) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_warehouse_sk#175] -Right keys [1]: [w_warehouse_sk#180] +Left keys [1]: [cs_warehouse_sk#171] +Right keys [1]: [w_warehouse_sk#176] Join condition: None (35) Project [codegen id : 11] -Output [12]: [cs_sold_time_sk#173, cs_ship_mode_sk#174, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, cs_sold_date_sk#179, w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186] -Input [14]: [cs_sold_time_sk#173, cs_ship_mode_sk#174, cs_warehouse_sk#175, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, cs_sold_date_sk#179, w_warehouse_sk#180, w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186] +Output [12]: [cs_sold_time_sk#169, cs_ship_mode_sk#170, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, cs_sold_date_sk#175, w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182] +Input [14]: [cs_sold_time_sk#169, cs_ship_mode_sk#170, cs_warehouse_sk#171, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, cs_sold_date_sk#175, w_warehouse_sk#176, w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182] (36) ReusedExchange [Reuses operator id: 56] -Output [3]: [d_date_sk#187, d_year#188, d_moy#189] +Output [3]: [d_date_sk#183, d_year#184, d_moy#185] (37) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_sold_date_sk#179] -Right keys [1]: [d_date_sk#187] +Left keys [1]: [cs_sold_date_sk#175] +Right keys [1]: [d_date_sk#183] Join condition: None (38) Project [codegen id : 11] -Output [13]: [cs_sold_time_sk#173, cs_ship_mode_sk#174, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186, d_year#188, d_moy#189] -Input [15]: [cs_sold_time_sk#173, cs_ship_mode_sk#174, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, cs_sold_date_sk#179, w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186, d_date_sk#187, d_year#188, d_moy#189] +Output [13]: [cs_sold_time_sk#169, cs_ship_mode_sk#170, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182, d_year#184, d_moy#185] +Input [15]: [cs_sold_time_sk#169, cs_ship_mode_sk#170, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, cs_sold_date_sk#175, w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182, d_date_sk#183, d_year#184, d_moy#185] (39) ReusedExchange [Reuses operator id: 17] -Output [1]: [t_time_sk#190] +Output [1]: [t_time_sk#186] (40) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_sold_time_sk#173] -Right keys [1]: [t_time_sk#190] +Left keys [1]: [cs_sold_time_sk#169] +Right keys [1]: [t_time_sk#186] Join condition: None (41) Project [codegen id : 11] -Output [12]: [cs_ship_mode_sk#174, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186, d_year#188, d_moy#189] -Input [14]: [cs_sold_time_sk#173, cs_ship_mode_sk#174, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186, d_year#188, d_moy#189, t_time_sk#190] +Output [12]: [cs_ship_mode_sk#170, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182, d_year#184, d_moy#185] +Input [14]: [cs_sold_time_sk#169, cs_ship_mode_sk#170, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182, d_year#184, d_moy#185, t_time_sk#186] (42) ReusedExchange [Reuses operator id: 24] -Output [1]: [sm_ship_mode_sk#191] +Output [1]: [sm_ship_mode_sk#187] (43) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [cs_ship_mode_sk#174] -Right keys [1]: [sm_ship_mode_sk#191] +Left keys [1]: [cs_ship_mode_sk#170] +Right keys [1]: [sm_ship_mode_sk#187] Join condition: None (44) Project [codegen id : 11] -Output [11]: [cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186, d_year#188, d_moy#189] -Input [13]: [cs_ship_mode_sk#174, cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186, d_year#188, d_moy#189, sm_ship_mode_sk#191] +Output [11]: [cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182, d_year#184, d_moy#185] +Input [13]: [cs_ship_mode_sk#170, cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182, d_year#184, d_moy#185, sm_ship_mode_sk#187] (45) HashAggregate [codegen id : 11] -Input [11]: [cs_quantity#176, cs_sales_price#177, cs_net_paid_inc_tax#178, w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186, d_year#188, d_moy#189] -Keys [7]: [w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186, d_year#188] -Functions [24]: [partial_sum(CASE WHEN (d_moy#189 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#189 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] -Aggregate Attributes [48]: [sum#192, isEmpty#193, sum#194, isEmpty#195, sum#196, isEmpty#197, sum#198, isEmpty#199, sum#200, isEmpty#201, sum#202, isEmpty#203, sum#204, isEmpty#205, sum#206, isEmpty#207, sum#208, isEmpty#209, sum#210, isEmpty#211, sum#212, isEmpty#213, sum#214, isEmpty#215, sum#216, isEmpty#217, sum#218, isEmpty#219, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225, sum#226, isEmpty#227, sum#228, isEmpty#229, sum#230, isEmpty#231, sum#232, isEmpty#233, sum#234, isEmpty#235, sum#236, isEmpty#237, sum#238, isEmpty#239] -Results [55]: [w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186, d_year#188, sum#240, isEmpty#241, sum#242, isEmpty#243, sum#244, isEmpty#245, sum#246, isEmpty#247, sum#248, isEmpty#249, sum#250, isEmpty#251, sum#252, isEmpty#253, sum#254, isEmpty#255, sum#256, isEmpty#257, sum#258, isEmpty#259, sum#260, isEmpty#261, sum#262, isEmpty#263, sum#264, isEmpty#265, sum#266, isEmpty#267, sum#268, isEmpty#269, sum#270, isEmpty#271, sum#272, isEmpty#273, sum#274, isEmpty#275, sum#276, isEmpty#277, sum#278, isEmpty#279, sum#280, isEmpty#281, sum#282, isEmpty#283, sum#284, isEmpty#285, sum#286, isEmpty#287] +Input [11]: [cs_quantity#172, cs_sales_price#173, cs_net_paid_inc_tax#174, w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182, d_year#184, d_moy#185] +Keys [7]: [w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182, d_year#184] +Functions [24]: [partial_sum(CASE WHEN (d_moy#185 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), partial_sum(CASE WHEN (d_moy#185 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] +Aggregate Attributes [48]: [sum#188, isEmpty#189, sum#190, isEmpty#191, sum#192, isEmpty#193, sum#194, isEmpty#195, sum#196, isEmpty#197, sum#198, isEmpty#199, sum#200, isEmpty#201, sum#202, isEmpty#203, sum#204, isEmpty#205, sum#206, isEmpty#207, sum#208, isEmpty#209, sum#210, isEmpty#211, sum#212, isEmpty#213, sum#214, isEmpty#215, sum#216, isEmpty#217, sum#218, isEmpty#219, sum#220, isEmpty#221, sum#222, isEmpty#223, sum#224, isEmpty#225, sum#226, isEmpty#227, sum#228, isEmpty#229, sum#230, isEmpty#231, sum#232, isEmpty#233, sum#234, isEmpty#235] +Results [55]: [w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182, d_year#184, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241, sum#242, isEmpty#243, sum#244, isEmpty#245, sum#246, isEmpty#247, sum#248, isEmpty#249, sum#250, isEmpty#251, sum#252, isEmpty#253, sum#254, isEmpty#255, sum#256, isEmpty#257, sum#258, isEmpty#259, sum#260, isEmpty#261, sum#262, isEmpty#263, sum#264, isEmpty#265, sum#266, isEmpty#267, sum#268, isEmpty#269, sum#270, isEmpty#271, sum#272, isEmpty#273, sum#274, isEmpty#275, sum#276, isEmpty#277, sum#278, isEmpty#279, sum#280, isEmpty#281, sum#282, isEmpty#283] (46) Exchange -Input [55]: [w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186, d_year#188, sum#240, isEmpty#241, sum#242, isEmpty#243, sum#244, isEmpty#245, sum#246, isEmpty#247, sum#248, isEmpty#249, sum#250, isEmpty#251, sum#252, isEmpty#253, sum#254, isEmpty#255, sum#256, isEmpty#257, sum#258, isEmpty#259, sum#260, isEmpty#261, sum#262, isEmpty#263, sum#264, isEmpty#265, sum#266, isEmpty#267, sum#268, isEmpty#269, sum#270, isEmpty#271, sum#272, isEmpty#273, sum#274, isEmpty#275, sum#276, isEmpty#277, sum#278, isEmpty#279, sum#280, isEmpty#281, sum#282, isEmpty#283, sum#284, isEmpty#285, sum#286, isEmpty#287] -Arguments: hashpartitioning(w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186, d_year#188, 5), ENSURE_REQUIREMENTS, [id=#288] +Input [55]: [w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182, d_year#184, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241, sum#242, isEmpty#243, sum#244, isEmpty#245, sum#246, isEmpty#247, sum#248, isEmpty#249, sum#250, isEmpty#251, sum#252, isEmpty#253, sum#254, isEmpty#255, sum#256, isEmpty#257, sum#258, isEmpty#259, sum#260, isEmpty#261, sum#262, isEmpty#263, sum#264, isEmpty#265, sum#266, isEmpty#267, sum#268, isEmpty#269, sum#270, isEmpty#271, sum#272, isEmpty#273, sum#274, isEmpty#275, sum#276, isEmpty#277, sum#278, isEmpty#279, sum#280, isEmpty#281, sum#282, isEmpty#283] +Arguments: hashpartitioning(w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182, d_year#184, 5), ENSURE_REQUIREMENTS, [plan_id=5] (47) HashAggregate [codegen id : 12] -Input [55]: [w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186, d_year#188, sum#240, isEmpty#241, sum#242, isEmpty#243, sum#244, isEmpty#245, sum#246, isEmpty#247, sum#248, isEmpty#249, sum#250, isEmpty#251, sum#252, isEmpty#253, sum#254, isEmpty#255, sum#256, isEmpty#257, sum#258, isEmpty#259, sum#260, isEmpty#261, sum#262, isEmpty#263, sum#264, isEmpty#265, sum#266, isEmpty#267, sum#268, isEmpty#269, sum#270, isEmpty#271, sum#272, isEmpty#273, sum#274, isEmpty#275, sum#276, isEmpty#277, sum#278, isEmpty#279, sum#280, isEmpty#281, sum#282, isEmpty#283, sum#284, isEmpty#285, sum#286, isEmpty#287] -Keys [7]: [w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186, d_year#188] -Functions [24]: [sum(CASE WHEN (d_moy#189 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#189 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] -Aggregate Attributes [24]: [sum(CASE WHEN (d_moy#189 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#289, sum(CASE WHEN (d_moy#189 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#290, sum(CASE WHEN (d_moy#189 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#291, sum(CASE WHEN (d_moy#189 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#292, sum(CASE WHEN (d_moy#189 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#293, sum(CASE WHEN (d_moy#189 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#294, sum(CASE WHEN (d_moy#189 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#295, sum(CASE WHEN (d_moy#189 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#296, sum(CASE WHEN (d_moy#189 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#297, sum(CASE WHEN (d_moy#189 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#298, sum(CASE WHEN (d_moy#189 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#299, sum(CASE WHEN (d_moy#189 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#300, sum(CASE WHEN (d_moy#189 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#301, sum(CASE WHEN (d_moy#189 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#302, sum(CASE WHEN (d_moy#189 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#303, sum(CASE WHEN (d_moy#189 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#304, sum(CASE WHEN (d_moy#189 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#305, sum(CASE WHEN (d_moy#189 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#306, sum(CASE WHEN (d_moy#189 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#307, sum(CASE WHEN (d_moy#189 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#308, sum(CASE WHEN (d_moy#189 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#309, sum(CASE WHEN (d_moy#189 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#310, sum(CASE WHEN (d_moy#189 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#311, sum(CASE WHEN (d_moy#189 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#312] -Results [32]: [w_warehouse_name#181, w_warehouse_sq_ft#182, w_city#183, w_county#184, w_state#185, w_country#186, DHL,BARIAN AS ship_carriers#313, d_year#188 AS year#314, sum(CASE WHEN (d_moy#189 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#289 AS jan_sales#315, sum(CASE WHEN (d_moy#189 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#290 AS feb_sales#316, sum(CASE WHEN (d_moy#189 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#291 AS mar_sales#317, sum(CASE WHEN (d_moy#189 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#292 AS apr_sales#318, sum(CASE WHEN (d_moy#189 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#293 AS may_sales#319, sum(CASE WHEN (d_moy#189 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#294 AS jun_sales#320, sum(CASE WHEN (d_moy#189 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#295 AS jul_sales#321, sum(CASE WHEN (d_moy#189 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#296 AS aug_sales#322, sum(CASE WHEN (d_moy#189 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#297 AS sep_sales#323, sum(CASE WHEN (d_moy#189 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#298 AS oct_sales#324, sum(CASE WHEN (d_moy#189 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#299 AS nov_sales#325, sum(CASE WHEN (d_moy#189 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#177 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#300 AS dec_sales#326, sum(CASE WHEN (d_moy#189 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#301 AS jan_net#327, sum(CASE WHEN (d_moy#189 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#302 AS feb_net#328, sum(CASE WHEN (d_moy#189 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#303 AS mar_net#329, sum(CASE WHEN (d_moy#189 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#304 AS apr_net#330, sum(CASE WHEN (d_moy#189 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#305 AS may_net#331, sum(CASE WHEN (d_moy#189 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#306 AS jun_net#332, sum(CASE WHEN (d_moy#189 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#307 AS jul_net#333, sum(CASE WHEN (d_moy#189 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#308 AS aug_net#334, sum(CASE WHEN (d_moy#189 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#309 AS sep_net#335, sum(CASE WHEN (d_moy#189 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#310 AS oct_net#336, sum(CASE WHEN (d_moy#189 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#311 AS nov_net#337, sum(CASE WHEN (d_moy#189 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#178 as decimal(12,2))) * promote_precision(cast(cs_quantity#176 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#312 AS dec_net#338] +Input [55]: [w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182, d_year#184, sum#236, isEmpty#237, sum#238, isEmpty#239, sum#240, isEmpty#241, sum#242, isEmpty#243, sum#244, isEmpty#245, sum#246, isEmpty#247, sum#248, isEmpty#249, sum#250, isEmpty#251, sum#252, isEmpty#253, sum#254, isEmpty#255, sum#256, isEmpty#257, sum#258, isEmpty#259, sum#260, isEmpty#261, sum#262, isEmpty#263, sum#264, isEmpty#265, sum#266, isEmpty#267, sum#268, isEmpty#269, sum#270, isEmpty#271, sum#272, isEmpty#273, sum#274, isEmpty#275, sum#276, isEmpty#277, sum#278, isEmpty#279, sum#280, isEmpty#281, sum#282, isEmpty#283] +Keys [7]: [w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182, d_year#184] +Functions [24]: [sum(CASE WHEN (d_moy#185 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END), sum(CASE WHEN (d_moy#185 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)] +Aggregate Attributes [24]: [sum(CASE WHEN (d_moy#185 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#284, sum(CASE WHEN (d_moy#185 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#285, sum(CASE WHEN (d_moy#185 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#286, sum(CASE WHEN (d_moy#185 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#287, sum(CASE WHEN (d_moy#185 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#288, sum(CASE WHEN (d_moy#185 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#289, sum(CASE WHEN (d_moy#185 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#290, sum(CASE WHEN (d_moy#185 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#291, sum(CASE WHEN (d_moy#185 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#292, sum(CASE WHEN (d_moy#185 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#293, sum(CASE WHEN (d_moy#185 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#294, sum(CASE WHEN (d_moy#185 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#295, sum(CASE WHEN (d_moy#185 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#296, sum(CASE WHEN (d_moy#185 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#297, sum(CASE WHEN (d_moy#185 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#298, sum(CASE WHEN (d_moy#185 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#299, sum(CASE WHEN (d_moy#185 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#300, sum(CASE WHEN (d_moy#185 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#301, sum(CASE WHEN (d_moy#185 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#302, sum(CASE WHEN (d_moy#185 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#303, sum(CASE WHEN (d_moy#185 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#304, sum(CASE WHEN (d_moy#185 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#305, sum(CASE WHEN (d_moy#185 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#306, sum(CASE WHEN (d_moy#185 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#307] +Results [32]: [w_warehouse_name#177, w_warehouse_sq_ft#178, w_city#179, w_county#180, w_state#181, w_country#182, DHL,BARIAN AS ship_carriers#308, d_year#184 AS year#309, sum(CASE WHEN (d_moy#185 = 1) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#284 AS jan_sales#310, sum(CASE WHEN (d_moy#185 = 2) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#285 AS feb_sales#311, sum(CASE WHEN (d_moy#185 = 3) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#286 AS mar_sales#312, sum(CASE WHEN (d_moy#185 = 4) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#287 AS apr_sales#313, sum(CASE WHEN (d_moy#185 = 5) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#288 AS may_sales#314, sum(CASE WHEN (d_moy#185 = 6) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#289 AS jun_sales#315, sum(CASE WHEN (d_moy#185 = 7) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#290 AS jul_sales#316, sum(CASE WHEN (d_moy#185 = 8) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#291 AS aug_sales#317, sum(CASE WHEN (d_moy#185 = 9) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#292 AS sep_sales#318, sum(CASE WHEN (d_moy#185 = 10) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#293 AS oct_sales#319, sum(CASE WHEN (d_moy#185 = 11) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#294 AS nov_sales#320, sum(CASE WHEN (d_moy#185 = 12) THEN CheckOverflow((promote_precision(cast(cs_sales_price#173 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#295 AS dec_sales#321, sum(CASE WHEN (d_moy#185 = 1) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#296 AS jan_net#322, sum(CASE WHEN (d_moy#185 = 2) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#297 AS feb_net#323, sum(CASE WHEN (d_moy#185 = 3) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#298 AS mar_net#324, sum(CASE WHEN (d_moy#185 = 4) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#299 AS apr_net#325, sum(CASE WHEN (d_moy#185 = 5) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#300 AS may_net#326, sum(CASE WHEN (d_moy#185 = 6) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#301 AS jun_net#327, sum(CASE WHEN (d_moy#185 = 7) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#302 AS jul_net#328, sum(CASE WHEN (d_moy#185 = 8) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#303 AS aug_net#329, sum(CASE WHEN (d_moy#185 = 9) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#304 AS sep_net#330, sum(CASE WHEN (d_moy#185 = 10) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#305 AS oct_net#331, sum(CASE WHEN (d_moy#185 = 11) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#306 AS nov_net#332, sum(CASE WHEN (d_moy#185 = 12) THEN CheckOverflow((promote_precision(cast(cs_net_paid_inc_tax#174 as decimal(12,2))) * promote_precision(cast(cs_quantity#172 as decimal(12,2)))), DecimalType(18,2)) ELSE 0.00 END)#307 AS dec_net#333] (48) Union (49) HashAggregate [codegen id : 13] -Input [32]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#147, year#148, jan_sales#149, feb_sales#150, mar_sales#151, apr_sales#152, may_sales#153, jun_sales#154, jul_sales#155, aug_sales#156, sep_sales#157, oct_sales#158, nov_sales#159, dec_sales#160, jan_net#161, feb_net#162, mar_net#163, apr_net#164, may_net#165, jun_net#166, jul_net#167, aug_net#168, sep_net#169, oct_net#170, nov_net#171, dec_net#172] -Keys [8]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#147, year#148] -Functions [36]: [partial_sum(jan_sales#149), partial_sum(feb_sales#150), partial_sum(mar_sales#151), partial_sum(apr_sales#152), partial_sum(may_sales#153), partial_sum(jun_sales#154), partial_sum(jul_sales#155), partial_sum(aug_sales#156), partial_sum(sep_sales#157), partial_sum(oct_sales#158), partial_sum(nov_sales#159), partial_sum(dec_sales#160), partial_sum(CheckOverflow((promote_precision(jan_sales#149) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(feb_sales#150) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(mar_sales#151) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(apr_sales#152) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(may_sales#153) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(jun_sales#154) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(jul_sales#155) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(aug_sales#156) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(sep_sales#157) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(oct_sales#158) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(nov_sales#159) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(dec_sales#160) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(jan_net#161), partial_sum(feb_net#162), partial_sum(mar_net#163), partial_sum(apr_net#164), partial_sum(may_net#165), partial_sum(jun_net#166), partial_sum(jul_net#167), partial_sum(aug_net#168), partial_sum(sep_net#169), partial_sum(oct_net#170), partial_sum(nov_net#171), partial_sum(dec_net#172)] -Aggregate Attributes [72]: [sum#339, isEmpty#340, sum#341, isEmpty#342, sum#343, isEmpty#344, sum#345, isEmpty#346, sum#347, isEmpty#348, sum#349, isEmpty#350, sum#351, isEmpty#352, sum#353, isEmpty#354, sum#355, isEmpty#356, sum#357, isEmpty#358, sum#359, isEmpty#360, sum#361, isEmpty#362, sum#363, isEmpty#364, sum#365, isEmpty#366, sum#367, isEmpty#368, sum#369, isEmpty#370, sum#371, isEmpty#372, sum#373, isEmpty#374, sum#375, isEmpty#376, sum#377, isEmpty#378, sum#379, isEmpty#380, sum#381, isEmpty#382, sum#383, isEmpty#384, sum#385, isEmpty#386, sum#387, isEmpty#388, sum#389, isEmpty#390, sum#391, isEmpty#392, sum#393, isEmpty#394, sum#395, isEmpty#396, sum#397, isEmpty#398, sum#399, isEmpty#400, sum#401, isEmpty#402, sum#403, isEmpty#404, sum#405, isEmpty#406, sum#407, isEmpty#408, sum#409, isEmpty#410] -Results [80]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#147, year#148, sum#411, isEmpty#412, sum#413, isEmpty#414, sum#415, isEmpty#416, sum#417, isEmpty#418, sum#419, isEmpty#420, sum#421, isEmpty#422, sum#423, isEmpty#424, sum#425, isEmpty#426, sum#427, isEmpty#428, sum#429, isEmpty#430, sum#431, isEmpty#432, sum#433, isEmpty#434, sum#435, isEmpty#436, sum#437, isEmpty#438, sum#439, isEmpty#440, sum#441, isEmpty#442, sum#443, isEmpty#444, sum#445, isEmpty#446, sum#447, isEmpty#448, sum#449, isEmpty#450, sum#451, isEmpty#452, sum#453, isEmpty#454, sum#455, isEmpty#456, sum#457, isEmpty#458, sum#459, isEmpty#460, sum#461, isEmpty#462, sum#463, isEmpty#464, sum#465, isEmpty#466, sum#467, isEmpty#468, sum#469, isEmpty#470, sum#471, isEmpty#472, sum#473, isEmpty#474, sum#475, isEmpty#476, sum#477, isEmpty#478, sum#479, isEmpty#480, sum#481, isEmpty#482] +Input [32]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#143, year#144, jan_sales#145, feb_sales#146, mar_sales#147, apr_sales#148, may_sales#149, jun_sales#150, jul_sales#151, aug_sales#152, sep_sales#153, oct_sales#154, nov_sales#155, dec_sales#156, jan_net#157, feb_net#158, mar_net#159, apr_net#160, may_net#161, jun_net#162, jul_net#163, aug_net#164, sep_net#165, oct_net#166, nov_net#167, dec_net#168] +Keys [8]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#143, year#144] +Functions [36]: [partial_sum(jan_sales#145), partial_sum(feb_sales#146), partial_sum(mar_sales#147), partial_sum(apr_sales#148), partial_sum(may_sales#149), partial_sum(jun_sales#150), partial_sum(jul_sales#151), partial_sum(aug_sales#152), partial_sum(sep_sales#153), partial_sum(oct_sales#154), partial_sum(nov_sales#155), partial_sum(dec_sales#156), partial_sum(CheckOverflow((promote_precision(jan_sales#145) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(feb_sales#146) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(mar_sales#147) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(apr_sales#148) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(may_sales#149) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(jun_sales#150) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(jul_sales#151) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(aug_sales#152) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(sep_sales#153) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(oct_sales#154) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(nov_sales#155) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(CheckOverflow((promote_precision(dec_sales#156) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), partial_sum(jan_net#157), partial_sum(feb_net#158), partial_sum(mar_net#159), partial_sum(apr_net#160), partial_sum(may_net#161), partial_sum(jun_net#162), partial_sum(jul_net#163), partial_sum(aug_net#164), partial_sum(sep_net#165), partial_sum(oct_net#166), partial_sum(nov_net#167), partial_sum(dec_net#168)] +Aggregate Attributes [72]: [sum#334, isEmpty#335, sum#336, isEmpty#337, sum#338, isEmpty#339, sum#340, isEmpty#341, sum#342, isEmpty#343, sum#344, isEmpty#345, sum#346, isEmpty#347, sum#348, isEmpty#349, sum#350, isEmpty#351, sum#352, isEmpty#353, sum#354, isEmpty#355, sum#356, isEmpty#357, sum#358, isEmpty#359, sum#360, isEmpty#361, sum#362, isEmpty#363, sum#364, isEmpty#365, sum#366, isEmpty#367, sum#368, isEmpty#369, sum#370, isEmpty#371, sum#372, isEmpty#373, sum#374, isEmpty#375, sum#376, isEmpty#377, sum#378, isEmpty#379, sum#380, isEmpty#381, sum#382, isEmpty#383, sum#384, isEmpty#385, sum#386, isEmpty#387, sum#388, isEmpty#389, sum#390, isEmpty#391, sum#392, isEmpty#393, sum#394, isEmpty#395, sum#396, isEmpty#397, sum#398, isEmpty#399, sum#400, isEmpty#401, sum#402, isEmpty#403, sum#404, isEmpty#405] +Results [80]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#143, year#144, sum#406, isEmpty#407, sum#408, isEmpty#409, sum#410, isEmpty#411, sum#412, isEmpty#413, sum#414, isEmpty#415, sum#416, isEmpty#417, sum#418, isEmpty#419, sum#420, isEmpty#421, sum#422, isEmpty#423, sum#424, isEmpty#425, sum#426, isEmpty#427, sum#428, isEmpty#429, sum#430, isEmpty#431, sum#432, isEmpty#433, sum#434, isEmpty#435, sum#436, isEmpty#437, sum#438, isEmpty#439, sum#440, isEmpty#441, sum#442, isEmpty#443, sum#444, isEmpty#445, sum#446, isEmpty#447, sum#448, isEmpty#449, sum#450, isEmpty#451, sum#452, isEmpty#453, sum#454, isEmpty#455, sum#456, isEmpty#457, sum#458, isEmpty#459, sum#460, isEmpty#461, sum#462, isEmpty#463, sum#464, isEmpty#465, sum#466, isEmpty#467, sum#468, isEmpty#469, sum#470, isEmpty#471, sum#472, isEmpty#473, sum#474, isEmpty#475, sum#476, isEmpty#477] (50) Exchange -Input [80]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#147, year#148, sum#411, isEmpty#412, sum#413, isEmpty#414, sum#415, isEmpty#416, sum#417, isEmpty#418, sum#419, isEmpty#420, sum#421, isEmpty#422, sum#423, isEmpty#424, sum#425, isEmpty#426, sum#427, isEmpty#428, sum#429, isEmpty#430, sum#431, isEmpty#432, sum#433, isEmpty#434, sum#435, isEmpty#436, sum#437, isEmpty#438, sum#439, isEmpty#440, sum#441, isEmpty#442, sum#443, isEmpty#444, sum#445, isEmpty#446, sum#447, isEmpty#448, sum#449, isEmpty#450, sum#451, isEmpty#452, sum#453, isEmpty#454, sum#455, isEmpty#456, sum#457, isEmpty#458, sum#459, isEmpty#460, sum#461, isEmpty#462, sum#463, isEmpty#464, sum#465, isEmpty#466, sum#467, isEmpty#468, sum#469, isEmpty#470, sum#471, isEmpty#472, sum#473, isEmpty#474, sum#475, isEmpty#476, sum#477, isEmpty#478, sum#479, isEmpty#480, sum#481, isEmpty#482] -Arguments: hashpartitioning(w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#147, year#148, 5), ENSURE_REQUIREMENTS, [id=#483] +Input [80]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#143, year#144, sum#406, isEmpty#407, sum#408, isEmpty#409, sum#410, isEmpty#411, sum#412, isEmpty#413, sum#414, isEmpty#415, sum#416, isEmpty#417, sum#418, isEmpty#419, sum#420, isEmpty#421, sum#422, isEmpty#423, sum#424, isEmpty#425, sum#426, isEmpty#427, sum#428, isEmpty#429, sum#430, isEmpty#431, sum#432, isEmpty#433, sum#434, isEmpty#435, sum#436, isEmpty#437, sum#438, isEmpty#439, sum#440, isEmpty#441, sum#442, isEmpty#443, sum#444, isEmpty#445, sum#446, isEmpty#447, sum#448, isEmpty#449, sum#450, isEmpty#451, sum#452, isEmpty#453, sum#454, isEmpty#455, sum#456, isEmpty#457, sum#458, isEmpty#459, sum#460, isEmpty#461, sum#462, isEmpty#463, sum#464, isEmpty#465, sum#466, isEmpty#467, sum#468, isEmpty#469, sum#470, isEmpty#471, sum#472, isEmpty#473, sum#474, isEmpty#475, sum#476, isEmpty#477] +Arguments: hashpartitioning(w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#143, year#144, 5), ENSURE_REQUIREMENTS, [plan_id=6] (51) HashAggregate [codegen id : 14] -Input [80]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#147, year#148, sum#411, isEmpty#412, sum#413, isEmpty#414, sum#415, isEmpty#416, sum#417, isEmpty#418, sum#419, isEmpty#420, sum#421, isEmpty#422, sum#423, isEmpty#424, sum#425, isEmpty#426, sum#427, isEmpty#428, sum#429, isEmpty#430, sum#431, isEmpty#432, sum#433, isEmpty#434, sum#435, isEmpty#436, sum#437, isEmpty#438, sum#439, isEmpty#440, sum#441, isEmpty#442, sum#443, isEmpty#444, sum#445, isEmpty#446, sum#447, isEmpty#448, sum#449, isEmpty#450, sum#451, isEmpty#452, sum#453, isEmpty#454, sum#455, isEmpty#456, sum#457, isEmpty#458, sum#459, isEmpty#460, sum#461, isEmpty#462, sum#463, isEmpty#464, sum#465, isEmpty#466, sum#467, isEmpty#468, sum#469, isEmpty#470, sum#471, isEmpty#472, sum#473, isEmpty#474, sum#475, isEmpty#476, sum#477, isEmpty#478, sum#479, isEmpty#480, sum#481, isEmpty#482] -Keys [8]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#147, year#148] -Functions [36]: [sum(jan_sales#149), sum(feb_sales#150), sum(mar_sales#151), sum(apr_sales#152), sum(may_sales#153), sum(jun_sales#154), sum(jul_sales#155), sum(aug_sales#156), sum(sep_sales#157), sum(oct_sales#158), sum(nov_sales#159), sum(dec_sales#160), sum(CheckOverflow((promote_precision(jan_sales#149) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(feb_sales#150) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(mar_sales#151) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(apr_sales#152) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(may_sales#153) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(jun_sales#154) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(jul_sales#155) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(aug_sales#156) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(sep_sales#157) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(oct_sales#158) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(nov_sales#159) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(dec_sales#160) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(jan_net#161), sum(feb_net#162), sum(mar_net#163), sum(apr_net#164), sum(may_net#165), sum(jun_net#166), sum(jul_net#167), sum(aug_net#168), sum(sep_net#169), sum(oct_net#170), sum(nov_net#171), sum(dec_net#172)] -Aggregate Attributes [36]: [sum(jan_sales#149)#484, sum(feb_sales#150)#485, sum(mar_sales#151)#486, sum(apr_sales#152)#487, sum(may_sales#153)#488, sum(jun_sales#154)#489, sum(jul_sales#155)#490, sum(aug_sales#156)#491, sum(sep_sales#157)#492, sum(oct_sales#158)#493, sum(nov_sales#159)#494, sum(dec_sales#160)#495, sum(CheckOverflow((promote_precision(jan_sales#149) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#496, sum(CheckOverflow((promote_precision(feb_sales#150) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#497, sum(CheckOverflow((promote_precision(mar_sales#151) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#498, sum(CheckOverflow((promote_precision(apr_sales#152) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#499, sum(CheckOverflow((promote_precision(may_sales#153) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#500, sum(CheckOverflow((promote_precision(jun_sales#154) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#501, sum(CheckOverflow((promote_precision(jul_sales#155) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#502, sum(CheckOverflow((promote_precision(aug_sales#156) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#503, sum(CheckOverflow((promote_precision(sep_sales#157) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#504, sum(CheckOverflow((promote_precision(oct_sales#158) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#505, sum(CheckOverflow((promote_precision(nov_sales#159) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#506, sum(CheckOverflow((promote_precision(dec_sales#160) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#507, sum(jan_net#161)#508, sum(feb_net#162)#509, sum(mar_net#163)#510, sum(apr_net#164)#511, sum(may_net#165)#512, sum(jun_net#166)#513, sum(jul_net#167)#514, sum(aug_net#168)#515, sum(sep_net#169)#516, sum(oct_net#170)#517, sum(nov_net#171)#518, sum(dec_net#172)#519] -Results [44]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#147, year#148, sum(jan_sales#149)#484 AS jan_sales#520, sum(feb_sales#150)#485 AS feb_sales#521, sum(mar_sales#151)#486 AS mar_sales#522, sum(apr_sales#152)#487 AS apr_sales#523, sum(may_sales#153)#488 AS may_sales#524, sum(jun_sales#154)#489 AS jun_sales#525, sum(jul_sales#155)#490 AS jul_sales#526, sum(aug_sales#156)#491 AS aug_sales#527, sum(sep_sales#157)#492 AS sep_sales#528, sum(oct_sales#158)#493 AS oct_sales#529, sum(nov_sales#159)#494 AS nov_sales#530, sum(dec_sales#160)#495 AS dec_sales#531, sum(CheckOverflow((promote_precision(jan_sales#149) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#496 AS jan_sales_per_sq_foot#532, sum(CheckOverflow((promote_precision(feb_sales#150) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#497 AS feb_sales_per_sq_foot#533, sum(CheckOverflow((promote_precision(mar_sales#151) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#498 AS mar_sales_per_sq_foot#534, sum(CheckOverflow((promote_precision(apr_sales#152) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#499 AS apr_sales_per_sq_foot#535, sum(CheckOverflow((promote_precision(may_sales#153) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#500 AS may_sales_per_sq_foot#536, sum(CheckOverflow((promote_precision(jun_sales#154) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#501 AS jun_sales_per_sq_foot#537, sum(CheckOverflow((promote_precision(jul_sales#155) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#502 AS jul_sales_per_sq_foot#538, sum(CheckOverflow((promote_precision(aug_sales#156) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#503 AS aug_sales_per_sq_foot#539, sum(CheckOverflow((promote_precision(sep_sales#157) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#504 AS sep_sales_per_sq_foot#540, sum(CheckOverflow((promote_precision(oct_sales#158) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#505 AS oct_sales_per_sq_foot#541, sum(CheckOverflow((promote_precision(nov_sales#159) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#506 AS nov_sales_per_sq_foot#542, sum(CheckOverflow((promote_precision(dec_sales#160) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#507 AS dec_sales_per_sq_foot#543, sum(jan_net#161)#508 AS jan_net#544, sum(feb_net#162)#509 AS feb_net#545, sum(mar_net#163)#510 AS mar_net#546, sum(apr_net#164)#511 AS apr_net#547, sum(may_net#165)#512 AS may_net#548, sum(jun_net#166)#513 AS jun_net#549, sum(jul_net#167)#514 AS jul_net#550, sum(aug_net#168)#515 AS aug_net#551, sum(sep_net#169)#516 AS sep_net#552, sum(oct_net#170)#517 AS oct_net#553, sum(nov_net#171)#518 AS nov_net#554, sum(dec_net#172)#519 AS dec_net#555] +Input [80]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#143, year#144, sum#406, isEmpty#407, sum#408, isEmpty#409, sum#410, isEmpty#411, sum#412, isEmpty#413, sum#414, isEmpty#415, sum#416, isEmpty#417, sum#418, isEmpty#419, sum#420, isEmpty#421, sum#422, isEmpty#423, sum#424, isEmpty#425, sum#426, isEmpty#427, sum#428, isEmpty#429, sum#430, isEmpty#431, sum#432, isEmpty#433, sum#434, isEmpty#435, sum#436, isEmpty#437, sum#438, isEmpty#439, sum#440, isEmpty#441, sum#442, isEmpty#443, sum#444, isEmpty#445, sum#446, isEmpty#447, sum#448, isEmpty#449, sum#450, isEmpty#451, sum#452, isEmpty#453, sum#454, isEmpty#455, sum#456, isEmpty#457, sum#458, isEmpty#459, sum#460, isEmpty#461, sum#462, isEmpty#463, sum#464, isEmpty#465, sum#466, isEmpty#467, sum#468, isEmpty#469, sum#470, isEmpty#471, sum#472, isEmpty#473, sum#474, isEmpty#475, sum#476, isEmpty#477] +Keys [8]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#143, year#144] +Functions [36]: [sum(jan_sales#145), sum(feb_sales#146), sum(mar_sales#147), sum(apr_sales#148), sum(may_sales#149), sum(jun_sales#150), sum(jul_sales#151), sum(aug_sales#152), sum(sep_sales#153), sum(oct_sales#154), sum(nov_sales#155), sum(dec_sales#156), sum(CheckOverflow((promote_precision(jan_sales#145) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(feb_sales#146) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(mar_sales#147) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(apr_sales#148) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(may_sales#149) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(jun_sales#150) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(jul_sales#151) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(aug_sales#152) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(sep_sales#153) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(oct_sales#154) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(nov_sales#155) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(CheckOverflow((promote_precision(dec_sales#156) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12))), sum(jan_net#157), sum(feb_net#158), sum(mar_net#159), sum(apr_net#160), sum(may_net#161), sum(jun_net#162), sum(jul_net#163), sum(aug_net#164), sum(sep_net#165), sum(oct_net#166), sum(nov_net#167), sum(dec_net#168)] +Aggregate Attributes [36]: [sum(jan_sales#145)#478, sum(feb_sales#146)#479, sum(mar_sales#147)#480, sum(apr_sales#148)#481, sum(may_sales#149)#482, sum(jun_sales#150)#483, sum(jul_sales#151)#484, sum(aug_sales#152)#485, sum(sep_sales#153)#486, sum(oct_sales#154)#487, sum(nov_sales#155)#488, sum(dec_sales#156)#489, sum(CheckOverflow((promote_precision(jan_sales#145) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#490, sum(CheckOverflow((promote_precision(feb_sales#146) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#491, sum(CheckOverflow((promote_precision(mar_sales#147) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#492, sum(CheckOverflow((promote_precision(apr_sales#148) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#493, sum(CheckOverflow((promote_precision(may_sales#149) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#494, sum(CheckOverflow((promote_precision(jun_sales#150) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#495, sum(CheckOverflow((promote_precision(jul_sales#151) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#496, sum(CheckOverflow((promote_precision(aug_sales#152) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#497, sum(CheckOverflow((promote_precision(sep_sales#153) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#498, sum(CheckOverflow((promote_precision(oct_sales#154) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#499, sum(CheckOverflow((promote_precision(nov_sales#155) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#500, sum(CheckOverflow((promote_precision(dec_sales#156) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#501, sum(jan_net#157)#502, sum(feb_net#158)#503, sum(mar_net#159)#504, sum(apr_net#160)#505, sum(may_net#161)#506, sum(jun_net#162)#507, sum(jul_net#163)#508, sum(aug_net#164)#509, sum(sep_net#165)#510, sum(oct_net#166)#511, sum(nov_net#167)#512, sum(dec_net#168)#513] +Results [44]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#143, year#144, sum(jan_sales#145)#478 AS jan_sales#514, sum(feb_sales#146)#479 AS feb_sales#515, sum(mar_sales#147)#480 AS mar_sales#516, sum(apr_sales#148)#481 AS apr_sales#517, sum(may_sales#149)#482 AS may_sales#518, sum(jun_sales#150)#483 AS jun_sales#519, sum(jul_sales#151)#484 AS jul_sales#520, sum(aug_sales#152)#485 AS aug_sales#521, sum(sep_sales#153)#486 AS sep_sales#522, sum(oct_sales#154)#487 AS oct_sales#523, sum(nov_sales#155)#488 AS nov_sales#524, sum(dec_sales#156)#489 AS dec_sales#525, sum(CheckOverflow((promote_precision(jan_sales#145) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#490 AS jan_sales_per_sq_foot#526, sum(CheckOverflow((promote_precision(feb_sales#146) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#491 AS feb_sales_per_sq_foot#527, sum(CheckOverflow((promote_precision(mar_sales#147) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#492 AS mar_sales_per_sq_foot#528, sum(CheckOverflow((promote_precision(apr_sales#148) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#493 AS apr_sales_per_sq_foot#529, sum(CheckOverflow((promote_precision(may_sales#149) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#494 AS may_sales_per_sq_foot#530, sum(CheckOverflow((promote_precision(jun_sales#150) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#495 AS jun_sales_per_sq_foot#531, sum(CheckOverflow((promote_precision(jul_sales#151) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#496 AS jul_sales_per_sq_foot#532, sum(CheckOverflow((promote_precision(aug_sales#152) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#497 AS aug_sales_per_sq_foot#533, sum(CheckOverflow((promote_precision(sep_sales#153) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#498 AS sep_sales_per_sq_foot#534, sum(CheckOverflow((promote_precision(oct_sales#154) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#499 AS oct_sales_per_sq_foot#535, sum(CheckOverflow((promote_precision(nov_sales#155) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#500 AS nov_sales_per_sq_foot#536, sum(CheckOverflow((promote_precision(dec_sales#156) / promote_precision(cast(w_warehouse_sq_ft#11 as decimal(28,2)))), DecimalType(38,12)))#501 AS dec_sales_per_sq_foot#537, sum(jan_net#157)#502 AS jan_net#538, sum(feb_net#158)#503 AS feb_net#539, sum(mar_net#159)#504 AS mar_net#540, sum(apr_net#160)#505 AS apr_net#541, sum(may_net#161)#506 AS may_net#542, sum(jun_net#162)#507 AS jun_net#543, sum(jul_net#163)#508 AS jul_net#544, sum(aug_net#164)#509 AS aug_net#545, sum(sep_net#165)#510 AS sep_net#546, sum(oct_net#166)#511 AS oct_net#547, sum(nov_net#167)#512 AS nov_net#548, sum(dec_net#168)#513 AS dec_net#549] (52) TakeOrderedAndProject -Input [44]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#147, year#148, jan_sales#520, feb_sales#521, mar_sales#522, apr_sales#523, may_sales#524, jun_sales#525, jul_sales#526, aug_sales#527, sep_sales#528, oct_sales#529, nov_sales#530, dec_sales#531, jan_sales_per_sq_foot#532, feb_sales_per_sq_foot#533, mar_sales_per_sq_foot#534, apr_sales_per_sq_foot#535, may_sales_per_sq_foot#536, jun_sales_per_sq_foot#537, jul_sales_per_sq_foot#538, aug_sales_per_sq_foot#539, sep_sales_per_sq_foot#540, oct_sales_per_sq_foot#541, nov_sales_per_sq_foot#542, dec_sales_per_sq_foot#543, jan_net#544, feb_net#545, mar_net#546, apr_net#547, may_net#548, jun_net#549, jul_net#550, aug_net#551, sep_net#552, oct_net#553, nov_net#554, dec_net#555] -Arguments: 100, [w_warehouse_name#10 ASC NULLS FIRST], [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#147, year#148, jan_sales#520, feb_sales#521, mar_sales#522, apr_sales#523, may_sales#524, jun_sales#525, jul_sales#526, aug_sales#527, sep_sales#528, oct_sales#529, nov_sales#530, dec_sales#531, jan_sales_per_sq_foot#532, feb_sales_per_sq_foot#533, mar_sales_per_sq_foot#534, apr_sales_per_sq_foot#535, may_sales_per_sq_foot#536, jun_sales_per_sq_foot#537, jul_sales_per_sq_foot#538, aug_sales_per_sq_foot#539, sep_sales_per_sq_foot#540, oct_sales_per_sq_foot#541, nov_sales_per_sq_foot#542, dec_sales_per_sq_foot#543, jan_net#544, feb_net#545, mar_net#546, apr_net#547, may_net#548, jun_net#549, jul_net#550, aug_net#551, sep_net#552, oct_net#553, nov_net#554, dec_net#555] +Input [44]: [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#143, year#144, jan_sales#514, feb_sales#515, mar_sales#516, apr_sales#517, may_sales#518, jun_sales#519, jul_sales#520, aug_sales#521, sep_sales#522, oct_sales#523, nov_sales#524, dec_sales#525, jan_sales_per_sq_foot#526, feb_sales_per_sq_foot#527, mar_sales_per_sq_foot#528, apr_sales_per_sq_foot#529, may_sales_per_sq_foot#530, jun_sales_per_sq_foot#531, jul_sales_per_sq_foot#532, aug_sales_per_sq_foot#533, sep_sales_per_sq_foot#534, oct_sales_per_sq_foot#535, nov_sales_per_sq_foot#536, dec_sales_per_sq_foot#537, jan_net#538, feb_net#539, mar_net#540, apr_net#541, may_net#542, jun_net#543, jul_net#544, aug_net#545, sep_net#546, oct_net#547, nov_net#548, dec_net#549] +Arguments: 100, [w_warehouse_name#10 ASC NULLS FIRST], [w_warehouse_name#10, w_warehouse_sq_ft#11, w_city#12, w_county#13, w_state#14, w_country#15, ship_carriers#143, year#144, jan_sales#514, feb_sales#515, mar_sales#516, apr_sales#517, may_sales#518, jun_sales#519, jul_sales#520, aug_sales#521, sep_sales#522, oct_sales#523, nov_sales#524, dec_sales#525, jan_sales_per_sq_foot#526, feb_sales_per_sq_foot#527, mar_sales_per_sq_foot#528, apr_sales_per_sq_foot#529, may_sales_per_sq_foot#530, jun_sales_per_sq_foot#531, jul_sales_per_sq_foot#532, aug_sales_per_sq_foot#533, sep_sales_per_sq_foot#534, oct_sales_per_sq_foot#535, nov_sales_per_sq_foot#536, dec_sales_per_sq_foot#537, jan_net#538, feb_net#539, mar_net#540, apr_net#541, may_net#542, jun_net#543, jul_net#544, aug_net#545, sep_net#546, oct_net#547, nov_net#548, dec_net#549] ===== Subqueries ===== @@ -302,23 +302,23 @@ BroadcastExchange (56) (53) Scan parquet default.date_dim -Output [3]: [d_date_sk#17, d_year#18, d_moy#19] +Output [3]: [d_date_sk#16, d_year#17, d_moy#18] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (54) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#17, d_year#18, d_moy#19] +Input [3]: [d_date_sk#16, d_year#17, d_moy#18] (55) Filter [codegen id : 1] -Input [3]: [d_date_sk#17, d_year#18, d_moy#19] -Condition : ((isnotnull(d_year#18) AND (d_year#18 = 2001)) AND isnotnull(d_date_sk#17)) +Input [3]: [d_date_sk#16, d_year#17, d_moy#18] +Condition : ((isnotnull(d_year#17) AND (d_year#17 = 2001)) AND isnotnull(d_date_sk#16)) (56) BroadcastExchange -Input [3]: [d_date_sk#17, d_year#18, d_moy#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#556] +Input [3]: [d_date_sk#16, d_year#17, d_moy#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] -Subquery:2 Hosting operator id = 30 Hosting Expression = cs_sold_date_sk#179 IN dynamicpruning#8 +Subquery:2 Hosting operator id = 30 Hosting Expression = cs_sold_date_sk#175 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q67.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q67.sf100/explain.txt index 5a6c73dbe6a98..e9b22c379e57d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q67.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q67.sf100/explain.txt @@ -74,7 +74,7 @@ Condition : isnotnull(s_store_sk#11) (10) BroadcastExchange Input [2]: [s_store_sk#11, s_store_id#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_store_sk#2] @@ -87,84 +87,84 @@ Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_quantity#3, ss_sales_price#4, d_year (13) Exchange Input [7]: [ss_item_sk#1, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#14] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) Sort [codegen id : 4] Input [7]: [ss_item_sk#1, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (15) Scan parquet default.item -Output [5]: [i_item_sk#15, i_brand#16, i_class#17, i_category#18, i_product_name#19] +Output [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [5]: [i_item_sk#15, i_brand#16, i_class#17, i_category#18, i_product_name#19] +Input [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] (17) Filter [codegen id : 5] -Input [5]: [i_item_sk#15, i_brand#16, i_class#17, i_category#18, i_product_name#19] -Condition : isnotnull(i_item_sk#15) +Input [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] +Condition : isnotnull(i_item_sk#13) (18) Exchange -Input [5]: [i_item_sk#15, i_brand#16, i_class#17, i_category#18, i_product_name#19] -Arguments: hashpartitioning(i_item_sk#15, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] +Arguments: hashpartitioning(i_item_sk#13, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 6] -Input [5]: [i_item_sk#15, i_brand#16, i_class#17, i_category#18, i_product_name#19] -Arguments: [i_item_sk#15 ASC NULLS FIRST], false, 0 +Input [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] +Arguments: [i_item_sk#13 ASC NULLS FIRST], false, 0 (20) SortMergeJoin [codegen id : 7] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#15] +Right keys [1]: [i_item_sk#13] Join condition: None (21) Project [codegen id : 7] -Output [10]: [ss_quantity#3, ss_sales_price#4, i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] -Input [12]: [ss_item_sk#1, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_item_sk#15, i_brand#16, i_class#17, i_category#18, i_product_name#19] +Output [10]: [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [12]: [ss_item_sk#1, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] (22) Expand [codegen id : 7] -Input [10]: [ss_quantity#3, ss_sales_price#4, i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] -Arguments: [[ss_quantity#3, ss_sales_price#4, i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, 0], [ss_quantity#3, ss_sales_price#4, i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, null, 1], [ss_quantity#3, ss_sales_price#4, i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, null, null, 3], [ss_quantity#3, ss_sales_price#4, i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, null, null, null, 7], [ss_quantity#3, ss_sales_price#4, i_category#18, i_class#17, i_brand#16, i_product_name#19, null, null, null, null, 15], [ss_quantity#3, ss_sales_price#4, i_category#18, i_class#17, i_brand#16, null, null, null, null, null, 31], [ss_quantity#3, ss_sales_price#4, i_category#18, i_class#17, null, null, null, null, null, null, 63], [ss_quantity#3, ss_sales_price#4, i_category#18, null, null, null, null, null, null, null, 127], [ss_quantity#3, ss_sales_price#4, null, null, null, null, null, null, null, null, 255]], [ss_quantity#3, ss_sales_price#4, i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, spark_grouping_id#29] +Input [10]: [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Arguments: [[ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, 0], [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, null, 1], [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, null, null, 3], [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, null, null, null, 7], [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, i_product_name#17, null, null, null, null, 15], [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, null, null, null, null, null, 31], [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, null, null, null, null, null, null, 63], [ss_quantity#3, ss_sales_price#4, i_category#16, null, null, null, null, null, null, null, 127], [ss_quantity#3, ss_sales_price#4, null, null, null, null, null, null, null, null, 255]], [ss_quantity#3, ss_sales_price#4, i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26] (23) HashAggregate [codegen id : 7] -Input [11]: [ss_quantity#3, ss_sales_price#4, i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, spark_grouping_id#29] -Keys [9]: [i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, spark_grouping_id#29] +Input [11]: [ss_quantity#3, ss_sales_price#4, i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26] +Keys [9]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26] Functions [1]: [partial_sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [2]: [sum#30, isEmpty#31] -Results [11]: [i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, spark_grouping_id#29, sum#32, isEmpty#33] +Aggregate Attributes [2]: [sum#27, isEmpty#28] +Results [11]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26, sum#29, isEmpty#30] (24) Exchange -Input [11]: [i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, spark_grouping_id#29, sum#32, isEmpty#33] -Arguments: hashpartitioning(i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, spark_grouping_id#29, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [11]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26, sum#29, isEmpty#30] +Arguments: hashpartitioning(i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26, 5), ENSURE_REQUIREMENTS, [plan_id=4] (25) HashAggregate [codegen id : 8] -Input [11]: [i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, spark_grouping_id#29, sum#32, isEmpty#33] -Keys [9]: [i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, spark_grouping_id#29] +Input [11]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26, sum#29, isEmpty#30] +Keys [9]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#35] -Results [9]: [i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#35 AS sumsales#36] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#31] +Results [9]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#31 AS sumsales#32] (26) Exchange -Input [9]: [i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, sumsales#36] -Arguments: hashpartitioning(i_category#21, 5), ENSURE_REQUIREMENTS, [id=#37] +Input [9]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, sumsales#32] +Arguments: hashpartitioning(i_category#18, 5), ENSURE_REQUIREMENTS, [plan_id=5] (27) Sort [codegen id : 9] -Input [9]: [i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, sumsales#36] -Arguments: [i_category#21 ASC NULLS FIRST, sumsales#36 DESC NULLS LAST], false, 0 +Input [9]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, sumsales#32] +Arguments: [i_category#18 ASC NULLS FIRST, sumsales#32 DESC NULLS LAST], false, 0 (28) Window -Input [9]: [i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, sumsales#36] -Arguments: [rank(sumsales#36) windowspecdefinition(i_category#21, sumsales#36 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#38], [i_category#21], [sumsales#36 DESC NULLS LAST] +Input [9]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, sumsales#32] +Arguments: [rank(sumsales#32) windowspecdefinition(i_category#18, sumsales#32 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#33], [i_category#18], [sumsales#32 DESC NULLS LAST] (29) Filter [codegen id : 10] -Input [10]: [i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, sumsales#36, rk#38] -Condition : (rk#38 <= 100) +Input [10]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, sumsales#32, rk#33] +Condition : (rk#33 <= 100) (30) TakeOrderedAndProject -Input [10]: [i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, sumsales#36, rk#38] -Arguments: 100, [i_category#21 ASC NULLS FIRST, i_class#22 ASC NULLS FIRST, i_brand#23 ASC NULLS FIRST, i_product_name#24 ASC NULLS FIRST, d_year#25 ASC NULLS FIRST, d_qoy#26 ASC NULLS FIRST, d_moy#27 ASC NULLS FIRST, s_store_id#28 ASC NULLS FIRST, sumsales#36 ASC NULLS FIRST, rk#38 ASC NULLS FIRST], [i_category#21, i_class#22, i_brand#23, i_product_name#24, d_year#25, d_qoy#26, d_moy#27, s_store_id#28, sumsales#36, rk#38] +Input [10]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, sumsales#32, rk#33] +Arguments: 100, [i_category#18 ASC NULLS FIRST, i_class#19 ASC NULLS FIRST, i_brand#20 ASC NULLS FIRST, i_product_name#21 ASC NULLS FIRST, d_year#22 ASC NULLS FIRST, d_qoy#23 ASC NULLS FIRST, d_moy#24 ASC NULLS FIRST, s_store_id#25 ASC NULLS FIRST, sumsales#32 ASC NULLS FIRST, rk#33 ASC NULLS FIRST], [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, sumsales#32, rk#33] ===== Subqueries ===== @@ -177,25 +177,25 @@ BroadcastExchange (35) (31) Scan parquet default.date_dim -Output [5]: [d_date_sk#7, d_month_seq#39, d_year#8, d_moy#9, d_qoy#10] +Output [5]: [d_date_sk#7, d_month_seq#34, d_year#8, d_moy#9, d_qoy#10] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 1] -Input [5]: [d_date_sk#7, d_month_seq#39, d_year#8, d_moy#9, d_qoy#10] +Input [5]: [d_date_sk#7, d_month_seq#34, d_year#8, d_moy#9, d_qoy#10] (33) Filter [codegen id : 1] -Input [5]: [d_date_sk#7, d_month_seq#39, d_year#8, d_moy#9, d_qoy#10] -Condition : (((isnotnull(d_month_seq#39) AND (d_month_seq#39 >= 1200)) AND (d_month_seq#39 <= 1211)) AND isnotnull(d_date_sk#7)) +Input [5]: [d_date_sk#7, d_month_seq#34, d_year#8, d_moy#9, d_qoy#10] +Condition : (((isnotnull(d_month_seq#34) AND (d_month_seq#34 >= 1200)) AND (d_month_seq#34 <= 1211)) AND isnotnull(d_date_sk#7)) (34) Project [codegen id : 1] Output [4]: [d_date_sk#7, d_year#8, d_moy#9, d_qoy#10] -Input [5]: [d_date_sk#7, d_month_seq#39, d_year#8, d_moy#9, d_qoy#10] +Input [5]: [d_date_sk#7, d_month_seq#34, d_year#8, d_moy#9, d_qoy#10] (35) BroadcastExchange Input [4]: [d_date_sk#7, d_year#8, d_moy#9, d_qoy#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q67/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q67/explain.txt index 53f71a188fcb5..1619d25d1c12e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q67/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q67/explain.txt @@ -71,7 +71,7 @@ Condition : isnotnull(s_store_sk#11) (10) BroadcastExchange Input [2]: [s_store_sk#11, s_store_id#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#2] @@ -83,73 +83,73 @@ Output [7]: [ss_item_sk#1, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_sk#11, s_store_id#12] (13) Scan parquet default.item -Output [5]: [i_item_sk#14, i_brand#15, i_class#16, i_category#17, i_product_name#18] +Output [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [5]: [i_item_sk#14, i_brand#15, i_class#16, i_category#17, i_product_name#18] +Input [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] (15) Filter [codegen id : 3] -Input [5]: [i_item_sk#14, i_brand#15, i_class#16, i_category#17, i_product_name#18] -Condition : isnotnull(i_item_sk#14) +Input [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] +Condition : isnotnull(i_item_sk#13) (16) BroadcastExchange -Input [5]: [i_item_sk#14, i_brand#15, i_class#16, i_category#17, i_product_name#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19] +Input [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#14] +Right keys [1]: [i_item_sk#13] Join condition: None (18) Project [codegen id : 4] -Output [10]: [ss_quantity#3, ss_sales_price#4, i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] -Input [12]: [ss_item_sk#1, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_item_sk#14, i_brand#15, i_class#16, i_category#17, i_product_name#18] +Output [10]: [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [12]: [ss_item_sk#1, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] (19) Expand [codegen id : 4] -Input [10]: [ss_quantity#3, ss_sales_price#4, i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] -Arguments: [[ss_quantity#3, ss_sales_price#4, i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, 0], [ss_quantity#3, ss_sales_price#4, i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, null, 1], [ss_quantity#3, ss_sales_price#4, i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, null, null, 3], [ss_quantity#3, ss_sales_price#4, i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, null, null, null, 7], [ss_quantity#3, ss_sales_price#4, i_category#17, i_class#16, i_brand#15, i_product_name#18, null, null, null, null, 15], [ss_quantity#3, ss_sales_price#4, i_category#17, i_class#16, i_brand#15, null, null, null, null, null, 31], [ss_quantity#3, ss_sales_price#4, i_category#17, i_class#16, null, null, null, null, null, null, 63], [ss_quantity#3, ss_sales_price#4, i_category#17, null, null, null, null, null, null, null, 127], [ss_quantity#3, ss_sales_price#4, null, null, null, null, null, null, null, null, 255]], [ss_quantity#3, ss_sales_price#4, i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, spark_grouping_id#28] +Input [10]: [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Arguments: [[ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, 0], [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, null, 1], [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, null, null, 3], [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, null, null, null, 7], [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, i_product_name#17, null, null, null, null, 15], [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, i_brand#14, null, null, null, null, null, 31], [ss_quantity#3, ss_sales_price#4, i_category#16, i_class#15, null, null, null, null, null, null, 63], [ss_quantity#3, ss_sales_price#4, i_category#16, null, null, null, null, null, null, null, 127], [ss_quantity#3, ss_sales_price#4, null, null, null, null, null, null, null, null, 255]], [ss_quantity#3, ss_sales_price#4, i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26] (20) HashAggregate [codegen id : 4] -Input [11]: [ss_quantity#3, ss_sales_price#4, i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, spark_grouping_id#28] -Keys [9]: [i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, spark_grouping_id#28] +Input [11]: [ss_quantity#3, ss_sales_price#4, i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26] +Keys [9]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26] Functions [1]: [partial_sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [2]: [sum#29, isEmpty#30] -Results [11]: [i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, spark_grouping_id#28, sum#31, isEmpty#32] +Aggregate Attributes [2]: [sum#27, isEmpty#28] +Results [11]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26, sum#29, isEmpty#30] (21) Exchange -Input [11]: [i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, spark_grouping_id#28, sum#31, isEmpty#32] -Arguments: hashpartitioning(i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, spark_grouping_id#28, 5), ENSURE_REQUIREMENTS, [id=#33] +Input [11]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26, sum#29, isEmpty#30] +Arguments: hashpartitioning(i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 5] -Input [11]: [i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, spark_grouping_id#28, sum#31, isEmpty#32] -Keys [9]: [i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, spark_grouping_id#28] +Input [11]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26, sum#29, isEmpty#30] +Keys [9]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, spark_grouping_id#26] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#34] -Results [9]: [i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#34 AS sumsales#35] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#31] +Results [9]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#31 AS sumsales#32] (23) Exchange -Input [9]: [i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, sumsales#35] -Arguments: hashpartitioning(i_category#20, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [9]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, sumsales#32] +Arguments: hashpartitioning(i_category#18, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 6] -Input [9]: [i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, sumsales#35] -Arguments: [i_category#20 ASC NULLS FIRST, sumsales#35 DESC NULLS LAST], false, 0 +Input [9]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, sumsales#32] +Arguments: [i_category#18 ASC NULLS FIRST, sumsales#32 DESC NULLS LAST], false, 0 (25) Window -Input [9]: [i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, sumsales#35] -Arguments: [rank(sumsales#35) windowspecdefinition(i_category#20, sumsales#35 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#37], [i_category#20], [sumsales#35 DESC NULLS LAST] +Input [9]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, sumsales#32] +Arguments: [rank(sumsales#32) windowspecdefinition(i_category#18, sumsales#32 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#33], [i_category#18], [sumsales#32 DESC NULLS LAST] (26) Filter [codegen id : 7] -Input [10]: [i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, sumsales#35, rk#37] -Condition : (rk#37 <= 100) +Input [10]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, sumsales#32, rk#33] +Condition : (rk#33 <= 100) (27) TakeOrderedAndProject -Input [10]: [i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, sumsales#35, rk#37] -Arguments: 100, [i_category#20 ASC NULLS FIRST, i_class#21 ASC NULLS FIRST, i_brand#22 ASC NULLS FIRST, i_product_name#23 ASC NULLS FIRST, d_year#24 ASC NULLS FIRST, d_qoy#25 ASC NULLS FIRST, d_moy#26 ASC NULLS FIRST, s_store_id#27 ASC NULLS FIRST, sumsales#35 ASC NULLS FIRST, rk#37 ASC NULLS FIRST], [i_category#20, i_class#21, i_brand#22, i_product_name#23, d_year#24, d_qoy#25, d_moy#26, s_store_id#27, sumsales#35, rk#37] +Input [10]: [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, sumsales#32, rk#33] +Arguments: 100, [i_category#18 ASC NULLS FIRST, i_class#19 ASC NULLS FIRST, i_brand#20 ASC NULLS FIRST, i_product_name#21 ASC NULLS FIRST, d_year#22 ASC NULLS FIRST, d_qoy#23 ASC NULLS FIRST, d_moy#24 ASC NULLS FIRST, s_store_id#25 ASC NULLS FIRST, sumsales#32 ASC NULLS FIRST, rk#33 ASC NULLS FIRST], [i_category#18, i_class#19, i_brand#20, i_product_name#21, d_year#22, d_qoy#23, d_moy#24, s_store_id#25, sumsales#32, rk#33] ===== Subqueries ===== @@ -162,25 +162,25 @@ BroadcastExchange (32) (28) Scan parquet default.date_dim -Output [5]: [d_date_sk#7, d_month_seq#38, d_year#8, d_moy#9, d_qoy#10] +Output [5]: [d_date_sk#7, d_month_seq#34, d_year#8, d_moy#9, d_qoy#10] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (29) ColumnarToRow [codegen id : 1] -Input [5]: [d_date_sk#7, d_month_seq#38, d_year#8, d_moy#9, d_qoy#10] +Input [5]: [d_date_sk#7, d_month_seq#34, d_year#8, d_moy#9, d_qoy#10] (30) Filter [codegen id : 1] -Input [5]: [d_date_sk#7, d_month_seq#38, d_year#8, d_moy#9, d_qoy#10] -Condition : (((isnotnull(d_month_seq#38) AND (d_month_seq#38 >= 1200)) AND (d_month_seq#38 <= 1211)) AND isnotnull(d_date_sk#7)) +Input [5]: [d_date_sk#7, d_month_seq#34, d_year#8, d_moy#9, d_qoy#10] +Condition : (((isnotnull(d_month_seq#34) AND (d_month_seq#34 >= 1200)) AND (d_month_seq#34 <= 1211)) AND isnotnull(d_date_sk#7)) (31) Project [codegen id : 1] Output [4]: [d_date_sk#7, d_year#8, d_moy#9, d_qoy#10] -Input [5]: [d_date_sk#7, d_month_seq#38, d_year#8, d_moy#9, d_qoy#10] +Input [5]: [d_date_sk#7, d_month_seq#34, d_year#8, d_moy#9, d_qoy#10] (32) BroadcastExchange Input [4]: [d_date_sk#7, d_year#8, d_moy#9, d_qoy#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#39] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q68.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q68.sf100/explain.txt index 2075dff70a542..d09aeb714c5b7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q68.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q68.sf100/explain.txt @@ -64,202 +64,202 @@ Condition : (isnotnull(c_customer_sk#1) AND isnotnull(c_current_addr_sk#2)) (4) Exchange Input [4]: [c_customer_sk#1, c_current_addr_sk#2, c_first_name#3, c_last_name#4] -Arguments: hashpartitioning(c_current_addr_sk#2, 5), ENSURE_REQUIREMENTS, [id=#5] +Arguments: hashpartitioning(c_current_addr_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [4]: [c_customer_sk#1, c_current_addr_sk#2, c_first_name#3, c_last_name#4] Arguments: [c_current_addr_sk#2 ASC NULLS FIRST], false, 0 (6) Scan parquet default.customer_address -Output [2]: [ca_address_sk#6, ca_city#7] +Output [2]: [ca_address_sk#5, ca_city#6] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_city)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [2]: [ca_address_sk#6, ca_city#7] +Input [2]: [ca_address_sk#5, ca_city#6] (8) Filter [codegen id : 3] -Input [2]: [ca_address_sk#6, ca_city#7] -Condition : (isnotnull(ca_address_sk#6) AND isnotnull(ca_city#7)) +Input [2]: [ca_address_sk#5, ca_city#6] +Condition : (isnotnull(ca_address_sk#5) AND isnotnull(ca_city#6)) (9) Exchange -Input [2]: [ca_address_sk#6, ca_city#7] -Arguments: hashpartitioning(ca_address_sk#6, 5), ENSURE_REQUIREMENTS, [id=#8] +Input [2]: [ca_address_sk#5, ca_city#6] +Arguments: hashpartitioning(ca_address_sk#5, 5), ENSURE_REQUIREMENTS, [plan_id=2] (10) Sort [codegen id : 4] -Input [2]: [ca_address_sk#6, ca_city#7] -Arguments: [ca_address_sk#6 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#5, ca_city#6] +Arguments: [ca_address_sk#5 ASC NULLS FIRST], false, 0 (11) SortMergeJoin [codegen id : 5] Left keys [1]: [c_current_addr_sk#2] -Right keys [1]: [ca_address_sk#6] +Right keys [1]: [ca_address_sk#5] Join condition: None (12) Project [codegen id : 5] -Output [4]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#7] -Input [6]: [c_customer_sk#1, c_current_addr_sk#2, c_first_name#3, c_last_name#4, ca_address_sk#6, ca_city#7] +Output [4]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#6] +Input [6]: [c_customer_sk#1, c_current_addr_sk#2, c_first_name#3, c_last_name#4, ca_address_sk#5, ca_city#6] (13) Exchange -Input [4]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#7] -Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#9] +Input [4]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#6] +Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (14) Sort [codegen id : 6] -Input [4]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#7] +Input [4]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#6] Arguments: [c_customer_sk#1 ASC NULLS FIRST], false, 0 (15) Scan parquet default.store_sales -Output [9]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_store_sk#13, ss_ticket_number#14, ss_ext_sales_price#15, ss_ext_list_price#16, ss_ext_tax#17, ss_sold_date_sk#18] +Output [9]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_ext_sales_price#12, ss_ext_list_price#13, ss_ext_tax#14, ss_sold_date_sk#15] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#18), dynamicpruningexpression(ss_sold_date_sk#18 IN dynamicpruning#19)] +PartitionFilters: [isnotnull(ss_sold_date_sk#15), dynamicpruningexpression(ss_sold_date_sk#15 IN dynamicpruning#16)] PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (16) ColumnarToRow [codegen id : 10] -Input [9]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_store_sk#13, ss_ticket_number#14, ss_ext_sales_price#15, ss_ext_list_price#16, ss_ext_tax#17, ss_sold_date_sk#18] +Input [9]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_ext_sales_price#12, ss_ext_list_price#13, ss_ext_tax#14, ss_sold_date_sk#15] (17) Filter [codegen id : 10] -Input [9]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_store_sk#13, ss_ticket_number#14, ss_ext_sales_price#15, ss_ext_list_price#16, ss_ext_tax#17, ss_sold_date_sk#18] -Condition : (((isnotnull(ss_store_sk#13) AND isnotnull(ss_hdemo_sk#11)) AND isnotnull(ss_addr_sk#12)) AND isnotnull(ss_customer_sk#10)) +Input [9]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_ext_sales_price#12, ss_ext_list_price#13, ss_ext_tax#14, ss_sold_date_sk#15] +Condition : (((isnotnull(ss_store_sk#10) AND isnotnull(ss_hdemo_sk#8)) AND isnotnull(ss_addr_sk#9)) AND isnotnull(ss_customer_sk#7)) (18) ReusedExchange [Reuses operator id: 52] -Output [1]: [d_date_sk#20] +Output [1]: [d_date_sk#17] (19) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_sold_date_sk#18] -Right keys [1]: [d_date_sk#20] +Left keys [1]: [ss_sold_date_sk#15] +Right keys [1]: [d_date_sk#17] Join condition: None (20) Project [codegen id : 10] -Output [8]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_store_sk#13, ss_ticket_number#14, ss_ext_sales_price#15, ss_ext_list_price#16, ss_ext_tax#17] -Input [10]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_store_sk#13, ss_ticket_number#14, ss_ext_sales_price#15, ss_ext_list_price#16, ss_ext_tax#17, ss_sold_date_sk#18, d_date_sk#20] +Output [8]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_ext_sales_price#12, ss_ext_list_price#13, ss_ext_tax#14] +Input [10]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_ext_sales_price#12, ss_ext_list_price#13, ss_ext_tax#14, ss_sold_date_sk#15, d_date_sk#17] (21) Scan parquet default.store -Output [2]: [s_store_sk#21, s_city#22] +Output [2]: [s_store_sk#18, s_city#19] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [In(s_city, [Fairview,Midway]), IsNotNull(s_store_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 8] -Input [2]: [s_store_sk#21, s_city#22] +Input [2]: [s_store_sk#18, s_city#19] (23) Filter [codegen id : 8] -Input [2]: [s_store_sk#21, s_city#22] -Condition : (s_city#22 IN (Midway,Fairview) AND isnotnull(s_store_sk#21)) +Input [2]: [s_store_sk#18, s_city#19] +Condition : (s_city#19 IN (Midway,Fairview) AND isnotnull(s_store_sk#18)) (24) Project [codegen id : 8] -Output [1]: [s_store_sk#21] -Input [2]: [s_store_sk#21, s_city#22] +Output [1]: [s_store_sk#18] +Input [2]: [s_store_sk#18, s_city#19] (25) BroadcastExchange -Input [1]: [s_store_sk#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#23] +Input [1]: [s_store_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (26) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_store_sk#13] -Right keys [1]: [s_store_sk#21] +Left keys [1]: [ss_store_sk#10] +Right keys [1]: [s_store_sk#18] Join condition: None (27) Project [codegen id : 10] -Output [7]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_ticket_number#14, ss_ext_sales_price#15, ss_ext_list_price#16, ss_ext_tax#17] -Input [9]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_store_sk#13, ss_ticket_number#14, ss_ext_sales_price#15, ss_ext_list_price#16, ss_ext_tax#17, s_store_sk#21] +Output [7]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_ticket_number#11, ss_ext_sales_price#12, ss_ext_list_price#13, ss_ext_tax#14] +Input [9]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_store_sk#10, ss_ticket_number#11, ss_ext_sales_price#12, ss_ext_list_price#13, ss_ext_tax#14, s_store_sk#18] (28) Scan parquet default.household_demographics -Output [3]: [hd_demo_sk#24, hd_dep_count#25, hd_vehicle_count#26] +Output [3]: [hd_demo_sk#20, hd_dep_count#21, hd_vehicle_count#22] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [Or(EqualTo(hd_dep_count,4),EqualTo(hd_vehicle_count,3)), IsNotNull(hd_demo_sk)] ReadSchema: struct (29) ColumnarToRow [codegen id : 9] -Input [3]: [hd_demo_sk#24, hd_dep_count#25, hd_vehicle_count#26] +Input [3]: [hd_demo_sk#20, hd_dep_count#21, hd_vehicle_count#22] (30) Filter [codegen id : 9] -Input [3]: [hd_demo_sk#24, hd_dep_count#25, hd_vehicle_count#26] -Condition : (((hd_dep_count#25 = 4) OR (hd_vehicle_count#26 = 3)) AND isnotnull(hd_demo_sk#24)) +Input [3]: [hd_demo_sk#20, hd_dep_count#21, hd_vehicle_count#22] +Condition : (((hd_dep_count#21 = 4) OR (hd_vehicle_count#22 = 3)) AND isnotnull(hd_demo_sk#20)) (31) Project [codegen id : 9] -Output [1]: [hd_demo_sk#24] -Input [3]: [hd_demo_sk#24, hd_dep_count#25, hd_vehicle_count#26] +Output [1]: [hd_demo_sk#20] +Input [3]: [hd_demo_sk#20, hd_dep_count#21, hd_vehicle_count#22] (32) BroadcastExchange -Input [1]: [hd_demo_sk#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#27] +Input [1]: [hd_demo_sk#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (33) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_hdemo_sk#11] -Right keys [1]: [hd_demo_sk#24] +Left keys [1]: [ss_hdemo_sk#8] +Right keys [1]: [hd_demo_sk#20] Join condition: None (34) Project [codegen id : 10] -Output [6]: [ss_customer_sk#10, ss_addr_sk#12, ss_ticket_number#14, ss_ext_sales_price#15, ss_ext_list_price#16, ss_ext_tax#17] -Input [8]: [ss_customer_sk#10, ss_hdemo_sk#11, ss_addr_sk#12, ss_ticket_number#14, ss_ext_sales_price#15, ss_ext_list_price#16, ss_ext_tax#17, hd_demo_sk#24] +Output [6]: [ss_customer_sk#7, ss_addr_sk#9, ss_ticket_number#11, ss_ext_sales_price#12, ss_ext_list_price#13, ss_ext_tax#14] +Input [8]: [ss_customer_sk#7, ss_hdemo_sk#8, ss_addr_sk#9, ss_ticket_number#11, ss_ext_sales_price#12, ss_ext_list_price#13, ss_ext_tax#14, hd_demo_sk#20] (35) Exchange -Input [6]: [ss_customer_sk#10, ss_addr_sk#12, ss_ticket_number#14, ss_ext_sales_price#15, ss_ext_list_price#16, ss_ext_tax#17] -Arguments: hashpartitioning(ss_addr_sk#12, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [6]: [ss_customer_sk#7, ss_addr_sk#9, ss_ticket_number#11, ss_ext_sales_price#12, ss_ext_list_price#13, ss_ext_tax#14] +Arguments: hashpartitioning(ss_addr_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=6] (36) Sort [codegen id : 11] -Input [6]: [ss_customer_sk#10, ss_addr_sk#12, ss_ticket_number#14, ss_ext_sales_price#15, ss_ext_list_price#16, ss_ext_tax#17] -Arguments: [ss_addr_sk#12 ASC NULLS FIRST], false, 0 +Input [6]: [ss_customer_sk#7, ss_addr_sk#9, ss_ticket_number#11, ss_ext_sales_price#12, ss_ext_list_price#13, ss_ext_tax#14] +Arguments: [ss_addr_sk#9 ASC NULLS FIRST], false, 0 (37) ReusedExchange [Reuses operator id: 9] -Output [2]: [ca_address_sk#29, ca_city#30] +Output [2]: [ca_address_sk#23, ca_city#24] (38) Sort [codegen id : 13] -Input [2]: [ca_address_sk#29, ca_city#30] -Arguments: [ca_address_sk#29 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#23, ca_city#24] +Arguments: [ca_address_sk#23 ASC NULLS FIRST], false, 0 (39) SortMergeJoin [codegen id : 14] -Left keys [1]: [ss_addr_sk#12] -Right keys [1]: [ca_address_sk#29] +Left keys [1]: [ss_addr_sk#9] +Right keys [1]: [ca_address_sk#23] Join condition: None (40) Project [codegen id : 14] -Output [7]: [ss_customer_sk#10, ss_addr_sk#12, ss_ticket_number#14, ss_ext_sales_price#15, ss_ext_list_price#16, ss_ext_tax#17, ca_city#30] -Input [8]: [ss_customer_sk#10, ss_addr_sk#12, ss_ticket_number#14, ss_ext_sales_price#15, ss_ext_list_price#16, ss_ext_tax#17, ca_address_sk#29, ca_city#30] +Output [7]: [ss_customer_sk#7, ss_addr_sk#9, ss_ticket_number#11, ss_ext_sales_price#12, ss_ext_list_price#13, ss_ext_tax#14, ca_city#24] +Input [8]: [ss_customer_sk#7, ss_addr_sk#9, ss_ticket_number#11, ss_ext_sales_price#12, ss_ext_list_price#13, ss_ext_tax#14, ca_address_sk#23, ca_city#24] (41) HashAggregate [codegen id : 14] -Input [7]: [ss_customer_sk#10, ss_addr_sk#12, ss_ticket_number#14, ss_ext_sales_price#15, ss_ext_list_price#16, ss_ext_tax#17, ca_city#30] -Keys [4]: [ss_ticket_number#14, ss_customer_sk#10, ss_addr_sk#12, ca_city#30] -Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#15)), partial_sum(UnscaledValue(ss_ext_list_price#16)), partial_sum(UnscaledValue(ss_ext_tax#17))] -Aggregate Attributes [3]: [sum#31, sum#32, sum#33] -Results [7]: [ss_ticket_number#14, ss_customer_sk#10, ss_addr_sk#12, ca_city#30, sum#34, sum#35, sum#36] +Input [7]: [ss_customer_sk#7, ss_addr_sk#9, ss_ticket_number#11, ss_ext_sales_price#12, ss_ext_list_price#13, ss_ext_tax#14, ca_city#24] +Keys [4]: [ss_ticket_number#11, ss_customer_sk#7, ss_addr_sk#9, ca_city#24] +Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#12)), partial_sum(UnscaledValue(ss_ext_list_price#13)), partial_sum(UnscaledValue(ss_ext_tax#14))] +Aggregate Attributes [3]: [sum#25, sum#26, sum#27] +Results [7]: [ss_ticket_number#11, ss_customer_sk#7, ss_addr_sk#9, ca_city#24, sum#28, sum#29, sum#30] (42) HashAggregate [codegen id : 14] -Input [7]: [ss_ticket_number#14, ss_customer_sk#10, ss_addr_sk#12, ca_city#30, sum#34, sum#35, sum#36] -Keys [4]: [ss_ticket_number#14, ss_customer_sk#10, ss_addr_sk#12, ca_city#30] -Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#15)), sum(UnscaledValue(ss_ext_list_price#16)), sum(UnscaledValue(ss_ext_tax#17))] -Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#15))#37, sum(UnscaledValue(ss_ext_list_price#16))#38, sum(UnscaledValue(ss_ext_tax#17))#39] -Results [6]: [ss_ticket_number#14, ss_customer_sk#10, ca_city#30 AS bought_city#40, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#15))#37,17,2) AS extended_price#41, MakeDecimal(sum(UnscaledValue(ss_ext_list_price#16))#38,17,2) AS list_price#42, MakeDecimal(sum(UnscaledValue(ss_ext_tax#17))#39,17,2) AS extended_tax#43] +Input [7]: [ss_ticket_number#11, ss_customer_sk#7, ss_addr_sk#9, ca_city#24, sum#28, sum#29, sum#30] +Keys [4]: [ss_ticket_number#11, ss_customer_sk#7, ss_addr_sk#9, ca_city#24] +Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#12)), sum(UnscaledValue(ss_ext_list_price#13)), sum(UnscaledValue(ss_ext_tax#14))] +Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#12))#31, sum(UnscaledValue(ss_ext_list_price#13))#32, sum(UnscaledValue(ss_ext_tax#14))#33] +Results [6]: [ss_ticket_number#11, ss_customer_sk#7, ca_city#24 AS bought_city#34, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#12))#31,17,2) AS extended_price#35, MakeDecimal(sum(UnscaledValue(ss_ext_list_price#13))#32,17,2) AS list_price#36, MakeDecimal(sum(UnscaledValue(ss_ext_tax#14))#33,17,2) AS extended_tax#37] (43) Exchange -Input [6]: [ss_ticket_number#14, ss_customer_sk#10, bought_city#40, extended_price#41, list_price#42, extended_tax#43] -Arguments: hashpartitioning(ss_customer_sk#10, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [6]: [ss_ticket_number#11, ss_customer_sk#7, bought_city#34, extended_price#35, list_price#36, extended_tax#37] +Arguments: hashpartitioning(ss_customer_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=7] (44) Sort [codegen id : 15] -Input [6]: [ss_ticket_number#14, ss_customer_sk#10, bought_city#40, extended_price#41, list_price#42, extended_tax#43] -Arguments: [ss_customer_sk#10 ASC NULLS FIRST], false, 0 +Input [6]: [ss_ticket_number#11, ss_customer_sk#7, bought_city#34, extended_price#35, list_price#36, extended_tax#37] +Arguments: [ss_customer_sk#7 ASC NULLS FIRST], false, 0 (45) SortMergeJoin [codegen id : 16] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [ss_customer_sk#10] -Join condition: NOT (ca_city#7 = bought_city#40) +Right keys [1]: [ss_customer_sk#7] +Join condition: NOT (ca_city#6 = bought_city#34) (46) Project [codegen id : 16] -Output [8]: [c_last_name#4, c_first_name#3, ca_city#7, bought_city#40, ss_ticket_number#14, extended_price#41, extended_tax#43, list_price#42] -Input [10]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#7, ss_ticket_number#14, ss_customer_sk#10, bought_city#40, extended_price#41, list_price#42, extended_tax#43] +Output [8]: [c_last_name#4, c_first_name#3, ca_city#6, bought_city#34, ss_ticket_number#11, extended_price#35, extended_tax#37, list_price#36] +Input [10]: [c_customer_sk#1, c_first_name#3, c_last_name#4, ca_city#6, ss_ticket_number#11, ss_customer_sk#7, bought_city#34, extended_price#35, list_price#36, extended_tax#37] (47) TakeOrderedAndProject -Input [8]: [c_last_name#4, c_first_name#3, ca_city#7, bought_city#40, ss_ticket_number#14, extended_price#41, extended_tax#43, list_price#42] -Arguments: 100, [c_last_name#4 ASC NULLS FIRST, ss_ticket_number#14 ASC NULLS FIRST], [c_last_name#4, c_first_name#3, ca_city#7, bought_city#40, ss_ticket_number#14, extended_price#41, extended_tax#43, list_price#42] +Input [8]: [c_last_name#4, c_first_name#3, ca_city#6, bought_city#34, ss_ticket_number#11, extended_price#35, extended_tax#37, list_price#36] +Arguments: 100, [c_last_name#4 ASC NULLS FIRST, ss_ticket_number#11 ASC NULLS FIRST], [c_last_name#4, c_first_name#3, ca_city#6, bought_city#34, ss_ticket_number#11, extended_price#35, extended_tax#37, list_price#36] ===== Subqueries ===== -Subquery:1 Hosting operator id = 15 Hosting Expression = ss_sold_date_sk#18 IN dynamicpruning#19 +Subquery:1 Hosting operator id = 15 Hosting Expression = ss_sold_date_sk#15 IN dynamicpruning#16 BroadcastExchange (52) +- * Project (51) +- * Filter (50) @@ -268,25 +268,25 @@ BroadcastExchange (52) (48) Scan parquet default.date_dim -Output [3]: [d_date_sk#20, d_year#45, d_dom#46] +Output [3]: [d_date_sk#17, d_year#38, d_dom#39] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_dom), GreaterThanOrEqual(d_dom,1), LessThanOrEqual(d_dom,2), In(d_year, [1999,2000,2001]), IsNotNull(d_date_sk)] ReadSchema: struct (49) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#20, d_year#45, d_dom#46] +Input [3]: [d_date_sk#17, d_year#38, d_dom#39] (50) Filter [codegen id : 1] -Input [3]: [d_date_sk#20, d_year#45, d_dom#46] -Condition : ((((isnotnull(d_dom#46) AND (d_dom#46 >= 1)) AND (d_dom#46 <= 2)) AND d_year#45 IN (1999,2000,2001)) AND isnotnull(d_date_sk#20)) +Input [3]: [d_date_sk#17, d_year#38, d_dom#39] +Condition : ((((isnotnull(d_dom#39) AND (d_dom#39 >= 1)) AND (d_dom#39 <= 2)) AND d_year#38 IN (1999,2000,2001)) AND isnotnull(d_date_sk#17)) (51) Project [codegen id : 1] -Output [1]: [d_date_sk#20] -Input [3]: [d_date_sk#20, d_year#45, d_dom#46] +Output [1]: [d_date_sk#17] +Input [3]: [d_date_sk#17, d_year#38, d_dom#39] (52) BroadcastExchange -Input [1]: [d_date_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#47] +Input [1]: [d_date_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q68/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q68/explain.txt index 40336e3e7c909..c539e33cafc4f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q68/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q68/explain.txt @@ -87,7 +87,7 @@ Input [2]: [s_store_sk#12, s_city#13] (11) BroadcastExchange Input [1]: [s_store_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_store_sk#4] @@ -99,123 +99,123 @@ Output [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, Input [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, s_store_sk#12] (14) Scan parquet default.household_demographics -Output [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Output [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [Or(EqualTo(hd_dep_count,4),EqualTo(hd_vehicle_count,3)), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] (16) Filter [codegen id : 3] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] -Condition : (((hd_dep_count#16 = 4) OR (hd_vehicle_count#17 = 3)) AND isnotnull(hd_demo_sk#15)) +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] +Condition : (((hd_dep_count#15 = 4) OR (hd_vehicle_count#16 = 3)) AND isnotnull(hd_demo_sk#14)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#15] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Output [1]: [hd_demo_sk#14] +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] (18) BroadcastExchange -Input [1]: [hd_demo_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [1]: [hd_demo_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#15] +Right keys [1]: [hd_demo_sk#14] Join condition: None (20) Project [codegen id : 5] Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8] -Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, hd_demo_sk#15] +Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, hd_demo_sk#14] (21) Scan parquet default.customer_address -Output [2]: [ca_address_sk#19, ca_city#20] +Output [2]: [ca_address_sk#17, ca_city#18] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_city)] ReadSchema: struct (22) ColumnarToRow [codegen id : 4] -Input [2]: [ca_address_sk#19, ca_city#20] +Input [2]: [ca_address_sk#17, ca_city#18] (23) Filter [codegen id : 4] -Input [2]: [ca_address_sk#19, ca_city#20] -Condition : (isnotnull(ca_address_sk#19) AND isnotnull(ca_city#20)) +Input [2]: [ca_address_sk#17, ca_city#18] +Condition : (isnotnull(ca_address_sk#17) AND isnotnull(ca_city#18)) (24) BroadcastExchange -Input [2]: [ca_address_sk#19, ca_city#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21] +Input [2]: [ca_address_sk#17, ca_city#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (25) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_addr_sk#3] -Right keys [1]: [ca_address_sk#19] +Right keys [1]: [ca_address_sk#17] Join condition: None (26) Project [codegen id : 5] -Output [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#20] -Input [8]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_address_sk#19, ca_city#20] +Output [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#18] +Input [8]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_address_sk#17, ca_city#18] (27) HashAggregate [codegen id : 5] -Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#20] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20] +Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#18] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18] Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#6)), partial_sum(UnscaledValue(ss_ext_list_price#7)), partial_sum(UnscaledValue(ss_ext_tax#8))] -Aggregate Attributes [3]: [sum#22, sum#23, sum#24] -Results [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20, sum#25, sum#26, sum#27] +Aggregate Attributes [3]: [sum#19, sum#20, sum#21] +Results [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18, sum#22, sum#23, sum#24] (28) Exchange -Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20, sum#25, sum#26, sum#27] -Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18, sum#22, sum#23, sum#24] +Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 8] -Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20, sum#25, sum#26, sum#27] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#20] +Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18, sum#22, sum#23, sum#24] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#18] Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#6)), sum(UnscaledValue(ss_ext_list_price#7)), sum(UnscaledValue(ss_ext_tax#8))] -Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#6))#29, sum(UnscaledValue(ss_ext_list_price#7))#30, sum(UnscaledValue(ss_ext_tax#8))#31] -Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#20 AS bought_city#32, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#29,17,2) AS extended_price#33, MakeDecimal(sum(UnscaledValue(ss_ext_list_price#7))#30,17,2) AS list_price#34, MakeDecimal(sum(UnscaledValue(ss_ext_tax#8))#31,17,2) AS extended_tax#35] +Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#6))#25, sum(UnscaledValue(ss_ext_list_price#7))#26, sum(UnscaledValue(ss_ext_tax#8))#27] +Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#18 AS bought_city#28, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#25,17,2) AS extended_price#29, MakeDecimal(sum(UnscaledValue(ss_ext_list_price#7))#26,17,2) AS list_price#30, MakeDecimal(sum(UnscaledValue(ss_ext_tax#8))#27,17,2) AS extended_tax#31] (30) Scan parquet default.customer -Output [4]: [c_customer_sk#36, c_current_addr_sk#37, c_first_name#38, c_last_name#39] +Output [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 6] -Input [4]: [c_customer_sk#36, c_current_addr_sk#37, c_first_name#38, c_last_name#39] +Input [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] (32) Filter [codegen id : 6] -Input [4]: [c_customer_sk#36, c_current_addr_sk#37, c_first_name#38, c_last_name#39] -Condition : (isnotnull(c_customer_sk#36) AND isnotnull(c_current_addr_sk#37)) +Input [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] +Condition : (isnotnull(c_customer_sk#32) AND isnotnull(c_current_addr_sk#33)) (33) BroadcastExchange -Input [4]: [c_customer_sk#36, c_current_addr_sk#37, c_first_name#38, c_last_name#39] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#40] +Input [4]: [c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#36] +Right keys [1]: [c_customer_sk#32] Join condition: None (35) Project [codegen id : 8] -Output [8]: [ss_ticket_number#5, bought_city#32, extended_price#33, list_price#34, extended_tax#35, c_current_addr_sk#37, c_first_name#38, c_last_name#39] -Input [10]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#32, extended_price#33, list_price#34, extended_tax#35, c_customer_sk#36, c_current_addr_sk#37, c_first_name#38, c_last_name#39] +Output [8]: [ss_ticket_number#5, bought_city#28, extended_price#29, list_price#30, extended_tax#31, c_current_addr_sk#33, c_first_name#34, c_last_name#35] +Input [10]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#28, extended_price#29, list_price#30, extended_tax#31, c_customer_sk#32, c_current_addr_sk#33, c_first_name#34, c_last_name#35] (36) ReusedExchange [Reuses operator id: 24] -Output [2]: [ca_address_sk#41, ca_city#42] +Output [2]: [ca_address_sk#36, ca_city#37] (37) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [c_current_addr_sk#37] -Right keys [1]: [ca_address_sk#41] -Join condition: NOT (ca_city#42 = bought_city#32) +Left keys [1]: [c_current_addr_sk#33] +Right keys [1]: [ca_address_sk#36] +Join condition: NOT (ca_city#37 = bought_city#28) (38) Project [codegen id : 8] -Output [8]: [c_last_name#39, c_first_name#38, ca_city#42, bought_city#32, ss_ticket_number#5, extended_price#33, extended_tax#35, list_price#34] -Input [10]: [ss_ticket_number#5, bought_city#32, extended_price#33, list_price#34, extended_tax#35, c_current_addr_sk#37, c_first_name#38, c_last_name#39, ca_address_sk#41, ca_city#42] +Output [8]: [c_last_name#35, c_first_name#34, ca_city#37, bought_city#28, ss_ticket_number#5, extended_price#29, extended_tax#31, list_price#30] +Input [10]: [ss_ticket_number#5, bought_city#28, extended_price#29, list_price#30, extended_tax#31, c_current_addr_sk#33, c_first_name#34, c_last_name#35, ca_address_sk#36, ca_city#37] (39) TakeOrderedAndProject -Input [8]: [c_last_name#39, c_first_name#38, ca_city#42, bought_city#32, ss_ticket_number#5, extended_price#33, extended_tax#35, list_price#34] -Arguments: 100, [c_last_name#39 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#39, c_first_name#38, ca_city#42, bought_city#32, ss_ticket_number#5, extended_price#33, extended_tax#35, list_price#34] +Input [8]: [c_last_name#35, c_first_name#34, ca_city#37, bought_city#28, ss_ticket_number#5, extended_price#29, extended_tax#31, list_price#30] +Arguments: 100, [c_last_name#35 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#35, c_first_name#34, ca_city#37, bought_city#28, ss_ticket_number#5, extended_price#29, extended_tax#31, list_price#30] ===== Subqueries ===== @@ -228,25 +228,25 @@ BroadcastExchange (44) (40) Scan parquet default.date_dim -Output [3]: [d_date_sk#11, d_year#43, d_dom#44] +Output [3]: [d_date_sk#11, d_year#38, d_dom#39] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_dom), GreaterThanOrEqual(d_dom,1), LessThanOrEqual(d_dom,2), In(d_year, [1999,2000,2001]), IsNotNull(d_date_sk)] ReadSchema: struct (41) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#43, d_dom#44] +Input [3]: [d_date_sk#11, d_year#38, d_dom#39] (42) Filter [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#43, d_dom#44] -Condition : ((((isnotnull(d_dom#44) AND (d_dom#44 >= 1)) AND (d_dom#44 <= 2)) AND d_year#43 IN (1999,2000,2001)) AND isnotnull(d_date_sk#11)) +Input [3]: [d_date_sk#11, d_year#38, d_dom#39] +Condition : ((((isnotnull(d_dom#39) AND (d_dom#39 >= 1)) AND (d_dom#39 <= 2)) AND d_year#38 IN (1999,2000,2001)) AND isnotnull(d_date_sk#11)) (43) Project [codegen id : 1] Output [1]: [d_date_sk#11] -Input [3]: [d_date_sk#11, d_year#43, d_dom#44] +Input [3]: [d_date_sk#11, d_year#38, d_dom#39] (44) BroadcastExchange Input [1]: [d_date_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#45] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69.sf100/explain.txt index 8ab1c3e4d84e0..a865ddbf89e14 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69.sf100/explain.txt @@ -64,115 +64,115 @@ Condition : ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2) (4) Exchange Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: [c_customer_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_sales -Output [2]: [ss_customer_sk#7, ss_sold_date_sk#8] +Output [2]: [ss_customer_sk#6, ss_sold_date_sk#7] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#8), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)] ReadSchema: struct (7) ColumnarToRow [codegen id : 4] -Input [2]: [ss_customer_sk#7, ss_sold_date_sk#8] +Input [2]: [ss_customer_sk#6, ss_sold_date_sk#7] (8) ReusedExchange [Reuses operator id: 59] -Output [1]: [d_date_sk#10] +Output [1]: [d_date_sk#9] (9) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#10] +Left keys [1]: [ss_sold_date_sk#7] +Right keys [1]: [d_date_sk#9] Join condition: None (10) Project [codegen id : 4] -Output [1]: [ss_customer_sk#7] -Input [3]: [ss_customer_sk#7, ss_sold_date_sk#8, d_date_sk#10] +Output [1]: [ss_customer_sk#6] +Input [3]: [ss_customer_sk#6, ss_sold_date_sk#7, d_date_sk#9] (11) Exchange -Input [1]: [ss_customer_sk#7] -Arguments: hashpartitioning(ss_customer_sk#7, 5), ENSURE_REQUIREMENTS, [id=#11] +Input [1]: [ss_customer_sk#6] +Arguments: hashpartitioning(ss_customer_sk#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 5] -Input [1]: [ss_customer_sk#7] -Arguments: [ss_customer_sk#7 ASC NULLS FIRST], false, 0 +Input [1]: [ss_customer_sk#6] +Arguments: [ss_customer_sk#6 ASC NULLS FIRST], false, 0 (13) SortMergeJoin [codegen id : 6] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [ss_customer_sk#7] +Right keys [1]: [ss_customer_sk#6] Join condition: None (14) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#12, ws_sold_date_sk#13] +Output [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#13), dynamicpruningexpression(ws_sold_date_sk#13 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(ws_sold_date_sk#11), dynamicpruningexpression(ws_sold_date_sk#11 IN dynamicpruning#8)] ReadSchema: struct (15) ColumnarToRow [codegen id : 8] -Input [2]: [ws_bill_customer_sk#12, ws_sold_date_sk#13] +Input [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] (16) ReusedExchange [Reuses operator id: 59] -Output [1]: [d_date_sk#14] +Output [1]: [d_date_sk#12] (17) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ws_sold_date_sk#13] -Right keys [1]: [d_date_sk#14] +Left keys [1]: [ws_sold_date_sk#11] +Right keys [1]: [d_date_sk#12] Join condition: None (18) Project [codegen id : 8] -Output [1]: [ws_bill_customer_sk#12] -Input [3]: [ws_bill_customer_sk#12, ws_sold_date_sk#13, d_date_sk#14] +Output [1]: [ws_bill_customer_sk#10] +Input [3]: [ws_bill_customer_sk#10, ws_sold_date_sk#11, d_date_sk#12] (19) Exchange -Input [1]: [ws_bill_customer_sk#12] -Arguments: hashpartitioning(ws_bill_customer_sk#12, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [1]: [ws_bill_customer_sk#10] +Arguments: hashpartitioning(ws_bill_customer_sk#10, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) Sort [codegen id : 9] -Input [1]: [ws_bill_customer_sk#12] -Arguments: [ws_bill_customer_sk#12 ASC NULLS FIRST], false, 0 +Input [1]: [ws_bill_customer_sk#10] +Arguments: [ws_bill_customer_sk#10 ASC NULLS FIRST], false, 0 (21) SortMergeJoin [codegen id : 10] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [ws_bill_customer_sk#12] +Right keys [1]: [ws_bill_customer_sk#10] Join condition: None (22) Scan parquet default.catalog_sales -Output [2]: [cs_ship_customer_sk#16, cs_sold_date_sk#17] +Output [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#17), dynamicpruningexpression(cs_sold_date_sk#17 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(cs_sold_date_sk#14), dynamicpruningexpression(cs_sold_date_sk#14 IN dynamicpruning#8)] ReadSchema: struct (23) ColumnarToRow [codegen id : 12] -Input [2]: [cs_ship_customer_sk#16, cs_sold_date_sk#17] +Input [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] (24) ReusedExchange [Reuses operator id: 59] -Output [1]: [d_date_sk#18] +Output [1]: [d_date_sk#15] (25) BroadcastHashJoin [codegen id : 12] -Left keys [1]: [cs_sold_date_sk#17] -Right keys [1]: [d_date_sk#18] +Left keys [1]: [cs_sold_date_sk#14] +Right keys [1]: [d_date_sk#15] Join condition: None (26) Project [codegen id : 12] -Output [1]: [cs_ship_customer_sk#16] -Input [3]: [cs_ship_customer_sk#16, cs_sold_date_sk#17, d_date_sk#18] +Output [1]: [cs_ship_customer_sk#13] +Input [3]: [cs_ship_customer_sk#13, cs_sold_date_sk#14, d_date_sk#15] (27) Exchange -Input [1]: [cs_ship_customer_sk#16] -Arguments: hashpartitioning(cs_ship_customer_sk#16, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [1]: [cs_ship_customer_sk#13] +Arguments: hashpartitioning(cs_ship_customer_sk#13, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) Sort [codegen id : 13] -Input [1]: [cs_ship_customer_sk#16] -Arguments: [cs_ship_customer_sk#16 ASC NULLS FIRST], false, 0 +Input [1]: [cs_ship_customer_sk#13] +Arguments: [cs_ship_customer_sk#13 ASC NULLS FIRST], false, 0 (29) SortMergeJoin [codegen id : 15] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [cs_ship_customer_sk#16] +Right keys [1]: [cs_ship_customer_sk#13] Join condition: None (30) Project [codegen id : 15] @@ -180,84 +180,84 @@ Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] (31) Scan parquet default.customer_address -Output [2]: [ca_address_sk#20, ca_state#21] +Output [2]: [ca_address_sk#16, ca_state#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [GA,KY,NM]), IsNotNull(ca_address_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 14] -Input [2]: [ca_address_sk#20, ca_state#21] +Input [2]: [ca_address_sk#16, ca_state#17] (33) Filter [codegen id : 14] -Input [2]: [ca_address_sk#20, ca_state#21] -Condition : (ca_state#21 IN (KY,GA,NM) AND isnotnull(ca_address_sk#20)) +Input [2]: [ca_address_sk#16, ca_state#17] +Condition : (ca_state#17 IN (KY,GA,NM) AND isnotnull(ca_address_sk#16)) (34) Project [codegen id : 14] -Output [1]: [ca_address_sk#20] -Input [2]: [ca_address_sk#20, ca_state#21] +Output [1]: [ca_address_sk#16] +Input [2]: [ca_address_sk#16, ca_state#17] (35) BroadcastExchange -Input [1]: [ca_address_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [ca_address_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (36) BroadcastHashJoin [codegen id : 15] Left keys [1]: [c_current_addr_sk#3] -Right keys [1]: [ca_address_sk#20] +Right keys [1]: [ca_address_sk#16] Join condition: None (37) Project [codegen id : 15] Output [1]: [c_current_cdemo_sk#2] -Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#20] +Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#16] (38) BroadcastExchange Input [1]: [c_current_cdemo_sk#2] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] (39) Scan parquet default.customer_demographics -Output [6]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29] +Output [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (40) ColumnarToRow -Input [6]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29] +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23] (41) Filter -Input [6]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29] -Condition : isnotnull(cd_demo_sk#24) +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23] +Condition : isnotnull(cd_demo_sk#18) (42) BroadcastHashJoin [codegen id : 16] Left keys [1]: [c_current_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#24] +Right keys [1]: [cd_demo_sk#18] Join condition: None (43) Project [codegen id : 16] -Output [5]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29] -Input [7]: [c_current_cdemo_sk#2, cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29] +Output [5]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23] +Input [7]: [c_current_cdemo_sk#2, cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23] (44) HashAggregate [codegen id : 16] -Input [5]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29] -Keys [5]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29] +Input [5]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23] +Keys [5]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#30] -Results [6]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, count#31] +Aggregate Attributes [1]: [count#24] +Results [6]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, count#25] (45) Exchange -Input [6]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, count#31] -Arguments: hashpartitioning(cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, 5), ENSURE_REQUIREMENTS, [id=#32] +Input [6]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, count#25] +Arguments: hashpartitioning(cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, 5), ENSURE_REQUIREMENTS, [plan_id=7] (46) HashAggregate [codegen id : 17] -Input [6]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, count#31] -Keys [5]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29] +Input [6]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, count#25] +Keys [5]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#33] -Results [8]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, count(1)#33 AS cnt1#34, cd_purchase_estimate#28, count(1)#33 AS cnt2#35, cd_credit_rating#29, count(1)#33 AS cnt3#36] +Aggregate Attributes [1]: [count(1)#26] +Results [8]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, count(1)#26 AS cnt1#27, cd_purchase_estimate#22, count(1)#26 AS cnt2#28, cd_credit_rating#23, count(1)#26 AS cnt3#29] (47) TakeOrderedAndProject -Input [8]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cnt1#34, cd_purchase_estimate#28, cnt2#35, cd_credit_rating#29, cnt3#36] -Arguments: 100, [cd_gender#25 ASC NULLS FIRST, cd_marital_status#26 ASC NULLS FIRST, cd_education_status#27 ASC NULLS FIRST, cd_purchase_estimate#28 ASC NULLS FIRST, cd_credit_rating#29 ASC NULLS FIRST], [cd_gender#25, cd_marital_status#26, cd_education_status#27, cnt1#34, cd_purchase_estimate#28, cnt2#35, cd_credit_rating#29, cnt3#36] +Input [8]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cnt1#27, cd_purchase_estimate#22, cnt2#28, cd_credit_rating#23, cnt3#29] +Arguments: 100, [cd_gender#19 ASC NULLS FIRST, cd_marital_status#20 ASC NULLS FIRST, cd_education_status#21 ASC NULLS FIRST, cd_purchase_estimate#22 ASC NULLS FIRST, cd_credit_rating#23 ASC NULLS FIRST], [cd_gender#19, cd_marital_status#20, cd_education_status#21, cnt1#27, cd_purchase_estimate#22, cnt2#28, cd_credit_rating#23, cnt3#29] ===== Subqueries ===== @@ -272,42 +272,42 @@ ObjectHashAggregate (54) (48) Scan parquet default.customer_address -Output [2]: [ca_address_sk#20, ca_state#21] +Output [2]: [ca_address_sk#16, ca_state#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [GA,KY,NM]), IsNotNull(ca_address_sk)] ReadSchema: struct (49) ColumnarToRow [codegen id : 1] -Input [2]: [ca_address_sk#20, ca_state#21] +Input [2]: [ca_address_sk#16, ca_state#17] (50) Filter [codegen id : 1] -Input [2]: [ca_address_sk#20, ca_state#21] -Condition : (ca_state#21 IN (KY,GA,NM) AND isnotnull(ca_address_sk#20)) +Input [2]: [ca_address_sk#16, ca_state#17] +Condition : (ca_state#17 IN (KY,GA,NM) AND isnotnull(ca_address_sk#16)) (51) Project [codegen id : 1] -Output [1]: [ca_address_sk#20] -Input [2]: [ca_address_sk#20, ca_state#21] +Output [1]: [ca_address_sk#16] +Input [2]: [ca_address_sk#16, ca_state#17] (52) ObjectHashAggregate -Input [1]: [ca_address_sk#20] +Input [1]: [ca_address_sk#16] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 55556, 444448, 0, 0)] -Aggregate Attributes [1]: [buf#37] -Results [1]: [buf#38] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#16, 42), 55556, 444448, 0, 0)] +Aggregate Attributes [1]: [buf#30] +Results [1]: [buf#31] (53) Exchange -Input [1]: [buf#38] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#39] +Input [1]: [buf#31] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8] (54) ObjectHashAggregate -Input [1]: [buf#38] +Input [1]: [buf#31] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 55556, 444448, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 55556, 444448, 0, 0)#40] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 55556, 444448, 0, 0)#40 AS bloomFilter#41] +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#16, 42), 55556, 444448, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#16, 42), 55556, 444448, 0, 0)#32] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#16, 42), 55556, 444448, 0, 0)#32 AS bloomFilter#33] -Subquery:2 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 +Subquery:2 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 BroadcastExchange (59) +- * Project (58) +- * Filter (57) @@ -316,29 +316,29 @@ BroadcastExchange (59) (55) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#42, d_moy#43] +Output [3]: [d_date_sk#9, d_year#34, d_moy#35] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,6), IsNotNull(d_date_sk)] ReadSchema: struct (56) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#42, d_moy#43] +Input [3]: [d_date_sk#9, d_year#34, d_moy#35] (57) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#42, d_moy#43] -Condition : (((((isnotnull(d_year#42) AND isnotnull(d_moy#43)) AND (d_year#42 = 2001)) AND (d_moy#43 >= 4)) AND (d_moy#43 <= 6)) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#9, d_year#34, d_moy#35] +Condition : (((((isnotnull(d_year#34) AND isnotnull(d_moy#35)) AND (d_year#34 = 2001)) AND (d_moy#35 >= 4)) AND (d_moy#35 <= 6)) AND isnotnull(d_date_sk#9)) (58) Project [codegen id : 1] -Output [1]: [d_date_sk#10] -Input [3]: [d_date_sk#10, d_year#42, d_moy#43] +Output [1]: [d_date_sk#9] +Input [3]: [d_date_sk#9, d_year#34, d_moy#35] (59) BroadcastExchange -Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#44] +Input [1]: [d_date_sk#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:3 Hosting operator id = 14 Hosting Expression = ws_sold_date_sk#13 IN dynamicpruning#9 +Subquery:3 Hosting operator id = 14 Hosting Expression = ws_sold_date_sk#11 IN dynamicpruning#8 -Subquery:4 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#17 IN dynamicpruning#9 +Subquery:4 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#14 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69/explain.txt index f509fa18d6971..b51f1f102ed03 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q69/explain.txt @@ -81,7 +81,7 @@ Input [3]: [ss_customer_sk#4, ss_sold_date_sk#5, d_date_sk#7] (9) BroadcastExchange Input [1]: [ss_customer_sk#4] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#1] @@ -89,65 +89,65 @@ Right keys [1]: [ss_customer_sk#4] Join condition: None (11) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#9, ws_sold_date_sk#10] +Output [2]: [ws_bill_customer_sk#8, ws_sold_date_sk#9] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#10), dynamicpruningexpression(ws_sold_date_sk#10 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(ws_sold_date_sk#9), dynamicpruningexpression(ws_sold_date_sk#9 IN dynamicpruning#6)] ReadSchema: struct (12) ColumnarToRow [codegen id : 4] -Input [2]: [ws_bill_customer_sk#9, ws_sold_date_sk#10] +Input [2]: [ws_bill_customer_sk#8, ws_sold_date_sk#9] (13) ReusedExchange [Reuses operator id: 47] -Output [1]: [d_date_sk#11] +Output [1]: [d_date_sk#10] (14) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ws_sold_date_sk#10] -Right keys [1]: [d_date_sk#11] +Left keys [1]: [ws_sold_date_sk#9] +Right keys [1]: [d_date_sk#10] Join condition: None (15) Project [codegen id : 4] -Output [1]: [ws_bill_customer_sk#9] -Input [3]: [ws_bill_customer_sk#9, ws_sold_date_sk#10, d_date_sk#11] +Output [1]: [ws_bill_customer_sk#8] +Input [3]: [ws_bill_customer_sk#8, ws_sold_date_sk#9, d_date_sk#10] (16) BroadcastExchange -Input [1]: [ws_bill_customer_sk#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Input [1]: [ws_bill_customer_sk#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [ws_bill_customer_sk#9] +Right keys [1]: [ws_bill_customer_sk#8] Join condition: None (18) Scan parquet default.catalog_sales -Output [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] +Output [2]: [cs_ship_customer_sk#11, cs_sold_date_sk#12] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#14), dynamicpruningexpression(cs_sold_date_sk#14 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(cs_sold_date_sk#12), dynamicpruningexpression(cs_sold_date_sk#12 IN dynamicpruning#6)] ReadSchema: struct (19) ColumnarToRow [codegen id : 6] -Input [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] +Input [2]: [cs_ship_customer_sk#11, cs_sold_date_sk#12] (20) ReusedExchange [Reuses operator id: 47] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#13] (21) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [cs_sold_date_sk#14] -Right keys [1]: [d_date_sk#15] +Left keys [1]: [cs_sold_date_sk#12] +Right keys [1]: [d_date_sk#13] Join condition: None (22) Project [codegen id : 6] -Output [1]: [cs_ship_customer_sk#13] -Input [3]: [cs_ship_customer_sk#13, cs_sold_date_sk#14, d_date_sk#15] +Output [1]: [cs_ship_customer_sk#11] +Input [3]: [cs_ship_customer_sk#11, cs_sold_date_sk#12, d_date_sk#13] (23) BroadcastExchange -Input [1]: [cs_ship_customer_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16] +Input [1]: [cs_ship_customer_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [cs_ship_customer_sk#13] +Right keys [1]: [cs_ship_customer_sk#11] Join condition: None (25) Project [codegen id : 9] @@ -155,84 +155,84 @@ Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] (26) Scan parquet default.customer_address -Output [2]: [ca_address_sk#17, ca_state#18] +Output [2]: [ca_address_sk#14, ca_state#15] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [GA,KY,NM]), IsNotNull(ca_address_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 7] -Input [2]: [ca_address_sk#17, ca_state#18] +Input [2]: [ca_address_sk#14, ca_state#15] (28) Filter [codegen id : 7] -Input [2]: [ca_address_sk#17, ca_state#18] -Condition : (ca_state#18 IN (KY,GA,NM) AND isnotnull(ca_address_sk#17)) +Input [2]: [ca_address_sk#14, ca_state#15] +Condition : (ca_state#15 IN (KY,GA,NM) AND isnotnull(ca_address_sk#14)) (29) Project [codegen id : 7] -Output [1]: [ca_address_sk#17] -Input [2]: [ca_address_sk#17, ca_state#18] +Output [1]: [ca_address_sk#14] +Input [2]: [ca_address_sk#14, ca_state#15] (30) BroadcastExchange -Input [1]: [ca_address_sk#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#19] +Input [1]: [ca_address_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (31) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_current_addr_sk#3] -Right keys [1]: [ca_address_sk#17] +Right keys [1]: [ca_address_sk#14] Join condition: None (32) Project [codegen id : 9] Output [1]: [c_current_cdemo_sk#2] -Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#17] +Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#14] (33) Scan parquet default.customer_demographics -Output [6]: [cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25] +Output [6]: [cd_demo_sk#16, cd_gender#17, cd_marital_status#18, cd_education_status#19, cd_purchase_estimate#20, cd_credit_rating#21] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 8] -Input [6]: [cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25] +Input [6]: [cd_demo_sk#16, cd_gender#17, cd_marital_status#18, cd_education_status#19, cd_purchase_estimate#20, cd_credit_rating#21] (35) Filter [codegen id : 8] -Input [6]: [cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25] -Condition : isnotnull(cd_demo_sk#20) +Input [6]: [cd_demo_sk#16, cd_gender#17, cd_marital_status#18, cd_education_status#19, cd_purchase_estimate#20, cd_credit_rating#21] +Condition : isnotnull(cd_demo_sk#16) (36) BroadcastExchange -Input [6]: [cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#26] +Input [6]: [cd_demo_sk#16, cd_gender#17, cd_marital_status#18, cd_education_status#19, cd_purchase_estimate#20, cd_credit_rating#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (37) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_current_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#20] +Right keys [1]: [cd_demo_sk#16] Join condition: None (38) Project [codegen id : 9] -Output [5]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25] -Input [7]: [c_current_cdemo_sk#2, cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25] +Output [5]: [cd_gender#17, cd_marital_status#18, cd_education_status#19, cd_purchase_estimate#20, cd_credit_rating#21] +Input [7]: [c_current_cdemo_sk#2, cd_demo_sk#16, cd_gender#17, cd_marital_status#18, cd_education_status#19, cd_purchase_estimate#20, cd_credit_rating#21] (39) HashAggregate [codegen id : 9] -Input [5]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25] -Keys [5]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25] +Input [5]: [cd_gender#17, cd_marital_status#18, cd_education_status#19, cd_purchase_estimate#20, cd_credit_rating#21] +Keys [5]: [cd_gender#17, cd_marital_status#18, cd_education_status#19, cd_purchase_estimate#20, cd_credit_rating#21] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#27] -Results [6]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, count#28] +Aggregate Attributes [1]: [count#22] +Results [6]: [cd_gender#17, cd_marital_status#18, cd_education_status#19, cd_purchase_estimate#20, cd_credit_rating#21, count#23] (40) Exchange -Input [6]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, count#28] -Arguments: hashpartitioning(cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [6]: [cd_gender#17, cd_marital_status#18, cd_education_status#19, cd_purchase_estimate#20, cd_credit_rating#21, count#23] +Arguments: hashpartitioning(cd_gender#17, cd_marital_status#18, cd_education_status#19, cd_purchase_estimate#20, cd_credit_rating#21, 5), ENSURE_REQUIREMENTS, [plan_id=6] (41) HashAggregate [codegen id : 10] -Input [6]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, count#28] -Keys [5]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25] +Input [6]: [cd_gender#17, cd_marital_status#18, cd_education_status#19, cd_purchase_estimate#20, cd_credit_rating#21, count#23] +Keys [5]: [cd_gender#17, cd_marital_status#18, cd_education_status#19, cd_purchase_estimate#20, cd_credit_rating#21] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#30] -Results [8]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, count(1)#30 AS cnt1#31, cd_purchase_estimate#24, count(1)#30 AS cnt2#32, cd_credit_rating#25, count(1)#30 AS cnt3#33] +Aggregate Attributes [1]: [count(1)#24] +Results [8]: [cd_gender#17, cd_marital_status#18, cd_education_status#19, count(1)#24 AS cnt1#25, cd_purchase_estimate#20, count(1)#24 AS cnt2#26, cd_credit_rating#21, count(1)#24 AS cnt3#27] (42) TakeOrderedAndProject -Input [8]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cnt1#31, cd_purchase_estimate#24, cnt2#32, cd_credit_rating#25, cnt3#33] -Arguments: 100, [cd_gender#21 ASC NULLS FIRST, cd_marital_status#22 ASC NULLS FIRST, cd_education_status#23 ASC NULLS FIRST, cd_purchase_estimate#24 ASC NULLS FIRST, cd_credit_rating#25 ASC NULLS FIRST], [cd_gender#21, cd_marital_status#22, cd_education_status#23, cnt1#31, cd_purchase_estimate#24, cnt2#32, cd_credit_rating#25, cnt3#33] +Input [8]: [cd_gender#17, cd_marital_status#18, cd_education_status#19, cnt1#25, cd_purchase_estimate#20, cnt2#26, cd_credit_rating#21, cnt3#27] +Arguments: 100, [cd_gender#17 ASC NULLS FIRST, cd_marital_status#18 ASC NULLS FIRST, cd_education_status#19 ASC NULLS FIRST, cd_purchase_estimate#20 ASC NULLS FIRST, cd_credit_rating#21 ASC NULLS FIRST], [cd_gender#17, cd_marital_status#18, cd_education_status#19, cnt1#25, cd_purchase_estimate#20, cnt2#26, cd_credit_rating#21, cnt3#27] ===== Subqueries ===== @@ -245,29 +245,29 @@ BroadcastExchange (47) (43) Scan parquet default.date_dim -Output [3]: [d_date_sk#7, d_year#34, d_moy#35] +Output [3]: [d_date_sk#7, d_year#28, d_moy#29] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,6), IsNotNull(d_date_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#34, d_moy#35] +Input [3]: [d_date_sk#7, d_year#28, d_moy#29] (45) Filter [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#34, d_moy#35] -Condition : (((((isnotnull(d_year#34) AND isnotnull(d_moy#35)) AND (d_year#34 = 2001)) AND (d_moy#35 >= 4)) AND (d_moy#35 <= 6)) AND isnotnull(d_date_sk#7)) +Input [3]: [d_date_sk#7, d_year#28, d_moy#29] +Condition : (((((isnotnull(d_year#28) AND isnotnull(d_moy#29)) AND (d_year#28 = 2001)) AND (d_moy#29 >= 4)) AND (d_moy#29 <= 6)) AND isnotnull(d_date_sk#7)) (46) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [3]: [d_date_sk#7, d_year#34, d_moy#35] +Input [3]: [d_date_sk#7, d_year#28, d_moy#29] (47) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#36] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:2 Hosting operator id = 11 Hosting Expression = ws_sold_date_sk#10 IN dynamicpruning#6 +Subquery:2 Hosting operator id = 11 Hosting Expression = ws_sold_date_sk#9 IN dynamicpruning#6 -Subquery:3 Hosting operator id = 18 Hosting Expression = cs_sold_date_sk#14 IN dynamicpruning#6 +Subquery:3 Hosting operator id = 18 Hosting Expression = cs_sold_date_sk#12 IN dynamicpruning#6 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q7.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q7.sf100/explain.txt index 129cee0449f6a..4a0446c5c454b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q7.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q7.sf100/explain.txt @@ -66,7 +66,7 @@ Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_stat (8) BroadcastExchange Input [1]: [cd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_cdemo_sk#2] @@ -78,96 +78,96 @@ Output [7]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10] (11) Scan parquet default.promotion -Output [3]: [p_promo_sk#15, p_channel_email#16, p_channel_event#17] +Output [3]: [p_promo_sk#14, p_channel_email#15, p_channel_event#16] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [Or(EqualTo(p_channel_email,N),EqualTo(p_channel_event,N)), IsNotNull(p_promo_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [3]: [p_promo_sk#15, p_channel_email#16, p_channel_event#17] +Input [3]: [p_promo_sk#14, p_channel_email#15, p_channel_event#16] (13) Filter [codegen id : 2] -Input [3]: [p_promo_sk#15, p_channel_email#16, p_channel_event#17] -Condition : (((p_channel_email#16 = N) OR (p_channel_event#17 = N)) AND isnotnull(p_promo_sk#15)) +Input [3]: [p_promo_sk#14, p_channel_email#15, p_channel_event#16] +Condition : (((p_channel_email#15 = N) OR (p_channel_event#16 = N)) AND isnotnull(p_promo_sk#14)) (14) Project [codegen id : 2] -Output [1]: [p_promo_sk#15] -Input [3]: [p_promo_sk#15, p_channel_email#16, p_channel_event#17] +Output [1]: [p_promo_sk#14] +Input [3]: [p_promo_sk#14, p_channel_email#15, p_channel_event#16] (15) BroadcastExchange -Input [1]: [p_promo_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [1]: [p_promo_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_promo_sk#3] -Right keys [1]: [p_promo_sk#15] +Right keys [1]: [p_promo_sk#14] Join condition: None (17) Project [codegen id : 5] Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8] -Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, p_promo_sk#15] +Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, p_promo_sk#14] (18) ReusedExchange [Reuses operator id: 35] -Output [1]: [d_date_sk#19] +Output [1]: [d_date_sk#17] (19) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#19] +Right keys [1]: [d_date_sk#17] Join condition: None (20) Project [codegen id : 5] Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#19] +Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#17] (21) Scan parquet default.item -Output [2]: [i_item_sk#20, i_item_id#21] +Output [2]: [i_item_sk#18, i_item_id#19] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#20, i_item_id#21] +Input [2]: [i_item_sk#18, i_item_id#19] (23) Filter [codegen id : 4] -Input [2]: [i_item_sk#20, i_item_id#21] -Condition : isnotnull(i_item_sk#20) +Input [2]: [i_item_sk#18, i_item_id#19] +Condition : isnotnull(i_item_sk#18) (24) BroadcastExchange -Input [2]: [i_item_sk#20, i_item_id#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#22] +Input [2]: [i_item_sk#18, i_item_id#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (25) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#20] +Right keys [1]: [i_item_sk#18] Join condition: None (26) Project [codegen id : 5] -Output [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#21] -Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#20, i_item_id#21] +Output [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#19] +Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#18, i_item_id#19] (27) HashAggregate [codegen id : 5] -Input [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#21] -Keys [1]: [i_item_id#21] +Input [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#19] +Keys [1]: [i_item_id#19] Functions [4]: [partial_avg(ss_quantity#4), partial_avg(UnscaledValue(ss_list_price#5)), partial_avg(UnscaledValue(ss_coupon_amt#7)), partial_avg(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [8]: [sum#23, count#24, sum#25, count#26, sum#27, count#28, sum#29, count#30] -Results [9]: [i_item_id#21, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] +Aggregate Attributes [8]: [sum#20, count#21, sum#22, count#23, sum#24, count#25, sum#26, count#27] +Results [9]: [i_item_id#19, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] (28) Exchange -Input [9]: [i_item_id#21, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] -Arguments: hashpartitioning(i_item_id#21, 5), ENSURE_REQUIREMENTS, [id=#39] +Input [9]: [i_item_id#19, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] +Arguments: hashpartitioning(i_item_id#19, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 6] -Input [9]: [i_item_id#21, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] -Keys [1]: [i_item_id#21] +Input [9]: [i_item_id#19, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] +Keys [1]: [i_item_id#19] Functions [4]: [avg(ss_quantity#4), avg(UnscaledValue(ss_list_price#5)), avg(UnscaledValue(ss_coupon_amt#7)), avg(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [4]: [avg(ss_quantity#4)#40, avg(UnscaledValue(ss_list_price#5))#41, avg(UnscaledValue(ss_coupon_amt#7))#42, avg(UnscaledValue(ss_sales_price#6))#43] -Results [5]: [i_item_id#21, avg(ss_quantity#4)#40 AS agg1#44, cast((avg(UnscaledValue(ss_list_price#5))#41 / 100.0) as decimal(11,6)) AS agg2#45, cast((avg(UnscaledValue(ss_coupon_amt#7))#42 / 100.0) as decimal(11,6)) AS agg3#46, cast((avg(UnscaledValue(ss_sales_price#6))#43 / 100.0) as decimal(11,6)) AS agg4#47] +Aggregate Attributes [4]: [avg(ss_quantity#4)#36, avg(UnscaledValue(ss_list_price#5))#37, avg(UnscaledValue(ss_coupon_amt#7))#38, avg(UnscaledValue(ss_sales_price#6))#39] +Results [5]: [i_item_id#19, avg(ss_quantity#4)#36 AS agg1#40, cast((avg(UnscaledValue(ss_list_price#5))#37 / 100.0) as decimal(11,6)) AS agg2#41, cast((avg(UnscaledValue(ss_coupon_amt#7))#38 / 100.0) as decimal(11,6)) AS agg3#42, cast((avg(UnscaledValue(ss_sales_price#6))#39 / 100.0) as decimal(11,6)) AS agg4#43] (30) TakeOrderedAndProject -Input [5]: [i_item_id#21, agg1#44, agg2#45, agg3#46, agg4#47] -Arguments: 100, [i_item_id#21 ASC NULLS FIRST], [i_item_id#21, agg1#44, agg2#45, agg3#46, agg4#47] +Input [5]: [i_item_id#19, agg1#40, agg2#41, agg3#42, agg4#43] +Arguments: 100, [i_item_id#19 ASC NULLS FIRST], [i_item_id#19, agg1#40, agg2#41, agg3#42, agg4#43] ===== Subqueries ===== @@ -180,25 +180,25 @@ BroadcastExchange (35) (31) Scan parquet default.date_dim -Output [2]: [d_date_sk#19, d_year#48] +Output [2]: [d_date_sk#17, d_year#44] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#19, d_year#48] +Input [2]: [d_date_sk#17, d_year#44] (33) Filter [codegen id : 1] -Input [2]: [d_date_sk#19, d_year#48] -Condition : ((isnotnull(d_year#48) AND (d_year#48 = 2000)) AND isnotnull(d_date_sk#19)) +Input [2]: [d_date_sk#17, d_year#44] +Condition : ((isnotnull(d_year#44) AND (d_year#44 = 2000)) AND isnotnull(d_date_sk#17)) (34) Project [codegen id : 1] -Output [1]: [d_date_sk#19] -Input [2]: [d_date_sk#19, d_year#48] +Output [1]: [d_date_sk#17] +Input [2]: [d_date_sk#17, d_year#44] (35) BroadcastExchange -Input [1]: [d_date_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#49] +Input [1]: [d_date_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q7/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q7/explain.txt index d01608cf02add..8a3e7d3fefaea 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q7/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q7/explain.txt @@ -66,7 +66,7 @@ Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_stat (8) BroadcastExchange Input [1]: [cd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_cdemo_sk#2] @@ -78,96 +78,96 @@ Output [7]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10] (11) ReusedExchange [Reuses operator id: 35] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (13) Project [codegen id : 5] Output [6]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15] +Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#14] (14) Scan parquet default.item -Output [2]: [i_item_sk#16, i_item_id#17] +Output [2]: [i_item_sk#15, i_item_id#16] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [2]: [i_item_sk#16, i_item_id#17] +Input [2]: [i_item_sk#15, i_item_id#16] (16) Filter [codegen id : 3] -Input [2]: [i_item_sk#16, i_item_id#17] -Condition : isnotnull(i_item_sk#16) +Input [2]: [i_item_sk#15, i_item_id#16] +Condition : isnotnull(i_item_sk#15) (17) BroadcastExchange -Input [2]: [i_item_sk#16, i_item_id#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#18] +Input [2]: [i_item_sk#15, i_item_id#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#16] +Right keys [1]: [i_item_sk#15] Join condition: None (19) Project [codegen id : 5] -Output [6]: [ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#17] -Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#16, i_item_id#17] +Output [6]: [ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#16] +Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#15, i_item_id#16] (20) Scan parquet default.promotion -Output [3]: [p_promo_sk#19, p_channel_email#20, p_channel_event#21] +Output [3]: [p_promo_sk#17, p_channel_email#18, p_channel_event#19] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [Or(EqualTo(p_channel_email,N),EqualTo(p_channel_event,N)), IsNotNull(p_promo_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [3]: [p_promo_sk#19, p_channel_email#20, p_channel_event#21] +Input [3]: [p_promo_sk#17, p_channel_email#18, p_channel_event#19] (22) Filter [codegen id : 4] -Input [3]: [p_promo_sk#19, p_channel_email#20, p_channel_event#21] -Condition : (((p_channel_email#20 = N) OR (p_channel_event#21 = N)) AND isnotnull(p_promo_sk#19)) +Input [3]: [p_promo_sk#17, p_channel_email#18, p_channel_event#19] +Condition : (((p_channel_email#18 = N) OR (p_channel_event#19 = N)) AND isnotnull(p_promo_sk#17)) (23) Project [codegen id : 4] -Output [1]: [p_promo_sk#19] -Input [3]: [p_promo_sk#19, p_channel_email#20, p_channel_event#21] +Output [1]: [p_promo_sk#17] +Input [3]: [p_promo_sk#17, p_channel_email#18, p_channel_event#19] (24) BroadcastExchange -Input [1]: [p_promo_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [p_promo_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (25) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_promo_sk#3] -Right keys [1]: [p_promo_sk#19] +Right keys [1]: [p_promo_sk#17] Join condition: None (26) Project [codegen id : 5] -Output [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#17] -Input [7]: [ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#17, p_promo_sk#19] +Output [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#16] +Input [7]: [ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#16, p_promo_sk#17] (27) HashAggregate [codegen id : 5] -Input [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#17] -Keys [1]: [i_item_id#17] +Input [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#16] +Keys [1]: [i_item_id#16] Functions [4]: [partial_avg(ss_quantity#4), partial_avg(UnscaledValue(ss_list_price#5)), partial_avg(UnscaledValue(ss_coupon_amt#7)), partial_avg(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [8]: [sum#23, count#24, sum#25, count#26, sum#27, count#28, sum#29, count#30] -Results [9]: [i_item_id#17, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] +Aggregate Attributes [8]: [sum#20, count#21, sum#22, count#23, sum#24, count#25, sum#26, count#27] +Results [9]: [i_item_id#16, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] (28) Exchange -Input [9]: [i_item_id#17, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] -Arguments: hashpartitioning(i_item_id#17, 5), ENSURE_REQUIREMENTS, [id=#39] +Input [9]: [i_item_id#16, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] +Arguments: hashpartitioning(i_item_id#16, 5), ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 6] -Input [9]: [i_item_id#17, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] -Keys [1]: [i_item_id#17] +Input [9]: [i_item_id#16, sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35] +Keys [1]: [i_item_id#16] Functions [4]: [avg(ss_quantity#4), avg(UnscaledValue(ss_list_price#5)), avg(UnscaledValue(ss_coupon_amt#7)), avg(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [4]: [avg(ss_quantity#4)#40, avg(UnscaledValue(ss_list_price#5))#41, avg(UnscaledValue(ss_coupon_amt#7))#42, avg(UnscaledValue(ss_sales_price#6))#43] -Results [5]: [i_item_id#17, avg(ss_quantity#4)#40 AS agg1#44, cast((avg(UnscaledValue(ss_list_price#5))#41 / 100.0) as decimal(11,6)) AS agg2#45, cast((avg(UnscaledValue(ss_coupon_amt#7))#42 / 100.0) as decimal(11,6)) AS agg3#46, cast((avg(UnscaledValue(ss_sales_price#6))#43 / 100.0) as decimal(11,6)) AS agg4#47] +Aggregate Attributes [4]: [avg(ss_quantity#4)#36, avg(UnscaledValue(ss_list_price#5))#37, avg(UnscaledValue(ss_coupon_amt#7))#38, avg(UnscaledValue(ss_sales_price#6))#39] +Results [5]: [i_item_id#16, avg(ss_quantity#4)#36 AS agg1#40, cast((avg(UnscaledValue(ss_list_price#5))#37 / 100.0) as decimal(11,6)) AS agg2#41, cast((avg(UnscaledValue(ss_coupon_amt#7))#38 / 100.0) as decimal(11,6)) AS agg3#42, cast((avg(UnscaledValue(ss_sales_price#6))#39 / 100.0) as decimal(11,6)) AS agg4#43] (30) TakeOrderedAndProject -Input [5]: [i_item_id#17, agg1#44, agg2#45, agg3#46, agg4#47] -Arguments: 100, [i_item_id#17 ASC NULLS FIRST], [i_item_id#17, agg1#44, agg2#45, agg3#46, agg4#47] +Input [5]: [i_item_id#16, agg1#40, agg2#41, agg3#42, agg4#43] +Arguments: 100, [i_item_id#16 ASC NULLS FIRST], [i_item_id#16, agg1#40, agg2#41, agg3#42, agg4#43] ===== Subqueries ===== @@ -180,25 +180,25 @@ BroadcastExchange (35) (31) Scan parquet default.date_dim -Output [2]: [d_date_sk#15, d_year#48] +Output [2]: [d_date_sk#14, d_year#44] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#48] +Input [2]: [d_date_sk#14, d_year#44] (33) Filter [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#48] -Condition : ((isnotnull(d_year#48) AND (d_year#48 = 2000)) AND isnotnull(d_date_sk#15)) +Input [2]: [d_date_sk#14, d_year#44] +Condition : ((isnotnull(d_year#44) AND (d_year#44 = 2000)) AND isnotnull(d_date_sk#14)) (34) Project [codegen id : 1] -Output [1]: [d_date_sk#15] -Input [2]: [d_date_sk#15, d_year#48] +Output [1]: [d_date_sk#14] +Input [2]: [d_date_sk#14, d_year#44] (35) BroadcastExchange -Input [1]: [d_date_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#49] +Input [1]: [d_date_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70.sf100/explain.txt index f18d02d50e0af..a417a39c633bc 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70.sf100/explain.txt @@ -127,7 +127,7 @@ Condition : isnotnull(s_store_sk#13) (19) BroadcastExchange Input [2]: [s_store_sk#13, s_state#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (20) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#9] @@ -142,39 +142,39 @@ Input [4]: [ss_store_sk#9, ss_net_profit#10, s_store_sk#13, s_state#14] Input [2]: [ss_net_profit#10, s_state#14] Keys [1]: [s_state#14] Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#10))] -Aggregate Attributes [1]: [sum#16] -Results [2]: [s_state#14, sum#17] +Aggregate Attributes [1]: [sum#15] +Results [2]: [s_state#14, sum#16] (23) Exchange -Input [2]: [s_state#14, sum#17] -Arguments: hashpartitioning(s_state#14, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [2]: [s_state#14, sum#16] +Arguments: hashpartitioning(s_state#14, 5), ENSURE_REQUIREMENTS, [plan_id=2] (24) HashAggregate [codegen id : 5] -Input [2]: [s_state#14, sum#17] +Input [2]: [s_state#14, sum#16] Keys [1]: [s_state#14] Functions [1]: [sum(UnscaledValue(ss_net_profit#10))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#10))#19] -Results [3]: [s_state#14, s_state#14, MakeDecimal(sum(UnscaledValue(ss_net_profit#10))#19,17,2) AS _w2#20] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#10))#17] +Results [3]: [s_state#14, s_state#14, MakeDecimal(sum(UnscaledValue(ss_net_profit#10))#17,17,2) AS _w2#18] (25) Sort [codegen id : 5] -Input [3]: [s_state#14, s_state#14, _w2#20] -Arguments: [s_state#14 ASC NULLS FIRST, _w2#20 DESC NULLS LAST], false, 0 +Input [3]: [s_state#14, s_state#14, _w2#18] +Arguments: [s_state#14 ASC NULLS FIRST, _w2#18 DESC NULLS LAST], false, 0 (26) Window -Input [3]: [s_state#14, s_state#14, _w2#20] -Arguments: [rank(_w2#20) windowspecdefinition(s_state#14, _w2#20 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS ranking#21], [s_state#14], [_w2#20 DESC NULLS LAST] +Input [3]: [s_state#14, s_state#14, _w2#18] +Arguments: [rank(_w2#18) windowspecdefinition(s_state#14, _w2#18 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS ranking#19], [s_state#14], [_w2#18 DESC NULLS LAST] (27) Filter [codegen id : 6] -Input [4]: [s_state#14, s_state#14, _w2#20, ranking#21] -Condition : (ranking#21 <= 5) +Input [4]: [s_state#14, s_state#14, _w2#18, ranking#19] +Condition : (ranking#19 <= 5) (28) Project [codegen id : 6] Output [1]: [s_state#14] -Input [4]: [s_state#14, s_state#14, _w2#20, ranking#21] +Input [4]: [s_state#14, s_state#14, _w2#18, ranking#19] (29) BroadcastExchange Input [1]: [s_state#14] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#22] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=3] (30) BroadcastHashJoin [codegen id : 7] Left keys [1]: [s_state#8] @@ -183,7 +183,7 @@ Join condition: None (31) BroadcastExchange Input [3]: [s_store_sk#6, s_county#7, s_state#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (32) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_store_sk#1] @@ -196,45 +196,45 @@ Input [5]: [ss_store_sk#1, ss_net_profit#2, s_store_sk#6, s_county#7, s_state#8] (34) Expand [codegen id : 8] Input [3]: [ss_net_profit#2, s_state#8, s_county#7] -Arguments: [[ss_net_profit#2, s_state#8, s_county#7, 0], [ss_net_profit#2, s_state#8, null, 1], [ss_net_profit#2, null, null, 3]], [ss_net_profit#2, s_state#24, s_county#25, spark_grouping_id#26] +Arguments: [[ss_net_profit#2, s_state#8, s_county#7, 0], [ss_net_profit#2, s_state#8, null, 1], [ss_net_profit#2, null, null, 3]], [ss_net_profit#2, s_state#20, s_county#21, spark_grouping_id#22] (35) HashAggregate [codegen id : 8] -Input [4]: [ss_net_profit#2, s_state#24, s_county#25, spark_grouping_id#26] -Keys [3]: [s_state#24, s_county#25, spark_grouping_id#26] +Input [4]: [ss_net_profit#2, s_state#20, s_county#21, spark_grouping_id#22] +Keys [3]: [s_state#20, s_county#21, spark_grouping_id#22] Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum#27] -Results [4]: [s_state#24, s_county#25, spark_grouping_id#26, sum#28] +Aggregate Attributes [1]: [sum#23] +Results [4]: [s_state#20, s_county#21, spark_grouping_id#22, sum#24] (36) Exchange -Input [4]: [s_state#24, s_county#25, spark_grouping_id#26, sum#28] -Arguments: hashpartitioning(s_state#24, s_county#25, spark_grouping_id#26, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [4]: [s_state#20, s_county#21, spark_grouping_id#22, sum#24] +Arguments: hashpartitioning(s_state#20, s_county#21, spark_grouping_id#22, 5), ENSURE_REQUIREMENTS, [plan_id=5] (37) HashAggregate [codegen id : 9] -Input [4]: [s_state#24, s_county#25, spark_grouping_id#26, sum#28] -Keys [3]: [s_state#24, s_county#25, spark_grouping_id#26] +Input [4]: [s_state#20, s_county#21, spark_grouping_id#22, sum#24] +Keys [3]: [s_state#20, s_county#21, spark_grouping_id#22] Functions [1]: [sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#30] -Results [7]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#30,17,2) AS total_sum#31, s_state#24, s_county#25, (cast((shiftright(spark_grouping_id#26, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#26, 0) & 1) as tinyint)) AS lochierarchy#32, (cast((shiftright(spark_grouping_id#26, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#26, 0) & 1) as tinyint)) AS _w1#33, CASE WHEN (cast((shiftright(spark_grouping_id#26, 0) & 1) as tinyint) = 0) THEN s_state#24 END AS _w2#34, MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#30,17,2) AS _w3#35] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#25] +Results [7]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#25,17,2) AS total_sum#26, s_state#20, s_county#21, (cast((shiftright(spark_grouping_id#22, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#22, 0) & 1) as tinyint)) AS lochierarchy#27, (cast((shiftright(spark_grouping_id#22, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#22, 0) & 1) as tinyint)) AS _w1#28, CASE WHEN (cast((shiftright(spark_grouping_id#22, 0) & 1) as tinyint) = 0) THEN s_state#20 END AS _w2#29, MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#25,17,2) AS _w3#30] (38) Exchange -Input [7]: [total_sum#31, s_state#24, s_county#25, lochierarchy#32, _w1#33, _w2#34, _w3#35] -Arguments: hashpartitioning(_w1#33, _w2#34, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [7]: [total_sum#26, s_state#20, s_county#21, lochierarchy#27, _w1#28, _w2#29, _w3#30] +Arguments: hashpartitioning(_w1#28, _w2#29, 5), ENSURE_REQUIREMENTS, [plan_id=6] (39) Sort [codegen id : 10] -Input [7]: [total_sum#31, s_state#24, s_county#25, lochierarchy#32, _w1#33, _w2#34, _w3#35] -Arguments: [_w1#33 ASC NULLS FIRST, _w2#34 ASC NULLS FIRST, _w3#35 DESC NULLS LAST], false, 0 +Input [7]: [total_sum#26, s_state#20, s_county#21, lochierarchy#27, _w1#28, _w2#29, _w3#30] +Arguments: [_w1#28 ASC NULLS FIRST, _w2#29 ASC NULLS FIRST, _w3#30 DESC NULLS LAST], false, 0 (40) Window -Input [7]: [total_sum#31, s_state#24, s_county#25, lochierarchy#32, _w1#33, _w2#34, _w3#35] -Arguments: [rank(_w3#35) windowspecdefinition(_w1#33, _w2#34, _w3#35 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#37], [_w1#33, _w2#34], [_w3#35 DESC NULLS LAST] +Input [7]: [total_sum#26, s_state#20, s_county#21, lochierarchy#27, _w1#28, _w2#29, _w3#30] +Arguments: [rank(_w3#30) windowspecdefinition(_w1#28, _w2#29, _w3#30 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#31], [_w1#28, _w2#29], [_w3#30 DESC NULLS LAST] (41) Project [codegen id : 11] -Output [5]: [total_sum#31, s_state#24, s_county#25, lochierarchy#32, rank_within_parent#37] -Input [8]: [total_sum#31, s_state#24, s_county#25, lochierarchy#32, _w1#33, _w2#34, _w3#35, rank_within_parent#37] +Output [5]: [total_sum#26, s_state#20, s_county#21, lochierarchy#27, rank_within_parent#31] +Input [8]: [total_sum#26, s_state#20, s_county#21, lochierarchy#27, _w1#28, _w2#29, _w3#30, rank_within_parent#31] (42) TakeOrderedAndProject -Input [5]: [total_sum#31, s_state#24, s_county#25, lochierarchy#32, rank_within_parent#37] -Arguments: 100, [lochierarchy#32 DESC NULLS LAST, CASE WHEN (lochierarchy#32 = 0) THEN s_state#24 END ASC NULLS FIRST, rank_within_parent#37 ASC NULLS FIRST], [total_sum#31, s_state#24, s_county#25, lochierarchy#32, rank_within_parent#37] +Input [5]: [total_sum#26, s_state#20, s_county#21, lochierarchy#27, rank_within_parent#31] +Arguments: 100, [lochierarchy#27 DESC NULLS LAST, CASE WHEN (lochierarchy#27 = 0) THEN s_state#20 END ASC NULLS FIRST, rank_within_parent#31 ASC NULLS FIRST], [total_sum#26, s_state#20, s_county#21, lochierarchy#27, rank_within_parent#31] ===== Subqueries ===== @@ -247,26 +247,26 @@ BroadcastExchange (47) (43) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_month_seq#38] +Output [2]: [d_date_sk#5, d_month_seq#32] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#38] +Input [2]: [d_date_sk#5, d_month_seq#32] (45) Filter [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#38] -Condition : (((isnotnull(d_month_seq#38) AND (d_month_seq#38 >= 1200)) AND (d_month_seq#38 <= 1211)) AND isnotnull(d_date_sk#5)) +Input [2]: [d_date_sk#5, d_month_seq#32] +Condition : (((isnotnull(d_month_seq#32) AND (d_month_seq#32 >= 1200)) AND (d_month_seq#32 <= 1211)) AND isnotnull(d_date_sk#5)) (46) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_month_seq#38] +Input [2]: [d_date_sk#5, d_month_seq#32] (47) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#39] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] Subquery:2 Hosting operator id = 10 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70/explain.txt index 482d7a3975c56..92cae735b8b72 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q70/explain.txt @@ -115,7 +115,7 @@ Condition : isnotnull(s_store_sk#12) (16) BroadcastExchange Input [2]: [s_store_sk#12, s_state#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#9] @@ -127,54 +127,54 @@ Output [3]: [ss_net_profit#10, ss_sold_date_sk#11, s_state#13] Input [5]: [ss_store_sk#9, ss_net_profit#10, ss_sold_date_sk#11, s_store_sk#12, s_state#13] (19) ReusedExchange [Reuses operator id: 47] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (20) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_date_sk#11] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (21) Project [codegen id : 4] Output [2]: [ss_net_profit#10, s_state#13] -Input [4]: [ss_net_profit#10, ss_sold_date_sk#11, s_state#13, d_date_sk#15] +Input [4]: [ss_net_profit#10, ss_sold_date_sk#11, s_state#13, d_date_sk#14] (22) HashAggregate [codegen id : 4] Input [2]: [ss_net_profit#10, s_state#13] Keys [1]: [s_state#13] Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#10))] -Aggregate Attributes [1]: [sum#16] -Results [2]: [s_state#13, sum#17] +Aggregate Attributes [1]: [sum#15] +Results [2]: [s_state#13, sum#16] (23) Exchange -Input [2]: [s_state#13, sum#17] -Arguments: hashpartitioning(s_state#13, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [2]: [s_state#13, sum#16] +Arguments: hashpartitioning(s_state#13, 5), ENSURE_REQUIREMENTS, [plan_id=2] (24) HashAggregate [codegen id : 5] -Input [2]: [s_state#13, sum#17] +Input [2]: [s_state#13, sum#16] Keys [1]: [s_state#13] Functions [1]: [sum(UnscaledValue(ss_net_profit#10))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#10))#19] -Results [3]: [s_state#13, s_state#13, MakeDecimal(sum(UnscaledValue(ss_net_profit#10))#19,17,2) AS _w2#20] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#10))#17] +Results [3]: [s_state#13, s_state#13, MakeDecimal(sum(UnscaledValue(ss_net_profit#10))#17,17,2) AS _w2#18] (25) Sort [codegen id : 5] -Input [3]: [s_state#13, s_state#13, _w2#20] -Arguments: [s_state#13 ASC NULLS FIRST, _w2#20 DESC NULLS LAST], false, 0 +Input [3]: [s_state#13, s_state#13, _w2#18] +Arguments: [s_state#13 ASC NULLS FIRST, _w2#18 DESC NULLS LAST], false, 0 (26) Window -Input [3]: [s_state#13, s_state#13, _w2#20] -Arguments: [rank(_w2#20) windowspecdefinition(s_state#13, _w2#20 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS ranking#21], [s_state#13], [_w2#20 DESC NULLS LAST] +Input [3]: [s_state#13, s_state#13, _w2#18] +Arguments: [rank(_w2#18) windowspecdefinition(s_state#13, _w2#18 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS ranking#19], [s_state#13], [_w2#18 DESC NULLS LAST] (27) Filter [codegen id : 6] -Input [4]: [s_state#13, s_state#13, _w2#20, ranking#21] -Condition : (ranking#21 <= 5) +Input [4]: [s_state#13, s_state#13, _w2#18, ranking#19] +Condition : (ranking#19 <= 5) (28) Project [codegen id : 6] Output [1]: [s_state#13] -Input [4]: [s_state#13, s_state#13, _w2#20, ranking#21] +Input [4]: [s_state#13, s_state#13, _w2#18, ranking#19] (29) BroadcastExchange Input [1]: [s_state#13] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#22] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=3] (30) BroadcastHashJoin [codegen id : 7] Left keys [1]: [s_state#8] @@ -183,7 +183,7 @@ Join condition: None (31) BroadcastExchange Input [3]: [s_store_sk#6, s_county#7, s_state#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (32) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_store_sk#1] @@ -196,45 +196,45 @@ Input [5]: [ss_store_sk#1, ss_net_profit#2, s_store_sk#6, s_county#7, s_state#8] (34) Expand [codegen id : 8] Input [3]: [ss_net_profit#2, s_state#8, s_county#7] -Arguments: [[ss_net_profit#2, s_state#8, s_county#7, 0], [ss_net_profit#2, s_state#8, null, 1], [ss_net_profit#2, null, null, 3]], [ss_net_profit#2, s_state#24, s_county#25, spark_grouping_id#26] +Arguments: [[ss_net_profit#2, s_state#8, s_county#7, 0], [ss_net_profit#2, s_state#8, null, 1], [ss_net_profit#2, null, null, 3]], [ss_net_profit#2, s_state#20, s_county#21, spark_grouping_id#22] (35) HashAggregate [codegen id : 8] -Input [4]: [ss_net_profit#2, s_state#24, s_county#25, spark_grouping_id#26] -Keys [3]: [s_state#24, s_county#25, spark_grouping_id#26] +Input [4]: [ss_net_profit#2, s_state#20, s_county#21, spark_grouping_id#22] +Keys [3]: [s_state#20, s_county#21, spark_grouping_id#22] Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum#27] -Results [4]: [s_state#24, s_county#25, spark_grouping_id#26, sum#28] +Aggregate Attributes [1]: [sum#23] +Results [4]: [s_state#20, s_county#21, spark_grouping_id#22, sum#24] (36) Exchange -Input [4]: [s_state#24, s_county#25, spark_grouping_id#26, sum#28] -Arguments: hashpartitioning(s_state#24, s_county#25, spark_grouping_id#26, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [4]: [s_state#20, s_county#21, spark_grouping_id#22, sum#24] +Arguments: hashpartitioning(s_state#20, s_county#21, spark_grouping_id#22, 5), ENSURE_REQUIREMENTS, [plan_id=5] (37) HashAggregate [codegen id : 9] -Input [4]: [s_state#24, s_county#25, spark_grouping_id#26, sum#28] -Keys [3]: [s_state#24, s_county#25, spark_grouping_id#26] +Input [4]: [s_state#20, s_county#21, spark_grouping_id#22, sum#24] +Keys [3]: [s_state#20, s_county#21, spark_grouping_id#22] Functions [1]: [sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#30] -Results [7]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#30,17,2) AS total_sum#31, s_state#24, s_county#25, (cast((shiftright(spark_grouping_id#26, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#26, 0) & 1) as tinyint)) AS lochierarchy#32, (cast((shiftright(spark_grouping_id#26, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#26, 0) & 1) as tinyint)) AS _w1#33, CASE WHEN (cast((shiftright(spark_grouping_id#26, 0) & 1) as tinyint) = 0) THEN s_state#24 END AS _w2#34, MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#30,17,2) AS _w3#35] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#25] +Results [7]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#25,17,2) AS total_sum#26, s_state#20, s_county#21, (cast((shiftright(spark_grouping_id#22, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#22, 0) & 1) as tinyint)) AS lochierarchy#27, (cast((shiftright(spark_grouping_id#22, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#22, 0) & 1) as tinyint)) AS _w1#28, CASE WHEN (cast((shiftright(spark_grouping_id#22, 0) & 1) as tinyint) = 0) THEN s_state#20 END AS _w2#29, MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#25,17,2) AS _w3#30] (38) Exchange -Input [7]: [total_sum#31, s_state#24, s_county#25, lochierarchy#32, _w1#33, _w2#34, _w3#35] -Arguments: hashpartitioning(_w1#33, _w2#34, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [7]: [total_sum#26, s_state#20, s_county#21, lochierarchy#27, _w1#28, _w2#29, _w3#30] +Arguments: hashpartitioning(_w1#28, _w2#29, 5), ENSURE_REQUIREMENTS, [plan_id=6] (39) Sort [codegen id : 10] -Input [7]: [total_sum#31, s_state#24, s_county#25, lochierarchy#32, _w1#33, _w2#34, _w3#35] -Arguments: [_w1#33 ASC NULLS FIRST, _w2#34 ASC NULLS FIRST, _w3#35 DESC NULLS LAST], false, 0 +Input [7]: [total_sum#26, s_state#20, s_county#21, lochierarchy#27, _w1#28, _w2#29, _w3#30] +Arguments: [_w1#28 ASC NULLS FIRST, _w2#29 ASC NULLS FIRST, _w3#30 DESC NULLS LAST], false, 0 (40) Window -Input [7]: [total_sum#31, s_state#24, s_county#25, lochierarchy#32, _w1#33, _w2#34, _w3#35] -Arguments: [rank(_w3#35) windowspecdefinition(_w1#33, _w2#34, _w3#35 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#37], [_w1#33, _w2#34], [_w3#35 DESC NULLS LAST] +Input [7]: [total_sum#26, s_state#20, s_county#21, lochierarchy#27, _w1#28, _w2#29, _w3#30] +Arguments: [rank(_w3#30) windowspecdefinition(_w1#28, _w2#29, _w3#30 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#31], [_w1#28, _w2#29], [_w3#30 DESC NULLS LAST] (41) Project [codegen id : 11] -Output [5]: [total_sum#31, s_state#24, s_county#25, lochierarchy#32, rank_within_parent#37] -Input [8]: [total_sum#31, s_state#24, s_county#25, lochierarchy#32, _w1#33, _w2#34, _w3#35, rank_within_parent#37] +Output [5]: [total_sum#26, s_state#20, s_county#21, lochierarchy#27, rank_within_parent#31] +Input [8]: [total_sum#26, s_state#20, s_county#21, lochierarchy#27, _w1#28, _w2#29, _w3#30, rank_within_parent#31] (42) TakeOrderedAndProject -Input [5]: [total_sum#31, s_state#24, s_county#25, lochierarchy#32, rank_within_parent#37] -Arguments: 100, [lochierarchy#32 DESC NULLS LAST, CASE WHEN (lochierarchy#32 = 0) THEN s_state#24 END ASC NULLS FIRST, rank_within_parent#37 ASC NULLS FIRST], [total_sum#31, s_state#24, s_county#25, lochierarchy#32, rank_within_parent#37] +Input [5]: [total_sum#26, s_state#20, s_county#21, lochierarchy#27, rank_within_parent#31] +Arguments: 100, [lochierarchy#27 DESC NULLS LAST, CASE WHEN (lochierarchy#27 = 0) THEN s_state#20 END ASC NULLS FIRST, rank_within_parent#31 ASC NULLS FIRST], [total_sum#26, s_state#20, s_county#21, lochierarchy#27, rank_within_parent#31] ===== Subqueries ===== @@ -247,26 +247,26 @@ BroadcastExchange (47) (43) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_month_seq#38] +Output [2]: [d_date_sk#5, d_month_seq#32] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#38] +Input [2]: [d_date_sk#5, d_month_seq#32] (45) Filter [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#38] -Condition : (((isnotnull(d_month_seq#38) AND (d_month_seq#38 >= 1200)) AND (d_month_seq#38 <= 1211)) AND isnotnull(d_date_sk#5)) +Input [2]: [d_date_sk#5, d_month_seq#32] +Condition : (((isnotnull(d_month_seq#32) AND (d_month_seq#32 >= 1200)) AND (d_month_seq#32 <= 1211)) AND isnotnull(d_date_sk#5)) (46) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_month_seq#38] +Input [2]: [d_date_sk#5, d_month_seq#32] (47) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#39] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] Subquery:2 Hosting operator id = 10 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q71.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q71.sf100/explain.txt index 2977c4d96c94a..1eb2e39dc5bb9 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q71.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q71.sf100/explain.txt @@ -59,160 +59,160 @@ Input [4]: [i_item_sk#1, i_brand_id#2, i_brand#3, i_manager_id#4] (5) BroadcastExchange Input [3]: [i_item_sk#1, i_brand_id#2, i_brand#3] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#5] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.web_sales -Output [4]: [ws_sold_time_sk#6, ws_item_sk#7, ws_ext_sales_price#8, ws_sold_date_sk#9] +Output [4]: [ws_sold_time_sk#5, ws_item_sk#6, ws_ext_sales_price#7, ws_sold_date_sk#8] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#9), dynamicpruningexpression(ws_sold_date_sk#9 IN dynamicpruning#10)] +PartitionFilters: [isnotnull(ws_sold_date_sk#8), dynamicpruningexpression(ws_sold_date_sk#8 IN dynamicpruning#9)] PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_sold_time_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [4]: [ws_sold_time_sk#6, ws_item_sk#7, ws_ext_sales_price#8, ws_sold_date_sk#9] +Input [4]: [ws_sold_time_sk#5, ws_item_sk#6, ws_ext_sales_price#7, ws_sold_date_sk#8] (8) Filter [codegen id : 3] -Input [4]: [ws_sold_time_sk#6, ws_item_sk#7, ws_ext_sales_price#8, ws_sold_date_sk#9] -Condition : (isnotnull(ws_item_sk#7) AND isnotnull(ws_sold_time_sk#6)) +Input [4]: [ws_sold_time_sk#5, ws_item_sk#6, ws_ext_sales_price#7, ws_sold_date_sk#8] +Condition : (isnotnull(ws_item_sk#6) AND isnotnull(ws_sold_time_sk#5)) (9) ReusedExchange [Reuses operator id: 43] -Output [1]: [d_date_sk#11] +Output [1]: [d_date_sk#10] (10) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [ws_sold_date_sk#9] -Right keys [1]: [d_date_sk#11] +Left keys [1]: [ws_sold_date_sk#8] +Right keys [1]: [d_date_sk#10] Join condition: None (11) Project [codegen id : 3] -Output [3]: [ws_ext_sales_price#8 AS ext_price#12, ws_item_sk#7 AS sold_item_sk#13, ws_sold_time_sk#6 AS time_sk#14] -Input [5]: [ws_sold_time_sk#6, ws_item_sk#7, ws_ext_sales_price#8, ws_sold_date_sk#9, d_date_sk#11] +Output [3]: [ws_ext_sales_price#7 AS ext_price#11, ws_item_sk#6 AS sold_item_sk#12, ws_sold_time_sk#5 AS time_sk#13] +Input [5]: [ws_sold_time_sk#5, ws_item_sk#6, ws_ext_sales_price#7, ws_sold_date_sk#8, d_date_sk#10] (12) Scan parquet default.catalog_sales -Output [4]: [cs_sold_time_sk#15, cs_item_sk#16, cs_ext_sales_price#17, cs_sold_date_sk#18] +Output [4]: [cs_sold_time_sk#14, cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#18), dynamicpruningexpression(cs_sold_date_sk#18 IN dynamicpruning#10)] +PartitionFilters: [isnotnull(cs_sold_date_sk#17), dynamicpruningexpression(cs_sold_date_sk#17 IN dynamicpruning#9)] PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_sold_time_sk)] ReadSchema: struct (13) ColumnarToRow [codegen id : 5] -Input [4]: [cs_sold_time_sk#15, cs_item_sk#16, cs_ext_sales_price#17, cs_sold_date_sk#18] +Input [4]: [cs_sold_time_sk#14, cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17] (14) Filter [codegen id : 5] -Input [4]: [cs_sold_time_sk#15, cs_item_sk#16, cs_ext_sales_price#17, cs_sold_date_sk#18] -Condition : (isnotnull(cs_item_sk#16) AND isnotnull(cs_sold_time_sk#15)) +Input [4]: [cs_sold_time_sk#14, cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17] +Condition : (isnotnull(cs_item_sk#15) AND isnotnull(cs_sold_time_sk#14)) (15) ReusedExchange [Reuses operator id: 43] -Output [1]: [d_date_sk#19] +Output [1]: [d_date_sk#18] (16) BroadcastHashJoin [codegen id : 5] -Left keys [1]: [cs_sold_date_sk#18] -Right keys [1]: [d_date_sk#19] +Left keys [1]: [cs_sold_date_sk#17] +Right keys [1]: [d_date_sk#18] Join condition: None (17) Project [codegen id : 5] -Output [3]: [cs_ext_sales_price#17 AS ext_price#20, cs_item_sk#16 AS sold_item_sk#21, cs_sold_time_sk#15 AS time_sk#22] -Input [5]: [cs_sold_time_sk#15, cs_item_sk#16, cs_ext_sales_price#17, cs_sold_date_sk#18, d_date_sk#19] +Output [3]: [cs_ext_sales_price#16 AS ext_price#19, cs_item_sk#15 AS sold_item_sk#20, cs_sold_time_sk#14 AS time_sk#21] +Input [5]: [cs_sold_time_sk#14, cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17, d_date_sk#18] (18) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#23, ss_item_sk#24, ss_ext_sales_price#25, ss_sold_date_sk#26] +Output [4]: [ss_sold_time_sk#22, ss_item_sk#23, ss_ext_sales_price#24, ss_sold_date_sk#25] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#26), dynamicpruningexpression(ss_sold_date_sk#26 IN dynamicpruning#10)] +PartitionFilters: [isnotnull(ss_sold_date_sk#25), dynamicpruningexpression(ss_sold_date_sk#25 IN dynamicpruning#9)] PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_sold_time_sk)] ReadSchema: struct (19) ColumnarToRow [codegen id : 7] -Input [4]: [ss_sold_time_sk#23, ss_item_sk#24, ss_ext_sales_price#25, ss_sold_date_sk#26] +Input [4]: [ss_sold_time_sk#22, ss_item_sk#23, ss_ext_sales_price#24, ss_sold_date_sk#25] (20) Filter [codegen id : 7] -Input [4]: [ss_sold_time_sk#23, ss_item_sk#24, ss_ext_sales_price#25, ss_sold_date_sk#26] -Condition : (isnotnull(ss_item_sk#24) AND isnotnull(ss_sold_time_sk#23)) +Input [4]: [ss_sold_time_sk#22, ss_item_sk#23, ss_ext_sales_price#24, ss_sold_date_sk#25] +Condition : (isnotnull(ss_item_sk#23) AND isnotnull(ss_sold_time_sk#22)) (21) ReusedExchange [Reuses operator id: 43] -Output [1]: [d_date_sk#27] +Output [1]: [d_date_sk#26] (22) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [ss_sold_date_sk#26] -Right keys [1]: [d_date_sk#27] +Left keys [1]: [ss_sold_date_sk#25] +Right keys [1]: [d_date_sk#26] Join condition: None (23) Project [codegen id : 7] -Output [3]: [ss_ext_sales_price#25 AS ext_price#28, ss_item_sk#24 AS sold_item_sk#29, ss_sold_time_sk#23 AS time_sk#30] -Input [5]: [ss_sold_time_sk#23, ss_item_sk#24, ss_ext_sales_price#25, ss_sold_date_sk#26, d_date_sk#27] +Output [3]: [ss_ext_sales_price#24 AS ext_price#27, ss_item_sk#23 AS sold_item_sk#28, ss_sold_time_sk#22 AS time_sk#29] +Input [5]: [ss_sold_time_sk#22, ss_item_sk#23, ss_ext_sales_price#24, ss_sold_date_sk#25, d_date_sk#26] (24) Union (25) BroadcastHashJoin [codegen id : 9] Left keys [1]: [i_item_sk#1] -Right keys [1]: [sold_item_sk#13] +Right keys [1]: [sold_item_sk#12] Join condition: None (26) Project [codegen id : 9] -Output [4]: [i_brand_id#2, i_brand#3, ext_price#12, time_sk#14] -Input [6]: [i_item_sk#1, i_brand_id#2, i_brand#3, ext_price#12, sold_item_sk#13, time_sk#14] +Output [4]: [i_brand_id#2, i_brand#3, ext_price#11, time_sk#13] +Input [6]: [i_item_sk#1, i_brand_id#2, i_brand#3, ext_price#11, sold_item_sk#12, time_sk#13] (27) Scan parquet default.time_dim -Output [4]: [t_time_sk#31, t_hour#32, t_minute#33, t_meal_time#34] +Output [4]: [t_time_sk#30, t_hour#31, t_minute#32, t_meal_time#33] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [Or(EqualTo(t_meal_time,breakfast ),EqualTo(t_meal_time,dinner )), IsNotNull(t_time_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 8] -Input [4]: [t_time_sk#31, t_hour#32, t_minute#33, t_meal_time#34] +Input [4]: [t_time_sk#30, t_hour#31, t_minute#32, t_meal_time#33] (29) Filter [codegen id : 8] -Input [4]: [t_time_sk#31, t_hour#32, t_minute#33, t_meal_time#34] -Condition : (((t_meal_time#34 = breakfast ) OR (t_meal_time#34 = dinner )) AND isnotnull(t_time_sk#31)) +Input [4]: [t_time_sk#30, t_hour#31, t_minute#32, t_meal_time#33] +Condition : (((t_meal_time#33 = breakfast ) OR (t_meal_time#33 = dinner )) AND isnotnull(t_time_sk#30)) (30) Project [codegen id : 8] -Output [3]: [t_time_sk#31, t_hour#32, t_minute#33] -Input [4]: [t_time_sk#31, t_hour#32, t_minute#33, t_meal_time#34] +Output [3]: [t_time_sk#30, t_hour#31, t_minute#32] +Input [4]: [t_time_sk#30, t_hour#31, t_minute#32, t_meal_time#33] (31) BroadcastExchange -Input [3]: [t_time_sk#31, t_hour#32, t_minute#33] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#35] +Input [3]: [t_time_sk#30, t_hour#31, t_minute#32] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (32) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [time_sk#14] -Right keys [1]: [t_time_sk#31] +Left keys [1]: [time_sk#13] +Right keys [1]: [t_time_sk#30] Join condition: None (33) Project [codegen id : 9] -Output [5]: [i_brand_id#2, i_brand#3, ext_price#12, t_hour#32, t_minute#33] -Input [7]: [i_brand_id#2, i_brand#3, ext_price#12, time_sk#14, t_time_sk#31, t_hour#32, t_minute#33] +Output [5]: [i_brand_id#2, i_brand#3, ext_price#11, t_hour#31, t_minute#32] +Input [7]: [i_brand_id#2, i_brand#3, ext_price#11, time_sk#13, t_time_sk#30, t_hour#31, t_minute#32] (34) HashAggregate [codegen id : 9] -Input [5]: [i_brand_id#2, i_brand#3, ext_price#12, t_hour#32, t_minute#33] -Keys [4]: [i_brand#3, i_brand_id#2, t_hour#32, t_minute#33] -Functions [1]: [partial_sum(UnscaledValue(ext_price#12))] -Aggregate Attributes [1]: [sum#36] -Results [5]: [i_brand#3, i_brand_id#2, t_hour#32, t_minute#33, sum#37] +Input [5]: [i_brand_id#2, i_brand#3, ext_price#11, t_hour#31, t_minute#32] +Keys [4]: [i_brand#3, i_brand_id#2, t_hour#31, t_minute#32] +Functions [1]: [partial_sum(UnscaledValue(ext_price#11))] +Aggregate Attributes [1]: [sum#34] +Results [5]: [i_brand#3, i_brand_id#2, t_hour#31, t_minute#32, sum#35] (35) Exchange -Input [5]: [i_brand#3, i_brand_id#2, t_hour#32, t_minute#33, sum#37] -Arguments: hashpartitioning(i_brand#3, i_brand_id#2, t_hour#32, t_minute#33, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [5]: [i_brand#3, i_brand_id#2, t_hour#31, t_minute#32, sum#35] +Arguments: hashpartitioning(i_brand#3, i_brand_id#2, t_hour#31, t_minute#32, 5), ENSURE_REQUIREMENTS, [plan_id=3] (36) HashAggregate [codegen id : 10] -Input [5]: [i_brand#3, i_brand_id#2, t_hour#32, t_minute#33, sum#37] -Keys [4]: [i_brand#3, i_brand_id#2, t_hour#32, t_minute#33] -Functions [1]: [sum(UnscaledValue(ext_price#12))] -Aggregate Attributes [1]: [sum(UnscaledValue(ext_price#12))#39] -Results [5]: [i_brand_id#2 AS brand_id#40, i_brand#3 AS brand#41, t_hour#32, t_minute#33, MakeDecimal(sum(UnscaledValue(ext_price#12))#39,17,2) AS ext_price#42] +Input [5]: [i_brand#3, i_brand_id#2, t_hour#31, t_minute#32, sum#35] +Keys [4]: [i_brand#3, i_brand_id#2, t_hour#31, t_minute#32] +Functions [1]: [sum(UnscaledValue(ext_price#11))] +Aggregate Attributes [1]: [sum(UnscaledValue(ext_price#11))#36] +Results [5]: [i_brand_id#2 AS brand_id#37, i_brand#3 AS brand#38, t_hour#31, t_minute#32, MakeDecimal(sum(UnscaledValue(ext_price#11))#36,17,2) AS ext_price#39] (37) Exchange -Input [5]: [brand_id#40, brand#41, t_hour#32, t_minute#33, ext_price#42] -Arguments: rangepartitioning(ext_price#42 DESC NULLS LAST, brand_id#40 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#43] +Input [5]: [brand_id#37, brand#38, t_hour#31, t_minute#32, ext_price#39] +Arguments: rangepartitioning(ext_price#39 DESC NULLS LAST, brand_id#37 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=4] (38) Sort [codegen id : 11] -Input [5]: [brand_id#40, brand#41, t_hour#32, t_minute#33, ext_price#42] -Arguments: [ext_price#42 DESC NULLS LAST, brand_id#40 ASC NULLS FIRST], true, 0 +Input [5]: [brand_id#37, brand#38, t_hour#31, t_minute#32, ext_price#39] +Arguments: [ext_price#39 DESC NULLS LAST, brand_id#37 ASC NULLS FIRST], true, 0 ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ws_sold_date_sk#9 IN dynamicpruning#10 +Subquery:1 Hosting operator id = 6 Hosting Expression = ws_sold_date_sk#8 IN dynamicpruning#9 BroadcastExchange (43) +- * Project (42) +- * Filter (41) @@ -221,29 +221,29 @@ BroadcastExchange (43) (39) Scan parquet default.date_dim -Output [3]: [d_date_sk#11, d_year#44, d_moy#45] +Output [3]: [d_date_sk#10, d_year#40, d_moy#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_moy,11), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct (40) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#44, d_moy#45] +Input [3]: [d_date_sk#10, d_year#40, d_moy#41] (41) Filter [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#44, d_moy#45] -Condition : ((((isnotnull(d_moy#45) AND isnotnull(d_year#44)) AND (d_moy#45 = 11)) AND (d_year#44 = 1999)) AND isnotnull(d_date_sk#11)) +Input [3]: [d_date_sk#10, d_year#40, d_moy#41] +Condition : ((((isnotnull(d_moy#41) AND isnotnull(d_year#40)) AND (d_moy#41 = 11)) AND (d_year#40 = 1999)) AND isnotnull(d_date_sk#10)) (42) Project [codegen id : 1] -Output [1]: [d_date_sk#11] -Input [3]: [d_date_sk#11, d_year#44, d_moy#45] +Output [1]: [d_date_sk#10] +Input [3]: [d_date_sk#10, d_year#40, d_moy#41] (43) BroadcastExchange -Input [1]: [d_date_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#46] +Input [1]: [d_date_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -Subquery:2 Hosting operator id = 12 Hosting Expression = cs_sold_date_sk#18 IN dynamicpruning#10 +Subquery:2 Hosting operator id = 12 Hosting Expression = cs_sold_date_sk#17 IN dynamicpruning#9 -Subquery:3 Hosting operator id = 18 Hosting Expression = ss_sold_date_sk#26 IN dynamicpruning#10 +Subquery:3 Hosting operator id = 18 Hosting Expression = ss_sold_date_sk#25 IN dynamicpruning#9 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q71/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q71/explain.txt index 2977c4d96c94a..1eb2e39dc5bb9 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q71/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q71/explain.txt @@ -59,160 +59,160 @@ Input [4]: [i_item_sk#1, i_brand_id#2, i_brand#3, i_manager_id#4] (5) BroadcastExchange Input [3]: [i_item_sk#1, i_brand_id#2, i_brand#3] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#5] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.web_sales -Output [4]: [ws_sold_time_sk#6, ws_item_sk#7, ws_ext_sales_price#8, ws_sold_date_sk#9] +Output [4]: [ws_sold_time_sk#5, ws_item_sk#6, ws_ext_sales_price#7, ws_sold_date_sk#8] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#9), dynamicpruningexpression(ws_sold_date_sk#9 IN dynamicpruning#10)] +PartitionFilters: [isnotnull(ws_sold_date_sk#8), dynamicpruningexpression(ws_sold_date_sk#8 IN dynamicpruning#9)] PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_sold_time_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [4]: [ws_sold_time_sk#6, ws_item_sk#7, ws_ext_sales_price#8, ws_sold_date_sk#9] +Input [4]: [ws_sold_time_sk#5, ws_item_sk#6, ws_ext_sales_price#7, ws_sold_date_sk#8] (8) Filter [codegen id : 3] -Input [4]: [ws_sold_time_sk#6, ws_item_sk#7, ws_ext_sales_price#8, ws_sold_date_sk#9] -Condition : (isnotnull(ws_item_sk#7) AND isnotnull(ws_sold_time_sk#6)) +Input [4]: [ws_sold_time_sk#5, ws_item_sk#6, ws_ext_sales_price#7, ws_sold_date_sk#8] +Condition : (isnotnull(ws_item_sk#6) AND isnotnull(ws_sold_time_sk#5)) (9) ReusedExchange [Reuses operator id: 43] -Output [1]: [d_date_sk#11] +Output [1]: [d_date_sk#10] (10) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [ws_sold_date_sk#9] -Right keys [1]: [d_date_sk#11] +Left keys [1]: [ws_sold_date_sk#8] +Right keys [1]: [d_date_sk#10] Join condition: None (11) Project [codegen id : 3] -Output [3]: [ws_ext_sales_price#8 AS ext_price#12, ws_item_sk#7 AS sold_item_sk#13, ws_sold_time_sk#6 AS time_sk#14] -Input [5]: [ws_sold_time_sk#6, ws_item_sk#7, ws_ext_sales_price#8, ws_sold_date_sk#9, d_date_sk#11] +Output [3]: [ws_ext_sales_price#7 AS ext_price#11, ws_item_sk#6 AS sold_item_sk#12, ws_sold_time_sk#5 AS time_sk#13] +Input [5]: [ws_sold_time_sk#5, ws_item_sk#6, ws_ext_sales_price#7, ws_sold_date_sk#8, d_date_sk#10] (12) Scan parquet default.catalog_sales -Output [4]: [cs_sold_time_sk#15, cs_item_sk#16, cs_ext_sales_price#17, cs_sold_date_sk#18] +Output [4]: [cs_sold_time_sk#14, cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#18), dynamicpruningexpression(cs_sold_date_sk#18 IN dynamicpruning#10)] +PartitionFilters: [isnotnull(cs_sold_date_sk#17), dynamicpruningexpression(cs_sold_date_sk#17 IN dynamicpruning#9)] PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_sold_time_sk)] ReadSchema: struct (13) ColumnarToRow [codegen id : 5] -Input [4]: [cs_sold_time_sk#15, cs_item_sk#16, cs_ext_sales_price#17, cs_sold_date_sk#18] +Input [4]: [cs_sold_time_sk#14, cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17] (14) Filter [codegen id : 5] -Input [4]: [cs_sold_time_sk#15, cs_item_sk#16, cs_ext_sales_price#17, cs_sold_date_sk#18] -Condition : (isnotnull(cs_item_sk#16) AND isnotnull(cs_sold_time_sk#15)) +Input [4]: [cs_sold_time_sk#14, cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17] +Condition : (isnotnull(cs_item_sk#15) AND isnotnull(cs_sold_time_sk#14)) (15) ReusedExchange [Reuses operator id: 43] -Output [1]: [d_date_sk#19] +Output [1]: [d_date_sk#18] (16) BroadcastHashJoin [codegen id : 5] -Left keys [1]: [cs_sold_date_sk#18] -Right keys [1]: [d_date_sk#19] +Left keys [1]: [cs_sold_date_sk#17] +Right keys [1]: [d_date_sk#18] Join condition: None (17) Project [codegen id : 5] -Output [3]: [cs_ext_sales_price#17 AS ext_price#20, cs_item_sk#16 AS sold_item_sk#21, cs_sold_time_sk#15 AS time_sk#22] -Input [5]: [cs_sold_time_sk#15, cs_item_sk#16, cs_ext_sales_price#17, cs_sold_date_sk#18, d_date_sk#19] +Output [3]: [cs_ext_sales_price#16 AS ext_price#19, cs_item_sk#15 AS sold_item_sk#20, cs_sold_time_sk#14 AS time_sk#21] +Input [5]: [cs_sold_time_sk#14, cs_item_sk#15, cs_ext_sales_price#16, cs_sold_date_sk#17, d_date_sk#18] (18) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#23, ss_item_sk#24, ss_ext_sales_price#25, ss_sold_date_sk#26] +Output [4]: [ss_sold_time_sk#22, ss_item_sk#23, ss_ext_sales_price#24, ss_sold_date_sk#25] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#26), dynamicpruningexpression(ss_sold_date_sk#26 IN dynamicpruning#10)] +PartitionFilters: [isnotnull(ss_sold_date_sk#25), dynamicpruningexpression(ss_sold_date_sk#25 IN dynamicpruning#9)] PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_sold_time_sk)] ReadSchema: struct (19) ColumnarToRow [codegen id : 7] -Input [4]: [ss_sold_time_sk#23, ss_item_sk#24, ss_ext_sales_price#25, ss_sold_date_sk#26] +Input [4]: [ss_sold_time_sk#22, ss_item_sk#23, ss_ext_sales_price#24, ss_sold_date_sk#25] (20) Filter [codegen id : 7] -Input [4]: [ss_sold_time_sk#23, ss_item_sk#24, ss_ext_sales_price#25, ss_sold_date_sk#26] -Condition : (isnotnull(ss_item_sk#24) AND isnotnull(ss_sold_time_sk#23)) +Input [4]: [ss_sold_time_sk#22, ss_item_sk#23, ss_ext_sales_price#24, ss_sold_date_sk#25] +Condition : (isnotnull(ss_item_sk#23) AND isnotnull(ss_sold_time_sk#22)) (21) ReusedExchange [Reuses operator id: 43] -Output [1]: [d_date_sk#27] +Output [1]: [d_date_sk#26] (22) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [ss_sold_date_sk#26] -Right keys [1]: [d_date_sk#27] +Left keys [1]: [ss_sold_date_sk#25] +Right keys [1]: [d_date_sk#26] Join condition: None (23) Project [codegen id : 7] -Output [3]: [ss_ext_sales_price#25 AS ext_price#28, ss_item_sk#24 AS sold_item_sk#29, ss_sold_time_sk#23 AS time_sk#30] -Input [5]: [ss_sold_time_sk#23, ss_item_sk#24, ss_ext_sales_price#25, ss_sold_date_sk#26, d_date_sk#27] +Output [3]: [ss_ext_sales_price#24 AS ext_price#27, ss_item_sk#23 AS sold_item_sk#28, ss_sold_time_sk#22 AS time_sk#29] +Input [5]: [ss_sold_time_sk#22, ss_item_sk#23, ss_ext_sales_price#24, ss_sold_date_sk#25, d_date_sk#26] (24) Union (25) BroadcastHashJoin [codegen id : 9] Left keys [1]: [i_item_sk#1] -Right keys [1]: [sold_item_sk#13] +Right keys [1]: [sold_item_sk#12] Join condition: None (26) Project [codegen id : 9] -Output [4]: [i_brand_id#2, i_brand#3, ext_price#12, time_sk#14] -Input [6]: [i_item_sk#1, i_brand_id#2, i_brand#3, ext_price#12, sold_item_sk#13, time_sk#14] +Output [4]: [i_brand_id#2, i_brand#3, ext_price#11, time_sk#13] +Input [6]: [i_item_sk#1, i_brand_id#2, i_brand#3, ext_price#11, sold_item_sk#12, time_sk#13] (27) Scan parquet default.time_dim -Output [4]: [t_time_sk#31, t_hour#32, t_minute#33, t_meal_time#34] +Output [4]: [t_time_sk#30, t_hour#31, t_minute#32, t_meal_time#33] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [Or(EqualTo(t_meal_time,breakfast ),EqualTo(t_meal_time,dinner )), IsNotNull(t_time_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 8] -Input [4]: [t_time_sk#31, t_hour#32, t_minute#33, t_meal_time#34] +Input [4]: [t_time_sk#30, t_hour#31, t_minute#32, t_meal_time#33] (29) Filter [codegen id : 8] -Input [4]: [t_time_sk#31, t_hour#32, t_minute#33, t_meal_time#34] -Condition : (((t_meal_time#34 = breakfast ) OR (t_meal_time#34 = dinner )) AND isnotnull(t_time_sk#31)) +Input [4]: [t_time_sk#30, t_hour#31, t_minute#32, t_meal_time#33] +Condition : (((t_meal_time#33 = breakfast ) OR (t_meal_time#33 = dinner )) AND isnotnull(t_time_sk#30)) (30) Project [codegen id : 8] -Output [3]: [t_time_sk#31, t_hour#32, t_minute#33] -Input [4]: [t_time_sk#31, t_hour#32, t_minute#33, t_meal_time#34] +Output [3]: [t_time_sk#30, t_hour#31, t_minute#32] +Input [4]: [t_time_sk#30, t_hour#31, t_minute#32, t_meal_time#33] (31) BroadcastExchange -Input [3]: [t_time_sk#31, t_hour#32, t_minute#33] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#35] +Input [3]: [t_time_sk#30, t_hour#31, t_minute#32] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (32) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [time_sk#14] -Right keys [1]: [t_time_sk#31] +Left keys [1]: [time_sk#13] +Right keys [1]: [t_time_sk#30] Join condition: None (33) Project [codegen id : 9] -Output [5]: [i_brand_id#2, i_brand#3, ext_price#12, t_hour#32, t_minute#33] -Input [7]: [i_brand_id#2, i_brand#3, ext_price#12, time_sk#14, t_time_sk#31, t_hour#32, t_minute#33] +Output [5]: [i_brand_id#2, i_brand#3, ext_price#11, t_hour#31, t_minute#32] +Input [7]: [i_brand_id#2, i_brand#3, ext_price#11, time_sk#13, t_time_sk#30, t_hour#31, t_minute#32] (34) HashAggregate [codegen id : 9] -Input [5]: [i_brand_id#2, i_brand#3, ext_price#12, t_hour#32, t_minute#33] -Keys [4]: [i_brand#3, i_brand_id#2, t_hour#32, t_minute#33] -Functions [1]: [partial_sum(UnscaledValue(ext_price#12))] -Aggregate Attributes [1]: [sum#36] -Results [5]: [i_brand#3, i_brand_id#2, t_hour#32, t_minute#33, sum#37] +Input [5]: [i_brand_id#2, i_brand#3, ext_price#11, t_hour#31, t_minute#32] +Keys [4]: [i_brand#3, i_brand_id#2, t_hour#31, t_minute#32] +Functions [1]: [partial_sum(UnscaledValue(ext_price#11))] +Aggregate Attributes [1]: [sum#34] +Results [5]: [i_brand#3, i_brand_id#2, t_hour#31, t_minute#32, sum#35] (35) Exchange -Input [5]: [i_brand#3, i_brand_id#2, t_hour#32, t_minute#33, sum#37] -Arguments: hashpartitioning(i_brand#3, i_brand_id#2, t_hour#32, t_minute#33, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [5]: [i_brand#3, i_brand_id#2, t_hour#31, t_minute#32, sum#35] +Arguments: hashpartitioning(i_brand#3, i_brand_id#2, t_hour#31, t_minute#32, 5), ENSURE_REQUIREMENTS, [plan_id=3] (36) HashAggregate [codegen id : 10] -Input [5]: [i_brand#3, i_brand_id#2, t_hour#32, t_minute#33, sum#37] -Keys [4]: [i_brand#3, i_brand_id#2, t_hour#32, t_minute#33] -Functions [1]: [sum(UnscaledValue(ext_price#12))] -Aggregate Attributes [1]: [sum(UnscaledValue(ext_price#12))#39] -Results [5]: [i_brand_id#2 AS brand_id#40, i_brand#3 AS brand#41, t_hour#32, t_minute#33, MakeDecimal(sum(UnscaledValue(ext_price#12))#39,17,2) AS ext_price#42] +Input [5]: [i_brand#3, i_brand_id#2, t_hour#31, t_minute#32, sum#35] +Keys [4]: [i_brand#3, i_brand_id#2, t_hour#31, t_minute#32] +Functions [1]: [sum(UnscaledValue(ext_price#11))] +Aggregate Attributes [1]: [sum(UnscaledValue(ext_price#11))#36] +Results [5]: [i_brand_id#2 AS brand_id#37, i_brand#3 AS brand#38, t_hour#31, t_minute#32, MakeDecimal(sum(UnscaledValue(ext_price#11))#36,17,2) AS ext_price#39] (37) Exchange -Input [5]: [brand_id#40, brand#41, t_hour#32, t_minute#33, ext_price#42] -Arguments: rangepartitioning(ext_price#42 DESC NULLS LAST, brand_id#40 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#43] +Input [5]: [brand_id#37, brand#38, t_hour#31, t_minute#32, ext_price#39] +Arguments: rangepartitioning(ext_price#39 DESC NULLS LAST, brand_id#37 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=4] (38) Sort [codegen id : 11] -Input [5]: [brand_id#40, brand#41, t_hour#32, t_minute#33, ext_price#42] -Arguments: [ext_price#42 DESC NULLS LAST, brand_id#40 ASC NULLS FIRST], true, 0 +Input [5]: [brand_id#37, brand#38, t_hour#31, t_minute#32, ext_price#39] +Arguments: [ext_price#39 DESC NULLS LAST, brand_id#37 ASC NULLS FIRST], true, 0 ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ws_sold_date_sk#9 IN dynamicpruning#10 +Subquery:1 Hosting operator id = 6 Hosting Expression = ws_sold_date_sk#8 IN dynamicpruning#9 BroadcastExchange (43) +- * Project (42) +- * Filter (41) @@ -221,29 +221,29 @@ BroadcastExchange (43) (39) Scan parquet default.date_dim -Output [3]: [d_date_sk#11, d_year#44, d_moy#45] +Output [3]: [d_date_sk#10, d_year#40, d_moy#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_moy,11), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct (40) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#44, d_moy#45] +Input [3]: [d_date_sk#10, d_year#40, d_moy#41] (41) Filter [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#44, d_moy#45] -Condition : ((((isnotnull(d_moy#45) AND isnotnull(d_year#44)) AND (d_moy#45 = 11)) AND (d_year#44 = 1999)) AND isnotnull(d_date_sk#11)) +Input [3]: [d_date_sk#10, d_year#40, d_moy#41] +Condition : ((((isnotnull(d_moy#41) AND isnotnull(d_year#40)) AND (d_moy#41 = 11)) AND (d_year#40 = 1999)) AND isnotnull(d_date_sk#10)) (42) Project [codegen id : 1] -Output [1]: [d_date_sk#11] -Input [3]: [d_date_sk#11, d_year#44, d_moy#45] +Output [1]: [d_date_sk#10] +Input [3]: [d_date_sk#10, d_year#40, d_moy#41] (43) BroadcastExchange -Input [1]: [d_date_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#46] +Input [1]: [d_date_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -Subquery:2 Hosting operator id = 12 Hosting Expression = cs_sold_date_sk#18 IN dynamicpruning#10 +Subquery:2 Hosting operator id = 12 Hosting Expression = cs_sold_date_sk#17 IN dynamicpruning#9 -Subquery:3 Hosting operator id = 18 Hosting Expression = ss_sold_date_sk#26 IN dynamicpruning#10 +Subquery:3 Hosting operator id = 18 Hosting Expression = ss_sold_date_sk#25 IN dynamicpruning#9 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q72.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q72.sf100/explain.txt index c6971f3ea904b..036c6ae795946 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q72.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q72.sf100/explain.txt @@ -106,7 +106,7 @@ Input [2]: [hd_demo_sk#10, hd_buy_potential#11] (8) BroadcastExchange Input [1]: [hd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_bill_hdemo_sk#3] @@ -118,272 +118,272 @@ Output [7]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#4, cs_promo_sk#5, Input [9]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, hd_demo_sk#10] (11) Scan parquet default.customer_demographics -Output [2]: [cd_demo_sk#13, cd_marital_status#14] +Output [2]: [cd_demo_sk#12, cd_marital_status#13] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_marital_status), EqualTo(cd_marital_status,D), IsNotNull(cd_demo_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [2]: [cd_demo_sk#13, cd_marital_status#14] +Input [2]: [cd_demo_sk#12, cd_marital_status#13] (13) Filter [codegen id : 2] -Input [2]: [cd_demo_sk#13, cd_marital_status#14] -Condition : ((isnotnull(cd_marital_status#14) AND (cd_marital_status#14 = D)) AND isnotnull(cd_demo_sk#13)) +Input [2]: [cd_demo_sk#12, cd_marital_status#13] +Condition : ((isnotnull(cd_marital_status#13) AND (cd_marital_status#13 = D)) AND isnotnull(cd_demo_sk#12)) (14) Project [codegen id : 2] -Output [1]: [cd_demo_sk#13] -Input [2]: [cd_demo_sk#13, cd_marital_status#14] +Output [1]: [cd_demo_sk#12] +Input [2]: [cd_demo_sk#12, cd_marital_status#13] (15) BroadcastExchange -Input [1]: [cd_demo_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [cd_demo_sk#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_bill_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#13] +Right keys [1]: [cd_demo_sk#12] Join condition: None (17) Project [codegen id : 4] Output [6]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8] -Input [8]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, cd_demo_sk#13] +Input [8]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, cd_demo_sk#12] (18) Scan parquet default.date_dim -Output [2]: [d_date_sk#16, d_date#17] +Output [2]: [d_date_sk#14, d_date#15] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), IsNotNull(d_date_sk)] ReadSchema: struct (19) ColumnarToRow [codegen id : 3] -Input [2]: [d_date_sk#16, d_date#17] +Input [2]: [d_date_sk#14, d_date#15] (20) Filter [codegen id : 3] -Input [2]: [d_date_sk#16, d_date#17] -Condition : (isnotnull(d_date#17) AND isnotnull(d_date_sk#16)) +Input [2]: [d_date_sk#14, d_date#15] +Condition : (isnotnull(d_date#15) AND isnotnull(d_date_sk#14)) (21) BroadcastExchange -Input [2]: [d_date_sk#16, d_date#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#18] +Input [2]: [d_date_sk#14, d_date#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (22) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_ship_date_sk#1] -Right keys [1]: [d_date_sk#16] +Right keys [1]: [d_date_sk#14] Join condition: None (23) Project [codegen id : 4] -Output [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#17] -Input [8]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date_sk#16, d_date#17] +Output [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#15] +Input [8]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date_sk#14, d_date#15] (24) Exchange -Input [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#17] -Arguments: hashpartitioning(cs_item_sk#4, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#15] +Arguments: hashpartitioning(cs_item_sk#4, 5), ENSURE_REQUIREMENTS, [plan_id=4] (25) Sort [codegen id : 5] -Input [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#17] +Input [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#15] Arguments: [cs_item_sk#4 ASC NULLS FIRST], false, 0 (26) Scan parquet default.item -Output [2]: [i_item_sk#20, i_item_desc#21] +Output [2]: [i_item_sk#16, i_item_desc#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 6] -Input [2]: [i_item_sk#20, i_item_desc#21] +Input [2]: [i_item_sk#16, i_item_desc#17] (28) Filter [codegen id : 6] -Input [2]: [i_item_sk#20, i_item_desc#21] -Condition : isnotnull(i_item_sk#20) +Input [2]: [i_item_sk#16, i_item_desc#17] +Condition : isnotnull(i_item_sk#16) (29) Exchange -Input [2]: [i_item_sk#20, i_item_desc#21] -Arguments: hashpartitioning(i_item_sk#20, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [2]: [i_item_sk#16, i_item_desc#17] +Arguments: hashpartitioning(i_item_sk#16, 5), ENSURE_REQUIREMENTS, [plan_id=5] (30) Sort [codegen id : 7] -Input [2]: [i_item_sk#20, i_item_desc#21] -Arguments: [i_item_sk#20 ASC NULLS FIRST], false, 0 +Input [2]: [i_item_sk#16, i_item_desc#17] +Arguments: [i_item_sk#16 ASC NULLS FIRST], false, 0 (31) SortMergeJoin [codegen id : 10] Left keys [1]: [cs_item_sk#4] -Right keys [1]: [i_item_sk#20] +Right keys [1]: [i_item_sk#16] Join condition: None (32) Project [codegen id : 10] -Output [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#17, i_item_desc#21] -Input [8]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#17, i_item_sk#20, i_item_desc#21] +Output [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#15, i_item_desc#17] +Input [8]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#15, i_item_sk#16, i_item_desc#17] (33) ReusedExchange [Reuses operator id: 81] -Output [4]: [d_date_sk#23, d_date#24, d_week_seq#25, d_date_sk#26] +Output [4]: [d_date_sk#18, d_date#19, d_week_seq#20, d_date_sk#21] (34) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_sold_date_sk#8] -Right keys [1]: [d_date_sk#23] -Join condition: (d_date#17 > date_add(d_date#24, 5)) +Right keys [1]: [d_date_sk#18] +Join condition: (d_date#15 > date_add(d_date#19, 5)) (35) Project [codegen id : 10] -Output [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#21, d_week_seq#25, d_date_sk#26] -Input [11]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#17, i_item_desc#21, d_date_sk#23, d_date#24, d_week_seq#25, d_date_sk#26] +Output [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#17, d_week_seq#20, d_date_sk#21] +Input [11]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#15, i_item_desc#17, d_date_sk#18, d_date#19, d_week_seq#20, d_date_sk#21] (36) Exchange -Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#21, d_week_seq#25, d_date_sk#26] -Arguments: hashpartitioning(cs_item_sk#4, d_date_sk#26, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#17, d_week_seq#20, d_date_sk#21] +Arguments: hashpartitioning(cs_item_sk#4, d_date_sk#21, 5), ENSURE_REQUIREMENTS, [plan_id=6] (37) Sort [codegen id : 11] -Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#21, d_week_seq#25, d_date_sk#26] -Arguments: [cs_item_sk#4 ASC NULLS FIRST, d_date_sk#26 ASC NULLS FIRST], false, 0 +Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#17, d_week_seq#20, d_date_sk#21] +Arguments: [cs_item_sk#4 ASC NULLS FIRST, d_date_sk#21 ASC NULLS FIRST], false, 0 (38) Scan parquet default.inventory -Output [4]: [inv_item_sk#28, inv_warehouse_sk#29, inv_quantity_on_hand#30, inv_date_sk#31] +Output [4]: [inv_item_sk#22, inv_warehouse_sk#23, inv_quantity_on_hand#24, inv_date_sk#25] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(inv_date_sk#31), dynamicpruningexpression(true)] +PartitionFilters: [isnotnull(inv_date_sk#25), dynamicpruningexpression(true)] PushedFilters: [IsNotNull(inv_quantity_on_hand), IsNotNull(inv_item_sk), IsNotNull(inv_warehouse_sk)] ReadSchema: struct (39) ColumnarToRow [codegen id : 13] -Input [4]: [inv_item_sk#28, inv_warehouse_sk#29, inv_quantity_on_hand#30, inv_date_sk#31] +Input [4]: [inv_item_sk#22, inv_warehouse_sk#23, inv_quantity_on_hand#24, inv_date_sk#25] (40) Filter [codegen id : 13] -Input [4]: [inv_item_sk#28, inv_warehouse_sk#29, inv_quantity_on_hand#30, inv_date_sk#31] -Condition : ((isnotnull(inv_quantity_on_hand#30) AND isnotnull(inv_item_sk#28)) AND isnotnull(inv_warehouse_sk#29)) +Input [4]: [inv_item_sk#22, inv_warehouse_sk#23, inv_quantity_on_hand#24, inv_date_sk#25] +Condition : ((isnotnull(inv_quantity_on_hand#24) AND isnotnull(inv_item_sk#22)) AND isnotnull(inv_warehouse_sk#23)) (41) Scan parquet default.warehouse -Output [2]: [w_warehouse_sk#32, w_warehouse_name#33] +Output [2]: [w_warehouse_sk#26, w_warehouse_name#27] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (42) ColumnarToRow [codegen id : 12] -Input [2]: [w_warehouse_sk#32, w_warehouse_name#33] +Input [2]: [w_warehouse_sk#26, w_warehouse_name#27] (43) Filter [codegen id : 12] -Input [2]: [w_warehouse_sk#32, w_warehouse_name#33] -Condition : isnotnull(w_warehouse_sk#32) +Input [2]: [w_warehouse_sk#26, w_warehouse_name#27] +Condition : isnotnull(w_warehouse_sk#26) (44) BroadcastExchange -Input [2]: [w_warehouse_sk#32, w_warehouse_name#33] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#34] +Input [2]: [w_warehouse_sk#26, w_warehouse_name#27] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (45) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [inv_warehouse_sk#29] -Right keys [1]: [w_warehouse_sk#32] +Left keys [1]: [inv_warehouse_sk#23] +Right keys [1]: [w_warehouse_sk#26] Join condition: None (46) Project [codegen id : 13] -Output [4]: [inv_item_sk#28, inv_quantity_on_hand#30, inv_date_sk#31, w_warehouse_name#33] -Input [6]: [inv_item_sk#28, inv_warehouse_sk#29, inv_quantity_on_hand#30, inv_date_sk#31, w_warehouse_sk#32, w_warehouse_name#33] +Output [4]: [inv_item_sk#22, inv_quantity_on_hand#24, inv_date_sk#25, w_warehouse_name#27] +Input [6]: [inv_item_sk#22, inv_warehouse_sk#23, inv_quantity_on_hand#24, inv_date_sk#25, w_warehouse_sk#26, w_warehouse_name#27] (47) Exchange -Input [4]: [inv_item_sk#28, inv_quantity_on_hand#30, inv_date_sk#31, w_warehouse_name#33] -Arguments: hashpartitioning(inv_item_sk#28, inv_date_sk#31, 5), ENSURE_REQUIREMENTS, [id=#35] +Input [4]: [inv_item_sk#22, inv_quantity_on_hand#24, inv_date_sk#25, w_warehouse_name#27] +Arguments: hashpartitioning(inv_item_sk#22, inv_date_sk#25, 5), ENSURE_REQUIREMENTS, [plan_id=8] (48) Sort [codegen id : 14] -Input [4]: [inv_item_sk#28, inv_quantity_on_hand#30, inv_date_sk#31, w_warehouse_name#33] -Arguments: [inv_item_sk#28 ASC NULLS FIRST, inv_date_sk#31 ASC NULLS FIRST], false, 0 +Input [4]: [inv_item_sk#22, inv_quantity_on_hand#24, inv_date_sk#25, w_warehouse_name#27] +Arguments: [inv_item_sk#22 ASC NULLS FIRST, inv_date_sk#25 ASC NULLS FIRST], false, 0 (49) SortMergeJoin [codegen id : 16] -Left keys [2]: [cs_item_sk#4, d_date_sk#26] -Right keys [2]: [inv_item_sk#28, inv_date_sk#31] -Join condition: (inv_quantity_on_hand#30 < cs_quantity#7) +Left keys [2]: [cs_item_sk#4, d_date_sk#21] +Right keys [2]: [inv_item_sk#22, inv_date_sk#25] +Join condition: (inv_quantity_on_hand#24 < cs_quantity#7) (50) Project [codegen id : 16] -Output [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#33, i_item_desc#21, d_week_seq#25] -Input [11]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#21, d_week_seq#25, d_date_sk#26, inv_item_sk#28, inv_quantity_on_hand#30, inv_date_sk#31, w_warehouse_name#33] +Output [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#27, i_item_desc#17, d_week_seq#20] +Input [11]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#17, d_week_seq#20, d_date_sk#21, inv_item_sk#22, inv_quantity_on_hand#24, inv_date_sk#25, w_warehouse_name#27] (51) Scan parquet default.promotion -Output [1]: [p_promo_sk#36] +Output [1]: [p_promo_sk#28] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_promo_sk)] ReadSchema: struct (52) ColumnarToRow [codegen id : 15] -Input [1]: [p_promo_sk#36] +Input [1]: [p_promo_sk#28] (53) Filter [codegen id : 15] -Input [1]: [p_promo_sk#36] -Condition : isnotnull(p_promo_sk#36) +Input [1]: [p_promo_sk#28] +Condition : isnotnull(p_promo_sk#28) (54) BroadcastExchange -Input [1]: [p_promo_sk#36] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#37] +Input [1]: [p_promo_sk#28] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] (55) BroadcastHashJoin [codegen id : 16] Left keys [1]: [cs_promo_sk#5] -Right keys [1]: [p_promo_sk#36] +Right keys [1]: [p_promo_sk#28] Join condition: None (56) Project [codegen id : 16] -Output [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#33, i_item_desc#21, d_week_seq#25] -Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#33, i_item_desc#21, d_week_seq#25, p_promo_sk#36] +Output [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#27, i_item_desc#17, d_week_seq#20] +Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#27, i_item_desc#17, d_week_seq#20, p_promo_sk#28] (57) Exchange -Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#33, i_item_desc#21, d_week_seq#25] -Arguments: hashpartitioning(cs_item_sk#4, cs_order_number#6, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#27, i_item_desc#17, d_week_seq#20] +Arguments: hashpartitioning(cs_item_sk#4, cs_order_number#6, 5), ENSURE_REQUIREMENTS, [plan_id=10] (58) Sort [codegen id : 17] -Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#33, i_item_desc#21, d_week_seq#25] +Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#27, i_item_desc#17, d_week_seq#20] Arguments: [cs_item_sk#4 ASC NULLS FIRST, cs_order_number#6 ASC NULLS FIRST], false, 0 (59) Scan parquet default.catalog_returns -Output [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] +Output [3]: [cr_item_sk#29, cr_order_number#30, cr_returned_date_sk#31] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct (60) ColumnarToRow [codegen id : 18] -Input [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] +Input [3]: [cr_item_sk#29, cr_order_number#30, cr_returned_date_sk#31] (61) Filter [codegen id : 18] -Input [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] -Condition : (isnotnull(cr_item_sk#39) AND isnotnull(cr_order_number#40)) +Input [3]: [cr_item_sk#29, cr_order_number#30, cr_returned_date_sk#31] +Condition : (isnotnull(cr_item_sk#29) AND isnotnull(cr_order_number#30)) (62) Project [codegen id : 18] -Output [2]: [cr_item_sk#39, cr_order_number#40] -Input [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] +Output [2]: [cr_item_sk#29, cr_order_number#30] +Input [3]: [cr_item_sk#29, cr_order_number#30, cr_returned_date_sk#31] (63) Exchange -Input [2]: [cr_item_sk#39, cr_order_number#40] -Arguments: hashpartitioning(cr_item_sk#39, cr_order_number#40, 5), ENSURE_REQUIREMENTS, [id=#42] +Input [2]: [cr_item_sk#29, cr_order_number#30] +Arguments: hashpartitioning(cr_item_sk#29, cr_order_number#30, 5), ENSURE_REQUIREMENTS, [plan_id=11] (64) Sort [codegen id : 19] -Input [2]: [cr_item_sk#39, cr_order_number#40] -Arguments: [cr_item_sk#39 ASC NULLS FIRST, cr_order_number#40 ASC NULLS FIRST], false, 0 +Input [2]: [cr_item_sk#29, cr_order_number#30] +Arguments: [cr_item_sk#29 ASC NULLS FIRST, cr_order_number#30 ASC NULLS FIRST], false, 0 (65) SortMergeJoin [codegen id : 20] Left keys [2]: [cs_item_sk#4, cs_order_number#6] -Right keys [2]: [cr_item_sk#39, cr_order_number#40] +Right keys [2]: [cr_item_sk#29, cr_order_number#30] Join condition: None (66) Project [codegen id : 20] -Output [3]: [w_warehouse_name#33, i_item_desc#21, d_week_seq#25] -Input [7]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#33, i_item_desc#21, d_week_seq#25, cr_item_sk#39, cr_order_number#40] +Output [3]: [w_warehouse_name#27, i_item_desc#17, d_week_seq#20] +Input [7]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#27, i_item_desc#17, d_week_seq#20, cr_item_sk#29, cr_order_number#30] (67) HashAggregate [codegen id : 20] -Input [3]: [w_warehouse_name#33, i_item_desc#21, d_week_seq#25] -Keys [3]: [i_item_desc#21, w_warehouse_name#33, d_week_seq#25] +Input [3]: [w_warehouse_name#27, i_item_desc#17, d_week_seq#20] +Keys [3]: [i_item_desc#17, w_warehouse_name#27, d_week_seq#20] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#43] -Results [4]: [i_item_desc#21, w_warehouse_name#33, d_week_seq#25, count#44] +Aggregate Attributes [1]: [count#32] +Results [4]: [i_item_desc#17, w_warehouse_name#27, d_week_seq#20, count#33] (68) Exchange -Input [4]: [i_item_desc#21, w_warehouse_name#33, d_week_seq#25, count#44] -Arguments: hashpartitioning(i_item_desc#21, w_warehouse_name#33, d_week_seq#25, 5), ENSURE_REQUIREMENTS, [id=#45] +Input [4]: [i_item_desc#17, w_warehouse_name#27, d_week_seq#20, count#33] +Arguments: hashpartitioning(i_item_desc#17, w_warehouse_name#27, d_week_seq#20, 5), ENSURE_REQUIREMENTS, [plan_id=12] (69) HashAggregate [codegen id : 21] -Input [4]: [i_item_desc#21, w_warehouse_name#33, d_week_seq#25, count#44] -Keys [3]: [i_item_desc#21, w_warehouse_name#33, d_week_seq#25] +Input [4]: [i_item_desc#17, w_warehouse_name#27, d_week_seq#20, count#33] +Keys [3]: [i_item_desc#17, w_warehouse_name#27, d_week_seq#20] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#46] -Results [6]: [i_item_desc#21, w_warehouse_name#33, d_week_seq#25, count(1)#46 AS no_promo#47, count(1)#46 AS promo#48, count(1)#46 AS total_cnt#49] +Aggregate Attributes [1]: [count(1)#34] +Results [6]: [i_item_desc#17, w_warehouse_name#27, d_week_seq#20, count(1)#34 AS no_promo#35, count(1)#34 AS promo#36, count(1)#34 AS total_cnt#37] (70) TakeOrderedAndProject -Input [6]: [i_item_desc#21, w_warehouse_name#33, d_week_seq#25, no_promo#47, promo#48, total_cnt#49] -Arguments: 100, [total_cnt#49 DESC NULLS LAST, i_item_desc#21 ASC NULLS FIRST, w_warehouse_name#33 ASC NULLS FIRST, d_week_seq#25 ASC NULLS FIRST], [i_item_desc#21, w_warehouse_name#33, d_week_seq#25, no_promo#47, promo#48, total_cnt#49] +Input [6]: [i_item_desc#17, w_warehouse_name#27, d_week_seq#20, no_promo#35, promo#36, total_cnt#37] +Arguments: 100, [total_cnt#37 DESC NULLS LAST, i_item_desc#17 ASC NULLS FIRST, w_warehouse_name#27 ASC NULLS FIRST, d_week_seq#20 ASC NULLS FIRST], [i_item_desc#17, w_warehouse_name#27, d_week_seq#20, no_promo#35, promo#36, total_cnt#37] ===== Subqueries ===== @@ -402,52 +402,52 @@ BroadcastExchange (81) (71) Scan parquet default.date_dim -Output [4]: [d_date_sk#23, d_date#24, d_week_seq#25, d_year#50] +Output [4]: [d_date_sk#18, d_date#19, d_week_seq#20, d_year#38] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1999), IsNotNull(d_date_sk), IsNotNull(d_week_seq), IsNotNull(d_date)] ReadSchema: struct (72) ColumnarToRow [codegen id : 1] -Input [4]: [d_date_sk#23, d_date#24, d_week_seq#25, d_year#50] +Input [4]: [d_date_sk#18, d_date#19, d_week_seq#20, d_year#38] (73) Filter [codegen id : 1] -Input [4]: [d_date_sk#23, d_date#24, d_week_seq#25, d_year#50] -Condition : ((((isnotnull(d_year#50) AND (d_year#50 = 1999)) AND isnotnull(d_date_sk#23)) AND isnotnull(d_week_seq#25)) AND isnotnull(d_date#24)) +Input [4]: [d_date_sk#18, d_date#19, d_week_seq#20, d_year#38] +Condition : ((((isnotnull(d_year#38) AND (d_year#38 = 1999)) AND isnotnull(d_date_sk#18)) AND isnotnull(d_week_seq#20)) AND isnotnull(d_date#19)) (74) Project [codegen id : 1] -Output [3]: [d_date_sk#23, d_date#24, d_week_seq#25] -Input [4]: [d_date_sk#23, d_date#24, d_week_seq#25, d_year#50] +Output [3]: [d_date_sk#18, d_date#19, d_week_seq#20] +Input [4]: [d_date_sk#18, d_date#19, d_week_seq#20, d_year#38] (75) BroadcastExchange -Input [3]: [d_date_sk#23, d_date#24, d_week_seq#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#51] +Input [3]: [d_date_sk#18, d_date#19, d_week_seq#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [plan_id=13] (76) Scan parquet default.date_dim -Output [2]: [d_date_sk#26, d_week_seq#52] +Output [2]: [d_date_sk#21, d_week_seq#39] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date_sk)] ReadSchema: struct (77) ColumnarToRow -Input [2]: [d_date_sk#26, d_week_seq#52] +Input [2]: [d_date_sk#21, d_week_seq#39] (78) Filter -Input [2]: [d_date_sk#26, d_week_seq#52] -Condition : (isnotnull(d_week_seq#52) AND isnotnull(d_date_sk#26)) +Input [2]: [d_date_sk#21, d_week_seq#39] +Condition : (isnotnull(d_week_seq#39) AND isnotnull(d_date_sk#21)) (79) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [d_week_seq#25] -Right keys [1]: [d_week_seq#52] +Left keys [1]: [d_week_seq#20] +Right keys [1]: [d_week_seq#39] Join condition: None (80) Project [codegen id : 2] -Output [4]: [d_date_sk#23, d_date#24, d_week_seq#25, d_date_sk#26] -Input [5]: [d_date_sk#23, d_date#24, d_week_seq#25, d_date_sk#26, d_week_seq#52] +Output [4]: [d_date_sk#18, d_date#19, d_week_seq#20, d_date_sk#21] +Input [5]: [d_date_sk#18, d_date#19, d_week_seq#20, d_date_sk#21, d_week_seq#39] (81) BroadcastExchange -Input [4]: [d_date_sk#23, d_date#24, d_week_seq#25, d_date_sk#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#53] +Input [4]: [d_date_sk#18, d_date#19, d_week_seq#20, d_date_sk#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=14] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q72/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q72/explain.txt index e8671f012f8dc..caf6cf2eb75af 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q72/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q72/explain.txt @@ -103,7 +103,7 @@ Condition : ((isnotnull(inv_quantity_on_hand#12) AND isnotnull(inv_item_sk#10)) (7) BroadcastExchange Input [4]: [inv_item_sk#10, inv_warehouse_sk#11, inv_quantity_on_hand#12, inv_date_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_item_sk#4] @@ -115,278 +115,278 @@ Output [9]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_ Input [12]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, inv_item_sk#10, inv_warehouse_sk#11, inv_quantity_on_hand#12, inv_date_sk#13] (10) Scan parquet default.warehouse -Output [2]: [w_warehouse_sk#15, w_warehouse_name#16] +Output [2]: [w_warehouse_sk#14, w_warehouse_name#15] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [2]: [w_warehouse_sk#15, w_warehouse_name#16] +Input [2]: [w_warehouse_sk#14, w_warehouse_name#15] (12) Filter [codegen id : 2] -Input [2]: [w_warehouse_sk#15, w_warehouse_name#16] -Condition : isnotnull(w_warehouse_sk#15) +Input [2]: [w_warehouse_sk#14, w_warehouse_name#15] +Condition : isnotnull(w_warehouse_sk#14) (13) BroadcastExchange -Input [2]: [w_warehouse_sk#15, w_warehouse_name#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#17] +Input [2]: [w_warehouse_sk#14, w_warehouse_name#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 10] Left keys [1]: [inv_warehouse_sk#11] -Right keys [1]: [w_warehouse_sk#15] +Right keys [1]: [w_warehouse_sk#14] Join condition: None (15) Project [codegen id : 10] -Output [9]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16] -Input [11]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_warehouse_sk#11, inv_date_sk#13, w_warehouse_sk#15, w_warehouse_name#16] +Output [9]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15] +Input [11]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_warehouse_sk#11, inv_date_sk#13, w_warehouse_sk#14, w_warehouse_name#15] (16) Scan parquet default.item -Output [2]: [i_item_sk#18, i_item_desc#19] +Output [2]: [i_item_sk#16, i_item_desc#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 3] -Input [2]: [i_item_sk#18, i_item_desc#19] +Input [2]: [i_item_sk#16, i_item_desc#17] (18) Filter [codegen id : 3] -Input [2]: [i_item_sk#18, i_item_desc#19] -Condition : isnotnull(i_item_sk#18) +Input [2]: [i_item_sk#16, i_item_desc#17] +Condition : isnotnull(i_item_sk#16) (19) BroadcastExchange -Input [2]: [i_item_sk#18, i_item_desc#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#20] +Input [2]: [i_item_sk#16, i_item_desc#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (20) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_item_sk#4] -Right keys [1]: [i_item_sk#18] +Right keys [1]: [i_item_sk#16] Join condition: None (21) Project [codegen id : 10] -Output [10]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19] -Input [11]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16, i_item_sk#18, i_item_desc#19] +Output [10]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17] +Input [11]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15, i_item_sk#16, i_item_desc#17] (22) Scan parquet default.customer_demographics -Output [2]: [cd_demo_sk#21, cd_marital_status#22] +Output [2]: [cd_demo_sk#18, cd_marital_status#19] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_marital_status), EqualTo(cd_marital_status,D), IsNotNull(cd_demo_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 4] -Input [2]: [cd_demo_sk#21, cd_marital_status#22] +Input [2]: [cd_demo_sk#18, cd_marital_status#19] (24) Filter [codegen id : 4] -Input [2]: [cd_demo_sk#21, cd_marital_status#22] -Condition : ((isnotnull(cd_marital_status#22) AND (cd_marital_status#22 = D)) AND isnotnull(cd_demo_sk#21)) +Input [2]: [cd_demo_sk#18, cd_marital_status#19] +Condition : ((isnotnull(cd_marital_status#19) AND (cd_marital_status#19 = D)) AND isnotnull(cd_demo_sk#18)) (25) Project [codegen id : 4] -Output [1]: [cd_demo_sk#21] -Input [2]: [cd_demo_sk#21, cd_marital_status#22] +Output [1]: [cd_demo_sk#18] +Input [2]: [cd_demo_sk#18, cd_marital_status#19] (26) BroadcastExchange -Input [1]: [cd_demo_sk#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#23] +Input [1]: [cd_demo_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (27) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_bill_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#21] +Right keys [1]: [cd_demo_sk#18] Join condition: None (28) Project [codegen id : 10] -Output [9]: [cs_ship_date_sk#1, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19] -Input [11]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19, cd_demo_sk#21] +Output [9]: [cs_ship_date_sk#1, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17] +Input [11]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17, cd_demo_sk#18] (29) Scan parquet default.household_demographics -Output [2]: [hd_demo_sk#24, hd_buy_potential#25] +Output [2]: [hd_demo_sk#20, hd_buy_potential#21] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_buy_potential), EqualTo(hd_buy_potential,>10000 ), IsNotNull(hd_demo_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 5] -Input [2]: [hd_demo_sk#24, hd_buy_potential#25] +Input [2]: [hd_demo_sk#20, hd_buy_potential#21] (31) Filter [codegen id : 5] -Input [2]: [hd_demo_sk#24, hd_buy_potential#25] -Condition : ((isnotnull(hd_buy_potential#25) AND (hd_buy_potential#25 = >10000 )) AND isnotnull(hd_demo_sk#24)) +Input [2]: [hd_demo_sk#20, hd_buy_potential#21] +Condition : ((isnotnull(hd_buy_potential#21) AND (hd_buy_potential#21 = >10000 )) AND isnotnull(hd_demo_sk#20)) (32) Project [codegen id : 5] -Output [1]: [hd_demo_sk#24] -Input [2]: [hd_demo_sk#24, hd_buy_potential#25] +Output [1]: [hd_demo_sk#20] +Input [2]: [hd_demo_sk#20, hd_buy_potential#21] (33) BroadcastExchange -Input [1]: [hd_demo_sk#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [1]: [hd_demo_sk#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_bill_hdemo_sk#3] -Right keys [1]: [hd_demo_sk#24] +Right keys [1]: [hd_demo_sk#20] Join condition: None (35) Project [codegen id : 10] -Output [8]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19] -Input [10]: [cs_ship_date_sk#1, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19, hd_demo_sk#24] +Output [8]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17] +Input [10]: [cs_ship_date_sk#1, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17, hd_demo_sk#20] (36) ReusedExchange [Reuses operator id: 75] -Output [3]: [d_date_sk#27, d_date#28, d_week_seq#29] +Output [3]: [d_date_sk#22, d_date#23, d_week_seq#24] (37) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_sold_date_sk#8] -Right keys [1]: [d_date_sk#27] +Right keys [1]: [d_date_sk#22] Join condition: None (38) Project [codegen id : 10] -Output [9]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19, d_date#28, d_week_seq#29] -Input [11]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19, d_date_sk#27, d_date#28, d_week_seq#29] +Output [9]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17, d_date#23, d_week_seq#24] +Input [11]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17, d_date_sk#22, d_date#23, d_week_seq#24] (39) Scan parquet default.date_dim -Output [2]: [d_date_sk#30, d_week_seq#31] +Output [2]: [d_date_sk#25, d_week_seq#26] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date_sk)] ReadSchema: struct (40) ColumnarToRow [codegen id : 7] -Input [2]: [d_date_sk#30, d_week_seq#31] +Input [2]: [d_date_sk#25, d_week_seq#26] (41) Filter [codegen id : 7] -Input [2]: [d_date_sk#30, d_week_seq#31] -Condition : (isnotnull(d_week_seq#31) AND isnotnull(d_date_sk#30)) +Input [2]: [d_date_sk#25, d_week_seq#26] +Condition : (isnotnull(d_week_seq#26) AND isnotnull(d_date_sk#25)) (42) BroadcastExchange -Input [2]: [d_date_sk#30, d_week_seq#31] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, false] as bigint), 32) | (cast(input[0, int, false] as bigint) & 4294967295))),false), [id=#32] +Input [2]: [d_date_sk#25, d_week_seq#26] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, false] as bigint), 32) | (cast(input[0, int, false] as bigint) & 4294967295))),false), [plan_id=6] (43) BroadcastHashJoin [codegen id : 10] -Left keys [2]: [d_week_seq#29, inv_date_sk#13] -Right keys [2]: [d_week_seq#31, d_date_sk#30] +Left keys [2]: [d_week_seq#24, inv_date_sk#13] +Right keys [2]: [d_week_seq#26, d_date_sk#25] Join condition: None (44) Project [codegen id : 10] -Output [8]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_date#28, d_week_seq#29] -Input [11]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19, d_date#28, d_week_seq#29, d_date_sk#30, d_week_seq#31] +Output [8]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_date#23, d_week_seq#24] +Input [11]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17, d_date#23, d_week_seq#24, d_date_sk#25, d_week_seq#26] (45) Scan parquet default.date_dim -Output [2]: [d_date_sk#33, d_date#34] +Output [2]: [d_date_sk#27, d_date#28] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), IsNotNull(d_date_sk)] ReadSchema: struct (46) ColumnarToRow [codegen id : 8] -Input [2]: [d_date_sk#33, d_date#34] +Input [2]: [d_date_sk#27, d_date#28] (47) Filter [codegen id : 8] -Input [2]: [d_date_sk#33, d_date#34] -Condition : (isnotnull(d_date#34) AND isnotnull(d_date_sk#33)) +Input [2]: [d_date_sk#27, d_date#28] +Condition : (isnotnull(d_date#28) AND isnotnull(d_date_sk#27)) (48) BroadcastExchange -Input [2]: [d_date_sk#33, d_date#34] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#35] +Input [2]: [d_date_sk#27, d_date#28] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (49) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_ship_date_sk#1] -Right keys [1]: [d_date_sk#33] -Join condition: (d_date#34 > date_add(d_date#28, 5)) +Right keys [1]: [d_date_sk#27] +Join condition: (d_date#28 > date_add(d_date#23, 5)) (50) Project [codegen id : 10] -Output [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_week_seq#29] -Input [10]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_date#28, d_week_seq#29, d_date_sk#33, d_date#34] +Output [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_week_seq#24] +Input [10]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_date#23, d_week_seq#24, d_date_sk#27, d_date#28] (51) Scan parquet default.promotion -Output [1]: [p_promo_sk#36] +Output [1]: [p_promo_sk#29] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_promo_sk)] ReadSchema: struct (52) ColumnarToRow [codegen id : 9] -Input [1]: [p_promo_sk#36] +Input [1]: [p_promo_sk#29] (53) Filter [codegen id : 9] -Input [1]: [p_promo_sk#36] -Condition : isnotnull(p_promo_sk#36) +Input [1]: [p_promo_sk#29] +Condition : isnotnull(p_promo_sk#29) (54) BroadcastExchange -Input [1]: [p_promo_sk#36] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#37] +Input [1]: [p_promo_sk#29] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] (55) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_promo_sk#5] -Right keys [1]: [p_promo_sk#36] +Right keys [1]: [p_promo_sk#29] Join condition: None (56) Project [codegen id : 10] -Output [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_week_seq#29] -Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_week_seq#29, p_promo_sk#36] +Output [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_week_seq#24] +Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_week_seq#24, p_promo_sk#29] (57) Exchange -Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_week_seq#29] -Arguments: hashpartitioning(cs_item_sk#4, cs_order_number#6, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_week_seq#24] +Arguments: hashpartitioning(cs_item_sk#4, cs_order_number#6, 5), ENSURE_REQUIREMENTS, [plan_id=9] (58) Sort [codegen id : 11] -Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_week_seq#29] +Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_week_seq#24] Arguments: [cs_item_sk#4 ASC NULLS FIRST, cs_order_number#6 ASC NULLS FIRST], false, 0 (59) Scan parquet default.catalog_returns -Output [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] +Output [3]: [cr_item_sk#30, cr_order_number#31, cr_returned_date_sk#32] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct (60) ColumnarToRow [codegen id : 12] -Input [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] +Input [3]: [cr_item_sk#30, cr_order_number#31, cr_returned_date_sk#32] (61) Filter [codegen id : 12] -Input [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] -Condition : (isnotnull(cr_item_sk#39) AND isnotnull(cr_order_number#40)) +Input [3]: [cr_item_sk#30, cr_order_number#31, cr_returned_date_sk#32] +Condition : (isnotnull(cr_item_sk#30) AND isnotnull(cr_order_number#31)) (62) Project [codegen id : 12] -Output [2]: [cr_item_sk#39, cr_order_number#40] -Input [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] +Output [2]: [cr_item_sk#30, cr_order_number#31] +Input [3]: [cr_item_sk#30, cr_order_number#31, cr_returned_date_sk#32] (63) Exchange -Input [2]: [cr_item_sk#39, cr_order_number#40] -Arguments: hashpartitioning(cr_item_sk#39, cr_order_number#40, 5), ENSURE_REQUIREMENTS, [id=#42] +Input [2]: [cr_item_sk#30, cr_order_number#31] +Arguments: hashpartitioning(cr_item_sk#30, cr_order_number#31, 5), ENSURE_REQUIREMENTS, [plan_id=10] (64) Sort [codegen id : 13] -Input [2]: [cr_item_sk#39, cr_order_number#40] -Arguments: [cr_item_sk#39 ASC NULLS FIRST, cr_order_number#40 ASC NULLS FIRST], false, 0 +Input [2]: [cr_item_sk#30, cr_order_number#31] +Arguments: [cr_item_sk#30 ASC NULLS FIRST, cr_order_number#31 ASC NULLS FIRST], false, 0 (65) SortMergeJoin [codegen id : 14] Left keys [2]: [cs_item_sk#4, cs_order_number#6] -Right keys [2]: [cr_item_sk#39, cr_order_number#40] +Right keys [2]: [cr_item_sk#30, cr_order_number#31] Join condition: None (66) Project [codegen id : 14] -Output [3]: [w_warehouse_name#16, i_item_desc#19, d_week_seq#29] -Input [7]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_week_seq#29, cr_item_sk#39, cr_order_number#40] +Output [3]: [w_warehouse_name#15, i_item_desc#17, d_week_seq#24] +Input [7]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_week_seq#24, cr_item_sk#30, cr_order_number#31] (67) HashAggregate [codegen id : 14] -Input [3]: [w_warehouse_name#16, i_item_desc#19, d_week_seq#29] -Keys [3]: [i_item_desc#19, w_warehouse_name#16, d_week_seq#29] +Input [3]: [w_warehouse_name#15, i_item_desc#17, d_week_seq#24] +Keys [3]: [i_item_desc#17, w_warehouse_name#15, d_week_seq#24] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#43] -Results [4]: [i_item_desc#19, w_warehouse_name#16, d_week_seq#29, count#44] +Aggregate Attributes [1]: [count#33] +Results [4]: [i_item_desc#17, w_warehouse_name#15, d_week_seq#24, count#34] (68) Exchange -Input [4]: [i_item_desc#19, w_warehouse_name#16, d_week_seq#29, count#44] -Arguments: hashpartitioning(i_item_desc#19, w_warehouse_name#16, d_week_seq#29, 5), ENSURE_REQUIREMENTS, [id=#45] +Input [4]: [i_item_desc#17, w_warehouse_name#15, d_week_seq#24, count#34] +Arguments: hashpartitioning(i_item_desc#17, w_warehouse_name#15, d_week_seq#24, 5), ENSURE_REQUIREMENTS, [plan_id=11] (69) HashAggregate [codegen id : 15] -Input [4]: [i_item_desc#19, w_warehouse_name#16, d_week_seq#29, count#44] -Keys [3]: [i_item_desc#19, w_warehouse_name#16, d_week_seq#29] +Input [4]: [i_item_desc#17, w_warehouse_name#15, d_week_seq#24, count#34] +Keys [3]: [i_item_desc#17, w_warehouse_name#15, d_week_seq#24] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#46] -Results [6]: [i_item_desc#19, w_warehouse_name#16, d_week_seq#29, count(1)#46 AS no_promo#47, count(1)#46 AS promo#48, count(1)#46 AS total_cnt#49] +Aggregate Attributes [1]: [count(1)#35] +Results [6]: [i_item_desc#17, w_warehouse_name#15, d_week_seq#24, count(1)#35 AS no_promo#36, count(1)#35 AS promo#37, count(1)#35 AS total_cnt#38] (70) TakeOrderedAndProject -Input [6]: [i_item_desc#19, w_warehouse_name#16, d_week_seq#29, no_promo#47, promo#48, total_cnt#49] -Arguments: 100, [total_cnt#49 DESC NULLS LAST, i_item_desc#19 ASC NULLS FIRST, w_warehouse_name#16 ASC NULLS FIRST, d_week_seq#29 ASC NULLS FIRST], [i_item_desc#19, w_warehouse_name#16, d_week_seq#29, no_promo#47, promo#48, total_cnt#49] +Input [6]: [i_item_desc#17, w_warehouse_name#15, d_week_seq#24, no_promo#36, promo#37, total_cnt#38] +Arguments: 100, [total_cnt#38 DESC NULLS LAST, i_item_desc#17 ASC NULLS FIRST, w_warehouse_name#15 ASC NULLS FIRST, d_week_seq#24 ASC NULLS FIRST], [i_item_desc#17, w_warehouse_name#15, d_week_seq#24, no_promo#36, promo#37, total_cnt#38] ===== Subqueries ===== @@ -399,25 +399,25 @@ BroadcastExchange (75) (71) Scan parquet default.date_dim -Output [4]: [d_date_sk#27, d_date#28, d_week_seq#29, d_year#50] +Output [4]: [d_date_sk#22, d_date#23, d_week_seq#24, d_year#39] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1999), IsNotNull(d_date_sk), IsNotNull(d_week_seq), IsNotNull(d_date)] ReadSchema: struct (72) ColumnarToRow [codegen id : 1] -Input [4]: [d_date_sk#27, d_date#28, d_week_seq#29, d_year#50] +Input [4]: [d_date_sk#22, d_date#23, d_week_seq#24, d_year#39] (73) Filter [codegen id : 1] -Input [4]: [d_date_sk#27, d_date#28, d_week_seq#29, d_year#50] -Condition : ((((isnotnull(d_year#50) AND (d_year#50 = 1999)) AND isnotnull(d_date_sk#27)) AND isnotnull(d_week_seq#29)) AND isnotnull(d_date#28)) +Input [4]: [d_date_sk#22, d_date#23, d_week_seq#24, d_year#39] +Condition : ((((isnotnull(d_year#39) AND (d_year#39 = 1999)) AND isnotnull(d_date_sk#22)) AND isnotnull(d_week_seq#24)) AND isnotnull(d_date#23)) (74) Project [codegen id : 1] -Output [3]: [d_date_sk#27, d_date#28, d_week_seq#29] -Input [4]: [d_date_sk#27, d_date#28, d_week_seq#29, d_year#50] +Output [3]: [d_date_sk#22, d_date#23, d_week_seq#24] +Input [4]: [d_date_sk#22, d_date#23, d_week_seq#24, d_year#39] (75) BroadcastExchange -Input [3]: [d_date_sk#27, d_date#28, d_week_seq#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#51] +Input [3]: [d_date_sk#22, d_date#23, d_week_seq#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q73.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q73.sf100/explain.txt index 4ef31a6a29263..e538e2ce20a8c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q73.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q73.sf100/explain.txt @@ -83,7 +83,7 @@ Input [2]: [s_store_sk#8, s_county#9] (11) BroadcastExchange Input [1]: [s_store_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#3] @@ -95,104 +95,104 @@ Output [3]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4] Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, s_store_sk#8] (14) Scan parquet default.household_demographics -Output [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_vehicle_count), IsNotNull(hd_dep_count), Or(EqualTo(hd_buy_potential,>10000 ),EqualTo(hd_buy_potential,unknown )), GreaterThan(hd_vehicle_count,0), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (16) Filter [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] -Condition : (((((isnotnull(hd_vehicle_count#14) AND isnotnull(hd_dep_count#13)) AND ((hd_buy_potential#12 = >10000 ) OR (hd_buy_potential#12 = unknown ))) AND (hd_vehicle_count#14 > 0)) AND ((cast(hd_dep_count#13 as double) / cast(hd_vehicle_count#14 as double)) > 1.0)) AND isnotnull(hd_demo_sk#11)) +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] +Condition : (((((isnotnull(hd_vehicle_count#13) AND isnotnull(hd_dep_count#12)) AND ((hd_buy_potential#11 = >10000 ) OR (hd_buy_potential#11 = unknown ))) AND (hd_vehicle_count#13 > 0)) AND ((cast(hd_dep_count#12 as double) / cast(hd_vehicle_count#13 as double)) > 1.0)) AND isnotnull(hd_demo_sk#10)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#11] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [1]: [hd_demo_sk#10] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (18) BroadcastExchange -Input [1]: [hd_demo_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [hd_demo_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#11] +Right keys [1]: [hd_demo_sk#10] Join condition: None (20) Project [codegen id : 4] Output [2]: [ss_customer_sk#1, ss_ticket_number#4] -Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#11] +Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#10] (21) HashAggregate [codegen id : 4] Input [2]: [ss_customer_sk#1, ss_ticket_number#4] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#16] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Aggregate Attributes [1]: [count#14] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] (22) Exchange -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] -Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] +Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 5] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#19] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#19 AS cnt#20] +Aggregate Attributes [1]: [count(1)#16] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#16 AS cnt#17] (24) Filter [codegen id : 5] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] -Condition : ((cnt#20 >= 1) AND (cnt#20 <= 5)) +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] +Condition : ((cnt#17 >= 1) AND (cnt#17 <= 5)) (25) Exchange -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] -Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] +Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=4] (26) Sort [codegen id : 6] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] Arguments: [ss_customer_sk#1 ASC NULLS FIRST], false, 0 (27) Scan parquet default.customer -Output [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] +Output [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 7] -Input [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (29) Filter [codegen id : 7] -Input [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] -Condition : isnotnull(c_customer_sk#22) +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Condition : isnotnull(c_customer_sk#18) (30) Exchange -Input [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] -Arguments: hashpartitioning(c_customer_sk#22, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Arguments: hashpartitioning(c_customer_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=5] (31) Sort [codegen id : 8] -Input [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] -Arguments: [c_customer_sk#22 ASC NULLS FIRST], false, 0 +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Arguments: [c_customer_sk#18 ASC NULLS FIRST], false, 0 (32) SortMergeJoin [codegen id : 9] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#22] +Right keys [1]: [c_customer_sk#18] Join condition: None (33) Project [codegen id : 9] -Output [6]: [c_last_name#25, c_first_name#24, c_salutation#23, c_preferred_cust_flag#26, ss_ticket_number#4, cnt#20] -Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20, c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] +Output [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17, c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (34) Exchange -Input [6]: [c_last_name#25, c_first_name#24, c_salutation#23, c_preferred_cust_flag#26, ss_ticket_number#4, cnt#20] -Arguments: rangepartitioning(cnt#20 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: rangepartitioning(cnt#17 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [plan_id=6] (35) Sort [codegen id : 10] -Input [6]: [c_last_name#25, c_first_name#24, c_salutation#23, c_preferred_cust_flag#26, ss_ticket_number#4, cnt#20] -Arguments: [cnt#20 DESC NULLS LAST], true, 0 +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: [cnt#17 DESC NULLS LAST], true, 0 ===== Subqueries ===== @@ -205,25 +205,25 @@ BroadcastExchange (40) (36) Scan parquet default.date_dim -Output [3]: [d_date_sk#7, d_year#29, d_dom#30] +Output [3]: [d_date_sk#7, d_year#23, d_dom#24] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_dom), GreaterThanOrEqual(d_dom,1), LessThanOrEqual(d_dom,2), In(d_year, [1999,2000,2001]), IsNotNull(d_date_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#29, d_dom#30] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (38) Filter [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#29, d_dom#30] -Condition : ((((isnotnull(d_dom#30) AND (d_dom#30 >= 1)) AND (d_dom#30 <= 2)) AND d_year#29 IN (1999,2000,2001)) AND isnotnull(d_date_sk#7)) +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] +Condition : ((((isnotnull(d_dom#24) AND (d_dom#24 >= 1)) AND (d_dom#24 <= 2)) AND d_year#23 IN (1999,2000,2001)) AND isnotnull(d_date_sk#7)) (39) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [3]: [d_date_sk#7, d_year#29, d_dom#30] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (40) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#31] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q73/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q73/explain.txt index e3a3d67bd653c..70e0397d07a0f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q73/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q73/explain.txt @@ -80,7 +80,7 @@ Input [2]: [s_store_sk#8, s_county#9] (11) BroadcastExchange Input [1]: [s_store_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#3] @@ -92,92 +92,92 @@ Output [3]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4] Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, s_store_sk#8] (14) Scan parquet default.household_demographics -Output [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_vehicle_count), IsNotNull(hd_dep_count), Or(EqualTo(hd_buy_potential,>10000 ),EqualTo(hd_buy_potential,unknown )), GreaterThan(hd_vehicle_count,0), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (16) Filter [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] -Condition : (((((isnotnull(hd_vehicle_count#14) AND isnotnull(hd_dep_count#13)) AND ((hd_buy_potential#12 = >10000 ) OR (hd_buy_potential#12 = unknown ))) AND (hd_vehicle_count#14 > 0)) AND ((cast(hd_dep_count#13 as double) / cast(hd_vehicle_count#14 as double)) > 1.0)) AND isnotnull(hd_demo_sk#11)) +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] +Condition : (((((isnotnull(hd_vehicle_count#13) AND isnotnull(hd_dep_count#12)) AND ((hd_buy_potential#11 = >10000 ) OR (hd_buy_potential#11 = unknown ))) AND (hd_vehicle_count#13 > 0)) AND ((cast(hd_dep_count#12 as double) / cast(hd_vehicle_count#13 as double)) > 1.0)) AND isnotnull(hd_demo_sk#10)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#11] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [1]: [hd_demo_sk#10] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (18) BroadcastExchange -Input [1]: [hd_demo_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [hd_demo_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#11] +Right keys [1]: [hd_demo_sk#10] Join condition: None (20) Project [codegen id : 4] Output [2]: [ss_customer_sk#1, ss_ticket_number#4] -Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#11] +Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#10] (21) HashAggregate [codegen id : 4] Input [2]: [ss_customer_sk#1, ss_ticket_number#4] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#16] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Aggregate Attributes [1]: [count#14] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] (22) Exchange -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] -Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] +Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 6] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#19] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#19 AS cnt#20] +Aggregate Attributes [1]: [count(1)#16] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#16 AS cnt#17] (24) Filter [codegen id : 6] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] -Condition : ((cnt#20 >= 1) AND (cnt#20 <= 5)) +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] +Condition : ((cnt#17 >= 1) AND (cnt#17 <= 5)) (25) Scan parquet default.customer -Output [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] +Output [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 5] -Input [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (27) Filter [codegen id : 5] -Input [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] -Condition : isnotnull(c_customer_sk#21) +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Condition : isnotnull(c_customer_sk#18) (28) BroadcastExchange -Input [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#26] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (29) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#21] +Right keys [1]: [c_customer_sk#18] Join condition: None (30) Project [codegen id : 6] -Output [6]: [c_last_name#24, c_first_name#23, c_salutation#22, c_preferred_cust_flag#25, ss_ticket_number#4, cnt#20] -Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20, c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] +Output [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17, c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (31) Exchange -Input [6]: [c_last_name#24, c_first_name#23, c_salutation#22, c_preferred_cust_flag#25, ss_ticket_number#4, cnt#20] -Arguments: rangepartitioning(cnt#20 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: rangepartitioning(cnt#17 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [plan_id=5] (32) Sort [codegen id : 7] -Input [6]: [c_last_name#24, c_first_name#23, c_salutation#22, c_preferred_cust_flag#25, ss_ticket_number#4, cnt#20] -Arguments: [cnt#20 DESC NULLS LAST], true, 0 +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: [cnt#17 DESC NULLS LAST], true, 0 ===== Subqueries ===== @@ -190,25 +190,25 @@ BroadcastExchange (37) (33) Scan parquet default.date_dim -Output [3]: [d_date_sk#7, d_year#28, d_dom#29] +Output [3]: [d_date_sk#7, d_year#23, d_dom#24] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_dom), GreaterThanOrEqual(d_dom,1), LessThanOrEqual(d_dom,2), In(d_year, [1999,2000,2001]), IsNotNull(d_date_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (35) Filter [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] -Condition : ((((isnotnull(d_dom#29) AND (d_dom#29 >= 1)) AND (d_dom#29 <= 2)) AND d_year#28 IN (1999,2000,2001)) AND isnotnull(d_date_sk#7)) +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] +Condition : ((((isnotnull(d_dom#24) AND (d_dom#24 >= 1)) AND (d_dom#24 <= 2)) AND d_year#23 IN (1999,2000,2001)) AND isnotnull(d_date_sk#7)) (36) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (37) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#30] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q76.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q76.sf100/explain.txt index 9284172139688..63ea84152629e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q76.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q76.sf100/explain.txt @@ -76,7 +76,7 @@ Condition : isnotnull(d_date_sk#5) (7) BroadcastExchange Input [3]: [d_date_sk#5, d_year#6, d_qoy#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_sold_date_sk#4] @@ -88,161 +88,161 @@ Output [5]: [ss_item_sk#1, ss_store_sk#2, ss_ext_sales_price#3, d_year#6, d_qoy# Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_sold_date_sk#4, d_date_sk#5, d_year#6, d_qoy#7] (10) Scan parquet default.item -Output [2]: [i_item_sk#9, i_category#10] +Output [2]: [i_item_sk#8, i_category#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [2]: [i_item_sk#9, i_category#10] +Input [2]: [i_item_sk#8, i_category#9] (12) Filter [codegen id : 2] -Input [2]: [i_item_sk#9, i_category#10] -Condition : isnotnull(i_item_sk#9) +Input [2]: [i_item_sk#8, i_category#9] +Condition : isnotnull(i_item_sk#8) (13) BroadcastExchange -Input [2]: [i_item_sk#9, i_category#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Input [2]: [i_item_sk#8, i_category#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#9] +Right keys [1]: [i_item_sk#8] Join condition: None (15) Project [codegen id : 3] -Output [6]: [store AS channel#12, ss_store_sk#2 AS col_name#13, d_year#6, d_qoy#7, i_category#10, ss_ext_sales_price#3 AS ext_sales_price#14] -Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_ext_sales_price#3, d_year#6, d_qoy#7, i_item_sk#9, i_category#10] +Output [6]: [store AS channel#10, ss_store_sk#2 AS col_name#11, d_year#6, d_qoy#7, i_category#9, ss_ext_sales_price#3 AS ext_sales_price#12] +Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_ext_sales_price#3, d_year#6, d_qoy#7, i_item_sk#8, i_category#9] (16) Scan parquet default.web_sales -Output [4]: [ws_item_sk#15, ws_ship_customer_sk#16, ws_ext_sales_price#17, ws_sold_date_sk#18] +Output [4]: [ws_item_sk#13, ws_ship_customer_sk#14, ws_ext_sales_price#15, ws_sold_date_sk#16] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#18)] +PartitionFilters: [isnotnull(ws_sold_date_sk#16)] PushedFilters: [IsNull(ws_ship_customer_sk), IsNotNull(ws_item_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 4] -Input [4]: [ws_item_sk#15, ws_ship_customer_sk#16, ws_ext_sales_price#17, ws_sold_date_sk#18] +Input [4]: [ws_item_sk#13, ws_ship_customer_sk#14, ws_ext_sales_price#15, ws_sold_date_sk#16] (18) Filter [codegen id : 4] -Input [4]: [ws_item_sk#15, ws_ship_customer_sk#16, ws_ext_sales_price#17, ws_sold_date_sk#18] -Condition : (isnull(ws_ship_customer_sk#16) AND isnotnull(ws_item_sk#15)) +Input [4]: [ws_item_sk#13, ws_ship_customer_sk#14, ws_ext_sales_price#15, ws_sold_date_sk#16] +Condition : (isnull(ws_ship_customer_sk#14) AND isnotnull(ws_item_sk#13)) (19) BroadcastExchange -Input [4]: [ws_item_sk#15, ws_ship_customer_sk#16, ws_ext_sales_price#17, ws_sold_date_sk#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[3, int, true] as bigint)),false), [id=#19] +Input [4]: [ws_item_sk#13, ws_ship_customer_sk#14, ws_ext_sales_price#15, ws_sold_date_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[3, int, true] as bigint)),false), [plan_id=3] (20) Scan parquet default.date_dim -Output [3]: [d_date_sk#20, d_year#21, d_qoy#22] +Output [3]: [d_date_sk#17, d_year#18, d_qoy#19] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk)] ReadSchema: struct (21) ColumnarToRow -Input [3]: [d_date_sk#20, d_year#21, d_qoy#22] +Input [3]: [d_date_sk#17, d_year#18, d_qoy#19] (22) Filter -Input [3]: [d_date_sk#20, d_year#21, d_qoy#22] -Condition : isnotnull(d_date_sk#20) +Input [3]: [d_date_sk#17, d_year#18, d_qoy#19] +Condition : isnotnull(d_date_sk#17) (23) BroadcastHashJoin [codegen id : 5] -Left keys [1]: [ws_sold_date_sk#18] -Right keys [1]: [d_date_sk#20] +Left keys [1]: [ws_sold_date_sk#16] +Right keys [1]: [d_date_sk#17] Join condition: None (24) Project [codegen id : 5] -Output [5]: [ws_item_sk#15, ws_ship_customer_sk#16, ws_ext_sales_price#17, d_year#21, d_qoy#22] -Input [7]: [ws_item_sk#15, ws_ship_customer_sk#16, ws_ext_sales_price#17, ws_sold_date_sk#18, d_date_sk#20, d_year#21, d_qoy#22] +Output [5]: [ws_item_sk#13, ws_ship_customer_sk#14, ws_ext_sales_price#15, d_year#18, d_qoy#19] +Input [7]: [ws_item_sk#13, ws_ship_customer_sk#14, ws_ext_sales_price#15, ws_sold_date_sk#16, d_date_sk#17, d_year#18, d_qoy#19] (25) BroadcastExchange -Input [5]: [ws_item_sk#15, ws_ship_customer_sk#16, ws_ext_sales_price#17, d_year#21, d_qoy#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#23] +Input [5]: [ws_item_sk#13, ws_ship_customer_sk#14, ws_ext_sales_price#15, d_year#18, d_qoy#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (26) Scan parquet default.item -Output [2]: [i_item_sk#24, i_category#25] +Output [2]: [i_item_sk#20, i_category#21] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (27) ColumnarToRow -Input [2]: [i_item_sk#24, i_category#25] +Input [2]: [i_item_sk#20, i_category#21] (28) Filter -Input [2]: [i_item_sk#24, i_category#25] -Condition : isnotnull(i_item_sk#24) +Input [2]: [i_item_sk#20, i_category#21] +Condition : isnotnull(i_item_sk#20) (29) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ws_item_sk#15] -Right keys [1]: [i_item_sk#24] +Left keys [1]: [ws_item_sk#13] +Right keys [1]: [i_item_sk#20] Join condition: None (30) Project [codegen id : 6] -Output [6]: [web AS channel#26, ws_ship_customer_sk#16 AS col_name#27, d_year#21, d_qoy#22, i_category#25, ws_ext_sales_price#17 AS ext_sales_price#28] -Input [7]: [ws_item_sk#15, ws_ship_customer_sk#16, ws_ext_sales_price#17, d_year#21, d_qoy#22, i_item_sk#24, i_category#25] +Output [6]: [web AS channel#22, ws_ship_customer_sk#14 AS col_name#23, d_year#18, d_qoy#19, i_category#21, ws_ext_sales_price#15 AS ext_sales_price#24] +Input [7]: [ws_item_sk#13, ws_ship_customer_sk#14, ws_ext_sales_price#15, d_year#18, d_qoy#19, i_item_sk#20, i_category#21] (31) Scan parquet default.catalog_sales -Output [4]: [cs_ship_addr_sk#29, cs_item_sk#30, cs_ext_sales_price#31, cs_sold_date_sk#32] +Output [4]: [cs_ship_addr_sk#25, cs_item_sk#26, cs_ext_sales_price#27, cs_sold_date_sk#28] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#32)] +PartitionFilters: [isnotnull(cs_sold_date_sk#28)] PushedFilters: [IsNull(cs_ship_addr_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 9] -Input [4]: [cs_ship_addr_sk#29, cs_item_sk#30, cs_ext_sales_price#31, cs_sold_date_sk#32] +Input [4]: [cs_ship_addr_sk#25, cs_item_sk#26, cs_ext_sales_price#27, cs_sold_date_sk#28] (33) Filter [codegen id : 9] -Input [4]: [cs_ship_addr_sk#29, cs_item_sk#30, cs_ext_sales_price#31, cs_sold_date_sk#32] -Condition : (isnull(cs_ship_addr_sk#29) AND isnotnull(cs_item_sk#30)) +Input [4]: [cs_ship_addr_sk#25, cs_item_sk#26, cs_ext_sales_price#27, cs_sold_date_sk#28] +Condition : (isnull(cs_ship_addr_sk#25) AND isnotnull(cs_item_sk#26)) (34) ReusedExchange [Reuses operator id: 7] -Output [3]: [d_date_sk#33, d_year#34, d_qoy#35] +Output [3]: [d_date_sk#29, d_year#30, d_qoy#31] (35) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [cs_sold_date_sk#32] -Right keys [1]: [d_date_sk#33] +Left keys [1]: [cs_sold_date_sk#28] +Right keys [1]: [d_date_sk#29] Join condition: None (36) Project [codegen id : 9] -Output [5]: [cs_ship_addr_sk#29, cs_item_sk#30, cs_ext_sales_price#31, d_year#34, d_qoy#35] -Input [7]: [cs_ship_addr_sk#29, cs_item_sk#30, cs_ext_sales_price#31, cs_sold_date_sk#32, d_date_sk#33, d_year#34, d_qoy#35] +Output [5]: [cs_ship_addr_sk#25, cs_item_sk#26, cs_ext_sales_price#27, d_year#30, d_qoy#31] +Input [7]: [cs_ship_addr_sk#25, cs_item_sk#26, cs_ext_sales_price#27, cs_sold_date_sk#28, d_date_sk#29, d_year#30, d_qoy#31] (37) ReusedExchange [Reuses operator id: 13] -Output [2]: [i_item_sk#36, i_category#37] +Output [2]: [i_item_sk#32, i_category#33] (38) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [cs_item_sk#30] -Right keys [1]: [i_item_sk#36] +Left keys [1]: [cs_item_sk#26] +Right keys [1]: [i_item_sk#32] Join condition: None (39) Project [codegen id : 9] -Output [6]: [catalog AS channel#38, cs_ship_addr_sk#29 AS col_name#39, d_year#34, d_qoy#35, i_category#37, cs_ext_sales_price#31 AS ext_sales_price#40] -Input [7]: [cs_ship_addr_sk#29, cs_item_sk#30, cs_ext_sales_price#31, d_year#34, d_qoy#35, i_item_sk#36, i_category#37] +Output [6]: [catalog AS channel#34, cs_ship_addr_sk#25 AS col_name#35, d_year#30, d_qoy#31, i_category#33, cs_ext_sales_price#27 AS ext_sales_price#36] +Input [7]: [cs_ship_addr_sk#25, cs_item_sk#26, cs_ext_sales_price#27, d_year#30, d_qoy#31, i_item_sk#32, i_category#33] (40) Union (41) HashAggregate [codegen id : 10] -Input [6]: [channel#12, col_name#13, d_year#6, d_qoy#7, i_category#10, ext_sales_price#14] -Keys [5]: [channel#12, col_name#13, d_year#6, d_qoy#7, i_category#10] -Functions [2]: [partial_count(1), partial_sum(UnscaledValue(ext_sales_price#14))] -Aggregate Attributes [2]: [count#41, sum#42] -Results [7]: [channel#12, col_name#13, d_year#6, d_qoy#7, i_category#10, count#43, sum#44] +Input [6]: [channel#10, col_name#11, d_year#6, d_qoy#7, i_category#9, ext_sales_price#12] +Keys [5]: [channel#10, col_name#11, d_year#6, d_qoy#7, i_category#9] +Functions [2]: [partial_count(1), partial_sum(UnscaledValue(ext_sales_price#12))] +Aggregate Attributes [2]: [count#37, sum#38] +Results [7]: [channel#10, col_name#11, d_year#6, d_qoy#7, i_category#9, count#39, sum#40] (42) Exchange -Input [7]: [channel#12, col_name#13, d_year#6, d_qoy#7, i_category#10, count#43, sum#44] -Arguments: hashpartitioning(channel#12, col_name#13, d_year#6, d_qoy#7, i_category#10, 5), ENSURE_REQUIREMENTS, [id=#45] +Input [7]: [channel#10, col_name#11, d_year#6, d_qoy#7, i_category#9, count#39, sum#40] +Arguments: hashpartitioning(channel#10, col_name#11, d_year#6, d_qoy#7, i_category#9, 5), ENSURE_REQUIREMENTS, [plan_id=5] (43) HashAggregate [codegen id : 11] -Input [7]: [channel#12, col_name#13, d_year#6, d_qoy#7, i_category#10, count#43, sum#44] -Keys [5]: [channel#12, col_name#13, d_year#6, d_qoy#7, i_category#10] -Functions [2]: [count(1), sum(UnscaledValue(ext_sales_price#14))] -Aggregate Attributes [2]: [count(1)#46, sum(UnscaledValue(ext_sales_price#14))#47] -Results [7]: [channel#12, col_name#13, d_year#6, d_qoy#7, i_category#10, count(1)#46 AS sales_cnt#48, MakeDecimal(sum(UnscaledValue(ext_sales_price#14))#47,17,2) AS sales_amt#49] +Input [7]: [channel#10, col_name#11, d_year#6, d_qoy#7, i_category#9, count#39, sum#40] +Keys [5]: [channel#10, col_name#11, d_year#6, d_qoy#7, i_category#9] +Functions [2]: [count(1), sum(UnscaledValue(ext_sales_price#12))] +Aggregate Attributes [2]: [count(1)#41, sum(UnscaledValue(ext_sales_price#12))#42] +Results [7]: [channel#10, col_name#11, d_year#6, d_qoy#7, i_category#9, count(1)#41 AS sales_cnt#43, MakeDecimal(sum(UnscaledValue(ext_sales_price#12))#42,17,2) AS sales_amt#44] (44) TakeOrderedAndProject -Input [7]: [channel#12, col_name#13, d_year#6, d_qoy#7, i_category#10, sales_cnt#48, sales_amt#49] -Arguments: 100, [channel#12 ASC NULLS FIRST, col_name#13 ASC NULLS FIRST, d_year#6 ASC NULLS FIRST, d_qoy#7 ASC NULLS FIRST, i_category#10 ASC NULLS FIRST], [channel#12, col_name#13, d_year#6, d_qoy#7, i_category#10, sales_cnt#48, sales_amt#49] +Input [7]: [channel#10, col_name#11, d_year#6, d_qoy#7, i_category#9, sales_cnt#43, sales_amt#44] +Arguments: 100, [channel#10 ASC NULLS FIRST, col_name#11 ASC NULLS FIRST, d_year#6 ASC NULLS FIRST, d_qoy#7 ASC NULLS FIRST, i_category#9 ASC NULLS FIRST], [channel#10, col_name#11, d_year#6, d_qoy#7, i_category#9, sales_cnt#43, sales_amt#44] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q76/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q76/explain.txt index 026c9396cd025..9a284c06f2b01 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q76/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q76/explain.txt @@ -70,7 +70,7 @@ Condition : isnotnull(i_item_sk#5) (7) BroadcastExchange Input [2]: [i_item_sk#5, i_category#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#1] @@ -82,131 +82,131 @@ Output [4]: [ss_store_sk#2, ss_ext_sales_price#3, ss_sold_date_sk#4, i_category# Input [6]: [ss_item_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_sold_date_sk#4, i_item_sk#5, i_category#6] (10) Scan parquet default.date_dim -Output [3]: [d_date_sk#8, d_year#9, d_qoy#10] +Output [3]: [d_date_sk#7, d_year#8, d_qoy#9] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [3]: [d_date_sk#8, d_year#9, d_qoy#10] +Input [3]: [d_date_sk#7, d_year#8, d_qoy#9] (12) Filter [codegen id : 2] -Input [3]: [d_date_sk#8, d_year#9, d_qoy#10] -Condition : isnotnull(d_date_sk#8) +Input [3]: [d_date_sk#7, d_year#8, d_qoy#9] +Condition : isnotnull(d_date_sk#7) (13) BroadcastExchange -Input [3]: [d_date_sk#8, d_year#9, d_qoy#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Input [3]: [d_date_sk#7, d_year#8, d_qoy#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_sold_date_sk#4] -Right keys [1]: [d_date_sk#8] +Right keys [1]: [d_date_sk#7] Join condition: None (15) Project [codegen id : 3] -Output [6]: [store AS channel#12, ss_store_sk#2 AS col_name#13, d_year#9, d_qoy#10, i_category#6, ss_ext_sales_price#3 AS ext_sales_price#14] -Input [7]: [ss_store_sk#2, ss_ext_sales_price#3, ss_sold_date_sk#4, i_category#6, d_date_sk#8, d_year#9, d_qoy#10] +Output [6]: [store AS channel#10, ss_store_sk#2 AS col_name#11, d_year#8, d_qoy#9, i_category#6, ss_ext_sales_price#3 AS ext_sales_price#12] +Input [7]: [ss_store_sk#2, ss_ext_sales_price#3, ss_sold_date_sk#4, i_category#6, d_date_sk#7, d_year#8, d_qoy#9] (16) Scan parquet default.web_sales -Output [4]: [ws_item_sk#15, ws_ship_customer_sk#16, ws_ext_sales_price#17, ws_sold_date_sk#18] +Output [4]: [ws_item_sk#13, ws_ship_customer_sk#14, ws_ext_sales_price#15, ws_sold_date_sk#16] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#18)] +PartitionFilters: [isnotnull(ws_sold_date_sk#16)] PushedFilters: [IsNull(ws_ship_customer_sk), IsNotNull(ws_item_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 6] -Input [4]: [ws_item_sk#15, ws_ship_customer_sk#16, ws_ext_sales_price#17, ws_sold_date_sk#18] +Input [4]: [ws_item_sk#13, ws_ship_customer_sk#14, ws_ext_sales_price#15, ws_sold_date_sk#16] (18) Filter [codegen id : 6] -Input [4]: [ws_item_sk#15, ws_ship_customer_sk#16, ws_ext_sales_price#17, ws_sold_date_sk#18] -Condition : (isnull(ws_ship_customer_sk#16) AND isnotnull(ws_item_sk#15)) +Input [4]: [ws_item_sk#13, ws_ship_customer_sk#14, ws_ext_sales_price#15, ws_sold_date_sk#16] +Condition : (isnull(ws_ship_customer_sk#14) AND isnotnull(ws_item_sk#13)) (19) ReusedExchange [Reuses operator id: 7] -Output [2]: [i_item_sk#19, i_category#20] +Output [2]: [i_item_sk#17, i_category#18] (20) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ws_item_sk#15] -Right keys [1]: [i_item_sk#19] +Left keys [1]: [ws_item_sk#13] +Right keys [1]: [i_item_sk#17] Join condition: None (21) Project [codegen id : 6] -Output [4]: [ws_ship_customer_sk#16, ws_ext_sales_price#17, ws_sold_date_sk#18, i_category#20] -Input [6]: [ws_item_sk#15, ws_ship_customer_sk#16, ws_ext_sales_price#17, ws_sold_date_sk#18, i_item_sk#19, i_category#20] +Output [4]: [ws_ship_customer_sk#14, ws_ext_sales_price#15, ws_sold_date_sk#16, i_category#18] +Input [6]: [ws_item_sk#13, ws_ship_customer_sk#14, ws_ext_sales_price#15, ws_sold_date_sk#16, i_item_sk#17, i_category#18] (22) ReusedExchange [Reuses operator id: 13] -Output [3]: [d_date_sk#21, d_year#22, d_qoy#23] +Output [3]: [d_date_sk#19, d_year#20, d_qoy#21] (23) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ws_sold_date_sk#18] -Right keys [1]: [d_date_sk#21] +Left keys [1]: [ws_sold_date_sk#16] +Right keys [1]: [d_date_sk#19] Join condition: None (24) Project [codegen id : 6] -Output [6]: [web AS channel#24, ws_ship_customer_sk#16 AS col_name#25, d_year#22, d_qoy#23, i_category#20, ws_ext_sales_price#17 AS ext_sales_price#26] -Input [7]: [ws_ship_customer_sk#16, ws_ext_sales_price#17, ws_sold_date_sk#18, i_category#20, d_date_sk#21, d_year#22, d_qoy#23] +Output [6]: [web AS channel#22, ws_ship_customer_sk#14 AS col_name#23, d_year#20, d_qoy#21, i_category#18, ws_ext_sales_price#15 AS ext_sales_price#24] +Input [7]: [ws_ship_customer_sk#14, ws_ext_sales_price#15, ws_sold_date_sk#16, i_category#18, d_date_sk#19, d_year#20, d_qoy#21] (25) Scan parquet default.catalog_sales -Output [4]: [cs_ship_addr_sk#27, cs_item_sk#28, cs_ext_sales_price#29, cs_sold_date_sk#30] +Output [4]: [cs_ship_addr_sk#25, cs_item_sk#26, cs_ext_sales_price#27, cs_sold_date_sk#28] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#30)] +PartitionFilters: [isnotnull(cs_sold_date_sk#28)] PushedFilters: [IsNull(cs_ship_addr_sk), IsNotNull(cs_item_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 9] -Input [4]: [cs_ship_addr_sk#27, cs_item_sk#28, cs_ext_sales_price#29, cs_sold_date_sk#30] +Input [4]: [cs_ship_addr_sk#25, cs_item_sk#26, cs_ext_sales_price#27, cs_sold_date_sk#28] (27) Filter [codegen id : 9] -Input [4]: [cs_ship_addr_sk#27, cs_item_sk#28, cs_ext_sales_price#29, cs_sold_date_sk#30] -Condition : (isnull(cs_ship_addr_sk#27) AND isnotnull(cs_item_sk#28)) +Input [4]: [cs_ship_addr_sk#25, cs_item_sk#26, cs_ext_sales_price#27, cs_sold_date_sk#28] +Condition : (isnull(cs_ship_addr_sk#25) AND isnotnull(cs_item_sk#26)) (28) ReusedExchange [Reuses operator id: 7] -Output [2]: [i_item_sk#31, i_category#32] +Output [2]: [i_item_sk#29, i_category#30] (29) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [cs_item_sk#28] -Right keys [1]: [i_item_sk#31] +Left keys [1]: [cs_item_sk#26] +Right keys [1]: [i_item_sk#29] Join condition: None (30) Project [codegen id : 9] -Output [4]: [cs_ship_addr_sk#27, cs_ext_sales_price#29, cs_sold_date_sk#30, i_category#32] -Input [6]: [cs_ship_addr_sk#27, cs_item_sk#28, cs_ext_sales_price#29, cs_sold_date_sk#30, i_item_sk#31, i_category#32] +Output [4]: [cs_ship_addr_sk#25, cs_ext_sales_price#27, cs_sold_date_sk#28, i_category#30] +Input [6]: [cs_ship_addr_sk#25, cs_item_sk#26, cs_ext_sales_price#27, cs_sold_date_sk#28, i_item_sk#29, i_category#30] (31) ReusedExchange [Reuses operator id: 13] -Output [3]: [d_date_sk#33, d_year#34, d_qoy#35] +Output [3]: [d_date_sk#31, d_year#32, d_qoy#33] (32) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [cs_sold_date_sk#30] -Right keys [1]: [d_date_sk#33] +Left keys [1]: [cs_sold_date_sk#28] +Right keys [1]: [d_date_sk#31] Join condition: None (33) Project [codegen id : 9] -Output [6]: [catalog AS channel#36, cs_ship_addr_sk#27 AS col_name#37, d_year#34, d_qoy#35, i_category#32, cs_ext_sales_price#29 AS ext_sales_price#38] -Input [7]: [cs_ship_addr_sk#27, cs_ext_sales_price#29, cs_sold_date_sk#30, i_category#32, d_date_sk#33, d_year#34, d_qoy#35] +Output [6]: [catalog AS channel#34, cs_ship_addr_sk#25 AS col_name#35, d_year#32, d_qoy#33, i_category#30, cs_ext_sales_price#27 AS ext_sales_price#36] +Input [7]: [cs_ship_addr_sk#25, cs_ext_sales_price#27, cs_sold_date_sk#28, i_category#30, d_date_sk#31, d_year#32, d_qoy#33] (34) Union (35) HashAggregate [codegen id : 10] -Input [6]: [channel#12, col_name#13, d_year#9, d_qoy#10, i_category#6, ext_sales_price#14] -Keys [5]: [channel#12, col_name#13, d_year#9, d_qoy#10, i_category#6] -Functions [2]: [partial_count(1), partial_sum(UnscaledValue(ext_sales_price#14))] -Aggregate Attributes [2]: [count#39, sum#40] -Results [7]: [channel#12, col_name#13, d_year#9, d_qoy#10, i_category#6, count#41, sum#42] +Input [6]: [channel#10, col_name#11, d_year#8, d_qoy#9, i_category#6, ext_sales_price#12] +Keys [5]: [channel#10, col_name#11, d_year#8, d_qoy#9, i_category#6] +Functions [2]: [partial_count(1), partial_sum(UnscaledValue(ext_sales_price#12))] +Aggregate Attributes [2]: [count#37, sum#38] +Results [7]: [channel#10, col_name#11, d_year#8, d_qoy#9, i_category#6, count#39, sum#40] (36) Exchange -Input [7]: [channel#12, col_name#13, d_year#9, d_qoy#10, i_category#6, count#41, sum#42] -Arguments: hashpartitioning(channel#12, col_name#13, d_year#9, d_qoy#10, i_category#6, 5), ENSURE_REQUIREMENTS, [id=#43] +Input [7]: [channel#10, col_name#11, d_year#8, d_qoy#9, i_category#6, count#39, sum#40] +Arguments: hashpartitioning(channel#10, col_name#11, d_year#8, d_qoy#9, i_category#6, 5), ENSURE_REQUIREMENTS, [plan_id=3] (37) HashAggregate [codegen id : 11] -Input [7]: [channel#12, col_name#13, d_year#9, d_qoy#10, i_category#6, count#41, sum#42] -Keys [5]: [channel#12, col_name#13, d_year#9, d_qoy#10, i_category#6] -Functions [2]: [count(1), sum(UnscaledValue(ext_sales_price#14))] -Aggregate Attributes [2]: [count(1)#44, sum(UnscaledValue(ext_sales_price#14))#45] -Results [7]: [channel#12, col_name#13, d_year#9, d_qoy#10, i_category#6, count(1)#44 AS sales_cnt#46, MakeDecimal(sum(UnscaledValue(ext_sales_price#14))#45,17,2) AS sales_amt#47] +Input [7]: [channel#10, col_name#11, d_year#8, d_qoy#9, i_category#6, count#39, sum#40] +Keys [5]: [channel#10, col_name#11, d_year#8, d_qoy#9, i_category#6] +Functions [2]: [count(1), sum(UnscaledValue(ext_sales_price#12))] +Aggregate Attributes [2]: [count(1)#41, sum(UnscaledValue(ext_sales_price#12))#42] +Results [7]: [channel#10, col_name#11, d_year#8, d_qoy#9, i_category#6, count(1)#41 AS sales_cnt#43, MakeDecimal(sum(UnscaledValue(ext_sales_price#12))#42,17,2) AS sales_amt#44] (38) TakeOrderedAndProject -Input [7]: [channel#12, col_name#13, d_year#9, d_qoy#10, i_category#6, sales_cnt#46, sales_amt#47] -Arguments: 100, [channel#12 ASC NULLS FIRST, col_name#13 ASC NULLS FIRST, d_year#9 ASC NULLS FIRST, d_qoy#10 ASC NULLS FIRST, i_category#6 ASC NULLS FIRST], [channel#12, col_name#13, d_year#9, d_qoy#10, i_category#6, sales_cnt#46, sales_amt#47] +Input [7]: [channel#10, col_name#11, d_year#8, d_qoy#9, i_category#6, sales_cnt#43, sales_amt#44] +Arguments: 100, [channel#10 ASC NULLS FIRST, col_name#11 ASC NULLS FIRST, d_year#8 ASC NULLS FIRST, d_qoy#9 ASC NULLS FIRST, i_category#6 ASC NULLS FIRST], [channel#10, col_name#11, d_year#8, d_qoy#9, i_category#6, sales_cnt#43, sales_amt#44] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q77.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q77.sf100/explain.txt index 04a0ca4cd3027..ed253eecc3782 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q77.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q77.sf100/explain.txt @@ -129,7 +129,7 @@ Condition : isnotnull(s_store_sk#7) (10) BroadcastExchange Input [1]: [s_store_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_store_sk#1] @@ -144,350 +144,350 @@ Input [4]: [ss_store_sk#1, ss_ext_sales_price#2, ss_net_profit#3, s_store_sk#7] Input [3]: [ss_ext_sales_price#2, ss_net_profit#3, s_store_sk#7] Keys [1]: [s_store_sk#7] Functions [2]: [partial_sum(UnscaledValue(ss_ext_sales_price#2)), partial_sum(UnscaledValue(ss_net_profit#3))] -Aggregate Attributes [2]: [sum#9, sum#10] -Results [3]: [s_store_sk#7, sum#11, sum#12] +Aggregate Attributes [2]: [sum#8, sum#9] +Results [3]: [s_store_sk#7, sum#10, sum#11] (14) Exchange -Input [3]: [s_store_sk#7, sum#11, sum#12] -Arguments: hashpartitioning(s_store_sk#7, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [3]: [s_store_sk#7, sum#10, sum#11] +Arguments: hashpartitioning(s_store_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 8] -Input [3]: [s_store_sk#7, sum#11, sum#12] +Input [3]: [s_store_sk#7, sum#10, sum#11] Keys [1]: [s_store_sk#7] Functions [2]: [sum(UnscaledValue(ss_ext_sales_price#2)), sum(UnscaledValue(ss_net_profit#3))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_ext_sales_price#2))#14, sum(UnscaledValue(ss_net_profit#3))#15] -Results [3]: [s_store_sk#7, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS sales#16, MakeDecimal(sum(UnscaledValue(ss_net_profit#3))#15,17,2) AS profit#17] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_ext_sales_price#2))#12, sum(UnscaledValue(ss_net_profit#3))#13] +Results [3]: [s_store_sk#7, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#12,17,2) AS sales#14, MakeDecimal(sum(UnscaledValue(ss_net_profit#3))#13,17,2) AS profit#15] (16) Scan parquet default.store_returns -Output [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21] +Output [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(sr_returned_date_sk#21), dynamicpruningexpression(sr_returned_date_sk#21 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(sr_returned_date_sk#19), dynamicpruningexpression(sr_returned_date_sk#19 IN dynamicpruning#5)] PushedFilters: [IsNotNull(sr_store_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 6] -Input [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21] +Input [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19] (18) Filter [codegen id : 6] -Input [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21] -Condition : isnotnull(sr_store_sk#18) +Input [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19] +Condition : isnotnull(sr_store_sk#16) (19) ReusedExchange [Reuses operator id: 90] -Output [1]: [d_date_sk#22] +Output [1]: [d_date_sk#20] (20) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [sr_returned_date_sk#21] -Right keys [1]: [d_date_sk#22] +Left keys [1]: [sr_returned_date_sk#19] +Right keys [1]: [d_date_sk#20] Join condition: None (21) Project [codegen id : 6] -Output [3]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20] -Input [5]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21, d_date_sk#22] +Output [3]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18] +Input [5]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19, d_date_sk#20] (22) ReusedExchange [Reuses operator id: 10] -Output [1]: [s_store_sk#23] +Output [1]: [s_store_sk#21] (23) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [sr_store_sk#18] -Right keys [1]: [s_store_sk#23] +Left keys [1]: [sr_store_sk#16] +Right keys [1]: [s_store_sk#21] Join condition: None (24) Project [codegen id : 6] -Output [3]: [sr_return_amt#19, sr_net_loss#20, s_store_sk#23] -Input [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, s_store_sk#23] +Output [3]: [sr_return_amt#17, sr_net_loss#18, s_store_sk#21] +Input [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, s_store_sk#21] (25) HashAggregate [codegen id : 6] -Input [3]: [sr_return_amt#19, sr_net_loss#20, s_store_sk#23] -Keys [1]: [s_store_sk#23] -Functions [2]: [partial_sum(UnscaledValue(sr_return_amt#19)), partial_sum(UnscaledValue(sr_net_loss#20))] -Aggregate Attributes [2]: [sum#24, sum#25] -Results [3]: [s_store_sk#23, sum#26, sum#27] +Input [3]: [sr_return_amt#17, sr_net_loss#18, s_store_sk#21] +Keys [1]: [s_store_sk#21] +Functions [2]: [partial_sum(UnscaledValue(sr_return_amt#17)), partial_sum(UnscaledValue(sr_net_loss#18))] +Aggregate Attributes [2]: [sum#22, sum#23] +Results [3]: [s_store_sk#21, sum#24, sum#25] (26) Exchange -Input [3]: [s_store_sk#23, sum#26, sum#27] -Arguments: hashpartitioning(s_store_sk#23, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [3]: [s_store_sk#21, sum#24, sum#25] +Arguments: hashpartitioning(s_store_sk#21, 5), ENSURE_REQUIREMENTS, [plan_id=3] (27) HashAggregate [codegen id : 7] -Input [3]: [s_store_sk#23, sum#26, sum#27] -Keys [1]: [s_store_sk#23] -Functions [2]: [sum(UnscaledValue(sr_return_amt#19)), sum(UnscaledValue(sr_net_loss#20))] -Aggregate Attributes [2]: [sum(UnscaledValue(sr_return_amt#19))#29, sum(UnscaledValue(sr_net_loss#20))#30] -Results [3]: [s_store_sk#23, MakeDecimal(sum(UnscaledValue(sr_return_amt#19))#29,17,2) AS returns#31, MakeDecimal(sum(UnscaledValue(sr_net_loss#20))#30,17,2) AS profit_loss#32] +Input [3]: [s_store_sk#21, sum#24, sum#25] +Keys [1]: [s_store_sk#21] +Functions [2]: [sum(UnscaledValue(sr_return_amt#17)), sum(UnscaledValue(sr_net_loss#18))] +Aggregate Attributes [2]: [sum(UnscaledValue(sr_return_amt#17))#26, sum(UnscaledValue(sr_net_loss#18))#27] +Results [3]: [s_store_sk#21, MakeDecimal(sum(UnscaledValue(sr_return_amt#17))#26,17,2) AS returns#28, MakeDecimal(sum(UnscaledValue(sr_net_loss#18))#27,17,2) AS profit_loss#29] (28) BroadcastExchange -Input [3]: [s_store_sk#23, returns#31, profit_loss#32] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#33] +Input [3]: [s_store_sk#21, returns#28, profit_loss#29] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (29) BroadcastHashJoin [codegen id : 8] Left keys [1]: [s_store_sk#7] -Right keys [1]: [s_store_sk#23] +Right keys [1]: [s_store_sk#21] Join condition: None (30) Project [codegen id : 8] -Output [5]: [sales#16, coalesce(returns#31, 0.00) AS returns#34, CheckOverflow((promote_precision(cast(profit#17 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#32, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#35, store channel AS channel#36, s_store_sk#7 AS id#37] -Input [6]: [s_store_sk#7, sales#16, profit#17, s_store_sk#23, returns#31, profit_loss#32] +Output [5]: [sales#14, coalesce(returns#28, 0.00) AS returns#30, CheckOverflow((promote_precision(cast(profit#15 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#29, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#31, store channel AS channel#32, s_store_sk#7 AS id#33] +Input [6]: [s_store_sk#7, sales#14, profit#15, s_store_sk#21, returns#28, profit_loss#29] (31) Scan parquet default.catalog_sales -Output [4]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40, cs_sold_date_sk#41] +Output [4]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36, cs_sold_date_sk#37] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#41), dynamicpruningexpression(cs_sold_date_sk#41 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#37), dynamicpruningexpression(cs_sold_date_sk#37 IN dynamicpruning#5)] ReadSchema: struct (32) ColumnarToRow [codegen id : 10] -Input [4]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40, cs_sold_date_sk#41] +Input [4]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36, cs_sold_date_sk#37] (33) ReusedExchange [Reuses operator id: 90] -Output [1]: [d_date_sk#42] +Output [1]: [d_date_sk#38] (34) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cs_sold_date_sk#41] -Right keys [1]: [d_date_sk#42] +Left keys [1]: [cs_sold_date_sk#37] +Right keys [1]: [d_date_sk#38] Join condition: None (35) Project [codegen id : 10] -Output [3]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40] -Input [5]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40, cs_sold_date_sk#41, d_date_sk#42] +Output [3]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36] +Input [5]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36, cs_sold_date_sk#37, d_date_sk#38] (36) HashAggregate [codegen id : 10] -Input [3]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40] -Keys [1]: [cs_call_center_sk#38] -Functions [2]: [partial_sum(UnscaledValue(cs_ext_sales_price#39)), partial_sum(UnscaledValue(cs_net_profit#40))] -Aggregate Attributes [2]: [sum#43, sum#44] -Results [3]: [cs_call_center_sk#38, sum#45, sum#46] +Input [3]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36] +Keys [1]: [cs_call_center_sk#34] +Functions [2]: [partial_sum(UnscaledValue(cs_ext_sales_price#35)), partial_sum(UnscaledValue(cs_net_profit#36))] +Aggregate Attributes [2]: [sum#39, sum#40] +Results [3]: [cs_call_center_sk#34, sum#41, sum#42] (37) Exchange -Input [3]: [cs_call_center_sk#38, sum#45, sum#46] -Arguments: hashpartitioning(cs_call_center_sk#38, 5), ENSURE_REQUIREMENTS, [id=#47] +Input [3]: [cs_call_center_sk#34, sum#41, sum#42] +Arguments: hashpartitioning(cs_call_center_sk#34, 5), ENSURE_REQUIREMENTS, [plan_id=5] (38) HashAggregate [codegen id : 14] -Input [3]: [cs_call_center_sk#38, sum#45, sum#46] -Keys [1]: [cs_call_center_sk#38] -Functions [2]: [sum(UnscaledValue(cs_ext_sales_price#39)), sum(UnscaledValue(cs_net_profit#40))] -Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_sales_price#39))#48, sum(UnscaledValue(cs_net_profit#40))#49] -Results [3]: [cs_call_center_sk#38, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#39))#48,17,2) AS sales#50, MakeDecimal(sum(UnscaledValue(cs_net_profit#40))#49,17,2) AS profit#51] +Input [3]: [cs_call_center_sk#34, sum#41, sum#42] +Keys [1]: [cs_call_center_sk#34] +Functions [2]: [sum(UnscaledValue(cs_ext_sales_price#35)), sum(UnscaledValue(cs_net_profit#36))] +Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_sales_price#35))#43, sum(UnscaledValue(cs_net_profit#36))#44] +Results [3]: [cs_call_center_sk#34, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#35))#43,17,2) AS sales#45, MakeDecimal(sum(UnscaledValue(cs_net_profit#36))#44,17,2) AS profit#46] (39) Scan parquet default.catalog_returns -Output [3]: [cr_return_amount#52, cr_net_loss#53, cr_returned_date_sk#54] +Output [3]: [cr_return_amount#47, cr_net_loss#48, cr_returned_date_sk#49] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cr_returned_date_sk#54), dynamicpruningexpression(cr_returned_date_sk#54 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cr_returned_date_sk#49), dynamicpruningexpression(cr_returned_date_sk#49 IN dynamicpruning#5)] ReadSchema: struct (40) ColumnarToRow [codegen id : 12] -Input [3]: [cr_return_amount#52, cr_net_loss#53, cr_returned_date_sk#54] +Input [3]: [cr_return_amount#47, cr_net_loss#48, cr_returned_date_sk#49] (41) ReusedExchange [Reuses operator id: 90] -Output [1]: [d_date_sk#55] +Output [1]: [d_date_sk#50] (42) BroadcastHashJoin [codegen id : 12] -Left keys [1]: [cr_returned_date_sk#54] -Right keys [1]: [d_date_sk#55] +Left keys [1]: [cr_returned_date_sk#49] +Right keys [1]: [d_date_sk#50] Join condition: None (43) Project [codegen id : 12] -Output [2]: [cr_return_amount#52, cr_net_loss#53] -Input [4]: [cr_return_amount#52, cr_net_loss#53, cr_returned_date_sk#54, d_date_sk#55] +Output [2]: [cr_return_amount#47, cr_net_loss#48] +Input [4]: [cr_return_amount#47, cr_net_loss#48, cr_returned_date_sk#49, d_date_sk#50] (44) HashAggregate [codegen id : 12] -Input [2]: [cr_return_amount#52, cr_net_loss#53] +Input [2]: [cr_return_amount#47, cr_net_loss#48] Keys: [] -Functions [2]: [partial_sum(UnscaledValue(cr_return_amount#52)), partial_sum(UnscaledValue(cr_net_loss#53))] -Aggregate Attributes [2]: [sum#56, sum#57] -Results [2]: [sum#58, sum#59] +Functions [2]: [partial_sum(UnscaledValue(cr_return_amount#47)), partial_sum(UnscaledValue(cr_net_loss#48))] +Aggregate Attributes [2]: [sum#51, sum#52] +Results [2]: [sum#53, sum#54] (45) Exchange -Input [2]: [sum#58, sum#59] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#60] +Input [2]: [sum#53, sum#54] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6] (46) HashAggregate [codegen id : 13] -Input [2]: [sum#58, sum#59] +Input [2]: [sum#53, sum#54] Keys: [] -Functions [2]: [sum(UnscaledValue(cr_return_amount#52)), sum(UnscaledValue(cr_net_loss#53))] -Aggregate Attributes [2]: [sum(UnscaledValue(cr_return_amount#52))#61, sum(UnscaledValue(cr_net_loss#53))#62] -Results [2]: [MakeDecimal(sum(UnscaledValue(cr_return_amount#52))#61,17,2) AS returns#63, MakeDecimal(sum(UnscaledValue(cr_net_loss#53))#62,17,2) AS profit_loss#64] +Functions [2]: [sum(UnscaledValue(cr_return_amount#47)), sum(UnscaledValue(cr_net_loss#48))] +Aggregate Attributes [2]: [sum(UnscaledValue(cr_return_amount#47))#55, sum(UnscaledValue(cr_net_loss#48))#56] +Results [2]: [MakeDecimal(sum(UnscaledValue(cr_return_amount#47))#55,17,2) AS returns#57, MakeDecimal(sum(UnscaledValue(cr_net_loss#48))#56,17,2) AS profit_loss#58] (47) BroadcastExchange -Input [2]: [returns#63, profit_loss#64] -Arguments: IdentityBroadcastMode, [id=#65] +Input [2]: [returns#57, profit_loss#58] +Arguments: IdentityBroadcastMode, [plan_id=7] (48) BroadcastNestedLoopJoin [codegen id : 14] Join condition: None (49) Project [codegen id : 14] -Output [5]: [sales#50, returns#63, CheckOverflow((promote_precision(cast(profit#51 as decimal(18,2))) - promote_precision(cast(profit_loss#64 as decimal(18,2)))), DecimalType(18,2)) AS profit#66, catalog channel AS channel#67, cs_call_center_sk#38 AS id#68] -Input [5]: [cs_call_center_sk#38, sales#50, profit#51, returns#63, profit_loss#64] +Output [5]: [sales#45, returns#57, CheckOverflow((promote_precision(cast(profit#46 as decimal(18,2))) - promote_precision(cast(profit_loss#58 as decimal(18,2)))), DecimalType(18,2)) AS profit#59, catalog channel AS channel#60, cs_call_center_sk#34 AS id#61] +Input [5]: [cs_call_center_sk#34, sales#45, profit#46, returns#57, profit_loss#58] (50) Scan parquet default.web_sales -Output [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72] +Output [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#72), dynamicpruningexpression(ws_sold_date_sk#72 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#65), dynamicpruningexpression(ws_sold_date_sk#65 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_web_page_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 17] -Input [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72] +Input [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65] (52) Filter [codegen id : 17] -Input [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72] -Condition : isnotnull(ws_web_page_sk#69) +Input [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65] +Condition : isnotnull(ws_web_page_sk#62) (53) ReusedExchange [Reuses operator id: 90] -Output [1]: [d_date_sk#73] +Output [1]: [d_date_sk#66] (54) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_sold_date_sk#72] -Right keys [1]: [d_date_sk#73] +Left keys [1]: [ws_sold_date_sk#65] +Right keys [1]: [d_date_sk#66] Join condition: None (55) Project [codegen id : 17] -Output [3]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71] -Input [5]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72, d_date_sk#73] +Output [3]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64] +Input [5]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65, d_date_sk#66] (56) Scan parquet default.web_page -Output [1]: [wp_web_page_sk#74] +Output [1]: [wp_web_page_sk#67] Batched: true Location [not included in comparison]/{warehouse_dir}/web_page] PushedFilters: [IsNotNull(wp_web_page_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 16] -Input [1]: [wp_web_page_sk#74] +Input [1]: [wp_web_page_sk#67] (58) Filter [codegen id : 16] -Input [1]: [wp_web_page_sk#74] -Condition : isnotnull(wp_web_page_sk#74) +Input [1]: [wp_web_page_sk#67] +Condition : isnotnull(wp_web_page_sk#67) (59) BroadcastExchange -Input [1]: [wp_web_page_sk#74] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#75] +Input [1]: [wp_web_page_sk#67] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] (60) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_web_page_sk#69] -Right keys [1]: [wp_web_page_sk#74] +Left keys [1]: [ws_web_page_sk#62] +Right keys [1]: [wp_web_page_sk#67] Join condition: None (61) Project [codegen id : 17] -Output [3]: [ws_ext_sales_price#70, ws_net_profit#71, wp_web_page_sk#74] -Input [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, wp_web_page_sk#74] +Output [3]: [ws_ext_sales_price#63, ws_net_profit#64, wp_web_page_sk#67] +Input [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, wp_web_page_sk#67] (62) HashAggregate [codegen id : 17] -Input [3]: [ws_ext_sales_price#70, ws_net_profit#71, wp_web_page_sk#74] -Keys [1]: [wp_web_page_sk#74] -Functions [2]: [partial_sum(UnscaledValue(ws_ext_sales_price#70)), partial_sum(UnscaledValue(ws_net_profit#71))] -Aggregate Attributes [2]: [sum#76, sum#77] -Results [3]: [wp_web_page_sk#74, sum#78, sum#79] +Input [3]: [ws_ext_sales_price#63, ws_net_profit#64, wp_web_page_sk#67] +Keys [1]: [wp_web_page_sk#67] +Functions [2]: [partial_sum(UnscaledValue(ws_ext_sales_price#63)), partial_sum(UnscaledValue(ws_net_profit#64))] +Aggregate Attributes [2]: [sum#68, sum#69] +Results [3]: [wp_web_page_sk#67, sum#70, sum#71] (63) Exchange -Input [3]: [wp_web_page_sk#74, sum#78, sum#79] -Arguments: hashpartitioning(wp_web_page_sk#74, 5), ENSURE_REQUIREMENTS, [id=#80] +Input [3]: [wp_web_page_sk#67, sum#70, sum#71] +Arguments: hashpartitioning(wp_web_page_sk#67, 5), ENSURE_REQUIREMENTS, [plan_id=9] (64) HashAggregate [codegen id : 22] -Input [3]: [wp_web_page_sk#74, sum#78, sum#79] -Keys [1]: [wp_web_page_sk#74] -Functions [2]: [sum(UnscaledValue(ws_ext_sales_price#70)), sum(UnscaledValue(ws_net_profit#71))] -Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_sales_price#70))#81, sum(UnscaledValue(ws_net_profit#71))#82] -Results [3]: [wp_web_page_sk#74, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#70))#81,17,2) AS sales#83, MakeDecimal(sum(UnscaledValue(ws_net_profit#71))#82,17,2) AS profit#84] +Input [3]: [wp_web_page_sk#67, sum#70, sum#71] +Keys [1]: [wp_web_page_sk#67] +Functions [2]: [sum(UnscaledValue(ws_ext_sales_price#63)), sum(UnscaledValue(ws_net_profit#64))] +Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_sales_price#63))#72, sum(UnscaledValue(ws_net_profit#64))#73] +Results [3]: [wp_web_page_sk#67, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#63))#72,17,2) AS sales#74, MakeDecimal(sum(UnscaledValue(ws_net_profit#64))#73,17,2) AS profit#75] (65) Scan parquet default.web_returns -Output [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88] +Output [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(wr_returned_date_sk#88), dynamicpruningexpression(wr_returned_date_sk#88 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(wr_returned_date_sk#79), dynamicpruningexpression(wr_returned_date_sk#79 IN dynamicpruning#5)] PushedFilters: [IsNotNull(wr_web_page_sk)] ReadSchema: struct (66) ColumnarToRow [codegen id : 20] -Input [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88] +Input [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79] (67) Filter [codegen id : 20] -Input [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88] -Condition : isnotnull(wr_web_page_sk#85) +Input [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79] +Condition : isnotnull(wr_web_page_sk#76) (68) ReusedExchange [Reuses operator id: 90] -Output [1]: [d_date_sk#89] +Output [1]: [d_date_sk#80] (69) BroadcastHashJoin [codegen id : 20] -Left keys [1]: [wr_returned_date_sk#88] -Right keys [1]: [d_date_sk#89] +Left keys [1]: [wr_returned_date_sk#79] +Right keys [1]: [d_date_sk#80] Join condition: None (70) Project [codegen id : 20] -Output [3]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87] -Input [5]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88, d_date_sk#89] +Output [3]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78] +Input [5]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79, d_date_sk#80] (71) ReusedExchange [Reuses operator id: 59] -Output [1]: [wp_web_page_sk#90] +Output [1]: [wp_web_page_sk#81] (72) BroadcastHashJoin [codegen id : 20] -Left keys [1]: [wr_web_page_sk#85] -Right keys [1]: [wp_web_page_sk#90] +Left keys [1]: [wr_web_page_sk#76] +Right keys [1]: [wp_web_page_sk#81] Join condition: None (73) Project [codegen id : 20] -Output [3]: [wr_return_amt#86, wr_net_loss#87, wp_web_page_sk#90] -Input [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wp_web_page_sk#90] +Output [3]: [wr_return_amt#77, wr_net_loss#78, wp_web_page_sk#81] +Input [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wp_web_page_sk#81] (74) HashAggregate [codegen id : 20] -Input [3]: [wr_return_amt#86, wr_net_loss#87, wp_web_page_sk#90] -Keys [1]: [wp_web_page_sk#90] -Functions [2]: [partial_sum(UnscaledValue(wr_return_amt#86)), partial_sum(UnscaledValue(wr_net_loss#87))] -Aggregate Attributes [2]: [sum#91, sum#92] -Results [3]: [wp_web_page_sk#90, sum#93, sum#94] +Input [3]: [wr_return_amt#77, wr_net_loss#78, wp_web_page_sk#81] +Keys [1]: [wp_web_page_sk#81] +Functions [2]: [partial_sum(UnscaledValue(wr_return_amt#77)), partial_sum(UnscaledValue(wr_net_loss#78))] +Aggregate Attributes [2]: [sum#82, sum#83] +Results [3]: [wp_web_page_sk#81, sum#84, sum#85] (75) Exchange -Input [3]: [wp_web_page_sk#90, sum#93, sum#94] -Arguments: hashpartitioning(wp_web_page_sk#90, 5), ENSURE_REQUIREMENTS, [id=#95] +Input [3]: [wp_web_page_sk#81, sum#84, sum#85] +Arguments: hashpartitioning(wp_web_page_sk#81, 5), ENSURE_REQUIREMENTS, [plan_id=10] (76) HashAggregate [codegen id : 21] -Input [3]: [wp_web_page_sk#90, sum#93, sum#94] -Keys [1]: [wp_web_page_sk#90] -Functions [2]: [sum(UnscaledValue(wr_return_amt#86)), sum(UnscaledValue(wr_net_loss#87))] -Aggregate Attributes [2]: [sum(UnscaledValue(wr_return_amt#86))#96, sum(UnscaledValue(wr_net_loss#87))#97] -Results [3]: [wp_web_page_sk#90, MakeDecimal(sum(UnscaledValue(wr_return_amt#86))#96,17,2) AS returns#98, MakeDecimal(sum(UnscaledValue(wr_net_loss#87))#97,17,2) AS profit_loss#99] +Input [3]: [wp_web_page_sk#81, sum#84, sum#85] +Keys [1]: [wp_web_page_sk#81] +Functions [2]: [sum(UnscaledValue(wr_return_amt#77)), sum(UnscaledValue(wr_net_loss#78))] +Aggregate Attributes [2]: [sum(UnscaledValue(wr_return_amt#77))#86, sum(UnscaledValue(wr_net_loss#78))#87] +Results [3]: [wp_web_page_sk#81, MakeDecimal(sum(UnscaledValue(wr_return_amt#77))#86,17,2) AS returns#88, MakeDecimal(sum(UnscaledValue(wr_net_loss#78))#87,17,2) AS profit_loss#89] (77) BroadcastExchange -Input [3]: [wp_web_page_sk#90, returns#98, profit_loss#99] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#100] +Input [3]: [wp_web_page_sk#81, returns#88, profit_loss#89] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11] (78) BroadcastHashJoin [codegen id : 22] -Left keys [1]: [wp_web_page_sk#74] -Right keys [1]: [wp_web_page_sk#90] +Left keys [1]: [wp_web_page_sk#67] +Right keys [1]: [wp_web_page_sk#81] Join condition: None (79) Project [codegen id : 22] -Output [5]: [sales#83, coalesce(returns#98, 0.00) AS returns#101, CheckOverflow((promote_precision(cast(profit#84 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#99, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#102, web channel AS channel#103, wp_web_page_sk#74 AS id#104] -Input [6]: [wp_web_page_sk#74, sales#83, profit#84, wp_web_page_sk#90, returns#98, profit_loss#99] +Output [5]: [sales#74, coalesce(returns#88, 0.00) AS returns#90, CheckOverflow((promote_precision(cast(profit#75 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#89, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#91, web channel AS channel#92, wp_web_page_sk#67 AS id#93] +Input [6]: [wp_web_page_sk#67, sales#74, profit#75, wp_web_page_sk#81, returns#88, profit_loss#89] (80) Union (81) Expand [codegen id : 23] -Input [5]: [sales#16, returns#34, profit#35, channel#36, id#37] -Arguments: [[sales#16, returns#34, profit#35, channel#36, id#37, 0], [sales#16, returns#34, profit#35, channel#36, null, 1], [sales#16, returns#34, profit#35, null, null, 3]], [sales#16, returns#34, profit#35, channel#105, id#106, spark_grouping_id#107] +Input [5]: [sales#14, returns#30, profit#31, channel#32, id#33] +Arguments: [[sales#14, returns#30, profit#31, channel#32, id#33, 0], [sales#14, returns#30, profit#31, channel#32, null, 1], [sales#14, returns#30, profit#31, null, null, 3]], [sales#14, returns#30, profit#31, channel#94, id#95, spark_grouping_id#96] (82) HashAggregate [codegen id : 23] -Input [6]: [sales#16, returns#34, profit#35, channel#105, id#106, spark_grouping_id#107] -Keys [3]: [channel#105, id#106, spark_grouping_id#107] -Functions [3]: [partial_sum(sales#16), partial_sum(returns#34), partial_sum(profit#35)] -Aggregate Attributes [6]: [sum#108, isEmpty#109, sum#110, isEmpty#111, sum#112, isEmpty#113] -Results [9]: [channel#105, id#106, spark_grouping_id#107, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119] +Input [6]: [sales#14, returns#30, profit#31, channel#94, id#95, spark_grouping_id#96] +Keys [3]: [channel#94, id#95, spark_grouping_id#96] +Functions [3]: [partial_sum(sales#14), partial_sum(returns#30), partial_sum(profit#31)] +Aggregate Attributes [6]: [sum#97, isEmpty#98, sum#99, isEmpty#100, sum#101, isEmpty#102] +Results [9]: [channel#94, id#95, spark_grouping_id#96, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108] (83) Exchange -Input [9]: [channel#105, id#106, spark_grouping_id#107, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -Arguments: hashpartitioning(channel#105, id#106, spark_grouping_id#107, 5), ENSURE_REQUIREMENTS, [id=#120] +Input [9]: [channel#94, id#95, spark_grouping_id#96, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108] +Arguments: hashpartitioning(channel#94, id#95, spark_grouping_id#96, 5), ENSURE_REQUIREMENTS, [plan_id=12] (84) HashAggregate [codegen id : 24] -Input [9]: [channel#105, id#106, spark_grouping_id#107, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -Keys [3]: [channel#105, id#106, spark_grouping_id#107] -Functions [3]: [sum(sales#16), sum(returns#34), sum(profit#35)] -Aggregate Attributes [3]: [sum(sales#16)#121, sum(returns#34)#122, sum(profit#35)#123] -Results [5]: [channel#105, id#106, sum(sales#16)#121 AS sales#124, sum(returns#34)#122 AS returns#125, sum(profit#35)#123 AS profit#126] +Input [9]: [channel#94, id#95, spark_grouping_id#96, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108] +Keys [3]: [channel#94, id#95, spark_grouping_id#96] +Functions [3]: [sum(sales#14), sum(returns#30), sum(profit#31)] +Aggregate Attributes [3]: [sum(sales#14)#109, sum(returns#30)#110, sum(profit#31)#111] +Results [5]: [channel#94, id#95, sum(sales#14)#109 AS sales#112, sum(returns#30)#110 AS returns#113, sum(profit#31)#111 AS profit#114] (85) TakeOrderedAndProject -Input [5]: [channel#105, id#106, sales#124, returns#125, profit#126] -Arguments: 100, [channel#105 ASC NULLS FIRST, id#106 ASC NULLS FIRST], [channel#105, id#106, sales#124, returns#125, profit#126] +Input [5]: [channel#94, id#95, sales#112, returns#113, profit#114] +Arguments: 100, [channel#94 ASC NULLS FIRST, id#95 ASC NULLS FIRST], [channel#94, id#95, sales#112, returns#113, profit#114] ===== Subqueries ===== @@ -500,35 +500,35 @@ BroadcastExchange (90) (86) Scan parquet default.date_dim -Output [2]: [d_date_sk#6, d_date#127] +Output [2]: [d_date_sk#6, d_date#115] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-08-03), LessThanOrEqual(d_date,2000-09-02), IsNotNull(d_date_sk)] ReadSchema: struct (87) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#6, d_date#127] +Input [2]: [d_date_sk#6, d_date#115] (88) Filter [codegen id : 1] -Input [2]: [d_date_sk#6, d_date#127] -Condition : (((isnotnull(d_date#127) AND (d_date#127 >= 2000-08-03)) AND (d_date#127 <= 2000-09-02)) AND isnotnull(d_date_sk#6)) +Input [2]: [d_date_sk#6, d_date#115] +Condition : (((isnotnull(d_date#115) AND (d_date#115 >= 2000-08-03)) AND (d_date#115 <= 2000-09-02)) AND isnotnull(d_date_sk#6)) (89) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [2]: [d_date_sk#6, d_date#127] +Input [2]: [d_date_sk#6, d_date#115] (90) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#128] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=13] -Subquery:2 Hosting operator id = 16 Hosting Expression = sr_returned_date_sk#21 IN dynamicpruning#5 +Subquery:2 Hosting operator id = 16 Hosting Expression = sr_returned_date_sk#19 IN dynamicpruning#5 -Subquery:3 Hosting operator id = 31 Hosting Expression = cs_sold_date_sk#41 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 31 Hosting Expression = cs_sold_date_sk#37 IN dynamicpruning#5 -Subquery:4 Hosting operator id = 39 Hosting Expression = cr_returned_date_sk#54 IN dynamicpruning#5 +Subquery:4 Hosting operator id = 39 Hosting Expression = cr_returned_date_sk#49 IN dynamicpruning#5 -Subquery:5 Hosting operator id = 50 Hosting Expression = ws_sold_date_sk#72 IN dynamicpruning#5 +Subquery:5 Hosting operator id = 50 Hosting Expression = ws_sold_date_sk#65 IN dynamicpruning#5 -Subquery:6 Hosting operator id = 65 Hosting Expression = wr_returned_date_sk#88 IN dynamicpruning#5 +Subquery:6 Hosting operator id = 65 Hosting Expression = wr_returned_date_sk#79 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q77/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q77/explain.txt index c3cd748f43775..1406aa9f41eac 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q77/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q77/explain.txt @@ -129,7 +129,7 @@ Condition : isnotnull(s_store_sk#7) (10) BroadcastExchange Input [1]: [s_store_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_store_sk#1] @@ -144,350 +144,350 @@ Input [4]: [ss_store_sk#1, ss_ext_sales_price#2, ss_net_profit#3, s_store_sk#7] Input [3]: [ss_ext_sales_price#2, ss_net_profit#3, s_store_sk#7] Keys [1]: [s_store_sk#7] Functions [2]: [partial_sum(UnscaledValue(ss_ext_sales_price#2)), partial_sum(UnscaledValue(ss_net_profit#3))] -Aggregate Attributes [2]: [sum#9, sum#10] -Results [3]: [s_store_sk#7, sum#11, sum#12] +Aggregate Attributes [2]: [sum#8, sum#9] +Results [3]: [s_store_sk#7, sum#10, sum#11] (14) Exchange -Input [3]: [s_store_sk#7, sum#11, sum#12] -Arguments: hashpartitioning(s_store_sk#7, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [3]: [s_store_sk#7, sum#10, sum#11] +Arguments: hashpartitioning(s_store_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 8] -Input [3]: [s_store_sk#7, sum#11, sum#12] +Input [3]: [s_store_sk#7, sum#10, sum#11] Keys [1]: [s_store_sk#7] Functions [2]: [sum(UnscaledValue(ss_ext_sales_price#2)), sum(UnscaledValue(ss_net_profit#3))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_ext_sales_price#2))#14, sum(UnscaledValue(ss_net_profit#3))#15] -Results [3]: [s_store_sk#7, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS sales#16, MakeDecimal(sum(UnscaledValue(ss_net_profit#3))#15,17,2) AS profit#17] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_ext_sales_price#2))#12, sum(UnscaledValue(ss_net_profit#3))#13] +Results [3]: [s_store_sk#7, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#12,17,2) AS sales#14, MakeDecimal(sum(UnscaledValue(ss_net_profit#3))#13,17,2) AS profit#15] (16) Scan parquet default.store_returns -Output [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21] +Output [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(sr_returned_date_sk#21), dynamicpruningexpression(sr_returned_date_sk#21 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(sr_returned_date_sk#19), dynamicpruningexpression(sr_returned_date_sk#19 IN dynamicpruning#5)] PushedFilters: [IsNotNull(sr_store_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 6] -Input [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21] +Input [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19] (18) Filter [codegen id : 6] -Input [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21] -Condition : isnotnull(sr_store_sk#18) +Input [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19] +Condition : isnotnull(sr_store_sk#16) (19) ReusedExchange [Reuses operator id: 90] -Output [1]: [d_date_sk#22] +Output [1]: [d_date_sk#20] (20) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [sr_returned_date_sk#21] -Right keys [1]: [d_date_sk#22] +Left keys [1]: [sr_returned_date_sk#19] +Right keys [1]: [d_date_sk#20] Join condition: None (21) Project [codegen id : 6] -Output [3]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20] -Input [5]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21, d_date_sk#22] +Output [3]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18] +Input [5]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19, d_date_sk#20] (22) ReusedExchange [Reuses operator id: 10] -Output [1]: [s_store_sk#23] +Output [1]: [s_store_sk#21] (23) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [sr_store_sk#18] -Right keys [1]: [s_store_sk#23] +Left keys [1]: [sr_store_sk#16] +Right keys [1]: [s_store_sk#21] Join condition: None (24) Project [codegen id : 6] -Output [3]: [sr_return_amt#19, sr_net_loss#20, s_store_sk#23] -Input [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, s_store_sk#23] +Output [3]: [sr_return_amt#17, sr_net_loss#18, s_store_sk#21] +Input [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, s_store_sk#21] (25) HashAggregate [codegen id : 6] -Input [3]: [sr_return_amt#19, sr_net_loss#20, s_store_sk#23] -Keys [1]: [s_store_sk#23] -Functions [2]: [partial_sum(UnscaledValue(sr_return_amt#19)), partial_sum(UnscaledValue(sr_net_loss#20))] -Aggregate Attributes [2]: [sum#24, sum#25] -Results [3]: [s_store_sk#23, sum#26, sum#27] +Input [3]: [sr_return_amt#17, sr_net_loss#18, s_store_sk#21] +Keys [1]: [s_store_sk#21] +Functions [2]: [partial_sum(UnscaledValue(sr_return_amt#17)), partial_sum(UnscaledValue(sr_net_loss#18))] +Aggregate Attributes [2]: [sum#22, sum#23] +Results [3]: [s_store_sk#21, sum#24, sum#25] (26) Exchange -Input [3]: [s_store_sk#23, sum#26, sum#27] -Arguments: hashpartitioning(s_store_sk#23, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [3]: [s_store_sk#21, sum#24, sum#25] +Arguments: hashpartitioning(s_store_sk#21, 5), ENSURE_REQUIREMENTS, [plan_id=3] (27) HashAggregate [codegen id : 7] -Input [3]: [s_store_sk#23, sum#26, sum#27] -Keys [1]: [s_store_sk#23] -Functions [2]: [sum(UnscaledValue(sr_return_amt#19)), sum(UnscaledValue(sr_net_loss#20))] -Aggregate Attributes [2]: [sum(UnscaledValue(sr_return_amt#19))#29, sum(UnscaledValue(sr_net_loss#20))#30] -Results [3]: [s_store_sk#23, MakeDecimal(sum(UnscaledValue(sr_return_amt#19))#29,17,2) AS returns#31, MakeDecimal(sum(UnscaledValue(sr_net_loss#20))#30,17,2) AS profit_loss#32] +Input [3]: [s_store_sk#21, sum#24, sum#25] +Keys [1]: [s_store_sk#21] +Functions [2]: [sum(UnscaledValue(sr_return_amt#17)), sum(UnscaledValue(sr_net_loss#18))] +Aggregate Attributes [2]: [sum(UnscaledValue(sr_return_amt#17))#26, sum(UnscaledValue(sr_net_loss#18))#27] +Results [3]: [s_store_sk#21, MakeDecimal(sum(UnscaledValue(sr_return_amt#17))#26,17,2) AS returns#28, MakeDecimal(sum(UnscaledValue(sr_net_loss#18))#27,17,2) AS profit_loss#29] (28) BroadcastExchange -Input [3]: [s_store_sk#23, returns#31, profit_loss#32] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#33] +Input [3]: [s_store_sk#21, returns#28, profit_loss#29] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (29) BroadcastHashJoin [codegen id : 8] Left keys [1]: [s_store_sk#7] -Right keys [1]: [s_store_sk#23] +Right keys [1]: [s_store_sk#21] Join condition: None (30) Project [codegen id : 8] -Output [5]: [sales#16, coalesce(returns#31, 0.00) AS returns#34, CheckOverflow((promote_precision(cast(profit#17 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#32, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#35, store channel AS channel#36, s_store_sk#7 AS id#37] -Input [6]: [s_store_sk#7, sales#16, profit#17, s_store_sk#23, returns#31, profit_loss#32] +Output [5]: [sales#14, coalesce(returns#28, 0.00) AS returns#30, CheckOverflow((promote_precision(cast(profit#15 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#29, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#31, store channel AS channel#32, s_store_sk#7 AS id#33] +Input [6]: [s_store_sk#7, sales#14, profit#15, s_store_sk#21, returns#28, profit_loss#29] (31) Scan parquet default.catalog_sales -Output [4]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40, cs_sold_date_sk#41] +Output [4]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36, cs_sold_date_sk#37] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#41), dynamicpruningexpression(cs_sold_date_sk#41 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#37), dynamicpruningexpression(cs_sold_date_sk#37 IN dynamicpruning#5)] ReadSchema: struct (32) ColumnarToRow [codegen id : 10] -Input [4]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40, cs_sold_date_sk#41] +Input [4]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36, cs_sold_date_sk#37] (33) ReusedExchange [Reuses operator id: 90] -Output [1]: [d_date_sk#42] +Output [1]: [d_date_sk#38] (34) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cs_sold_date_sk#41] -Right keys [1]: [d_date_sk#42] +Left keys [1]: [cs_sold_date_sk#37] +Right keys [1]: [d_date_sk#38] Join condition: None (35) Project [codegen id : 10] -Output [3]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40] -Input [5]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40, cs_sold_date_sk#41, d_date_sk#42] +Output [3]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36] +Input [5]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36, cs_sold_date_sk#37, d_date_sk#38] (36) HashAggregate [codegen id : 10] -Input [3]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40] -Keys [1]: [cs_call_center_sk#38] -Functions [2]: [partial_sum(UnscaledValue(cs_ext_sales_price#39)), partial_sum(UnscaledValue(cs_net_profit#40))] -Aggregate Attributes [2]: [sum#43, sum#44] -Results [3]: [cs_call_center_sk#38, sum#45, sum#46] +Input [3]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36] +Keys [1]: [cs_call_center_sk#34] +Functions [2]: [partial_sum(UnscaledValue(cs_ext_sales_price#35)), partial_sum(UnscaledValue(cs_net_profit#36))] +Aggregate Attributes [2]: [sum#39, sum#40] +Results [3]: [cs_call_center_sk#34, sum#41, sum#42] (37) Exchange -Input [3]: [cs_call_center_sk#38, sum#45, sum#46] -Arguments: hashpartitioning(cs_call_center_sk#38, 5), ENSURE_REQUIREMENTS, [id=#47] +Input [3]: [cs_call_center_sk#34, sum#41, sum#42] +Arguments: hashpartitioning(cs_call_center_sk#34, 5), ENSURE_REQUIREMENTS, [plan_id=5] (38) HashAggregate [codegen id : 11] -Input [3]: [cs_call_center_sk#38, sum#45, sum#46] -Keys [1]: [cs_call_center_sk#38] -Functions [2]: [sum(UnscaledValue(cs_ext_sales_price#39)), sum(UnscaledValue(cs_net_profit#40))] -Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_sales_price#39))#48, sum(UnscaledValue(cs_net_profit#40))#49] -Results [3]: [cs_call_center_sk#38, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#39))#48,17,2) AS sales#50, MakeDecimal(sum(UnscaledValue(cs_net_profit#40))#49,17,2) AS profit#51] +Input [3]: [cs_call_center_sk#34, sum#41, sum#42] +Keys [1]: [cs_call_center_sk#34] +Functions [2]: [sum(UnscaledValue(cs_ext_sales_price#35)), sum(UnscaledValue(cs_net_profit#36))] +Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_sales_price#35))#43, sum(UnscaledValue(cs_net_profit#36))#44] +Results [3]: [cs_call_center_sk#34, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#35))#43,17,2) AS sales#45, MakeDecimal(sum(UnscaledValue(cs_net_profit#36))#44,17,2) AS profit#46] (39) BroadcastExchange -Input [3]: [cs_call_center_sk#38, sales#50, profit#51] -Arguments: IdentityBroadcastMode, [id=#52] +Input [3]: [cs_call_center_sk#34, sales#45, profit#46] +Arguments: IdentityBroadcastMode, [plan_id=6] (40) Scan parquet default.catalog_returns -Output [3]: [cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] +Output [3]: [cr_return_amount#47, cr_net_loss#48, cr_returned_date_sk#49] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cr_returned_date_sk#55), dynamicpruningexpression(cr_returned_date_sk#55 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cr_returned_date_sk#49), dynamicpruningexpression(cr_returned_date_sk#49 IN dynamicpruning#5)] ReadSchema: struct (41) ColumnarToRow [codegen id : 13] -Input [3]: [cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] +Input [3]: [cr_return_amount#47, cr_net_loss#48, cr_returned_date_sk#49] (42) ReusedExchange [Reuses operator id: 90] -Output [1]: [d_date_sk#56] +Output [1]: [d_date_sk#50] (43) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [cr_returned_date_sk#55] -Right keys [1]: [d_date_sk#56] +Left keys [1]: [cr_returned_date_sk#49] +Right keys [1]: [d_date_sk#50] Join condition: None (44) Project [codegen id : 13] -Output [2]: [cr_return_amount#53, cr_net_loss#54] -Input [4]: [cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55, d_date_sk#56] +Output [2]: [cr_return_amount#47, cr_net_loss#48] +Input [4]: [cr_return_amount#47, cr_net_loss#48, cr_returned_date_sk#49, d_date_sk#50] (45) HashAggregate [codegen id : 13] -Input [2]: [cr_return_amount#53, cr_net_loss#54] +Input [2]: [cr_return_amount#47, cr_net_loss#48] Keys: [] -Functions [2]: [partial_sum(UnscaledValue(cr_return_amount#53)), partial_sum(UnscaledValue(cr_net_loss#54))] -Aggregate Attributes [2]: [sum#57, sum#58] -Results [2]: [sum#59, sum#60] +Functions [2]: [partial_sum(UnscaledValue(cr_return_amount#47)), partial_sum(UnscaledValue(cr_net_loss#48))] +Aggregate Attributes [2]: [sum#51, sum#52] +Results [2]: [sum#53, sum#54] (46) Exchange -Input [2]: [sum#59, sum#60] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#61] +Input [2]: [sum#53, sum#54] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (47) HashAggregate -Input [2]: [sum#59, sum#60] +Input [2]: [sum#53, sum#54] Keys: [] -Functions [2]: [sum(UnscaledValue(cr_return_amount#53)), sum(UnscaledValue(cr_net_loss#54))] -Aggregate Attributes [2]: [sum(UnscaledValue(cr_return_amount#53))#62, sum(UnscaledValue(cr_net_loss#54))#63] -Results [2]: [MakeDecimal(sum(UnscaledValue(cr_return_amount#53))#62,17,2) AS returns#64, MakeDecimal(sum(UnscaledValue(cr_net_loss#54))#63,17,2) AS profit_loss#65] +Functions [2]: [sum(UnscaledValue(cr_return_amount#47)), sum(UnscaledValue(cr_net_loss#48))] +Aggregate Attributes [2]: [sum(UnscaledValue(cr_return_amount#47))#55, sum(UnscaledValue(cr_net_loss#48))#56] +Results [2]: [MakeDecimal(sum(UnscaledValue(cr_return_amount#47))#55,17,2) AS returns#57, MakeDecimal(sum(UnscaledValue(cr_net_loss#48))#56,17,2) AS profit_loss#58] (48) BroadcastNestedLoopJoin [codegen id : 14] Join condition: None (49) Project [codegen id : 14] -Output [5]: [sales#50, returns#64, CheckOverflow((promote_precision(cast(profit#51 as decimal(18,2))) - promote_precision(cast(profit_loss#65 as decimal(18,2)))), DecimalType(18,2)) AS profit#66, catalog channel AS channel#67, cs_call_center_sk#38 AS id#68] -Input [5]: [cs_call_center_sk#38, sales#50, profit#51, returns#64, profit_loss#65] +Output [5]: [sales#45, returns#57, CheckOverflow((promote_precision(cast(profit#46 as decimal(18,2))) - promote_precision(cast(profit_loss#58 as decimal(18,2)))), DecimalType(18,2)) AS profit#59, catalog channel AS channel#60, cs_call_center_sk#34 AS id#61] +Input [5]: [cs_call_center_sk#34, sales#45, profit#46, returns#57, profit_loss#58] (50) Scan parquet default.web_sales -Output [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72] +Output [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#72), dynamicpruningexpression(ws_sold_date_sk#72 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#65), dynamicpruningexpression(ws_sold_date_sk#65 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_web_page_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 17] -Input [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72] +Input [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65] (52) Filter [codegen id : 17] -Input [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72] -Condition : isnotnull(ws_web_page_sk#69) +Input [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65] +Condition : isnotnull(ws_web_page_sk#62) (53) ReusedExchange [Reuses operator id: 90] -Output [1]: [d_date_sk#73] +Output [1]: [d_date_sk#66] (54) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_sold_date_sk#72] -Right keys [1]: [d_date_sk#73] +Left keys [1]: [ws_sold_date_sk#65] +Right keys [1]: [d_date_sk#66] Join condition: None (55) Project [codegen id : 17] -Output [3]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71] -Input [5]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72, d_date_sk#73] +Output [3]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64] +Input [5]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65, d_date_sk#66] (56) Scan parquet default.web_page -Output [1]: [wp_web_page_sk#74] +Output [1]: [wp_web_page_sk#67] Batched: true Location [not included in comparison]/{warehouse_dir}/web_page] PushedFilters: [IsNotNull(wp_web_page_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 16] -Input [1]: [wp_web_page_sk#74] +Input [1]: [wp_web_page_sk#67] (58) Filter [codegen id : 16] -Input [1]: [wp_web_page_sk#74] -Condition : isnotnull(wp_web_page_sk#74) +Input [1]: [wp_web_page_sk#67] +Condition : isnotnull(wp_web_page_sk#67) (59) BroadcastExchange -Input [1]: [wp_web_page_sk#74] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#75] +Input [1]: [wp_web_page_sk#67] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] (60) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_web_page_sk#69] -Right keys [1]: [wp_web_page_sk#74] +Left keys [1]: [ws_web_page_sk#62] +Right keys [1]: [wp_web_page_sk#67] Join condition: None (61) Project [codegen id : 17] -Output [3]: [ws_ext_sales_price#70, ws_net_profit#71, wp_web_page_sk#74] -Input [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, wp_web_page_sk#74] +Output [3]: [ws_ext_sales_price#63, ws_net_profit#64, wp_web_page_sk#67] +Input [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, wp_web_page_sk#67] (62) HashAggregate [codegen id : 17] -Input [3]: [ws_ext_sales_price#70, ws_net_profit#71, wp_web_page_sk#74] -Keys [1]: [wp_web_page_sk#74] -Functions [2]: [partial_sum(UnscaledValue(ws_ext_sales_price#70)), partial_sum(UnscaledValue(ws_net_profit#71))] -Aggregate Attributes [2]: [sum#76, sum#77] -Results [3]: [wp_web_page_sk#74, sum#78, sum#79] +Input [3]: [ws_ext_sales_price#63, ws_net_profit#64, wp_web_page_sk#67] +Keys [1]: [wp_web_page_sk#67] +Functions [2]: [partial_sum(UnscaledValue(ws_ext_sales_price#63)), partial_sum(UnscaledValue(ws_net_profit#64))] +Aggregate Attributes [2]: [sum#68, sum#69] +Results [3]: [wp_web_page_sk#67, sum#70, sum#71] (63) Exchange -Input [3]: [wp_web_page_sk#74, sum#78, sum#79] -Arguments: hashpartitioning(wp_web_page_sk#74, 5), ENSURE_REQUIREMENTS, [id=#80] +Input [3]: [wp_web_page_sk#67, sum#70, sum#71] +Arguments: hashpartitioning(wp_web_page_sk#67, 5), ENSURE_REQUIREMENTS, [plan_id=9] (64) HashAggregate [codegen id : 22] -Input [3]: [wp_web_page_sk#74, sum#78, sum#79] -Keys [1]: [wp_web_page_sk#74] -Functions [2]: [sum(UnscaledValue(ws_ext_sales_price#70)), sum(UnscaledValue(ws_net_profit#71))] -Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_sales_price#70))#81, sum(UnscaledValue(ws_net_profit#71))#82] -Results [3]: [wp_web_page_sk#74, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#70))#81,17,2) AS sales#83, MakeDecimal(sum(UnscaledValue(ws_net_profit#71))#82,17,2) AS profit#84] +Input [3]: [wp_web_page_sk#67, sum#70, sum#71] +Keys [1]: [wp_web_page_sk#67] +Functions [2]: [sum(UnscaledValue(ws_ext_sales_price#63)), sum(UnscaledValue(ws_net_profit#64))] +Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_sales_price#63))#72, sum(UnscaledValue(ws_net_profit#64))#73] +Results [3]: [wp_web_page_sk#67, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#63))#72,17,2) AS sales#74, MakeDecimal(sum(UnscaledValue(ws_net_profit#64))#73,17,2) AS profit#75] (65) Scan parquet default.web_returns -Output [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88] +Output [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(wr_returned_date_sk#88), dynamicpruningexpression(wr_returned_date_sk#88 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(wr_returned_date_sk#79), dynamicpruningexpression(wr_returned_date_sk#79 IN dynamicpruning#5)] PushedFilters: [IsNotNull(wr_web_page_sk)] ReadSchema: struct (66) ColumnarToRow [codegen id : 20] -Input [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88] +Input [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79] (67) Filter [codegen id : 20] -Input [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88] -Condition : isnotnull(wr_web_page_sk#85) +Input [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79] +Condition : isnotnull(wr_web_page_sk#76) (68) ReusedExchange [Reuses operator id: 90] -Output [1]: [d_date_sk#89] +Output [1]: [d_date_sk#80] (69) BroadcastHashJoin [codegen id : 20] -Left keys [1]: [wr_returned_date_sk#88] -Right keys [1]: [d_date_sk#89] +Left keys [1]: [wr_returned_date_sk#79] +Right keys [1]: [d_date_sk#80] Join condition: None (70) Project [codegen id : 20] -Output [3]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87] -Input [5]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88, d_date_sk#89] +Output [3]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78] +Input [5]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79, d_date_sk#80] (71) ReusedExchange [Reuses operator id: 59] -Output [1]: [wp_web_page_sk#90] +Output [1]: [wp_web_page_sk#81] (72) BroadcastHashJoin [codegen id : 20] -Left keys [1]: [wr_web_page_sk#85] -Right keys [1]: [wp_web_page_sk#90] +Left keys [1]: [wr_web_page_sk#76] +Right keys [1]: [wp_web_page_sk#81] Join condition: None (73) Project [codegen id : 20] -Output [3]: [wr_return_amt#86, wr_net_loss#87, wp_web_page_sk#90] -Input [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wp_web_page_sk#90] +Output [3]: [wr_return_amt#77, wr_net_loss#78, wp_web_page_sk#81] +Input [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wp_web_page_sk#81] (74) HashAggregate [codegen id : 20] -Input [3]: [wr_return_amt#86, wr_net_loss#87, wp_web_page_sk#90] -Keys [1]: [wp_web_page_sk#90] -Functions [2]: [partial_sum(UnscaledValue(wr_return_amt#86)), partial_sum(UnscaledValue(wr_net_loss#87))] -Aggregate Attributes [2]: [sum#91, sum#92] -Results [3]: [wp_web_page_sk#90, sum#93, sum#94] +Input [3]: [wr_return_amt#77, wr_net_loss#78, wp_web_page_sk#81] +Keys [1]: [wp_web_page_sk#81] +Functions [2]: [partial_sum(UnscaledValue(wr_return_amt#77)), partial_sum(UnscaledValue(wr_net_loss#78))] +Aggregate Attributes [2]: [sum#82, sum#83] +Results [3]: [wp_web_page_sk#81, sum#84, sum#85] (75) Exchange -Input [3]: [wp_web_page_sk#90, sum#93, sum#94] -Arguments: hashpartitioning(wp_web_page_sk#90, 5), ENSURE_REQUIREMENTS, [id=#95] +Input [3]: [wp_web_page_sk#81, sum#84, sum#85] +Arguments: hashpartitioning(wp_web_page_sk#81, 5), ENSURE_REQUIREMENTS, [plan_id=10] (76) HashAggregate [codegen id : 21] -Input [3]: [wp_web_page_sk#90, sum#93, sum#94] -Keys [1]: [wp_web_page_sk#90] -Functions [2]: [sum(UnscaledValue(wr_return_amt#86)), sum(UnscaledValue(wr_net_loss#87))] -Aggregate Attributes [2]: [sum(UnscaledValue(wr_return_amt#86))#96, sum(UnscaledValue(wr_net_loss#87))#97] -Results [3]: [wp_web_page_sk#90, MakeDecimal(sum(UnscaledValue(wr_return_amt#86))#96,17,2) AS returns#98, MakeDecimal(sum(UnscaledValue(wr_net_loss#87))#97,17,2) AS profit_loss#99] +Input [3]: [wp_web_page_sk#81, sum#84, sum#85] +Keys [1]: [wp_web_page_sk#81] +Functions [2]: [sum(UnscaledValue(wr_return_amt#77)), sum(UnscaledValue(wr_net_loss#78))] +Aggregate Attributes [2]: [sum(UnscaledValue(wr_return_amt#77))#86, sum(UnscaledValue(wr_net_loss#78))#87] +Results [3]: [wp_web_page_sk#81, MakeDecimal(sum(UnscaledValue(wr_return_amt#77))#86,17,2) AS returns#88, MakeDecimal(sum(UnscaledValue(wr_net_loss#78))#87,17,2) AS profit_loss#89] (77) BroadcastExchange -Input [3]: [wp_web_page_sk#90, returns#98, profit_loss#99] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#100] +Input [3]: [wp_web_page_sk#81, returns#88, profit_loss#89] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11] (78) BroadcastHashJoin [codegen id : 22] -Left keys [1]: [wp_web_page_sk#74] -Right keys [1]: [wp_web_page_sk#90] +Left keys [1]: [wp_web_page_sk#67] +Right keys [1]: [wp_web_page_sk#81] Join condition: None (79) Project [codegen id : 22] -Output [5]: [sales#83, coalesce(returns#98, 0.00) AS returns#101, CheckOverflow((promote_precision(cast(profit#84 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#99, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#102, web channel AS channel#103, wp_web_page_sk#74 AS id#104] -Input [6]: [wp_web_page_sk#74, sales#83, profit#84, wp_web_page_sk#90, returns#98, profit_loss#99] +Output [5]: [sales#74, coalesce(returns#88, 0.00) AS returns#90, CheckOverflow((promote_precision(cast(profit#75 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#89, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#91, web channel AS channel#92, wp_web_page_sk#67 AS id#93] +Input [6]: [wp_web_page_sk#67, sales#74, profit#75, wp_web_page_sk#81, returns#88, profit_loss#89] (80) Union (81) Expand [codegen id : 23] -Input [5]: [sales#16, returns#34, profit#35, channel#36, id#37] -Arguments: [[sales#16, returns#34, profit#35, channel#36, id#37, 0], [sales#16, returns#34, profit#35, channel#36, null, 1], [sales#16, returns#34, profit#35, null, null, 3]], [sales#16, returns#34, profit#35, channel#105, id#106, spark_grouping_id#107] +Input [5]: [sales#14, returns#30, profit#31, channel#32, id#33] +Arguments: [[sales#14, returns#30, profit#31, channel#32, id#33, 0], [sales#14, returns#30, profit#31, channel#32, null, 1], [sales#14, returns#30, profit#31, null, null, 3]], [sales#14, returns#30, profit#31, channel#94, id#95, spark_grouping_id#96] (82) HashAggregate [codegen id : 23] -Input [6]: [sales#16, returns#34, profit#35, channel#105, id#106, spark_grouping_id#107] -Keys [3]: [channel#105, id#106, spark_grouping_id#107] -Functions [3]: [partial_sum(sales#16), partial_sum(returns#34), partial_sum(profit#35)] -Aggregate Attributes [6]: [sum#108, isEmpty#109, sum#110, isEmpty#111, sum#112, isEmpty#113] -Results [9]: [channel#105, id#106, spark_grouping_id#107, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119] +Input [6]: [sales#14, returns#30, profit#31, channel#94, id#95, spark_grouping_id#96] +Keys [3]: [channel#94, id#95, spark_grouping_id#96] +Functions [3]: [partial_sum(sales#14), partial_sum(returns#30), partial_sum(profit#31)] +Aggregate Attributes [6]: [sum#97, isEmpty#98, sum#99, isEmpty#100, sum#101, isEmpty#102] +Results [9]: [channel#94, id#95, spark_grouping_id#96, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108] (83) Exchange -Input [9]: [channel#105, id#106, spark_grouping_id#107, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -Arguments: hashpartitioning(channel#105, id#106, spark_grouping_id#107, 5), ENSURE_REQUIREMENTS, [id=#120] +Input [9]: [channel#94, id#95, spark_grouping_id#96, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108] +Arguments: hashpartitioning(channel#94, id#95, spark_grouping_id#96, 5), ENSURE_REQUIREMENTS, [plan_id=12] (84) HashAggregate [codegen id : 24] -Input [9]: [channel#105, id#106, spark_grouping_id#107, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119] -Keys [3]: [channel#105, id#106, spark_grouping_id#107] -Functions [3]: [sum(sales#16), sum(returns#34), sum(profit#35)] -Aggregate Attributes [3]: [sum(sales#16)#121, sum(returns#34)#122, sum(profit#35)#123] -Results [5]: [channel#105, id#106, sum(sales#16)#121 AS sales#124, sum(returns#34)#122 AS returns#125, sum(profit#35)#123 AS profit#126] +Input [9]: [channel#94, id#95, spark_grouping_id#96, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108] +Keys [3]: [channel#94, id#95, spark_grouping_id#96] +Functions [3]: [sum(sales#14), sum(returns#30), sum(profit#31)] +Aggregate Attributes [3]: [sum(sales#14)#109, sum(returns#30)#110, sum(profit#31)#111] +Results [5]: [channel#94, id#95, sum(sales#14)#109 AS sales#112, sum(returns#30)#110 AS returns#113, sum(profit#31)#111 AS profit#114] (85) TakeOrderedAndProject -Input [5]: [channel#105, id#106, sales#124, returns#125, profit#126] -Arguments: 100, [channel#105 ASC NULLS FIRST, id#106 ASC NULLS FIRST], [channel#105, id#106, sales#124, returns#125, profit#126] +Input [5]: [channel#94, id#95, sales#112, returns#113, profit#114] +Arguments: 100, [channel#94 ASC NULLS FIRST, id#95 ASC NULLS FIRST], [channel#94, id#95, sales#112, returns#113, profit#114] ===== Subqueries ===== @@ -500,35 +500,35 @@ BroadcastExchange (90) (86) Scan parquet default.date_dim -Output [2]: [d_date_sk#6, d_date#127] +Output [2]: [d_date_sk#6, d_date#115] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-08-03), LessThanOrEqual(d_date,2000-09-02), IsNotNull(d_date_sk)] ReadSchema: struct (87) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#6, d_date#127] +Input [2]: [d_date_sk#6, d_date#115] (88) Filter [codegen id : 1] -Input [2]: [d_date_sk#6, d_date#127] -Condition : (((isnotnull(d_date#127) AND (d_date#127 >= 2000-08-03)) AND (d_date#127 <= 2000-09-02)) AND isnotnull(d_date_sk#6)) +Input [2]: [d_date_sk#6, d_date#115] +Condition : (((isnotnull(d_date#115) AND (d_date#115 >= 2000-08-03)) AND (d_date#115 <= 2000-09-02)) AND isnotnull(d_date_sk#6)) (89) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [2]: [d_date_sk#6, d_date#127] +Input [2]: [d_date_sk#6, d_date#115] (90) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#128] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=13] -Subquery:2 Hosting operator id = 16 Hosting Expression = sr_returned_date_sk#21 IN dynamicpruning#5 +Subquery:2 Hosting operator id = 16 Hosting Expression = sr_returned_date_sk#19 IN dynamicpruning#5 -Subquery:3 Hosting operator id = 31 Hosting Expression = cs_sold_date_sk#41 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 31 Hosting Expression = cs_sold_date_sk#37 IN dynamicpruning#5 -Subquery:4 Hosting operator id = 40 Hosting Expression = cr_returned_date_sk#55 IN dynamicpruning#5 +Subquery:4 Hosting operator id = 40 Hosting Expression = cr_returned_date_sk#49 IN dynamicpruning#5 -Subquery:5 Hosting operator id = 50 Hosting Expression = ws_sold_date_sk#72 IN dynamicpruning#5 +Subquery:5 Hosting operator id = 50 Hosting Expression = ws_sold_date_sk#65 IN dynamicpruning#5 -Subquery:6 Hosting operator id = 65 Hosting Expression = wr_returned_date_sk#88 IN dynamicpruning#5 +Subquery:6 Hosting operator id = 65 Hosting Expression = wr_returned_date_sk#79 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q79.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q79.sf100/explain.txt index 386e889f9ef4a..4687d7445557e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q79.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q79.sf100/explain.txt @@ -81,7 +81,7 @@ Input [3]: [hd_demo_sk#11, hd_dep_count#12, hd_vehicle_count#13] (11) BroadcastExchange Input [1]: [hd_demo_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] @@ -93,96 +93,96 @@ Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, hd_demo_sk#11] (14) Scan parquet default.store -Output [3]: [s_store_sk#15, s_number_employees#16, s_city#17] +Output [3]: [s_store_sk#14, s_number_employees#15, s_city#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_number_employees), GreaterThanOrEqual(s_number_employees,200), LessThanOrEqual(s_number_employees,295), IsNotNull(s_store_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [3]: [s_store_sk#15, s_number_employees#16, s_city#17] +Input [3]: [s_store_sk#14, s_number_employees#15, s_city#16] (16) Filter [codegen id : 3] -Input [3]: [s_store_sk#15, s_number_employees#16, s_city#17] -Condition : (((isnotnull(s_number_employees#16) AND (s_number_employees#16 >= 200)) AND (s_number_employees#16 <= 295)) AND isnotnull(s_store_sk#15)) +Input [3]: [s_store_sk#14, s_number_employees#15, s_city#16] +Condition : (((isnotnull(s_number_employees#15) AND (s_number_employees#15 >= 200)) AND (s_number_employees#15 <= 295)) AND isnotnull(s_store_sk#14)) (17) Project [codegen id : 3] -Output [2]: [s_store_sk#15, s_city#17] -Input [3]: [s_store_sk#15, s_number_employees#16, s_city#17] +Output [2]: [s_store_sk#14, s_city#16] +Input [3]: [s_store_sk#14, s_number_employees#15, s_city#16] (18) BroadcastExchange -Input [2]: [s_store_sk#15, s_city#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [2]: [s_store_sk#14, s_city#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#4] -Right keys [1]: [s_store_sk#15] +Right keys [1]: [s_store_sk#14] Join condition: None (20) Project [codegen id : 4] -Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#17] -Input [8]: [ss_customer_sk#1, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_store_sk#15, s_city#17] +Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#16] +Input [8]: [ss_customer_sk#1, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_store_sk#14, s_city#16] (21) HashAggregate [codegen id : 4] -Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#17] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#17] +Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#16] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#16] Functions [2]: [partial_sum(UnscaledValue(ss_coupon_amt#6)), partial_sum(UnscaledValue(ss_net_profit#7))] -Aggregate Attributes [2]: [sum#19, sum#20] -Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#17, sum#21, sum#22] +Aggregate Attributes [2]: [sum#17, sum#18] +Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#16, sum#19, sum#20] (22) Exchange -Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#17, sum#21, sum#22] -Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#17, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#16, sum#19, sum#20] +Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#16, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 5] -Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#17, sum#21, sum#22] -Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#17] +Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#16, sum#19, sum#20] +Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#16] Functions [2]: [sum(UnscaledValue(ss_coupon_amt#6)), sum(UnscaledValue(ss_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#24, sum(UnscaledValue(ss_net_profit#7))#25] -Results [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#17, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#24,17,2) AS amt#26, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#25,17,2) AS profit#27] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#21, sum(UnscaledValue(ss_net_profit#7))#22] +Results [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#16, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#21,17,2) AS amt#23, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#22,17,2) AS profit#24] (24) Exchange -Input [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#17, amt#26, profit#27] -Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#16, amt#23, profit#24] +Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=4] (25) Sort [codegen id : 6] -Input [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#17, amt#26, profit#27] +Input [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#16, amt#23, profit#24] Arguments: [ss_customer_sk#1 ASC NULLS FIRST], false, 0 (26) Scan parquet default.customer -Output [3]: [c_customer_sk#29, c_first_name#30, c_last_name#31] +Output [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 7] -Input [3]: [c_customer_sk#29, c_first_name#30, c_last_name#31] +Input [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] (28) Filter [codegen id : 7] -Input [3]: [c_customer_sk#29, c_first_name#30, c_last_name#31] -Condition : isnotnull(c_customer_sk#29) +Input [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] +Condition : isnotnull(c_customer_sk#25) (29) Exchange -Input [3]: [c_customer_sk#29, c_first_name#30, c_last_name#31] -Arguments: hashpartitioning(c_customer_sk#29, 5), ENSURE_REQUIREMENTS, [id=#32] +Input [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] +Arguments: hashpartitioning(c_customer_sk#25, 5), ENSURE_REQUIREMENTS, [plan_id=5] (30) Sort [codegen id : 8] -Input [3]: [c_customer_sk#29, c_first_name#30, c_last_name#31] -Arguments: [c_customer_sk#29 ASC NULLS FIRST], false, 0 +Input [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] +Arguments: [c_customer_sk#25 ASC NULLS FIRST], false, 0 (31) SortMergeJoin [codegen id : 9] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#29] +Right keys [1]: [c_customer_sk#25] Join condition: None (32) Project [codegen id : 9] -Output [7]: [c_last_name#31, c_first_name#30, substr(s_city#17, 1, 30) AS substr(s_city, 1, 30)#33, ss_ticket_number#5, amt#26, profit#27, s_city#17] -Input [8]: [ss_ticket_number#5, ss_customer_sk#1, s_city#17, amt#26, profit#27, c_customer_sk#29, c_first_name#30, c_last_name#31] +Output [7]: [c_last_name#27, c_first_name#26, substr(s_city#16, 1, 30) AS substr(s_city, 1, 30)#28, ss_ticket_number#5, amt#23, profit#24, s_city#16] +Input [8]: [ss_ticket_number#5, ss_customer_sk#1, s_city#16, amt#23, profit#24, c_customer_sk#25, c_first_name#26, c_last_name#27] (33) TakeOrderedAndProject -Input [7]: [c_last_name#31, c_first_name#30, substr(s_city, 1, 30)#33, ss_ticket_number#5, amt#26, profit#27, s_city#17] -Arguments: 100, [c_last_name#31 ASC NULLS FIRST, c_first_name#30 ASC NULLS FIRST, substr(s_city#17, 1, 30) ASC NULLS FIRST, profit#27 ASC NULLS FIRST], [c_last_name#31, c_first_name#30, substr(s_city, 1, 30)#33, ss_ticket_number#5, amt#26, profit#27] +Input [7]: [c_last_name#27, c_first_name#26, substr(s_city, 1, 30)#28, ss_ticket_number#5, amt#23, profit#24, s_city#16] +Arguments: 100, [c_last_name#27 ASC NULLS FIRST, c_first_name#26 ASC NULLS FIRST, substr(s_city#16, 1, 30) ASC NULLS FIRST, profit#24 ASC NULLS FIRST], [c_last_name#27, c_first_name#26, substr(s_city, 1, 30)#28, ss_ticket_number#5, amt#23, profit#24] ===== Subqueries ===== @@ -195,25 +195,25 @@ BroadcastExchange (38) (34) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#34, d_dow#35] +Output [3]: [d_date_sk#10, d_year#29, d_dow#30] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_dow), EqualTo(d_dow,1), In(d_year, [1999,2000,2001]), IsNotNull(d_date_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#34, d_dow#35] +Input [3]: [d_date_sk#10, d_year#29, d_dow#30] (36) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#34, d_dow#35] -Condition : (((isnotnull(d_dow#35) AND (d_dow#35 = 1)) AND d_year#34 IN (1999,2000,2001)) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#10, d_year#29, d_dow#30] +Condition : (((isnotnull(d_dow#30) AND (d_dow#30 = 1)) AND d_year#29 IN (1999,2000,2001)) AND isnotnull(d_date_sk#10)) (37) Project [codegen id : 1] Output [1]: [d_date_sk#10] -Input [3]: [d_date_sk#10, d_year#34, d_dow#35] +Input [3]: [d_date_sk#10, d_year#29, d_dow#30] (38) BroadcastExchange Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#36] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q79/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q79/explain.txt index 723a46f2bbcf4..3dedb7c5e356c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q79/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q79/explain.txt @@ -78,7 +78,7 @@ Input [3]: [s_store_sk#11, s_number_employees#12, s_city#13] (11) BroadcastExchange Input [2]: [s_store_sk#11, s_city#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#4] @@ -90,84 +90,84 @@ Output [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, Input [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_store_sk#11, s_city#13] (14) Scan parquet default.household_demographics -Output [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Output [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [Or(EqualTo(hd_dep_count,6),GreaterThan(hd_vehicle_count,2)), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] (16) Filter [codegen id : 3] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] -Condition : (((hd_dep_count#16 = 6) OR (hd_vehicle_count#17 > 2)) AND isnotnull(hd_demo_sk#15)) +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] +Condition : (((hd_dep_count#15 = 6) OR (hd_vehicle_count#16 > 2)) AND isnotnull(hd_demo_sk#14)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#15] -Input [3]: [hd_demo_sk#15, hd_dep_count#16, hd_vehicle_count#17] +Output [1]: [hd_demo_sk#14] +Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16] (18) BroadcastExchange -Input [1]: [hd_demo_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [1]: [hd_demo_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#15] +Right keys [1]: [hd_demo_sk#14] Join condition: None (20) Project [codegen id : 4] Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#13] -Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#13, hd_demo_sk#15] +Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#13, hd_demo_sk#14] (21) HashAggregate [codegen id : 4] Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_city#13] Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13] Functions [2]: [partial_sum(UnscaledValue(ss_coupon_amt#6)), partial_sum(UnscaledValue(ss_net_profit#7))] -Aggregate Attributes [2]: [sum#19, sum#20] -Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, sum#21, sum#22] +Aggregate Attributes [2]: [sum#17, sum#18] +Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, sum#19, sum#20] (22) Exchange -Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, sum#21, sum#22] -Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, sum#19, sum#20] +Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 6] -Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, sum#21, sum#22] +Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13, sum#19, sum#20] Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, s_city#13] Functions [2]: [sum(UnscaledValue(ss_coupon_amt#6)), sum(UnscaledValue(ss_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#24, sum(UnscaledValue(ss_net_profit#7))#25] -Results [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#13, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#24,17,2) AS amt#26, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#25,17,2) AS profit#27] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#21, sum(UnscaledValue(ss_net_profit#7))#22] +Results [5]: [ss_ticket_number#5, ss_customer_sk#1, s_city#13, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#21,17,2) AS amt#23, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#22,17,2) AS profit#24] (24) Scan parquet default.customer -Output [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30] +Output [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 5] -Input [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30] +Input [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] (26) Filter [codegen id : 5] -Input [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30] -Condition : isnotnull(c_customer_sk#28) +Input [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] +Condition : isnotnull(c_customer_sk#25) (27) BroadcastExchange -Input [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#31] +Input [3]: [c_customer_sk#25, c_first_name#26, c_last_name#27] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (28) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#28] +Right keys [1]: [c_customer_sk#25] Join condition: None (29) Project [codegen id : 6] -Output [7]: [c_last_name#30, c_first_name#29, substr(s_city#13, 1, 30) AS substr(s_city, 1, 30)#32, ss_ticket_number#5, amt#26, profit#27, s_city#13] -Input [8]: [ss_ticket_number#5, ss_customer_sk#1, s_city#13, amt#26, profit#27, c_customer_sk#28, c_first_name#29, c_last_name#30] +Output [7]: [c_last_name#27, c_first_name#26, substr(s_city#13, 1, 30) AS substr(s_city, 1, 30)#28, ss_ticket_number#5, amt#23, profit#24, s_city#13] +Input [8]: [ss_ticket_number#5, ss_customer_sk#1, s_city#13, amt#23, profit#24, c_customer_sk#25, c_first_name#26, c_last_name#27] (30) TakeOrderedAndProject -Input [7]: [c_last_name#30, c_first_name#29, substr(s_city, 1, 30)#32, ss_ticket_number#5, amt#26, profit#27, s_city#13] -Arguments: 100, [c_last_name#30 ASC NULLS FIRST, c_first_name#29 ASC NULLS FIRST, substr(s_city#13, 1, 30) ASC NULLS FIRST, profit#27 ASC NULLS FIRST], [c_last_name#30, c_first_name#29, substr(s_city, 1, 30)#32, ss_ticket_number#5, amt#26, profit#27] +Input [7]: [c_last_name#27, c_first_name#26, substr(s_city, 1, 30)#28, ss_ticket_number#5, amt#23, profit#24, s_city#13] +Arguments: 100, [c_last_name#27 ASC NULLS FIRST, c_first_name#26 ASC NULLS FIRST, substr(s_city#13, 1, 30) ASC NULLS FIRST, profit#24 ASC NULLS FIRST], [c_last_name#27, c_first_name#26, substr(s_city, 1, 30)#28, ss_ticket_number#5, amt#23, profit#24] ===== Subqueries ===== @@ -180,25 +180,25 @@ BroadcastExchange (35) (31) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#33, d_dow#34] +Output [3]: [d_date_sk#10, d_year#29, d_dow#30] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_dow), EqualTo(d_dow,1), In(d_year, [1999,2000,2001]), IsNotNull(d_date_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#33, d_dow#34] +Input [3]: [d_date_sk#10, d_year#29, d_dow#30] (33) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#33, d_dow#34] -Condition : (((isnotnull(d_dow#34) AND (d_dow#34 = 1)) AND d_year#33 IN (1999,2000,2001)) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#10, d_year#29, d_dow#30] +Condition : (((isnotnull(d_dow#30) AND (d_dow#30 = 1)) AND d_year#29 IN (1999,2000,2001)) AND isnotnull(d_date_sk#10)) (34) Project [codegen id : 1] Output [1]: [d_date_sk#10] -Input [3]: [d_date_sk#10, d_year#33, d_dow#34] +Input [3]: [d_date_sk#10, d_year#29, d_dow#30] (35) BroadcastExchange Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q8.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q8.sf100/explain.txt index e8c77e7de05eb..2ff71b73acc62 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q8.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q8.sf100/explain.txt @@ -93,7 +93,7 @@ Condition : (isnotnull(s_store_sk#6) AND isnotnull(s_zip#8)) (10) BroadcastExchange Input [3]: [s_store_sk#6, s_store_name#7, s_zip#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_store_sk#1] @@ -106,177 +106,177 @@ Input [5]: [ss_store_sk#1, ss_net_profit#2, s_store_sk#6, s_store_name#7, s_zip# (13) Exchange Input [3]: [ss_net_profit#2, s_store_name#7, s_zip#8] -Arguments: hashpartitioning(substr(s_zip#8, 1, 2), 5), ENSURE_REQUIREMENTS, [id=#10] +Arguments: hashpartitioning(substr(s_zip#8, 1, 2), 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) Sort [codegen id : 4] Input [3]: [ss_net_profit#2, s_store_name#7, s_zip#8] Arguments: [substr(s_zip#8, 1, 2) ASC NULLS FIRST], false, 0 (15) Scan parquet default.customer_address -Output [1]: [ca_zip#11] +Output [1]: [ca_zip#9] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] ReadSchema: struct (16) ColumnarToRow [codegen id : 11] -Input [1]: [ca_zip#11] +Input [1]: [ca_zip#9] (17) Filter [codegen id : 11] -Input [1]: [ca_zip#11] -Condition : (substr(ca_zip#11, 1, 5) INSET 10144, 10336, 10390, 10445, 10516, 10567, 11101, 11356, 11376, 11489, 11634, 11928, 12305, 13354, 13375, 13376, 13394, 13595, 13695, 13955, 14060, 14089, 14171, 14328, 14663, 14867, 14922, 15126, 15146, 15371, 15455, 15559, 15723, 15734, 15765, 15798, 15882, 16021, 16725, 16807, 17043, 17183, 17871, 17879, 17920, 18119, 18270, 18376, 18383, 18426, 18652, 18767, 18799, 18840, 18842, 18845, 18906, 19430, 19505, 19512, 19515, 19736, 19769, 19849, 20004, 20260, 20548, 21076, 21195, 21286, 21309, 21337, 21756, 22152, 22245, 22246, 22351, 22437, 22461, 22685, 22744, 22752, 22927, 23006, 23470, 23932, 23968, 24128, 24206, 24317, 24610, 24671, 24676, 24996, 25003, 25103, 25280, 25486, 25631, 25733, 25782, 25858, 25989, 26065, 26105, 26231, 26233, 26653, 26689, 26859, 27068, 27156, 27385, 27700, 28286, 28488, 28545, 28577, 28587, 28709, 28810, 28898, 28915, 29178, 29741, 29839, 30010, 30122, 30431, 30450, 30469, 30625, 30903, 31016, 31029, 31387, 31671, 31880, 32213, 32754, 33123, 33282, 33515, 33786, 34102, 34322, 34425, 35258, 35458, 35474, 35576, 35850, 35942, 36233, 36420, 36446, 36495, 36634, 37125, 37126, 37930, 38122, 38193, 38415, 38607, 38935, 39127, 39192, 39371, 39516, 39736, 39861, 39972, 40081, 40162, 40558, 40604, 41248, 41367, 41368, 41766, 41918, 42029, 42666, 42961, 43285, 43848, 43933, 44165, 44438, 45200, 45266, 45375, 45549, 45692, 45721, 45748, 46081, 46136, 46820, 47305, 47537, 47770, 48033, 48425, 48583, 49130, 49156, 49448, 50016, 50298, 50308, 50412, 51061, 51103, 51200, 51211, 51622, 51649, 51650, 51798, 51949, 52867, 53179, 53268, 53535, 53672, 54364, 54601, 54917, 55253, 55307, 55565, 56240, 56458, 56529, 56571, 56575, 56616, 56691, 56910, 57047, 57647, 57665, 57834, 57855, 58048, 58058, 58078, 58263, 58470, 58943, 59166, 59402, 60099, 60279, 60576, 61265, 61547, 61810, 61860, 62377, 62496, 62878, 62971, 63089, 63193, 63435, 63792, 63837, 63981, 64034, 64147, 64457, 64528, 64544, 65084, 65164, 66162, 66708, 66864, 67030, 67301, 67467, 67473, 67853, 67875, 67897, 68014, 68100, 68101, 68309, 68341, 68621, 68786, 68806, 68880, 68893, 68908, 69035, 69399, 69913, 69952, 70372, 70466, 70738, 71256, 71286, 71791, 71954, 72013, 72151, 72175, 72305, 72325, 72425, 72550, 72823, 73134, 73171, 73241, 73273, 73520, 73650, 74351, 75691, 76107, 76231, 76232, 76614, 76638, 76698, 77191, 77556, 77610, 77721, 78451, 78567, 78668, 78890, 79077, 79777, 79994, 81019, 81096, 81312, 81426, 82136, 82276, 82636, 83041, 83144, 83444, 83849, 83921, 83926, 83933, 84093, 84935, 85816, 86057, 86198, 86284, 86379, 87343, 87501, 87816, 88086, 88190, 88424, 88885, 89091, 89360, 90225, 90257, 90578, 91068, 91110, 91137, 91393, 92712, 94167, 94627, 94898, 94945, 94983, 96451, 96576, 96765, 96888, 96976, 97189, 97789, 98025, 98235, 98294, 98359, 98569, 99076, 99543 AND isnotnull(substr(ca_zip#11, 1, 5))) +Input [1]: [ca_zip#9] +Condition : (substr(ca_zip#9, 1, 5) INSET 10144, 10336, 10390, 10445, 10516, 10567, 11101, 11356, 11376, 11489, 11634, 11928, 12305, 13354, 13375, 13376, 13394, 13595, 13695, 13955, 14060, 14089, 14171, 14328, 14663, 14867, 14922, 15126, 15146, 15371, 15455, 15559, 15723, 15734, 15765, 15798, 15882, 16021, 16725, 16807, 17043, 17183, 17871, 17879, 17920, 18119, 18270, 18376, 18383, 18426, 18652, 18767, 18799, 18840, 18842, 18845, 18906, 19430, 19505, 19512, 19515, 19736, 19769, 19849, 20004, 20260, 20548, 21076, 21195, 21286, 21309, 21337, 21756, 22152, 22245, 22246, 22351, 22437, 22461, 22685, 22744, 22752, 22927, 23006, 23470, 23932, 23968, 24128, 24206, 24317, 24610, 24671, 24676, 24996, 25003, 25103, 25280, 25486, 25631, 25733, 25782, 25858, 25989, 26065, 26105, 26231, 26233, 26653, 26689, 26859, 27068, 27156, 27385, 27700, 28286, 28488, 28545, 28577, 28587, 28709, 28810, 28898, 28915, 29178, 29741, 29839, 30010, 30122, 30431, 30450, 30469, 30625, 30903, 31016, 31029, 31387, 31671, 31880, 32213, 32754, 33123, 33282, 33515, 33786, 34102, 34322, 34425, 35258, 35458, 35474, 35576, 35850, 35942, 36233, 36420, 36446, 36495, 36634, 37125, 37126, 37930, 38122, 38193, 38415, 38607, 38935, 39127, 39192, 39371, 39516, 39736, 39861, 39972, 40081, 40162, 40558, 40604, 41248, 41367, 41368, 41766, 41918, 42029, 42666, 42961, 43285, 43848, 43933, 44165, 44438, 45200, 45266, 45375, 45549, 45692, 45721, 45748, 46081, 46136, 46820, 47305, 47537, 47770, 48033, 48425, 48583, 49130, 49156, 49448, 50016, 50298, 50308, 50412, 51061, 51103, 51200, 51211, 51622, 51649, 51650, 51798, 51949, 52867, 53179, 53268, 53535, 53672, 54364, 54601, 54917, 55253, 55307, 55565, 56240, 56458, 56529, 56571, 56575, 56616, 56691, 56910, 57047, 57647, 57665, 57834, 57855, 58048, 58058, 58078, 58263, 58470, 58943, 59166, 59402, 60099, 60279, 60576, 61265, 61547, 61810, 61860, 62377, 62496, 62878, 62971, 63089, 63193, 63435, 63792, 63837, 63981, 64034, 64147, 64457, 64528, 64544, 65084, 65164, 66162, 66708, 66864, 67030, 67301, 67467, 67473, 67853, 67875, 67897, 68014, 68100, 68101, 68309, 68341, 68621, 68786, 68806, 68880, 68893, 68908, 69035, 69399, 69913, 69952, 70372, 70466, 70738, 71256, 71286, 71791, 71954, 72013, 72151, 72175, 72305, 72325, 72425, 72550, 72823, 73134, 73171, 73241, 73273, 73520, 73650, 74351, 75691, 76107, 76231, 76232, 76614, 76638, 76698, 77191, 77556, 77610, 77721, 78451, 78567, 78668, 78890, 79077, 79777, 79994, 81019, 81096, 81312, 81426, 82136, 82276, 82636, 83041, 83144, 83444, 83849, 83921, 83926, 83933, 84093, 84935, 85816, 86057, 86198, 86284, 86379, 87343, 87501, 87816, 88086, 88190, 88424, 88885, 89091, 89360, 90225, 90257, 90578, 91068, 91110, 91137, 91393, 92712, 94167, 94627, 94898, 94945, 94983, 96451, 96576, 96765, 96888, 96976, 97189, 97789, 98025, 98235, 98294, 98359, 98569, 99076, 99543 AND isnotnull(substr(ca_zip#9, 1, 5))) (18) Scan parquet default.customer_address -Output [2]: [ca_address_sk#12, ca_zip#13] +Output [2]: [ca_address_sk#10, ca_zip#11] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (19) ColumnarToRow [codegen id : 5] -Input [2]: [ca_address_sk#12, ca_zip#13] +Input [2]: [ca_address_sk#10, ca_zip#11] (20) Filter [codegen id : 5] -Input [2]: [ca_address_sk#12, ca_zip#13] -Condition : isnotnull(ca_address_sk#12) +Input [2]: [ca_address_sk#10, ca_zip#11] +Condition : isnotnull(ca_address_sk#10) (21) Exchange -Input [2]: [ca_address_sk#12, ca_zip#13] -Arguments: hashpartitioning(ca_address_sk#12, 5), ENSURE_REQUIREMENTS, [id=#14] +Input [2]: [ca_address_sk#10, ca_zip#11] +Arguments: hashpartitioning(ca_address_sk#10, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) Sort [codegen id : 6] -Input [2]: [ca_address_sk#12, ca_zip#13] -Arguments: [ca_address_sk#12 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#10, ca_zip#11] +Arguments: [ca_address_sk#10 ASC NULLS FIRST], false, 0 (23) Scan parquet default.customer -Output [2]: [c_current_addr_sk#15, c_preferred_cust_flag#16] +Output [2]: [c_current_addr_sk#12, c_preferred_cust_flag#13] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_preferred_cust_flag), EqualTo(c_preferred_cust_flag,Y), IsNotNull(c_current_addr_sk)] ReadSchema: struct (24) ColumnarToRow [codegen id : 7] -Input [2]: [c_current_addr_sk#15, c_preferred_cust_flag#16] +Input [2]: [c_current_addr_sk#12, c_preferred_cust_flag#13] (25) Filter [codegen id : 7] -Input [2]: [c_current_addr_sk#15, c_preferred_cust_flag#16] -Condition : ((isnotnull(c_preferred_cust_flag#16) AND (c_preferred_cust_flag#16 = Y)) AND isnotnull(c_current_addr_sk#15)) +Input [2]: [c_current_addr_sk#12, c_preferred_cust_flag#13] +Condition : ((isnotnull(c_preferred_cust_flag#13) AND (c_preferred_cust_flag#13 = Y)) AND isnotnull(c_current_addr_sk#12)) (26) Project [codegen id : 7] -Output [1]: [c_current_addr_sk#15] -Input [2]: [c_current_addr_sk#15, c_preferred_cust_flag#16] +Output [1]: [c_current_addr_sk#12] +Input [2]: [c_current_addr_sk#12, c_preferred_cust_flag#13] (27) Exchange -Input [1]: [c_current_addr_sk#15] -Arguments: hashpartitioning(c_current_addr_sk#15, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [1]: [c_current_addr_sk#12] +Arguments: hashpartitioning(c_current_addr_sk#12, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) Sort [codegen id : 8] -Input [1]: [c_current_addr_sk#15] -Arguments: [c_current_addr_sk#15 ASC NULLS FIRST], false, 0 +Input [1]: [c_current_addr_sk#12] +Arguments: [c_current_addr_sk#12 ASC NULLS FIRST], false, 0 (29) SortMergeJoin [codegen id : 9] -Left keys [1]: [ca_address_sk#12] -Right keys [1]: [c_current_addr_sk#15] +Left keys [1]: [ca_address_sk#10] +Right keys [1]: [c_current_addr_sk#12] Join condition: None (30) Project [codegen id : 9] -Output [1]: [ca_zip#13] -Input [3]: [ca_address_sk#12, ca_zip#13, c_current_addr_sk#15] +Output [1]: [ca_zip#11] +Input [3]: [ca_address_sk#10, ca_zip#11, c_current_addr_sk#12] (31) HashAggregate [codegen id : 9] -Input [1]: [ca_zip#13] -Keys [1]: [ca_zip#13] +Input [1]: [ca_zip#11] +Keys [1]: [ca_zip#11] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#18] -Results [2]: [ca_zip#13, count#19] +Aggregate Attributes [1]: [count#14] +Results [2]: [ca_zip#11, count#15] (32) Exchange -Input [2]: [ca_zip#13, count#19] -Arguments: hashpartitioning(ca_zip#13, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [2]: [ca_zip#11, count#15] +Arguments: hashpartitioning(ca_zip#11, 5), ENSURE_REQUIREMENTS, [plan_id=5] (33) HashAggregate [codegen id : 10] -Input [2]: [ca_zip#13, count#19] -Keys [1]: [ca_zip#13] +Input [2]: [ca_zip#11, count#15] +Keys [1]: [ca_zip#11] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#21] -Results [2]: [substr(ca_zip#13, 1, 5) AS ca_zip#22, count(1)#21 AS cnt#23] +Aggregate Attributes [1]: [count(1)#16] +Results [2]: [substr(ca_zip#11, 1, 5) AS ca_zip#17, count(1)#16 AS cnt#18] (34) Filter [codegen id : 10] -Input [2]: [ca_zip#22, cnt#23] -Condition : (cnt#23 > 10) +Input [2]: [ca_zip#17, cnt#18] +Condition : (cnt#18 > 10) (35) Project [codegen id : 10] -Output [1]: [ca_zip#22] -Input [2]: [ca_zip#22, cnt#23] +Output [1]: [ca_zip#17] +Input [2]: [ca_zip#17, cnt#18] (36) BroadcastExchange -Input [1]: [ca_zip#22] -Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, string, true], ), isnull(input[0, string, true])),false), [id=#24] +Input [1]: [ca_zip#17] +Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, string, true], ), isnull(input[0, string, true])),false), [plan_id=6] (37) BroadcastHashJoin [codegen id : 11] -Left keys [2]: [coalesce(substr(ca_zip#11, 1, 5), ), isnull(substr(ca_zip#11, 1, 5))] -Right keys [2]: [coalesce(ca_zip#22, ), isnull(ca_zip#22)] +Left keys [2]: [coalesce(substr(ca_zip#9, 1, 5), ), isnull(substr(ca_zip#9, 1, 5))] +Right keys [2]: [coalesce(ca_zip#17, ), isnull(ca_zip#17)] Join condition: None (38) Project [codegen id : 11] -Output [1]: [substr(ca_zip#11, 1, 5) AS ca_zip#25] -Input [1]: [ca_zip#11] +Output [1]: [substr(ca_zip#9, 1, 5) AS ca_zip#19] +Input [1]: [ca_zip#9] (39) HashAggregate [codegen id : 11] -Input [1]: [ca_zip#25] -Keys [1]: [ca_zip#25] +Input [1]: [ca_zip#19] +Keys [1]: [ca_zip#19] Functions: [] Aggregate Attributes: [] -Results [1]: [ca_zip#25] +Results [1]: [ca_zip#19] (40) Exchange -Input [1]: [ca_zip#25] -Arguments: hashpartitioning(ca_zip#25, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [1]: [ca_zip#19] +Arguments: hashpartitioning(ca_zip#19, 5), ENSURE_REQUIREMENTS, [plan_id=7] (41) HashAggregate [codegen id : 12] -Input [1]: [ca_zip#25] -Keys [1]: [ca_zip#25] +Input [1]: [ca_zip#19] +Keys [1]: [ca_zip#19] Functions: [] Aggregate Attributes: [] -Results [1]: [ca_zip#25] +Results [1]: [ca_zip#19] (42) Exchange -Input [1]: [ca_zip#25] -Arguments: hashpartitioning(substr(ca_zip#25, 1, 2), 5), ENSURE_REQUIREMENTS, [id=#27] +Input [1]: [ca_zip#19] +Arguments: hashpartitioning(substr(ca_zip#19, 1, 2), 5), ENSURE_REQUIREMENTS, [plan_id=8] (43) Sort [codegen id : 13] -Input [1]: [ca_zip#25] -Arguments: [substr(ca_zip#25, 1, 2) ASC NULLS FIRST], false, 0 +Input [1]: [ca_zip#19] +Arguments: [substr(ca_zip#19, 1, 2) ASC NULLS FIRST], false, 0 (44) SortMergeJoin [codegen id : 14] Left keys [1]: [substr(s_zip#8, 1, 2)] -Right keys [1]: [substr(ca_zip#25, 1, 2)] +Right keys [1]: [substr(ca_zip#19, 1, 2)] Join condition: None (45) Project [codegen id : 14] Output [2]: [ss_net_profit#2, s_store_name#7] -Input [4]: [ss_net_profit#2, s_store_name#7, s_zip#8, ca_zip#25] +Input [4]: [ss_net_profit#2, s_store_name#7, s_zip#8, ca_zip#19] (46) HashAggregate [codegen id : 14] Input [2]: [ss_net_profit#2, s_store_name#7] Keys [1]: [s_store_name#7] Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum#28] -Results [2]: [s_store_name#7, sum#29] +Aggregate Attributes [1]: [sum#20] +Results [2]: [s_store_name#7, sum#21] (47) Exchange -Input [2]: [s_store_name#7, sum#29] -Arguments: hashpartitioning(s_store_name#7, 5), ENSURE_REQUIREMENTS, [id=#30] +Input [2]: [s_store_name#7, sum#21] +Arguments: hashpartitioning(s_store_name#7, 5), ENSURE_REQUIREMENTS, [plan_id=9] (48) HashAggregate [codegen id : 15] -Input [2]: [s_store_name#7, sum#29] +Input [2]: [s_store_name#7, sum#21] Keys [1]: [s_store_name#7] Functions [1]: [sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#31] -Results [2]: [s_store_name#7, MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#31,17,2) AS sum(ss_net_profit)#32] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#22] +Results [2]: [s_store_name#7, MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#22,17,2) AS sum(ss_net_profit)#23] (49) TakeOrderedAndProject -Input [2]: [s_store_name#7, sum(ss_net_profit)#32] -Arguments: 100, [s_store_name#7 ASC NULLS FIRST], [s_store_name#7, sum(ss_net_profit)#32] +Input [2]: [s_store_name#7, sum(ss_net_profit)#23] +Arguments: 100, [s_store_name#7 ASC NULLS FIRST], [s_store_name#7, sum(ss_net_profit)#23] ===== Subqueries ===== @@ -289,25 +289,25 @@ BroadcastExchange (54) (50) Scan parquet default.date_dim -Output [3]: [d_date_sk#5, d_year#33, d_qoy#34] +Output [3]: [d_date_sk#5, d_year#24, d_qoy#25] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,2), EqualTo(d_year,1998), IsNotNull(d_date_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#5, d_year#33, d_qoy#34] +Input [3]: [d_date_sk#5, d_year#24, d_qoy#25] (52) Filter [codegen id : 1] -Input [3]: [d_date_sk#5, d_year#33, d_qoy#34] -Condition : ((((isnotnull(d_qoy#34) AND isnotnull(d_year#33)) AND (d_qoy#34 = 2)) AND (d_year#33 = 1998)) AND isnotnull(d_date_sk#5)) +Input [3]: [d_date_sk#5, d_year#24, d_qoy#25] +Condition : ((((isnotnull(d_qoy#25) AND isnotnull(d_year#24)) AND (d_qoy#25 = 2)) AND (d_year#24 = 1998)) AND isnotnull(d_date_sk#5)) (53) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [3]: [d_date_sk#5, d_year#33, d_qoy#34] +Input [3]: [d_date_sk#5, d_year#24, d_qoy#25] (54) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q8/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q8/explain.txt index efac82f31fdb4..ca1658049240e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q8/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q8/explain.txt @@ -87,7 +87,7 @@ Condition : (isnotnull(s_store_sk#6) AND isnotnull(s_zip#8)) (10) BroadcastExchange Input [3]: [s_store_sk#6, s_store_name#7, s_zip#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_store_sk#1] @@ -99,154 +99,154 @@ Output [3]: [ss_net_profit#2, s_store_name#7, s_zip#8] Input [5]: [ss_store_sk#1, ss_net_profit#2, s_store_sk#6, s_store_name#7, s_zip#8] (13) Scan parquet default.customer_address -Output [1]: [ca_zip#10] +Output [1]: [ca_zip#9] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] ReadSchema: struct (14) ColumnarToRow [codegen id : 6] -Input [1]: [ca_zip#10] +Input [1]: [ca_zip#9] (15) Filter [codegen id : 6] -Input [1]: [ca_zip#10] -Condition : (substr(ca_zip#10, 1, 5) INSET 10144, 10336, 10390, 10445, 10516, 10567, 11101, 11356, 11376, 11489, 11634, 11928, 12305, 13354, 13375, 13376, 13394, 13595, 13695, 13955, 14060, 14089, 14171, 14328, 14663, 14867, 14922, 15126, 15146, 15371, 15455, 15559, 15723, 15734, 15765, 15798, 15882, 16021, 16725, 16807, 17043, 17183, 17871, 17879, 17920, 18119, 18270, 18376, 18383, 18426, 18652, 18767, 18799, 18840, 18842, 18845, 18906, 19430, 19505, 19512, 19515, 19736, 19769, 19849, 20004, 20260, 20548, 21076, 21195, 21286, 21309, 21337, 21756, 22152, 22245, 22246, 22351, 22437, 22461, 22685, 22744, 22752, 22927, 23006, 23470, 23932, 23968, 24128, 24206, 24317, 24610, 24671, 24676, 24996, 25003, 25103, 25280, 25486, 25631, 25733, 25782, 25858, 25989, 26065, 26105, 26231, 26233, 26653, 26689, 26859, 27068, 27156, 27385, 27700, 28286, 28488, 28545, 28577, 28587, 28709, 28810, 28898, 28915, 29178, 29741, 29839, 30010, 30122, 30431, 30450, 30469, 30625, 30903, 31016, 31029, 31387, 31671, 31880, 32213, 32754, 33123, 33282, 33515, 33786, 34102, 34322, 34425, 35258, 35458, 35474, 35576, 35850, 35942, 36233, 36420, 36446, 36495, 36634, 37125, 37126, 37930, 38122, 38193, 38415, 38607, 38935, 39127, 39192, 39371, 39516, 39736, 39861, 39972, 40081, 40162, 40558, 40604, 41248, 41367, 41368, 41766, 41918, 42029, 42666, 42961, 43285, 43848, 43933, 44165, 44438, 45200, 45266, 45375, 45549, 45692, 45721, 45748, 46081, 46136, 46820, 47305, 47537, 47770, 48033, 48425, 48583, 49130, 49156, 49448, 50016, 50298, 50308, 50412, 51061, 51103, 51200, 51211, 51622, 51649, 51650, 51798, 51949, 52867, 53179, 53268, 53535, 53672, 54364, 54601, 54917, 55253, 55307, 55565, 56240, 56458, 56529, 56571, 56575, 56616, 56691, 56910, 57047, 57647, 57665, 57834, 57855, 58048, 58058, 58078, 58263, 58470, 58943, 59166, 59402, 60099, 60279, 60576, 61265, 61547, 61810, 61860, 62377, 62496, 62878, 62971, 63089, 63193, 63435, 63792, 63837, 63981, 64034, 64147, 64457, 64528, 64544, 65084, 65164, 66162, 66708, 66864, 67030, 67301, 67467, 67473, 67853, 67875, 67897, 68014, 68100, 68101, 68309, 68341, 68621, 68786, 68806, 68880, 68893, 68908, 69035, 69399, 69913, 69952, 70372, 70466, 70738, 71256, 71286, 71791, 71954, 72013, 72151, 72175, 72305, 72325, 72425, 72550, 72823, 73134, 73171, 73241, 73273, 73520, 73650, 74351, 75691, 76107, 76231, 76232, 76614, 76638, 76698, 77191, 77556, 77610, 77721, 78451, 78567, 78668, 78890, 79077, 79777, 79994, 81019, 81096, 81312, 81426, 82136, 82276, 82636, 83041, 83144, 83444, 83849, 83921, 83926, 83933, 84093, 84935, 85816, 86057, 86198, 86284, 86379, 87343, 87501, 87816, 88086, 88190, 88424, 88885, 89091, 89360, 90225, 90257, 90578, 91068, 91110, 91137, 91393, 92712, 94167, 94627, 94898, 94945, 94983, 96451, 96576, 96765, 96888, 96976, 97189, 97789, 98025, 98235, 98294, 98359, 98569, 99076, 99543 AND isnotnull(substr(ca_zip#10, 1, 5))) +Input [1]: [ca_zip#9] +Condition : (substr(ca_zip#9, 1, 5) INSET 10144, 10336, 10390, 10445, 10516, 10567, 11101, 11356, 11376, 11489, 11634, 11928, 12305, 13354, 13375, 13376, 13394, 13595, 13695, 13955, 14060, 14089, 14171, 14328, 14663, 14867, 14922, 15126, 15146, 15371, 15455, 15559, 15723, 15734, 15765, 15798, 15882, 16021, 16725, 16807, 17043, 17183, 17871, 17879, 17920, 18119, 18270, 18376, 18383, 18426, 18652, 18767, 18799, 18840, 18842, 18845, 18906, 19430, 19505, 19512, 19515, 19736, 19769, 19849, 20004, 20260, 20548, 21076, 21195, 21286, 21309, 21337, 21756, 22152, 22245, 22246, 22351, 22437, 22461, 22685, 22744, 22752, 22927, 23006, 23470, 23932, 23968, 24128, 24206, 24317, 24610, 24671, 24676, 24996, 25003, 25103, 25280, 25486, 25631, 25733, 25782, 25858, 25989, 26065, 26105, 26231, 26233, 26653, 26689, 26859, 27068, 27156, 27385, 27700, 28286, 28488, 28545, 28577, 28587, 28709, 28810, 28898, 28915, 29178, 29741, 29839, 30010, 30122, 30431, 30450, 30469, 30625, 30903, 31016, 31029, 31387, 31671, 31880, 32213, 32754, 33123, 33282, 33515, 33786, 34102, 34322, 34425, 35258, 35458, 35474, 35576, 35850, 35942, 36233, 36420, 36446, 36495, 36634, 37125, 37126, 37930, 38122, 38193, 38415, 38607, 38935, 39127, 39192, 39371, 39516, 39736, 39861, 39972, 40081, 40162, 40558, 40604, 41248, 41367, 41368, 41766, 41918, 42029, 42666, 42961, 43285, 43848, 43933, 44165, 44438, 45200, 45266, 45375, 45549, 45692, 45721, 45748, 46081, 46136, 46820, 47305, 47537, 47770, 48033, 48425, 48583, 49130, 49156, 49448, 50016, 50298, 50308, 50412, 51061, 51103, 51200, 51211, 51622, 51649, 51650, 51798, 51949, 52867, 53179, 53268, 53535, 53672, 54364, 54601, 54917, 55253, 55307, 55565, 56240, 56458, 56529, 56571, 56575, 56616, 56691, 56910, 57047, 57647, 57665, 57834, 57855, 58048, 58058, 58078, 58263, 58470, 58943, 59166, 59402, 60099, 60279, 60576, 61265, 61547, 61810, 61860, 62377, 62496, 62878, 62971, 63089, 63193, 63435, 63792, 63837, 63981, 64034, 64147, 64457, 64528, 64544, 65084, 65164, 66162, 66708, 66864, 67030, 67301, 67467, 67473, 67853, 67875, 67897, 68014, 68100, 68101, 68309, 68341, 68621, 68786, 68806, 68880, 68893, 68908, 69035, 69399, 69913, 69952, 70372, 70466, 70738, 71256, 71286, 71791, 71954, 72013, 72151, 72175, 72305, 72325, 72425, 72550, 72823, 73134, 73171, 73241, 73273, 73520, 73650, 74351, 75691, 76107, 76231, 76232, 76614, 76638, 76698, 77191, 77556, 77610, 77721, 78451, 78567, 78668, 78890, 79077, 79777, 79994, 81019, 81096, 81312, 81426, 82136, 82276, 82636, 83041, 83144, 83444, 83849, 83921, 83926, 83933, 84093, 84935, 85816, 86057, 86198, 86284, 86379, 87343, 87501, 87816, 88086, 88190, 88424, 88885, 89091, 89360, 90225, 90257, 90578, 91068, 91110, 91137, 91393, 92712, 94167, 94627, 94898, 94945, 94983, 96451, 96576, 96765, 96888, 96976, 97189, 97789, 98025, 98235, 98294, 98359, 98569, 99076, 99543 AND isnotnull(substr(ca_zip#9, 1, 5))) (16) Scan parquet default.customer_address -Output [2]: [ca_address_sk#11, ca_zip#12] +Output [2]: [ca_address_sk#10, ca_zip#11] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 4] -Input [2]: [ca_address_sk#11, ca_zip#12] +Input [2]: [ca_address_sk#10, ca_zip#11] (18) Filter [codegen id : 4] -Input [2]: [ca_address_sk#11, ca_zip#12] -Condition : isnotnull(ca_address_sk#11) +Input [2]: [ca_address_sk#10, ca_zip#11] +Condition : isnotnull(ca_address_sk#10) (19) Scan parquet default.customer -Output [2]: [c_current_addr_sk#13, c_preferred_cust_flag#14] +Output [2]: [c_current_addr_sk#12, c_preferred_cust_flag#13] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_preferred_cust_flag), EqualTo(c_preferred_cust_flag,Y), IsNotNull(c_current_addr_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 3] -Input [2]: [c_current_addr_sk#13, c_preferred_cust_flag#14] +Input [2]: [c_current_addr_sk#12, c_preferred_cust_flag#13] (21) Filter [codegen id : 3] -Input [2]: [c_current_addr_sk#13, c_preferred_cust_flag#14] -Condition : ((isnotnull(c_preferred_cust_flag#14) AND (c_preferred_cust_flag#14 = Y)) AND isnotnull(c_current_addr_sk#13)) +Input [2]: [c_current_addr_sk#12, c_preferred_cust_flag#13] +Condition : ((isnotnull(c_preferred_cust_flag#13) AND (c_preferred_cust_flag#13 = Y)) AND isnotnull(c_current_addr_sk#12)) (22) Project [codegen id : 3] -Output [1]: [c_current_addr_sk#13] -Input [2]: [c_current_addr_sk#13, c_preferred_cust_flag#14] +Output [1]: [c_current_addr_sk#12] +Input [2]: [c_current_addr_sk#12, c_preferred_cust_flag#13] (23) BroadcastExchange -Input [1]: [c_current_addr_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [c_current_addr_sk#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (24) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ca_address_sk#11] -Right keys [1]: [c_current_addr_sk#13] +Left keys [1]: [ca_address_sk#10] +Right keys [1]: [c_current_addr_sk#12] Join condition: None (25) Project [codegen id : 4] -Output [1]: [ca_zip#12] -Input [3]: [ca_address_sk#11, ca_zip#12, c_current_addr_sk#13] +Output [1]: [ca_zip#11] +Input [3]: [ca_address_sk#10, ca_zip#11, c_current_addr_sk#12] (26) HashAggregate [codegen id : 4] -Input [1]: [ca_zip#12] -Keys [1]: [ca_zip#12] +Input [1]: [ca_zip#11] +Keys [1]: [ca_zip#11] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#16] -Results [2]: [ca_zip#12, count#17] +Aggregate Attributes [1]: [count#14] +Results [2]: [ca_zip#11, count#15] (27) Exchange -Input [2]: [ca_zip#12, count#17] -Arguments: hashpartitioning(ca_zip#12, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [2]: [ca_zip#11, count#15] +Arguments: hashpartitioning(ca_zip#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (28) HashAggregate [codegen id : 5] -Input [2]: [ca_zip#12, count#17] -Keys [1]: [ca_zip#12] +Input [2]: [ca_zip#11, count#15] +Keys [1]: [ca_zip#11] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#19] -Results [2]: [substr(ca_zip#12, 1, 5) AS ca_zip#20, count(1)#19 AS cnt#21] +Aggregate Attributes [1]: [count(1)#16] +Results [2]: [substr(ca_zip#11, 1, 5) AS ca_zip#17, count(1)#16 AS cnt#18] (29) Filter [codegen id : 5] -Input [2]: [ca_zip#20, cnt#21] -Condition : (cnt#21 > 10) +Input [2]: [ca_zip#17, cnt#18] +Condition : (cnt#18 > 10) (30) Project [codegen id : 5] -Output [1]: [ca_zip#20] -Input [2]: [ca_zip#20, cnt#21] +Output [1]: [ca_zip#17] +Input [2]: [ca_zip#17, cnt#18] (31) BroadcastExchange -Input [1]: [ca_zip#20] -Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, string, true], ), isnull(input[0, string, true])),false), [id=#22] +Input [1]: [ca_zip#17] +Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, string, true], ), isnull(input[0, string, true])),false), [plan_id=4] (32) BroadcastHashJoin [codegen id : 6] -Left keys [2]: [coalesce(substr(ca_zip#10, 1, 5), ), isnull(substr(ca_zip#10, 1, 5))] -Right keys [2]: [coalesce(ca_zip#20, ), isnull(ca_zip#20)] +Left keys [2]: [coalesce(substr(ca_zip#9, 1, 5), ), isnull(substr(ca_zip#9, 1, 5))] +Right keys [2]: [coalesce(ca_zip#17, ), isnull(ca_zip#17)] Join condition: None (33) Project [codegen id : 6] -Output [1]: [substr(ca_zip#10, 1, 5) AS ca_zip#23] -Input [1]: [ca_zip#10] +Output [1]: [substr(ca_zip#9, 1, 5) AS ca_zip#19] +Input [1]: [ca_zip#9] (34) HashAggregate [codegen id : 6] -Input [1]: [ca_zip#23] -Keys [1]: [ca_zip#23] +Input [1]: [ca_zip#19] +Keys [1]: [ca_zip#19] Functions: [] Aggregate Attributes: [] -Results [1]: [ca_zip#23] +Results [1]: [ca_zip#19] (35) Exchange -Input [1]: [ca_zip#23] -Arguments: hashpartitioning(ca_zip#23, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [1]: [ca_zip#19] +Arguments: hashpartitioning(ca_zip#19, 5), ENSURE_REQUIREMENTS, [plan_id=5] (36) HashAggregate [codegen id : 7] -Input [1]: [ca_zip#23] -Keys [1]: [ca_zip#23] +Input [1]: [ca_zip#19] +Keys [1]: [ca_zip#19] Functions: [] Aggregate Attributes: [] -Results [1]: [ca_zip#23] +Results [1]: [ca_zip#19] (37) BroadcastExchange -Input [1]: [ca_zip#23] -Arguments: HashedRelationBroadcastMode(List(substr(input[0, string, true], 1, 2)),false), [id=#25] +Input [1]: [ca_zip#19] +Arguments: HashedRelationBroadcastMode(List(substr(input[0, string, true], 1, 2)),false), [plan_id=6] (38) BroadcastHashJoin [codegen id : 8] Left keys [1]: [substr(s_zip#8, 1, 2)] -Right keys [1]: [substr(ca_zip#23, 1, 2)] +Right keys [1]: [substr(ca_zip#19, 1, 2)] Join condition: None (39) Project [codegen id : 8] Output [2]: [ss_net_profit#2, s_store_name#7] -Input [4]: [ss_net_profit#2, s_store_name#7, s_zip#8, ca_zip#23] +Input [4]: [ss_net_profit#2, s_store_name#7, s_zip#8, ca_zip#19] (40) HashAggregate [codegen id : 8] Input [2]: [ss_net_profit#2, s_store_name#7] Keys [1]: [s_store_name#7] Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum#26] -Results [2]: [s_store_name#7, sum#27] +Aggregate Attributes [1]: [sum#20] +Results [2]: [s_store_name#7, sum#21] (41) Exchange -Input [2]: [s_store_name#7, sum#27] -Arguments: hashpartitioning(s_store_name#7, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [2]: [s_store_name#7, sum#21] +Arguments: hashpartitioning(s_store_name#7, 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) HashAggregate [codegen id : 9] -Input [2]: [s_store_name#7, sum#27] +Input [2]: [s_store_name#7, sum#21] Keys [1]: [s_store_name#7] Functions [1]: [sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#29] -Results [2]: [s_store_name#7, MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#29,17,2) AS sum(ss_net_profit)#30] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#22] +Results [2]: [s_store_name#7, MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#22,17,2) AS sum(ss_net_profit)#23] (43) TakeOrderedAndProject -Input [2]: [s_store_name#7, sum(ss_net_profit)#30] -Arguments: 100, [s_store_name#7 ASC NULLS FIRST], [s_store_name#7, sum(ss_net_profit)#30] +Input [2]: [s_store_name#7, sum(ss_net_profit)#23] +Arguments: 100, [s_store_name#7 ASC NULLS FIRST], [s_store_name#7, sum(ss_net_profit)#23] ===== Subqueries ===== @@ -259,25 +259,25 @@ BroadcastExchange (48) (44) Scan parquet default.date_dim -Output [3]: [d_date_sk#5, d_year#31, d_qoy#32] +Output [3]: [d_date_sk#5, d_year#24, d_qoy#25] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,2), EqualTo(d_year,1998), IsNotNull(d_date_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#5, d_year#31, d_qoy#32] +Input [3]: [d_date_sk#5, d_year#24, d_qoy#25] (46) Filter [codegen id : 1] -Input [3]: [d_date_sk#5, d_year#31, d_qoy#32] -Condition : ((((isnotnull(d_qoy#32) AND isnotnull(d_year#31)) AND (d_qoy#32 = 2)) AND (d_year#31 = 1998)) AND isnotnull(d_date_sk#5)) +Input [3]: [d_date_sk#5, d_year#24, d_qoy#25] +Condition : ((((isnotnull(d_qoy#25) AND isnotnull(d_year#24)) AND (d_qoy#25 = 2)) AND (d_year#24 = 1998)) AND isnotnull(d_date_sk#5)) (47) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [3]: [d_date_sk#5, d_year#31, d_qoy#32] +Input [3]: [d_date_sk#5, d_year#24, d_qoy#25] (48) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#33] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q80.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q80.sf100/explain.txt index 43d1e1222ab99..752e9d19f4205 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q80.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q80.sf100/explain.txt @@ -125,471 +125,471 @@ Condition : ((((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotn (4) Exchange Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [id=#13] +Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: [ss_item_sk#1 ASC NULLS FIRST, ss_ticket_number#4 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_returns -Output [5]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17, sr_returned_date_sk#18] +Output [5]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16, sr_returned_date_sk#17] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [5]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17, sr_returned_date_sk#18] +Input [5]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16, sr_returned_date_sk#17] (8) Filter [codegen id : 3] -Input [5]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17, sr_returned_date_sk#18] -Condition : (isnotnull(sr_item_sk#14) AND isnotnull(sr_ticket_number#15)) +Input [5]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16, sr_returned_date_sk#17] +Condition : (isnotnull(sr_item_sk#13) AND isnotnull(sr_ticket_number#14)) (9) Project [codegen id : 3] -Output [4]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17] -Input [5]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17, sr_returned_date_sk#18] +Output [4]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16] +Input [5]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16, sr_returned_date_sk#17] (10) Exchange -Input [4]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17] -Arguments: hashpartitioning(sr_item_sk#14, sr_ticket_number#15, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [4]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16] +Arguments: hashpartitioning(sr_item_sk#13, sr_ticket_number#14, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [4]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17] -Arguments: [sr_item_sk#14 ASC NULLS FIRST, sr_ticket_number#15 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16] +Arguments: [sr_item_sk#13 ASC NULLS FIRST, sr_ticket_number#14 ASC NULLS FIRST], false, 0 (12) SortMergeJoin [codegen id : 9] Left keys [2]: [ss_item_sk#1, ss_ticket_number#4] -Right keys [2]: [sr_item_sk#14, sr_ticket_number#15] +Right keys [2]: [sr_item_sk#13, sr_ticket_number#14] Join condition: None (13) Project [codegen id : 9] -Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17] -Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17] +Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16] +Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16] (14) Scan parquet default.item -Output [2]: [i_item_sk#20, i_current_price#21] +Output [2]: [i_item_sk#18, i_current_price#19] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 5] -Input [2]: [i_item_sk#20, i_current_price#21] +Input [2]: [i_item_sk#18, i_current_price#19] (16) Filter [codegen id : 5] -Input [2]: [i_item_sk#20, i_current_price#21] -Condition : ((isnotnull(i_current_price#21) AND (i_current_price#21 > 50.00)) AND isnotnull(i_item_sk#20)) +Input [2]: [i_item_sk#18, i_current_price#19] +Condition : ((isnotnull(i_current_price#19) AND (i_current_price#19 > 50.00)) AND isnotnull(i_item_sk#18)) (17) Project [codegen id : 5] -Output [1]: [i_item_sk#20] -Input [2]: [i_item_sk#20, i_current_price#21] +Output [1]: [i_item_sk#18] +Input [2]: [i_item_sk#18, i_current_price#19] (18) BroadcastExchange -Input [1]: [i_item_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [i_item_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (19) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#20] +Right keys [1]: [i_item_sk#18] Join condition: None (20) Project [codegen id : 9] -Output [7]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17] -Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17, i_item_sk#20] +Output [7]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16] +Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16, i_item_sk#18] (21) Scan parquet default.promotion -Output [2]: [p_promo_sk#23, p_channel_tv#24] +Output [2]: [p_promo_sk#20, p_channel_tv#21] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 6] -Input [2]: [p_promo_sk#23, p_channel_tv#24] +Input [2]: [p_promo_sk#20, p_channel_tv#21] (23) Filter [codegen id : 6] -Input [2]: [p_promo_sk#23, p_channel_tv#24] -Condition : ((isnotnull(p_channel_tv#24) AND (p_channel_tv#24 = N)) AND isnotnull(p_promo_sk#23)) +Input [2]: [p_promo_sk#20, p_channel_tv#21] +Condition : ((isnotnull(p_channel_tv#21) AND (p_channel_tv#21 = N)) AND isnotnull(p_promo_sk#20)) (24) Project [codegen id : 6] -Output [1]: [p_promo_sk#23] -Input [2]: [p_promo_sk#23, p_channel_tv#24] +Output [1]: [p_promo_sk#20] +Input [2]: [p_promo_sk#20, p_channel_tv#21] (25) BroadcastExchange -Input [1]: [p_promo_sk#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [p_promo_sk#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (26) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_promo_sk#3] -Right keys [1]: [p_promo_sk#23] +Right keys [1]: [p_promo_sk#20] Join condition: None (27) Project [codegen id : 9] -Output [6]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17] -Input [8]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17, p_promo_sk#23] +Output [6]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16] +Input [8]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16, p_promo_sk#20] (28) ReusedExchange [Reuses operator id: 126] -Output [1]: [d_date_sk#26] +Output [1]: [d_date_sk#22] (29) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_sold_date_sk#7] -Right keys [1]: [d_date_sk#26] +Right keys [1]: [d_date_sk#22] Join condition: None (30) Project [codegen id : 9] -Output [5]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#16, sr_net_loss#17] -Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17, d_date_sk#26] +Output [5]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#15, sr_net_loss#16] +Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16, d_date_sk#22] (31) Scan parquet default.store -Output [2]: [s_store_sk#27, s_store_id#28] +Output [2]: [s_store_sk#23, s_store_id#24] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 8] -Input [2]: [s_store_sk#27, s_store_id#28] +Input [2]: [s_store_sk#23, s_store_id#24] (33) Filter [codegen id : 8] -Input [2]: [s_store_sk#27, s_store_id#28] -Condition : isnotnull(s_store_sk#27) +Input [2]: [s_store_sk#23, s_store_id#24] +Condition : isnotnull(s_store_sk#23) (34) BroadcastExchange -Input [2]: [s_store_sk#27, s_store_id#28] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#29] +Input [2]: [s_store_sk#23, s_store_id#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (35) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#2] -Right keys [1]: [s_store_sk#27] +Right keys [1]: [s_store_sk#23] Join condition: None (36) Project [codegen id : 9] -Output [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#16, sr_net_loss#17, s_store_id#28] -Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#16, sr_net_loss#17, s_store_sk#27, s_store_id#28] +Output [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#15, sr_net_loss#16, s_store_id#24] +Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#15, sr_net_loss#16, s_store_sk#23, s_store_id#24] (37) HashAggregate [codegen id : 9] -Input [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#16, sr_net_loss#17, s_store_id#28] -Keys [1]: [s_store_id#28] -Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#5)), partial_sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#30, sum#31, isEmpty#32, sum#33, isEmpty#34] -Results [6]: [s_store_id#28, sum#35, sum#36, isEmpty#37, sum#38, isEmpty#39] +Input [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#15, sr_net_loss#16, s_store_id#24] +Keys [1]: [s_store_id#24] +Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#5)), partial_sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#25, sum#26, isEmpty#27, sum#28, isEmpty#29] +Results [6]: [s_store_id#24, sum#30, sum#31, isEmpty#32, sum#33, isEmpty#34] (38) Exchange -Input [6]: [s_store_id#28, sum#35, sum#36, isEmpty#37, sum#38, isEmpty#39] -Arguments: hashpartitioning(s_store_id#28, 5), ENSURE_REQUIREMENTS, [id=#40] +Input [6]: [s_store_id#24, sum#30, sum#31, isEmpty#32, sum#33, isEmpty#34] +Arguments: hashpartitioning(s_store_id#24, 5), ENSURE_REQUIREMENTS, [plan_id=6] (39) HashAggregate [codegen id : 10] -Input [6]: [s_store_id#28, sum#35, sum#36, isEmpty#37, sum#38, isEmpty#39] -Keys [1]: [s_store_id#28] -Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#41, sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00))#42, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#43] -Results [5]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#41,17,2) AS sales#44, sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00))#42 AS returns#45, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#43 AS profit#46, store channel AS channel#47, concat(store, s_store_id#28) AS id#48] +Input [6]: [s_store_id#24, sum#30, sum#31, isEmpty#32, sum#33, isEmpty#34] +Keys [1]: [s_store_id#24] +Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#35, sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00))#36, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#37] +Results [5]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#35,17,2) AS sales#38, sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00))#36 AS returns#39, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#37 AS profit#40, store channel AS channel#41, concat(store, s_store_id#24) AS id#42] (40) Scan parquet default.catalog_sales -Output [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] +Output [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#55), dynamicpruningexpression(cs_sold_date_sk#55 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(cs_sold_date_sk#49), dynamicpruningexpression(cs_sold_date_sk#49 IN dynamicpruning#8)] PushedFilters: [IsNotNull(cs_catalog_page_sk), IsNotNull(cs_item_sk), IsNotNull(cs_promo_sk)] ReadSchema: struct (41) ColumnarToRow [codegen id : 11] -Input [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] +Input [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] (42) Filter [codegen id : 11] -Input [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] -Condition : ((((isnotnull(cs_catalog_page_sk#49) AND isnotnull(cs_item_sk#50)) AND isnotnull(cs_promo_sk#51)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#10], xxhash64(cs_item_sk#50, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#11, [id=#12], xxhash64(cs_promo_sk#51, 42))) +Input [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] +Condition : ((((isnotnull(cs_catalog_page_sk#43) AND isnotnull(cs_item_sk#44)) AND isnotnull(cs_promo_sk#45)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#10], xxhash64(cs_item_sk#44, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#11, [id=#12], xxhash64(cs_promo_sk#45, 42))) (43) Exchange -Input [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] -Arguments: hashpartitioning(cs_item_sk#50, cs_order_number#52, 5), ENSURE_REQUIREMENTS, [id=#56] +Input [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] +Arguments: hashpartitioning(cs_item_sk#44, cs_order_number#46, 5), ENSURE_REQUIREMENTS, [plan_id=7] (44) Sort [codegen id : 12] -Input [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] -Arguments: [cs_item_sk#50 ASC NULLS FIRST, cs_order_number#52 ASC NULLS FIRST], false, 0 +Input [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] +Arguments: [cs_item_sk#44 ASC NULLS FIRST, cs_order_number#46 ASC NULLS FIRST], false, 0 (45) Scan parquet default.catalog_returns -Output [5]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60, cr_returned_date_sk#61] +Output [5]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53, cr_returned_date_sk#54] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct (46) ColumnarToRow [codegen id : 13] -Input [5]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60, cr_returned_date_sk#61] +Input [5]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53, cr_returned_date_sk#54] (47) Filter [codegen id : 13] -Input [5]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60, cr_returned_date_sk#61] -Condition : (isnotnull(cr_item_sk#57) AND isnotnull(cr_order_number#58)) +Input [5]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53, cr_returned_date_sk#54] +Condition : (isnotnull(cr_item_sk#50) AND isnotnull(cr_order_number#51)) (48) Project [codegen id : 13] -Output [4]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60] -Input [5]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60, cr_returned_date_sk#61] +Output [4]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53] +Input [5]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53, cr_returned_date_sk#54] (49) Exchange -Input [4]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60] -Arguments: hashpartitioning(cr_item_sk#57, cr_order_number#58, 5), ENSURE_REQUIREMENTS, [id=#62] +Input [4]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53] +Arguments: hashpartitioning(cr_item_sk#50, cr_order_number#51, 5), ENSURE_REQUIREMENTS, [plan_id=8] (50) Sort [codegen id : 14] -Input [4]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60] -Arguments: [cr_item_sk#57 ASC NULLS FIRST, cr_order_number#58 ASC NULLS FIRST], false, 0 +Input [4]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53] +Arguments: [cr_item_sk#50 ASC NULLS FIRST, cr_order_number#51 ASC NULLS FIRST], false, 0 (51) SortMergeJoin [codegen id : 19] -Left keys [2]: [cs_item_sk#50, cs_order_number#52] -Right keys [2]: [cr_item_sk#57, cr_order_number#58] +Left keys [2]: [cs_item_sk#44, cs_order_number#46] +Right keys [2]: [cr_item_sk#50, cr_order_number#51] Join condition: None (52) Project [codegen id : 19] -Output [8]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60] -Input [11]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60] +Output [8]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53] +Input [11]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53] (53) ReusedExchange [Reuses operator id: 18] -Output [1]: [i_item_sk#63] +Output [1]: [i_item_sk#55] (54) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_item_sk#50] -Right keys [1]: [i_item_sk#63] +Left keys [1]: [cs_item_sk#44] +Right keys [1]: [i_item_sk#55] Join condition: None (55) Project [codegen id : 19] -Output [7]: [cs_catalog_page_sk#49, cs_promo_sk#51, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60] -Input [9]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60, i_item_sk#63] +Output [7]: [cs_catalog_page_sk#43, cs_promo_sk#45, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53] +Input [9]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53, i_item_sk#55] (56) ReusedExchange [Reuses operator id: 25] -Output [1]: [p_promo_sk#64] +Output [1]: [p_promo_sk#56] (57) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_promo_sk#51] -Right keys [1]: [p_promo_sk#64] +Left keys [1]: [cs_promo_sk#45] +Right keys [1]: [p_promo_sk#56] Join condition: None (58) Project [codegen id : 19] -Output [6]: [cs_catalog_page_sk#49, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60] -Input [8]: [cs_catalog_page_sk#49, cs_promo_sk#51, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60, p_promo_sk#64] +Output [6]: [cs_catalog_page_sk#43, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53] +Input [8]: [cs_catalog_page_sk#43, cs_promo_sk#45, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53, p_promo_sk#56] (59) ReusedExchange [Reuses operator id: 126] -Output [1]: [d_date_sk#65] +Output [1]: [d_date_sk#57] (60) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_sold_date_sk#55] -Right keys [1]: [d_date_sk#65] +Left keys [1]: [cs_sold_date_sk#49] +Right keys [1]: [d_date_sk#57] Join condition: None (61) Project [codegen id : 19] -Output [5]: [cs_catalog_page_sk#49, cs_ext_sales_price#53, cs_net_profit#54, cr_return_amount#59, cr_net_loss#60] -Input [7]: [cs_catalog_page_sk#49, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60, d_date_sk#65] +Output [5]: [cs_catalog_page_sk#43, cs_ext_sales_price#47, cs_net_profit#48, cr_return_amount#52, cr_net_loss#53] +Input [7]: [cs_catalog_page_sk#43, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53, d_date_sk#57] (62) Scan parquet default.catalog_page -Output [2]: [cp_catalog_page_sk#66, cp_catalog_page_id#67] +Output [2]: [cp_catalog_page_sk#58, cp_catalog_page_id#59] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_page] PushedFilters: [IsNotNull(cp_catalog_page_sk)] ReadSchema: struct (63) ColumnarToRow [codegen id : 18] -Input [2]: [cp_catalog_page_sk#66, cp_catalog_page_id#67] +Input [2]: [cp_catalog_page_sk#58, cp_catalog_page_id#59] (64) Filter [codegen id : 18] -Input [2]: [cp_catalog_page_sk#66, cp_catalog_page_id#67] -Condition : isnotnull(cp_catalog_page_sk#66) +Input [2]: [cp_catalog_page_sk#58, cp_catalog_page_id#59] +Condition : isnotnull(cp_catalog_page_sk#58) (65) BroadcastExchange -Input [2]: [cp_catalog_page_sk#66, cp_catalog_page_id#67] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#68] +Input [2]: [cp_catalog_page_sk#58, cp_catalog_page_id#59] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] (66) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_catalog_page_sk#49] -Right keys [1]: [cp_catalog_page_sk#66] +Left keys [1]: [cs_catalog_page_sk#43] +Right keys [1]: [cp_catalog_page_sk#58] Join condition: None (67) Project [codegen id : 19] -Output [5]: [cs_ext_sales_price#53, cs_net_profit#54, cr_return_amount#59, cr_net_loss#60, cp_catalog_page_id#67] -Input [7]: [cs_catalog_page_sk#49, cs_ext_sales_price#53, cs_net_profit#54, cr_return_amount#59, cr_net_loss#60, cp_catalog_page_sk#66, cp_catalog_page_id#67] +Output [5]: [cs_ext_sales_price#47, cs_net_profit#48, cr_return_amount#52, cr_net_loss#53, cp_catalog_page_id#59] +Input [7]: [cs_catalog_page_sk#43, cs_ext_sales_price#47, cs_net_profit#48, cr_return_amount#52, cr_net_loss#53, cp_catalog_page_sk#58, cp_catalog_page_id#59] (68) HashAggregate [codegen id : 19] -Input [5]: [cs_ext_sales_price#53, cs_net_profit#54, cr_return_amount#59, cr_net_loss#60, cp_catalog_page_id#67] -Keys [1]: [cp_catalog_page_id#67] -Functions [3]: [partial_sum(UnscaledValue(cs_ext_sales_price#53)), partial_sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#69, sum#70, isEmpty#71, sum#72, isEmpty#73] -Results [6]: [cp_catalog_page_id#67, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] +Input [5]: [cs_ext_sales_price#47, cs_net_profit#48, cr_return_amount#52, cr_net_loss#53, cp_catalog_page_id#59] +Keys [1]: [cp_catalog_page_id#59] +Functions [3]: [partial_sum(UnscaledValue(cs_ext_sales_price#47)), partial_sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#60, sum#61, isEmpty#62, sum#63, isEmpty#64] +Results [6]: [cp_catalog_page_id#59, sum#65, sum#66, isEmpty#67, sum#68, isEmpty#69] (69) Exchange -Input [6]: [cp_catalog_page_id#67, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -Arguments: hashpartitioning(cp_catalog_page_id#67, 5), ENSURE_REQUIREMENTS, [id=#79] +Input [6]: [cp_catalog_page_id#59, sum#65, sum#66, isEmpty#67, sum#68, isEmpty#69] +Arguments: hashpartitioning(cp_catalog_page_id#59, 5), ENSURE_REQUIREMENTS, [plan_id=10] (70) HashAggregate [codegen id : 20] -Input [6]: [cp_catalog_page_id#67, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -Keys [1]: [cp_catalog_page_id#67] -Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#53)), sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#53))#80, sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00))#81, sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#82] -Results [5]: [MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#53))#80,17,2) AS sales#83, sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00))#81 AS returns#84, sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#82 AS profit#85, catalog channel AS channel#86, concat(catalog_page, cp_catalog_page_id#67) AS id#87] +Input [6]: [cp_catalog_page_id#59, sum#65, sum#66, isEmpty#67, sum#68, isEmpty#69] +Keys [1]: [cp_catalog_page_id#59] +Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#47)), sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#47))#70, sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00))#71, sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#72] +Results [5]: [MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#47))#70,17,2) AS sales#73, sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00))#71 AS returns#74, sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#72 AS profit#75, catalog channel AS channel#76, concat(catalog_page, cp_catalog_page_id#59) AS id#77] (71) Scan parquet default.web_sales -Output [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] +Output [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#94), dynamicpruningexpression(ws_sold_date_sk#94 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ws_sold_date_sk#84), dynamicpruningexpression(ws_sold_date_sk#84 IN dynamicpruning#8)] PushedFilters: [IsNotNull(ws_web_site_sk), IsNotNull(ws_item_sk), IsNotNull(ws_promo_sk)] ReadSchema: struct (72) ColumnarToRow [codegen id : 21] -Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] +Input [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] (73) Filter [codegen id : 21] -Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -Condition : ((((isnotnull(ws_web_site_sk#89) AND isnotnull(ws_item_sk#88)) AND isnotnull(ws_promo_sk#90)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#10], xxhash64(ws_item_sk#88, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#11, [id=#12], xxhash64(ws_promo_sk#90, 42))) +Input [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] +Condition : ((((isnotnull(ws_web_site_sk#79) AND isnotnull(ws_item_sk#78)) AND isnotnull(ws_promo_sk#80)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#10], xxhash64(ws_item_sk#78, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#11, [id=#12], xxhash64(ws_promo_sk#80, 42))) (74) Exchange -Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -Arguments: hashpartitioning(ws_item_sk#88, ws_order_number#91, 5), ENSURE_REQUIREMENTS, [id=#95] +Input [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] +Arguments: hashpartitioning(ws_item_sk#78, ws_order_number#81, 5), ENSURE_REQUIREMENTS, [plan_id=11] (75) Sort [codegen id : 22] -Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -Arguments: [ws_item_sk#88 ASC NULLS FIRST, ws_order_number#91 ASC NULLS FIRST], false, 0 +Input [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] +Arguments: [ws_item_sk#78 ASC NULLS FIRST, ws_order_number#81 ASC NULLS FIRST], false, 0 (76) Scan parquet default.web_returns -Output [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] +Output [5]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88, wr_returned_date_sk#89] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_order_number)] ReadSchema: struct (77) ColumnarToRow [codegen id : 23] -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] +Input [5]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88, wr_returned_date_sk#89] (78) Filter [codegen id : 23] -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] -Condition : (isnotnull(wr_item_sk#96) AND isnotnull(wr_order_number#97)) +Input [5]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88, wr_returned_date_sk#89] +Condition : (isnotnull(wr_item_sk#85) AND isnotnull(wr_order_number#86)) (79) Project [codegen id : 23] -Output [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] +Output [4]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88] +Input [5]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88, wr_returned_date_sk#89] (80) Exchange -Input [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -Arguments: hashpartitioning(wr_item_sk#96, wr_order_number#97, 5), ENSURE_REQUIREMENTS, [id=#101] +Input [4]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88] +Arguments: hashpartitioning(wr_item_sk#85, wr_order_number#86, 5), ENSURE_REQUIREMENTS, [plan_id=12] (81) Sort [codegen id : 24] -Input [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -Arguments: [wr_item_sk#96 ASC NULLS FIRST, wr_order_number#97 ASC NULLS FIRST], false, 0 +Input [4]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88] +Arguments: [wr_item_sk#85 ASC NULLS FIRST, wr_order_number#86 ASC NULLS FIRST], false, 0 (82) SortMergeJoin [codegen id : 29] -Left keys [2]: [ws_item_sk#88, ws_order_number#91] -Right keys [2]: [wr_item_sk#96, wr_order_number#97] +Left keys [2]: [ws_item_sk#78, ws_order_number#81] +Right keys [2]: [wr_item_sk#85, wr_order_number#86] Join condition: None (83) Project [codegen id : 29] -Output [8]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] -Input [11]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] +Output [8]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88] +Input [11]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88] (84) ReusedExchange [Reuses operator id: 18] -Output [1]: [i_item_sk#102] +Output [1]: [i_item_sk#90] (85) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_item_sk#88] -Right keys [1]: [i_item_sk#102] +Left keys [1]: [ws_item_sk#78] +Right keys [1]: [i_item_sk#90] Join condition: None (86) Project [codegen id : 29] -Output [7]: [ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] -Input [9]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, i_item_sk#102] +Output [7]: [ws_web_site_sk#79, ws_promo_sk#80, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88] +Input [9]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88, i_item_sk#90] (87) ReusedExchange [Reuses operator id: 25] -Output [1]: [p_promo_sk#103] +Output [1]: [p_promo_sk#91] (88) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_promo_sk#90] -Right keys [1]: [p_promo_sk#103] +Left keys [1]: [ws_promo_sk#80] +Right keys [1]: [p_promo_sk#91] Join condition: None (89) Project [codegen id : 29] -Output [6]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] -Input [8]: [ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, p_promo_sk#103] +Output [6]: [ws_web_site_sk#79, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88] +Input [8]: [ws_web_site_sk#79, ws_promo_sk#80, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88, p_promo_sk#91] (90) ReusedExchange [Reuses operator id: 126] -Output [1]: [d_date_sk#104] +Output [1]: [d_date_sk#92] (91) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_sold_date_sk#94] -Right keys [1]: [d_date_sk#104] +Left keys [1]: [ws_sold_date_sk#84] +Right keys [1]: [d_date_sk#92] Join condition: None (92) Project [codegen id : 29] -Output [5]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99] -Input [7]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, d_date_sk#104] +Output [5]: [ws_web_site_sk#79, ws_ext_sales_price#82, ws_net_profit#83, wr_return_amt#87, wr_net_loss#88] +Input [7]: [ws_web_site_sk#79, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88, d_date_sk#92] (93) Scan parquet default.web_site -Output [2]: [web_site_sk#105, web_site_id#106] +Output [2]: [web_site_sk#93, web_site_id#94] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_site_sk)] ReadSchema: struct (94) ColumnarToRow [codegen id : 28] -Input [2]: [web_site_sk#105, web_site_id#106] +Input [2]: [web_site_sk#93, web_site_id#94] (95) Filter [codegen id : 28] -Input [2]: [web_site_sk#105, web_site_id#106] -Condition : isnotnull(web_site_sk#105) +Input [2]: [web_site_sk#93, web_site_id#94] +Condition : isnotnull(web_site_sk#93) (96) BroadcastExchange -Input [2]: [web_site_sk#105, web_site_id#106] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#107] +Input [2]: [web_site_sk#93, web_site_id#94] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=13] (97) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_web_site_sk#89] -Right keys [1]: [web_site_sk#105] +Left keys [1]: [ws_web_site_sk#79] +Right keys [1]: [web_site_sk#93] Join condition: None (98) Project [codegen id : 29] -Output [5]: [ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99, web_site_id#106] -Input [7]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99, web_site_sk#105, web_site_id#106] +Output [5]: [ws_ext_sales_price#82, ws_net_profit#83, wr_return_amt#87, wr_net_loss#88, web_site_id#94] +Input [7]: [ws_web_site_sk#79, ws_ext_sales_price#82, ws_net_profit#83, wr_return_amt#87, wr_net_loss#88, web_site_sk#93, web_site_id#94] (99) HashAggregate [codegen id : 29] -Input [5]: [ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99, web_site_id#106] -Keys [1]: [web_site_id#106] -Functions [3]: [partial_sum(UnscaledValue(ws_ext_sales_price#92)), partial_sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#108, sum#109, isEmpty#110, sum#111, isEmpty#112] -Results [6]: [web_site_id#106, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117] +Input [5]: [ws_ext_sales_price#82, ws_net_profit#83, wr_return_amt#87, wr_net_loss#88, web_site_id#94] +Keys [1]: [web_site_id#94] +Functions [3]: [partial_sum(UnscaledValue(ws_ext_sales_price#82)), partial_sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#95, sum#96, isEmpty#97, sum#98, isEmpty#99] +Results [6]: [web_site_id#94, sum#100, sum#101, isEmpty#102, sum#103, isEmpty#104] (100) Exchange -Input [6]: [web_site_id#106, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117] -Arguments: hashpartitioning(web_site_id#106, 5), ENSURE_REQUIREMENTS, [id=#118] +Input [6]: [web_site_id#94, sum#100, sum#101, isEmpty#102, sum#103, isEmpty#104] +Arguments: hashpartitioning(web_site_id#94, 5), ENSURE_REQUIREMENTS, [plan_id=14] (101) HashAggregate [codegen id : 30] -Input [6]: [web_site_id#106, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117] -Keys [1]: [web_site_id#106] -Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#92)), sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#92))#119, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#120, sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#121] -Results [5]: [MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#92))#119,17,2) AS sales#122, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#120 AS returns#123, sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#121 AS profit#124, web channel AS channel#125, concat(web_site, web_site_id#106) AS id#126] +Input [6]: [web_site_id#94, sum#100, sum#101, isEmpty#102, sum#103, isEmpty#104] +Keys [1]: [web_site_id#94] +Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#82)), sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#82))#105, sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00))#106, sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#107] +Results [5]: [MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#82))#105,17,2) AS sales#108, sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00))#106 AS returns#109, sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#107 AS profit#110, web channel AS channel#111, concat(web_site, web_site_id#94) AS id#112] (102) Union (103) Expand [codegen id : 31] -Input [5]: [sales#44, returns#45, profit#46, channel#47, id#48] -Arguments: [[sales#44, returns#45, profit#46, channel#47, id#48, 0], [sales#44, returns#45, profit#46, channel#47, null, 1], [sales#44, returns#45, profit#46, null, null, 3]], [sales#44, returns#45, profit#46, channel#127, id#128, spark_grouping_id#129] +Input [5]: [sales#38, returns#39, profit#40, channel#41, id#42] +Arguments: [[sales#38, returns#39, profit#40, channel#41, id#42, 0], [sales#38, returns#39, profit#40, channel#41, null, 1], [sales#38, returns#39, profit#40, null, null, 3]], [sales#38, returns#39, profit#40, channel#113, id#114, spark_grouping_id#115] (104) HashAggregate [codegen id : 31] -Input [6]: [sales#44, returns#45, profit#46, channel#127, id#128, spark_grouping_id#129] -Keys [3]: [channel#127, id#128, spark_grouping_id#129] -Functions [3]: [partial_sum(sales#44), partial_sum(returns#45), partial_sum(profit#46)] -Aggregate Attributes [6]: [sum#130, isEmpty#131, sum#132, isEmpty#133, sum#134, isEmpty#135] -Results [9]: [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141] +Input [6]: [sales#38, returns#39, profit#40, channel#113, id#114, spark_grouping_id#115] +Keys [3]: [channel#113, id#114, spark_grouping_id#115] +Functions [3]: [partial_sum(sales#38), partial_sum(returns#39), partial_sum(profit#40)] +Aggregate Attributes [6]: [sum#116, isEmpty#117, sum#118, isEmpty#119, sum#120, isEmpty#121] +Results [9]: [channel#113, id#114, spark_grouping_id#115, sum#122, isEmpty#123, sum#124, isEmpty#125, sum#126, isEmpty#127] (105) Exchange -Input [9]: [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141] -Arguments: hashpartitioning(channel#127, id#128, spark_grouping_id#129, 5), ENSURE_REQUIREMENTS, [id=#142] +Input [9]: [channel#113, id#114, spark_grouping_id#115, sum#122, isEmpty#123, sum#124, isEmpty#125, sum#126, isEmpty#127] +Arguments: hashpartitioning(channel#113, id#114, spark_grouping_id#115, 5), ENSURE_REQUIREMENTS, [plan_id=15] (106) HashAggregate [codegen id : 32] -Input [9]: [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141] -Keys [3]: [channel#127, id#128, spark_grouping_id#129] -Functions [3]: [sum(sales#44), sum(returns#45), sum(profit#46)] -Aggregate Attributes [3]: [sum(sales#44)#143, sum(returns#45)#144, sum(profit#46)#145] -Results [5]: [channel#127, id#128, sum(sales#44)#143 AS sales#146, sum(returns#45)#144 AS returns#147, sum(profit#46)#145 AS profit#148] +Input [9]: [channel#113, id#114, spark_grouping_id#115, sum#122, isEmpty#123, sum#124, isEmpty#125, sum#126, isEmpty#127] +Keys [3]: [channel#113, id#114, spark_grouping_id#115] +Functions [3]: [sum(sales#38), sum(returns#39), sum(profit#40)] +Aggregate Attributes [3]: [sum(sales#38)#128, sum(returns#39)#129, sum(profit#40)#130] +Results [5]: [channel#113, id#114, sum(sales#38)#128 AS sales#131, sum(returns#39)#129 AS returns#132, sum(profit#40)#130 AS profit#133] (107) TakeOrderedAndProject -Input [5]: [channel#127, id#128, sales#146, returns#147, profit#148] -Arguments: 100, [channel#127 ASC NULLS FIRST, id#128 ASC NULLS FIRST], [channel#127, id#128, sales#146, returns#147, profit#148] +Input [5]: [channel#113, id#114, sales#131, returns#132, profit#133] +Arguments: 100, [channel#113 ASC NULLS FIRST, id#114 ASC NULLS FIRST], [channel#113, id#114, sales#131, returns#132, profit#133] ===== Subqueries ===== @@ -604,40 +604,40 @@ ObjectHashAggregate (114) (108) Scan parquet default.item -Output [2]: [i_item_sk#20, i_current_price#21] +Output [2]: [i_item_sk#18, i_current_price#19] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)] ReadSchema: struct (109) ColumnarToRow [codegen id : 1] -Input [2]: [i_item_sk#20, i_current_price#21] +Input [2]: [i_item_sk#18, i_current_price#19] (110) Filter [codegen id : 1] -Input [2]: [i_item_sk#20, i_current_price#21] -Condition : ((isnotnull(i_current_price#21) AND (i_current_price#21 > 50.00)) AND isnotnull(i_item_sk#20)) +Input [2]: [i_item_sk#18, i_current_price#19] +Condition : ((isnotnull(i_current_price#19) AND (i_current_price#19 > 50.00)) AND isnotnull(i_item_sk#18)) (111) Project [codegen id : 1] -Output [1]: [i_item_sk#20] -Input [2]: [i_item_sk#20, i_current_price#21] +Output [1]: [i_item_sk#18] +Input [2]: [i_item_sk#18, i_current_price#19] (112) ObjectHashAggregate -Input [1]: [i_item_sk#20] +Input [1]: [i_item_sk#18] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#20, 42), 101823, 814584, 0, 0)] -Aggregate Attributes [1]: [buf#149] -Results [1]: [buf#150] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 814584, 0, 0)] +Aggregate Attributes [1]: [buf#134] +Results [1]: [buf#135] (113) Exchange -Input [1]: [buf#150] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#151] +Input [1]: [buf#135] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=16] (114) ObjectHashAggregate -Input [1]: [buf#150] +Input [1]: [buf#135] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#20, 42), 101823, 814584, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#20, 42), 101823, 814584, 0, 0)#152] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#20, 42), 101823, 814584, 0, 0)#152 AS bloomFilter#153] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 814584, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 814584, 0, 0)#136] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 814584, 0, 0)#136 AS bloomFilter#137] Subquery:2 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#11, [id=#12] ObjectHashAggregate (121) @@ -650,40 +650,40 @@ ObjectHashAggregate (121) (115) Scan parquet default.promotion -Output [2]: [p_promo_sk#23, p_channel_tv#24] +Output [2]: [p_promo_sk#20, p_channel_tv#21] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)] ReadSchema: struct (116) ColumnarToRow [codegen id : 1] -Input [2]: [p_promo_sk#23, p_channel_tv#24] +Input [2]: [p_promo_sk#20, p_channel_tv#21] (117) Filter [codegen id : 1] -Input [2]: [p_promo_sk#23, p_channel_tv#24] -Condition : ((isnotnull(p_channel_tv#24) AND (p_channel_tv#24 = N)) AND isnotnull(p_promo_sk#23)) +Input [2]: [p_promo_sk#20, p_channel_tv#21] +Condition : ((isnotnull(p_channel_tv#21) AND (p_channel_tv#21 = N)) AND isnotnull(p_promo_sk#20)) (118) Project [codegen id : 1] -Output [1]: [p_promo_sk#23] -Input [2]: [p_promo_sk#23, p_channel_tv#24] +Output [1]: [p_promo_sk#20] +Input [2]: [p_promo_sk#20, p_channel_tv#21] (119) ObjectHashAggregate -Input [1]: [p_promo_sk#23] +Input [1]: [p_promo_sk#20] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(p_promo_sk#23, 42), 986, 7888, 0, 0)] -Aggregate Attributes [1]: [buf#154] -Results [1]: [buf#155] +Functions [1]: [partial_bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 7888, 0, 0)] +Aggregate Attributes [1]: [buf#138] +Results [1]: [buf#139] (120) Exchange -Input [1]: [buf#155] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#156] +Input [1]: [buf#139] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=17] (121) ObjectHashAggregate -Input [1]: [buf#155] +Input [1]: [buf#139] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(p_promo_sk#23, 42), 986, 7888, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(p_promo_sk#23, 42), 986, 7888, 0, 0)#157] -Results [1]: [bloom_filter_agg(xxhash64(p_promo_sk#23, 42), 986, 7888, 0, 0)#157 AS bloomFilter#158] +Functions [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 7888, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 7888, 0, 0)#140] +Results [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 7888, 0, 0)#140 AS bloomFilter#141] Subquery:3 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 BroadcastExchange (126) @@ -694,37 +694,37 @@ BroadcastExchange (126) (122) Scan parquet default.date_dim -Output [2]: [d_date_sk#26, d_date#159] +Output [2]: [d_date_sk#22, d_date#142] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-08-23), LessThanOrEqual(d_date,2000-09-22), IsNotNull(d_date_sk)] ReadSchema: struct (123) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#26, d_date#159] +Input [2]: [d_date_sk#22, d_date#142] (124) Filter [codegen id : 1] -Input [2]: [d_date_sk#26, d_date#159] -Condition : (((isnotnull(d_date#159) AND (d_date#159 >= 2000-08-23)) AND (d_date#159 <= 2000-09-22)) AND isnotnull(d_date_sk#26)) +Input [2]: [d_date_sk#22, d_date#142] +Condition : (((isnotnull(d_date#142) AND (d_date#142 >= 2000-08-23)) AND (d_date#142 <= 2000-09-22)) AND isnotnull(d_date_sk#22)) (125) Project [codegen id : 1] -Output [1]: [d_date_sk#26] -Input [2]: [d_date_sk#26, d_date#159] +Output [1]: [d_date_sk#22] +Input [2]: [d_date_sk#22, d_date#142] (126) BroadcastExchange -Input [1]: [d_date_sk#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#160] +Input [1]: [d_date_sk#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=18] Subquery:4 Hosting operator id = 42 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#10] Subquery:5 Hosting operator id = 42 Hosting Expression = ReusedSubquery Subquery scalar-subquery#11, [id=#12] -Subquery:6 Hosting operator id = 40 Hosting Expression = cs_sold_date_sk#55 IN dynamicpruning#8 +Subquery:6 Hosting operator id = 40 Hosting Expression = cs_sold_date_sk#49 IN dynamicpruning#8 Subquery:7 Hosting operator id = 73 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#10] Subquery:8 Hosting operator id = 73 Hosting Expression = ReusedSubquery Subquery scalar-subquery#11, [id=#12] -Subquery:9 Hosting operator id = 71 Hosting Expression = ws_sold_date_sk#94 IN dynamicpruning#8 +Subquery:9 Hosting operator id = 71 Hosting Expression = ws_sold_date_sk#84 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q80/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q80/explain.txt index 20cf55dba4482..daf8834a68310 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q80/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q80/explain.txt @@ -125,471 +125,471 @@ Condition : ((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnul (4) Exchange Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: [ss_item_sk#1 ASC NULLS FIRST, ss_ticket_number#4 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_returns -Output [5]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14] +Output [5]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12, sr_returned_date_sk#13] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [5]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14] +Input [5]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12, sr_returned_date_sk#13] (8) Filter [codegen id : 3] -Input [5]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14] -Condition : (isnotnull(sr_item_sk#10) AND isnotnull(sr_ticket_number#11)) +Input [5]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12, sr_returned_date_sk#13] +Condition : (isnotnull(sr_item_sk#9) AND isnotnull(sr_ticket_number#10)) (9) Project [codegen id : 3] -Output [4]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13] -Input [5]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14] +Output [4]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12] +Input [5]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12, sr_returned_date_sk#13] (10) Exchange -Input [4]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13] -Arguments: hashpartitioning(sr_item_sk#10, sr_ticket_number#11, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12] +Arguments: hashpartitioning(sr_item_sk#9, sr_ticket_number#10, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [4]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13] -Arguments: [sr_item_sk#10 ASC NULLS FIRST, sr_ticket_number#11 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12] +Arguments: [sr_item_sk#9 ASC NULLS FIRST, sr_ticket_number#10 ASC NULLS FIRST], false, 0 (12) SortMergeJoin [codegen id : 9] Left keys [2]: [ss_item_sk#1, ss_ticket_number#4] -Right keys [2]: [sr_item_sk#10, sr_ticket_number#11] +Right keys [2]: [sr_item_sk#9, sr_ticket_number#10] Join condition: None (13) Project [codegen id : 9] -Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#12, sr_net_loss#13] -Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13] +Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#11, sr_net_loss#12] +Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12] (14) ReusedExchange [Reuses operator id: 112] -Output [1]: [d_date_sk#16] +Output [1]: [d_date_sk#14] (15) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_sold_date_sk#7] -Right keys [1]: [d_date_sk#16] +Right keys [1]: [d_date_sk#14] Join condition: None (16) Project [codegen id : 9] -Output [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13] -Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#12, sr_net_loss#13, d_date_sk#16] +Output [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12] +Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#11, sr_net_loss#12, d_date_sk#14] (17) Scan parquet default.store -Output [2]: [s_store_sk#17, s_store_id#18] +Output [2]: [s_store_sk#15, s_store_id#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (18) ColumnarToRow [codegen id : 6] -Input [2]: [s_store_sk#17, s_store_id#18] +Input [2]: [s_store_sk#15, s_store_id#16] (19) Filter [codegen id : 6] -Input [2]: [s_store_sk#17, s_store_id#18] -Condition : isnotnull(s_store_sk#17) +Input [2]: [s_store_sk#15, s_store_id#16] +Condition : isnotnull(s_store_sk#15) (20) BroadcastExchange -Input [2]: [s_store_sk#17, s_store_id#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19] +Input [2]: [s_store_sk#15, s_store_id#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#2] -Right keys [1]: [s_store_sk#17] +Right keys [1]: [s_store_sk#15] Join condition: None (22) Project [codegen id : 9] -Output [7]: [ss_item_sk#1, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18] -Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_sk#17, s_store_id#18] +Output [7]: [ss_item_sk#1, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#16] +Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_sk#15, s_store_id#16] (23) Scan parquet default.item -Output [2]: [i_item_sk#20, i_current_price#21] +Output [2]: [i_item_sk#17, i_current_price#18] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)] ReadSchema: struct (24) ColumnarToRow [codegen id : 7] -Input [2]: [i_item_sk#20, i_current_price#21] +Input [2]: [i_item_sk#17, i_current_price#18] (25) Filter [codegen id : 7] -Input [2]: [i_item_sk#20, i_current_price#21] -Condition : ((isnotnull(i_current_price#21) AND (i_current_price#21 > 50.00)) AND isnotnull(i_item_sk#20)) +Input [2]: [i_item_sk#17, i_current_price#18] +Condition : ((isnotnull(i_current_price#18) AND (i_current_price#18 > 50.00)) AND isnotnull(i_item_sk#17)) (26) Project [codegen id : 7] -Output [1]: [i_item_sk#20] -Input [2]: [i_item_sk#20, i_current_price#21] +Output [1]: [i_item_sk#17] +Input [2]: [i_item_sk#17, i_current_price#18] (27) BroadcastExchange -Input [1]: [i_item_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [i_item_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (28) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#20] +Right keys [1]: [i_item_sk#17] Join condition: None (29) Project [codegen id : 9] -Output [6]: [ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18] -Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18, i_item_sk#20] +Output [6]: [ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#16] +Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#16, i_item_sk#17] (30) Scan parquet default.promotion -Output [2]: [p_promo_sk#23, p_channel_tv#24] +Output [2]: [p_promo_sk#19, p_channel_tv#20] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 8] -Input [2]: [p_promo_sk#23, p_channel_tv#24] +Input [2]: [p_promo_sk#19, p_channel_tv#20] (32) Filter [codegen id : 8] -Input [2]: [p_promo_sk#23, p_channel_tv#24] -Condition : ((isnotnull(p_channel_tv#24) AND (p_channel_tv#24 = N)) AND isnotnull(p_promo_sk#23)) +Input [2]: [p_promo_sk#19, p_channel_tv#20] +Condition : ((isnotnull(p_channel_tv#20) AND (p_channel_tv#20 = N)) AND isnotnull(p_promo_sk#19)) (33) Project [codegen id : 8] -Output [1]: [p_promo_sk#23] -Input [2]: [p_promo_sk#23, p_channel_tv#24] +Output [1]: [p_promo_sk#19] +Input [2]: [p_promo_sk#19, p_channel_tv#20] (34) BroadcastExchange -Input [1]: [p_promo_sk#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [p_promo_sk#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (35) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_promo_sk#3] -Right keys [1]: [p_promo_sk#23] +Right keys [1]: [p_promo_sk#19] Join condition: None (36) Project [codegen id : 9] -Output [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18] -Input [7]: [ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18, p_promo_sk#23] +Output [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#16] +Input [7]: [ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#16, p_promo_sk#19] (37) HashAggregate [codegen id : 9] -Input [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18] -Keys [1]: [s_store_id#18] -Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#5)), partial_sum(coalesce(cast(sr_return_amt#12 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#13 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#26, sum#27, isEmpty#28, sum#29, isEmpty#30] -Results [6]: [s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35] +Input [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#16] +Keys [1]: [s_store_id#16] +Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#5)), partial_sum(coalesce(cast(sr_return_amt#11 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#21, sum#22, isEmpty#23, sum#24, isEmpty#25] +Results [6]: [s_store_id#16, sum#26, sum#27, isEmpty#28, sum#29, isEmpty#30] (38) Exchange -Input [6]: [s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35] -Arguments: hashpartitioning(s_store_id#18, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [6]: [s_store_id#16, sum#26, sum#27, isEmpty#28, sum#29, isEmpty#30] +Arguments: hashpartitioning(s_store_id#16, 5), ENSURE_REQUIREMENTS, [plan_id=6] (39) HashAggregate [codegen id : 10] -Input [6]: [s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35] -Keys [1]: [s_store_id#18] -Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#12 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#13 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#37, sum(coalesce(cast(sr_return_amt#12 as decimal(12,2)), 0.00))#38, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#13 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#39] -Results [5]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#37,17,2) AS sales#40, sum(coalesce(cast(sr_return_amt#12 as decimal(12,2)), 0.00))#38 AS returns#41, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#13 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#39 AS profit#42, store channel AS channel#43, concat(store, s_store_id#18) AS id#44] +Input [6]: [s_store_id#16, sum#26, sum#27, isEmpty#28, sum#29, isEmpty#30] +Keys [1]: [s_store_id#16] +Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#11 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#31, sum(coalesce(cast(sr_return_amt#11 as decimal(12,2)), 0.00))#32, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#33] +Results [5]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#31,17,2) AS sales#34, sum(coalesce(cast(sr_return_amt#11 as decimal(12,2)), 0.00))#32 AS returns#35, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#33 AS profit#36, store channel AS channel#37, concat(store, s_store_id#16) AS id#38] (40) Scan parquet default.catalog_sales -Output [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51] +Output [7]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_order_number#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#51), dynamicpruningexpression(cs_sold_date_sk#51 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(cs_sold_date_sk#45), dynamicpruningexpression(cs_sold_date_sk#45 IN dynamicpruning#8)] PushedFilters: [IsNotNull(cs_catalog_page_sk), IsNotNull(cs_item_sk), IsNotNull(cs_promo_sk)] ReadSchema: struct (41) ColumnarToRow [codegen id : 11] -Input [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51] +Input [7]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_order_number#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] (42) Filter [codegen id : 11] -Input [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51] -Condition : ((isnotnull(cs_catalog_page_sk#45) AND isnotnull(cs_item_sk#46)) AND isnotnull(cs_promo_sk#47)) +Input [7]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_order_number#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] +Condition : ((isnotnull(cs_catalog_page_sk#39) AND isnotnull(cs_item_sk#40)) AND isnotnull(cs_promo_sk#41)) (43) Exchange -Input [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51] -Arguments: hashpartitioning(cs_item_sk#46, cs_order_number#48, 5), ENSURE_REQUIREMENTS, [id=#52] +Input [7]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_order_number#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] +Arguments: hashpartitioning(cs_item_sk#40, cs_order_number#42, 5), ENSURE_REQUIREMENTS, [plan_id=7] (44) Sort [codegen id : 12] -Input [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51] -Arguments: [cs_item_sk#46 ASC NULLS FIRST, cs_order_number#48 ASC NULLS FIRST], false, 0 +Input [7]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_order_number#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] +Arguments: [cs_item_sk#40 ASC NULLS FIRST, cs_order_number#42 ASC NULLS FIRST], false, 0 (45) Scan parquet default.catalog_returns -Output [5]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Output [5]: [cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49, cr_returned_date_sk#50] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct (46) ColumnarToRow [codegen id : 13] -Input [5]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Input [5]: [cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49, cr_returned_date_sk#50] (47) Filter [codegen id : 13] -Input [5]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] -Condition : (isnotnull(cr_item_sk#53) AND isnotnull(cr_order_number#54)) +Input [5]: [cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49, cr_returned_date_sk#50] +Condition : (isnotnull(cr_item_sk#46) AND isnotnull(cr_order_number#47)) (48) Project [codegen id : 13] -Output [4]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56] -Input [5]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Output [4]: [cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49] +Input [5]: [cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49, cr_returned_date_sk#50] (49) Exchange -Input [4]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56] -Arguments: hashpartitioning(cr_item_sk#53, cr_order_number#54, 5), ENSURE_REQUIREMENTS, [id=#58] +Input [4]: [cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49] +Arguments: hashpartitioning(cr_item_sk#46, cr_order_number#47, 5), ENSURE_REQUIREMENTS, [plan_id=8] (50) Sort [codegen id : 14] -Input [4]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56] -Arguments: [cr_item_sk#53 ASC NULLS FIRST, cr_order_number#54 ASC NULLS FIRST], false, 0 +Input [4]: [cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49] +Arguments: [cr_item_sk#46 ASC NULLS FIRST, cr_order_number#47 ASC NULLS FIRST], false, 0 (51) SortMergeJoin [codegen id : 19] -Left keys [2]: [cs_item_sk#46, cs_order_number#48] -Right keys [2]: [cr_item_sk#53, cr_order_number#54] +Left keys [2]: [cs_item_sk#40, cs_order_number#42] +Right keys [2]: [cr_item_sk#46, cr_order_number#47] Join condition: None (52) Project [codegen id : 19] -Output [8]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51, cr_return_amount#55, cr_net_loss#56] -Input [11]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51, cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56] +Output [8]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45, cr_return_amount#48, cr_net_loss#49] +Input [11]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_order_number#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45, cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49] (53) ReusedExchange [Reuses operator id: 112] -Output [1]: [d_date_sk#59] +Output [1]: [d_date_sk#51] (54) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_sold_date_sk#51] -Right keys [1]: [d_date_sk#59] +Left keys [1]: [cs_sold_date_sk#45] +Right keys [1]: [d_date_sk#51] Join condition: None (55) Project [codegen id : 19] -Output [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56] -Input [9]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51, cr_return_amount#55, cr_net_loss#56, d_date_sk#59] +Output [7]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49] +Input [9]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45, cr_return_amount#48, cr_net_loss#49, d_date_sk#51] (56) Scan parquet default.catalog_page -Output [2]: [cp_catalog_page_sk#60, cp_catalog_page_id#61] +Output [2]: [cp_catalog_page_sk#52, cp_catalog_page_id#53] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_page] PushedFilters: [IsNotNull(cp_catalog_page_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 16] -Input [2]: [cp_catalog_page_sk#60, cp_catalog_page_id#61] +Input [2]: [cp_catalog_page_sk#52, cp_catalog_page_id#53] (58) Filter [codegen id : 16] -Input [2]: [cp_catalog_page_sk#60, cp_catalog_page_id#61] -Condition : isnotnull(cp_catalog_page_sk#60) +Input [2]: [cp_catalog_page_sk#52, cp_catalog_page_id#53] +Condition : isnotnull(cp_catalog_page_sk#52) (59) BroadcastExchange -Input [2]: [cp_catalog_page_sk#60, cp_catalog_page_id#61] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#62] +Input [2]: [cp_catalog_page_sk#52, cp_catalog_page_id#53] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] (60) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_catalog_page_sk#45] -Right keys [1]: [cp_catalog_page_sk#60] +Left keys [1]: [cs_catalog_page_sk#39] +Right keys [1]: [cp_catalog_page_sk#52] Join condition: None (61) Project [codegen id : 19] -Output [7]: [cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61] -Input [9]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_sk#60, cp_catalog_page_id#61] +Output [7]: [cs_item_sk#40, cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49, cp_catalog_page_id#53] +Input [9]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49, cp_catalog_page_sk#52, cp_catalog_page_id#53] (62) ReusedExchange [Reuses operator id: 27] -Output [1]: [i_item_sk#63] +Output [1]: [i_item_sk#54] (63) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_item_sk#46] -Right keys [1]: [i_item_sk#63] +Left keys [1]: [cs_item_sk#40] +Right keys [1]: [i_item_sk#54] Join condition: None (64) Project [codegen id : 19] -Output [6]: [cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61] -Input [8]: [cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61, i_item_sk#63] +Output [6]: [cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49, cp_catalog_page_id#53] +Input [8]: [cs_item_sk#40, cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49, cp_catalog_page_id#53, i_item_sk#54] (65) ReusedExchange [Reuses operator id: 34] -Output [1]: [p_promo_sk#64] +Output [1]: [p_promo_sk#55] (66) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_promo_sk#47] -Right keys [1]: [p_promo_sk#64] +Left keys [1]: [cs_promo_sk#41] +Right keys [1]: [p_promo_sk#55] Join condition: None (67) Project [codegen id : 19] -Output [5]: [cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61] -Input [7]: [cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61, p_promo_sk#64] +Output [5]: [cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49, cp_catalog_page_id#53] +Input [7]: [cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49, cp_catalog_page_id#53, p_promo_sk#55] (68) HashAggregate [codegen id : 19] -Input [5]: [cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61] -Keys [1]: [cp_catalog_page_id#61] -Functions [3]: [partial_sum(UnscaledValue(cs_ext_sales_price#49)), partial_sum(coalesce(cast(cr_return_amount#55 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(cs_net_profit#50 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#56 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#65, sum#66, isEmpty#67, sum#68, isEmpty#69] -Results [6]: [cp_catalog_page_id#61, sum#70, sum#71, isEmpty#72, sum#73, isEmpty#74] +Input [5]: [cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49, cp_catalog_page_id#53] +Keys [1]: [cp_catalog_page_id#53] +Functions [3]: [partial_sum(UnscaledValue(cs_ext_sales_price#43)), partial_sum(coalesce(cast(cr_return_amount#48 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(cs_net_profit#44 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#49 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#56, sum#57, isEmpty#58, sum#59, isEmpty#60] +Results [6]: [cp_catalog_page_id#53, sum#61, sum#62, isEmpty#63, sum#64, isEmpty#65] (69) Exchange -Input [6]: [cp_catalog_page_id#61, sum#70, sum#71, isEmpty#72, sum#73, isEmpty#74] -Arguments: hashpartitioning(cp_catalog_page_id#61, 5), ENSURE_REQUIREMENTS, [id=#75] +Input [6]: [cp_catalog_page_id#53, sum#61, sum#62, isEmpty#63, sum#64, isEmpty#65] +Arguments: hashpartitioning(cp_catalog_page_id#53, 5), ENSURE_REQUIREMENTS, [plan_id=10] (70) HashAggregate [codegen id : 20] -Input [6]: [cp_catalog_page_id#61, sum#70, sum#71, isEmpty#72, sum#73, isEmpty#74] -Keys [1]: [cp_catalog_page_id#61] -Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#49)), sum(coalesce(cast(cr_return_amount#55 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(cs_net_profit#50 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#56 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#49))#76, sum(coalesce(cast(cr_return_amount#55 as decimal(12,2)), 0.00))#77, sum(CheckOverflow((promote_precision(cast(cs_net_profit#50 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#56 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#78] -Results [5]: [MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#49))#76,17,2) AS sales#79, sum(coalesce(cast(cr_return_amount#55 as decimal(12,2)), 0.00))#77 AS returns#80, sum(CheckOverflow((promote_precision(cast(cs_net_profit#50 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#56 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#78 AS profit#81, catalog channel AS channel#82, concat(catalog_page, cp_catalog_page_id#61) AS id#83] +Input [6]: [cp_catalog_page_id#53, sum#61, sum#62, isEmpty#63, sum#64, isEmpty#65] +Keys [1]: [cp_catalog_page_id#53] +Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#43)), sum(coalesce(cast(cr_return_amount#48 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(cs_net_profit#44 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#49 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#43))#66, sum(coalesce(cast(cr_return_amount#48 as decimal(12,2)), 0.00))#67, sum(CheckOverflow((promote_precision(cast(cs_net_profit#44 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#49 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#68] +Results [5]: [MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#43))#66,17,2) AS sales#69, sum(coalesce(cast(cr_return_amount#48 as decimal(12,2)), 0.00))#67 AS returns#70, sum(CheckOverflow((promote_precision(cast(cs_net_profit#44 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#49 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#68 AS profit#71, catalog channel AS channel#72, concat(catalog_page, cp_catalog_page_id#53) AS id#73] (71) Scan parquet default.web_sales -Output [7]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_order_number#87, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90] +Output [7]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_order_number#77, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#90), dynamicpruningexpression(ws_sold_date_sk#90 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ws_sold_date_sk#80), dynamicpruningexpression(ws_sold_date_sk#80 IN dynamicpruning#8)] PushedFilters: [IsNotNull(ws_web_site_sk), IsNotNull(ws_item_sk), IsNotNull(ws_promo_sk)] ReadSchema: struct (72) ColumnarToRow [codegen id : 21] -Input [7]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_order_number#87, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90] +Input [7]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_order_number#77, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80] (73) Filter [codegen id : 21] -Input [7]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_order_number#87, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90] -Condition : ((isnotnull(ws_web_site_sk#85) AND isnotnull(ws_item_sk#84)) AND isnotnull(ws_promo_sk#86)) +Input [7]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_order_number#77, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80] +Condition : ((isnotnull(ws_web_site_sk#75) AND isnotnull(ws_item_sk#74)) AND isnotnull(ws_promo_sk#76)) (74) Exchange -Input [7]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_order_number#87, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90] -Arguments: hashpartitioning(ws_item_sk#84, ws_order_number#87, 5), ENSURE_REQUIREMENTS, [id=#91] +Input [7]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_order_number#77, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80] +Arguments: hashpartitioning(ws_item_sk#74, ws_order_number#77, 5), ENSURE_REQUIREMENTS, [plan_id=11] (75) Sort [codegen id : 22] -Input [7]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_order_number#87, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90] -Arguments: [ws_item_sk#84 ASC NULLS FIRST, ws_order_number#87 ASC NULLS FIRST], false, 0 +Input [7]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_order_number#77, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80] +Arguments: [ws_item_sk#74 ASC NULLS FIRST, ws_order_number#77 ASC NULLS FIRST], false, 0 (76) Scan parquet default.web_returns -Output [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] +Output [5]: [wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84, wr_returned_date_sk#85] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_order_number)] ReadSchema: struct (77) ColumnarToRow [codegen id : 23] -Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] +Input [5]: [wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84, wr_returned_date_sk#85] (78) Filter [codegen id : 23] -Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] -Condition : (isnotnull(wr_item_sk#92) AND isnotnull(wr_order_number#93)) +Input [5]: [wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84, wr_returned_date_sk#85] +Condition : (isnotnull(wr_item_sk#81) AND isnotnull(wr_order_number#82)) (79) Project [codegen id : 23] -Output [4]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95] -Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] +Output [4]: [wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84] +Input [5]: [wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84, wr_returned_date_sk#85] (80) Exchange -Input [4]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95] -Arguments: hashpartitioning(wr_item_sk#92, wr_order_number#93, 5), ENSURE_REQUIREMENTS, [id=#97] +Input [4]: [wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84] +Arguments: hashpartitioning(wr_item_sk#81, wr_order_number#82, 5), ENSURE_REQUIREMENTS, [plan_id=12] (81) Sort [codegen id : 24] -Input [4]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95] -Arguments: [wr_item_sk#92 ASC NULLS FIRST, wr_order_number#93 ASC NULLS FIRST], false, 0 +Input [4]: [wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84] +Arguments: [wr_item_sk#81 ASC NULLS FIRST, wr_order_number#82 ASC NULLS FIRST], false, 0 (82) SortMergeJoin [codegen id : 29] -Left keys [2]: [ws_item_sk#84, ws_order_number#87] -Right keys [2]: [wr_item_sk#92, wr_order_number#93] +Left keys [2]: [ws_item_sk#74, ws_order_number#77] +Right keys [2]: [wr_item_sk#81, wr_order_number#82] Join condition: None (83) Project [codegen id : 29] -Output [8]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90, wr_return_amt#94, wr_net_loss#95] -Input [11]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_order_number#87, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90, wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95] +Output [8]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80, wr_return_amt#83, wr_net_loss#84] +Input [11]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_order_number#77, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80, wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84] (84) ReusedExchange [Reuses operator id: 112] -Output [1]: [d_date_sk#98] +Output [1]: [d_date_sk#86] (85) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_sold_date_sk#90] -Right keys [1]: [d_date_sk#98] +Left keys [1]: [ws_sold_date_sk#80] +Right keys [1]: [d_date_sk#86] Join condition: None (86) Project [codegen id : 29] -Output [7]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95] -Input [9]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90, wr_return_amt#94, wr_net_loss#95, d_date_sk#98] +Output [7]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84] +Input [9]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80, wr_return_amt#83, wr_net_loss#84, d_date_sk#86] (87) Scan parquet default.web_site -Output [2]: [web_site_sk#99, web_site_id#100] +Output [2]: [web_site_sk#87, web_site_id#88] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_site_sk)] ReadSchema: struct (88) ColumnarToRow [codegen id : 26] -Input [2]: [web_site_sk#99, web_site_id#100] +Input [2]: [web_site_sk#87, web_site_id#88] (89) Filter [codegen id : 26] -Input [2]: [web_site_sk#99, web_site_id#100] -Condition : isnotnull(web_site_sk#99) +Input [2]: [web_site_sk#87, web_site_id#88] +Condition : isnotnull(web_site_sk#87) (90) BroadcastExchange -Input [2]: [web_site_sk#99, web_site_id#100] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#101] +Input [2]: [web_site_sk#87, web_site_id#88] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=13] (91) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_web_site_sk#85] -Right keys [1]: [web_site_sk#99] +Left keys [1]: [ws_web_site_sk#75] +Right keys [1]: [web_site_sk#87] Join condition: None (92) Project [codegen id : 29] -Output [7]: [ws_item_sk#84, ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95, web_site_id#100] -Input [9]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95, web_site_sk#99, web_site_id#100] +Output [7]: [ws_item_sk#74, ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84, web_site_id#88] +Input [9]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84, web_site_sk#87, web_site_id#88] (93) ReusedExchange [Reuses operator id: 27] -Output [1]: [i_item_sk#102] +Output [1]: [i_item_sk#89] (94) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_item_sk#84] -Right keys [1]: [i_item_sk#102] +Left keys [1]: [ws_item_sk#74] +Right keys [1]: [i_item_sk#89] Join condition: None (95) Project [codegen id : 29] -Output [6]: [ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95, web_site_id#100] -Input [8]: [ws_item_sk#84, ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95, web_site_id#100, i_item_sk#102] +Output [6]: [ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84, web_site_id#88] +Input [8]: [ws_item_sk#74, ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84, web_site_id#88, i_item_sk#89] (96) ReusedExchange [Reuses operator id: 34] -Output [1]: [p_promo_sk#103] +Output [1]: [p_promo_sk#90] (97) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_promo_sk#86] -Right keys [1]: [p_promo_sk#103] +Left keys [1]: [ws_promo_sk#76] +Right keys [1]: [p_promo_sk#90] Join condition: None (98) Project [codegen id : 29] -Output [5]: [ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95, web_site_id#100] -Input [7]: [ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95, web_site_id#100, p_promo_sk#103] +Output [5]: [ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84, web_site_id#88] +Input [7]: [ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84, web_site_id#88, p_promo_sk#90] (99) HashAggregate [codegen id : 29] -Input [5]: [ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95, web_site_id#100] -Keys [1]: [web_site_id#100] -Functions [3]: [partial_sum(UnscaledValue(ws_ext_sales_price#88)), partial_sum(coalesce(cast(wr_return_amt#94 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ws_net_profit#89 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#95 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#104, sum#105, isEmpty#106, sum#107, isEmpty#108] -Results [6]: [web_site_id#100, sum#109, sum#110, isEmpty#111, sum#112, isEmpty#113] +Input [5]: [ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84, web_site_id#88] +Keys [1]: [web_site_id#88] +Functions [3]: [partial_sum(UnscaledValue(ws_ext_sales_price#78)), partial_sum(coalesce(cast(wr_return_amt#83 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ws_net_profit#79 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#84 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#91, sum#92, isEmpty#93, sum#94, isEmpty#95] +Results [6]: [web_site_id#88, sum#96, sum#97, isEmpty#98, sum#99, isEmpty#100] (100) Exchange -Input [6]: [web_site_id#100, sum#109, sum#110, isEmpty#111, sum#112, isEmpty#113] -Arguments: hashpartitioning(web_site_id#100, 5), ENSURE_REQUIREMENTS, [id=#114] +Input [6]: [web_site_id#88, sum#96, sum#97, isEmpty#98, sum#99, isEmpty#100] +Arguments: hashpartitioning(web_site_id#88, 5), ENSURE_REQUIREMENTS, [plan_id=14] (101) HashAggregate [codegen id : 30] -Input [6]: [web_site_id#100, sum#109, sum#110, isEmpty#111, sum#112, isEmpty#113] -Keys [1]: [web_site_id#100] -Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#88)), sum(coalesce(cast(wr_return_amt#94 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ws_net_profit#89 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#95 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#88))#115, sum(coalesce(cast(wr_return_amt#94 as decimal(12,2)), 0.00))#116, sum(CheckOverflow((promote_precision(cast(ws_net_profit#89 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#95 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#117] -Results [5]: [MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#88))#115,17,2) AS sales#118, sum(coalesce(cast(wr_return_amt#94 as decimal(12,2)), 0.00))#116 AS returns#119, sum(CheckOverflow((promote_precision(cast(ws_net_profit#89 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#95 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#117 AS profit#120, web channel AS channel#121, concat(web_site, web_site_id#100) AS id#122] +Input [6]: [web_site_id#88, sum#96, sum#97, isEmpty#98, sum#99, isEmpty#100] +Keys [1]: [web_site_id#88] +Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#78)), sum(coalesce(cast(wr_return_amt#83 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ws_net_profit#79 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#84 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#78))#101, sum(coalesce(cast(wr_return_amt#83 as decimal(12,2)), 0.00))#102, sum(CheckOverflow((promote_precision(cast(ws_net_profit#79 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#84 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#103] +Results [5]: [MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#78))#101,17,2) AS sales#104, sum(coalesce(cast(wr_return_amt#83 as decimal(12,2)), 0.00))#102 AS returns#105, sum(CheckOverflow((promote_precision(cast(ws_net_profit#79 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#84 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#103 AS profit#106, web channel AS channel#107, concat(web_site, web_site_id#88) AS id#108] (102) Union (103) Expand [codegen id : 31] -Input [5]: [sales#40, returns#41, profit#42, channel#43, id#44] -Arguments: [[sales#40, returns#41, profit#42, channel#43, id#44, 0], [sales#40, returns#41, profit#42, channel#43, null, 1], [sales#40, returns#41, profit#42, null, null, 3]], [sales#40, returns#41, profit#42, channel#123, id#124, spark_grouping_id#125] +Input [5]: [sales#34, returns#35, profit#36, channel#37, id#38] +Arguments: [[sales#34, returns#35, profit#36, channel#37, id#38, 0], [sales#34, returns#35, profit#36, channel#37, null, 1], [sales#34, returns#35, profit#36, null, null, 3]], [sales#34, returns#35, profit#36, channel#109, id#110, spark_grouping_id#111] (104) HashAggregate [codegen id : 31] -Input [6]: [sales#40, returns#41, profit#42, channel#123, id#124, spark_grouping_id#125] -Keys [3]: [channel#123, id#124, spark_grouping_id#125] -Functions [3]: [partial_sum(sales#40), partial_sum(returns#41), partial_sum(profit#42)] -Aggregate Attributes [6]: [sum#126, isEmpty#127, sum#128, isEmpty#129, sum#130, isEmpty#131] -Results [9]: [channel#123, id#124, spark_grouping_id#125, sum#132, isEmpty#133, sum#134, isEmpty#135, sum#136, isEmpty#137] +Input [6]: [sales#34, returns#35, profit#36, channel#109, id#110, spark_grouping_id#111] +Keys [3]: [channel#109, id#110, spark_grouping_id#111] +Functions [3]: [partial_sum(sales#34), partial_sum(returns#35), partial_sum(profit#36)] +Aggregate Attributes [6]: [sum#112, isEmpty#113, sum#114, isEmpty#115, sum#116, isEmpty#117] +Results [9]: [channel#109, id#110, spark_grouping_id#111, sum#118, isEmpty#119, sum#120, isEmpty#121, sum#122, isEmpty#123] (105) Exchange -Input [9]: [channel#123, id#124, spark_grouping_id#125, sum#132, isEmpty#133, sum#134, isEmpty#135, sum#136, isEmpty#137] -Arguments: hashpartitioning(channel#123, id#124, spark_grouping_id#125, 5), ENSURE_REQUIREMENTS, [id=#138] +Input [9]: [channel#109, id#110, spark_grouping_id#111, sum#118, isEmpty#119, sum#120, isEmpty#121, sum#122, isEmpty#123] +Arguments: hashpartitioning(channel#109, id#110, spark_grouping_id#111, 5), ENSURE_REQUIREMENTS, [plan_id=15] (106) HashAggregate [codegen id : 32] -Input [9]: [channel#123, id#124, spark_grouping_id#125, sum#132, isEmpty#133, sum#134, isEmpty#135, sum#136, isEmpty#137] -Keys [3]: [channel#123, id#124, spark_grouping_id#125] -Functions [3]: [sum(sales#40), sum(returns#41), sum(profit#42)] -Aggregate Attributes [3]: [sum(sales#40)#139, sum(returns#41)#140, sum(profit#42)#141] -Results [5]: [channel#123, id#124, sum(sales#40)#139 AS sales#142, sum(returns#41)#140 AS returns#143, sum(profit#42)#141 AS profit#144] +Input [9]: [channel#109, id#110, spark_grouping_id#111, sum#118, isEmpty#119, sum#120, isEmpty#121, sum#122, isEmpty#123] +Keys [3]: [channel#109, id#110, spark_grouping_id#111] +Functions [3]: [sum(sales#34), sum(returns#35), sum(profit#36)] +Aggregate Attributes [3]: [sum(sales#34)#124, sum(returns#35)#125, sum(profit#36)#126] +Results [5]: [channel#109, id#110, sum(sales#34)#124 AS sales#127, sum(returns#35)#125 AS returns#128, sum(profit#36)#126 AS profit#129] (107) TakeOrderedAndProject -Input [5]: [channel#123, id#124, sales#142, returns#143, profit#144] -Arguments: 100, [channel#123 ASC NULLS FIRST, id#124 ASC NULLS FIRST], [channel#123, id#124, sales#142, returns#143, profit#144] +Input [5]: [channel#109, id#110, sales#127, returns#128, profit#129] +Arguments: 100, [channel#109 ASC NULLS FIRST, id#110 ASC NULLS FIRST], [channel#109, id#110, sales#127, returns#128, profit#129] ===== Subqueries ===== @@ -602,29 +602,29 @@ BroadcastExchange (112) (108) Scan parquet default.date_dim -Output [2]: [d_date_sk#16, d_date#145] +Output [2]: [d_date_sk#14, d_date#130] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-08-23), LessThanOrEqual(d_date,2000-09-22), IsNotNull(d_date_sk)] ReadSchema: struct (109) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#16, d_date#145] +Input [2]: [d_date_sk#14, d_date#130] (110) Filter [codegen id : 1] -Input [2]: [d_date_sk#16, d_date#145] -Condition : (((isnotnull(d_date#145) AND (d_date#145 >= 2000-08-23)) AND (d_date#145 <= 2000-09-22)) AND isnotnull(d_date_sk#16)) +Input [2]: [d_date_sk#14, d_date#130] +Condition : (((isnotnull(d_date#130) AND (d_date#130 >= 2000-08-23)) AND (d_date#130 <= 2000-09-22)) AND isnotnull(d_date_sk#14)) (111) Project [codegen id : 1] -Output [1]: [d_date_sk#16] -Input [2]: [d_date_sk#16, d_date#145] +Output [1]: [d_date_sk#14] +Input [2]: [d_date_sk#14, d_date#130] (112) BroadcastExchange -Input [1]: [d_date_sk#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#146] +Input [1]: [d_date_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=16] -Subquery:2 Hosting operator id = 40 Hosting Expression = cs_sold_date_sk#51 IN dynamicpruning#8 +Subquery:2 Hosting operator id = 40 Hosting Expression = cs_sold_date_sk#45 IN dynamicpruning#8 -Subquery:3 Hosting operator id = 71 Hosting Expression = ws_sold_date_sk#90 IN dynamicpruning#8 +Subquery:3 Hosting operator id = 71 Hosting Expression = ws_sold_date_sk#80 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q81.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q81.sf100/explain.txt index 288df2457edf2..d37c984980d09 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q81.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q81.sf100/explain.txt @@ -88,7 +88,7 @@ Condition : ((isnotnull(ca_state#14) AND (ca_state#14 = GA)) AND isnotnull(ca_ad (7) BroadcastExchange Input [12]: [ca_address_sk#7, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 2] Left keys [1]: [c_current_addr_sk#3] @@ -101,228 +101,228 @@ Input [18]: [c_customer_sk#1, c_customer_id#2, c_current_addr_sk#3, c_salutation (10) Exchange Input [16]: [c_customer_sk#1, c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18] -Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#20] +Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 3] Input [16]: [c_customer_sk#1, c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18] Arguments: [c_customer_sk#1 ASC NULLS FIRST], false, 0 (12) Scan parquet default.catalog_returns -Output [4]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23, cr_returned_date_sk#24] +Output [4]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21, cr_returned_date_sk#22] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cr_returned_date_sk#24), dynamicpruningexpression(cr_returned_date_sk#24 IN dynamicpruning#25)] +PartitionFilters: [isnotnull(cr_returned_date_sk#22), dynamicpruningexpression(cr_returned_date_sk#22 IN dynamicpruning#23)] PushedFilters: [IsNotNull(cr_returning_addr_sk), IsNotNull(cr_returning_customer_sk)] ReadSchema: struct (13) ColumnarToRow [codegen id : 5] -Input [4]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23, cr_returned_date_sk#24] +Input [4]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21, cr_returned_date_sk#22] (14) Filter [codegen id : 5] -Input [4]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23, cr_returned_date_sk#24] -Condition : (isnotnull(cr_returning_addr_sk#22) AND isnotnull(cr_returning_customer_sk#21)) +Input [4]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21, cr_returned_date_sk#22] +Condition : (isnotnull(cr_returning_addr_sk#20) AND isnotnull(cr_returning_customer_sk#19)) (15) ReusedExchange [Reuses operator id: 62] -Output [1]: [d_date_sk#26] +Output [1]: [d_date_sk#24] (16) BroadcastHashJoin [codegen id : 5] -Left keys [1]: [cr_returned_date_sk#24] -Right keys [1]: [d_date_sk#26] +Left keys [1]: [cr_returned_date_sk#22] +Right keys [1]: [d_date_sk#24] Join condition: None (17) Project [codegen id : 5] -Output [3]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23] -Input [5]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23, cr_returned_date_sk#24, d_date_sk#26] +Output [3]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21] +Input [5]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21, cr_returned_date_sk#22, d_date_sk#24] (18) Exchange -Input [3]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23] -Arguments: hashpartitioning(cr_returning_addr_sk#22, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [3]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21] +Arguments: hashpartitioning(cr_returning_addr_sk#20, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 6] -Input [3]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23] -Arguments: [cr_returning_addr_sk#22 ASC NULLS FIRST], false, 0 +Input [3]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21] +Arguments: [cr_returning_addr_sk#20 ASC NULLS FIRST], false, 0 (20) Scan parquet default.customer_address -Output [2]: [ca_address_sk#28, ca_state#29] +Output [2]: [ca_address_sk#25, ca_state#26] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_state)] ReadSchema: struct (21) ColumnarToRow [codegen id : 7] -Input [2]: [ca_address_sk#28, ca_state#29] +Input [2]: [ca_address_sk#25, ca_state#26] (22) Filter [codegen id : 7] -Input [2]: [ca_address_sk#28, ca_state#29] -Condition : (isnotnull(ca_address_sk#28) AND isnotnull(ca_state#29)) +Input [2]: [ca_address_sk#25, ca_state#26] +Condition : (isnotnull(ca_address_sk#25) AND isnotnull(ca_state#26)) (23) Exchange -Input [2]: [ca_address_sk#28, ca_state#29] -Arguments: hashpartitioning(ca_address_sk#28, 5), ENSURE_REQUIREMENTS, [id=#30] +Input [2]: [ca_address_sk#25, ca_state#26] +Arguments: hashpartitioning(ca_address_sk#25, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 8] -Input [2]: [ca_address_sk#28, ca_state#29] -Arguments: [ca_address_sk#28 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#25, ca_state#26] +Arguments: [ca_address_sk#25 ASC NULLS FIRST], false, 0 (25) SortMergeJoin [codegen id : 9] -Left keys [1]: [cr_returning_addr_sk#22] -Right keys [1]: [ca_address_sk#28] +Left keys [1]: [cr_returning_addr_sk#20] +Right keys [1]: [ca_address_sk#25] Join condition: None (26) Project [codegen id : 9] -Output [3]: [cr_returning_customer_sk#21, cr_return_amt_inc_tax#23, ca_state#29] -Input [5]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23, ca_address_sk#28, ca_state#29] +Output [3]: [cr_returning_customer_sk#19, cr_return_amt_inc_tax#21, ca_state#26] +Input [5]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21, ca_address_sk#25, ca_state#26] (27) HashAggregate [codegen id : 9] -Input [3]: [cr_returning_customer_sk#21, cr_return_amt_inc_tax#23, ca_state#29] -Keys [2]: [cr_returning_customer_sk#21, ca_state#29] -Functions [1]: [partial_sum(UnscaledValue(cr_return_amt_inc_tax#23))] -Aggregate Attributes [1]: [sum#31] -Results [3]: [cr_returning_customer_sk#21, ca_state#29, sum#32] +Input [3]: [cr_returning_customer_sk#19, cr_return_amt_inc_tax#21, ca_state#26] +Keys [2]: [cr_returning_customer_sk#19, ca_state#26] +Functions [1]: [partial_sum(UnscaledValue(cr_return_amt_inc_tax#21))] +Aggregate Attributes [1]: [sum#27] +Results [3]: [cr_returning_customer_sk#19, ca_state#26, sum#28] (28) Exchange -Input [3]: [cr_returning_customer_sk#21, ca_state#29, sum#32] -Arguments: hashpartitioning(cr_returning_customer_sk#21, ca_state#29, 5), ENSURE_REQUIREMENTS, [id=#33] +Input [3]: [cr_returning_customer_sk#19, ca_state#26, sum#28] +Arguments: hashpartitioning(cr_returning_customer_sk#19, ca_state#26, 5), ENSURE_REQUIREMENTS, [plan_id=5] (29) HashAggregate [codegen id : 10] -Input [3]: [cr_returning_customer_sk#21, ca_state#29, sum#32] -Keys [2]: [cr_returning_customer_sk#21, ca_state#29] -Functions [1]: [sum(UnscaledValue(cr_return_amt_inc_tax#23))] -Aggregate Attributes [1]: [sum(UnscaledValue(cr_return_amt_inc_tax#23))#34] -Results [3]: [cr_returning_customer_sk#21 AS ctr_customer_sk#35, ca_state#29 AS ctr_state#36, MakeDecimal(sum(UnscaledValue(cr_return_amt_inc_tax#23))#34,17,2) AS ctr_total_return#37] +Input [3]: [cr_returning_customer_sk#19, ca_state#26, sum#28] +Keys [2]: [cr_returning_customer_sk#19, ca_state#26] +Functions [1]: [sum(UnscaledValue(cr_return_amt_inc_tax#21))] +Aggregate Attributes [1]: [sum(UnscaledValue(cr_return_amt_inc_tax#21))#29] +Results [3]: [cr_returning_customer_sk#19 AS ctr_customer_sk#30, ca_state#26 AS ctr_state#31, MakeDecimal(sum(UnscaledValue(cr_return_amt_inc_tax#21))#29,17,2) AS ctr_total_return#32] (30) Filter [codegen id : 10] -Input [3]: [ctr_customer_sk#35, ctr_state#36, ctr_total_return#37] -Condition : isnotnull(ctr_total_return#37) +Input [3]: [ctr_customer_sk#30, ctr_state#31, ctr_total_return#32] +Condition : isnotnull(ctr_total_return#32) (31) Exchange -Input [3]: [ctr_customer_sk#35, ctr_state#36, ctr_total_return#37] -Arguments: hashpartitioning(ctr_customer_sk#35, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [3]: [ctr_customer_sk#30, ctr_state#31, ctr_total_return#32] +Arguments: hashpartitioning(ctr_customer_sk#30, 5), ENSURE_REQUIREMENTS, [plan_id=6] (32) Sort [codegen id : 11] -Input [3]: [ctr_customer_sk#35, ctr_state#36, ctr_total_return#37] -Arguments: [ctr_customer_sk#35 ASC NULLS FIRST], false, 0 +Input [3]: [ctr_customer_sk#30, ctr_state#31, ctr_total_return#32] +Arguments: [ctr_customer_sk#30 ASC NULLS FIRST], false, 0 (33) SortMergeJoin [codegen id : 20] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [ctr_customer_sk#35] +Right keys [1]: [ctr_customer_sk#30] Join condition: None (34) Project [codegen id : 20] -Output [17]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18, ctr_state#36, ctr_total_return#37] -Input [19]: [c_customer_sk#1, c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18, ctr_customer_sk#35, ctr_state#36, ctr_total_return#37] +Output [17]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18, ctr_state#31, ctr_total_return#32] +Input [19]: [c_customer_sk#1, c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18, ctr_customer_sk#30, ctr_state#31, ctr_total_return#32] (35) Scan parquet default.catalog_returns -Output [4]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23, cr_returned_date_sk#24] +Output [4]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21, cr_returned_date_sk#22] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cr_returned_date_sk#24), dynamicpruningexpression(cr_returned_date_sk#24 IN dynamicpruning#25)] +PartitionFilters: [isnotnull(cr_returned_date_sk#22), dynamicpruningexpression(cr_returned_date_sk#22 IN dynamicpruning#23)] PushedFilters: [IsNotNull(cr_returning_addr_sk)] ReadSchema: struct (36) ColumnarToRow [codegen id : 13] -Input [4]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23, cr_returned_date_sk#24] +Input [4]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21, cr_returned_date_sk#22] (37) Filter [codegen id : 13] -Input [4]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23, cr_returned_date_sk#24] -Condition : isnotnull(cr_returning_addr_sk#22) +Input [4]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21, cr_returned_date_sk#22] +Condition : isnotnull(cr_returning_addr_sk#20) (38) ReusedExchange [Reuses operator id: 62] -Output [1]: [d_date_sk#26] +Output [1]: [d_date_sk#24] (39) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [cr_returned_date_sk#24] -Right keys [1]: [d_date_sk#26] +Left keys [1]: [cr_returned_date_sk#22] +Right keys [1]: [d_date_sk#24] Join condition: None (40) Project [codegen id : 13] -Output [3]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23] -Input [5]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23, cr_returned_date_sk#24, d_date_sk#26] +Output [3]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21] +Input [5]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21, cr_returned_date_sk#22, d_date_sk#24] (41) Exchange -Input [3]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23] -Arguments: hashpartitioning(cr_returning_addr_sk#22, 5), ENSURE_REQUIREMENTS, [id=#39] +Input [3]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21] +Arguments: hashpartitioning(cr_returning_addr_sk#20, 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) Sort [codegen id : 14] -Input [3]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23] -Arguments: [cr_returning_addr_sk#22 ASC NULLS FIRST], false, 0 +Input [3]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21] +Arguments: [cr_returning_addr_sk#20 ASC NULLS FIRST], false, 0 (43) ReusedExchange [Reuses operator id: 23] -Output [2]: [ca_address_sk#28, ca_state#29] +Output [2]: [ca_address_sk#25, ca_state#26] (44) Sort [codegen id : 16] -Input [2]: [ca_address_sk#28, ca_state#29] -Arguments: [ca_address_sk#28 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#25, ca_state#26] +Arguments: [ca_address_sk#25 ASC NULLS FIRST], false, 0 (45) SortMergeJoin [codegen id : 17] -Left keys [1]: [cr_returning_addr_sk#22] -Right keys [1]: [ca_address_sk#28] +Left keys [1]: [cr_returning_addr_sk#20] +Right keys [1]: [ca_address_sk#25] Join condition: None (46) Project [codegen id : 17] -Output [3]: [cr_returning_customer_sk#21, cr_return_amt_inc_tax#23, ca_state#29] -Input [5]: [cr_returning_customer_sk#21, cr_returning_addr_sk#22, cr_return_amt_inc_tax#23, ca_address_sk#28, ca_state#29] +Output [3]: [cr_returning_customer_sk#19, cr_return_amt_inc_tax#21, ca_state#26] +Input [5]: [cr_returning_customer_sk#19, cr_returning_addr_sk#20, cr_return_amt_inc_tax#21, ca_address_sk#25, ca_state#26] (47) HashAggregate [codegen id : 17] -Input [3]: [cr_returning_customer_sk#21, cr_return_amt_inc_tax#23, ca_state#29] -Keys [2]: [cr_returning_customer_sk#21, ca_state#29] -Functions [1]: [partial_sum(UnscaledValue(cr_return_amt_inc_tax#23))] -Aggregate Attributes [1]: [sum#40] -Results [3]: [cr_returning_customer_sk#21, ca_state#29, sum#41] +Input [3]: [cr_returning_customer_sk#19, cr_return_amt_inc_tax#21, ca_state#26] +Keys [2]: [cr_returning_customer_sk#19, ca_state#26] +Functions [1]: [partial_sum(UnscaledValue(cr_return_amt_inc_tax#21))] +Aggregate Attributes [1]: [sum#33] +Results [3]: [cr_returning_customer_sk#19, ca_state#26, sum#34] (48) Exchange -Input [3]: [cr_returning_customer_sk#21, ca_state#29, sum#41] -Arguments: hashpartitioning(cr_returning_customer_sk#21, ca_state#29, 5), ENSURE_REQUIREMENTS, [id=#42] +Input [3]: [cr_returning_customer_sk#19, ca_state#26, sum#34] +Arguments: hashpartitioning(cr_returning_customer_sk#19, ca_state#26, 5), ENSURE_REQUIREMENTS, [plan_id=8] (49) HashAggregate [codegen id : 18] -Input [3]: [cr_returning_customer_sk#21, ca_state#29, sum#41] -Keys [2]: [cr_returning_customer_sk#21, ca_state#29] -Functions [1]: [sum(UnscaledValue(cr_return_amt_inc_tax#23))] -Aggregate Attributes [1]: [sum(UnscaledValue(cr_return_amt_inc_tax#23))#34] -Results [2]: [ca_state#29 AS ctr_state#36, MakeDecimal(sum(UnscaledValue(cr_return_amt_inc_tax#23))#34,17,2) AS ctr_total_return#37] +Input [3]: [cr_returning_customer_sk#19, ca_state#26, sum#34] +Keys [2]: [cr_returning_customer_sk#19, ca_state#26] +Functions [1]: [sum(UnscaledValue(cr_return_amt_inc_tax#21))] +Aggregate Attributes [1]: [sum(UnscaledValue(cr_return_amt_inc_tax#21))#29] +Results [2]: [ca_state#26 AS ctr_state#31, MakeDecimal(sum(UnscaledValue(cr_return_amt_inc_tax#21))#29,17,2) AS ctr_total_return#32] (50) HashAggregate [codegen id : 18] -Input [2]: [ctr_state#36, ctr_total_return#37] -Keys [1]: [ctr_state#36] -Functions [1]: [partial_avg(ctr_total_return#37)] -Aggregate Attributes [2]: [sum#43, count#44] -Results [3]: [ctr_state#36, sum#45, count#46] +Input [2]: [ctr_state#31, ctr_total_return#32] +Keys [1]: [ctr_state#31] +Functions [1]: [partial_avg(ctr_total_return#32)] +Aggregate Attributes [2]: [sum#35, count#36] +Results [3]: [ctr_state#31, sum#37, count#38] (51) Exchange -Input [3]: [ctr_state#36, sum#45, count#46] -Arguments: hashpartitioning(ctr_state#36, 5), ENSURE_REQUIREMENTS, [id=#47] +Input [3]: [ctr_state#31, sum#37, count#38] +Arguments: hashpartitioning(ctr_state#31, 5), ENSURE_REQUIREMENTS, [plan_id=9] (52) HashAggregate [codegen id : 19] -Input [3]: [ctr_state#36, sum#45, count#46] -Keys [1]: [ctr_state#36] -Functions [1]: [avg(ctr_total_return#37)] -Aggregate Attributes [1]: [avg(ctr_total_return#37)#48] -Results [2]: [CheckOverflow((promote_precision(avg(ctr_total_return#37)#48) * 1.200000), DecimalType(24,7)) AS (avg(ctr_total_return) * 1.2)#49, ctr_state#36 AS ctr_state#36#50] +Input [3]: [ctr_state#31, sum#37, count#38] +Keys [1]: [ctr_state#31] +Functions [1]: [avg(ctr_total_return#32)] +Aggregate Attributes [1]: [avg(ctr_total_return#32)#39] +Results [2]: [CheckOverflow((promote_precision(avg(ctr_total_return#32)#39) * 1.200000), DecimalType(24,7)) AS (avg(ctr_total_return) * 1.2)#40, ctr_state#31 AS ctr_state#31#41] (53) Filter [codegen id : 19] -Input [2]: [(avg(ctr_total_return) * 1.2)#49, ctr_state#36#50] -Condition : isnotnull((avg(ctr_total_return) * 1.2)#49) +Input [2]: [(avg(ctr_total_return) * 1.2)#40, ctr_state#31#41] +Condition : isnotnull((avg(ctr_total_return) * 1.2)#40) (54) BroadcastExchange -Input [2]: [(avg(ctr_total_return) * 1.2)#49, ctr_state#36#50] -Arguments: HashedRelationBroadcastMode(List(input[1, string, true]),false), [id=#51] +Input [2]: [(avg(ctr_total_return) * 1.2)#40, ctr_state#31#41] +Arguments: HashedRelationBroadcastMode(List(input[1, string, true]),false), [plan_id=10] (55) BroadcastHashJoin [codegen id : 20] -Left keys [1]: [ctr_state#36] -Right keys [1]: [ctr_state#36#50] -Join condition: (cast(ctr_total_return#37 as decimal(24,7)) > (avg(ctr_total_return) * 1.2)#49) +Left keys [1]: [ctr_state#31] +Right keys [1]: [ctr_state#31#41] +Join condition: (cast(ctr_total_return#32 as decimal(24,7)) > (avg(ctr_total_return) * 1.2)#40) (56) Project [codegen id : 20] -Output [16]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18, ctr_total_return#37] -Input [19]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18, ctr_state#36, ctr_total_return#37, (avg(ctr_total_return) * 1.2)#49, ctr_state#36#50] +Output [16]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18, ctr_total_return#32] +Input [19]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18, ctr_state#31, ctr_total_return#32, (avg(ctr_total_return) * 1.2)#40, ctr_state#31#41] (57) TakeOrderedAndProject -Input [16]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18, ctr_total_return#37] -Arguments: 100, [c_customer_id#2 ASC NULLS FIRST, c_salutation#4 ASC NULLS FIRST, c_first_name#5 ASC NULLS FIRST, c_last_name#6 ASC NULLS FIRST, ca_street_number#8 ASC NULLS FIRST, ca_street_name#9 ASC NULLS FIRST, ca_street_type#10 ASC NULLS FIRST, ca_suite_number#11 ASC NULLS FIRST, ca_city#12 ASC NULLS FIRST, ca_county#13 ASC NULLS FIRST, ca_state#14 ASC NULLS FIRST, ca_zip#15 ASC NULLS FIRST, ca_country#16 ASC NULLS FIRST, ca_gmt_offset#17 ASC NULLS FIRST, ca_location_type#18 ASC NULLS FIRST, ctr_total_return#37 ASC NULLS FIRST], [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18, ctr_total_return#37] +Input [16]: [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18, ctr_total_return#32] +Arguments: 100, [c_customer_id#2 ASC NULLS FIRST, c_salutation#4 ASC NULLS FIRST, c_first_name#5 ASC NULLS FIRST, c_last_name#6 ASC NULLS FIRST, ca_street_number#8 ASC NULLS FIRST, ca_street_name#9 ASC NULLS FIRST, ca_street_type#10 ASC NULLS FIRST, ca_suite_number#11 ASC NULLS FIRST, ca_city#12 ASC NULLS FIRST, ca_county#13 ASC NULLS FIRST, ca_state#14 ASC NULLS FIRST, ca_zip#15 ASC NULLS FIRST, ca_country#16 ASC NULLS FIRST, ca_gmt_offset#17 ASC NULLS FIRST, ca_location_type#18 ASC NULLS FIRST, ctr_total_return#32 ASC NULLS FIRST], [c_customer_id#2, c_salutation#4, c_first_name#5, c_last_name#6, ca_street_number#8, ca_street_name#9, ca_street_type#10, ca_suite_number#11, ca_city#12, ca_county#13, ca_state#14, ca_zip#15, ca_country#16, ca_gmt_offset#17, ca_location_type#18, ctr_total_return#32] ===== Subqueries ===== -Subquery:1 Hosting operator id = 12 Hosting Expression = cr_returned_date_sk#24 IN dynamicpruning#25 +Subquery:1 Hosting operator id = 12 Hosting Expression = cr_returned_date_sk#22 IN dynamicpruning#23 BroadcastExchange (62) +- * Project (61) +- * Filter (60) @@ -331,27 +331,27 @@ BroadcastExchange (62) (58) Scan parquet default.date_dim -Output [2]: [d_date_sk#26, d_year#52] +Output [2]: [d_date_sk#24, d_year#42] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (59) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#26, d_year#52] +Input [2]: [d_date_sk#24, d_year#42] (60) Filter [codegen id : 1] -Input [2]: [d_date_sk#26, d_year#52] -Condition : ((isnotnull(d_year#52) AND (d_year#52 = 2000)) AND isnotnull(d_date_sk#26)) +Input [2]: [d_date_sk#24, d_year#42] +Condition : ((isnotnull(d_year#42) AND (d_year#42 = 2000)) AND isnotnull(d_date_sk#24)) (61) Project [codegen id : 1] -Output [1]: [d_date_sk#26] -Input [2]: [d_date_sk#26, d_year#52] +Output [1]: [d_date_sk#24] +Input [2]: [d_date_sk#24, d_year#42] (62) BroadcastExchange -Input [1]: [d_date_sk#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#53] +Input [1]: [d_date_sk#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11] -Subquery:2 Hosting operator id = 35 Hosting Expression = cr_returned_date_sk#24 IN dynamicpruning#25 +Subquery:2 Hosting operator id = 35 Hosting Expression = cr_returned_date_sk#22 IN dynamicpruning#23 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q81/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q81/explain.txt index 91bd90224827a..7b23beda1cbd0 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q81/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q81/explain.txt @@ -92,7 +92,7 @@ Condition : (isnotnull(ca_address_sk#7) AND isnotnull(ca_state#8)) (10) BroadcastExchange Input [2]: [ca_address_sk#7, ca_state#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cr_returning_addr_sk#2] @@ -107,23 +107,23 @@ Input [5]: [cr_returning_customer_sk#1, cr_returning_addr_sk#2, cr_return_amt_in Input [3]: [cr_returning_customer_sk#1, cr_return_amt_inc_tax#3, ca_state#8] Keys [2]: [cr_returning_customer_sk#1, ca_state#8] Functions [1]: [partial_sum(UnscaledValue(cr_return_amt_inc_tax#3))] -Aggregate Attributes [1]: [sum#10] -Results [3]: [cr_returning_customer_sk#1, ca_state#8, sum#11] +Aggregate Attributes [1]: [sum#9] +Results [3]: [cr_returning_customer_sk#1, ca_state#8, sum#10] (14) Exchange -Input [3]: [cr_returning_customer_sk#1, ca_state#8, sum#11] -Arguments: hashpartitioning(cr_returning_customer_sk#1, ca_state#8, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [3]: [cr_returning_customer_sk#1, ca_state#8, sum#10] +Arguments: hashpartitioning(cr_returning_customer_sk#1, ca_state#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 11] -Input [3]: [cr_returning_customer_sk#1, ca_state#8, sum#11] +Input [3]: [cr_returning_customer_sk#1, ca_state#8, sum#10] Keys [2]: [cr_returning_customer_sk#1, ca_state#8] Functions [1]: [sum(UnscaledValue(cr_return_amt_inc_tax#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(cr_return_amt_inc_tax#3))#13] -Results [3]: [cr_returning_customer_sk#1 AS ctr_customer_sk#14, ca_state#8 AS ctr_state#15, MakeDecimal(sum(UnscaledValue(cr_return_amt_inc_tax#3))#13,17,2) AS ctr_total_return#16] +Aggregate Attributes [1]: [sum(UnscaledValue(cr_return_amt_inc_tax#3))#11] +Results [3]: [cr_returning_customer_sk#1 AS ctr_customer_sk#12, ca_state#8 AS ctr_state#13, MakeDecimal(sum(UnscaledValue(cr_return_amt_inc_tax#3))#11,17,2) AS ctr_total_return#14] (16) Filter [codegen id : 11] -Input [3]: [ctr_customer_sk#14, ctr_state#15, ctr_total_return#16] -Condition : isnotnull(ctr_total_return#16) +Input [3]: [ctr_customer_sk#12, ctr_state#13, ctr_total_return#14] +Condition : isnotnull(ctr_total_return#14) (17) Scan parquet default.catalog_returns Output [4]: [cr_returning_customer_sk#1, cr_returning_addr_sk#2, cr_return_amt_inc_tax#3, cr_returned_date_sk#4] @@ -168,112 +168,112 @@ Input [5]: [cr_returning_customer_sk#1, cr_returning_addr_sk#2, cr_return_amt_in Input [3]: [cr_returning_customer_sk#1, cr_return_amt_inc_tax#3, ca_state#8] Keys [2]: [cr_returning_customer_sk#1, ca_state#8] Functions [1]: [partial_sum(UnscaledValue(cr_return_amt_inc_tax#3))] -Aggregate Attributes [1]: [sum#17] -Results [3]: [cr_returning_customer_sk#1, ca_state#8, sum#18] +Aggregate Attributes [1]: [sum#15] +Results [3]: [cr_returning_customer_sk#1, ca_state#8, sum#16] (27) Exchange -Input [3]: [cr_returning_customer_sk#1, ca_state#8, sum#18] -Arguments: hashpartitioning(cr_returning_customer_sk#1, ca_state#8, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [3]: [cr_returning_customer_sk#1, ca_state#8, sum#16] +Arguments: hashpartitioning(cr_returning_customer_sk#1, ca_state#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (28) HashAggregate [codegen id : 7] -Input [3]: [cr_returning_customer_sk#1, ca_state#8, sum#18] +Input [3]: [cr_returning_customer_sk#1, ca_state#8, sum#16] Keys [2]: [cr_returning_customer_sk#1, ca_state#8] Functions [1]: [sum(UnscaledValue(cr_return_amt_inc_tax#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(cr_return_amt_inc_tax#3))#13] -Results [2]: [ca_state#8 AS ctr_state#15, MakeDecimal(sum(UnscaledValue(cr_return_amt_inc_tax#3))#13,17,2) AS ctr_total_return#16] +Aggregate Attributes [1]: [sum(UnscaledValue(cr_return_amt_inc_tax#3))#11] +Results [2]: [ca_state#8 AS ctr_state#13, MakeDecimal(sum(UnscaledValue(cr_return_amt_inc_tax#3))#11,17,2) AS ctr_total_return#14] (29) HashAggregate [codegen id : 7] -Input [2]: [ctr_state#15, ctr_total_return#16] -Keys [1]: [ctr_state#15] -Functions [1]: [partial_avg(ctr_total_return#16)] -Aggregate Attributes [2]: [sum#20, count#21] -Results [3]: [ctr_state#15, sum#22, count#23] +Input [2]: [ctr_state#13, ctr_total_return#14] +Keys [1]: [ctr_state#13] +Functions [1]: [partial_avg(ctr_total_return#14)] +Aggregate Attributes [2]: [sum#17, count#18] +Results [3]: [ctr_state#13, sum#19, count#20] (30) Exchange -Input [3]: [ctr_state#15, sum#22, count#23] -Arguments: hashpartitioning(ctr_state#15, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [3]: [ctr_state#13, sum#19, count#20] +Arguments: hashpartitioning(ctr_state#13, 5), ENSURE_REQUIREMENTS, [plan_id=4] (31) HashAggregate [codegen id : 8] -Input [3]: [ctr_state#15, sum#22, count#23] -Keys [1]: [ctr_state#15] -Functions [1]: [avg(ctr_total_return#16)] -Aggregate Attributes [1]: [avg(ctr_total_return#16)#25] -Results [2]: [CheckOverflow((promote_precision(avg(ctr_total_return#16)#25) * 1.200000), DecimalType(24,7)) AS (avg(ctr_total_return) * 1.2)#26, ctr_state#15 AS ctr_state#15#27] +Input [3]: [ctr_state#13, sum#19, count#20] +Keys [1]: [ctr_state#13] +Functions [1]: [avg(ctr_total_return#14)] +Aggregate Attributes [1]: [avg(ctr_total_return#14)#21] +Results [2]: [CheckOverflow((promote_precision(avg(ctr_total_return#14)#21) * 1.200000), DecimalType(24,7)) AS (avg(ctr_total_return) * 1.2)#22, ctr_state#13 AS ctr_state#13#23] (32) Filter [codegen id : 8] -Input [2]: [(avg(ctr_total_return) * 1.2)#26, ctr_state#15#27] -Condition : isnotnull((avg(ctr_total_return) * 1.2)#26) +Input [2]: [(avg(ctr_total_return) * 1.2)#22, ctr_state#13#23] +Condition : isnotnull((avg(ctr_total_return) * 1.2)#22) (33) BroadcastExchange -Input [2]: [(avg(ctr_total_return) * 1.2)#26, ctr_state#15#27] -Arguments: HashedRelationBroadcastMode(List(input[1, string, true]),false), [id=#28] +Input [2]: [(avg(ctr_total_return) * 1.2)#22, ctr_state#13#23] +Arguments: HashedRelationBroadcastMode(List(input[1, string, true]),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [ctr_state#15] -Right keys [1]: [ctr_state#15#27] -Join condition: (cast(ctr_total_return#16 as decimal(24,7)) > (avg(ctr_total_return) * 1.2)#26) +Left keys [1]: [ctr_state#13] +Right keys [1]: [ctr_state#13#23] +Join condition: (cast(ctr_total_return#14 as decimal(24,7)) > (avg(ctr_total_return) * 1.2)#22) (35) Project [codegen id : 11] -Output [2]: [ctr_customer_sk#14, ctr_total_return#16] -Input [5]: [ctr_customer_sk#14, ctr_state#15, ctr_total_return#16, (avg(ctr_total_return) * 1.2)#26, ctr_state#15#27] +Output [2]: [ctr_customer_sk#12, ctr_total_return#14] +Input [5]: [ctr_customer_sk#12, ctr_state#13, ctr_total_return#14, (avg(ctr_total_return) * 1.2)#22, ctr_state#13#23] (36) Scan parquet default.customer -Output [6]: [c_customer_sk#29, c_customer_id#30, c_current_addr_sk#31, c_salutation#32, c_first_name#33, c_last_name#34] +Output [6]: [c_customer_sk#24, c_customer_id#25, c_current_addr_sk#26, c_salutation#27, c_first_name#28, c_last_name#29] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 9] -Input [6]: [c_customer_sk#29, c_customer_id#30, c_current_addr_sk#31, c_salutation#32, c_first_name#33, c_last_name#34] +Input [6]: [c_customer_sk#24, c_customer_id#25, c_current_addr_sk#26, c_salutation#27, c_first_name#28, c_last_name#29] (38) Filter [codegen id : 9] -Input [6]: [c_customer_sk#29, c_customer_id#30, c_current_addr_sk#31, c_salutation#32, c_first_name#33, c_last_name#34] -Condition : (isnotnull(c_customer_sk#29) AND isnotnull(c_current_addr_sk#31)) +Input [6]: [c_customer_sk#24, c_customer_id#25, c_current_addr_sk#26, c_salutation#27, c_first_name#28, c_last_name#29] +Condition : (isnotnull(c_customer_sk#24) AND isnotnull(c_current_addr_sk#26)) (39) BroadcastExchange -Input [6]: [c_customer_sk#29, c_customer_id#30, c_current_addr_sk#31, c_salutation#32, c_first_name#33, c_last_name#34] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#35] +Input [6]: [c_customer_sk#24, c_customer_id#25, c_current_addr_sk#26, c_salutation#27, c_first_name#28, c_last_name#29] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] (40) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [ctr_customer_sk#14] -Right keys [1]: [c_customer_sk#29] +Left keys [1]: [ctr_customer_sk#12] +Right keys [1]: [c_customer_sk#24] Join condition: None (41) Project [codegen id : 11] -Output [6]: [ctr_total_return#16, c_customer_id#30, c_current_addr_sk#31, c_salutation#32, c_first_name#33, c_last_name#34] -Input [8]: [ctr_customer_sk#14, ctr_total_return#16, c_customer_sk#29, c_customer_id#30, c_current_addr_sk#31, c_salutation#32, c_first_name#33, c_last_name#34] +Output [6]: [ctr_total_return#14, c_customer_id#25, c_current_addr_sk#26, c_salutation#27, c_first_name#28, c_last_name#29] +Input [8]: [ctr_customer_sk#12, ctr_total_return#14, c_customer_sk#24, c_customer_id#25, c_current_addr_sk#26, c_salutation#27, c_first_name#28, c_last_name#29] (42) Scan parquet default.customer_address -Output [12]: [ca_address_sk#36, ca_street_number#37, ca_street_name#38, ca_street_type#39, ca_suite_number#40, ca_city#41, ca_county#42, ca_state#43, ca_zip#44, ca_country#45, ca_gmt_offset#46, ca_location_type#47] +Output [12]: [ca_address_sk#30, ca_street_number#31, ca_street_name#32, ca_street_type#33, ca_suite_number#34, ca_city#35, ca_county#36, ca_state#37, ca_zip#38, ca_country#39, ca_gmt_offset#40, ca_location_type#41] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,GA), IsNotNull(ca_address_sk)] ReadSchema: struct (43) ColumnarToRow [codegen id : 10] -Input [12]: [ca_address_sk#36, ca_street_number#37, ca_street_name#38, ca_street_type#39, ca_suite_number#40, ca_city#41, ca_county#42, ca_state#43, ca_zip#44, ca_country#45, ca_gmt_offset#46, ca_location_type#47] +Input [12]: [ca_address_sk#30, ca_street_number#31, ca_street_name#32, ca_street_type#33, ca_suite_number#34, ca_city#35, ca_county#36, ca_state#37, ca_zip#38, ca_country#39, ca_gmt_offset#40, ca_location_type#41] (44) Filter [codegen id : 10] -Input [12]: [ca_address_sk#36, ca_street_number#37, ca_street_name#38, ca_street_type#39, ca_suite_number#40, ca_city#41, ca_county#42, ca_state#43, ca_zip#44, ca_country#45, ca_gmt_offset#46, ca_location_type#47] -Condition : ((isnotnull(ca_state#43) AND (ca_state#43 = GA)) AND isnotnull(ca_address_sk#36)) +Input [12]: [ca_address_sk#30, ca_street_number#31, ca_street_name#32, ca_street_type#33, ca_suite_number#34, ca_city#35, ca_county#36, ca_state#37, ca_zip#38, ca_country#39, ca_gmt_offset#40, ca_location_type#41] +Condition : ((isnotnull(ca_state#37) AND (ca_state#37 = GA)) AND isnotnull(ca_address_sk#30)) (45) BroadcastExchange -Input [12]: [ca_address_sk#36, ca_street_number#37, ca_street_name#38, ca_street_type#39, ca_suite_number#40, ca_city#41, ca_county#42, ca_state#43, ca_zip#44, ca_country#45, ca_gmt_offset#46, ca_location_type#47] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#48] +Input [12]: [ca_address_sk#30, ca_street_number#31, ca_street_name#32, ca_street_type#33, ca_suite_number#34, ca_city#35, ca_county#36, ca_state#37, ca_zip#38, ca_country#39, ca_gmt_offset#40, ca_location_type#41] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (46) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [c_current_addr_sk#31] -Right keys [1]: [ca_address_sk#36] +Left keys [1]: [c_current_addr_sk#26] +Right keys [1]: [ca_address_sk#30] Join condition: None (47) Project [codegen id : 11] -Output [16]: [c_customer_id#30, c_salutation#32, c_first_name#33, c_last_name#34, ca_street_number#37, ca_street_name#38, ca_street_type#39, ca_suite_number#40, ca_city#41, ca_county#42, ca_state#43, ca_zip#44, ca_country#45, ca_gmt_offset#46, ca_location_type#47, ctr_total_return#16] -Input [18]: [ctr_total_return#16, c_customer_id#30, c_current_addr_sk#31, c_salutation#32, c_first_name#33, c_last_name#34, ca_address_sk#36, ca_street_number#37, ca_street_name#38, ca_street_type#39, ca_suite_number#40, ca_city#41, ca_county#42, ca_state#43, ca_zip#44, ca_country#45, ca_gmt_offset#46, ca_location_type#47] +Output [16]: [c_customer_id#25, c_salutation#27, c_first_name#28, c_last_name#29, ca_street_number#31, ca_street_name#32, ca_street_type#33, ca_suite_number#34, ca_city#35, ca_county#36, ca_state#37, ca_zip#38, ca_country#39, ca_gmt_offset#40, ca_location_type#41, ctr_total_return#14] +Input [18]: [ctr_total_return#14, c_customer_id#25, c_current_addr_sk#26, c_salutation#27, c_first_name#28, c_last_name#29, ca_address_sk#30, ca_street_number#31, ca_street_name#32, ca_street_type#33, ca_suite_number#34, ca_city#35, ca_county#36, ca_state#37, ca_zip#38, ca_country#39, ca_gmt_offset#40, ca_location_type#41] (48) TakeOrderedAndProject -Input [16]: [c_customer_id#30, c_salutation#32, c_first_name#33, c_last_name#34, ca_street_number#37, ca_street_name#38, ca_street_type#39, ca_suite_number#40, ca_city#41, ca_county#42, ca_state#43, ca_zip#44, ca_country#45, ca_gmt_offset#46, ca_location_type#47, ctr_total_return#16] -Arguments: 100, [c_customer_id#30 ASC NULLS FIRST, c_salutation#32 ASC NULLS FIRST, c_first_name#33 ASC NULLS FIRST, c_last_name#34 ASC NULLS FIRST, ca_street_number#37 ASC NULLS FIRST, ca_street_name#38 ASC NULLS FIRST, ca_street_type#39 ASC NULLS FIRST, ca_suite_number#40 ASC NULLS FIRST, ca_city#41 ASC NULLS FIRST, ca_county#42 ASC NULLS FIRST, ca_state#43 ASC NULLS FIRST, ca_zip#44 ASC NULLS FIRST, ca_country#45 ASC NULLS FIRST, ca_gmt_offset#46 ASC NULLS FIRST, ca_location_type#47 ASC NULLS FIRST, ctr_total_return#16 ASC NULLS FIRST], [c_customer_id#30, c_salutation#32, c_first_name#33, c_last_name#34, ca_street_number#37, ca_street_name#38, ca_street_type#39, ca_suite_number#40, ca_city#41, ca_county#42, ca_state#43, ca_zip#44, ca_country#45, ca_gmt_offset#46, ca_location_type#47, ctr_total_return#16] +Input [16]: [c_customer_id#25, c_salutation#27, c_first_name#28, c_last_name#29, ca_street_number#31, ca_street_name#32, ca_street_type#33, ca_suite_number#34, ca_city#35, ca_county#36, ca_state#37, ca_zip#38, ca_country#39, ca_gmt_offset#40, ca_location_type#41, ctr_total_return#14] +Arguments: 100, [c_customer_id#25 ASC NULLS FIRST, c_salutation#27 ASC NULLS FIRST, c_first_name#28 ASC NULLS FIRST, c_last_name#29 ASC NULLS FIRST, ca_street_number#31 ASC NULLS FIRST, ca_street_name#32 ASC NULLS FIRST, ca_street_type#33 ASC NULLS FIRST, ca_suite_number#34 ASC NULLS FIRST, ca_city#35 ASC NULLS FIRST, ca_county#36 ASC NULLS FIRST, ca_state#37 ASC NULLS FIRST, ca_zip#38 ASC NULLS FIRST, ca_country#39 ASC NULLS FIRST, ca_gmt_offset#40 ASC NULLS FIRST, ca_location_type#41 ASC NULLS FIRST, ctr_total_return#14 ASC NULLS FIRST], [c_customer_id#25, c_salutation#27, c_first_name#28, c_last_name#29, ca_street_number#31, ca_street_name#32, ca_street_type#33, ca_suite_number#34, ca_city#35, ca_county#36, ca_state#37, ca_zip#38, ca_country#39, ca_gmt_offset#40, ca_location_type#41, ctr_total_return#14] ===== Subqueries ===== @@ -286,26 +286,26 @@ BroadcastExchange (53) (49) Scan parquet default.date_dim -Output [2]: [d_date_sk#6, d_year#49] +Output [2]: [d_date_sk#6, d_year#42] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (50) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#6, d_year#49] +Input [2]: [d_date_sk#6, d_year#42] (51) Filter [codegen id : 1] -Input [2]: [d_date_sk#6, d_year#49] -Condition : ((isnotnull(d_year#49) AND (d_year#49 = 2000)) AND isnotnull(d_date_sk#6)) +Input [2]: [d_date_sk#6, d_year#42] +Condition : ((isnotnull(d_year#42) AND (d_year#42 = 2000)) AND isnotnull(d_date_sk#6)) (52) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [2]: [d_date_sk#6, d_year#49] +Input [2]: [d_date_sk#6, d_year#42] (53) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#50] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] Subquery:2 Hosting operator id = 17 Hosting Expression = cr_returned_date_sk#4 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q82.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q82.sf100/explain.txt index 1e0c78c7329c8..ab796ed189b9f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q82.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q82.sf100/explain.txt @@ -49,90 +49,90 @@ Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, i_manufa (5) BroadcastExchange Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#6] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.inventory -Output [3]: [inv_item_sk#7, inv_quantity_on_hand#8, inv_date_sk#9] +Output [3]: [inv_item_sk#6, inv_quantity_on_hand#7, inv_date_sk#8] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(inv_date_sk#9), dynamicpruningexpression(inv_date_sk#9 IN dynamicpruning#10)] +PartitionFilters: [isnotnull(inv_date_sk#8), dynamicpruningexpression(inv_date_sk#8 IN dynamicpruning#9)] PushedFilters: [IsNotNull(inv_quantity_on_hand), GreaterThanOrEqual(inv_quantity_on_hand,100), LessThanOrEqual(inv_quantity_on_hand,500), IsNotNull(inv_item_sk)] ReadSchema: struct (7) ColumnarToRow -Input [3]: [inv_item_sk#7, inv_quantity_on_hand#8, inv_date_sk#9] +Input [3]: [inv_item_sk#6, inv_quantity_on_hand#7, inv_date_sk#8] (8) Filter -Input [3]: [inv_item_sk#7, inv_quantity_on_hand#8, inv_date_sk#9] -Condition : (((isnotnull(inv_quantity_on_hand#8) AND (inv_quantity_on_hand#8 >= 100)) AND (inv_quantity_on_hand#8 <= 500)) AND isnotnull(inv_item_sk#7)) +Input [3]: [inv_item_sk#6, inv_quantity_on_hand#7, inv_date_sk#8] +Condition : (((isnotnull(inv_quantity_on_hand#7) AND (inv_quantity_on_hand#7 >= 100)) AND (inv_quantity_on_hand#7 <= 500)) AND isnotnull(inv_item_sk#6)) (9) Project -Output [2]: [inv_item_sk#7, inv_date_sk#9] -Input [3]: [inv_item_sk#7, inv_quantity_on_hand#8, inv_date_sk#9] +Output [2]: [inv_item_sk#6, inv_date_sk#8] +Input [3]: [inv_item_sk#6, inv_quantity_on_hand#7, inv_date_sk#8] (10) BroadcastHashJoin [codegen id : 3] Left keys [1]: [i_item_sk#1] -Right keys [1]: [inv_item_sk#7] +Right keys [1]: [inv_item_sk#6] Join condition: None (11) Project [codegen id : 3] -Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#9] -Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_item_sk#7, inv_date_sk#9] +Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#8] +Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_item_sk#6, inv_date_sk#8] (12) ReusedExchange [Reuses operator id: 33] -Output [1]: [d_date_sk#11] +Output [1]: [d_date_sk#10] (13) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [inv_date_sk#9] -Right keys [1]: [d_date_sk#11] +Left keys [1]: [inv_date_sk#8] +Right keys [1]: [d_date_sk#10] Join condition: None (14) Project [codegen id : 3] Output [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4] -Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#9, d_date_sk#11] +Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#8, d_date_sk#10] (15) Exchange Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4] -Arguments: hashpartitioning(i_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#12] +Arguments: hashpartitioning(i_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (16) Sort [codegen id : 4] Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4] Arguments: [i_item_sk#1 ASC NULLS FIRST], false, 0 (17) Scan parquet default.store_sales -Output [2]: [ss_item_sk#13, ss_sold_date_sk#14] +Output [2]: [ss_item_sk#11, ss_sold_date_sk#12] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (18) ColumnarToRow [codegen id : 5] -Input [2]: [ss_item_sk#13, ss_sold_date_sk#14] +Input [2]: [ss_item_sk#11, ss_sold_date_sk#12] (19) Filter [codegen id : 5] -Input [2]: [ss_item_sk#13, ss_sold_date_sk#14] -Condition : isnotnull(ss_item_sk#13) +Input [2]: [ss_item_sk#11, ss_sold_date_sk#12] +Condition : isnotnull(ss_item_sk#11) (20) Project [codegen id : 5] -Output [1]: [ss_item_sk#13] -Input [2]: [ss_item_sk#13, ss_sold_date_sk#14] +Output [1]: [ss_item_sk#11] +Input [2]: [ss_item_sk#11, ss_sold_date_sk#12] (21) Exchange -Input [1]: [ss_item_sk#13] -Arguments: hashpartitioning(ss_item_sk#13, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [1]: [ss_item_sk#11] +Arguments: hashpartitioning(ss_item_sk#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) Sort [codegen id : 6] -Input [1]: [ss_item_sk#13] -Arguments: [ss_item_sk#13 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#11] +Arguments: [ss_item_sk#11 ASC NULLS FIRST], false, 0 (23) SortMergeJoin [codegen id : 7] Left keys [1]: [i_item_sk#1] -Right keys [1]: [ss_item_sk#13] +Right keys [1]: [ss_item_sk#11] Join condition: None (24) Project [codegen id : 7] Output [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, ss_item_sk#13] +Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, ss_item_sk#11] (25) HashAggregate [codegen id : 7] Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] @@ -143,7 +143,7 @@ Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] (26) Exchange Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -Arguments: hashpartitioning(i_item_id#2, i_item_desc#3, i_current_price#4, 5), ENSURE_REQUIREMENTS, [id=#16] +Arguments: hashpartitioning(i_item_id#2, i_item_desc#3, i_current_price#4, 5), ENSURE_REQUIREMENTS, [plan_id=4] (27) HashAggregate [codegen id : 8] Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] @@ -158,7 +158,7 @@ Arguments: 100, [i_item_id#2 ASC NULLS FIRST], [i_item_id#2, i_item_desc#3, i_cu ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = inv_date_sk#9 IN dynamicpruning#10 +Subquery:1 Hosting operator id = 6 Hosting Expression = inv_date_sk#8 IN dynamicpruning#9 BroadcastExchange (33) +- * Project (32) +- * Filter (31) @@ -167,25 +167,25 @@ BroadcastExchange (33) (29) Scan parquet default.date_dim -Output [2]: [d_date_sk#11, d_date#17] +Output [2]: [d_date_sk#10, d_date#13] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-05-25), LessThanOrEqual(d_date,2000-07-24), IsNotNull(d_date_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#11, d_date#17] +Input [2]: [d_date_sk#10, d_date#13] (31) Filter [codegen id : 1] -Input [2]: [d_date_sk#11, d_date#17] -Condition : (((isnotnull(d_date#17) AND (d_date#17 >= 2000-05-25)) AND (d_date#17 <= 2000-07-24)) AND isnotnull(d_date_sk#11)) +Input [2]: [d_date_sk#10, d_date#13] +Condition : (((isnotnull(d_date#13) AND (d_date#13 >= 2000-05-25)) AND (d_date#13 <= 2000-07-24)) AND isnotnull(d_date_sk#10)) (32) Project [codegen id : 1] -Output [1]: [d_date_sk#11] -Input [2]: [d_date_sk#11, d_date#17] +Output [1]: [d_date_sk#10] +Input [2]: [d_date_sk#10, d_date#13] (33) BroadcastExchange -Input [1]: [d_date_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [1]: [d_date_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q82/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q82/explain.txt index 4e9ad2199c037..63519baec5dcd 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q82/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q82/explain.txt @@ -65,7 +65,7 @@ Input [3]: [inv_item_sk#6, inv_quantity_on_hand#7, inv_date_sk#8] (9) BroadcastExchange Input [2]: [inv_item_sk#6, inv_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 3] Left keys [1]: [i_item_sk#1] @@ -77,47 +77,47 @@ Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_dat Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_item_sk#6, inv_date_sk#8] (12) ReusedExchange [Reuses operator id: 30] -Output [1]: [d_date_sk#11] +Output [1]: [d_date_sk#10] (13) BroadcastHashJoin [codegen id : 3] Left keys [1]: [inv_date_sk#8] -Right keys [1]: [d_date_sk#11] +Right keys [1]: [d_date_sk#10] Join condition: None (14) Project [codegen id : 3] Output [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4] -Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#8, d_date_sk#11] +Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#8, d_date_sk#10] (15) BroadcastExchange Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) Scan parquet default.store_sales -Output [2]: [ss_item_sk#13, ss_sold_date_sk#14] +Output [2]: [ss_item_sk#11, ss_sold_date_sk#12] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (17) ColumnarToRow -Input [2]: [ss_item_sk#13, ss_sold_date_sk#14] +Input [2]: [ss_item_sk#11, ss_sold_date_sk#12] (18) Filter -Input [2]: [ss_item_sk#13, ss_sold_date_sk#14] -Condition : isnotnull(ss_item_sk#13) +Input [2]: [ss_item_sk#11, ss_sold_date_sk#12] +Condition : isnotnull(ss_item_sk#11) (19) Project -Output [1]: [ss_item_sk#13] -Input [2]: [ss_item_sk#13, ss_sold_date_sk#14] +Output [1]: [ss_item_sk#11] +Input [2]: [ss_item_sk#11, ss_sold_date_sk#12] (20) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] -Right keys [1]: [ss_item_sk#13] +Right keys [1]: [ss_item_sk#11] Join condition: None (21) Project [codegen id : 4] Output [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, ss_item_sk#13] +Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, ss_item_sk#11] (22) HashAggregate [codegen id : 4] Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] @@ -128,7 +128,7 @@ Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] (23) Exchange Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] -Arguments: hashpartitioning(i_item_id#2, i_item_desc#3, i_current_price#4, 5), ENSURE_REQUIREMENTS, [id=#15] +Arguments: hashpartitioning(i_item_id#2, i_item_desc#3, i_current_price#4, 5), ENSURE_REQUIREMENTS, [plan_id=3] (24) HashAggregate [codegen id : 5] Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4] @@ -152,25 +152,25 @@ BroadcastExchange (30) (26) Scan parquet default.date_dim -Output [2]: [d_date_sk#11, d_date#16] +Output [2]: [d_date_sk#10, d_date#13] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-05-25), LessThanOrEqual(d_date,2000-07-24), IsNotNull(d_date_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#11, d_date#16] +Input [2]: [d_date_sk#10, d_date#13] (28) Filter [codegen id : 1] -Input [2]: [d_date_sk#11, d_date#16] -Condition : (((isnotnull(d_date#16) AND (d_date#16 >= 2000-05-25)) AND (d_date#16 <= 2000-07-24)) AND isnotnull(d_date_sk#11)) +Input [2]: [d_date_sk#10, d_date#13] +Condition : (((isnotnull(d_date#13) AND (d_date#13 >= 2000-05-25)) AND (d_date#13 <= 2000-07-24)) AND isnotnull(d_date_sk#10)) (29) Project [codegen id : 1] -Output [1]: [d_date_sk#11] -Input [2]: [d_date_sk#11, d_date#16] +Output [1]: [d_date_sk#10] +Input [2]: [d_date_sk#10, d_date#13] (30) BroadcastExchange -Input [1]: [d_date_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Input [1]: [d_date_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83.sf100/explain.txt index 3374a3dc3daae..a0be704ebd2a1 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83.sf100/explain.txt @@ -90,7 +90,7 @@ Condition : (isnotnull(i_item_sk#6) AND isnotnull(i_item_id#7)) (10) BroadcastExchange Input [2]: [i_item_sk#6, i_item_id#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 5] Left keys [1]: [sr_item_sk#1] @@ -105,163 +105,163 @@ Input [4]: [sr_item_sk#1, sr_return_quantity#2, i_item_sk#6, i_item_id#7] Input [2]: [sr_return_quantity#2, i_item_id#7] Keys [1]: [i_item_id#7] Functions [1]: [partial_sum(sr_return_quantity#2)] -Aggregate Attributes [1]: [sum#9] -Results [2]: [i_item_id#7, sum#10] +Aggregate Attributes [1]: [sum#8] +Results [2]: [i_item_id#7, sum#9] (14) Exchange -Input [2]: [i_item_id#7, sum#10] -Arguments: hashpartitioning(i_item_id#7, 5), ENSURE_REQUIREMENTS, [id=#11] +Input [2]: [i_item_id#7, sum#9] +Arguments: hashpartitioning(i_item_id#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 18] -Input [2]: [i_item_id#7, sum#10] +Input [2]: [i_item_id#7, sum#9] Keys [1]: [i_item_id#7] Functions [1]: [sum(sr_return_quantity#2)] -Aggregate Attributes [1]: [sum(sr_return_quantity#2)#12] -Results [2]: [i_item_id#7 AS item_id#13, sum(sr_return_quantity#2)#12 AS sr_item_qty#14] +Aggregate Attributes [1]: [sum(sr_return_quantity#2)#10] +Results [2]: [i_item_id#7 AS item_id#11, sum(sr_return_quantity#2)#10 AS sr_item_qty#12] (16) Scan parquet default.catalog_returns -Output [3]: [cr_item_sk#15, cr_return_quantity#16, cr_returned_date_sk#17] +Output [3]: [cr_item_sk#13, cr_return_quantity#14, cr_returned_date_sk#15] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cr_returned_date_sk#17), dynamicpruningexpression(cr_returned_date_sk#17 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(cr_returned_date_sk#15), dynamicpruningexpression(cr_returned_date_sk#15 IN dynamicpruning#4)] PushedFilters: [IsNotNull(cr_item_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 10] -Input [3]: [cr_item_sk#15, cr_return_quantity#16, cr_returned_date_sk#17] +Input [3]: [cr_item_sk#13, cr_return_quantity#14, cr_returned_date_sk#15] (18) Filter [codegen id : 10] -Input [3]: [cr_item_sk#15, cr_return_quantity#16, cr_returned_date_sk#17] -Condition : isnotnull(cr_item_sk#15) +Input [3]: [cr_item_sk#13, cr_return_quantity#14, cr_returned_date_sk#15] +Condition : isnotnull(cr_item_sk#13) (19) ReusedExchange [Reuses operator id: 62] -Output [1]: [d_date_sk#18] +Output [1]: [d_date_sk#16] (20) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cr_returned_date_sk#17] -Right keys [1]: [d_date_sk#18] +Left keys [1]: [cr_returned_date_sk#15] +Right keys [1]: [d_date_sk#16] Join condition: None (21) Project [codegen id : 10] -Output [2]: [cr_item_sk#15, cr_return_quantity#16] -Input [4]: [cr_item_sk#15, cr_return_quantity#16, cr_returned_date_sk#17, d_date_sk#18] +Output [2]: [cr_item_sk#13, cr_return_quantity#14] +Input [4]: [cr_item_sk#13, cr_return_quantity#14, cr_returned_date_sk#15, d_date_sk#16] (22) ReusedExchange [Reuses operator id: 10] -Output [2]: [i_item_sk#19, i_item_id#20] +Output [2]: [i_item_sk#17, i_item_id#18] (23) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cr_item_sk#15] -Right keys [1]: [i_item_sk#19] +Left keys [1]: [cr_item_sk#13] +Right keys [1]: [i_item_sk#17] Join condition: None (24) Project [codegen id : 10] -Output [2]: [cr_return_quantity#16, i_item_id#20] -Input [4]: [cr_item_sk#15, cr_return_quantity#16, i_item_sk#19, i_item_id#20] +Output [2]: [cr_return_quantity#14, i_item_id#18] +Input [4]: [cr_item_sk#13, cr_return_quantity#14, i_item_sk#17, i_item_id#18] (25) HashAggregate [codegen id : 10] -Input [2]: [cr_return_quantity#16, i_item_id#20] -Keys [1]: [i_item_id#20] -Functions [1]: [partial_sum(cr_return_quantity#16)] -Aggregate Attributes [1]: [sum#21] -Results [2]: [i_item_id#20, sum#22] +Input [2]: [cr_return_quantity#14, i_item_id#18] +Keys [1]: [i_item_id#18] +Functions [1]: [partial_sum(cr_return_quantity#14)] +Aggregate Attributes [1]: [sum#19] +Results [2]: [i_item_id#18, sum#20] (26) Exchange -Input [2]: [i_item_id#20, sum#22] -Arguments: hashpartitioning(i_item_id#20, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [2]: [i_item_id#18, sum#20] +Arguments: hashpartitioning(i_item_id#18, 5), ENSURE_REQUIREMENTS, [plan_id=3] (27) HashAggregate [codegen id : 11] -Input [2]: [i_item_id#20, sum#22] -Keys [1]: [i_item_id#20] -Functions [1]: [sum(cr_return_quantity#16)] -Aggregate Attributes [1]: [sum(cr_return_quantity#16)#24] -Results [2]: [i_item_id#20 AS item_id#25, sum(cr_return_quantity#16)#24 AS cr_item_qty#26] +Input [2]: [i_item_id#18, sum#20] +Keys [1]: [i_item_id#18] +Functions [1]: [sum(cr_return_quantity#14)] +Aggregate Attributes [1]: [sum(cr_return_quantity#14)#21] +Results [2]: [i_item_id#18 AS item_id#22, sum(cr_return_quantity#14)#21 AS cr_item_qty#23] (28) BroadcastExchange -Input [2]: [item_id#25, cr_item_qty#26] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#27] +Input [2]: [item_id#22, cr_item_qty#23] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=4] (29) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [item_id#13] -Right keys [1]: [item_id#25] +Left keys [1]: [item_id#11] +Right keys [1]: [item_id#22] Join condition: None (30) Project [codegen id : 18] -Output [3]: [item_id#13, sr_item_qty#14, cr_item_qty#26] -Input [4]: [item_id#13, sr_item_qty#14, item_id#25, cr_item_qty#26] +Output [3]: [item_id#11, sr_item_qty#12, cr_item_qty#23] +Input [4]: [item_id#11, sr_item_qty#12, item_id#22, cr_item_qty#23] (31) Scan parquet default.web_returns -Output [3]: [wr_item_sk#28, wr_return_quantity#29, wr_returned_date_sk#30] +Output [3]: [wr_item_sk#24, wr_return_quantity#25, wr_returned_date_sk#26] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(wr_returned_date_sk#30), dynamicpruningexpression(wr_returned_date_sk#30 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(wr_returned_date_sk#26), dynamicpruningexpression(wr_returned_date_sk#26 IN dynamicpruning#4)] PushedFilters: [IsNotNull(wr_item_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 16] -Input [3]: [wr_item_sk#28, wr_return_quantity#29, wr_returned_date_sk#30] +Input [3]: [wr_item_sk#24, wr_return_quantity#25, wr_returned_date_sk#26] (33) Filter [codegen id : 16] -Input [3]: [wr_item_sk#28, wr_return_quantity#29, wr_returned_date_sk#30] -Condition : isnotnull(wr_item_sk#28) +Input [3]: [wr_item_sk#24, wr_return_quantity#25, wr_returned_date_sk#26] +Condition : isnotnull(wr_item_sk#24) (34) ReusedExchange [Reuses operator id: 62] -Output [1]: [d_date_sk#31] +Output [1]: [d_date_sk#27] (35) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [wr_returned_date_sk#30] -Right keys [1]: [d_date_sk#31] +Left keys [1]: [wr_returned_date_sk#26] +Right keys [1]: [d_date_sk#27] Join condition: None (36) Project [codegen id : 16] -Output [2]: [wr_item_sk#28, wr_return_quantity#29] -Input [4]: [wr_item_sk#28, wr_return_quantity#29, wr_returned_date_sk#30, d_date_sk#31] +Output [2]: [wr_item_sk#24, wr_return_quantity#25] +Input [4]: [wr_item_sk#24, wr_return_quantity#25, wr_returned_date_sk#26, d_date_sk#27] (37) ReusedExchange [Reuses operator id: 10] -Output [2]: [i_item_sk#32, i_item_id#33] +Output [2]: [i_item_sk#28, i_item_id#29] (38) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [wr_item_sk#28] -Right keys [1]: [i_item_sk#32] +Left keys [1]: [wr_item_sk#24] +Right keys [1]: [i_item_sk#28] Join condition: None (39) Project [codegen id : 16] -Output [2]: [wr_return_quantity#29, i_item_id#33] -Input [4]: [wr_item_sk#28, wr_return_quantity#29, i_item_sk#32, i_item_id#33] +Output [2]: [wr_return_quantity#25, i_item_id#29] +Input [4]: [wr_item_sk#24, wr_return_quantity#25, i_item_sk#28, i_item_id#29] (40) HashAggregate [codegen id : 16] -Input [2]: [wr_return_quantity#29, i_item_id#33] -Keys [1]: [i_item_id#33] -Functions [1]: [partial_sum(wr_return_quantity#29)] -Aggregate Attributes [1]: [sum#34] -Results [2]: [i_item_id#33, sum#35] +Input [2]: [wr_return_quantity#25, i_item_id#29] +Keys [1]: [i_item_id#29] +Functions [1]: [partial_sum(wr_return_quantity#25)] +Aggregate Attributes [1]: [sum#30] +Results [2]: [i_item_id#29, sum#31] (41) Exchange -Input [2]: [i_item_id#33, sum#35] -Arguments: hashpartitioning(i_item_id#33, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [2]: [i_item_id#29, sum#31] +Arguments: hashpartitioning(i_item_id#29, 5), ENSURE_REQUIREMENTS, [plan_id=5] (42) HashAggregate [codegen id : 17] -Input [2]: [i_item_id#33, sum#35] -Keys [1]: [i_item_id#33] -Functions [1]: [sum(wr_return_quantity#29)] -Aggregate Attributes [1]: [sum(wr_return_quantity#29)#37] -Results [2]: [i_item_id#33 AS item_id#38, sum(wr_return_quantity#29)#37 AS wr_item_qty#39] +Input [2]: [i_item_id#29, sum#31] +Keys [1]: [i_item_id#29] +Functions [1]: [sum(wr_return_quantity#25)] +Aggregate Attributes [1]: [sum(wr_return_quantity#25)#32] +Results [2]: [i_item_id#29 AS item_id#33, sum(wr_return_quantity#25)#32 AS wr_item_qty#34] (43) BroadcastExchange -Input [2]: [item_id#38, wr_item_qty#39] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#40] +Input [2]: [item_id#33, wr_item_qty#34] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=6] (44) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [item_id#13] -Right keys [1]: [item_id#38] +Left keys [1]: [item_id#11] +Right keys [1]: [item_id#33] Join condition: None (45) Project [codegen id : 18] -Output [8]: [item_id#13, sr_item_qty#14, (((cast(sr_item_qty#14 as double) / cast(((sr_item_qty#14 + cr_item_qty#26) + wr_item_qty#39) as double)) / 3.0) * 100.0) AS sr_dev#41, cr_item_qty#26, (((cast(cr_item_qty#26 as double) / cast(((sr_item_qty#14 + cr_item_qty#26) + wr_item_qty#39) as double)) / 3.0) * 100.0) AS cr_dev#42, wr_item_qty#39, (((cast(wr_item_qty#39 as double) / cast(((sr_item_qty#14 + cr_item_qty#26) + wr_item_qty#39) as double)) / 3.0) * 100.0) AS wr_dev#43, CheckOverflow((promote_precision(cast(((sr_item_qty#14 + cr_item_qty#26) + wr_item_qty#39) as decimal(21,1))) / 3.0), DecimalType(27,6)) AS average#44] -Input [5]: [item_id#13, sr_item_qty#14, cr_item_qty#26, item_id#38, wr_item_qty#39] +Output [8]: [item_id#11, sr_item_qty#12, (((cast(sr_item_qty#12 as double) / cast(((sr_item_qty#12 + cr_item_qty#23) + wr_item_qty#34) as double)) / 3.0) * 100.0) AS sr_dev#35, cr_item_qty#23, (((cast(cr_item_qty#23 as double) / cast(((sr_item_qty#12 + cr_item_qty#23) + wr_item_qty#34) as double)) / 3.0) * 100.0) AS cr_dev#36, wr_item_qty#34, (((cast(wr_item_qty#34 as double) / cast(((sr_item_qty#12 + cr_item_qty#23) + wr_item_qty#34) as double)) / 3.0) * 100.0) AS wr_dev#37, CheckOverflow((promote_precision(cast(((sr_item_qty#12 + cr_item_qty#23) + wr_item_qty#34) as decimal(21,1))) / 3.0), DecimalType(27,6)) AS average#38] +Input [5]: [item_id#11, sr_item_qty#12, cr_item_qty#23, item_id#33, wr_item_qty#34] (46) TakeOrderedAndProject -Input [8]: [item_id#13, sr_item_qty#14, sr_dev#41, cr_item_qty#26, cr_dev#42, wr_item_qty#39, wr_dev#43, average#44] -Arguments: 100, [item_id#13 ASC NULLS FIRST, sr_item_qty#14 ASC NULLS FIRST], [item_id#13, sr_item_qty#14, sr_dev#41, cr_item_qty#26, cr_dev#42, wr_item_qty#39, wr_dev#43, average#44] +Input [8]: [item_id#11, sr_item_qty#12, sr_dev#35, cr_item_qty#23, cr_dev#36, wr_item_qty#34, wr_dev#37, average#38] +Arguments: 100, [item_id#11 ASC NULLS FIRST, sr_item_qty#12 ASC NULLS FIRST], [item_id#11, sr_item_qty#12, sr_dev#35, cr_item_qty#23, cr_dev#36, wr_item_qty#34, wr_dev#37, average#38] ===== Subqueries ===== @@ -285,77 +285,77 @@ BroadcastExchange (62) (47) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_date#45] +Output [2]: [d_date_sk#5, d_date#39] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk)] ReadSchema: struct (48) ColumnarToRow [codegen id : 3] -Input [2]: [d_date_sk#5, d_date#45] +Input [2]: [d_date_sk#5, d_date#39] (49) Filter [codegen id : 3] -Input [2]: [d_date_sk#5, d_date#45] +Input [2]: [d_date_sk#5, d_date#39] Condition : isnotnull(d_date_sk#5) (50) Scan parquet default.date_dim -Output [2]: [d_date#46, d_week_seq#47] +Output [2]: [d_date#40, d_week_seq#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] ReadSchema: struct (51) ColumnarToRow [codegen id : 2] -Input [2]: [d_date#46, d_week_seq#47] +Input [2]: [d_date#40, d_week_seq#41] (52) Scan parquet default.date_dim -Output [2]: [d_date#48, d_week_seq#49] +Output [2]: [d_date#42, d_week_seq#43] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] ReadSchema: struct (53) ColumnarToRow [codegen id : 1] -Input [2]: [d_date#48, d_week_seq#49] +Input [2]: [d_date#42, d_week_seq#43] (54) Filter [codegen id : 1] -Input [2]: [d_date#48, d_week_seq#49] -Condition : cast(d_date#48 as string) IN (2000-06-30,2000-09-27,2000-11-17) +Input [2]: [d_date#42, d_week_seq#43] +Condition : cast(d_date#42 as string) IN (2000-06-30,2000-09-27,2000-11-17) (55) Project [codegen id : 1] -Output [1]: [d_week_seq#49] -Input [2]: [d_date#48, d_week_seq#49] +Output [1]: [d_week_seq#43] +Input [2]: [d_date#42, d_week_seq#43] (56) BroadcastExchange -Input [1]: [d_week_seq#49] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#50] +Input [1]: [d_week_seq#43] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] (57) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [d_week_seq#47] -Right keys [1]: [d_week_seq#49] +Left keys [1]: [d_week_seq#41] +Right keys [1]: [d_week_seq#43] Join condition: None (58) Project [codegen id : 2] -Output [1]: [d_date#46] -Input [2]: [d_date#46, d_week_seq#47] +Output [1]: [d_date#40] +Input [2]: [d_date#40, d_week_seq#41] (59) BroadcastExchange -Input [1]: [d_date#46] -Arguments: HashedRelationBroadcastMode(List(input[0, date, true]),false), [id=#51] +Input [1]: [d_date#40] +Arguments: HashedRelationBroadcastMode(List(input[0, date, true]),false), [plan_id=8] (60) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [d_date#45] -Right keys [1]: [d_date#46] +Left keys [1]: [d_date#39] +Right keys [1]: [d_date#40] Join condition: None (61) Project [codegen id : 3] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_date#45] +Input [2]: [d_date_sk#5, d_date#39] (62) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#52] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:2 Hosting operator id = 16 Hosting Expression = cr_returned_date_sk#17 IN dynamicpruning#4 +Subquery:2 Hosting operator id = 16 Hosting Expression = cr_returned_date_sk#15 IN dynamicpruning#4 -Subquery:3 Hosting operator id = 31 Hosting Expression = wr_returned_date_sk#30 IN dynamicpruning#4 +Subquery:3 Hosting operator id = 31 Hosting Expression = wr_returned_date_sk#26 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83/explain.txt index 106d5dd3090e3..bc6c43f18683e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q83/explain.txt @@ -78,7 +78,7 @@ Condition : (isnotnull(i_item_sk#5) AND isnotnull(i_item_id#6)) (7) BroadcastExchange Input [2]: [i_item_sk#5, i_item_id#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 5] Left keys [1]: [sr_item_sk#1] @@ -90,178 +90,178 @@ Output [3]: [sr_return_quantity#2, sr_returned_date_sk#3, i_item_id#6] Input [5]: [sr_item_sk#1, sr_return_quantity#2, sr_returned_date_sk#3, i_item_sk#5, i_item_id#6] (10) ReusedExchange [Reuses operator id: 62] -Output [1]: [d_date_sk#8] +Output [1]: [d_date_sk#7] (11) BroadcastHashJoin [codegen id : 5] Left keys [1]: [sr_returned_date_sk#3] -Right keys [1]: [d_date_sk#8] +Right keys [1]: [d_date_sk#7] Join condition: None (12) Project [codegen id : 5] Output [2]: [sr_return_quantity#2, i_item_id#6] -Input [4]: [sr_return_quantity#2, sr_returned_date_sk#3, i_item_id#6, d_date_sk#8] +Input [4]: [sr_return_quantity#2, sr_returned_date_sk#3, i_item_id#6, d_date_sk#7] (13) HashAggregate [codegen id : 5] Input [2]: [sr_return_quantity#2, i_item_id#6] Keys [1]: [i_item_id#6] Functions [1]: [partial_sum(sr_return_quantity#2)] -Aggregate Attributes [1]: [sum#9] -Results [2]: [i_item_id#6, sum#10] +Aggregate Attributes [1]: [sum#8] +Results [2]: [i_item_id#6, sum#9] (14) Exchange -Input [2]: [i_item_id#6, sum#10] -Arguments: hashpartitioning(i_item_id#6, 5), ENSURE_REQUIREMENTS, [id=#11] +Input [2]: [i_item_id#6, sum#9] +Arguments: hashpartitioning(i_item_id#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 18] -Input [2]: [i_item_id#6, sum#10] +Input [2]: [i_item_id#6, sum#9] Keys [1]: [i_item_id#6] Functions [1]: [sum(sr_return_quantity#2)] -Aggregate Attributes [1]: [sum(sr_return_quantity#2)#12] -Results [2]: [i_item_id#6 AS item_id#13, sum(sr_return_quantity#2)#12 AS sr_item_qty#14] +Aggregate Attributes [1]: [sum(sr_return_quantity#2)#10] +Results [2]: [i_item_id#6 AS item_id#11, sum(sr_return_quantity#2)#10 AS sr_item_qty#12] (16) Scan parquet default.catalog_returns -Output [3]: [cr_item_sk#15, cr_return_quantity#16, cr_returned_date_sk#17] +Output [3]: [cr_item_sk#13, cr_return_quantity#14, cr_returned_date_sk#15] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cr_returned_date_sk#17), dynamicpruningexpression(cr_returned_date_sk#17 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(cr_returned_date_sk#15), dynamicpruningexpression(cr_returned_date_sk#15 IN dynamicpruning#4)] PushedFilters: [IsNotNull(cr_item_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 10] -Input [3]: [cr_item_sk#15, cr_return_quantity#16, cr_returned_date_sk#17] +Input [3]: [cr_item_sk#13, cr_return_quantity#14, cr_returned_date_sk#15] (18) Filter [codegen id : 10] -Input [3]: [cr_item_sk#15, cr_return_quantity#16, cr_returned_date_sk#17] -Condition : isnotnull(cr_item_sk#15) +Input [3]: [cr_item_sk#13, cr_return_quantity#14, cr_returned_date_sk#15] +Condition : isnotnull(cr_item_sk#13) (19) ReusedExchange [Reuses operator id: 7] -Output [2]: [i_item_sk#18, i_item_id#19] +Output [2]: [i_item_sk#16, i_item_id#17] (20) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cr_item_sk#15] -Right keys [1]: [i_item_sk#18] +Left keys [1]: [cr_item_sk#13] +Right keys [1]: [i_item_sk#16] Join condition: None (21) Project [codegen id : 10] -Output [3]: [cr_return_quantity#16, cr_returned_date_sk#17, i_item_id#19] -Input [5]: [cr_item_sk#15, cr_return_quantity#16, cr_returned_date_sk#17, i_item_sk#18, i_item_id#19] +Output [3]: [cr_return_quantity#14, cr_returned_date_sk#15, i_item_id#17] +Input [5]: [cr_item_sk#13, cr_return_quantity#14, cr_returned_date_sk#15, i_item_sk#16, i_item_id#17] (22) ReusedExchange [Reuses operator id: 62] -Output [1]: [d_date_sk#20] +Output [1]: [d_date_sk#18] (23) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cr_returned_date_sk#17] -Right keys [1]: [d_date_sk#20] +Left keys [1]: [cr_returned_date_sk#15] +Right keys [1]: [d_date_sk#18] Join condition: None (24) Project [codegen id : 10] -Output [2]: [cr_return_quantity#16, i_item_id#19] -Input [4]: [cr_return_quantity#16, cr_returned_date_sk#17, i_item_id#19, d_date_sk#20] +Output [2]: [cr_return_quantity#14, i_item_id#17] +Input [4]: [cr_return_quantity#14, cr_returned_date_sk#15, i_item_id#17, d_date_sk#18] (25) HashAggregate [codegen id : 10] -Input [2]: [cr_return_quantity#16, i_item_id#19] -Keys [1]: [i_item_id#19] -Functions [1]: [partial_sum(cr_return_quantity#16)] -Aggregate Attributes [1]: [sum#21] -Results [2]: [i_item_id#19, sum#22] +Input [2]: [cr_return_quantity#14, i_item_id#17] +Keys [1]: [i_item_id#17] +Functions [1]: [partial_sum(cr_return_quantity#14)] +Aggregate Attributes [1]: [sum#19] +Results [2]: [i_item_id#17, sum#20] (26) Exchange -Input [2]: [i_item_id#19, sum#22] -Arguments: hashpartitioning(i_item_id#19, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [2]: [i_item_id#17, sum#20] +Arguments: hashpartitioning(i_item_id#17, 5), ENSURE_REQUIREMENTS, [plan_id=3] (27) HashAggregate [codegen id : 11] -Input [2]: [i_item_id#19, sum#22] -Keys [1]: [i_item_id#19] -Functions [1]: [sum(cr_return_quantity#16)] -Aggregate Attributes [1]: [sum(cr_return_quantity#16)#24] -Results [2]: [i_item_id#19 AS item_id#25, sum(cr_return_quantity#16)#24 AS cr_item_qty#26] +Input [2]: [i_item_id#17, sum#20] +Keys [1]: [i_item_id#17] +Functions [1]: [sum(cr_return_quantity#14)] +Aggregate Attributes [1]: [sum(cr_return_quantity#14)#21] +Results [2]: [i_item_id#17 AS item_id#22, sum(cr_return_quantity#14)#21 AS cr_item_qty#23] (28) BroadcastExchange -Input [2]: [item_id#25, cr_item_qty#26] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#27] +Input [2]: [item_id#22, cr_item_qty#23] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=4] (29) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [item_id#13] -Right keys [1]: [item_id#25] +Left keys [1]: [item_id#11] +Right keys [1]: [item_id#22] Join condition: None (30) Project [codegen id : 18] -Output [3]: [item_id#13, sr_item_qty#14, cr_item_qty#26] -Input [4]: [item_id#13, sr_item_qty#14, item_id#25, cr_item_qty#26] +Output [3]: [item_id#11, sr_item_qty#12, cr_item_qty#23] +Input [4]: [item_id#11, sr_item_qty#12, item_id#22, cr_item_qty#23] (31) Scan parquet default.web_returns -Output [3]: [wr_item_sk#28, wr_return_quantity#29, wr_returned_date_sk#30] +Output [3]: [wr_item_sk#24, wr_return_quantity#25, wr_returned_date_sk#26] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(wr_returned_date_sk#30), dynamicpruningexpression(wr_returned_date_sk#30 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(wr_returned_date_sk#26), dynamicpruningexpression(wr_returned_date_sk#26 IN dynamicpruning#4)] PushedFilters: [IsNotNull(wr_item_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 16] -Input [3]: [wr_item_sk#28, wr_return_quantity#29, wr_returned_date_sk#30] +Input [3]: [wr_item_sk#24, wr_return_quantity#25, wr_returned_date_sk#26] (33) Filter [codegen id : 16] -Input [3]: [wr_item_sk#28, wr_return_quantity#29, wr_returned_date_sk#30] -Condition : isnotnull(wr_item_sk#28) +Input [3]: [wr_item_sk#24, wr_return_quantity#25, wr_returned_date_sk#26] +Condition : isnotnull(wr_item_sk#24) (34) ReusedExchange [Reuses operator id: 7] -Output [2]: [i_item_sk#31, i_item_id#32] +Output [2]: [i_item_sk#27, i_item_id#28] (35) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [wr_item_sk#28] -Right keys [1]: [i_item_sk#31] +Left keys [1]: [wr_item_sk#24] +Right keys [1]: [i_item_sk#27] Join condition: None (36) Project [codegen id : 16] -Output [3]: [wr_return_quantity#29, wr_returned_date_sk#30, i_item_id#32] -Input [5]: [wr_item_sk#28, wr_return_quantity#29, wr_returned_date_sk#30, i_item_sk#31, i_item_id#32] +Output [3]: [wr_return_quantity#25, wr_returned_date_sk#26, i_item_id#28] +Input [5]: [wr_item_sk#24, wr_return_quantity#25, wr_returned_date_sk#26, i_item_sk#27, i_item_id#28] (37) ReusedExchange [Reuses operator id: 62] -Output [1]: [d_date_sk#33] +Output [1]: [d_date_sk#29] (38) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [wr_returned_date_sk#30] -Right keys [1]: [d_date_sk#33] +Left keys [1]: [wr_returned_date_sk#26] +Right keys [1]: [d_date_sk#29] Join condition: None (39) Project [codegen id : 16] -Output [2]: [wr_return_quantity#29, i_item_id#32] -Input [4]: [wr_return_quantity#29, wr_returned_date_sk#30, i_item_id#32, d_date_sk#33] +Output [2]: [wr_return_quantity#25, i_item_id#28] +Input [4]: [wr_return_quantity#25, wr_returned_date_sk#26, i_item_id#28, d_date_sk#29] (40) HashAggregate [codegen id : 16] -Input [2]: [wr_return_quantity#29, i_item_id#32] -Keys [1]: [i_item_id#32] -Functions [1]: [partial_sum(wr_return_quantity#29)] -Aggregate Attributes [1]: [sum#34] -Results [2]: [i_item_id#32, sum#35] +Input [2]: [wr_return_quantity#25, i_item_id#28] +Keys [1]: [i_item_id#28] +Functions [1]: [partial_sum(wr_return_quantity#25)] +Aggregate Attributes [1]: [sum#30] +Results [2]: [i_item_id#28, sum#31] (41) Exchange -Input [2]: [i_item_id#32, sum#35] -Arguments: hashpartitioning(i_item_id#32, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [2]: [i_item_id#28, sum#31] +Arguments: hashpartitioning(i_item_id#28, 5), ENSURE_REQUIREMENTS, [plan_id=5] (42) HashAggregate [codegen id : 17] -Input [2]: [i_item_id#32, sum#35] -Keys [1]: [i_item_id#32] -Functions [1]: [sum(wr_return_quantity#29)] -Aggregate Attributes [1]: [sum(wr_return_quantity#29)#37] -Results [2]: [i_item_id#32 AS item_id#38, sum(wr_return_quantity#29)#37 AS wr_item_qty#39] +Input [2]: [i_item_id#28, sum#31] +Keys [1]: [i_item_id#28] +Functions [1]: [sum(wr_return_quantity#25)] +Aggregate Attributes [1]: [sum(wr_return_quantity#25)#32] +Results [2]: [i_item_id#28 AS item_id#33, sum(wr_return_quantity#25)#32 AS wr_item_qty#34] (43) BroadcastExchange -Input [2]: [item_id#38, wr_item_qty#39] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#40] +Input [2]: [item_id#33, wr_item_qty#34] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=6] (44) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [item_id#13] -Right keys [1]: [item_id#38] +Left keys [1]: [item_id#11] +Right keys [1]: [item_id#33] Join condition: None (45) Project [codegen id : 18] -Output [8]: [item_id#13, sr_item_qty#14, (((cast(sr_item_qty#14 as double) / cast(((sr_item_qty#14 + cr_item_qty#26) + wr_item_qty#39) as double)) / 3.0) * 100.0) AS sr_dev#41, cr_item_qty#26, (((cast(cr_item_qty#26 as double) / cast(((sr_item_qty#14 + cr_item_qty#26) + wr_item_qty#39) as double)) / 3.0) * 100.0) AS cr_dev#42, wr_item_qty#39, (((cast(wr_item_qty#39 as double) / cast(((sr_item_qty#14 + cr_item_qty#26) + wr_item_qty#39) as double)) / 3.0) * 100.0) AS wr_dev#43, CheckOverflow((promote_precision(cast(((sr_item_qty#14 + cr_item_qty#26) + wr_item_qty#39) as decimal(21,1))) / 3.0), DecimalType(27,6)) AS average#44] -Input [5]: [item_id#13, sr_item_qty#14, cr_item_qty#26, item_id#38, wr_item_qty#39] +Output [8]: [item_id#11, sr_item_qty#12, (((cast(sr_item_qty#12 as double) / cast(((sr_item_qty#12 + cr_item_qty#23) + wr_item_qty#34) as double)) / 3.0) * 100.0) AS sr_dev#35, cr_item_qty#23, (((cast(cr_item_qty#23 as double) / cast(((sr_item_qty#12 + cr_item_qty#23) + wr_item_qty#34) as double)) / 3.0) * 100.0) AS cr_dev#36, wr_item_qty#34, (((cast(wr_item_qty#34 as double) / cast(((sr_item_qty#12 + cr_item_qty#23) + wr_item_qty#34) as double)) / 3.0) * 100.0) AS wr_dev#37, CheckOverflow((promote_precision(cast(((sr_item_qty#12 + cr_item_qty#23) + wr_item_qty#34) as decimal(21,1))) / 3.0), DecimalType(27,6)) AS average#38] +Input [5]: [item_id#11, sr_item_qty#12, cr_item_qty#23, item_id#33, wr_item_qty#34] (46) TakeOrderedAndProject -Input [8]: [item_id#13, sr_item_qty#14, sr_dev#41, cr_item_qty#26, cr_dev#42, wr_item_qty#39, wr_dev#43, average#44] -Arguments: 100, [item_id#13 ASC NULLS FIRST, sr_item_qty#14 ASC NULLS FIRST], [item_id#13, sr_item_qty#14, sr_dev#41, cr_item_qty#26, cr_dev#42, wr_item_qty#39, wr_dev#43, average#44] +Input [8]: [item_id#11, sr_item_qty#12, sr_dev#35, cr_item_qty#23, cr_dev#36, wr_item_qty#34, wr_dev#37, average#38] +Arguments: 100, [item_id#11 ASC NULLS FIRST, sr_item_qty#12 ASC NULLS FIRST], [item_id#11, sr_item_qty#12, sr_dev#35, cr_item_qty#23, cr_dev#36, wr_item_qty#34, wr_dev#37, average#38] ===== Subqueries ===== @@ -285,77 +285,77 @@ BroadcastExchange (62) (47) Scan parquet default.date_dim -Output [2]: [d_date_sk#8, d_date#45] +Output [2]: [d_date_sk#7, d_date#39] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk)] ReadSchema: struct (48) ColumnarToRow [codegen id : 3] -Input [2]: [d_date_sk#8, d_date#45] +Input [2]: [d_date_sk#7, d_date#39] (49) Filter [codegen id : 3] -Input [2]: [d_date_sk#8, d_date#45] -Condition : isnotnull(d_date_sk#8) +Input [2]: [d_date_sk#7, d_date#39] +Condition : isnotnull(d_date_sk#7) (50) Scan parquet default.date_dim -Output [2]: [d_date#46, d_week_seq#47] +Output [2]: [d_date#40, d_week_seq#41] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] ReadSchema: struct (51) ColumnarToRow [codegen id : 2] -Input [2]: [d_date#46, d_week_seq#47] +Input [2]: [d_date#40, d_week_seq#41] (52) Scan parquet default.date_dim -Output [2]: [d_date#48, d_week_seq#49] +Output [2]: [d_date#42, d_week_seq#43] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] ReadSchema: struct (53) ColumnarToRow [codegen id : 1] -Input [2]: [d_date#48, d_week_seq#49] +Input [2]: [d_date#42, d_week_seq#43] (54) Filter [codegen id : 1] -Input [2]: [d_date#48, d_week_seq#49] -Condition : cast(d_date#48 as string) IN (2000-06-30,2000-09-27,2000-11-17) +Input [2]: [d_date#42, d_week_seq#43] +Condition : cast(d_date#42 as string) IN (2000-06-30,2000-09-27,2000-11-17) (55) Project [codegen id : 1] -Output [1]: [d_week_seq#49] -Input [2]: [d_date#48, d_week_seq#49] +Output [1]: [d_week_seq#43] +Input [2]: [d_date#42, d_week_seq#43] (56) BroadcastExchange -Input [1]: [d_week_seq#49] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#50] +Input [1]: [d_week_seq#43] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] (57) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [d_week_seq#47] -Right keys [1]: [d_week_seq#49] +Left keys [1]: [d_week_seq#41] +Right keys [1]: [d_week_seq#43] Join condition: None (58) Project [codegen id : 2] -Output [1]: [d_date#46] -Input [2]: [d_date#46, d_week_seq#47] +Output [1]: [d_date#40] +Input [2]: [d_date#40, d_week_seq#41] (59) BroadcastExchange -Input [1]: [d_date#46] -Arguments: HashedRelationBroadcastMode(List(input[0, date, true]),false), [id=#51] +Input [1]: [d_date#40] +Arguments: HashedRelationBroadcastMode(List(input[0, date, true]),false), [plan_id=8] (60) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [d_date#45] -Right keys [1]: [d_date#46] +Left keys [1]: [d_date#39] +Right keys [1]: [d_date#40] Join condition: None (61) Project [codegen id : 3] -Output [1]: [d_date_sk#8] -Input [2]: [d_date_sk#8, d_date#45] +Output [1]: [d_date_sk#7] +Input [2]: [d_date_sk#7, d_date#39] (62) BroadcastExchange -Input [1]: [d_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#52] +Input [1]: [d_date_sk#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:2 Hosting operator id = 16 Hosting Expression = cr_returned_date_sk#17 IN dynamicpruning#4 +Subquery:2 Hosting operator id = 16 Hosting Expression = cr_returned_date_sk#15 IN dynamicpruning#4 -Subquery:3 Hosting operator id = 31 Hosting Expression = wr_returned_date_sk#30 IN dynamicpruning#4 +Subquery:3 Hosting operator id = 31 Hosting Expression = wr_returned_date_sk#26 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q84.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q84.sf100/explain.txt index 9762d51e943e8..09a1023458e79 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q84.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q84.sf100/explain.txt @@ -72,7 +72,7 @@ Input [2]: [ca_address_sk#7, ca_city#8] (8) BroadcastExchange Input [1]: [ca_address_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [c_current_addr_sk#4] @@ -84,122 +84,122 @@ Output [5]: [c_customer_id#1, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_firs Input [7]: [c_customer_id#1, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_current_addr_sk#4, c_first_name#5, c_last_name#6, ca_address_sk#7] (11) Scan parquet default.household_demographics -Output [2]: [hd_demo_sk#10, hd_income_band_sk#11] +Output [2]: [hd_demo_sk#9, hd_income_band_sk#10] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_demo_sk), IsNotNull(hd_income_band_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 3] -Input [2]: [hd_demo_sk#10, hd_income_band_sk#11] +Input [2]: [hd_demo_sk#9, hd_income_band_sk#10] (13) Filter [codegen id : 3] -Input [2]: [hd_demo_sk#10, hd_income_band_sk#11] -Condition : (isnotnull(hd_demo_sk#10) AND isnotnull(hd_income_band_sk#11)) +Input [2]: [hd_demo_sk#9, hd_income_band_sk#10] +Condition : (isnotnull(hd_demo_sk#9) AND isnotnull(hd_income_band_sk#10)) (14) Scan parquet default.income_band -Output [3]: [ib_income_band_sk#12, ib_lower_bound#13, ib_upper_bound#14] +Output [3]: [ib_income_band_sk#11, ib_lower_bound#12, ib_upper_bound#13] Batched: true Location [not included in comparison]/{warehouse_dir}/income_band] PushedFilters: [IsNotNull(ib_lower_bound), IsNotNull(ib_upper_bound), GreaterThanOrEqual(ib_lower_bound,38128), LessThanOrEqual(ib_upper_bound,88128), IsNotNull(ib_income_band_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 2] -Input [3]: [ib_income_band_sk#12, ib_lower_bound#13, ib_upper_bound#14] +Input [3]: [ib_income_band_sk#11, ib_lower_bound#12, ib_upper_bound#13] (16) Filter [codegen id : 2] -Input [3]: [ib_income_band_sk#12, ib_lower_bound#13, ib_upper_bound#14] -Condition : ((((isnotnull(ib_lower_bound#13) AND isnotnull(ib_upper_bound#14)) AND (ib_lower_bound#13 >= 38128)) AND (ib_upper_bound#14 <= 88128)) AND isnotnull(ib_income_band_sk#12)) +Input [3]: [ib_income_band_sk#11, ib_lower_bound#12, ib_upper_bound#13] +Condition : ((((isnotnull(ib_lower_bound#12) AND isnotnull(ib_upper_bound#13)) AND (ib_lower_bound#12 >= 38128)) AND (ib_upper_bound#13 <= 88128)) AND isnotnull(ib_income_band_sk#11)) (17) Project [codegen id : 2] -Output [1]: [ib_income_band_sk#12] -Input [3]: [ib_income_band_sk#12, ib_lower_bound#13, ib_upper_bound#14] +Output [1]: [ib_income_band_sk#11] +Input [3]: [ib_income_band_sk#11, ib_lower_bound#12, ib_upper_bound#13] (18) BroadcastExchange -Input [1]: [ib_income_band_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [ib_income_band_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [hd_income_band_sk#11] -Right keys [1]: [ib_income_band_sk#12] +Left keys [1]: [hd_income_band_sk#10] +Right keys [1]: [ib_income_band_sk#11] Join condition: None (20) Project [codegen id : 3] -Output [1]: [hd_demo_sk#10] -Input [3]: [hd_demo_sk#10, hd_income_band_sk#11, ib_income_band_sk#12] +Output [1]: [hd_demo_sk#9] +Input [3]: [hd_demo_sk#9, hd_income_band_sk#10, ib_income_band_sk#11] (21) BroadcastExchange -Input [1]: [hd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16] +Input [1]: [hd_demo_sk#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (22) BroadcastHashJoin [codegen id : 4] Left keys [1]: [c_current_hdemo_sk#3] -Right keys [1]: [hd_demo_sk#10] +Right keys [1]: [hd_demo_sk#9] Join condition: None (23) Project [codegen id : 4] Output [4]: [c_customer_id#1, c_current_cdemo_sk#2, c_first_name#5, c_last_name#6] -Input [6]: [c_customer_id#1, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_first_name#5, c_last_name#6, hd_demo_sk#10] +Input [6]: [c_customer_id#1, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_first_name#5, c_last_name#6, hd_demo_sk#9] (24) BroadcastExchange Input [4]: [c_customer_id#1, c_current_cdemo_sk#2, c_first_name#5, c_last_name#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [plan_id=4] (25) Scan parquet default.customer_demographics -Output [1]: [cd_demo_sk#18] +Output [1]: [cd_demo_sk#14] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (26) ColumnarToRow -Input [1]: [cd_demo_sk#18] +Input [1]: [cd_demo_sk#14] (27) Filter -Input [1]: [cd_demo_sk#18] -Condition : isnotnull(cd_demo_sk#18) +Input [1]: [cd_demo_sk#14] +Condition : isnotnull(cd_demo_sk#14) (28) BroadcastHashJoin [codegen id : 5] Left keys [1]: [c_current_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#18] +Right keys [1]: [cd_demo_sk#14] Join condition: None (29) Project [codegen id : 5] -Output [4]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#18] -Input [5]: [c_customer_id#1, c_current_cdemo_sk#2, c_first_name#5, c_last_name#6, cd_demo_sk#18] +Output [4]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#14] +Input [5]: [c_customer_id#1, c_current_cdemo_sk#2, c_first_name#5, c_last_name#6, cd_demo_sk#14] (30) BroadcastExchange -Input [4]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[3, int, true] as bigint)),false), [id=#19] +Input [4]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[3, int, true] as bigint)),false), [plan_id=5] (31) Scan parquet default.store_returns -Output [2]: [sr_cdemo_sk#20, sr_returned_date_sk#21] +Output [2]: [sr_cdemo_sk#15, sr_returned_date_sk#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_cdemo_sk)] ReadSchema: struct (32) ColumnarToRow -Input [2]: [sr_cdemo_sk#20, sr_returned_date_sk#21] +Input [2]: [sr_cdemo_sk#15, sr_returned_date_sk#16] (33) Filter -Input [2]: [sr_cdemo_sk#20, sr_returned_date_sk#21] -Condition : isnotnull(sr_cdemo_sk#20) +Input [2]: [sr_cdemo_sk#15, sr_returned_date_sk#16] +Condition : isnotnull(sr_cdemo_sk#15) (34) Project -Output [1]: [sr_cdemo_sk#20] -Input [2]: [sr_cdemo_sk#20, sr_returned_date_sk#21] +Output [1]: [sr_cdemo_sk#15] +Input [2]: [sr_cdemo_sk#15, sr_returned_date_sk#16] (35) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [cd_demo_sk#18] -Right keys [1]: [sr_cdemo_sk#20] +Left keys [1]: [cd_demo_sk#14] +Right keys [1]: [sr_cdemo_sk#15] Join condition: None (36) Project [codegen id : 6] -Output [3]: [c_customer_id#1 AS customer_id#22, concat(c_last_name#6, , , c_first_name#5) AS customername#23, c_customer_id#1] -Input [5]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#18, sr_cdemo_sk#20] +Output [3]: [c_customer_id#1 AS customer_id#17, concat(c_last_name#6, , , c_first_name#5) AS customername#18, c_customer_id#1] +Input [5]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#14, sr_cdemo_sk#15] (37) TakeOrderedAndProject -Input [3]: [customer_id#22, customername#23, c_customer_id#1] -Arguments: 100, [c_customer_id#1 ASC NULLS FIRST], [customer_id#22, customername#23] +Input [3]: [customer_id#17, customername#18, c_customer_id#1] +Arguments: 100, [c_customer_id#1 ASC NULLS FIRST], [customer_id#17, customername#18] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q84/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q84/explain.txt index d5b84f52f4b00..4034953dc0b8c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q84/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q84/explain.txt @@ -72,7 +72,7 @@ Input [2]: [ca_address_sk#7, ca_city#8] (8) BroadcastExchange Input [1]: [ca_address_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 5] Left keys [1]: [c_current_addr_sk#4] @@ -84,122 +84,122 @@ Output [5]: [c_customer_id#1, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_firs Input [7]: [c_customer_id#1, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_current_addr_sk#4, c_first_name#5, c_last_name#6, ca_address_sk#7] (11) Scan parquet default.customer_demographics -Output [1]: [cd_demo_sk#10] +Output [1]: [cd_demo_sk#9] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [1]: [cd_demo_sk#10] +Input [1]: [cd_demo_sk#9] (13) Filter [codegen id : 2] -Input [1]: [cd_demo_sk#10] -Condition : isnotnull(cd_demo_sk#10) +Input [1]: [cd_demo_sk#9] +Condition : isnotnull(cd_demo_sk#9) (14) BroadcastExchange -Input [1]: [cd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Input [1]: [cd_demo_sk#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 5] Left keys [1]: [c_current_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#10] +Right keys [1]: [cd_demo_sk#9] Join condition: None (16) Project [codegen id : 5] -Output [5]: [c_customer_id#1, c_current_hdemo_sk#3, c_first_name#5, c_last_name#6, cd_demo_sk#10] -Input [6]: [c_customer_id#1, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_first_name#5, c_last_name#6, cd_demo_sk#10] +Output [5]: [c_customer_id#1, c_current_hdemo_sk#3, c_first_name#5, c_last_name#6, cd_demo_sk#9] +Input [6]: [c_customer_id#1, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_first_name#5, c_last_name#6, cd_demo_sk#9] (17) Scan parquet default.household_demographics -Output [2]: [hd_demo_sk#12, hd_income_band_sk#13] +Output [2]: [hd_demo_sk#10, hd_income_band_sk#11] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_demo_sk), IsNotNull(hd_income_band_sk)] ReadSchema: struct (18) ColumnarToRow [codegen id : 3] -Input [2]: [hd_demo_sk#12, hd_income_band_sk#13] +Input [2]: [hd_demo_sk#10, hd_income_band_sk#11] (19) Filter [codegen id : 3] -Input [2]: [hd_demo_sk#12, hd_income_band_sk#13] -Condition : (isnotnull(hd_demo_sk#12) AND isnotnull(hd_income_band_sk#13)) +Input [2]: [hd_demo_sk#10, hd_income_band_sk#11] +Condition : (isnotnull(hd_demo_sk#10) AND isnotnull(hd_income_band_sk#11)) (20) BroadcastExchange -Input [2]: [hd_demo_sk#12, hd_income_band_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Input [2]: [hd_demo_sk#10, hd_income_band_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 5] Left keys [1]: [c_current_hdemo_sk#3] -Right keys [1]: [hd_demo_sk#12] +Right keys [1]: [hd_demo_sk#10] Join condition: None (22) Project [codegen id : 5] -Output [5]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#10, hd_income_band_sk#13] -Input [7]: [c_customer_id#1, c_current_hdemo_sk#3, c_first_name#5, c_last_name#6, cd_demo_sk#10, hd_demo_sk#12, hd_income_band_sk#13] +Output [5]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#9, hd_income_band_sk#11] +Input [7]: [c_customer_id#1, c_current_hdemo_sk#3, c_first_name#5, c_last_name#6, cd_demo_sk#9, hd_demo_sk#10, hd_income_band_sk#11] (23) Scan parquet default.income_band -Output [3]: [ib_income_band_sk#15, ib_lower_bound#16, ib_upper_bound#17] +Output [3]: [ib_income_band_sk#12, ib_lower_bound#13, ib_upper_bound#14] Batched: true Location [not included in comparison]/{warehouse_dir}/income_band] PushedFilters: [IsNotNull(ib_lower_bound), IsNotNull(ib_upper_bound), GreaterThanOrEqual(ib_lower_bound,38128), LessThanOrEqual(ib_upper_bound,88128), IsNotNull(ib_income_band_sk)] ReadSchema: struct (24) ColumnarToRow [codegen id : 4] -Input [3]: [ib_income_band_sk#15, ib_lower_bound#16, ib_upper_bound#17] +Input [3]: [ib_income_band_sk#12, ib_lower_bound#13, ib_upper_bound#14] (25) Filter [codegen id : 4] -Input [3]: [ib_income_band_sk#15, ib_lower_bound#16, ib_upper_bound#17] -Condition : ((((isnotnull(ib_lower_bound#16) AND isnotnull(ib_upper_bound#17)) AND (ib_lower_bound#16 >= 38128)) AND (ib_upper_bound#17 <= 88128)) AND isnotnull(ib_income_band_sk#15)) +Input [3]: [ib_income_band_sk#12, ib_lower_bound#13, ib_upper_bound#14] +Condition : ((((isnotnull(ib_lower_bound#13) AND isnotnull(ib_upper_bound#14)) AND (ib_lower_bound#13 >= 38128)) AND (ib_upper_bound#14 <= 88128)) AND isnotnull(ib_income_band_sk#12)) (26) Project [codegen id : 4] -Output [1]: [ib_income_band_sk#15] -Input [3]: [ib_income_band_sk#15, ib_lower_bound#16, ib_upper_bound#17] +Output [1]: [ib_income_band_sk#12] +Input [3]: [ib_income_band_sk#12, ib_lower_bound#13, ib_upper_bound#14] (27) BroadcastExchange -Input [1]: [ib_income_band_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [1]: [ib_income_band_sk#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (28) BroadcastHashJoin [codegen id : 5] -Left keys [1]: [hd_income_band_sk#13] -Right keys [1]: [ib_income_band_sk#15] +Left keys [1]: [hd_income_band_sk#11] +Right keys [1]: [ib_income_band_sk#12] Join condition: None (29) Project [codegen id : 5] -Output [4]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#10] -Input [6]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#10, hd_income_band_sk#13, ib_income_band_sk#15] +Output [4]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#9] +Input [6]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#9, hd_income_band_sk#11, ib_income_band_sk#12] (30) BroadcastExchange -Input [4]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[3, int, true] as bigint)),false), [id=#19] +Input [4]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[3, int, true] as bigint)),false), [plan_id=5] (31) Scan parquet default.store_returns -Output [2]: [sr_cdemo_sk#20, sr_returned_date_sk#21] +Output [2]: [sr_cdemo_sk#15, sr_returned_date_sk#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_cdemo_sk)] ReadSchema: struct (32) ColumnarToRow -Input [2]: [sr_cdemo_sk#20, sr_returned_date_sk#21] +Input [2]: [sr_cdemo_sk#15, sr_returned_date_sk#16] (33) Filter -Input [2]: [sr_cdemo_sk#20, sr_returned_date_sk#21] -Condition : isnotnull(sr_cdemo_sk#20) +Input [2]: [sr_cdemo_sk#15, sr_returned_date_sk#16] +Condition : isnotnull(sr_cdemo_sk#15) (34) Project -Output [1]: [sr_cdemo_sk#20] -Input [2]: [sr_cdemo_sk#20, sr_returned_date_sk#21] +Output [1]: [sr_cdemo_sk#15] +Input [2]: [sr_cdemo_sk#15, sr_returned_date_sk#16] (35) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [cd_demo_sk#10] -Right keys [1]: [sr_cdemo_sk#20] +Left keys [1]: [cd_demo_sk#9] +Right keys [1]: [sr_cdemo_sk#15] Join condition: None (36) Project [codegen id : 6] -Output [3]: [c_customer_id#1 AS customer_id#22, concat(c_last_name#6, , , c_first_name#5) AS customername#23, c_customer_id#1] -Input [5]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#10, sr_cdemo_sk#20] +Output [3]: [c_customer_id#1 AS customer_id#17, concat(c_last_name#6, , , c_first_name#5) AS customername#18, c_customer_id#1] +Input [5]: [c_customer_id#1, c_first_name#5, c_last_name#6, cd_demo_sk#9, sr_cdemo_sk#15] (37) TakeOrderedAndProject -Input [3]: [customer_id#22, customername#23, c_customer_id#1] -Arguments: 100, [c_customer_id#1 ASC NULLS FIRST], [customer_id#22, customername#23] +Input [3]: [customer_id#17, customername#18, c_customer_id#1] +Arguments: 100, [c_customer_id#1 ASC NULLS FIRST], [customer_id#17, customername#18] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q85.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q85.sf100/explain.txt index b6aa38bde4114..b19d9bd878ffe 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q85.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q85.sf100/explain.txt @@ -86,7 +86,7 @@ Condition : isnotnull(wp_web_page_sk#9) (7) BroadcastExchange Input [1]: [wp_web_page_sk#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 2] Left keys [1]: [ws_web_page_sk#2] @@ -99,204 +99,204 @@ Input [8]: [ws_item_sk#1, ws_web_page_sk#2, ws_order_number#3, ws_quantity#4, ws (10) Exchange Input [6]: [ws_item_sk#1, ws_order_number#3, ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7] -Arguments: hashpartitioning(ws_item_sk#1, ws_order_number#3, 5), ENSURE_REQUIREMENTS, [id=#11] +Arguments: hashpartitioning(ws_item_sk#1, ws_order_number#3, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 3] Input [6]: [ws_item_sk#1, ws_order_number#3, ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7] Arguments: [ws_item_sk#1 ASC NULLS FIRST, ws_order_number#3 ASC NULLS FIRST], false, 0 (12) Scan parquet default.web_returns -Output [9]: [wr_item_sk#12, wr_refunded_cdemo_sk#13, wr_refunded_addr_sk#14, wr_returning_cdemo_sk#15, wr_reason_sk#16, wr_order_number#17, wr_fee#18, wr_refunded_cash#19, wr_returned_date_sk#20] +Output [9]: [wr_item_sk#10, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_order_number#15, wr_fee#16, wr_refunded_cash#17, wr_returned_date_sk#18] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_order_number), IsNotNull(wr_refunded_cdemo_sk), IsNotNull(wr_returning_cdemo_sk), IsNotNull(wr_refunded_addr_sk), IsNotNull(wr_reason_sk)] ReadSchema: struct (13) ColumnarToRow [codegen id : 4] -Input [9]: [wr_item_sk#12, wr_refunded_cdemo_sk#13, wr_refunded_addr_sk#14, wr_returning_cdemo_sk#15, wr_reason_sk#16, wr_order_number#17, wr_fee#18, wr_refunded_cash#19, wr_returned_date_sk#20] +Input [9]: [wr_item_sk#10, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_order_number#15, wr_fee#16, wr_refunded_cash#17, wr_returned_date_sk#18] (14) Filter [codegen id : 4] -Input [9]: [wr_item_sk#12, wr_refunded_cdemo_sk#13, wr_refunded_addr_sk#14, wr_returning_cdemo_sk#15, wr_reason_sk#16, wr_order_number#17, wr_fee#18, wr_refunded_cash#19, wr_returned_date_sk#20] -Condition : (((((((isnotnull(wr_item_sk#12) AND isnotnull(wr_order_number#17)) AND isnotnull(wr_refunded_cdemo_sk#13)) AND isnotnull(wr_returning_cdemo_sk#15)) AND isnotnull(wr_refunded_addr_sk#14)) AND isnotnull(wr_reason_sk#16)) AND might_contain(Subquery scalar-subquery#21, [id=#22], xxhash64(wr_refunded_cdemo_sk#13, 42))) AND might_contain(Subquery scalar-subquery#23, [id=#24], xxhash64(wr_refunded_addr_sk#14, 42))) +Input [9]: [wr_item_sk#10, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_order_number#15, wr_fee#16, wr_refunded_cash#17, wr_returned_date_sk#18] +Condition : (((((((isnotnull(wr_item_sk#10) AND isnotnull(wr_order_number#15)) AND isnotnull(wr_refunded_cdemo_sk#11)) AND isnotnull(wr_returning_cdemo_sk#13)) AND isnotnull(wr_refunded_addr_sk#12)) AND isnotnull(wr_reason_sk#14)) AND might_contain(Subquery scalar-subquery#19, [id=#20], xxhash64(wr_refunded_cdemo_sk#11, 42))) AND might_contain(Subquery scalar-subquery#21, [id=#22], xxhash64(wr_refunded_addr_sk#12, 42))) (15) Project [codegen id : 4] -Output [8]: [wr_item_sk#12, wr_refunded_cdemo_sk#13, wr_refunded_addr_sk#14, wr_returning_cdemo_sk#15, wr_reason_sk#16, wr_order_number#17, wr_fee#18, wr_refunded_cash#19] -Input [9]: [wr_item_sk#12, wr_refunded_cdemo_sk#13, wr_refunded_addr_sk#14, wr_returning_cdemo_sk#15, wr_reason_sk#16, wr_order_number#17, wr_fee#18, wr_refunded_cash#19, wr_returned_date_sk#20] +Output [8]: [wr_item_sk#10, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_order_number#15, wr_fee#16, wr_refunded_cash#17] +Input [9]: [wr_item_sk#10, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_order_number#15, wr_fee#16, wr_refunded_cash#17, wr_returned_date_sk#18] (16) Exchange -Input [8]: [wr_item_sk#12, wr_refunded_cdemo_sk#13, wr_refunded_addr_sk#14, wr_returning_cdemo_sk#15, wr_reason_sk#16, wr_order_number#17, wr_fee#18, wr_refunded_cash#19] -Arguments: hashpartitioning(wr_item_sk#12, wr_order_number#17, 5), ENSURE_REQUIREMENTS, [id=#25] +Input [8]: [wr_item_sk#10, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_order_number#15, wr_fee#16, wr_refunded_cash#17] +Arguments: hashpartitioning(wr_item_sk#10, wr_order_number#15, 5), ENSURE_REQUIREMENTS, [plan_id=3] (17) Sort [codegen id : 5] -Input [8]: [wr_item_sk#12, wr_refunded_cdemo_sk#13, wr_refunded_addr_sk#14, wr_returning_cdemo_sk#15, wr_reason_sk#16, wr_order_number#17, wr_fee#18, wr_refunded_cash#19] -Arguments: [wr_item_sk#12 ASC NULLS FIRST, wr_order_number#17 ASC NULLS FIRST], false, 0 +Input [8]: [wr_item_sk#10, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_order_number#15, wr_fee#16, wr_refunded_cash#17] +Arguments: [wr_item_sk#10 ASC NULLS FIRST, wr_order_number#15 ASC NULLS FIRST], false, 0 (18) SortMergeJoin [codegen id : 7] Left keys [2]: [ws_item_sk#1, ws_order_number#3] -Right keys [2]: [wr_item_sk#12, wr_order_number#17] +Right keys [2]: [wr_item_sk#10, wr_order_number#15] Join condition: None (19) Project [codegen id : 7] -Output [10]: [ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#13, wr_refunded_addr_sk#14, wr_returning_cdemo_sk#15, wr_reason_sk#16, wr_fee#18, wr_refunded_cash#19] -Input [14]: [ws_item_sk#1, ws_order_number#3, ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_item_sk#12, wr_refunded_cdemo_sk#13, wr_refunded_addr_sk#14, wr_returning_cdemo_sk#15, wr_reason_sk#16, wr_order_number#17, wr_fee#18, wr_refunded_cash#19] +Output [10]: [ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17] +Input [14]: [ws_item_sk#1, ws_order_number#3, ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_item_sk#10, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_order_number#15, wr_fee#16, wr_refunded_cash#17] (20) Scan parquet default.customer_demographics -Output [3]: [cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] +Output [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status), IsNotNull(cd_education_status), Or(Or(And(EqualTo(cd_marital_status,M),EqualTo(cd_education_status,Advanced Degree )),And(EqualTo(cd_marital_status,S),EqualTo(cd_education_status,College ))),And(EqualTo(cd_marital_status,W),EqualTo(cd_education_status,2 yr Degree )))] ReadSchema: struct (21) ColumnarToRow [codegen id : 6] -Input [3]: [cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] +Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] (22) Filter [codegen id : 6] -Input [3]: [cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] -Condition : (((isnotnull(cd_demo_sk#26) AND isnotnull(cd_marital_status#27)) AND isnotnull(cd_education_status#28)) AND ((((cd_marital_status#27 = M) AND (cd_education_status#28 = Advanced Degree )) OR ((cd_marital_status#27 = S) AND (cd_education_status#28 = College ))) OR ((cd_marital_status#27 = W) AND (cd_education_status#28 = 2 yr Degree )))) +Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] +Condition : (((isnotnull(cd_demo_sk#23) AND isnotnull(cd_marital_status#24)) AND isnotnull(cd_education_status#25)) AND ((((cd_marital_status#24 = M) AND (cd_education_status#25 = Advanced Degree )) OR ((cd_marital_status#24 = S) AND (cd_education_status#25 = College ))) OR ((cd_marital_status#24 = W) AND (cd_education_status#25 = 2 yr Degree )))) (23) BroadcastExchange -Input [3]: [cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#29] +Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (24) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [wr_refunded_cdemo_sk#13] -Right keys [1]: [cd_demo_sk#26] -Join condition: ((((((cd_marital_status#27 = M) AND (cd_education_status#28 = Advanced Degree )) AND (ws_sales_price#5 >= 100.00)) AND (ws_sales_price#5 <= 150.00)) OR ((((cd_marital_status#27 = S) AND (cd_education_status#28 = College )) AND (ws_sales_price#5 >= 50.00)) AND (ws_sales_price#5 <= 100.00))) OR ((((cd_marital_status#27 = W) AND (cd_education_status#28 = 2 yr Degree )) AND (ws_sales_price#5 >= 150.00)) AND (ws_sales_price#5 <= 200.00))) +Left keys [1]: [wr_refunded_cdemo_sk#11] +Right keys [1]: [cd_demo_sk#23] +Join condition: ((((((cd_marital_status#24 = M) AND (cd_education_status#25 = Advanced Degree )) AND (ws_sales_price#5 >= 100.00)) AND (ws_sales_price#5 <= 150.00)) OR ((((cd_marital_status#24 = S) AND (cd_education_status#25 = College )) AND (ws_sales_price#5 >= 50.00)) AND (ws_sales_price#5 <= 100.00))) OR ((((cd_marital_status#24 = W) AND (cd_education_status#25 = 2 yr Degree )) AND (ws_sales_price#5 >= 150.00)) AND (ws_sales_price#5 <= 200.00))) (25) Project [codegen id : 7] -Output [10]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#14, wr_returning_cdemo_sk#15, wr_reason_sk#16, wr_fee#18, wr_refunded_cash#19, cd_marital_status#27, cd_education_status#28] -Input [13]: [ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#13, wr_refunded_addr_sk#14, wr_returning_cdemo_sk#15, wr_reason_sk#16, wr_fee#18, wr_refunded_cash#19, cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] +Output [10]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, cd_marital_status#24, cd_education_status#25] +Input [13]: [ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] (26) Exchange -Input [10]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#14, wr_returning_cdemo_sk#15, wr_reason_sk#16, wr_fee#18, wr_refunded_cash#19, cd_marital_status#27, cd_education_status#28] -Arguments: hashpartitioning(wr_returning_cdemo_sk#15, cd_marital_status#27, cd_education_status#28, 5), ENSURE_REQUIREMENTS, [id=#30] +Input [10]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, cd_marital_status#24, cd_education_status#25] +Arguments: hashpartitioning(wr_returning_cdemo_sk#13, cd_marital_status#24, cd_education_status#25, 5), ENSURE_REQUIREMENTS, [plan_id=5] (27) Sort [codegen id : 8] -Input [10]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#14, wr_returning_cdemo_sk#15, wr_reason_sk#16, wr_fee#18, wr_refunded_cash#19, cd_marital_status#27, cd_education_status#28] -Arguments: [wr_returning_cdemo_sk#15 ASC NULLS FIRST, cd_marital_status#27 ASC NULLS FIRST, cd_education_status#28 ASC NULLS FIRST], false, 0 +Input [10]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, cd_marital_status#24, cd_education_status#25] +Arguments: [wr_returning_cdemo_sk#13 ASC NULLS FIRST, cd_marital_status#24 ASC NULLS FIRST, cd_education_status#25 ASC NULLS FIRST], false, 0 (28) Scan parquet default.customer_demographics -Output [3]: [cd_demo_sk#31, cd_marital_status#32, cd_education_status#33] +Output [3]: [cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status), IsNotNull(cd_education_status)] ReadSchema: struct (29) ColumnarToRow [codegen id : 9] -Input [3]: [cd_demo_sk#31, cd_marital_status#32, cd_education_status#33] +Input [3]: [cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] (30) Filter [codegen id : 9] -Input [3]: [cd_demo_sk#31, cd_marital_status#32, cd_education_status#33] -Condition : ((isnotnull(cd_demo_sk#31) AND isnotnull(cd_marital_status#32)) AND isnotnull(cd_education_status#33)) +Input [3]: [cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] +Condition : ((isnotnull(cd_demo_sk#26) AND isnotnull(cd_marital_status#27)) AND isnotnull(cd_education_status#28)) (31) Exchange -Input [3]: [cd_demo_sk#31, cd_marital_status#32, cd_education_status#33] -Arguments: hashpartitioning(cd_demo_sk#31, cd_marital_status#32, cd_education_status#33, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [3]: [cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] +Arguments: hashpartitioning(cd_demo_sk#26, cd_marital_status#27, cd_education_status#28, 5), ENSURE_REQUIREMENTS, [plan_id=6] (32) Sort [codegen id : 10] -Input [3]: [cd_demo_sk#31, cd_marital_status#32, cd_education_status#33] -Arguments: [cd_demo_sk#31 ASC NULLS FIRST, cd_marital_status#32 ASC NULLS FIRST, cd_education_status#33 ASC NULLS FIRST], false, 0 +Input [3]: [cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] +Arguments: [cd_demo_sk#26 ASC NULLS FIRST, cd_marital_status#27 ASC NULLS FIRST, cd_education_status#28 ASC NULLS FIRST], false, 0 (33) SortMergeJoin [codegen id : 14] -Left keys [3]: [wr_returning_cdemo_sk#15, cd_marital_status#27, cd_education_status#28] -Right keys [3]: [cd_demo_sk#31, cd_marital_status#32, cd_education_status#33] +Left keys [3]: [wr_returning_cdemo_sk#13, cd_marital_status#24, cd_education_status#25] +Right keys [3]: [cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] Join condition: None (34) Project [codegen id : 14] -Output [7]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#14, wr_reason_sk#16, wr_fee#18, wr_refunded_cash#19] -Input [13]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#14, wr_returning_cdemo_sk#15, wr_reason_sk#16, wr_fee#18, wr_refunded_cash#19, cd_marital_status#27, cd_education_status#28, cd_demo_sk#31, cd_marital_status#32, cd_education_status#33] +Output [7]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#12, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17] +Input [13]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, cd_marital_status#24, cd_education_status#25, cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] (35) Scan parquet default.customer_address -Output [3]: [ca_address_sk#35, ca_state#36, ca_country#37] +Output [3]: [ca_address_sk#29, ca_state#30, ca_country#31] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), EqualTo(ca_country,United States), IsNotNull(ca_address_sk), Or(Or(In(ca_state, [IN,NJ,OH]),In(ca_state, [CT,KY,WI])),In(ca_state, [AR,IA,LA]))] ReadSchema: struct (36) ColumnarToRow [codegen id : 11] -Input [3]: [ca_address_sk#35, ca_state#36, ca_country#37] +Input [3]: [ca_address_sk#29, ca_state#30, ca_country#31] (37) Filter [codegen id : 11] -Input [3]: [ca_address_sk#35, ca_state#36, ca_country#37] -Condition : (((isnotnull(ca_country#37) AND (ca_country#37 = United States)) AND isnotnull(ca_address_sk#35)) AND ((ca_state#36 IN (IN,OH,NJ) OR ca_state#36 IN (WI,CT,KY)) OR ca_state#36 IN (LA,IA,AR))) +Input [3]: [ca_address_sk#29, ca_state#30, ca_country#31] +Condition : (((isnotnull(ca_country#31) AND (ca_country#31 = United States)) AND isnotnull(ca_address_sk#29)) AND ((ca_state#30 IN (IN,OH,NJ) OR ca_state#30 IN (WI,CT,KY)) OR ca_state#30 IN (LA,IA,AR))) (38) Project [codegen id : 11] -Output [2]: [ca_address_sk#35, ca_state#36] -Input [3]: [ca_address_sk#35, ca_state#36, ca_country#37] +Output [2]: [ca_address_sk#29, ca_state#30] +Input [3]: [ca_address_sk#29, ca_state#30, ca_country#31] (39) BroadcastExchange -Input [2]: [ca_address_sk#35, ca_state#36] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#38] +Input [2]: [ca_address_sk#29, ca_state#30] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] (40) BroadcastHashJoin [codegen id : 14] -Left keys [1]: [wr_refunded_addr_sk#14] -Right keys [1]: [ca_address_sk#35] -Join condition: ((((ca_state#36 IN (IN,OH,NJ) AND (ws_net_profit#6 >= 100.00)) AND (ws_net_profit#6 <= 200.00)) OR ((ca_state#36 IN (WI,CT,KY) AND (ws_net_profit#6 >= 150.00)) AND (ws_net_profit#6 <= 300.00))) OR ((ca_state#36 IN (LA,IA,AR) AND (ws_net_profit#6 >= 50.00)) AND (ws_net_profit#6 <= 250.00))) +Left keys [1]: [wr_refunded_addr_sk#12] +Right keys [1]: [ca_address_sk#29] +Join condition: ((((ca_state#30 IN (IN,OH,NJ) AND (ws_net_profit#6 >= 100.00)) AND (ws_net_profit#6 <= 200.00)) OR ((ca_state#30 IN (WI,CT,KY) AND (ws_net_profit#6 >= 150.00)) AND (ws_net_profit#6 <= 300.00))) OR ((ca_state#30 IN (LA,IA,AR) AND (ws_net_profit#6 >= 50.00)) AND (ws_net_profit#6 <= 250.00))) (41) Project [codegen id : 14] -Output [5]: [ws_quantity#4, ws_sold_date_sk#7, wr_reason_sk#16, wr_fee#18, wr_refunded_cash#19] -Input [9]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#14, wr_reason_sk#16, wr_fee#18, wr_refunded_cash#19, ca_address_sk#35, ca_state#36] +Output [5]: [ws_quantity#4, ws_sold_date_sk#7, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17] +Input [9]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#12, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, ca_address_sk#29, ca_state#30] (42) ReusedExchange [Reuses operator id: 59] -Output [1]: [d_date_sk#39] +Output [1]: [d_date_sk#32] (43) BroadcastHashJoin [codegen id : 14] Left keys [1]: [ws_sold_date_sk#7] -Right keys [1]: [d_date_sk#39] +Right keys [1]: [d_date_sk#32] Join condition: None (44) Project [codegen id : 14] -Output [4]: [ws_quantity#4, wr_reason_sk#16, wr_fee#18, wr_refunded_cash#19] -Input [6]: [ws_quantity#4, ws_sold_date_sk#7, wr_reason_sk#16, wr_fee#18, wr_refunded_cash#19, d_date_sk#39] +Output [4]: [ws_quantity#4, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17] +Input [6]: [ws_quantity#4, ws_sold_date_sk#7, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, d_date_sk#32] (45) Scan parquet default.reason -Output [2]: [r_reason_sk#40, r_reason_desc#41] +Output [2]: [r_reason_sk#33, r_reason_desc#34] Batched: true Location [not included in comparison]/{warehouse_dir}/reason] PushedFilters: [IsNotNull(r_reason_sk)] ReadSchema: struct (46) ColumnarToRow [codegen id : 13] -Input [2]: [r_reason_sk#40, r_reason_desc#41] +Input [2]: [r_reason_sk#33, r_reason_desc#34] (47) Filter [codegen id : 13] -Input [2]: [r_reason_sk#40, r_reason_desc#41] -Condition : isnotnull(r_reason_sk#40) +Input [2]: [r_reason_sk#33, r_reason_desc#34] +Condition : isnotnull(r_reason_sk#33) (48) BroadcastExchange -Input [2]: [r_reason_sk#40, r_reason_desc#41] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#42] +Input [2]: [r_reason_sk#33, r_reason_desc#34] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] (49) BroadcastHashJoin [codegen id : 14] -Left keys [1]: [wr_reason_sk#16] -Right keys [1]: [r_reason_sk#40] +Left keys [1]: [wr_reason_sk#14] +Right keys [1]: [r_reason_sk#33] Join condition: None (50) Project [codegen id : 14] -Output [4]: [ws_quantity#4, wr_fee#18, wr_refunded_cash#19, r_reason_desc#41] -Input [6]: [ws_quantity#4, wr_reason_sk#16, wr_fee#18, wr_refunded_cash#19, r_reason_sk#40, r_reason_desc#41] +Output [4]: [ws_quantity#4, wr_fee#16, wr_refunded_cash#17, r_reason_desc#34] +Input [6]: [ws_quantity#4, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, r_reason_sk#33, r_reason_desc#34] (51) HashAggregate [codegen id : 14] -Input [4]: [ws_quantity#4, wr_fee#18, wr_refunded_cash#19, r_reason_desc#41] -Keys [1]: [r_reason_desc#41] -Functions [3]: [partial_avg(ws_quantity#4), partial_avg(UnscaledValue(wr_refunded_cash#19)), partial_avg(UnscaledValue(wr_fee#18))] -Aggregate Attributes [6]: [sum#43, count#44, sum#45, count#46, sum#47, count#48] -Results [7]: [r_reason_desc#41, sum#49, count#50, sum#51, count#52, sum#53, count#54] +Input [4]: [ws_quantity#4, wr_fee#16, wr_refunded_cash#17, r_reason_desc#34] +Keys [1]: [r_reason_desc#34] +Functions [3]: [partial_avg(ws_quantity#4), partial_avg(UnscaledValue(wr_refunded_cash#17)), partial_avg(UnscaledValue(wr_fee#16))] +Aggregate Attributes [6]: [sum#35, count#36, sum#37, count#38, sum#39, count#40] +Results [7]: [r_reason_desc#34, sum#41, count#42, sum#43, count#44, sum#45, count#46] (52) Exchange -Input [7]: [r_reason_desc#41, sum#49, count#50, sum#51, count#52, sum#53, count#54] -Arguments: hashpartitioning(r_reason_desc#41, 5), ENSURE_REQUIREMENTS, [id=#55] +Input [7]: [r_reason_desc#34, sum#41, count#42, sum#43, count#44, sum#45, count#46] +Arguments: hashpartitioning(r_reason_desc#34, 5), ENSURE_REQUIREMENTS, [plan_id=9] (53) HashAggregate [codegen id : 15] -Input [7]: [r_reason_desc#41, sum#49, count#50, sum#51, count#52, sum#53, count#54] -Keys [1]: [r_reason_desc#41] -Functions [3]: [avg(ws_quantity#4), avg(UnscaledValue(wr_refunded_cash#19)), avg(UnscaledValue(wr_fee#18))] -Aggregate Attributes [3]: [avg(ws_quantity#4)#56, avg(UnscaledValue(wr_refunded_cash#19))#57, avg(UnscaledValue(wr_fee#18))#58] -Results [4]: [substr(r_reason_desc#41, 1, 20) AS substr(r_reason_desc, 1, 20)#59, avg(ws_quantity#4)#56 AS avg(ws_quantity)#60, cast((avg(UnscaledValue(wr_refunded_cash#19))#57 / 100.0) as decimal(11,6)) AS avg(wr_refunded_cash)#61, cast((avg(UnscaledValue(wr_fee#18))#58 / 100.0) as decimal(11,6)) AS avg(wr_fee)#62] +Input [7]: [r_reason_desc#34, sum#41, count#42, sum#43, count#44, sum#45, count#46] +Keys [1]: [r_reason_desc#34] +Functions [3]: [avg(ws_quantity#4), avg(UnscaledValue(wr_refunded_cash#17)), avg(UnscaledValue(wr_fee#16))] +Aggregate Attributes [3]: [avg(ws_quantity#4)#47, avg(UnscaledValue(wr_refunded_cash#17))#48, avg(UnscaledValue(wr_fee#16))#49] +Results [4]: [substr(r_reason_desc#34, 1, 20) AS substr(r_reason_desc, 1, 20)#50, avg(ws_quantity#4)#47 AS avg(ws_quantity)#51, cast((avg(UnscaledValue(wr_refunded_cash#17))#48 / 100.0) as decimal(11,6)) AS avg(wr_refunded_cash)#52, cast((avg(UnscaledValue(wr_fee#16))#49 / 100.0) as decimal(11,6)) AS avg(wr_fee)#53] (54) TakeOrderedAndProject -Input [4]: [substr(r_reason_desc, 1, 20)#59, avg(ws_quantity)#60, avg(wr_refunded_cash)#61, avg(wr_fee)#62] -Arguments: 100, [substr(r_reason_desc, 1, 20)#59 ASC NULLS FIRST, avg(ws_quantity)#60 ASC NULLS FIRST, avg(wr_refunded_cash)#61 ASC NULLS FIRST, avg(wr_fee)#62 ASC NULLS FIRST], [substr(r_reason_desc, 1, 20)#59, avg(ws_quantity)#60, avg(wr_refunded_cash)#61, avg(wr_fee)#62] +Input [4]: [substr(r_reason_desc, 1, 20)#50, avg(ws_quantity)#51, avg(wr_refunded_cash)#52, avg(wr_fee)#53] +Arguments: 100, [substr(r_reason_desc, 1, 20)#50 ASC NULLS FIRST, avg(ws_quantity)#51 ASC NULLS FIRST, avg(wr_refunded_cash)#52 ASC NULLS FIRST, avg(wr_fee)#53 ASC NULLS FIRST], [substr(r_reason_desc, 1, 20)#50, avg(ws_quantity)#51, avg(wr_refunded_cash)#52, avg(wr_fee)#53] ===== Subqueries ===== @@ -309,28 +309,28 @@ BroadcastExchange (59) (55) Scan parquet default.date_dim -Output [2]: [d_date_sk#39, d_year#63] +Output [2]: [d_date_sk#32, d_year#54] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (56) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#39, d_year#63] +Input [2]: [d_date_sk#32, d_year#54] (57) Filter [codegen id : 1] -Input [2]: [d_date_sk#39, d_year#63] -Condition : ((isnotnull(d_year#63) AND (d_year#63 = 2000)) AND isnotnull(d_date_sk#39)) +Input [2]: [d_date_sk#32, d_year#54] +Condition : ((isnotnull(d_year#54) AND (d_year#54 = 2000)) AND isnotnull(d_date_sk#32)) (58) Project [codegen id : 1] -Output [1]: [d_date_sk#39] -Input [2]: [d_date_sk#39, d_year#63] +Output [1]: [d_date_sk#32] +Input [2]: [d_date_sk#32, d_year#54] (59) BroadcastExchange -Input [1]: [d_date_sk#39] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#64] +Input [1]: [d_date_sk#32] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -Subquery:2 Hosting operator id = 14 Hosting Expression = Subquery scalar-subquery#21, [id=#22] +Subquery:2 Hosting operator id = 14 Hosting Expression = Subquery scalar-subquery#19, [id=#20] ObjectHashAggregate (66) +- Exchange (65) +- ObjectHashAggregate (64) @@ -341,42 +341,42 @@ ObjectHashAggregate (66) (60) Scan parquet default.customer_demographics -Output [3]: [cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] +Output [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status), IsNotNull(cd_education_status), Or(Or(And(EqualTo(cd_marital_status,M),EqualTo(cd_education_status,Advanced Degree )),And(EqualTo(cd_marital_status,S),EqualTo(cd_education_status,College ))),And(EqualTo(cd_marital_status,W),EqualTo(cd_education_status,2 yr Degree )))] ReadSchema: struct (61) ColumnarToRow [codegen id : 1] -Input [3]: [cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] +Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] (62) Filter [codegen id : 1] -Input [3]: [cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] -Condition : (((isnotnull(cd_demo_sk#26) AND isnotnull(cd_marital_status#27)) AND isnotnull(cd_education_status#28)) AND ((((cd_marital_status#27 = M) AND (cd_education_status#28 = Advanced Degree )) OR ((cd_marital_status#27 = S) AND (cd_education_status#28 = College ))) OR ((cd_marital_status#27 = W) AND (cd_education_status#28 = 2 yr Degree )))) +Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] +Condition : (((isnotnull(cd_demo_sk#23) AND isnotnull(cd_marital_status#24)) AND isnotnull(cd_education_status#25)) AND ((((cd_marital_status#24 = M) AND (cd_education_status#25 = Advanced Degree )) OR ((cd_marital_status#24 = S) AND (cd_education_status#25 = College ))) OR ((cd_marital_status#24 = W) AND (cd_education_status#25 = 2 yr Degree )))) (63) Project [codegen id : 1] -Output [1]: [cd_demo_sk#26] -Input [3]: [cd_demo_sk#26, cd_marital_status#27, cd_education_status#28] +Output [1]: [cd_demo_sk#23] +Input [3]: [cd_demo_sk#23, cd_marital_status#24, cd_education_status#25] (64) ObjectHashAggregate -Input [1]: [cd_demo_sk#26] +Input [1]: [cd_demo_sk#23] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(cd_demo_sk#26, 42), 159981, 1279848, 0, 0)] -Aggregate Attributes [1]: [buf#65] -Results [1]: [buf#66] +Functions [1]: [partial_bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 1279848, 0, 0)] +Aggregate Attributes [1]: [buf#55] +Results [1]: [buf#56] (65) Exchange -Input [1]: [buf#66] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#67] +Input [1]: [buf#56] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11] (66) ObjectHashAggregate -Input [1]: [buf#66] +Input [1]: [buf#56] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#26, 42), 159981, 1279848, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#26, 42), 159981, 1279848, 0, 0)#68] -Results [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#26, 42), 159981, 1279848, 0, 0)#68 AS bloomFilter#69] +Functions [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 1279848, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 1279848, 0, 0)#57] +Results [1]: [bloom_filter_agg(xxhash64(cd_demo_sk#23, 42), 159981, 1279848, 0, 0)#57 AS bloomFilter#58] -Subquery:3 Hosting operator id = 14 Hosting Expression = Subquery scalar-subquery#23, [id=#24] +Subquery:3 Hosting operator id = 14 Hosting Expression = Subquery scalar-subquery#21, [id=#22] ObjectHashAggregate (73) +- Exchange (72) +- ObjectHashAggregate (71) @@ -387,39 +387,39 @@ ObjectHashAggregate (73) (67) Scan parquet default.customer_address -Output [3]: [ca_address_sk#35, ca_state#36, ca_country#37] +Output [3]: [ca_address_sk#29, ca_state#30, ca_country#31] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), EqualTo(ca_country,United States), IsNotNull(ca_address_sk), Or(Or(In(ca_state, [IN,NJ,OH]),In(ca_state, [CT,KY,WI])),In(ca_state, [AR,IA,LA]))] ReadSchema: struct (68) ColumnarToRow [codegen id : 1] -Input [3]: [ca_address_sk#35, ca_state#36, ca_country#37] +Input [3]: [ca_address_sk#29, ca_state#30, ca_country#31] (69) Filter [codegen id : 1] -Input [3]: [ca_address_sk#35, ca_state#36, ca_country#37] -Condition : (((isnotnull(ca_country#37) AND (ca_country#37 = United States)) AND isnotnull(ca_address_sk#35)) AND ((ca_state#36 IN (IN,OH,NJ) OR ca_state#36 IN (WI,CT,KY)) OR ca_state#36 IN (LA,IA,AR))) +Input [3]: [ca_address_sk#29, ca_state#30, ca_country#31] +Condition : (((isnotnull(ca_country#31) AND (ca_country#31 = United States)) AND isnotnull(ca_address_sk#29)) AND ((ca_state#30 IN (IN,OH,NJ) OR ca_state#30 IN (WI,CT,KY)) OR ca_state#30 IN (LA,IA,AR))) (70) Project [codegen id : 1] -Output [1]: [ca_address_sk#35] -Input [3]: [ca_address_sk#35, ca_state#36, ca_country#37] +Output [1]: [ca_address_sk#29] +Input [3]: [ca_address_sk#29, ca_state#30, ca_country#31] (71) ObjectHashAggregate -Input [1]: [ca_address_sk#35] +Input [1]: [ca_address_sk#29] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#35, 42), 152837, 1222696, 0, 0)] -Aggregate Attributes [1]: [buf#70] -Results [1]: [buf#71] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#29, 42), 152837, 1222696, 0, 0)] +Aggregate Attributes [1]: [buf#59] +Results [1]: [buf#60] (72) Exchange -Input [1]: [buf#71] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#72] +Input [1]: [buf#60] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12] (73) ObjectHashAggregate -Input [1]: [buf#71] +Input [1]: [buf#60] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#35, 42), 152837, 1222696, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#35, 42), 152837, 1222696, 0, 0)#73] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#35, 42), 152837, 1222696, 0, 0)#73 AS bloomFilter#74] +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#29, 42), 152837, 1222696, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#29, 42), 152837, 1222696, 0, 0)#61] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#29, 42), 152837, 1222696, 0, 0)#61 AS bloomFilter#62] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q85/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q85/explain.txt index 6ce464ad0805e..92d777b658b50 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q85/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q85/explain.txt @@ -66,207 +66,207 @@ Condition : ((((isnotnull(ws_item_sk#1) AND isnotnull(ws_order_number#3)) AND is (4) BroadcastExchange Input [7]: [ws_item_sk#1, ws_web_page_sk#2, ws_order_number#3, ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, false] as bigint), 32) | (cast(input[2, int, false] as bigint) & 4294967295))),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, false] as bigint), 32) | (cast(input[2, int, false] as bigint) & 4294967295))),false), [plan_id=1] (5) Scan parquet default.web_returns -Output [9]: [wr_item_sk#10, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_order_number#15, wr_fee#16, wr_refunded_cash#17, wr_returned_date_sk#18] +Output [9]: [wr_item_sk#9, wr_refunded_cdemo_sk#10, wr_refunded_addr_sk#11, wr_returning_cdemo_sk#12, wr_reason_sk#13, wr_order_number#14, wr_fee#15, wr_refunded_cash#16, wr_returned_date_sk#17] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_order_number), IsNotNull(wr_refunded_cdemo_sk), IsNotNull(wr_returning_cdemo_sk), IsNotNull(wr_refunded_addr_sk), IsNotNull(wr_reason_sk)] ReadSchema: struct (6) ColumnarToRow -Input [9]: [wr_item_sk#10, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_order_number#15, wr_fee#16, wr_refunded_cash#17, wr_returned_date_sk#18] +Input [9]: [wr_item_sk#9, wr_refunded_cdemo_sk#10, wr_refunded_addr_sk#11, wr_returning_cdemo_sk#12, wr_reason_sk#13, wr_order_number#14, wr_fee#15, wr_refunded_cash#16, wr_returned_date_sk#17] (7) Filter -Input [9]: [wr_item_sk#10, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_order_number#15, wr_fee#16, wr_refunded_cash#17, wr_returned_date_sk#18] -Condition : (((((isnotnull(wr_item_sk#10) AND isnotnull(wr_order_number#15)) AND isnotnull(wr_refunded_cdemo_sk#11)) AND isnotnull(wr_returning_cdemo_sk#13)) AND isnotnull(wr_refunded_addr_sk#12)) AND isnotnull(wr_reason_sk#14)) +Input [9]: [wr_item_sk#9, wr_refunded_cdemo_sk#10, wr_refunded_addr_sk#11, wr_returning_cdemo_sk#12, wr_reason_sk#13, wr_order_number#14, wr_fee#15, wr_refunded_cash#16, wr_returned_date_sk#17] +Condition : (((((isnotnull(wr_item_sk#9) AND isnotnull(wr_order_number#14)) AND isnotnull(wr_refunded_cdemo_sk#10)) AND isnotnull(wr_returning_cdemo_sk#12)) AND isnotnull(wr_refunded_addr_sk#11)) AND isnotnull(wr_reason_sk#13)) (8) Project -Output [8]: [wr_item_sk#10, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_order_number#15, wr_fee#16, wr_refunded_cash#17] -Input [9]: [wr_item_sk#10, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_order_number#15, wr_fee#16, wr_refunded_cash#17, wr_returned_date_sk#18] +Output [8]: [wr_item_sk#9, wr_refunded_cdemo_sk#10, wr_refunded_addr_sk#11, wr_returning_cdemo_sk#12, wr_reason_sk#13, wr_order_number#14, wr_fee#15, wr_refunded_cash#16] +Input [9]: [wr_item_sk#9, wr_refunded_cdemo_sk#10, wr_refunded_addr_sk#11, wr_returning_cdemo_sk#12, wr_reason_sk#13, wr_order_number#14, wr_fee#15, wr_refunded_cash#16, wr_returned_date_sk#17] (9) BroadcastHashJoin [codegen id : 8] Left keys [2]: [ws_item_sk#1, ws_order_number#3] -Right keys [2]: [wr_item_sk#10, wr_order_number#15] +Right keys [2]: [wr_item_sk#9, wr_order_number#14] Join condition: None (10) Project [codegen id : 8] -Output [11]: [ws_web_page_sk#2, ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17] -Input [15]: [ws_item_sk#1, ws_web_page_sk#2, ws_order_number#3, ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_item_sk#10, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_order_number#15, wr_fee#16, wr_refunded_cash#17] +Output [11]: [ws_web_page_sk#2, ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#10, wr_refunded_addr_sk#11, wr_returning_cdemo_sk#12, wr_reason_sk#13, wr_fee#15, wr_refunded_cash#16] +Input [15]: [ws_item_sk#1, ws_web_page_sk#2, ws_order_number#3, ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_item_sk#9, wr_refunded_cdemo_sk#10, wr_refunded_addr_sk#11, wr_returning_cdemo_sk#12, wr_reason_sk#13, wr_order_number#14, wr_fee#15, wr_refunded_cash#16] (11) Scan parquet default.web_page -Output [1]: [wp_web_page_sk#19] +Output [1]: [wp_web_page_sk#18] Batched: true Location [not included in comparison]/{warehouse_dir}/web_page] PushedFilters: [IsNotNull(wp_web_page_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [1]: [wp_web_page_sk#19] +Input [1]: [wp_web_page_sk#18] (13) Filter [codegen id : 2] -Input [1]: [wp_web_page_sk#19] -Condition : isnotnull(wp_web_page_sk#19) +Input [1]: [wp_web_page_sk#18] +Condition : isnotnull(wp_web_page_sk#18) (14) BroadcastExchange -Input [1]: [wp_web_page_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#20] +Input [1]: [wp_web_page_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ws_web_page_sk#2] -Right keys [1]: [wp_web_page_sk#19] +Right keys [1]: [wp_web_page_sk#18] Join condition: None (16) Project [codegen id : 8] -Output [10]: [ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17] -Input [12]: [ws_web_page_sk#2, ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, wp_web_page_sk#19] +Output [10]: [ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#10, wr_refunded_addr_sk#11, wr_returning_cdemo_sk#12, wr_reason_sk#13, wr_fee#15, wr_refunded_cash#16] +Input [12]: [ws_web_page_sk#2, ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#10, wr_refunded_addr_sk#11, wr_returning_cdemo_sk#12, wr_reason_sk#13, wr_fee#15, wr_refunded_cash#16, wp_web_page_sk#18] (17) Scan parquet default.customer_demographics -Output [3]: [cd_demo_sk#21, cd_marital_status#22, cd_education_status#23] +Output [3]: [cd_demo_sk#19, cd_marital_status#20, cd_education_status#21] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status), IsNotNull(cd_education_status), Or(Or(And(EqualTo(cd_marital_status,M),EqualTo(cd_education_status,Advanced Degree )),And(EqualTo(cd_marital_status,S),EqualTo(cd_education_status,College ))),And(EqualTo(cd_marital_status,W),EqualTo(cd_education_status,2 yr Degree )))] ReadSchema: struct (18) ColumnarToRow [codegen id : 3] -Input [3]: [cd_demo_sk#21, cd_marital_status#22, cd_education_status#23] +Input [3]: [cd_demo_sk#19, cd_marital_status#20, cd_education_status#21] (19) Filter [codegen id : 3] -Input [3]: [cd_demo_sk#21, cd_marital_status#22, cd_education_status#23] -Condition : (((isnotnull(cd_demo_sk#21) AND isnotnull(cd_marital_status#22)) AND isnotnull(cd_education_status#23)) AND ((((cd_marital_status#22 = M) AND (cd_education_status#23 = Advanced Degree )) OR ((cd_marital_status#22 = S) AND (cd_education_status#23 = College ))) OR ((cd_marital_status#22 = W) AND (cd_education_status#23 = 2 yr Degree )))) +Input [3]: [cd_demo_sk#19, cd_marital_status#20, cd_education_status#21] +Condition : (((isnotnull(cd_demo_sk#19) AND isnotnull(cd_marital_status#20)) AND isnotnull(cd_education_status#21)) AND ((((cd_marital_status#20 = M) AND (cd_education_status#21 = Advanced Degree )) OR ((cd_marital_status#20 = S) AND (cd_education_status#21 = College ))) OR ((cd_marital_status#20 = W) AND (cd_education_status#21 = 2 yr Degree )))) (20) BroadcastExchange -Input [3]: [cd_demo_sk#21, cd_marital_status#22, cd_education_status#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#24] +Input [3]: [cd_demo_sk#19, cd_marital_status#20, cd_education_status#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [wr_refunded_cdemo_sk#11] -Right keys [1]: [cd_demo_sk#21] -Join condition: ((((((cd_marital_status#22 = M) AND (cd_education_status#23 = Advanced Degree )) AND (ws_sales_price#5 >= 100.00)) AND (ws_sales_price#5 <= 150.00)) OR ((((cd_marital_status#22 = S) AND (cd_education_status#23 = College )) AND (ws_sales_price#5 >= 50.00)) AND (ws_sales_price#5 <= 100.00))) OR ((((cd_marital_status#22 = W) AND (cd_education_status#23 = 2 yr Degree )) AND (ws_sales_price#5 >= 150.00)) AND (ws_sales_price#5 <= 200.00))) +Left keys [1]: [wr_refunded_cdemo_sk#10] +Right keys [1]: [cd_demo_sk#19] +Join condition: ((((((cd_marital_status#20 = M) AND (cd_education_status#21 = Advanced Degree )) AND (ws_sales_price#5 >= 100.00)) AND (ws_sales_price#5 <= 150.00)) OR ((((cd_marital_status#20 = S) AND (cd_education_status#21 = College )) AND (ws_sales_price#5 >= 50.00)) AND (ws_sales_price#5 <= 100.00))) OR ((((cd_marital_status#20 = W) AND (cd_education_status#21 = 2 yr Degree )) AND (ws_sales_price#5 >= 150.00)) AND (ws_sales_price#5 <= 200.00))) (22) Project [codegen id : 8] -Output [10]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, cd_marital_status#22, cd_education_status#23] -Input [13]: [ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#11, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, cd_demo_sk#21, cd_marital_status#22, cd_education_status#23] +Output [10]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#11, wr_returning_cdemo_sk#12, wr_reason_sk#13, wr_fee#15, wr_refunded_cash#16, cd_marital_status#20, cd_education_status#21] +Input [13]: [ws_quantity#4, ws_sales_price#5, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_cdemo_sk#10, wr_refunded_addr_sk#11, wr_returning_cdemo_sk#12, wr_reason_sk#13, wr_fee#15, wr_refunded_cash#16, cd_demo_sk#19, cd_marital_status#20, cd_education_status#21] (23) Scan parquet default.customer_demographics -Output [3]: [cd_demo_sk#25, cd_marital_status#26, cd_education_status#27] +Output [3]: [cd_demo_sk#22, cd_marital_status#23, cd_education_status#24] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status), IsNotNull(cd_education_status)] ReadSchema: struct (24) ColumnarToRow [codegen id : 4] -Input [3]: [cd_demo_sk#25, cd_marital_status#26, cd_education_status#27] +Input [3]: [cd_demo_sk#22, cd_marital_status#23, cd_education_status#24] (25) Filter [codegen id : 4] -Input [3]: [cd_demo_sk#25, cd_marital_status#26, cd_education_status#27] -Condition : ((isnotnull(cd_demo_sk#25) AND isnotnull(cd_marital_status#26)) AND isnotnull(cd_education_status#27)) +Input [3]: [cd_demo_sk#22, cd_marital_status#23, cd_education_status#24] +Condition : ((isnotnull(cd_demo_sk#22) AND isnotnull(cd_marital_status#23)) AND isnotnull(cd_education_status#24)) (26) BroadcastExchange -Input [3]: [cd_demo_sk#25, cd_marital_status#26, cd_education_status#27] -Arguments: HashedRelationBroadcastMode(List(input[0, int, false], input[1, string, false], input[2, string, false]),false), [id=#28] +Input [3]: [cd_demo_sk#22, cd_marital_status#23, cd_education_status#24] +Arguments: HashedRelationBroadcastMode(List(input[0, int, false], input[1, string, false], input[2, string, false]),false), [plan_id=4] (27) BroadcastHashJoin [codegen id : 8] -Left keys [3]: [wr_returning_cdemo_sk#13, cd_marital_status#22, cd_education_status#23] -Right keys [3]: [cd_demo_sk#25, cd_marital_status#26, cd_education_status#27] +Left keys [3]: [wr_returning_cdemo_sk#12, cd_marital_status#20, cd_education_status#21] +Right keys [3]: [cd_demo_sk#22, cd_marital_status#23, cd_education_status#24] Join condition: None (28) Project [codegen id : 8] -Output [7]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#12, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17] -Input [13]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#12, wr_returning_cdemo_sk#13, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, cd_marital_status#22, cd_education_status#23, cd_demo_sk#25, cd_marital_status#26, cd_education_status#27] +Output [7]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#11, wr_reason_sk#13, wr_fee#15, wr_refunded_cash#16] +Input [13]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#11, wr_returning_cdemo_sk#12, wr_reason_sk#13, wr_fee#15, wr_refunded_cash#16, cd_marital_status#20, cd_education_status#21, cd_demo_sk#22, cd_marital_status#23, cd_education_status#24] (29) Scan parquet default.customer_address -Output [3]: [ca_address_sk#29, ca_state#30, ca_country#31] +Output [3]: [ca_address_sk#25, ca_state#26, ca_country#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_country), EqualTo(ca_country,United States), IsNotNull(ca_address_sk), Or(Or(In(ca_state, [IN,NJ,OH]),In(ca_state, [CT,KY,WI])),In(ca_state, [AR,IA,LA]))] ReadSchema: struct (30) ColumnarToRow [codegen id : 5] -Input [3]: [ca_address_sk#29, ca_state#30, ca_country#31] +Input [3]: [ca_address_sk#25, ca_state#26, ca_country#27] (31) Filter [codegen id : 5] -Input [3]: [ca_address_sk#29, ca_state#30, ca_country#31] -Condition : (((isnotnull(ca_country#31) AND (ca_country#31 = United States)) AND isnotnull(ca_address_sk#29)) AND ((ca_state#30 IN (IN,OH,NJ) OR ca_state#30 IN (WI,CT,KY)) OR ca_state#30 IN (LA,IA,AR))) +Input [3]: [ca_address_sk#25, ca_state#26, ca_country#27] +Condition : (((isnotnull(ca_country#27) AND (ca_country#27 = United States)) AND isnotnull(ca_address_sk#25)) AND ((ca_state#26 IN (IN,OH,NJ) OR ca_state#26 IN (WI,CT,KY)) OR ca_state#26 IN (LA,IA,AR))) (32) Project [codegen id : 5] -Output [2]: [ca_address_sk#29, ca_state#30] -Input [3]: [ca_address_sk#29, ca_state#30, ca_country#31] +Output [2]: [ca_address_sk#25, ca_state#26] +Input [3]: [ca_address_sk#25, ca_state#26, ca_country#27] (33) BroadcastExchange -Input [2]: [ca_address_sk#29, ca_state#30] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#32] +Input [2]: [ca_address_sk#25, ca_state#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [wr_refunded_addr_sk#12] -Right keys [1]: [ca_address_sk#29] -Join condition: ((((ca_state#30 IN (IN,OH,NJ) AND (ws_net_profit#6 >= 100.00)) AND (ws_net_profit#6 <= 200.00)) OR ((ca_state#30 IN (WI,CT,KY) AND (ws_net_profit#6 >= 150.00)) AND (ws_net_profit#6 <= 300.00))) OR ((ca_state#30 IN (LA,IA,AR) AND (ws_net_profit#6 >= 50.00)) AND (ws_net_profit#6 <= 250.00))) +Left keys [1]: [wr_refunded_addr_sk#11] +Right keys [1]: [ca_address_sk#25] +Join condition: ((((ca_state#26 IN (IN,OH,NJ) AND (ws_net_profit#6 >= 100.00)) AND (ws_net_profit#6 <= 200.00)) OR ((ca_state#26 IN (WI,CT,KY) AND (ws_net_profit#6 >= 150.00)) AND (ws_net_profit#6 <= 300.00))) OR ((ca_state#26 IN (LA,IA,AR) AND (ws_net_profit#6 >= 50.00)) AND (ws_net_profit#6 <= 250.00))) (35) Project [codegen id : 8] -Output [5]: [ws_quantity#4, ws_sold_date_sk#7, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17] -Input [9]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#12, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, ca_address_sk#29, ca_state#30] +Output [5]: [ws_quantity#4, ws_sold_date_sk#7, wr_reason_sk#13, wr_fee#15, wr_refunded_cash#16] +Input [9]: [ws_quantity#4, ws_net_profit#6, ws_sold_date_sk#7, wr_refunded_addr_sk#11, wr_reason_sk#13, wr_fee#15, wr_refunded_cash#16, ca_address_sk#25, ca_state#26] (36) ReusedExchange [Reuses operator id: 53] -Output [1]: [d_date_sk#33] +Output [1]: [d_date_sk#28] (37) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ws_sold_date_sk#7] -Right keys [1]: [d_date_sk#33] +Right keys [1]: [d_date_sk#28] Join condition: None (38) Project [codegen id : 8] -Output [4]: [ws_quantity#4, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17] -Input [6]: [ws_quantity#4, ws_sold_date_sk#7, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, d_date_sk#33] +Output [4]: [ws_quantity#4, wr_reason_sk#13, wr_fee#15, wr_refunded_cash#16] +Input [6]: [ws_quantity#4, ws_sold_date_sk#7, wr_reason_sk#13, wr_fee#15, wr_refunded_cash#16, d_date_sk#28] (39) Scan parquet default.reason -Output [2]: [r_reason_sk#34, r_reason_desc#35] +Output [2]: [r_reason_sk#29, r_reason_desc#30] Batched: true Location [not included in comparison]/{warehouse_dir}/reason] PushedFilters: [IsNotNull(r_reason_sk)] ReadSchema: struct (40) ColumnarToRow [codegen id : 7] -Input [2]: [r_reason_sk#34, r_reason_desc#35] +Input [2]: [r_reason_sk#29, r_reason_desc#30] (41) Filter [codegen id : 7] -Input [2]: [r_reason_sk#34, r_reason_desc#35] -Condition : isnotnull(r_reason_sk#34) +Input [2]: [r_reason_sk#29, r_reason_desc#30] +Condition : isnotnull(r_reason_sk#29) (42) BroadcastExchange -Input [2]: [r_reason_sk#34, r_reason_desc#35] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#36] +Input [2]: [r_reason_sk#29, r_reason_desc#30] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] (43) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [wr_reason_sk#14] -Right keys [1]: [r_reason_sk#34] +Left keys [1]: [wr_reason_sk#13] +Right keys [1]: [r_reason_sk#29] Join condition: None (44) Project [codegen id : 8] -Output [4]: [ws_quantity#4, wr_fee#16, wr_refunded_cash#17, r_reason_desc#35] -Input [6]: [ws_quantity#4, wr_reason_sk#14, wr_fee#16, wr_refunded_cash#17, r_reason_sk#34, r_reason_desc#35] +Output [4]: [ws_quantity#4, wr_fee#15, wr_refunded_cash#16, r_reason_desc#30] +Input [6]: [ws_quantity#4, wr_reason_sk#13, wr_fee#15, wr_refunded_cash#16, r_reason_sk#29, r_reason_desc#30] (45) HashAggregate [codegen id : 8] -Input [4]: [ws_quantity#4, wr_fee#16, wr_refunded_cash#17, r_reason_desc#35] -Keys [1]: [r_reason_desc#35] -Functions [3]: [partial_avg(ws_quantity#4), partial_avg(UnscaledValue(wr_refunded_cash#17)), partial_avg(UnscaledValue(wr_fee#16))] -Aggregate Attributes [6]: [sum#37, count#38, sum#39, count#40, sum#41, count#42] -Results [7]: [r_reason_desc#35, sum#43, count#44, sum#45, count#46, sum#47, count#48] +Input [4]: [ws_quantity#4, wr_fee#15, wr_refunded_cash#16, r_reason_desc#30] +Keys [1]: [r_reason_desc#30] +Functions [3]: [partial_avg(ws_quantity#4), partial_avg(UnscaledValue(wr_refunded_cash#16)), partial_avg(UnscaledValue(wr_fee#15))] +Aggregate Attributes [6]: [sum#31, count#32, sum#33, count#34, sum#35, count#36] +Results [7]: [r_reason_desc#30, sum#37, count#38, sum#39, count#40, sum#41, count#42] (46) Exchange -Input [7]: [r_reason_desc#35, sum#43, count#44, sum#45, count#46, sum#47, count#48] -Arguments: hashpartitioning(r_reason_desc#35, 5), ENSURE_REQUIREMENTS, [id=#49] +Input [7]: [r_reason_desc#30, sum#37, count#38, sum#39, count#40, sum#41, count#42] +Arguments: hashpartitioning(r_reason_desc#30, 5), ENSURE_REQUIREMENTS, [plan_id=7] (47) HashAggregate [codegen id : 9] -Input [7]: [r_reason_desc#35, sum#43, count#44, sum#45, count#46, sum#47, count#48] -Keys [1]: [r_reason_desc#35] -Functions [3]: [avg(ws_quantity#4), avg(UnscaledValue(wr_refunded_cash#17)), avg(UnscaledValue(wr_fee#16))] -Aggregate Attributes [3]: [avg(ws_quantity#4)#50, avg(UnscaledValue(wr_refunded_cash#17))#51, avg(UnscaledValue(wr_fee#16))#52] -Results [4]: [substr(r_reason_desc#35, 1, 20) AS substr(r_reason_desc, 1, 20)#53, avg(ws_quantity#4)#50 AS avg(ws_quantity)#54, cast((avg(UnscaledValue(wr_refunded_cash#17))#51 / 100.0) as decimal(11,6)) AS avg(wr_refunded_cash)#55, cast((avg(UnscaledValue(wr_fee#16))#52 / 100.0) as decimal(11,6)) AS avg(wr_fee)#56] +Input [7]: [r_reason_desc#30, sum#37, count#38, sum#39, count#40, sum#41, count#42] +Keys [1]: [r_reason_desc#30] +Functions [3]: [avg(ws_quantity#4), avg(UnscaledValue(wr_refunded_cash#16)), avg(UnscaledValue(wr_fee#15))] +Aggregate Attributes [3]: [avg(ws_quantity#4)#43, avg(UnscaledValue(wr_refunded_cash#16))#44, avg(UnscaledValue(wr_fee#15))#45] +Results [4]: [substr(r_reason_desc#30, 1, 20) AS substr(r_reason_desc, 1, 20)#46, avg(ws_quantity#4)#43 AS avg(ws_quantity)#47, cast((avg(UnscaledValue(wr_refunded_cash#16))#44 / 100.0) as decimal(11,6)) AS avg(wr_refunded_cash)#48, cast((avg(UnscaledValue(wr_fee#15))#45 / 100.0) as decimal(11,6)) AS avg(wr_fee)#49] (48) TakeOrderedAndProject -Input [4]: [substr(r_reason_desc, 1, 20)#53, avg(ws_quantity)#54, avg(wr_refunded_cash)#55, avg(wr_fee)#56] -Arguments: 100, [substr(r_reason_desc, 1, 20)#53 ASC NULLS FIRST, avg(ws_quantity)#54 ASC NULLS FIRST, avg(wr_refunded_cash)#55 ASC NULLS FIRST, avg(wr_fee)#56 ASC NULLS FIRST], [substr(r_reason_desc, 1, 20)#53, avg(ws_quantity)#54, avg(wr_refunded_cash)#55, avg(wr_fee)#56] +Input [4]: [substr(r_reason_desc, 1, 20)#46, avg(ws_quantity)#47, avg(wr_refunded_cash)#48, avg(wr_fee)#49] +Arguments: 100, [substr(r_reason_desc, 1, 20)#46 ASC NULLS FIRST, avg(ws_quantity)#47 ASC NULLS FIRST, avg(wr_refunded_cash)#48 ASC NULLS FIRST, avg(wr_fee)#49 ASC NULLS FIRST], [substr(r_reason_desc, 1, 20)#46, avg(ws_quantity)#47, avg(wr_refunded_cash)#48, avg(wr_fee)#49] ===== Subqueries ===== @@ -279,25 +279,25 @@ BroadcastExchange (53) (49) Scan parquet default.date_dim -Output [2]: [d_date_sk#33, d_year#57] +Output [2]: [d_date_sk#28, d_year#50] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (50) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#33, d_year#57] +Input [2]: [d_date_sk#28, d_year#50] (51) Filter [codegen id : 1] -Input [2]: [d_date_sk#33, d_year#57] -Condition : ((isnotnull(d_year#57) AND (d_year#57 = 2000)) AND isnotnull(d_date_sk#33)) +Input [2]: [d_date_sk#28, d_year#50] +Condition : ((isnotnull(d_year#50) AND (d_year#50 = 2000)) AND isnotnull(d_date_sk#28)) (52) Project [codegen id : 1] -Output [1]: [d_date_sk#33] -Input [2]: [d_date_sk#33, d_year#57] +Output [1]: [d_date_sk#28] +Input [2]: [d_date_sk#28, d_year#50] (53) BroadcastExchange -Input [1]: [d_date_sk#33] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#58] +Input [1]: [d_date_sk#28] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q86.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q86.sf100/explain.txt index 0cc089ebeb840..10251e779e817 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q86.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q86.sf100/explain.txt @@ -65,7 +65,7 @@ Condition : isnotnull(i_item_sk#6) (10) BroadcastExchange Input [3]: [i_item_sk#6, i_class#7, i_category#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ws_item_sk#1] @@ -78,45 +78,45 @@ Input [5]: [ws_item_sk#1, ws_net_paid#2, i_item_sk#6, i_class#7, i_category#8] (13) Expand [codegen id : 3] Input [3]: [ws_net_paid#2, i_category#8, i_class#7] -Arguments: [[ws_net_paid#2, i_category#8, i_class#7, 0], [ws_net_paid#2, i_category#8, null, 1], [ws_net_paid#2, null, null, 3]], [ws_net_paid#2, i_category#10, i_class#11, spark_grouping_id#12] +Arguments: [[ws_net_paid#2, i_category#8, i_class#7, 0], [ws_net_paid#2, i_category#8, null, 1], [ws_net_paid#2, null, null, 3]], [ws_net_paid#2, i_category#9, i_class#10, spark_grouping_id#11] (14) HashAggregate [codegen id : 3] -Input [4]: [ws_net_paid#2, i_category#10, i_class#11, spark_grouping_id#12] -Keys [3]: [i_category#10, i_class#11, spark_grouping_id#12] +Input [4]: [ws_net_paid#2, i_category#9, i_class#10, spark_grouping_id#11] +Keys [3]: [i_category#9, i_class#10, spark_grouping_id#11] Functions [1]: [partial_sum(UnscaledValue(ws_net_paid#2))] -Aggregate Attributes [1]: [sum#13] -Results [4]: [i_category#10, i_class#11, spark_grouping_id#12, sum#14] +Aggregate Attributes [1]: [sum#12] +Results [4]: [i_category#9, i_class#10, spark_grouping_id#11, sum#13] (15) Exchange -Input [4]: [i_category#10, i_class#11, spark_grouping_id#12, sum#14] -Arguments: hashpartitioning(i_category#10, i_class#11, spark_grouping_id#12, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [i_category#9, i_class#10, spark_grouping_id#11, sum#13] +Arguments: hashpartitioning(i_category#9, i_class#10, spark_grouping_id#11, 5), ENSURE_REQUIREMENTS, [plan_id=2] (16) HashAggregate [codegen id : 4] -Input [4]: [i_category#10, i_class#11, spark_grouping_id#12, sum#14] -Keys [3]: [i_category#10, i_class#11, spark_grouping_id#12] +Input [4]: [i_category#9, i_class#10, spark_grouping_id#11, sum#13] +Keys [3]: [i_category#9, i_class#10, spark_grouping_id#11] Functions [1]: [sum(UnscaledValue(ws_net_paid#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#16] -Results [7]: [MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#16,17,2) AS total_sum#17, i_category#10, i_class#11, (cast((shiftright(spark_grouping_id#12, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#12, 0) & 1) as tinyint)) AS lochierarchy#18, (cast((shiftright(spark_grouping_id#12, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#12, 0) & 1) as tinyint)) AS _w1#19, CASE WHEN (cast((shiftright(spark_grouping_id#12, 0) & 1) as tinyint) = 0) THEN i_category#10 END AS _w2#20, MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#16,17,2) AS _w3#21] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#14] +Results [7]: [MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#14,17,2) AS total_sum#15, i_category#9, i_class#10, (cast((shiftright(spark_grouping_id#11, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#11, 0) & 1) as tinyint)) AS lochierarchy#16, (cast((shiftright(spark_grouping_id#11, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#11, 0) & 1) as tinyint)) AS _w1#17, CASE WHEN (cast((shiftright(spark_grouping_id#11, 0) & 1) as tinyint) = 0) THEN i_category#9 END AS _w2#18, MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#14,17,2) AS _w3#19] (17) Exchange -Input [7]: [total_sum#17, i_category#10, i_class#11, lochierarchy#18, _w1#19, _w2#20, _w3#21] -Arguments: hashpartitioning(_w1#19, _w2#20, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [7]: [total_sum#15, i_category#9, i_class#10, lochierarchy#16, _w1#17, _w2#18, _w3#19] +Arguments: hashpartitioning(_w1#17, _w2#18, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) Sort [codegen id : 5] -Input [7]: [total_sum#17, i_category#10, i_class#11, lochierarchy#18, _w1#19, _w2#20, _w3#21] -Arguments: [_w1#19 ASC NULLS FIRST, _w2#20 ASC NULLS FIRST, _w3#21 DESC NULLS LAST], false, 0 +Input [7]: [total_sum#15, i_category#9, i_class#10, lochierarchy#16, _w1#17, _w2#18, _w3#19] +Arguments: [_w1#17 ASC NULLS FIRST, _w2#18 ASC NULLS FIRST, _w3#19 DESC NULLS LAST], false, 0 (19) Window -Input [7]: [total_sum#17, i_category#10, i_class#11, lochierarchy#18, _w1#19, _w2#20, _w3#21] -Arguments: [rank(_w3#21) windowspecdefinition(_w1#19, _w2#20, _w3#21 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#23], [_w1#19, _w2#20], [_w3#21 DESC NULLS LAST] +Input [7]: [total_sum#15, i_category#9, i_class#10, lochierarchy#16, _w1#17, _w2#18, _w3#19] +Arguments: [rank(_w3#19) windowspecdefinition(_w1#17, _w2#18, _w3#19 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#20], [_w1#17, _w2#18], [_w3#19 DESC NULLS LAST] (20) Project [codegen id : 6] -Output [5]: [total_sum#17, i_category#10, i_class#11, lochierarchy#18, rank_within_parent#23] -Input [8]: [total_sum#17, i_category#10, i_class#11, lochierarchy#18, _w1#19, _w2#20, _w3#21, rank_within_parent#23] +Output [5]: [total_sum#15, i_category#9, i_class#10, lochierarchy#16, rank_within_parent#20] +Input [8]: [total_sum#15, i_category#9, i_class#10, lochierarchy#16, _w1#17, _w2#18, _w3#19, rank_within_parent#20] (21) TakeOrderedAndProject -Input [5]: [total_sum#17, i_category#10, i_class#11, lochierarchy#18, rank_within_parent#23] -Arguments: 100, [lochierarchy#18 DESC NULLS LAST, CASE WHEN (lochierarchy#18 = 0) THEN i_category#10 END ASC NULLS FIRST, rank_within_parent#23 ASC NULLS FIRST], [total_sum#17, i_category#10, i_class#11, lochierarchy#18, rank_within_parent#23] +Input [5]: [total_sum#15, i_category#9, i_class#10, lochierarchy#16, rank_within_parent#20] +Arguments: 100, [lochierarchy#16 DESC NULLS LAST, CASE WHEN (lochierarchy#16 = 0) THEN i_category#9 END ASC NULLS FIRST, rank_within_parent#20 ASC NULLS FIRST], [total_sum#15, i_category#9, i_class#10, lochierarchy#16, rank_within_parent#20] ===== Subqueries ===== @@ -129,25 +129,25 @@ BroadcastExchange (26) (22) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_month_seq#24] +Output [2]: [d_date_sk#5, d_month_seq#21] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#24] +Input [2]: [d_date_sk#5, d_month_seq#21] (24) Filter [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#24] -Condition : (((isnotnull(d_month_seq#24) AND (d_month_seq#24 >= 1200)) AND (d_month_seq#24 <= 1211)) AND isnotnull(d_date_sk#5)) +Input [2]: [d_date_sk#5, d_month_seq#21] +Condition : (((isnotnull(d_month_seq#21) AND (d_month_seq#21 >= 1200)) AND (d_month_seq#21 <= 1211)) AND isnotnull(d_date_sk#5)) (25) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_month_seq#24] +Input [2]: [d_date_sk#5, d_month_seq#21] (26) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q86/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q86/explain.txt index 0cc089ebeb840..10251e779e817 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q86/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q86/explain.txt @@ -65,7 +65,7 @@ Condition : isnotnull(i_item_sk#6) (10) BroadcastExchange Input [3]: [i_item_sk#6, i_class#7, i_category#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ws_item_sk#1] @@ -78,45 +78,45 @@ Input [5]: [ws_item_sk#1, ws_net_paid#2, i_item_sk#6, i_class#7, i_category#8] (13) Expand [codegen id : 3] Input [3]: [ws_net_paid#2, i_category#8, i_class#7] -Arguments: [[ws_net_paid#2, i_category#8, i_class#7, 0], [ws_net_paid#2, i_category#8, null, 1], [ws_net_paid#2, null, null, 3]], [ws_net_paid#2, i_category#10, i_class#11, spark_grouping_id#12] +Arguments: [[ws_net_paid#2, i_category#8, i_class#7, 0], [ws_net_paid#2, i_category#8, null, 1], [ws_net_paid#2, null, null, 3]], [ws_net_paid#2, i_category#9, i_class#10, spark_grouping_id#11] (14) HashAggregate [codegen id : 3] -Input [4]: [ws_net_paid#2, i_category#10, i_class#11, spark_grouping_id#12] -Keys [3]: [i_category#10, i_class#11, spark_grouping_id#12] +Input [4]: [ws_net_paid#2, i_category#9, i_class#10, spark_grouping_id#11] +Keys [3]: [i_category#9, i_class#10, spark_grouping_id#11] Functions [1]: [partial_sum(UnscaledValue(ws_net_paid#2))] -Aggregate Attributes [1]: [sum#13] -Results [4]: [i_category#10, i_class#11, spark_grouping_id#12, sum#14] +Aggregate Attributes [1]: [sum#12] +Results [4]: [i_category#9, i_class#10, spark_grouping_id#11, sum#13] (15) Exchange -Input [4]: [i_category#10, i_class#11, spark_grouping_id#12, sum#14] -Arguments: hashpartitioning(i_category#10, i_class#11, spark_grouping_id#12, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [i_category#9, i_class#10, spark_grouping_id#11, sum#13] +Arguments: hashpartitioning(i_category#9, i_class#10, spark_grouping_id#11, 5), ENSURE_REQUIREMENTS, [plan_id=2] (16) HashAggregate [codegen id : 4] -Input [4]: [i_category#10, i_class#11, spark_grouping_id#12, sum#14] -Keys [3]: [i_category#10, i_class#11, spark_grouping_id#12] +Input [4]: [i_category#9, i_class#10, spark_grouping_id#11, sum#13] +Keys [3]: [i_category#9, i_class#10, spark_grouping_id#11] Functions [1]: [sum(UnscaledValue(ws_net_paid#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#16] -Results [7]: [MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#16,17,2) AS total_sum#17, i_category#10, i_class#11, (cast((shiftright(spark_grouping_id#12, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#12, 0) & 1) as tinyint)) AS lochierarchy#18, (cast((shiftright(spark_grouping_id#12, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#12, 0) & 1) as tinyint)) AS _w1#19, CASE WHEN (cast((shiftright(spark_grouping_id#12, 0) & 1) as tinyint) = 0) THEN i_category#10 END AS _w2#20, MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#16,17,2) AS _w3#21] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#14] +Results [7]: [MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#14,17,2) AS total_sum#15, i_category#9, i_class#10, (cast((shiftright(spark_grouping_id#11, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#11, 0) & 1) as tinyint)) AS lochierarchy#16, (cast((shiftright(spark_grouping_id#11, 1) & 1) as tinyint) + cast((shiftright(spark_grouping_id#11, 0) & 1) as tinyint)) AS _w1#17, CASE WHEN (cast((shiftright(spark_grouping_id#11, 0) & 1) as tinyint) = 0) THEN i_category#9 END AS _w2#18, MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#14,17,2) AS _w3#19] (17) Exchange -Input [7]: [total_sum#17, i_category#10, i_class#11, lochierarchy#18, _w1#19, _w2#20, _w3#21] -Arguments: hashpartitioning(_w1#19, _w2#20, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [7]: [total_sum#15, i_category#9, i_class#10, lochierarchy#16, _w1#17, _w2#18, _w3#19] +Arguments: hashpartitioning(_w1#17, _w2#18, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) Sort [codegen id : 5] -Input [7]: [total_sum#17, i_category#10, i_class#11, lochierarchy#18, _w1#19, _w2#20, _w3#21] -Arguments: [_w1#19 ASC NULLS FIRST, _w2#20 ASC NULLS FIRST, _w3#21 DESC NULLS LAST], false, 0 +Input [7]: [total_sum#15, i_category#9, i_class#10, lochierarchy#16, _w1#17, _w2#18, _w3#19] +Arguments: [_w1#17 ASC NULLS FIRST, _w2#18 ASC NULLS FIRST, _w3#19 DESC NULLS LAST], false, 0 (19) Window -Input [7]: [total_sum#17, i_category#10, i_class#11, lochierarchy#18, _w1#19, _w2#20, _w3#21] -Arguments: [rank(_w3#21) windowspecdefinition(_w1#19, _w2#20, _w3#21 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#23], [_w1#19, _w2#20], [_w3#21 DESC NULLS LAST] +Input [7]: [total_sum#15, i_category#9, i_class#10, lochierarchy#16, _w1#17, _w2#18, _w3#19] +Arguments: [rank(_w3#19) windowspecdefinition(_w1#17, _w2#18, _w3#19 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#20], [_w1#17, _w2#18], [_w3#19 DESC NULLS LAST] (20) Project [codegen id : 6] -Output [5]: [total_sum#17, i_category#10, i_class#11, lochierarchy#18, rank_within_parent#23] -Input [8]: [total_sum#17, i_category#10, i_class#11, lochierarchy#18, _w1#19, _w2#20, _w3#21, rank_within_parent#23] +Output [5]: [total_sum#15, i_category#9, i_class#10, lochierarchy#16, rank_within_parent#20] +Input [8]: [total_sum#15, i_category#9, i_class#10, lochierarchy#16, _w1#17, _w2#18, _w3#19, rank_within_parent#20] (21) TakeOrderedAndProject -Input [5]: [total_sum#17, i_category#10, i_class#11, lochierarchy#18, rank_within_parent#23] -Arguments: 100, [lochierarchy#18 DESC NULLS LAST, CASE WHEN (lochierarchy#18 = 0) THEN i_category#10 END ASC NULLS FIRST, rank_within_parent#23 ASC NULLS FIRST], [total_sum#17, i_category#10, i_class#11, lochierarchy#18, rank_within_parent#23] +Input [5]: [total_sum#15, i_category#9, i_class#10, lochierarchy#16, rank_within_parent#20] +Arguments: 100, [lochierarchy#16 DESC NULLS LAST, CASE WHEN (lochierarchy#16 = 0) THEN i_category#9 END ASC NULLS FIRST, rank_within_parent#20 ASC NULLS FIRST], [total_sum#15, i_category#9, i_class#10, lochierarchy#16, rank_within_parent#20] ===== Subqueries ===== @@ -129,25 +129,25 @@ BroadcastExchange (26) (22) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_month_seq#24] +Output [2]: [d_date_sk#5, d_month_seq#21] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#24] +Input [2]: [d_date_sk#5, d_month_seq#21] (24) Filter [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#24] -Condition : (((isnotnull(d_month_seq#24) AND (d_month_seq#24 >= 1200)) AND (d_month_seq#24 <= 1211)) AND isnotnull(d_date_sk#5)) +Input [2]: [d_date_sk#5, d_month_seq#21] +Condition : (((isnotnull(d_month_seq#21) AND (d_month_seq#21 >= 1200)) AND (d_month_seq#21 <= 1211)) AND isnotnull(d_date_sk#5)) (25) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_month_seq#24] +Input [2]: [d_date_sk#5, d_month_seq#21] (26) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q87.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q87.sf100/explain.txt index 38ecc6f3ed822..d254ec61e6d75 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q87.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q87.sf100/explain.txt @@ -90,254 +90,254 @@ Input [4]: [ss_customer_sk#1, ss_sold_date_sk#2, d_date_sk#4, d_date#5] (7) Exchange Input [2]: [ss_customer_sk#1, d_date#5] -Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (8) Sort [codegen id : 3] Input [2]: [ss_customer_sk#1, d_date#5] Arguments: [ss_customer_sk#1 ASC NULLS FIRST], false, 0 (9) Scan parquet default.customer -Output [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9] +Output [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (10) ColumnarToRow [codegen id : 4] -Input [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9] +Input [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8] (11) Filter [codegen id : 4] -Input [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9] -Condition : isnotnull(c_customer_sk#7) +Input [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8] +Condition : isnotnull(c_customer_sk#6) (12) Exchange -Input [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9] -Arguments: hashpartitioning(c_customer_sk#7, 5), ENSURE_REQUIREMENTS, [id=#10] +Input [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8] +Arguments: hashpartitioning(c_customer_sk#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (13) Sort [codegen id : 5] -Input [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9] -Arguments: [c_customer_sk#7 ASC NULLS FIRST], false, 0 +Input [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8] +Arguments: [c_customer_sk#6 ASC NULLS FIRST], false, 0 (14) SortMergeJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#7] +Right keys [1]: [c_customer_sk#6] Join condition: None (15) Project [codegen id : 6] -Output [3]: [c_last_name#9, c_first_name#8, d_date#5] -Input [5]: [ss_customer_sk#1, d_date#5, c_customer_sk#7, c_first_name#8, c_last_name#9] +Output [3]: [c_last_name#8, c_first_name#7, d_date#5] +Input [5]: [ss_customer_sk#1, d_date#5, c_customer_sk#6, c_first_name#7, c_last_name#8] (16) HashAggregate [codegen id : 6] -Input [3]: [c_last_name#9, c_first_name#8, d_date#5] -Keys [3]: [c_last_name#9, c_first_name#8, d_date#5] +Input [3]: [c_last_name#8, c_first_name#7, d_date#5] +Keys [3]: [c_last_name#8, c_first_name#7, d_date#5] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#9, c_first_name#8, d_date#5] +Results [3]: [c_last_name#8, c_first_name#7, d_date#5] (17) Exchange -Input [3]: [c_last_name#9, c_first_name#8, d_date#5] -Arguments: hashpartitioning(c_last_name#9, c_first_name#8, d_date#5, 5), ENSURE_REQUIREMENTS, [id=#11] +Input [3]: [c_last_name#8, c_first_name#7, d_date#5] +Arguments: hashpartitioning(c_last_name#8, c_first_name#7, d_date#5, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 7] -Input [3]: [c_last_name#9, c_first_name#8, d_date#5] -Keys [3]: [c_last_name#9, c_first_name#8, d_date#5] +Input [3]: [c_last_name#8, c_first_name#7, d_date#5] +Keys [3]: [c_last_name#8, c_first_name#7, d_date#5] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#9, c_first_name#8, d_date#5] +Results [3]: [c_last_name#8, c_first_name#7, d_date#5] (19) Exchange -Input [3]: [c_last_name#9, c_first_name#8, d_date#5] -Arguments: hashpartitioning(coalesce(c_last_name#9, ), isnull(c_last_name#9), coalesce(c_first_name#8, ), isnull(c_first_name#8), coalesce(d_date#5, 1970-01-01), isnull(d_date#5), 5), ENSURE_REQUIREMENTS, [id=#12] +Input [3]: [c_last_name#8, c_first_name#7, d_date#5] +Arguments: hashpartitioning(coalesce(c_last_name#8, ), isnull(c_last_name#8), coalesce(c_first_name#7, ), isnull(c_first_name#7), coalesce(d_date#5, 1970-01-01), isnull(d_date#5), 5), ENSURE_REQUIREMENTS, [plan_id=4] (20) Sort [codegen id : 8] -Input [3]: [c_last_name#9, c_first_name#8, d_date#5] -Arguments: [coalesce(c_last_name#9, ) ASC NULLS FIRST, isnull(c_last_name#9) ASC NULLS FIRST, coalesce(c_first_name#8, ) ASC NULLS FIRST, isnull(c_first_name#8) ASC NULLS FIRST, coalesce(d_date#5, 1970-01-01) ASC NULLS FIRST, isnull(d_date#5) ASC NULLS FIRST], false, 0 +Input [3]: [c_last_name#8, c_first_name#7, d_date#5] +Arguments: [coalesce(c_last_name#8, ) ASC NULLS FIRST, isnull(c_last_name#8) ASC NULLS FIRST, coalesce(c_first_name#7, ) ASC NULLS FIRST, isnull(c_first_name#7) ASC NULLS FIRST, coalesce(d_date#5, 1970-01-01) ASC NULLS FIRST, isnull(d_date#5) ASC NULLS FIRST], false, 0 (21) Scan parquet default.catalog_sales -Output [2]: [cs_bill_customer_sk#13, cs_sold_date_sk#14] +Output [2]: [cs_bill_customer_sk#9, cs_sold_date_sk#10] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#14), dynamicpruningexpression(cs_sold_date_sk#14 IN dynamicpruning#3)] +PartitionFilters: [isnotnull(cs_sold_date_sk#10), dynamicpruningexpression(cs_sold_date_sk#10 IN dynamicpruning#3)] PushedFilters: [IsNotNull(cs_bill_customer_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 10] -Input [2]: [cs_bill_customer_sk#13, cs_sold_date_sk#14] +Input [2]: [cs_bill_customer_sk#9, cs_sold_date_sk#10] (23) Filter [codegen id : 10] -Input [2]: [cs_bill_customer_sk#13, cs_sold_date_sk#14] -Condition : isnotnull(cs_bill_customer_sk#13) +Input [2]: [cs_bill_customer_sk#9, cs_sold_date_sk#10] +Condition : isnotnull(cs_bill_customer_sk#9) (24) ReusedExchange [Reuses operator id: 65] -Output [2]: [d_date_sk#15, d_date#16] +Output [2]: [d_date_sk#11, d_date#12] (25) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cs_sold_date_sk#14] -Right keys [1]: [d_date_sk#15] +Left keys [1]: [cs_sold_date_sk#10] +Right keys [1]: [d_date_sk#11] Join condition: None (26) Project [codegen id : 10] -Output [2]: [cs_bill_customer_sk#13, d_date#16] -Input [4]: [cs_bill_customer_sk#13, cs_sold_date_sk#14, d_date_sk#15, d_date#16] +Output [2]: [cs_bill_customer_sk#9, d_date#12] +Input [4]: [cs_bill_customer_sk#9, cs_sold_date_sk#10, d_date_sk#11, d_date#12] (27) Exchange -Input [2]: [cs_bill_customer_sk#13, d_date#16] -Arguments: hashpartitioning(cs_bill_customer_sk#13, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [2]: [cs_bill_customer_sk#9, d_date#12] +Arguments: hashpartitioning(cs_bill_customer_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=5] (28) Sort [codegen id : 11] -Input [2]: [cs_bill_customer_sk#13, d_date#16] -Arguments: [cs_bill_customer_sk#13 ASC NULLS FIRST], false, 0 +Input [2]: [cs_bill_customer_sk#9, d_date#12] +Arguments: [cs_bill_customer_sk#9 ASC NULLS FIRST], false, 0 (29) ReusedExchange [Reuses operator id: 12] -Output [3]: [c_customer_sk#18, c_first_name#19, c_last_name#20] +Output [3]: [c_customer_sk#13, c_first_name#14, c_last_name#15] (30) Sort [codegen id : 13] -Input [3]: [c_customer_sk#18, c_first_name#19, c_last_name#20] -Arguments: [c_customer_sk#18 ASC NULLS FIRST], false, 0 +Input [3]: [c_customer_sk#13, c_first_name#14, c_last_name#15] +Arguments: [c_customer_sk#13 ASC NULLS FIRST], false, 0 (31) SortMergeJoin [codegen id : 14] -Left keys [1]: [cs_bill_customer_sk#13] -Right keys [1]: [c_customer_sk#18] +Left keys [1]: [cs_bill_customer_sk#9] +Right keys [1]: [c_customer_sk#13] Join condition: None (32) Project [codegen id : 14] -Output [3]: [c_last_name#20, c_first_name#19, d_date#16] -Input [5]: [cs_bill_customer_sk#13, d_date#16, c_customer_sk#18, c_first_name#19, c_last_name#20] +Output [3]: [c_last_name#15, c_first_name#14, d_date#12] +Input [5]: [cs_bill_customer_sk#9, d_date#12, c_customer_sk#13, c_first_name#14, c_last_name#15] (33) HashAggregate [codegen id : 14] -Input [3]: [c_last_name#20, c_first_name#19, d_date#16] -Keys [3]: [c_last_name#20, c_first_name#19, d_date#16] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Keys [3]: [c_last_name#15, c_first_name#14, d_date#12] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#20, c_first_name#19, d_date#16] +Results [3]: [c_last_name#15, c_first_name#14, d_date#12] (34) Exchange -Input [3]: [c_last_name#20, c_first_name#19, d_date#16] -Arguments: hashpartitioning(c_last_name#20, c_first_name#19, d_date#16, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Arguments: hashpartitioning(c_last_name#15, c_first_name#14, d_date#12, 5), ENSURE_REQUIREMENTS, [plan_id=6] (35) HashAggregate [codegen id : 15] -Input [3]: [c_last_name#20, c_first_name#19, d_date#16] -Keys [3]: [c_last_name#20, c_first_name#19, d_date#16] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Keys [3]: [c_last_name#15, c_first_name#14, d_date#12] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#20, c_first_name#19, d_date#16] +Results [3]: [c_last_name#15, c_first_name#14, d_date#12] (36) Exchange -Input [3]: [c_last_name#20, c_first_name#19, d_date#16] -Arguments: hashpartitioning(coalesce(c_last_name#20, ), isnull(c_last_name#20), coalesce(c_first_name#19, ), isnull(c_first_name#19), coalesce(d_date#16, 1970-01-01), isnull(d_date#16), 5), ENSURE_REQUIREMENTS, [id=#22] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Arguments: hashpartitioning(coalesce(c_last_name#15, ), isnull(c_last_name#15), coalesce(c_first_name#14, ), isnull(c_first_name#14), coalesce(d_date#12, 1970-01-01), isnull(d_date#12), 5), ENSURE_REQUIREMENTS, [plan_id=7] (37) Sort [codegen id : 16] -Input [3]: [c_last_name#20, c_first_name#19, d_date#16] -Arguments: [coalesce(c_last_name#20, ) ASC NULLS FIRST, isnull(c_last_name#20) ASC NULLS FIRST, coalesce(c_first_name#19, ) ASC NULLS FIRST, isnull(c_first_name#19) ASC NULLS FIRST, coalesce(d_date#16, 1970-01-01) ASC NULLS FIRST, isnull(d_date#16) ASC NULLS FIRST], false, 0 +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Arguments: [coalesce(c_last_name#15, ) ASC NULLS FIRST, isnull(c_last_name#15) ASC NULLS FIRST, coalesce(c_first_name#14, ) ASC NULLS FIRST, isnull(c_first_name#14) ASC NULLS FIRST, coalesce(d_date#12, 1970-01-01) ASC NULLS FIRST, isnull(d_date#12) ASC NULLS FIRST], false, 0 (38) SortMergeJoin [codegen id : 17] -Left keys [6]: [coalesce(c_last_name#9, ), isnull(c_last_name#9), coalesce(c_first_name#8, ), isnull(c_first_name#8), coalesce(d_date#5, 1970-01-01), isnull(d_date#5)] -Right keys [6]: [coalesce(c_last_name#20, ), isnull(c_last_name#20), coalesce(c_first_name#19, ), isnull(c_first_name#19), coalesce(d_date#16, 1970-01-01), isnull(d_date#16)] +Left keys [6]: [coalesce(c_last_name#8, ), isnull(c_last_name#8), coalesce(c_first_name#7, ), isnull(c_first_name#7), coalesce(d_date#5, 1970-01-01), isnull(d_date#5)] +Right keys [6]: [coalesce(c_last_name#15, ), isnull(c_last_name#15), coalesce(c_first_name#14, ), isnull(c_first_name#14), coalesce(d_date#12, 1970-01-01), isnull(d_date#12)] Join condition: None (39) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#23, ws_sold_date_sk#24] +Output [2]: [ws_bill_customer_sk#16, ws_sold_date_sk#17] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#24), dynamicpruningexpression(ws_sold_date_sk#24 IN dynamicpruning#3)] +PartitionFilters: [isnotnull(ws_sold_date_sk#17), dynamicpruningexpression(ws_sold_date_sk#17 IN dynamicpruning#3)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (40) ColumnarToRow [codegen id : 19] -Input [2]: [ws_bill_customer_sk#23, ws_sold_date_sk#24] +Input [2]: [ws_bill_customer_sk#16, ws_sold_date_sk#17] (41) Filter [codegen id : 19] -Input [2]: [ws_bill_customer_sk#23, ws_sold_date_sk#24] -Condition : isnotnull(ws_bill_customer_sk#23) +Input [2]: [ws_bill_customer_sk#16, ws_sold_date_sk#17] +Condition : isnotnull(ws_bill_customer_sk#16) (42) ReusedExchange [Reuses operator id: 65] -Output [2]: [d_date_sk#25, d_date#26] +Output [2]: [d_date_sk#18, d_date#19] (43) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [ws_sold_date_sk#24] -Right keys [1]: [d_date_sk#25] +Left keys [1]: [ws_sold_date_sk#17] +Right keys [1]: [d_date_sk#18] Join condition: None (44) Project [codegen id : 19] -Output [2]: [ws_bill_customer_sk#23, d_date#26] -Input [4]: [ws_bill_customer_sk#23, ws_sold_date_sk#24, d_date_sk#25, d_date#26] +Output [2]: [ws_bill_customer_sk#16, d_date#19] +Input [4]: [ws_bill_customer_sk#16, ws_sold_date_sk#17, d_date_sk#18, d_date#19] (45) Exchange -Input [2]: [ws_bill_customer_sk#23, d_date#26] -Arguments: hashpartitioning(ws_bill_customer_sk#23, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [2]: [ws_bill_customer_sk#16, d_date#19] +Arguments: hashpartitioning(ws_bill_customer_sk#16, 5), ENSURE_REQUIREMENTS, [plan_id=8] (46) Sort [codegen id : 20] -Input [2]: [ws_bill_customer_sk#23, d_date#26] -Arguments: [ws_bill_customer_sk#23 ASC NULLS FIRST], false, 0 +Input [2]: [ws_bill_customer_sk#16, d_date#19] +Arguments: [ws_bill_customer_sk#16 ASC NULLS FIRST], false, 0 (47) ReusedExchange [Reuses operator id: 12] -Output [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30] +Output [3]: [c_customer_sk#20, c_first_name#21, c_last_name#22] (48) Sort [codegen id : 22] -Input [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30] -Arguments: [c_customer_sk#28 ASC NULLS FIRST], false, 0 +Input [3]: [c_customer_sk#20, c_first_name#21, c_last_name#22] +Arguments: [c_customer_sk#20 ASC NULLS FIRST], false, 0 (49) SortMergeJoin [codegen id : 23] -Left keys [1]: [ws_bill_customer_sk#23] -Right keys [1]: [c_customer_sk#28] +Left keys [1]: [ws_bill_customer_sk#16] +Right keys [1]: [c_customer_sk#20] Join condition: None (50) Project [codegen id : 23] -Output [3]: [c_last_name#30, c_first_name#29, d_date#26] -Input [5]: [ws_bill_customer_sk#23, d_date#26, c_customer_sk#28, c_first_name#29, c_last_name#30] +Output [3]: [c_last_name#22, c_first_name#21, d_date#19] +Input [5]: [ws_bill_customer_sk#16, d_date#19, c_customer_sk#20, c_first_name#21, c_last_name#22] (51) HashAggregate [codegen id : 23] -Input [3]: [c_last_name#30, c_first_name#29, d_date#26] -Keys [3]: [c_last_name#30, c_first_name#29, d_date#26] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Keys [3]: [c_last_name#22, c_first_name#21, d_date#19] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#30, c_first_name#29, d_date#26] +Results [3]: [c_last_name#22, c_first_name#21, d_date#19] (52) Exchange -Input [3]: [c_last_name#30, c_first_name#29, d_date#26] -Arguments: hashpartitioning(c_last_name#30, c_first_name#29, d_date#26, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Arguments: hashpartitioning(c_last_name#22, c_first_name#21, d_date#19, 5), ENSURE_REQUIREMENTS, [plan_id=9] (53) HashAggregate [codegen id : 24] -Input [3]: [c_last_name#30, c_first_name#29, d_date#26] -Keys [3]: [c_last_name#30, c_first_name#29, d_date#26] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Keys [3]: [c_last_name#22, c_first_name#21, d_date#19] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#30, c_first_name#29, d_date#26] +Results [3]: [c_last_name#22, c_first_name#21, d_date#19] (54) Exchange -Input [3]: [c_last_name#30, c_first_name#29, d_date#26] -Arguments: hashpartitioning(coalesce(c_last_name#30, ), isnull(c_last_name#30), coalesce(c_first_name#29, ), isnull(c_first_name#29), coalesce(d_date#26, 1970-01-01), isnull(d_date#26), 5), ENSURE_REQUIREMENTS, [id=#32] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Arguments: hashpartitioning(coalesce(c_last_name#22, ), isnull(c_last_name#22), coalesce(c_first_name#21, ), isnull(c_first_name#21), coalesce(d_date#19, 1970-01-01), isnull(d_date#19), 5), ENSURE_REQUIREMENTS, [plan_id=10] (55) Sort [codegen id : 25] -Input [3]: [c_last_name#30, c_first_name#29, d_date#26] -Arguments: [coalesce(c_last_name#30, ) ASC NULLS FIRST, isnull(c_last_name#30) ASC NULLS FIRST, coalesce(c_first_name#29, ) ASC NULLS FIRST, isnull(c_first_name#29) ASC NULLS FIRST, coalesce(d_date#26, 1970-01-01) ASC NULLS FIRST, isnull(d_date#26) ASC NULLS FIRST], false, 0 +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Arguments: [coalesce(c_last_name#22, ) ASC NULLS FIRST, isnull(c_last_name#22) ASC NULLS FIRST, coalesce(c_first_name#21, ) ASC NULLS FIRST, isnull(c_first_name#21) ASC NULLS FIRST, coalesce(d_date#19, 1970-01-01) ASC NULLS FIRST, isnull(d_date#19) ASC NULLS FIRST], false, 0 (56) SortMergeJoin [codegen id : 26] -Left keys [6]: [coalesce(c_last_name#9, ), isnull(c_last_name#9), coalesce(c_first_name#8, ), isnull(c_first_name#8), coalesce(d_date#5, 1970-01-01), isnull(d_date#5)] -Right keys [6]: [coalesce(c_last_name#30, ), isnull(c_last_name#30), coalesce(c_first_name#29, ), isnull(c_first_name#29), coalesce(d_date#26, 1970-01-01), isnull(d_date#26)] +Left keys [6]: [coalesce(c_last_name#8, ), isnull(c_last_name#8), coalesce(c_first_name#7, ), isnull(c_first_name#7), coalesce(d_date#5, 1970-01-01), isnull(d_date#5)] +Right keys [6]: [coalesce(c_last_name#22, ), isnull(c_last_name#22), coalesce(c_first_name#21, ), isnull(c_first_name#21), coalesce(d_date#19, 1970-01-01), isnull(d_date#19)] Join condition: None (57) Project [codegen id : 26] Output: [] -Input [3]: [c_last_name#9, c_first_name#8, d_date#5] +Input [3]: [c_last_name#8, c_first_name#7, d_date#5] (58) HashAggregate [codegen id : 26] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#33] -Results [1]: [count#34] +Aggregate Attributes [1]: [count#23] +Results [1]: [count#24] (59) Exchange -Input [1]: [count#34] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#35] +Input [1]: [count#24] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11] (60) HashAggregate [codegen id : 27] -Input [1]: [count#34] +Input [1]: [count#24] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#36] -Results [1]: [count(1)#36 AS count(1)#37] +Aggregate Attributes [1]: [count(1)#25] +Results [1]: [count(1)#25 AS count(1)#26] ===== Subqueries ===== @@ -350,29 +350,29 @@ BroadcastExchange (65) (61) Scan parquet default.date_dim -Output [3]: [d_date_sk#4, d_date#5, d_month_seq#38] +Output [3]: [d_date_sk#4, d_date#5, d_month_seq#27] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (62) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#4, d_date#5, d_month_seq#38] +Input [3]: [d_date_sk#4, d_date#5, d_month_seq#27] (63) Filter [codegen id : 1] -Input [3]: [d_date_sk#4, d_date#5, d_month_seq#38] -Condition : (((isnotnull(d_month_seq#38) AND (d_month_seq#38 >= 1200)) AND (d_month_seq#38 <= 1211)) AND isnotnull(d_date_sk#4)) +Input [3]: [d_date_sk#4, d_date#5, d_month_seq#27] +Condition : (((isnotnull(d_month_seq#27) AND (d_month_seq#27 >= 1200)) AND (d_month_seq#27 <= 1211)) AND isnotnull(d_date_sk#4)) (64) Project [codegen id : 1] Output [2]: [d_date_sk#4, d_date#5] -Input [3]: [d_date_sk#4, d_date#5, d_month_seq#38] +Input [3]: [d_date_sk#4, d_date#5, d_month_seq#27] (65) BroadcastExchange Input [2]: [d_date_sk#4, d_date#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#39] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] -Subquery:2 Hosting operator id = 21 Hosting Expression = cs_sold_date_sk#14 IN dynamicpruning#3 +Subquery:2 Hosting operator id = 21 Hosting Expression = cs_sold_date_sk#10 IN dynamicpruning#3 -Subquery:3 Hosting operator id = 39 Hosting Expression = ws_sold_date_sk#24 IN dynamicpruning#3 +Subquery:3 Hosting operator id = 39 Hosting Expression = ws_sold_date_sk#17 IN dynamicpruning#3 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q87/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q87/explain.txt index ed2a97704b2f7..6023a9d213efe 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q87/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q87/explain.txt @@ -91,7 +91,7 @@ Condition : isnotnull(c_customer_sk#6) (10) BroadcastExchange Input [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_customer_sk#1] @@ -111,7 +111,7 @@ Results [3]: [c_last_name#8, c_first_name#7, d_date#5] (14) Exchange Input [3]: [c_last_name#8, c_first_name#7, d_date#5] -Arguments: hashpartitioning(c_last_name#8, c_first_name#7, d_date#5, 5), ENSURE_REQUIREMENTS, [id=#10] +Arguments: hashpartitioning(c_last_name#8, c_first_name#7, d_date#5, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 12] Input [3]: [c_last_name#8, c_first_name#7, d_date#5] @@ -121,135 +121,135 @@ Aggregate Attributes: [] Results [3]: [c_last_name#8, c_first_name#7, d_date#5] (16) Scan parquet default.catalog_sales -Output [2]: [cs_bill_customer_sk#11, cs_sold_date_sk#12] +Output [2]: [cs_bill_customer_sk#9, cs_sold_date_sk#10] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#12), dynamicpruningexpression(cs_sold_date_sk#12 IN dynamicpruning#3)] +PartitionFilters: [isnotnull(cs_sold_date_sk#10), dynamicpruningexpression(cs_sold_date_sk#10 IN dynamicpruning#3)] PushedFilters: [IsNotNull(cs_bill_customer_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 6] -Input [2]: [cs_bill_customer_sk#11, cs_sold_date_sk#12] +Input [2]: [cs_bill_customer_sk#9, cs_sold_date_sk#10] (18) Filter [codegen id : 6] -Input [2]: [cs_bill_customer_sk#11, cs_sold_date_sk#12] -Condition : isnotnull(cs_bill_customer_sk#11) +Input [2]: [cs_bill_customer_sk#9, cs_sold_date_sk#10] +Condition : isnotnull(cs_bill_customer_sk#9) (19) ReusedExchange [Reuses operator id: 52] -Output [2]: [d_date_sk#13, d_date#14] +Output [2]: [d_date_sk#11, d_date#12] (20) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [cs_sold_date_sk#12] -Right keys [1]: [d_date_sk#13] +Left keys [1]: [cs_sold_date_sk#10] +Right keys [1]: [d_date_sk#11] Join condition: None (21) Project [codegen id : 6] -Output [2]: [cs_bill_customer_sk#11, d_date#14] -Input [4]: [cs_bill_customer_sk#11, cs_sold_date_sk#12, d_date_sk#13, d_date#14] +Output [2]: [cs_bill_customer_sk#9, d_date#12] +Input [4]: [cs_bill_customer_sk#9, cs_sold_date_sk#10, d_date_sk#11, d_date#12] (22) ReusedExchange [Reuses operator id: 10] -Output [3]: [c_customer_sk#15, c_first_name#16, c_last_name#17] +Output [3]: [c_customer_sk#13, c_first_name#14, c_last_name#15] (23) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [cs_bill_customer_sk#11] -Right keys [1]: [c_customer_sk#15] +Left keys [1]: [cs_bill_customer_sk#9] +Right keys [1]: [c_customer_sk#13] Join condition: None (24) Project [codegen id : 6] -Output [3]: [c_last_name#17, c_first_name#16, d_date#14] -Input [5]: [cs_bill_customer_sk#11, d_date#14, c_customer_sk#15, c_first_name#16, c_last_name#17] +Output [3]: [c_last_name#15, c_first_name#14, d_date#12] +Input [5]: [cs_bill_customer_sk#9, d_date#12, c_customer_sk#13, c_first_name#14, c_last_name#15] (25) HashAggregate [codegen id : 6] -Input [3]: [c_last_name#17, c_first_name#16, d_date#14] -Keys [3]: [c_last_name#17, c_first_name#16, d_date#14] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Keys [3]: [c_last_name#15, c_first_name#14, d_date#12] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#17, c_first_name#16, d_date#14] +Results [3]: [c_last_name#15, c_first_name#14, d_date#12] (26) Exchange -Input [3]: [c_last_name#17, c_first_name#16, d_date#14] -Arguments: hashpartitioning(c_last_name#17, c_first_name#16, d_date#14, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Arguments: hashpartitioning(c_last_name#15, c_first_name#14, d_date#12, 5), ENSURE_REQUIREMENTS, [plan_id=3] (27) HashAggregate [codegen id : 7] -Input [3]: [c_last_name#17, c_first_name#16, d_date#14] -Keys [3]: [c_last_name#17, c_first_name#16, d_date#14] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Keys [3]: [c_last_name#15, c_first_name#14, d_date#12] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#17, c_first_name#16, d_date#14] +Results [3]: [c_last_name#15, c_first_name#14, d_date#12] (28) BroadcastExchange -Input [3]: [c_last_name#17, c_first_name#16, d_date#14] -Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, string, true], ), isnull(input[0, string, true]), coalesce(input[1, string, true], ), isnull(input[1, string, true]), coalesce(input[2, date, true], 1970-01-01), isnull(input[2, date, true])),false), [id=#19] +Input [3]: [c_last_name#15, c_first_name#14, d_date#12] +Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, string, true], ), isnull(input[0, string, true]), coalesce(input[1, string, true], ), isnull(input[1, string, true]), coalesce(input[2, date, true], 1970-01-01), isnull(input[2, date, true])),false), [plan_id=4] (29) BroadcastHashJoin [codegen id : 12] Left keys [6]: [coalesce(c_last_name#8, ), isnull(c_last_name#8), coalesce(c_first_name#7, ), isnull(c_first_name#7), coalesce(d_date#5, 1970-01-01), isnull(d_date#5)] -Right keys [6]: [coalesce(c_last_name#17, ), isnull(c_last_name#17), coalesce(c_first_name#16, ), isnull(c_first_name#16), coalesce(d_date#14, 1970-01-01), isnull(d_date#14)] +Right keys [6]: [coalesce(c_last_name#15, ), isnull(c_last_name#15), coalesce(c_first_name#14, ), isnull(c_first_name#14), coalesce(d_date#12, 1970-01-01), isnull(d_date#12)] Join condition: None (30) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#20, ws_sold_date_sk#21] +Output [2]: [ws_bill_customer_sk#16, ws_sold_date_sk#17] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#21), dynamicpruningexpression(ws_sold_date_sk#21 IN dynamicpruning#3)] +PartitionFilters: [isnotnull(ws_sold_date_sk#17), dynamicpruningexpression(ws_sold_date_sk#17 IN dynamicpruning#3)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 10] -Input [2]: [ws_bill_customer_sk#20, ws_sold_date_sk#21] +Input [2]: [ws_bill_customer_sk#16, ws_sold_date_sk#17] (32) Filter [codegen id : 10] -Input [2]: [ws_bill_customer_sk#20, ws_sold_date_sk#21] -Condition : isnotnull(ws_bill_customer_sk#20) +Input [2]: [ws_bill_customer_sk#16, ws_sold_date_sk#17] +Condition : isnotnull(ws_bill_customer_sk#16) (33) ReusedExchange [Reuses operator id: 52] -Output [2]: [d_date_sk#22, d_date#23] +Output [2]: [d_date_sk#18, d_date#19] (34) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ws_sold_date_sk#21] -Right keys [1]: [d_date_sk#22] +Left keys [1]: [ws_sold_date_sk#17] +Right keys [1]: [d_date_sk#18] Join condition: None (35) Project [codegen id : 10] -Output [2]: [ws_bill_customer_sk#20, d_date#23] -Input [4]: [ws_bill_customer_sk#20, ws_sold_date_sk#21, d_date_sk#22, d_date#23] +Output [2]: [ws_bill_customer_sk#16, d_date#19] +Input [4]: [ws_bill_customer_sk#16, ws_sold_date_sk#17, d_date_sk#18, d_date#19] (36) ReusedExchange [Reuses operator id: 10] -Output [3]: [c_customer_sk#24, c_first_name#25, c_last_name#26] +Output [3]: [c_customer_sk#20, c_first_name#21, c_last_name#22] (37) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ws_bill_customer_sk#20] -Right keys [1]: [c_customer_sk#24] +Left keys [1]: [ws_bill_customer_sk#16] +Right keys [1]: [c_customer_sk#20] Join condition: None (38) Project [codegen id : 10] -Output [3]: [c_last_name#26, c_first_name#25, d_date#23] -Input [5]: [ws_bill_customer_sk#20, d_date#23, c_customer_sk#24, c_first_name#25, c_last_name#26] +Output [3]: [c_last_name#22, c_first_name#21, d_date#19] +Input [5]: [ws_bill_customer_sk#16, d_date#19, c_customer_sk#20, c_first_name#21, c_last_name#22] (39) HashAggregate [codegen id : 10] -Input [3]: [c_last_name#26, c_first_name#25, d_date#23] -Keys [3]: [c_last_name#26, c_first_name#25, d_date#23] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Keys [3]: [c_last_name#22, c_first_name#21, d_date#19] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#26, c_first_name#25, d_date#23] +Results [3]: [c_last_name#22, c_first_name#21, d_date#19] (40) Exchange -Input [3]: [c_last_name#26, c_first_name#25, d_date#23] -Arguments: hashpartitioning(c_last_name#26, c_first_name#25, d_date#23, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Arguments: hashpartitioning(c_last_name#22, c_first_name#21, d_date#19, 5), ENSURE_REQUIREMENTS, [plan_id=5] (41) HashAggregate [codegen id : 11] -Input [3]: [c_last_name#26, c_first_name#25, d_date#23] -Keys [3]: [c_last_name#26, c_first_name#25, d_date#23] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Keys [3]: [c_last_name#22, c_first_name#21, d_date#19] Functions: [] Aggregate Attributes: [] -Results [3]: [c_last_name#26, c_first_name#25, d_date#23] +Results [3]: [c_last_name#22, c_first_name#21, d_date#19] (42) BroadcastExchange -Input [3]: [c_last_name#26, c_first_name#25, d_date#23] -Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, string, true], ), isnull(input[0, string, true]), coalesce(input[1, string, true], ), isnull(input[1, string, true]), coalesce(input[2, date, true], 1970-01-01), isnull(input[2, date, true])),false), [id=#28] +Input [3]: [c_last_name#22, c_first_name#21, d_date#19] +Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, string, true], ), isnull(input[0, string, true]), coalesce(input[1, string, true], ), isnull(input[1, string, true]), coalesce(input[2, date, true], 1970-01-01), isnull(input[2, date, true])),false), [plan_id=6] (43) BroadcastHashJoin [codegen id : 12] Left keys [6]: [coalesce(c_last_name#8, ), isnull(c_last_name#8), coalesce(c_first_name#7, ), isnull(c_first_name#7), coalesce(d_date#5, 1970-01-01), isnull(d_date#5)] -Right keys [6]: [coalesce(c_last_name#26, ), isnull(c_last_name#26), coalesce(c_first_name#25, ), isnull(c_first_name#25), coalesce(d_date#23, 1970-01-01), isnull(d_date#23)] +Right keys [6]: [coalesce(c_last_name#22, ), isnull(c_last_name#22), coalesce(c_first_name#21, ), isnull(c_first_name#21), coalesce(d_date#19, 1970-01-01), isnull(d_date#19)] Join condition: None (44) Project [codegen id : 12] @@ -260,19 +260,19 @@ Input [3]: [c_last_name#8, c_first_name#7, d_date#5] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#29] -Results [1]: [count#30] +Aggregate Attributes [1]: [count#23] +Results [1]: [count#24] (46) Exchange -Input [1]: [count#30] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#31] +Input [1]: [count#24] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (47) HashAggregate [codegen id : 13] -Input [1]: [count#30] +Input [1]: [count#24] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#32] -Results [1]: [count(1)#32 AS count(1)#33] +Aggregate Attributes [1]: [count(1)#25] +Results [1]: [count(1)#25 AS count(1)#26] ===== Subqueries ===== @@ -285,29 +285,29 @@ BroadcastExchange (52) (48) Scan parquet default.date_dim -Output [3]: [d_date_sk#4, d_date#5, d_month_seq#34] +Output [3]: [d_date_sk#4, d_date#5, d_month_seq#27] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (49) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#4, d_date#5, d_month_seq#34] +Input [3]: [d_date_sk#4, d_date#5, d_month_seq#27] (50) Filter [codegen id : 1] -Input [3]: [d_date_sk#4, d_date#5, d_month_seq#34] -Condition : (((isnotnull(d_month_seq#34) AND (d_month_seq#34 >= 1200)) AND (d_month_seq#34 <= 1211)) AND isnotnull(d_date_sk#4)) +Input [3]: [d_date_sk#4, d_date#5, d_month_seq#27] +Condition : (((isnotnull(d_month_seq#27) AND (d_month_seq#27 >= 1200)) AND (d_month_seq#27 <= 1211)) AND isnotnull(d_date_sk#4)) (51) Project [codegen id : 1] Output [2]: [d_date_sk#4, d_date#5] -Input [3]: [d_date_sk#4, d_date#5, d_month_seq#34] +Input [3]: [d_date_sk#4, d_date#5, d_month_seq#27] (52) BroadcastExchange Input [2]: [d_date_sk#4, d_date#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:2 Hosting operator id = 16 Hosting Expression = cs_sold_date_sk#12 IN dynamicpruning#3 +Subquery:2 Hosting operator id = 16 Hosting Expression = cs_sold_date_sk#10 IN dynamicpruning#3 -Subquery:3 Hosting operator id = 30 Hosting Expression = ws_sold_date_sk#21 IN dynamicpruning#3 +Subquery:3 Hosting operator id = 30 Hosting Expression = ws_sold_date_sk#17 IN dynamicpruning#3 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q88.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q88.sf100/explain.txt index e72928545d080..99a999036d183 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q88.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q88.sf100/explain.txt @@ -221,7 +221,7 @@ Input [3]: [t_time_sk#5, t_hour#6, t_minute#7] (9) BroadcastExchange Input [1]: [t_time_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_time_sk#1] @@ -233,767 +233,767 @@ Output [2]: [ss_hdemo_sk#2, ss_store_sk#3] Input [4]: [ss_sold_time_sk#1, ss_hdemo_sk#2, ss_store_sk#3, t_time_sk#5] (12) Scan parquet default.store -Output [2]: [s_store_sk#9, s_store_name#10] +Output [2]: [s_store_sk#8, s_store_name#9] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_name), EqualTo(s_store_name,ese), IsNotNull(s_store_sk)] ReadSchema: struct (13) ColumnarToRow [codegen id : 2] -Input [2]: [s_store_sk#9, s_store_name#10] +Input [2]: [s_store_sk#8, s_store_name#9] (14) Filter [codegen id : 2] -Input [2]: [s_store_sk#9, s_store_name#10] -Condition : ((isnotnull(s_store_name#10) AND (s_store_name#10 = ese)) AND isnotnull(s_store_sk#9)) +Input [2]: [s_store_sk#8, s_store_name#9] +Condition : ((isnotnull(s_store_name#9) AND (s_store_name#9 = ese)) AND isnotnull(s_store_sk#8)) (15) Project [codegen id : 2] -Output [1]: [s_store_sk#9] -Input [2]: [s_store_sk#9, s_store_name#10] +Output [1]: [s_store_sk#8] +Input [2]: [s_store_sk#8, s_store_name#9] (16) BroadcastExchange -Input [1]: [s_store_sk#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#11] +Input [1]: [s_store_sk#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#9] +Right keys [1]: [s_store_sk#8] Join condition: None (18) Project [codegen id : 4] Output [1]: [ss_hdemo_sk#2] -Input [3]: [ss_hdemo_sk#2, ss_store_sk#3, s_store_sk#9] +Input [3]: [ss_hdemo_sk#2, ss_store_sk#3, s_store_sk#8] (19) Scan parquet default.household_demographics -Output [3]: [hd_demo_sk#12, hd_dep_count#13, hd_vehicle_count#14] +Output [3]: [hd_demo_sk#10, hd_dep_count#11, hd_vehicle_count#12] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [Or(Or(And(EqualTo(hd_dep_count,4),LessThanOrEqual(hd_vehicle_count,6)),And(EqualTo(hd_dep_count,2),LessThanOrEqual(hd_vehicle_count,4))),And(EqualTo(hd_dep_count,0),LessThanOrEqual(hd_vehicle_count,2))), IsNotNull(hd_demo_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 3] -Input [3]: [hd_demo_sk#12, hd_dep_count#13, hd_vehicle_count#14] +Input [3]: [hd_demo_sk#10, hd_dep_count#11, hd_vehicle_count#12] (21) Filter [codegen id : 3] -Input [3]: [hd_demo_sk#12, hd_dep_count#13, hd_vehicle_count#14] -Condition : (((((hd_dep_count#13 = 4) AND (hd_vehicle_count#14 <= 6)) OR ((hd_dep_count#13 = 2) AND (hd_vehicle_count#14 <= 4))) OR ((hd_dep_count#13 = 0) AND (hd_vehicle_count#14 <= 2))) AND isnotnull(hd_demo_sk#12)) +Input [3]: [hd_demo_sk#10, hd_dep_count#11, hd_vehicle_count#12] +Condition : (((((hd_dep_count#11 = 4) AND (hd_vehicle_count#12 <= 6)) OR ((hd_dep_count#11 = 2) AND (hd_vehicle_count#12 <= 4))) OR ((hd_dep_count#11 = 0) AND (hd_vehicle_count#12 <= 2))) AND isnotnull(hd_demo_sk#10)) (22) Project [codegen id : 3] -Output [1]: [hd_demo_sk#12] -Input [3]: [hd_demo_sk#12, hd_dep_count#13, hd_vehicle_count#14] +Output [1]: [hd_demo_sk#10] +Input [3]: [hd_demo_sk#10, hd_dep_count#11, hd_vehicle_count#12] (23) BroadcastExchange -Input [1]: [hd_demo_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [hd_demo_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#12] +Right keys [1]: [hd_demo_sk#10] Join condition: None (25) Project [codegen id : 4] Output: [] -Input [2]: [ss_hdemo_sk#2, hd_demo_sk#12] +Input [2]: [ss_hdemo_sk#2, hd_demo_sk#10] (26) HashAggregate [codegen id : 4] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#16] -Results [1]: [count#17] +Aggregate Attributes [1]: [count#13] +Results [1]: [count#14] (27) Exchange -Input [1]: [count#17] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#18] +Input [1]: [count#14] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 40] -Input [1]: [count#17] +Input [1]: [count#14] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#19] -Results [1]: [count(1)#19 AS h8_30_to_9#20] +Aggregate Attributes [1]: [count(1)#15] +Results [1]: [count(1)#15 AS h8_30_to_9#16] (29) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#21, ss_hdemo_sk#22, ss_store_sk#23, ss_sold_date_sk#24] +Output [4]: [ss_sold_time_sk#17, ss_hdemo_sk#18, ss_store_sk#19, ss_sold_date_sk#20] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 8] -Input [4]: [ss_sold_time_sk#21, ss_hdemo_sk#22, ss_store_sk#23, ss_sold_date_sk#24] +Input [4]: [ss_sold_time_sk#17, ss_hdemo_sk#18, ss_store_sk#19, ss_sold_date_sk#20] (31) Filter [codegen id : 8] -Input [4]: [ss_sold_time_sk#21, ss_hdemo_sk#22, ss_store_sk#23, ss_sold_date_sk#24] -Condition : ((isnotnull(ss_hdemo_sk#22) AND isnotnull(ss_sold_time_sk#21)) AND isnotnull(ss_store_sk#23)) +Input [4]: [ss_sold_time_sk#17, ss_hdemo_sk#18, ss_store_sk#19, ss_sold_date_sk#20] +Condition : ((isnotnull(ss_hdemo_sk#18) AND isnotnull(ss_sold_time_sk#17)) AND isnotnull(ss_store_sk#19)) (32) Project [codegen id : 8] -Output [3]: [ss_sold_time_sk#21, ss_hdemo_sk#22, ss_store_sk#23] -Input [4]: [ss_sold_time_sk#21, ss_hdemo_sk#22, ss_store_sk#23, ss_sold_date_sk#24] +Output [3]: [ss_sold_time_sk#17, ss_hdemo_sk#18, ss_store_sk#19] +Input [4]: [ss_sold_time_sk#17, ss_hdemo_sk#18, ss_store_sk#19, ss_sold_date_sk#20] (33) Scan parquet default.time_dim -Output [3]: [t_time_sk#25, t_hour#26, t_minute#27] +Output [3]: [t_time_sk#21, t_hour#22, t_minute#23] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,9), LessThan(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 5] -Input [3]: [t_time_sk#25, t_hour#26, t_minute#27] +Input [3]: [t_time_sk#21, t_hour#22, t_minute#23] (35) Filter [codegen id : 5] -Input [3]: [t_time_sk#25, t_hour#26, t_minute#27] -Condition : ((((isnotnull(t_hour#26) AND isnotnull(t_minute#27)) AND (t_hour#26 = 9)) AND (t_minute#27 < 30)) AND isnotnull(t_time_sk#25)) +Input [3]: [t_time_sk#21, t_hour#22, t_minute#23] +Condition : ((((isnotnull(t_hour#22) AND isnotnull(t_minute#23)) AND (t_hour#22 = 9)) AND (t_minute#23 < 30)) AND isnotnull(t_time_sk#21)) (36) Project [codegen id : 5] -Output [1]: [t_time_sk#25] -Input [3]: [t_time_sk#25, t_hour#26, t_minute#27] +Output [1]: [t_time_sk#21] +Input [3]: [t_time_sk#21, t_hour#22, t_minute#23] (37) BroadcastExchange -Input [1]: [t_time_sk#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#28] +Input [1]: [t_time_sk#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (38) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ss_sold_time_sk#21] -Right keys [1]: [t_time_sk#25] +Left keys [1]: [ss_sold_time_sk#17] +Right keys [1]: [t_time_sk#21] Join condition: None (39) Project [codegen id : 8] -Output [2]: [ss_hdemo_sk#22, ss_store_sk#23] -Input [4]: [ss_sold_time_sk#21, ss_hdemo_sk#22, ss_store_sk#23, t_time_sk#25] +Output [2]: [ss_hdemo_sk#18, ss_store_sk#19] +Input [4]: [ss_sold_time_sk#17, ss_hdemo_sk#18, ss_store_sk#19, t_time_sk#21] (40) ReusedExchange [Reuses operator id: 16] -Output [1]: [s_store_sk#29] +Output [1]: [s_store_sk#24] (41) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ss_store_sk#23] -Right keys [1]: [s_store_sk#29] +Left keys [1]: [ss_store_sk#19] +Right keys [1]: [s_store_sk#24] Join condition: None (42) Project [codegen id : 8] -Output [1]: [ss_hdemo_sk#22] -Input [3]: [ss_hdemo_sk#22, ss_store_sk#23, s_store_sk#29] +Output [1]: [ss_hdemo_sk#18] +Input [3]: [ss_hdemo_sk#18, ss_store_sk#19, s_store_sk#24] (43) ReusedExchange [Reuses operator id: 23] -Output [1]: [hd_demo_sk#30] +Output [1]: [hd_demo_sk#25] (44) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ss_hdemo_sk#22] -Right keys [1]: [hd_demo_sk#30] +Left keys [1]: [ss_hdemo_sk#18] +Right keys [1]: [hd_demo_sk#25] Join condition: None (45) Project [codegen id : 8] Output: [] -Input [2]: [ss_hdemo_sk#22, hd_demo_sk#30] +Input [2]: [ss_hdemo_sk#18, hd_demo_sk#25] (46) HashAggregate [codegen id : 8] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#31] -Results [1]: [count#32] +Aggregate Attributes [1]: [count#26] +Results [1]: [count#27] (47) Exchange -Input [1]: [count#32] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#33] +Input [1]: [count#27] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6] (48) HashAggregate [codegen id : 9] -Input [1]: [count#32] +Input [1]: [count#27] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#34] -Results [1]: [count(1)#34 AS h9_to_9_30#35] +Aggregate Attributes [1]: [count(1)#28] +Results [1]: [count(1)#28 AS h9_to_9_30#29] (49) BroadcastExchange -Input [1]: [h9_to_9_30#35] -Arguments: IdentityBroadcastMode, [id=#36] +Input [1]: [h9_to_9_30#29] +Arguments: IdentityBroadcastMode, [plan_id=7] (50) BroadcastNestedLoopJoin [codegen id : 40] Join condition: None (51) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#37, ss_hdemo_sk#38, ss_store_sk#39, ss_sold_date_sk#40] +Output [4]: [ss_sold_time_sk#30, ss_hdemo_sk#31, ss_store_sk#32, ss_sold_date_sk#33] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (52) ColumnarToRow [codegen id : 13] -Input [4]: [ss_sold_time_sk#37, ss_hdemo_sk#38, ss_store_sk#39, ss_sold_date_sk#40] +Input [4]: [ss_sold_time_sk#30, ss_hdemo_sk#31, ss_store_sk#32, ss_sold_date_sk#33] (53) Filter [codegen id : 13] -Input [4]: [ss_sold_time_sk#37, ss_hdemo_sk#38, ss_store_sk#39, ss_sold_date_sk#40] -Condition : ((isnotnull(ss_hdemo_sk#38) AND isnotnull(ss_sold_time_sk#37)) AND isnotnull(ss_store_sk#39)) +Input [4]: [ss_sold_time_sk#30, ss_hdemo_sk#31, ss_store_sk#32, ss_sold_date_sk#33] +Condition : ((isnotnull(ss_hdemo_sk#31) AND isnotnull(ss_sold_time_sk#30)) AND isnotnull(ss_store_sk#32)) (54) Project [codegen id : 13] -Output [3]: [ss_sold_time_sk#37, ss_hdemo_sk#38, ss_store_sk#39] -Input [4]: [ss_sold_time_sk#37, ss_hdemo_sk#38, ss_store_sk#39, ss_sold_date_sk#40] +Output [3]: [ss_sold_time_sk#30, ss_hdemo_sk#31, ss_store_sk#32] +Input [4]: [ss_sold_time_sk#30, ss_hdemo_sk#31, ss_store_sk#32, ss_sold_date_sk#33] (55) Scan parquet default.time_dim -Output [3]: [t_time_sk#41, t_hour#42, t_minute#43] +Output [3]: [t_time_sk#34, t_hour#35, t_minute#36] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,9), GreaterThanOrEqual(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (56) ColumnarToRow [codegen id : 10] -Input [3]: [t_time_sk#41, t_hour#42, t_minute#43] +Input [3]: [t_time_sk#34, t_hour#35, t_minute#36] (57) Filter [codegen id : 10] -Input [3]: [t_time_sk#41, t_hour#42, t_minute#43] -Condition : ((((isnotnull(t_hour#42) AND isnotnull(t_minute#43)) AND (t_hour#42 = 9)) AND (t_minute#43 >= 30)) AND isnotnull(t_time_sk#41)) +Input [3]: [t_time_sk#34, t_hour#35, t_minute#36] +Condition : ((((isnotnull(t_hour#35) AND isnotnull(t_minute#36)) AND (t_hour#35 = 9)) AND (t_minute#36 >= 30)) AND isnotnull(t_time_sk#34)) (58) Project [codegen id : 10] -Output [1]: [t_time_sk#41] -Input [3]: [t_time_sk#41, t_hour#42, t_minute#43] +Output [1]: [t_time_sk#34] +Input [3]: [t_time_sk#34, t_hour#35, t_minute#36] (59) BroadcastExchange -Input [1]: [t_time_sk#41] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#44] +Input [1]: [t_time_sk#34] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] (60) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_sold_time_sk#37] -Right keys [1]: [t_time_sk#41] +Left keys [1]: [ss_sold_time_sk#30] +Right keys [1]: [t_time_sk#34] Join condition: None (61) Project [codegen id : 13] -Output [2]: [ss_hdemo_sk#38, ss_store_sk#39] -Input [4]: [ss_sold_time_sk#37, ss_hdemo_sk#38, ss_store_sk#39, t_time_sk#41] +Output [2]: [ss_hdemo_sk#31, ss_store_sk#32] +Input [4]: [ss_sold_time_sk#30, ss_hdemo_sk#31, ss_store_sk#32, t_time_sk#34] (62) ReusedExchange [Reuses operator id: 16] -Output [1]: [s_store_sk#45] +Output [1]: [s_store_sk#37] (63) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_store_sk#39] -Right keys [1]: [s_store_sk#45] +Left keys [1]: [ss_store_sk#32] +Right keys [1]: [s_store_sk#37] Join condition: None (64) Project [codegen id : 13] -Output [1]: [ss_hdemo_sk#38] -Input [3]: [ss_hdemo_sk#38, ss_store_sk#39, s_store_sk#45] +Output [1]: [ss_hdemo_sk#31] +Input [3]: [ss_hdemo_sk#31, ss_store_sk#32, s_store_sk#37] (65) ReusedExchange [Reuses operator id: 23] -Output [1]: [hd_demo_sk#46] +Output [1]: [hd_demo_sk#38] (66) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_hdemo_sk#38] -Right keys [1]: [hd_demo_sk#46] +Left keys [1]: [ss_hdemo_sk#31] +Right keys [1]: [hd_demo_sk#38] Join condition: None (67) Project [codegen id : 13] Output: [] -Input [2]: [ss_hdemo_sk#38, hd_demo_sk#46] +Input [2]: [ss_hdemo_sk#31, hd_demo_sk#38] (68) HashAggregate [codegen id : 13] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#47] -Results [1]: [count#48] +Aggregate Attributes [1]: [count#39] +Results [1]: [count#40] (69) Exchange -Input [1]: [count#48] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#49] +Input [1]: [count#40] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=9] (70) HashAggregate [codegen id : 14] -Input [1]: [count#48] +Input [1]: [count#40] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#50] -Results [1]: [count(1)#50 AS h9_30_to_10#51] +Aggregate Attributes [1]: [count(1)#41] +Results [1]: [count(1)#41 AS h9_30_to_10#42] (71) BroadcastExchange -Input [1]: [h9_30_to_10#51] -Arguments: IdentityBroadcastMode, [id=#52] +Input [1]: [h9_30_to_10#42] +Arguments: IdentityBroadcastMode, [plan_id=10] (72) BroadcastNestedLoopJoin [codegen id : 40] Join condition: None (73) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#53, ss_hdemo_sk#54, ss_store_sk#55, ss_sold_date_sk#56] +Output [4]: [ss_sold_time_sk#43, ss_hdemo_sk#44, ss_store_sk#45, ss_sold_date_sk#46] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (74) ColumnarToRow [codegen id : 18] -Input [4]: [ss_sold_time_sk#53, ss_hdemo_sk#54, ss_store_sk#55, ss_sold_date_sk#56] +Input [4]: [ss_sold_time_sk#43, ss_hdemo_sk#44, ss_store_sk#45, ss_sold_date_sk#46] (75) Filter [codegen id : 18] -Input [4]: [ss_sold_time_sk#53, ss_hdemo_sk#54, ss_store_sk#55, ss_sold_date_sk#56] -Condition : ((isnotnull(ss_hdemo_sk#54) AND isnotnull(ss_sold_time_sk#53)) AND isnotnull(ss_store_sk#55)) +Input [4]: [ss_sold_time_sk#43, ss_hdemo_sk#44, ss_store_sk#45, ss_sold_date_sk#46] +Condition : ((isnotnull(ss_hdemo_sk#44) AND isnotnull(ss_sold_time_sk#43)) AND isnotnull(ss_store_sk#45)) (76) Project [codegen id : 18] -Output [3]: [ss_sold_time_sk#53, ss_hdemo_sk#54, ss_store_sk#55] -Input [4]: [ss_sold_time_sk#53, ss_hdemo_sk#54, ss_store_sk#55, ss_sold_date_sk#56] +Output [3]: [ss_sold_time_sk#43, ss_hdemo_sk#44, ss_store_sk#45] +Input [4]: [ss_sold_time_sk#43, ss_hdemo_sk#44, ss_store_sk#45, ss_sold_date_sk#46] (77) Scan parquet default.time_dim -Output [3]: [t_time_sk#57, t_hour#58, t_minute#59] +Output [3]: [t_time_sk#47, t_hour#48, t_minute#49] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,10), LessThan(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (78) ColumnarToRow [codegen id : 15] -Input [3]: [t_time_sk#57, t_hour#58, t_minute#59] +Input [3]: [t_time_sk#47, t_hour#48, t_minute#49] (79) Filter [codegen id : 15] -Input [3]: [t_time_sk#57, t_hour#58, t_minute#59] -Condition : ((((isnotnull(t_hour#58) AND isnotnull(t_minute#59)) AND (t_hour#58 = 10)) AND (t_minute#59 < 30)) AND isnotnull(t_time_sk#57)) +Input [3]: [t_time_sk#47, t_hour#48, t_minute#49] +Condition : ((((isnotnull(t_hour#48) AND isnotnull(t_minute#49)) AND (t_hour#48 = 10)) AND (t_minute#49 < 30)) AND isnotnull(t_time_sk#47)) (80) Project [codegen id : 15] -Output [1]: [t_time_sk#57] -Input [3]: [t_time_sk#57, t_hour#58, t_minute#59] +Output [1]: [t_time_sk#47] +Input [3]: [t_time_sk#47, t_hour#48, t_minute#49] (81) BroadcastExchange -Input [1]: [t_time_sk#57] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#60] +Input [1]: [t_time_sk#47] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11] (82) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [ss_sold_time_sk#53] -Right keys [1]: [t_time_sk#57] +Left keys [1]: [ss_sold_time_sk#43] +Right keys [1]: [t_time_sk#47] Join condition: None (83) Project [codegen id : 18] -Output [2]: [ss_hdemo_sk#54, ss_store_sk#55] -Input [4]: [ss_sold_time_sk#53, ss_hdemo_sk#54, ss_store_sk#55, t_time_sk#57] +Output [2]: [ss_hdemo_sk#44, ss_store_sk#45] +Input [4]: [ss_sold_time_sk#43, ss_hdemo_sk#44, ss_store_sk#45, t_time_sk#47] (84) ReusedExchange [Reuses operator id: 16] -Output [1]: [s_store_sk#61] +Output [1]: [s_store_sk#50] (85) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [ss_store_sk#55] -Right keys [1]: [s_store_sk#61] +Left keys [1]: [ss_store_sk#45] +Right keys [1]: [s_store_sk#50] Join condition: None (86) Project [codegen id : 18] -Output [1]: [ss_hdemo_sk#54] -Input [3]: [ss_hdemo_sk#54, ss_store_sk#55, s_store_sk#61] +Output [1]: [ss_hdemo_sk#44] +Input [3]: [ss_hdemo_sk#44, ss_store_sk#45, s_store_sk#50] (87) ReusedExchange [Reuses operator id: 23] -Output [1]: [hd_demo_sk#62] +Output [1]: [hd_demo_sk#51] (88) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [ss_hdemo_sk#54] -Right keys [1]: [hd_demo_sk#62] +Left keys [1]: [ss_hdemo_sk#44] +Right keys [1]: [hd_demo_sk#51] Join condition: None (89) Project [codegen id : 18] Output: [] -Input [2]: [ss_hdemo_sk#54, hd_demo_sk#62] +Input [2]: [ss_hdemo_sk#44, hd_demo_sk#51] (90) HashAggregate [codegen id : 18] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#63] -Results [1]: [count#64] +Aggregate Attributes [1]: [count#52] +Results [1]: [count#53] (91) Exchange -Input [1]: [count#64] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#65] +Input [1]: [count#53] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12] (92) HashAggregate [codegen id : 19] -Input [1]: [count#64] +Input [1]: [count#53] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#66] -Results [1]: [count(1)#66 AS h10_to_10_30#67] +Aggregate Attributes [1]: [count(1)#54] +Results [1]: [count(1)#54 AS h10_to_10_30#55] (93) BroadcastExchange -Input [1]: [h10_to_10_30#67] -Arguments: IdentityBroadcastMode, [id=#68] +Input [1]: [h10_to_10_30#55] +Arguments: IdentityBroadcastMode, [plan_id=13] (94) BroadcastNestedLoopJoin [codegen id : 40] Join condition: None (95) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] +Output [4]: [ss_sold_time_sk#56, ss_hdemo_sk#57, ss_store_sk#58, ss_sold_date_sk#59] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (96) ColumnarToRow [codegen id : 23] -Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] +Input [4]: [ss_sold_time_sk#56, ss_hdemo_sk#57, ss_store_sk#58, ss_sold_date_sk#59] (97) Filter [codegen id : 23] -Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] -Condition : ((isnotnull(ss_hdemo_sk#70) AND isnotnull(ss_sold_time_sk#69)) AND isnotnull(ss_store_sk#71)) +Input [4]: [ss_sold_time_sk#56, ss_hdemo_sk#57, ss_store_sk#58, ss_sold_date_sk#59] +Condition : ((isnotnull(ss_hdemo_sk#57) AND isnotnull(ss_sold_time_sk#56)) AND isnotnull(ss_store_sk#58)) (98) Project [codegen id : 23] -Output [3]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71] -Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] +Output [3]: [ss_sold_time_sk#56, ss_hdemo_sk#57, ss_store_sk#58] +Input [4]: [ss_sold_time_sk#56, ss_hdemo_sk#57, ss_store_sk#58, ss_sold_date_sk#59] (99) Scan parquet default.time_dim -Output [3]: [t_time_sk#73, t_hour#74, t_minute#75] +Output [3]: [t_time_sk#60, t_hour#61, t_minute#62] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,10), GreaterThanOrEqual(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (100) ColumnarToRow [codegen id : 20] -Input [3]: [t_time_sk#73, t_hour#74, t_minute#75] +Input [3]: [t_time_sk#60, t_hour#61, t_minute#62] (101) Filter [codegen id : 20] -Input [3]: [t_time_sk#73, t_hour#74, t_minute#75] -Condition : ((((isnotnull(t_hour#74) AND isnotnull(t_minute#75)) AND (t_hour#74 = 10)) AND (t_minute#75 >= 30)) AND isnotnull(t_time_sk#73)) +Input [3]: [t_time_sk#60, t_hour#61, t_minute#62] +Condition : ((((isnotnull(t_hour#61) AND isnotnull(t_minute#62)) AND (t_hour#61 = 10)) AND (t_minute#62 >= 30)) AND isnotnull(t_time_sk#60)) (102) Project [codegen id : 20] -Output [1]: [t_time_sk#73] -Input [3]: [t_time_sk#73, t_hour#74, t_minute#75] +Output [1]: [t_time_sk#60] +Input [3]: [t_time_sk#60, t_hour#61, t_minute#62] (103) BroadcastExchange -Input [1]: [t_time_sk#73] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#76] +Input [1]: [t_time_sk#60] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=14] (104) BroadcastHashJoin [codegen id : 23] -Left keys [1]: [ss_sold_time_sk#69] -Right keys [1]: [t_time_sk#73] +Left keys [1]: [ss_sold_time_sk#56] +Right keys [1]: [t_time_sk#60] Join condition: None (105) Project [codegen id : 23] -Output [2]: [ss_hdemo_sk#70, ss_store_sk#71] -Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, t_time_sk#73] +Output [2]: [ss_hdemo_sk#57, ss_store_sk#58] +Input [4]: [ss_sold_time_sk#56, ss_hdemo_sk#57, ss_store_sk#58, t_time_sk#60] (106) ReusedExchange [Reuses operator id: 16] -Output [1]: [s_store_sk#77] +Output [1]: [s_store_sk#63] (107) BroadcastHashJoin [codegen id : 23] -Left keys [1]: [ss_store_sk#71] -Right keys [1]: [s_store_sk#77] +Left keys [1]: [ss_store_sk#58] +Right keys [1]: [s_store_sk#63] Join condition: None (108) Project [codegen id : 23] -Output [1]: [ss_hdemo_sk#70] -Input [3]: [ss_hdemo_sk#70, ss_store_sk#71, s_store_sk#77] +Output [1]: [ss_hdemo_sk#57] +Input [3]: [ss_hdemo_sk#57, ss_store_sk#58, s_store_sk#63] (109) ReusedExchange [Reuses operator id: 23] -Output [1]: [hd_demo_sk#78] +Output [1]: [hd_demo_sk#64] (110) BroadcastHashJoin [codegen id : 23] -Left keys [1]: [ss_hdemo_sk#70] -Right keys [1]: [hd_demo_sk#78] +Left keys [1]: [ss_hdemo_sk#57] +Right keys [1]: [hd_demo_sk#64] Join condition: None (111) Project [codegen id : 23] Output: [] -Input [2]: [ss_hdemo_sk#70, hd_demo_sk#78] +Input [2]: [ss_hdemo_sk#57, hd_demo_sk#64] (112) HashAggregate [codegen id : 23] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#79] -Results [1]: [count#80] +Aggregate Attributes [1]: [count#65] +Results [1]: [count#66] (113) Exchange -Input [1]: [count#80] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#81] +Input [1]: [count#66] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=15] (114) HashAggregate [codegen id : 24] -Input [1]: [count#80] +Input [1]: [count#66] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#82] -Results [1]: [count(1)#82 AS h10_30_to_11#83] +Aggregate Attributes [1]: [count(1)#67] +Results [1]: [count(1)#67 AS h10_30_to_11#68] (115) BroadcastExchange -Input [1]: [h10_30_to_11#83] -Arguments: IdentityBroadcastMode, [id=#84] +Input [1]: [h10_30_to_11#68] +Arguments: IdentityBroadcastMode, [plan_id=16] (116) BroadcastNestedLoopJoin [codegen id : 40] Join condition: None (117) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#85, ss_hdemo_sk#86, ss_store_sk#87, ss_sold_date_sk#88] +Output [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (118) ColumnarToRow [codegen id : 28] -Input [4]: [ss_sold_time_sk#85, ss_hdemo_sk#86, ss_store_sk#87, ss_sold_date_sk#88] +Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] (119) Filter [codegen id : 28] -Input [4]: [ss_sold_time_sk#85, ss_hdemo_sk#86, ss_store_sk#87, ss_sold_date_sk#88] -Condition : ((isnotnull(ss_hdemo_sk#86) AND isnotnull(ss_sold_time_sk#85)) AND isnotnull(ss_store_sk#87)) +Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] +Condition : ((isnotnull(ss_hdemo_sk#70) AND isnotnull(ss_sold_time_sk#69)) AND isnotnull(ss_store_sk#71)) (120) Project [codegen id : 28] -Output [3]: [ss_sold_time_sk#85, ss_hdemo_sk#86, ss_store_sk#87] -Input [4]: [ss_sold_time_sk#85, ss_hdemo_sk#86, ss_store_sk#87, ss_sold_date_sk#88] +Output [3]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71] +Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] (121) Scan parquet default.time_dim -Output [3]: [t_time_sk#89, t_hour#90, t_minute#91] +Output [3]: [t_time_sk#73, t_hour#74, t_minute#75] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,11), LessThan(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (122) ColumnarToRow [codegen id : 25] -Input [3]: [t_time_sk#89, t_hour#90, t_minute#91] +Input [3]: [t_time_sk#73, t_hour#74, t_minute#75] (123) Filter [codegen id : 25] -Input [3]: [t_time_sk#89, t_hour#90, t_minute#91] -Condition : ((((isnotnull(t_hour#90) AND isnotnull(t_minute#91)) AND (t_hour#90 = 11)) AND (t_minute#91 < 30)) AND isnotnull(t_time_sk#89)) +Input [3]: [t_time_sk#73, t_hour#74, t_minute#75] +Condition : ((((isnotnull(t_hour#74) AND isnotnull(t_minute#75)) AND (t_hour#74 = 11)) AND (t_minute#75 < 30)) AND isnotnull(t_time_sk#73)) (124) Project [codegen id : 25] -Output [1]: [t_time_sk#89] -Input [3]: [t_time_sk#89, t_hour#90, t_minute#91] +Output [1]: [t_time_sk#73] +Input [3]: [t_time_sk#73, t_hour#74, t_minute#75] (125) BroadcastExchange -Input [1]: [t_time_sk#89] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#92] +Input [1]: [t_time_sk#73] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=17] (126) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [ss_sold_time_sk#85] -Right keys [1]: [t_time_sk#89] +Left keys [1]: [ss_sold_time_sk#69] +Right keys [1]: [t_time_sk#73] Join condition: None (127) Project [codegen id : 28] -Output [2]: [ss_hdemo_sk#86, ss_store_sk#87] -Input [4]: [ss_sold_time_sk#85, ss_hdemo_sk#86, ss_store_sk#87, t_time_sk#89] +Output [2]: [ss_hdemo_sk#70, ss_store_sk#71] +Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, t_time_sk#73] (128) ReusedExchange [Reuses operator id: 16] -Output [1]: [s_store_sk#93] +Output [1]: [s_store_sk#76] (129) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [ss_store_sk#87] -Right keys [1]: [s_store_sk#93] +Left keys [1]: [ss_store_sk#71] +Right keys [1]: [s_store_sk#76] Join condition: None (130) Project [codegen id : 28] -Output [1]: [ss_hdemo_sk#86] -Input [3]: [ss_hdemo_sk#86, ss_store_sk#87, s_store_sk#93] +Output [1]: [ss_hdemo_sk#70] +Input [3]: [ss_hdemo_sk#70, ss_store_sk#71, s_store_sk#76] (131) ReusedExchange [Reuses operator id: 23] -Output [1]: [hd_demo_sk#94] +Output [1]: [hd_demo_sk#77] (132) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [ss_hdemo_sk#86] -Right keys [1]: [hd_demo_sk#94] +Left keys [1]: [ss_hdemo_sk#70] +Right keys [1]: [hd_demo_sk#77] Join condition: None (133) Project [codegen id : 28] Output: [] -Input [2]: [ss_hdemo_sk#86, hd_demo_sk#94] +Input [2]: [ss_hdemo_sk#70, hd_demo_sk#77] (134) HashAggregate [codegen id : 28] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#95] -Results [1]: [count#96] +Aggregate Attributes [1]: [count#78] +Results [1]: [count#79] (135) Exchange -Input [1]: [count#96] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#97] +Input [1]: [count#79] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=18] (136) HashAggregate [codegen id : 29] -Input [1]: [count#96] +Input [1]: [count#79] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#98] -Results [1]: [count(1)#98 AS h11_to_11_30#99] +Aggregate Attributes [1]: [count(1)#80] +Results [1]: [count(1)#80 AS h11_to_11_30#81] (137) BroadcastExchange -Input [1]: [h11_to_11_30#99] -Arguments: IdentityBroadcastMode, [id=#100] +Input [1]: [h11_to_11_30#81] +Arguments: IdentityBroadcastMode, [plan_id=19] (138) BroadcastNestedLoopJoin [codegen id : 40] Join condition: None (139) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#101, ss_hdemo_sk#102, ss_store_sk#103, ss_sold_date_sk#104] +Output [4]: [ss_sold_time_sk#82, ss_hdemo_sk#83, ss_store_sk#84, ss_sold_date_sk#85] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (140) ColumnarToRow [codegen id : 33] -Input [4]: [ss_sold_time_sk#101, ss_hdemo_sk#102, ss_store_sk#103, ss_sold_date_sk#104] +Input [4]: [ss_sold_time_sk#82, ss_hdemo_sk#83, ss_store_sk#84, ss_sold_date_sk#85] (141) Filter [codegen id : 33] -Input [4]: [ss_sold_time_sk#101, ss_hdemo_sk#102, ss_store_sk#103, ss_sold_date_sk#104] -Condition : ((isnotnull(ss_hdemo_sk#102) AND isnotnull(ss_sold_time_sk#101)) AND isnotnull(ss_store_sk#103)) +Input [4]: [ss_sold_time_sk#82, ss_hdemo_sk#83, ss_store_sk#84, ss_sold_date_sk#85] +Condition : ((isnotnull(ss_hdemo_sk#83) AND isnotnull(ss_sold_time_sk#82)) AND isnotnull(ss_store_sk#84)) (142) Project [codegen id : 33] -Output [3]: [ss_sold_time_sk#101, ss_hdemo_sk#102, ss_store_sk#103] -Input [4]: [ss_sold_time_sk#101, ss_hdemo_sk#102, ss_store_sk#103, ss_sold_date_sk#104] +Output [3]: [ss_sold_time_sk#82, ss_hdemo_sk#83, ss_store_sk#84] +Input [4]: [ss_sold_time_sk#82, ss_hdemo_sk#83, ss_store_sk#84, ss_sold_date_sk#85] (143) Scan parquet default.time_dim -Output [3]: [t_time_sk#105, t_hour#106, t_minute#107] +Output [3]: [t_time_sk#86, t_hour#87, t_minute#88] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,11), GreaterThanOrEqual(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (144) ColumnarToRow [codegen id : 30] -Input [3]: [t_time_sk#105, t_hour#106, t_minute#107] +Input [3]: [t_time_sk#86, t_hour#87, t_minute#88] (145) Filter [codegen id : 30] -Input [3]: [t_time_sk#105, t_hour#106, t_minute#107] -Condition : ((((isnotnull(t_hour#106) AND isnotnull(t_minute#107)) AND (t_hour#106 = 11)) AND (t_minute#107 >= 30)) AND isnotnull(t_time_sk#105)) +Input [3]: [t_time_sk#86, t_hour#87, t_minute#88] +Condition : ((((isnotnull(t_hour#87) AND isnotnull(t_minute#88)) AND (t_hour#87 = 11)) AND (t_minute#88 >= 30)) AND isnotnull(t_time_sk#86)) (146) Project [codegen id : 30] -Output [1]: [t_time_sk#105] -Input [3]: [t_time_sk#105, t_hour#106, t_minute#107] +Output [1]: [t_time_sk#86] +Input [3]: [t_time_sk#86, t_hour#87, t_minute#88] (147) BroadcastExchange -Input [1]: [t_time_sk#105] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#108] +Input [1]: [t_time_sk#86] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=20] (148) BroadcastHashJoin [codegen id : 33] -Left keys [1]: [ss_sold_time_sk#101] -Right keys [1]: [t_time_sk#105] +Left keys [1]: [ss_sold_time_sk#82] +Right keys [1]: [t_time_sk#86] Join condition: None (149) Project [codegen id : 33] -Output [2]: [ss_hdemo_sk#102, ss_store_sk#103] -Input [4]: [ss_sold_time_sk#101, ss_hdemo_sk#102, ss_store_sk#103, t_time_sk#105] +Output [2]: [ss_hdemo_sk#83, ss_store_sk#84] +Input [4]: [ss_sold_time_sk#82, ss_hdemo_sk#83, ss_store_sk#84, t_time_sk#86] (150) ReusedExchange [Reuses operator id: 16] -Output [1]: [s_store_sk#109] +Output [1]: [s_store_sk#89] (151) BroadcastHashJoin [codegen id : 33] -Left keys [1]: [ss_store_sk#103] -Right keys [1]: [s_store_sk#109] +Left keys [1]: [ss_store_sk#84] +Right keys [1]: [s_store_sk#89] Join condition: None (152) Project [codegen id : 33] -Output [1]: [ss_hdemo_sk#102] -Input [3]: [ss_hdemo_sk#102, ss_store_sk#103, s_store_sk#109] +Output [1]: [ss_hdemo_sk#83] +Input [3]: [ss_hdemo_sk#83, ss_store_sk#84, s_store_sk#89] (153) ReusedExchange [Reuses operator id: 23] -Output [1]: [hd_demo_sk#110] +Output [1]: [hd_demo_sk#90] (154) BroadcastHashJoin [codegen id : 33] -Left keys [1]: [ss_hdemo_sk#102] -Right keys [1]: [hd_demo_sk#110] +Left keys [1]: [ss_hdemo_sk#83] +Right keys [1]: [hd_demo_sk#90] Join condition: None (155) Project [codegen id : 33] Output: [] -Input [2]: [ss_hdemo_sk#102, hd_demo_sk#110] +Input [2]: [ss_hdemo_sk#83, hd_demo_sk#90] (156) HashAggregate [codegen id : 33] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#111] -Results [1]: [count#112] +Aggregate Attributes [1]: [count#91] +Results [1]: [count#92] (157) Exchange -Input [1]: [count#112] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#113] +Input [1]: [count#92] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=21] (158) HashAggregate [codegen id : 34] -Input [1]: [count#112] +Input [1]: [count#92] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#114] -Results [1]: [count(1)#114 AS h11_30_to_12#115] +Aggregate Attributes [1]: [count(1)#93] +Results [1]: [count(1)#93 AS h11_30_to_12#94] (159) BroadcastExchange -Input [1]: [h11_30_to_12#115] -Arguments: IdentityBroadcastMode, [id=#116] +Input [1]: [h11_30_to_12#94] +Arguments: IdentityBroadcastMode, [plan_id=22] (160) BroadcastNestedLoopJoin [codegen id : 40] Join condition: None (161) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#117, ss_hdemo_sk#118, ss_store_sk#119, ss_sold_date_sk#120] +Output [4]: [ss_sold_time_sk#95, ss_hdemo_sk#96, ss_store_sk#97, ss_sold_date_sk#98] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (162) ColumnarToRow [codegen id : 38] -Input [4]: [ss_sold_time_sk#117, ss_hdemo_sk#118, ss_store_sk#119, ss_sold_date_sk#120] +Input [4]: [ss_sold_time_sk#95, ss_hdemo_sk#96, ss_store_sk#97, ss_sold_date_sk#98] (163) Filter [codegen id : 38] -Input [4]: [ss_sold_time_sk#117, ss_hdemo_sk#118, ss_store_sk#119, ss_sold_date_sk#120] -Condition : ((isnotnull(ss_hdemo_sk#118) AND isnotnull(ss_sold_time_sk#117)) AND isnotnull(ss_store_sk#119)) +Input [4]: [ss_sold_time_sk#95, ss_hdemo_sk#96, ss_store_sk#97, ss_sold_date_sk#98] +Condition : ((isnotnull(ss_hdemo_sk#96) AND isnotnull(ss_sold_time_sk#95)) AND isnotnull(ss_store_sk#97)) (164) Project [codegen id : 38] -Output [3]: [ss_sold_time_sk#117, ss_hdemo_sk#118, ss_store_sk#119] -Input [4]: [ss_sold_time_sk#117, ss_hdemo_sk#118, ss_store_sk#119, ss_sold_date_sk#120] +Output [3]: [ss_sold_time_sk#95, ss_hdemo_sk#96, ss_store_sk#97] +Input [4]: [ss_sold_time_sk#95, ss_hdemo_sk#96, ss_store_sk#97, ss_sold_date_sk#98] (165) Scan parquet default.time_dim -Output [3]: [t_time_sk#121, t_hour#122, t_minute#123] +Output [3]: [t_time_sk#99, t_hour#100, t_minute#101] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,12), LessThan(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (166) ColumnarToRow [codegen id : 35] -Input [3]: [t_time_sk#121, t_hour#122, t_minute#123] +Input [3]: [t_time_sk#99, t_hour#100, t_minute#101] (167) Filter [codegen id : 35] -Input [3]: [t_time_sk#121, t_hour#122, t_minute#123] -Condition : ((((isnotnull(t_hour#122) AND isnotnull(t_minute#123)) AND (t_hour#122 = 12)) AND (t_minute#123 < 30)) AND isnotnull(t_time_sk#121)) +Input [3]: [t_time_sk#99, t_hour#100, t_minute#101] +Condition : ((((isnotnull(t_hour#100) AND isnotnull(t_minute#101)) AND (t_hour#100 = 12)) AND (t_minute#101 < 30)) AND isnotnull(t_time_sk#99)) (168) Project [codegen id : 35] -Output [1]: [t_time_sk#121] -Input [3]: [t_time_sk#121, t_hour#122, t_minute#123] +Output [1]: [t_time_sk#99] +Input [3]: [t_time_sk#99, t_hour#100, t_minute#101] (169) BroadcastExchange -Input [1]: [t_time_sk#121] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#124] +Input [1]: [t_time_sk#99] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=23] (170) BroadcastHashJoin [codegen id : 38] -Left keys [1]: [ss_sold_time_sk#117] -Right keys [1]: [t_time_sk#121] +Left keys [1]: [ss_sold_time_sk#95] +Right keys [1]: [t_time_sk#99] Join condition: None (171) Project [codegen id : 38] -Output [2]: [ss_hdemo_sk#118, ss_store_sk#119] -Input [4]: [ss_sold_time_sk#117, ss_hdemo_sk#118, ss_store_sk#119, t_time_sk#121] +Output [2]: [ss_hdemo_sk#96, ss_store_sk#97] +Input [4]: [ss_sold_time_sk#95, ss_hdemo_sk#96, ss_store_sk#97, t_time_sk#99] (172) ReusedExchange [Reuses operator id: 16] -Output [1]: [s_store_sk#125] +Output [1]: [s_store_sk#102] (173) BroadcastHashJoin [codegen id : 38] -Left keys [1]: [ss_store_sk#119] -Right keys [1]: [s_store_sk#125] +Left keys [1]: [ss_store_sk#97] +Right keys [1]: [s_store_sk#102] Join condition: None (174) Project [codegen id : 38] -Output [1]: [ss_hdemo_sk#118] -Input [3]: [ss_hdemo_sk#118, ss_store_sk#119, s_store_sk#125] +Output [1]: [ss_hdemo_sk#96] +Input [3]: [ss_hdemo_sk#96, ss_store_sk#97, s_store_sk#102] (175) ReusedExchange [Reuses operator id: 23] -Output [1]: [hd_demo_sk#126] +Output [1]: [hd_demo_sk#103] (176) BroadcastHashJoin [codegen id : 38] -Left keys [1]: [ss_hdemo_sk#118] -Right keys [1]: [hd_demo_sk#126] +Left keys [1]: [ss_hdemo_sk#96] +Right keys [1]: [hd_demo_sk#103] Join condition: None (177) Project [codegen id : 38] Output: [] -Input [2]: [ss_hdemo_sk#118, hd_demo_sk#126] +Input [2]: [ss_hdemo_sk#96, hd_demo_sk#103] (178) HashAggregate [codegen id : 38] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#127] -Results [1]: [count#128] +Aggregate Attributes [1]: [count#104] +Results [1]: [count#105] (179) Exchange -Input [1]: [count#128] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#129] +Input [1]: [count#105] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=24] (180) HashAggregate [codegen id : 39] -Input [1]: [count#128] +Input [1]: [count#105] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#130] -Results [1]: [count(1)#130 AS h12_to_12_30#131] +Aggregate Attributes [1]: [count(1)#106] +Results [1]: [count(1)#106 AS h12_to_12_30#107] (181) BroadcastExchange -Input [1]: [h12_to_12_30#131] -Arguments: IdentityBroadcastMode, [id=#132] +Input [1]: [h12_to_12_30#107] +Arguments: IdentityBroadcastMode, [plan_id=25] (182) BroadcastNestedLoopJoin [codegen id : 40] Join condition: None diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q88/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q88/explain.txt index 9f56c71154a66..9c5bd50ccb8c4 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q88/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q88/explain.txt @@ -221,7 +221,7 @@ Input [3]: [hd_demo_sk#5, hd_dep_count#6, hd_vehicle_count#7] (9) BroadcastExchange Input [1]: [hd_demo_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] @@ -233,767 +233,767 @@ Output [2]: [ss_sold_time_sk#1, ss_store_sk#3] Input [4]: [ss_sold_time_sk#1, ss_hdemo_sk#2, ss_store_sk#3, hd_demo_sk#5] (12) Scan parquet default.time_dim -Output [3]: [t_time_sk#9, t_hour#10, t_minute#11] +Output [3]: [t_time_sk#8, t_hour#9, t_minute#10] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,8), GreaterThanOrEqual(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (13) ColumnarToRow [codegen id : 2] -Input [3]: [t_time_sk#9, t_hour#10, t_minute#11] +Input [3]: [t_time_sk#8, t_hour#9, t_minute#10] (14) Filter [codegen id : 2] -Input [3]: [t_time_sk#9, t_hour#10, t_minute#11] -Condition : ((((isnotnull(t_hour#10) AND isnotnull(t_minute#11)) AND (t_hour#10 = 8)) AND (t_minute#11 >= 30)) AND isnotnull(t_time_sk#9)) +Input [3]: [t_time_sk#8, t_hour#9, t_minute#10] +Condition : ((((isnotnull(t_hour#9) AND isnotnull(t_minute#10)) AND (t_hour#9 = 8)) AND (t_minute#10 >= 30)) AND isnotnull(t_time_sk#8)) (15) Project [codegen id : 2] -Output [1]: [t_time_sk#9] -Input [3]: [t_time_sk#9, t_hour#10, t_minute#11] +Output [1]: [t_time_sk#8] +Input [3]: [t_time_sk#8, t_hour#9, t_minute#10] (16) BroadcastExchange -Input [1]: [t_time_sk#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Input [1]: [t_time_sk#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_time_sk#1] -Right keys [1]: [t_time_sk#9] +Right keys [1]: [t_time_sk#8] Join condition: None (18) Project [codegen id : 4] Output [1]: [ss_store_sk#3] -Input [3]: [ss_sold_time_sk#1, ss_store_sk#3, t_time_sk#9] +Input [3]: [ss_sold_time_sk#1, ss_store_sk#3, t_time_sk#8] (19) Scan parquet default.store -Output [2]: [s_store_sk#13, s_store_name#14] +Output [2]: [s_store_sk#11, s_store_name#12] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_name), EqualTo(s_store_name,ese), IsNotNull(s_store_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 3] -Input [2]: [s_store_sk#13, s_store_name#14] +Input [2]: [s_store_sk#11, s_store_name#12] (21) Filter [codegen id : 3] -Input [2]: [s_store_sk#13, s_store_name#14] -Condition : ((isnotnull(s_store_name#14) AND (s_store_name#14 = ese)) AND isnotnull(s_store_sk#13)) +Input [2]: [s_store_sk#11, s_store_name#12] +Condition : ((isnotnull(s_store_name#12) AND (s_store_name#12 = ese)) AND isnotnull(s_store_sk#11)) (22) Project [codegen id : 3] -Output [1]: [s_store_sk#13] -Input [2]: [s_store_sk#13, s_store_name#14] +Output [1]: [s_store_sk#11] +Input [2]: [s_store_sk#11, s_store_name#12] (23) BroadcastExchange -Input [1]: [s_store_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [s_store_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#13] +Right keys [1]: [s_store_sk#11] Join condition: None (25) Project [codegen id : 4] Output: [] -Input [2]: [ss_store_sk#3, s_store_sk#13] +Input [2]: [ss_store_sk#3, s_store_sk#11] (26) HashAggregate [codegen id : 4] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#16] -Results [1]: [count#17] +Aggregate Attributes [1]: [count#13] +Results [1]: [count#14] (27) Exchange -Input [1]: [count#17] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#18] +Input [1]: [count#14] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 40] -Input [1]: [count#17] +Input [1]: [count#14] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#19] -Results [1]: [count(1)#19 AS h8_30_to_9#20] +Aggregate Attributes [1]: [count(1)#15] +Results [1]: [count(1)#15 AS h8_30_to_9#16] (29) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#21, ss_hdemo_sk#22, ss_store_sk#23, ss_sold_date_sk#24] +Output [4]: [ss_sold_time_sk#17, ss_hdemo_sk#18, ss_store_sk#19, ss_sold_date_sk#20] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 8] -Input [4]: [ss_sold_time_sk#21, ss_hdemo_sk#22, ss_store_sk#23, ss_sold_date_sk#24] +Input [4]: [ss_sold_time_sk#17, ss_hdemo_sk#18, ss_store_sk#19, ss_sold_date_sk#20] (31) Filter [codegen id : 8] -Input [4]: [ss_sold_time_sk#21, ss_hdemo_sk#22, ss_store_sk#23, ss_sold_date_sk#24] -Condition : ((isnotnull(ss_hdemo_sk#22) AND isnotnull(ss_sold_time_sk#21)) AND isnotnull(ss_store_sk#23)) +Input [4]: [ss_sold_time_sk#17, ss_hdemo_sk#18, ss_store_sk#19, ss_sold_date_sk#20] +Condition : ((isnotnull(ss_hdemo_sk#18) AND isnotnull(ss_sold_time_sk#17)) AND isnotnull(ss_store_sk#19)) (32) Project [codegen id : 8] -Output [3]: [ss_sold_time_sk#21, ss_hdemo_sk#22, ss_store_sk#23] -Input [4]: [ss_sold_time_sk#21, ss_hdemo_sk#22, ss_store_sk#23, ss_sold_date_sk#24] +Output [3]: [ss_sold_time_sk#17, ss_hdemo_sk#18, ss_store_sk#19] +Input [4]: [ss_sold_time_sk#17, ss_hdemo_sk#18, ss_store_sk#19, ss_sold_date_sk#20] (33) ReusedExchange [Reuses operator id: 9] -Output [1]: [hd_demo_sk#25] +Output [1]: [hd_demo_sk#21] (34) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ss_hdemo_sk#22] -Right keys [1]: [hd_demo_sk#25] +Left keys [1]: [ss_hdemo_sk#18] +Right keys [1]: [hd_demo_sk#21] Join condition: None (35) Project [codegen id : 8] -Output [2]: [ss_sold_time_sk#21, ss_store_sk#23] -Input [4]: [ss_sold_time_sk#21, ss_hdemo_sk#22, ss_store_sk#23, hd_demo_sk#25] +Output [2]: [ss_sold_time_sk#17, ss_store_sk#19] +Input [4]: [ss_sold_time_sk#17, ss_hdemo_sk#18, ss_store_sk#19, hd_demo_sk#21] (36) Scan parquet default.time_dim -Output [3]: [t_time_sk#26, t_hour#27, t_minute#28] +Output [3]: [t_time_sk#22, t_hour#23, t_minute#24] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,9), LessThan(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 6] -Input [3]: [t_time_sk#26, t_hour#27, t_minute#28] +Input [3]: [t_time_sk#22, t_hour#23, t_minute#24] (38) Filter [codegen id : 6] -Input [3]: [t_time_sk#26, t_hour#27, t_minute#28] -Condition : ((((isnotnull(t_hour#27) AND isnotnull(t_minute#28)) AND (t_hour#27 = 9)) AND (t_minute#28 < 30)) AND isnotnull(t_time_sk#26)) +Input [3]: [t_time_sk#22, t_hour#23, t_minute#24] +Condition : ((((isnotnull(t_hour#23) AND isnotnull(t_minute#24)) AND (t_hour#23 = 9)) AND (t_minute#24 < 30)) AND isnotnull(t_time_sk#22)) (39) Project [codegen id : 6] -Output [1]: [t_time_sk#26] -Input [3]: [t_time_sk#26, t_hour#27, t_minute#28] +Output [1]: [t_time_sk#22] +Input [3]: [t_time_sk#22, t_hour#23, t_minute#24] (40) BroadcastExchange -Input [1]: [t_time_sk#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#29] +Input [1]: [t_time_sk#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (41) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ss_sold_time_sk#21] -Right keys [1]: [t_time_sk#26] +Left keys [1]: [ss_sold_time_sk#17] +Right keys [1]: [t_time_sk#22] Join condition: None (42) Project [codegen id : 8] -Output [1]: [ss_store_sk#23] -Input [3]: [ss_sold_time_sk#21, ss_store_sk#23, t_time_sk#26] +Output [1]: [ss_store_sk#19] +Input [3]: [ss_sold_time_sk#17, ss_store_sk#19, t_time_sk#22] (43) ReusedExchange [Reuses operator id: 23] -Output [1]: [s_store_sk#30] +Output [1]: [s_store_sk#25] (44) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ss_store_sk#23] -Right keys [1]: [s_store_sk#30] +Left keys [1]: [ss_store_sk#19] +Right keys [1]: [s_store_sk#25] Join condition: None (45) Project [codegen id : 8] Output: [] -Input [2]: [ss_store_sk#23, s_store_sk#30] +Input [2]: [ss_store_sk#19, s_store_sk#25] (46) HashAggregate [codegen id : 8] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#31] -Results [1]: [count#32] +Aggregate Attributes [1]: [count#26] +Results [1]: [count#27] (47) Exchange -Input [1]: [count#32] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#33] +Input [1]: [count#27] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6] (48) HashAggregate [codegen id : 9] -Input [1]: [count#32] +Input [1]: [count#27] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#34] -Results [1]: [count(1)#34 AS h9_to_9_30#35] +Aggregate Attributes [1]: [count(1)#28] +Results [1]: [count(1)#28 AS h9_to_9_30#29] (49) BroadcastExchange -Input [1]: [h9_to_9_30#35] -Arguments: IdentityBroadcastMode, [id=#36] +Input [1]: [h9_to_9_30#29] +Arguments: IdentityBroadcastMode, [plan_id=7] (50) BroadcastNestedLoopJoin [codegen id : 40] Join condition: None (51) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#37, ss_hdemo_sk#38, ss_store_sk#39, ss_sold_date_sk#40] +Output [4]: [ss_sold_time_sk#30, ss_hdemo_sk#31, ss_store_sk#32, ss_sold_date_sk#33] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (52) ColumnarToRow [codegen id : 13] -Input [4]: [ss_sold_time_sk#37, ss_hdemo_sk#38, ss_store_sk#39, ss_sold_date_sk#40] +Input [4]: [ss_sold_time_sk#30, ss_hdemo_sk#31, ss_store_sk#32, ss_sold_date_sk#33] (53) Filter [codegen id : 13] -Input [4]: [ss_sold_time_sk#37, ss_hdemo_sk#38, ss_store_sk#39, ss_sold_date_sk#40] -Condition : ((isnotnull(ss_hdemo_sk#38) AND isnotnull(ss_sold_time_sk#37)) AND isnotnull(ss_store_sk#39)) +Input [4]: [ss_sold_time_sk#30, ss_hdemo_sk#31, ss_store_sk#32, ss_sold_date_sk#33] +Condition : ((isnotnull(ss_hdemo_sk#31) AND isnotnull(ss_sold_time_sk#30)) AND isnotnull(ss_store_sk#32)) (54) Project [codegen id : 13] -Output [3]: [ss_sold_time_sk#37, ss_hdemo_sk#38, ss_store_sk#39] -Input [4]: [ss_sold_time_sk#37, ss_hdemo_sk#38, ss_store_sk#39, ss_sold_date_sk#40] +Output [3]: [ss_sold_time_sk#30, ss_hdemo_sk#31, ss_store_sk#32] +Input [4]: [ss_sold_time_sk#30, ss_hdemo_sk#31, ss_store_sk#32, ss_sold_date_sk#33] (55) ReusedExchange [Reuses operator id: 9] -Output [1]: [hd_demo_sk#41] +Output [1]: [hd_demo_sk#34] (56) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_hdemo_sk#38] -Right keys [1]: [hd_demo_sk#41] +Left keys [1]: [ss_hdemo_sk#31] +Right keys [1]: [hd_demo_sk#34] Join condition: None (57) Project [codegen id : 13] -Output [2]: [ss_sold_time_sk#37, ss_store_sk#39] -Input [4]: [ss_sold_time_sk#37, ss_hdemo_sk#38, ss_store_sk#39, hd_demo_sk#41] +Output [2]: [ss_sold_time_sk#30, ss_store_sk#32] +Input [4]: [ss_sold_time_sk#30, ss_hdemo_sk#31, ss_store_sk#32, hd_demo_sk#34] (58) Scan parquet default.time_dim -Output [3]: [t_time_sk#42, t_hour#43, t_minute#44] +Output [3]: [t_time_sk#35, t_hour#36, t_minute#37] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,9), GreaterThanOrEqual(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (59) ColumnarToRow [codegen id : 11] -Input [3]: [t_time_sk#42, t_hour#43, t_minute#44] +Input [3]: [t_time_sk#35, t_hour#36, t_minute#37] (60) Filter [codegen id : 11] -Input [3]: [t_time_sk#42, t_hour#43, t_minute#44] -Condition : ((((isnotnull(t_hour#43) AND isnotnull(t_minute#44)) AND (t_hour#43 = 9)) AND (t_minute#44 >= 30)) AND isnotnull(t_time_sk#42)) +Input [3]: [t_time_sk#35, t_hour#36, t_minute#37] +Condition : ((((isnotnull(t_hour#36) AND isnotnull(t_minute#37)) AND (t_hour#36 = 9)) AND (t_minute#37 >= 30)) AND isnotnull(t_time_sk#35)) (61) Project [codegen id : 11] -Output [1]: [t_time_sk#42] -Input [3]: [t_time_sk#42, t_hour#43, t_minute#44] +Output [1]: [t_time_sk#35] +Input [3]: [t_time_sk#35, t_hour#36, t_minute#37] (62) BroadcastExchange -Input [1]: [t_time_sk#42] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#45] +Input [1]: [t_time_sk#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] (63) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_sold_time_sk#37] -Right keys [1]: [t_time_sk#42] +Left keys [1]: [ss_sold_time_sk#30] +Right keys [1]: [t_time_sk#35] Join condition: None (64) Project [codegen id : 13] -Output [1]: [ss_store_sk#39] -Input [3]: [ss_sold_time_sk#37, ss_store_sk#39, t_time_sk#42] +Output [1]: [ss_store_sk#32] +Input [3]: [ss_sold_time_sk#30, ss_store_sk#32, t_time_sk#35] (65) ReusedExchange [Reuses operator id: 23] -Output [1]: [s_store_sk#46] +Output [1]: [s_store_sk#38] (66) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ss_store_sk#39] -Right keys [1]: [s_store_sk#46] +Left keys [1]: [ss_store_sk#32] +Right keys [1]: [s_store_sk#38] Join condition: None (67) Project [codegen id : 13] Output: [] -Input [2]: [ss_store_sk#39, s_store_sk#46] +Input [2]: [ss_store_sk#32, s_store_sk#38] (68) HashAggregate [codegen id : 13] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#47] -Results [1]: [count#48] +Aggregate Attributes [1]: [count#39] +Results [1]: [count#40] (69) Exchange -Input [1]: [count#48] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#49] +Input [1]: [count#40] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=9] (70) HashAggregate [codegen id : 14] -Input [1]: [count#48] +Input [1]: [count#40] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#50] -Results [1]: [count(1)#50 AS h9_30_to_10#51] +Aggregate Attributes [1]: [count(1)#41] +Results [1]: [count(1)#41 AS h9_30_to_10#42] (71) BroadcastExchange -Input [1]: [h9_30_to_10#51] -Arguments: IdentityBroadcastMode, [id=#52] +Input [1]: [h9_30_to_10#42] +Arguments: IdentityBroadcastMode, [plan_id=10] (72) BroadcastNestedLoopJoin [codegen id : 40] Join condition: None (73) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#53, ss_hdemo_sk#54, ss_store_sk#55, ss_sold_date_sk#56] +Output [4]: [ss_sold_time_sk#43, ss_hdemo_sk#44, ss_store_sk#45, ss_sold_date_sk#46] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (74) ColumnarToRow [codegen id : 18] -Input [4]: [ss_sold_time_sk#53, ss_hdemo_sk#54, ss_store_sk#55, ss_sold_date_sk#56] +Input [4]: [ss_sold_time_sk#43, ss_hdemo_sk#44, ss_store_sk#45, ss_sold_date_sk#46] (75) Filter [codegen id : 18] -Input [4]: [ss_sold_time_sk#53, ss_hdemo_sk#54, ss_store_sk#55, ss_sold_date_sk#56] -Condition : ((isnotnull(ss_hdemo_sk#54) AND isnotnull(ss_sold_time_sk#53)) AND isnotnull(ss_store_sk#55)) +Input [4]: [ss_sold_time_sk#43, ss_hdemo_sk#44, ss_store_sk#45, ss_sold_date_sk#46] +Condition : ((isnotnull(ss_hdemo_sk#44) AND isnotnull(ss_sold_time_sk#43)) AND isnotnull(ss_store_sk#45)) (76) Project [codegen id : 18] -Output [3]: [ss_sold_time_sk#53, ss_hdemo_sk#54, ss_store_sk#55] -Input [4]: [ss_sold_time_sk#53, ss_hdemo_sk#54, ss_store_sk#55, ss_sold_date_sk#56] +Output [3]: [ss_sold_time_sk#43, ss_hdemo_sk#44, ss_store_sk#45] +Input [4]: [ss_sold_time_sk#43, ss_hdemo_sk#44, ss_store_sk#45, ss_sold_date_sk#46] (77) ReusedExchange [Reuses operator id: 9] -Output [1]: [hd_demo_sk#57] +Output [1]: [hd_demo_sk#47] (78) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [ss_hdemo_sk#54] -Right keys [1]: [hd_demo_sk#57] +Left keys [1]: [ss_hdemo_sk#44] +Right keys [1]: [hd_demo_sk#47] Join condition: None (79) Project [codegen id : 18] -Output [2]: [ss_sold_time_sk#53, ss_store_sk#55] -Input [4]: [ss_sold_time_sk#53, ss_hdemo_sk#54, ss_store_sk#55, hd_demo_sk#57] +Output [2]: [ss_sold_time_sk#43, ss_store_sk#45] +Input [4]: [ss_sold_time_sk#43, ss_hdemo_sk#44, ss_store_sk#45, hd_demo_sk#47] (80) Scan parquet default.time_dim -Output [3]: [t_time_sk#58, t_hour#59, t_minute#60] +Output [3]: [t_time_sk#48, t_hour#49, t_minute#50] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,10), LessThan(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (81) ColumnarToRow [codegen id : 16] -Input [3]: [t_time_sk#58, t_hour#59, t_minute#60] +Input [3]: [t_time_sk#48, t_hour#49, t_minute#50] (82) Filter [codegen id : 16] -Input [3]: [t_time_sk#58, t_hour#59, t_minute#60] -Condition : ((((isnotnull(t_hour#59) AND isnotnull(t_minute#60)) AND (t_hour#59 = 10)) AND (t_minute#60 < 30)) AND isnotnull(t_time_sk#58)) +Input [3]: [t_time_sk#48, t_hour#49, t_minute#50] +Condition : ((((isnotnull(t_hour#49) AND isnotnull(t_minute#50)) AND (t_hour#49 = 10)) AND (t_minute#50 < 30)) AND isnotnull(t_time_sk#48)) (83) Project [codegen id : 16] -Output [1]: [t_time_sk#58] -Input [3]: [t_time_sk#58, t_hour#59, t_minute#60] +Output [1]: [t_time_sk#48] +Input [3]: [t_time_sk#48, t_hour#49, t_minute#50] (84) BroadcastExchange -Input [1]: [t_time_sk#58] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#61] +Input [1]: [t_time_sk#48] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11] (85) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [ss_sold_time_sk#53] -Right keys [1]: [t_time_sk#58] +Left keys [1]: [ss_sold_time_sk#43] +Right keys [1]: [t_time_sk#48] Join condition: None (86) Project [codegen id : 18] -Output [1]: [ss_store_sk#55] -Input [3]: [ss_sold_time_sk#53, ss_store_sk#55, t_time_sk#58] +Output [1]: [ss_store_sk#45] +Input [3]: [ss_sold_time_sk#43, ss_store_sk#45, t_time_sk#48] (87) ReusedExchange [Reuses operator id: 23] -Output [1]: [s_store_sk#62] +Output [1]: [s_store_sk#51] (88) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [ss_store_sk#55] -Right keys [1]: [s_store_sk#62] +Left keys [1]: [ss_store_sk#45] +Right keys [1]: [s_store_sk#51] Join condition: None (89) Project [codegen id : 18] Output: [] -Input [2]: [ss_store_sk#55, s_store_sk#62] +Input [2]: [ss_store_sk#45, s_store_sk#51] (90) HashAggregate [codegen id : 18] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#63] -Results [1]: [count#64] +Aggregate Attributes [1]: [count#52] +Results [1]: [count#53] (91) Exchange -Input [1]: [count#64] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#65] +Input [1]: [count#53] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12] (92) HashAggregate [codegen id : 19] -Input [1]: [count#64] +Input [1]: [count#53] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#66] -Results [1]: [count(1)#66 AS h10_to_10_30#67] +Aggregate Attributes [1]: [count(1)#54] +Results [1]: [count(1)#54 AS h10_to_10_30#55] (93) BroadcastExchange -Input [1]: [h10_to_10_30#67] -Arguments: IdentityBroadcastMode, [id=#68] +Input [1]: [h10_to_10_30#55] +Arguments: IdentityBroadcastMode, [plan_id=13] (94) BroadcastNestedLoopJoin [codegen id : 40] Join condition: None (95) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] +Output [4]: [ss_sold_time_sk#56, ss_hdemo_sk#57, ss_store_sk#58, ss_sold_date_sk#59] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (96) ColumnarToRow [codegen id : 23] -Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] +Input [4]: [ss_sold_time_sk#56, ss_hdemo_sk#57, ss_store_sk#58, ss_sold_date_sk#59] (97) Filter [codegen id : 23] -Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] -Condition : ((isnotnull(ss_hdemo_sk#70) AND isnotnull(ss_sold_time_sk#69)) AND isnotnull(ss_store_sk#71)) +Input [4]: [ss_sold_time_sk#56, ss_hdemo_sk#57, ss_store_sk#58, ss_sold_date_sk#59] +Condition : ((isnotnull(ss_hdemo_sk#57) AND isnotnull(ss_sold_time_sk#56)) AND isnotnull(ss_store_sk#58)) (98) Project [codegen id : 23] -Output [3]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71] -Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] +Output [3]: [ss_sold_time_sk#56, ss_hdemo_sk#57, ss_store_sk#58] +Input [4]: [ss_sold_time_sk#56, ss_hdemo_sk#57, ss_store_sk#58, ss_sold_date_sk#59] (99) ReusedExchange [Reuses operator id: 9] -Output [1]: [hd_demo_sk#73] +Output [1]: [hd_demo_sk#60] (100) BroadcastHashJoin [codegen id : 23] -Left keys [1]: [ss_hdemo_sk#70] -Right keys [1]: [hd_demo_sk#73] +Left keys [1]: [ss_hdemo_sk#57] +Right keys [1]: [hd_demo_sk#60] Join condition: None (101) Project [codegen id : 23] -Output [2]: [ss_sold_time_sk#69, ss_store_sk#71] -Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, hd_demo_sk#73] +Output [2]: [ss_sold_time_sk#56, ss_store_sk#58] +Input [4]: [ss_sold_time_sk#56, ss_hdemo_sk#57, ss_store_sk#58, hd_demo_sk#60] (102) Scan parquet default.time_dim -Output [3]: [t_time_sk#74, t_hour#75, t_minute#76] +Output [3]: [t_time_sk#61, t_hour#62, t_minute#63] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,10), GreaterThanOrEqual(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (103) ColumnarToRow [codegen id : 21] -Input [3]: [t_time_sk#74, t_hour#75, t_minute#76] +Input [3]: [t_time_sk#61, t_hour#62, t_minute#63] (104) Filter [codegen id : 21] -Input [3]: [t_time_sk#74, t_hour#75, t_minute#76] -Condition : ((((isnotnull(t_hour#75) AND isnotnull(t_minute#76)) AND (t_hour#75 = 10)) AND (t_minute#76 >= 30)) AND isnotnull(t_time_sk#74)) +Input [3]: [t_time_sk#61, t_hour#62, t_minute#63] +Condition : ((((isnotnull(t_hour#62) AND isnotnull(t_minute#63)) AND (t_hour#62 = 10)) AND (t_minute#63 >= 30)) AND isnotnull(t_time_sk#61)) (105) Project [codegen id : 21] -Output [1]: [t_time_sk#74] -Input [3]: [t_time_sk#74, t_hour#75, t_minute#76] +Output [1]: [t_time_sk#61] +Input [3]: [t_time_sk#61, t_hour#62, t_minute#63] (106) BroadcastExchange -Input [1]: [t_time_sk#74] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#77] +Input [1]: [t_time_sk#61] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=14] (107) BroadcastHashJoin [codegen id : 23] -Left keys [1]: [ss_sold_time_sk#69] -Right keys [1]: [t_time_sk#74] +Left keys [1]: [ss_sold_time_sk#56] +Right keys [1]: [t_time_sk#61] Join condition: None (108) Project [codegen id : 23] -Output [1]: [ss_store_sk#71] -Input [3]: [ss_sold_time_sk#69, ss_store_sk#71, t_time_sk#74] +Output [1]: [ss_store_sk#58] +Input [3]: [ss_sold_time_sk#56, ss_store_sk#58, t_time_sk#61] (109) ReusedExchange [Reuses operator id: 23] -Output [1]: [s_store_sk#78] +Output [1]: [s_store_sk#64] (110) BroadcastHashJoin [codegen id : 23] -Left keys [1]: [ss_store_sk#71] -Right keys [1]: [s_store_sk#78] +Left keys [1]: [ss_store_sk#58] +Right keys [1]: [s_store_sk#64] Join condition: None (111) Project [codegen id : 23] Output: [] -Input [2]: [ss_store_sk#71, s_store_sk#78] +Input [2]: [ss_store_sk#58, s_store_sk#64] (112) HashAggregate [codegen id : 23] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#79] -Results [1]: [count#80] +Aggregate Attributes [1]: [count#65] +Results [1]: [count#66] (113) Exchange -Input [1]: [count#80] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#81] +Input [1]: [count#66] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=15] (114) HashAggregate [codegen id : 24] -Input [1]: [count#80] +Input [1]: [count#66] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#82] -Results [1]: [count(1)#82 AS h10_30_to_11#83] +Aggregate Attributes [1]: [count(1)#67] +Results [1]: [count(1)#67 AS h10_30_to_11#68] (115) BroadcastExchange -Input [1]: [h10_30_to_11#83] -Arguments: IdentityBroadcastMode, [id=#84] +Input [1]: [h10_30_to_11#68] +Arguments: IdentityBroadcastMode, [plan_id=16] (116) BroadcastNestedLoopJoin [codegen id : 40] Join condition: None (117) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#85, ss_hdemo_sk#86, ss_store_sk#87, ss_sold_date_sk#88] +Output [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (118) ColumnarToRow [codegen id : 28] -Input [4]: [ss_sold_time_sk#85, ss_hdemo_sk#86, ss_store_sk#87, ss_sold_date_sk#88] +Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] (119) Filter [codegen id : 28] -Input [4]: [ss_sold_time_sk#85, ss_hdemo_sk#86, ss_store_sk#87, ss_sold_date_sk#88] -Condition : ((isnotnull(ss_hdemo_sk#86) AND isnotnull(ss_sold_time_sk#85)) AND isnotnull(ss_store_sk#87)) +Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] +Condition : ((isnotnull(ss_hdemo_sk#70) AND isnotnull(ss_sold_time_sk#69)) AND isnotnull(ss_store_sk#71)) (120) Project [codegen id : 28] -Output [3]: [ss_sold_time_sk#85, ss_hdemo_sk#86, ss_store_sk#87] -Input [4]: [ss_sold_time_sk#85, ss_hdemo_sk#86, ss_store_sk#87, ss_sold_date_sk#88] +Output [3]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71] +Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, ss_sold_date_sk#72] (121) ReusedExchange [Reuses operator id: 9] -Output [1]: [hd_demo_sk#89] +Output [1]: [hd_demo_sk#73] (122) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [ss_hdemo_sk#86] -Right keys [1]: [hd_demo_sk#89] +Left keys [1]: [ss_hdemo_sk#70] +Right keys [1]: [hd_demo_sk#73] Join condition: None (123) Project [codegen id : 28] -Output [2]: [ss_sold_time_sk#85, ss_store_sk#87] -Input [4]: [ss_sold_time_sk#85, ss_hdemo_sk#86, ss_store_sk#87, hd_demo_sk#89] +Output [2]: [ss_sold_time_sk#69, ss_store_sk#71] +Input [4]: [ss_sold_time_sk#69, ss_hdemo_sk#70, ss_store_sk#71, hd_demo_sk#73] (124) Scan parquet default.time_dim -Output [3]: [t_time_sk#90, t_hour#91, t_minute#92] +Output [3]: [t_time_sk#74, t_hour#75, t_minute#76] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,11), LessThan(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (125) ColumnarToRow [codegen id : 26] -Input [3]: [t_time_sk#90, t_hour#91, t_minute#92] +Input [3]: [t_time_sk#74, t_hour#75, t_minute#76] (126) Filter [codegen id : 26] -Input [3]: [t_time_sk#90, t_hour#91, t_minute#92] -Condition : ((((isnotnull(t_hour#91) AND isnotnull(t_minute#92)) AND (t_hour#91 = 11)) AND (t_minute#92 < 30)) AND isnotnull(t_time_sk#90)) +Input [3]: [t_time_sk#74, t_hour#75, t_minute#76] +Condition : ((((isnotnull(t_hour#75) AND isnotnull(t_minute#76)) AND (t_hour#75 = 11)) AND (t_minute#76 < 30)) AND isnotnull(t_time_sk#74)) (127) Project [codegen id : 26] -Output [1]: [t_time_sk#90] -Input [3]: [t_time_sk#90, t_hour#91, t_minute#92] +Output [1]: [t_time_sk#74] +Input [3]: [t_time_sk#74, t_hour#75, t_minute#76] (128) BroadcastExchange -Input [1]: [t_time_sk#90] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#93] +Input [1]: [t_time_sk#74] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=17] (129) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [ss_sold_time_sk#85] -Right keys [1]: [t_time_sk#90] +Left keys [1]: [ss_sold_time_sk#69] +Right keys [1]: [t_time_sk#74] Join condition: None (130) Project [codegen id : 28] -Output [1]: [ss_store_sk#87] -Input [3]: [ss_sold_time_sk#85, ss_store_sk#87, t_time_sk#90] +Output [1]: [ss_store_sk#71] +Input [3]: [ss_sold_time_sk#69, ss_store_sk#71, t_time_sk#74] (131) ReusedExchange [Reuses operator id: 23] -Output [1]: [s_store_sk#94] +Output [1]: [s_store_sk#77] (132) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [ss_store_sk#87] -Right keys [1]: [s_store_sk#94] +Left keys [1]: [ss_store_sk#71] +Right keys [1]: [s_store_sk#77] Join condition: None (133) Project [codegen id : 28] Output: [] -Input [2]: [ss_store_sk#87, s_store_sk#94] +Input [2]: [ss_store_sk#71, s_store_sk#77] (134) HashAggregate [codegen id : 28] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#95] -Results [1]: [count#96] +Aggregate Attributes [1]: [count#78] +Results [1]: [count#79] (135) Exchange -Input [1]: [count#96] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#97] +Input [1]: [count#79] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=18] (136) HashAggregate [codegen id : 29] -Input [1]: [count#96] +Input [1]: [count#79] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#98] -Results [1]: [count(1)#98 AS h11_to_11_30#99] +Aggregate Attributes [1]: [count(1)#80] +Results [1]: [count(1)#80 AS h11_to_11_30#81] (137) BroadcastExchange -Input [1]: [h11_to_11_30#99] -Arguments: IdentityBroadcastMode, [id=#100] +Input [1]: [h11_to_11_30#81] +Arguments: IdentityBroadcastMode, [plan_id=19] (138) BroadcastNestedLoopJoin [codegen id : 40] Join condition: None (139) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#101, ss_hdemo_sk#102, ss_store_sk#103, ss_sold_date_sk#104] +Output [4]: [ss_sold_time_sk#82, ss_hdemo_sk#83, ss_store_sk#84, ss_sold_date_sk#85] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (140) ColumnarToRow [codegen id : 33] -Input [4]: [ss_sold_time_sk#101, ss_hdemo_sk#102, ss_store_sk#103, ss_sold_date_sk#104] +Input [4]: [ss_sold_time_sk#82, ss_hdemo_sk#83, ss_store_sk#84, ss_sold_date_sk#85] (141) Filter [codegen id : 33] -Input [4]: [ss_sold_time_sk#101, ss_hdemo_sk#102, ss_store_sk#103, ss_sold_date_sk#104] -Condition : ((isnotnull(ss_hdemo_sk#102) AND isnotnull(ss_sold_time_sk#101)) AND isnotnull(ss_store_sk#103)) +Input [4]: [ss_sold_time_sk#82, ss_hdemo_sk#83, ss_store_sk#84, ss_sold_date_sk#85] +Condition : ((isnotnull(ss_hdemo_sk#83) AND isnotnull(ss_sold_time_sk#82)) AND isnotnull(ss_store_sk#84)) (142) Project [codegen id : 33] -Output [3]: [ss_sold_time_sk#101, ss_hdemo_sk#102, ss_store_sk#103] -Input [4]: [ss_sold_time_sk#101, ss_hdemo_sk#102, ss_store_sk#103, ss_sold_date_sk#104] +Output [3]: [ss_sold_time_sk#82, ss_hdemo_sk#83, ss_store_sk#84] +Input [4]: [ss_sold_time_sk#82, ss_hdemo_sk#83, ss_store_sk#84, ss_sold_date_sk#85] (143) ReusedExchange [Reuses operator id: 9] -Output [1]: [hd_demo_sk#105] +Output [1]: [hd_demo_sk#86] (144) BroadcastHashJoin [codegen id : 33] -Left keys [1]: [ss_hdemo_sk#102] -Right keys [1]: [hd_demo_sk#105] +Left keys [1]: [ss_hdemo_sk#83] +Right keys [1]: [hd_demo_sk#86] Join condition: None (145) Project [codegen id : 33] -Output [2]: [ss_sold_time_sk#101, ss_store_sk#103] -Input [4]: [ss_sold_time_sk#101, ss_hdemo_sk#102, ss_store_sk#103, hd_demo_sk#105] +Output [2]: [ss_sold_time_sk#82, ss_store_sk#84] +Input [4]: [ss_sold_time_sk#82, ss_hdemo_sk#83, ss_store_sk#84, hd_demo_sk#86] (146) Scan parquet default.time_dim -Output [3]: [t_time_sk#106, t_hour#107, t_minute#108] +Output [3]: [t_time_sk#87, t_hour#88, t_minute#89] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,11), GreaterThanOrEqual(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (147) ColumnarToRow [codegen id : 31] -Input [3]: [t_time_sk#106, t_hour#107, t_minute#108] +Input [3]: [t_time_sk#87, t_hour#88, t_minute#89] (148) Filter [codegen id : 31] -Input [3]: [t_time_sk#106, t_hour#107, t_minute#108] -Condition : ((((isnotnull(t_hour#107) AND isnotnull(t_minute#108)) AND (t_hour#107 = 11)) AND (t_minute#108 >= 30)) AND isnotnull(t_time_sk#106)) +Input [3]: [t_time_sk#87, t_hour#88, t_minute#89] +Condition : ((((isnotnull(t_hour#88) AND isnotnull(t_minute#89)) AND (t_hour#88 = 11)) AND (t_minute#89 >= 30)) AND isnotnull(t_time_sk#87)) (149) Project [codegen id : 31] -Output [1]: [t_time_sk#106] -Input [3]: [t_time_sk#106, t_hour#107, t_minute#108] +Output [1]: [t_time_sk#87] +Input [3]: [t_time_sk#87, t_hour#88, t_minute#89] (150) BroadcastExchange -Input [1]: [t_time_sk#106] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#109] +Input [1]: [t_time_sk#87] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=20] (151) BroadcastHashJoin [codegen id : 33] -Left keys [1]: [ss_sold_time_sk#101] -Right keys [1]: [t_time_sk#106] +Left keys [1]: [ss_sold_time_sk#82] +Right keys [1]: [t_time_sk#87] Join condition: None (152) Project [codegen id : 33] -Output [1]: [ss_store_sk#103] -Input [3]: [ss_sold_time_sk#101, ss_store_sk#103, t_time_sk#106] +Output [1]: [ss_store_sk#84] +Input [3]: [ss_sold_time_sk#82, ss_store_sk#84, t_time_sk#87] (153) ReusedExchange [Reuses operator id: 23] -Output [1]: [s_store_sk#110] +Output [1]: [s_store_sk#90] (154) BroadcastHashJoin [codegen id : 33] -Left keys [1]: [ss_store_sk#103] -Right keys [1]: [s_store_sk#110] +Left keys [1]: [ss_store_sk#84] +Right keys [1]: [s_store_sk#90] Join condition: None (155) Project [codegen id : 33] Output: [] -Input [2]: [ss_store_sk#103, s_store_sk#110] +Input [2]: [ss_store_sk#84, s_store_sk#90] (156) HashAggregate [codegen id : 33] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#111] -Results [1]: [count#112] +Aggregate Attributes [1]: [count#91] +Results [1]: [count#92] (157) Exchange -Input [1]: [count#112] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#113] +Input [1]: [count#92] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=21] (158) HashAggregate [codegen id : 34] -Input [1]: [count#112] +Input [1]: [count#92] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#114] -Results [1]: [count(1)#114 AS h11_30_to_12#115] +Aggregate Attributes [1]: [count(1)#93] +Results [1]: [count(1)#93 AS h11_30_to_12#94] (159) BroadcastExchange -Input [1]: [h11_30_to_12#115] -Arguments: IdentityBroadcastMode, [id=#116] +Input [1]: [h11_30_to_12#94] +Arguments: IdentityBroadcastMode, [plan_id=22] (160) BroadcastNestedLoopJoin [codegen id : 40] Join condition: None (161) Scan parquet default.store_sales -Output [4]: [ss_sold_time_sk#117, ss_hdemo_sk#118, ss_store_sk#119, ss_sold_date_sk#120] +Output [4]: [ss_sold_time_sk#95, ss_hdemo_sk#96, ss_store_sk#97, ss_sold_date_sk#98] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (162) ColumnarToRow [codegen id : 38] -Input [4]: [ss_sold_time_sk#117, ss_hdemo_sk#118, ss_store_sk#119, ss_sold_date_sk#120] +Input [4]: [ss_sold_time_sk#95, ss_hdemo_sk#96, ss_store_sk#97, ss_sold_date_sk#98] (163) Filter [codegen id : 38] -Input [4]: [ss_sold_time_sk#117, ss_hdemo_sk#118, ss_store_sk#119, ss_sold_date_sk#120] -Condition : ((isnotnull(ss_hdemo_sk#118) AND isnotnull(ss_sold_time_sk#117)) AND isnotnull(ss_store_sk#119)) +Input [4]: [ss_sold_time_sk#95, ss_hdemo_sk#96, ss_store_sk#97, ss_sold_date_sk#98] +Condition : ((isnotnull(ss_hdemo_sk#96) AND isnotnull(ss_sold_time_sk#95)) AND isnotnull(ss_store_sk#97)) (164) Project [codegen id : 38] -Output [3]: [ss_sold_time_sk#117, ss_hdemo_sk#118, ss_store_sk#119] -Input [4]: [ss_sold_time_sk#117, ss_hdemo_sk#118, ss_store_sk#119, ss_sold_date_sk#120] +Output [3]: [ss_sold_time_sk#95, ss_hdemo_sk#96, ss_store_sk#97] +Input [4]: [ss_sold_time_sk#95, ss_hdemo_sk#96, ss_store_sk#97, ss_sold_date_sk#98] (165) ReusedExchange [Reuses operator id: 9] -Output [1]: [hd_demo_sk#121] +Output [1]: [hd_demo_sk#99] (166) BroadcastHashJoin [codegen id : 38] -Left keys [1]: [ss_hdemo_sk#118] -Right keys [1]: [hd_demo_sk#121] +Left keys [1]: [ss_hdemo_sk#96] +Right keys [1]: [hd_demo_sk#99] Join condition: None (167) Project [codegen id : 38] -Output [2]: [ss_sold_time_sk#117, ss_store_sk#119] -Input [4]: [ss_sold_time_sk#117, ss_hdemo_sk#118, ss_store_sk#119, hd_demo_sk#121] +Output [2]: [ss_sold_time_sk#95, ss_store_sk#97] +Input [4]: [ss_sold_time_sk#95, ss_hdemo_sk#96, ss_store_sk#97, hd_demo_sk#99] (168) Scan parquet default.time_dim -Output [3]: [t_time_sk#122, t_hour#123, t_minute#124] +Output [3]: [t_time_sk#100, t_hour#101, t_minute#102] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,12), LessThan(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (169) ColumnarToRow [codegen id : 36] -Input [3]: [t_time_sk#122, t_hour#123, t_minute#124] +Input [3]: [t_time_sk#100, t_hour#101, t_minute#102] (170) Filter [codegen id : 36] -Input [3]: [t_time_sk#122, t_hour#123, t_minute#124] -Condition : ((((isnotnull(t_hour#123) AND isnotnull(t_minute#124)) AND (t_hour#123 = 12)) AND (t_minute#124 < 30)) AND isnotnull(t_time_sk#122)) +Input [3]: [t_time_sk#100, t_hour#101, t_minute#102] +Condition : ((((isnotnull(t_hour#101) AND isnotnull(t_minute#102)) AND (t_hour#101 = 12)) AND (t_minute#102 < 30)) AND isnotnull(t_time_sk#100)) (171) Project [codegen id : 36] -Output [1]: [t_time_sk#122] -Input [3]: [t_time_sk#122, t_hour#123, t_minute#124] +Output [1]: [t_time_sk#100] +Input [3]: [t_time_sk#100, t_hour#101, t_minute#102] (172) BroadcastExchange -Input [1]: [t_time_sk#122] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#125] +Input [1]: [t_time_sk#100] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=23] (173) BroadcastHashJoin [codegen id : 38] -Left keys [1]: [ss_sold_time_sk#117] -Right keys [1]: [t_time_sk#122] +Left keys [1]: [ss_sold_time_sk#95] +Right keys [1]: [t_time_sk#100] Join condition: None (174) Project [codegen id : 38] -Output [1]: [ss_store_sk#119] -Input [3]: [ss_sold_time_sk#117, ss_store_sk#119, t_time_sk#122] +Output [1]: [ss_store_sk#97] +Input [3]: [ss_sold_time_sk#95, ss_store_sk#97, t_time_sk#100] (175) ReusedExchange [Reuses operator id: 23] -Output [1]: [s_store_sk#126] +Output [1]: [s_store_sk#103] (176) BroadcastHashJoin [codegen id : 38] -Left keys [1]: [ss_store_sk#119] -Right keys [1]: [s_store_sk#126] +Left keys [1]: [ss_store_sk#97] +Right keys [1]: [s_store_sk#103] Join condition: None (177) Project [codegen id : 38] Output: [] -Input [2]: [ss_store_sk#119, s_store_sk#126] +Input [2]: [ss_store_sk#97, s_store_sk#103] (178) HashAggregate [codegen id : 38] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#127] -Results [1]: [count#128] +Aggregate Attributes [1]: [count#104] +Results [1]: [count#105] (179) Exchange -Input [1]: [count#128] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#129] +Input [1]: [count#105] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=24] (180) HashAggregate [codegen id : 39] -Input [1]: [count#128] +Input [1]: [count#105] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#130] -Results [1]: [count(1)#130 AS h12_to_12_30#131] +Aggregate Attributes [1]: [count(1)#106] +Results [1]: [count(1)#106 AS h12_to_12_30#107] (181) BroadcastExchange -Input [1]: [h12_to_12_30#131] -Arguments: IdentityBroadcastMode, [id=#132] +Input [1]: [h12_to_12_30#107] +Arguments: IdentityBroadcastMode, [plan_id=25] (182) BroadcastNestedLoopJoin [codegen id : 40] Join condition: None diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q89.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q89.sf100/explain.txt index 6325bd574530a..6dcaa4bcf93f2 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q89.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q89.sf100/explain.txt @@ -44,116 +44,116 @@ Condition : (((i_category#4 IN (Books (4) BroadcastExchange Input [4]: [i_item_sk#1, i_brand#2, i_class#3, i_category#4] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#5] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (5) Scan parquet default.store_sales -Output [4]: [ss_item_sk#6, ss_store_sk#7, ss_sales_price#8, ss_sold_date_sk#9] +Output [4]: [ss_item_sk#5, ss_store_sk#6, ss_sales_price#7, ss_sold_date_sk#8] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#9), dynamicpruningexpression(ss_sold_date_sk#9 IN dynamicpruning#10)] +PartitionFilters: [isnotnull(ss_sold_date_sk#8), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)] PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_store_sk)] ReadSchema: struct (6) ColumnarToRow -Input [4]: [ss_item_sk#6, ss_store_sk#7, ss_sales_price#8, ss_sold_date_sk#9] +Input [4]: [ss_item_sk#5, ss_store_sk#6, ss_sales_price#7, ss_sold_date_sk#8] (7) Filter -Input [4]: [ss_item_sk#6, ss_store_sk#7, ss_sales_price#8, ss_sold_date_sk#9] -Condition : (isnotnull(ss_item_sk#6) AND isnotnull(ss_store_sk#7)) +Input [4]: [ss_item_sk#5, ss_store_sk#6, ss_sales_price#7, ss_sold_date_sk#8] +Condition : (isnotnull(ss_item_sk#5) AND isnotnull(ss_store_sk#6)) (8) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] -Right keys [1]: [ss_item_sk#6] +Right keys [1]: [ss_item_sk#5] Join condition: None (9) Project [codegen id : 4] -Output [6]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#7, ss_sales_price#8, ss_sold_date_sk#9] -Input [8]: [i_item_sk#1, i_brand#2, i_class#3, i_category#4, ss_item_sk#6, ss_store_sk#7, ss_sales_price#8, ss_sold_date_sk#9] +Output [6]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, ss_sold_date_sk#8] +Input [8]: [i_item_sk#1, i_brand#2, i_class#3, i_category#4, ss_item_sk#5, ss_store_sk#6, ss_sales_price#7, ss_sold_date_sk#8] (10) ReusedExchange [Reuses operator id: 32] -Output [2]: [d_date_sk#11, d_moy#12] +Output [2]: [d_date_sk#10, d_moy#11] (11) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#9] -Right keys [1]: [d_date_sk#11] +Left keys [1]: [ss_sold_date_sk#8] +Right keys [1]: [d_date_sk#10] Join condition: None (12) Project [codegen id : 4] -Output [6]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#7, ss_sales_price#8, d_moy#12] -Input [8]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#7, ss_sales_price#8, ss_sold_date_sk#9, d_date_sk#11, d_moy#12] +Output [6]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, d_moy#11] +Input [8]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, ss_sold_date_sk#8, d_date_sk#10, d_moy#11] (13) Scan parquet default.store -Output [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] +Output [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] (15) Filter [codegen id : 3] -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] -Condition : isnotnull(s_store_sk#13) +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] +Condition : isnotnull(s_store_sk#12) (16) BroadcastExchange -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#16] +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_store_sk#7] -Right keys [1]: [s_store_sk#13] +Left keys [1]: [ss_store_sk#6] +Right keys [1]: [s_store_sk#12] Join condition: None (18) Project [codegen id : 4] -Output [7]: [i_brand#2, i_class#3, i_category#4, ss_sales_price#8, d_moy#12, s_store_name#14, s_company_name#15] -Input [9]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#7, ss_sales_price#8, d_moy#12, s_store_sk#13, s_store_name#14, s_company_name#15] +Output [7]: [i_brand#2, i_class#3, i_category#4, ss_sales_price#7, d_moy#11, s_store_name#13, s_company_name#14] +Input [9]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, d_moy#11, s_store_sk#12, s_store_name#13, s_company_name#14] (19) HashAggregate [codegen id : 4] -Input [7]: [i_brand#2, i_class#3, i_category#4, ss_sales_price#8, d_moy#12, s_store_name#14, s_company_name#15] -Keys [6]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12] -Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#8))] -Aggregate Attributes [1]: [sum#17] -Results [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum#18] +Input [7]: [i_brand#2, i_class#3, i_category#4, ss_sales_price#7, d_moy#11, s_store_name#13, s_company_name#14] +Keys [6]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11] +Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#7))] +Aggregate Attributes [1]: [sum#15] +Results [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum#16] (20) Exchange -Input [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum#18] -Arguments: hashpartitioning(i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum#16] +Arguments: hashpartitioning(i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 5] -Input [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum#18] -Keys [6]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12] -Functions [1]: [sum(UnscaledValue(ss_sales_price#8))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#8))#20] -Results [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, MakeDecimal(sum(UnscaledValue(ss_sales_price#8))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#8))#20,17,2) AS _w0#22] +Input [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum#16] +Keys [6]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11] +Functions [1]: [sum(UnscaledValue(ss_sales_price#7))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#7))#17] +Results [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, MakeDecimal(sum(UnscaledValue(ss_sales_price#7))#17,17,2) AS sum_sales#18, MakeDecimal(sum(UnscaledValue(ss_sales_price#7))#17,17,2) AS _w0#19] (22) Exchange -Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22] -Arguments: hashpartitioning(i_category#4, i_brand#2, s_store_name#14, s_company_name#15, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19] +Arguments: hashpartitioning(i_category#4, i_brand#2, s_store_name#13, s_company_name#14, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) Sort [codegen id : 6] -Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22] -Arguments: [i_category#4 ASC NULLS FIRST, i_brand#2 ASC NULLS FIRST, s_store_name#14 ASC NULLS FIRST, s_company_name#15 ASC NULLS FIRST], false, 0 +Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19] +Arguments: [i_category#4 ASC NULLS FIRST, i_brand#2 ASC NULLS FIRST, s_store_name#13 ASC NULLS FIRST, s_company_name#14 ASC NULLS FIRST], false, 0 (24) Window -Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22] -Arguments: [avg(_w0#22) windowspecdefinition(i_category#4, i_brand#2, s_store_name#14, s_company_name#15, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#24], [i_category#4, i_brand#2, s_store_name#14, s_company_name#15] +Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19] +Arguments: [avg(_w0#19) windowspecdefinition(i_category#4, i_brand#2, s_store_name#13, s_company_name#14, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#20], [i_category#4, i_brand#2, s_store_name#13, s_company_name#14] (25) Filter [codegen id : 7] -Input [9]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22, avg_monthly_sales#24] -Condition : (isnotnull(avg_monthly_sales#24) AND (NOT (avg_monthly_sales#24 = 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) +Input [9]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19, avg_monthly_sales#20] +Condition : (isnotnull(avg_monthly_sales#20) AND (NOT (avg_monthly_sales#20 = 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) (26) Project [codegen id : 7] -Output [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, avg_monthly_sales#24] -Input [9]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22, avg_monthly_sales#24] +Output [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, avg_monthly_sales#20] +Input [9]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19, avg_monthly_sales#20] (27) TakeOrderedAndProject -Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, avg_monthly_sales#24] -Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, s_store_name#14 ASC NULLS FIRST], [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, avg_monthly_sales#24] +Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, avg_monthly_sales#20] +Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, s_store_name#13 ASC NULLS FIRST], [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, avg_monthly_sales#20] ===== Subqueries ===== -Subquery:1 Hosting operator id = 5 Hosting Expression = ss_sold_date_sk#9 IN dynamicpruning#10 +Subquery:1 Hosting operator id = 5 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 BroadcastExchange (32) +- * Project (31) +- * Filter (30) @@ -162,25 +162,25 @@ BroadcastExchange (32) (28) Scan parquet default.date_dim -Output [3]: [d_date_sk#11, d_year#25, d_moy#12] +Output [3]: [d_date_sk#10, d_year#21, d_moy#11] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct (29) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#25, d_moy#12] +Input [3]: [d_date_sk#10, d_year#21, d_moy#11] (30) Filter [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#25, d_moy#12] -Condition : ((isnotnull(d_year#25) AND (d_year#25 = 1999)) AND isnotnull(d_date_sk#11)) +Input [3]: [d_date_sk#10, d_year#21, d_moy#11] +Condition : ((isnotnull(d_year#21) AND (d_year#21 = 1999)) AND isnotnull(d_date_sk#10)) (31) Project [codegen id : 1] -Output [2]: [d_date_sk#11, d_moy#12] -Input [3]: [d_date_sk#11, d_year#25, d_moy#12] +Output [2]: [d_date_sk#10, d_moy#11] +Input [3]: [d_date_sk#10, d_year#21, d_moy#11] (32) BroadcastExchange -Input [2]: [d_date_sk#11, d_moy#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [2]: [d_date_sk#10, d_moy#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q89/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q89/explain.txt index 770ab84503645..fc949bd963e6f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q89/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q89/explain.txt @@ -59,7 +59,7 @@ Condition : (isnotnull(ss_item_sk#5) AND isnotnull(ss_store_sk#6)) (7) BroadcastExchange Input [4]: [ss_item_sk#5, ss_store_sk#6, ss_sales_price#7, ss_sold_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] @@ -71,85 +71,85 @@ Output [6]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7 Input [8]: [i_item_sk#1, i_brand#2, i_class#3, i_category#4, ss_item_sk#5, ss_store_sk#6, ss_sales_price#7, ss_sold_date_sk#8] (10) ReusedExchange [Reuses operator id: 32] -Output [2]: [d_date_sk#11, d_moy#12] +Output [2]: [d_date_sk#10, d_moy#11] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#11] +Right keys [1]: [d_date_sk#10] Join condition: None (12) Project [codegen id : 4] -Output [6]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, d_moy#12] -Input [8]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, ss_sold_date_sk#8, d_date_sk#11, d_moy#12] +Output [6]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, d_moy#11] +Input [8]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, ss_sold_date_sk#8, d_date_sk#10, d_moy#11] (13) Scan parquet default.store -Output [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] +Output [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] (15) Filter [codegen id : 3] -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] -Condition : isnotnull(s_store_sk#13) +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] +Condition : isnotnull(s_store_sk#12) (16) BroadcastExchange -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#16] +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#6] -Right keys [1]: [s_store_sk#13] +Right keys [1]: [s_store_sk#12] Join condition: None (18) Project [codegen id : 4] -Output [7]: [i_brand#2, i_class#3, i_category#4, ss_sales_price#7, d_moy#12, s_store_name#14, s_company_name#15] -Input [9]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, d_moy#12, s_store_sk#13, s_store_name#14, s_company_name#15] +Output [7]: [i_brand#2, i_class#3, i_category#4, ss_sales_price#7, d_moy#11, s_store_name#13, s_company_name#14] +Input [9]: [i_brand#2, i_class#3, i_category#4, ss_store_sk#6, ss_sales_price#7, d_moy#11, s_store_sk#12, s_store_name#13, s_company_name#14] (19) HashAggregate [codegen id : 4] -Input [7]: [i_brand#2, i_class#3, i_category#4, ss_sales_price#7, d_moy#12, s_store_name#14, s_company_name#15] -Keys [6]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12] +Input [7]: [i_brand#2, i_class#3, i_category#4, ss_sales_price#7, d_moy#11, s_store_name#13, s_company_name#14] +Keys [6]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11] Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#7))] -Aggregate Attributes [1]: [sum#17] -Results [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum#18] +Aggregate Attributes [1]: [sum#15] +Results [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum#16] (20) Exchange -Input [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum#18] -Arguments: hashpartitioning(i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum#16] +Arguments: hashpartitioning(i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 5] -Input [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum#18] -Keys [6]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12] +Input [7]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum#16] +Keys [6]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11] Functions [1]: [sum(UnscaledValue(ss_sales_price#7))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#7))#20] -Results [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, MakeDecimal(sum(UnscaledValue(ss_sales_price#7))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#7))#20,17,2) AS _w0#22] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#7))#17] +Results [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, MakeDecimal(sum(UnscaledValue(ss_sales_price#7))#17,17,2) AS sum_sales#18, MakeDecimal(sum(UnscaledValue(ss_sales_price#7))#17,17,2) AS _w0#19] (22) Exchange -Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22] -Arguments: hashpartitioning(i_category#4, i_brand#2, s_store_name#14, s_company_name#15, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19] +Arguments: hashpartitioning(i_category#4, i_brand#2, s_store_name#13, s_company_name#14, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) Sort [codegen id : 6] -Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22] -Arguments: [i_category#4 ASC NULLS FIRST, i_brand#2 ASC NULLS FIRST, s_store_name#14 ASC NULLS FIRST, s_company_name#15 ASC NULLS FIRST], false, 0 +Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19] +Arguments: [i_category#4 ASC NULLS FIRST, i_brand#2 ASC NULLS FIRST, s_store_name#13 ASC NULLS FIRST, s_company_name#14 ASC NULLS FIRST], false, 0 (24) Window -Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22] -Arguments: [avg(_w0#22) windowspecdefinition(i_category#4, i_brand#2, s_store_name#14, s_company_name#15, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#24], [i_category#4, i_brand#2, s_store_name#14, s_company_name#15] +Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19] +Arguments: [avg(_w0#19) windowspecdefinition(i_category#4, i_brand#2, s_store_name#13, s_company_name#14, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#20], [i_category#4, i_brand#2, s_store_name#13, s_company_name#14] (25) Filter [codegen id : 7] -Input [9]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22, avg_monthly_sales#24] -Condition : (isnotnull(avg_monthly_sales#24) AND (NOT (avg_monthly_sales#24 = 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) +Input [9]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19, avg_monthly_sales#20] +Condition : (isnotnull(avg_monthly_sales#20) AND (NOT (avg_monthly_sales#20 = 0.000000) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000))) (26) Project [codegen id : 7] -Output [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, avg_monthly_sales#24] -Input [9]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, _w0#22, avg_monthly_sales#24] +Output [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, avg_monthly_sales#20] +Input [9]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, _w0#19, avg_monthly_sales#20] (27) TakeOrderedAndProject -Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, avg_monthly_sales#24] -Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, s_store_name#14 ASC NULLS FIRST], [i_category#4, i_class#3, i_brand#2, s_store_name#14, s_company_name#15, d_moy#12, sum_sales#21, avg_monthly_sales#24] +Input [8]: [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, avg_monthly_sales#20] +Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, s_store_name#13 ASC NULLS FIRST], [i_category#4, i_class#3, i_brand#2, s_store_name#13, s_company_name#14, d_moy#11, sum_sales#18, avg_monthly_sales#20] ===== Subqueries ===== @@ -162,25 +162,25 @@ BroadcastExchange (32) (28) Scan parquet default.date_dim -Output [3]: [d_date_sk#11, d_year#25, d_moy#12] +Output [3]: [d_date_sk#10, d_year#21, d_moy#11] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct (29) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#25, d_moy#12] +Input [3]: [d_date_sk#10, d_year#21, d_moy#11] (30) Filter [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#25, d_moy#12] -Condition : ((isnotnull(d_year#25) AND (d_year#25 = 1999)) AND isnotnull(d_date_sk#11)) +Input [3]: [d_date_sk#10, d_year#21, d_moy#11] +Condition : ((isnotnull(d_year#21) AND (d_year#21 = 1999)) AND isnotnull(d_date_sk#10)) (31) Project [codegen id : 1] -Output [2]: [d_date_sk#11, d_moy#12] -Input [3]: [d_date_sk#11, d_year#25, d_moy#12] +Output [2]: [d_date_sk#10, d_moy#11] +Input [3]: [d_date_sk#10, d_year#21, d_moy#11] (32) BroadcastExchange -Input [2]: [d_date_sk#11, d_moy#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [2]: [d_date_sk#10, d_moy#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q9.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q9.sf100/explain.txt index 8bf63794f25e4..c57e62a638258 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q9.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q9.sf100/explain.txt @@ -63,18 +63,18 @@ Results [5]: [count#26, sum#27, count#28, sum#29, count#30] (10) Exchange Input [5]: [count#26, sum#27, count#28, sum#29, count#30] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#31] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=1] (11) HashAggregate [codegen id : 2] Input [5]: [count#26, sum#27, count#28, sum#29, count#30] Keys: [] Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#18)), avg(UnscaledValue(ss_net_paid#19))] -Aggregate Attributes [3]: [count(1)#32, avg(UnscaledValue(ss_ext_discount_amt#18))#33, avg(UnscaledValue(ss_net_paid#19))#34] -Results [3]: [count(1)#32 AS count(1)#35, cast((avg(UnscaledValue(ss_ext_discount_amt#18))#33 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#36, cast((avg(UnscaledValue(ss_net_paid#19))#34 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#37] +Aggregate Attributes [3]: [count(1)#31, avg(UnscaledValue(ss_ext_discount_amt#18))#32, avg(UnscaledValue(ss_net_paid#19))#33] +Results [3]: [count(1)#31 AS count(1)#34, cast((avg(UnscaledValue(ss_ext_discount_amt#18))#32 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#35, cast((avg(UnscaledValue(ss_net_paid#19))#33 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#36] (12) Project [codegen id : 2] -Output [1]: [named_struct(count(1), count(1)#35, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#36, avg(ss_net_paid), avg(ss_net_paid)#37) AS mergedValue#38] -Input [3]: [count(1)#35, avg(ss_ext_discount_amt)#36, avg(ss_net_paid)#37] +Output [1]: [named_struct(count(1), count(1)#34, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#35, avg(ss_net_paid), avg(ss_net_paid)#36) AS mergedValue#37] +Input [3]: [count(1)#34, avg(ss_ext_discount_amt)#35, avg(ss_net_paid)#36] Subquery:2 Hosting operator id = 4 Hosting Expression = ReusedSubquery Subquery scalar-subquery#2, [id=#3] @@ -92,44 +92,44 @@ Subquery:4 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery (13) Scan parquet default.store_sales -Output [4]: [ss_quantity#39, ss_ext_discount_amt#40, ss_net_paid#41, ss_sold_date_sk#42] +Output [4]: [ss_quantity#38, ss_ext_discount_amt#39, ss_net_paid#40, ss_sold_date_sk#41] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,21), LessThanOrEqual(ss_quantity,40)] ReadSchema: struct (14) ColumnarToRow [codegen id : 1] -Input [4]: [ss_quantity#39, ss_ext_discount_amt#40, ss_net_paid#41, ss_sold_date_sk#42] +Input [4]: [ss_quantity#38, ss_ext_discount_amt#39, ss_net_paid#40, ss_sold_date_sk#41] (15) Filter [codegen id : 1] -Input [4]: [ss_quantity#39, ss_ext_discount_amt#40, ss_net_paid#41, ss_sold_date_sk#42] -Condition : ((isnotnull(ss_quantity#39) AND (ss_quantity#39 >= 21)) AND (ss_quantity#39 <= 40)) +Input [4]: [ss_quantity#38, ss_ext_discount_amt#39, ss_net_paid#40, ss_sold_date_sk#41] +Condition : ((isnotnull(ss_quantity#38) AND (ss_quantity#38 >= 21)) AND (ss_quantity#38 <= 40)) (16) Project [codegen id : 1] -Output [2]: [ss_ext_discount_amt#40, ss_net_paid#41] -Input [4]: [ss_quantity#39, ss_ext_discount_amt#40, ss_net_paid#41, ss_sold_date_sk#42] +Output [2]: [ss_ext_discount_amt#39, ss_net_paid#40] +Input [4]: [ss_quantity#38, ss_ext_discount_amt#39, ss_net_paid#40, ss_sold_date_sk#41] (17) HashAggregate [codegen id : 1] -Input [2]: [ss_ext_discount_amt#40, ss_net_paid#41] +Input [2]: [ss_ext_discount_amt#39, ss_net_paid#40] Keys: [] -Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#40)), partial_avg(UnscaledValue(ss_net_paid#41))] -Aggregate Attributes [5]: [count#43, sum#44, count#45, sum#46, count#47] -Results [5]: [count#48, sum#49, count#50, sum#51, count#52] +Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#39)), partial_avg(UnscaledValue(ss_net_paid#40))] +Aggregate Attributes [5]: [count#42, sum#43, count#44, sum#45, count#46] +Results [5]: [count#47, sum#48, count#49, sum#50, count#51] (18) Exchange -Input [5]: [count#48, sum#49, count#50, sum#51, count#52] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#53] +Input [5]: [count#47, sum#48, count#49, sum#50, count#51] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2] (19) HashAggregate [codegen id : 2] -Input [5]: [count#48, sum#49, count#50, sum#51, count#52] +Input [5]: [count#47, sum#48, count#49, sum#50, count#51] Keys: [] -Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#40)), avg(UnscaledValue(ss_net_paid#41))] -Aggregate Attributes [3]: [count(1)#54, avg(UnscaledValue(ss_ext_discount_amt#40))#55, avg(UnscaledValue(ss_net_paid#41))#56] -Results [3]: [count(1)#54 AS count(1)#57, cast((avg(UnscaledValue(ss_ext_discount_amt#40))#55 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#58, cast((avg(UnscaledValue(ss_net_paid#41))#56 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#59] +Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#39)), avg(UnscaledValue(ss_net_paid#40))] +Aggregate Attributes [3]: [count(1)#52, avg(UnscaledValue(ss_ext_discount_amt#39))#53, avg(UnscaledValue(ss_net_paid#40))#54] +Results [3]: [count(1)#52 AS count(1)#55, cast((avg(UnscaledValue(ss_ext_discount_amt#39))#53 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#56, cast((avg(UnscaledValue(ss_net_paid#40))#54 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#57] (20) Project [codegen id : 2] -Output [1]: [named_struct(count(1), count(1)#57, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#58, avg(ss_net_paid), avg(ss_net_paid)#59) AS mergedValue#60] -Input [3]: [count(1)#57, avg(ss_ext_discount_amt)#58, avg(ss_net_paid)#59] +Output [1]: [named_struct(count(1), count(1)#55, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#56, avg(ss_net_paid), avg(ss_net_paid)#57) AS mergedValue#58] +Input [3]: [count(1)#55, avg(ss_ext_discount_amt)#56, avg(ss_net_paid)#57] Subquery:5 Hosting operator id = 4 Hosting Expression = ReusedSubquery Subquery scalar-subquery#5, [id=#6] @@ -147,44 +147,44 @@ Subquery:7 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery (21) Scan parquet default.store_sales -Output [4]: [ss_quantity#61, ss_ext_discount_amt#62, ss_net_paid#63, ss_sold_date_sk#64] +Output [4]: [ss_quantity#59, ss_ext_discount_amt#60, ss_net_paid#61, ss_sold_date_sk#62] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,41), LessThanOrEqual(ss_quantity,60)] ReadSchema: struct (22) ColumnarToRow [codegen id : 1] -Input [4]: [ss_quantity#61, ss_ext_discount_amt#62, ss_net_paid#63, ss_sold_date_sk#64] +Input [4]: [ss_quantity#59, ss_ext_discount_amt#60, ss_net_paid#61, ss_sold_date_sk#62] (23) Filter [codegen id : 1] -Input [4]: [ss_quantity#61, ss_ext_discount_amt#62, ss_net_paid#63, ss_sold_date_sk#64] -Condition : ((isnotnull(ss_quantity#61) AND (ss_quantity#61 >= 41)) AND (ss_quantity#61 <= 60)) +Input [4]: [ss_quantity#59, ss_ext_discount_amt#60, ss_net_paid#61, ss_sold_date_sk#62] +Condition : ((isnotnull(ss_quantity#59) AND (ss_quantity#59 >= 41)) AND (ss_quantity#59 <= 60)) (24) Project [codegen id : 1] -Output [2]: [ss_ext_discount_amt#62, ss_net_paid#63] -Input [4]: [ss_quantity#61, ss_ext_discount_amt#62, ss_net_paid#63, ss_sold_date_sk#64] +Output [2]: [ss_ext_discount_amt#60, ss_net_paid#61] +Input [4]: [ss_quantity#59, ss_ext_discount_amt#60, ss_net_paid#61, ss_sold_date_sk#62] (25) HashAggregate [codegen id : 1] -Input [2]: [ss_ext_discount_amt#62, ss_net_paid#63] +Input [2]: [ss_ext_discount_amt#60, ss_net_paid#61] Keys: [] -Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#62)), partial_avg(UnscaledValue(ss_net_paid#63))] -Aggregate Attributes [5]: [count#65, sum#66, count#67, sum#68, count#69] -Results [5]: [count#70, sum#71, count#72, sum#73, count#74] +Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#60)), partial_avg(UnscaledValue(ss_net_paid#61))] +Aggregate Attributes [5]: [count#63, sum#64, count#65, sum#66, count#67] +Results [5]: [count#68, sum#69, count#70, sum#71, count#72] (26) Exchange -Input [5]: [count#70, sum#71, count#72, sum#73, count#74] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#75] +Input [5]: [count#68, sum#69, count#70, sum#71, count#72] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=3] (27) HashAggregate [codegen id : 2] -Input [5]: [count#70, sum#71, count#72, sum#73, count#74] +Input [5]: [count#68, sum#69, count#70, sum#71, count#72] Keys: [] -Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#62)), avg(UnscaledValue(ss_net_paid#63))] -Aggregate Attributes [3]: [count(1)#76, avg(UnscaledValue(ss_ext_discount_amt#62))#77, avg(UnscaledValue(ss_net_paid#63))#78] -Results [3]: [count(1)#76 AS count(1)#79, cast((avg(UnscaledValue(ss_ext_discount_amt#62))#77 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#80, cast((avg(UnscaledValue(ss_net_paid#63))#78 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#81] +Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#60)), avg(UnscaledValue(ss_net_paid#61))] +Aggregate Attributes [3]: [count(1)#73, avg(UnscaledValue(ss_ext_discount_amt#60))#74, avg(UnscaledValue(ss_net_paid#61))#75] +Results [3]: [count(1)#73 AS count(1)#76, cast((avg(UnscaledValue(ss_ext_discount_amt#60))#74 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#77, cast((avg(UnscaledValue(ss_net_paid#61))#75 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#78] (28) Project [codegen id : 2] -Output [1]: [named_struct(count(1), count(1)#79, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#80, avg(ss_net_paid), avg(ss_net_paid)#81) AS mergedValue#82] -Input [3]: [count(1)#79, avg(ss_ext_discount_amt)#80, avg(ss_net_paid)#81] +Output [1]: [named_struct(count(1), count(1)#76, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#77, avg(ss_net_paid), avg(ss_net_paid)#78) AS mergedValue#79] +Input [3]: [count(1)#76, avg(ss_ext_discount_amt)#77, avg(ss_net_paid)#78] Subquery:8 Hosting operator id = 4 Hosting Expression = ReusedSubquery Subquery scalar-subquery#8, [id=#9] @@ -202,44 +202,44 @@ Subquery:10 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquer (29) Scan parquet default.store_sales -Output [4]: [ss_quantity#83, ss_ext_discount_amt#84, ss_net_paid#85, ss_sold_date_sk#86] +Output [4]: [ss_quantity#80, ss_ext_discount_amt#81, ss_net_paid#82, ss_sold_date_sk#83] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,61), LessThanOrEqual(ss_quantity,80)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [4]: [ss_quantity#83, ss_ext_discount_amt#84, ss_net_paid#85, ss_sold_date_sk#86] +Input [4]: [ss_quantity#80, ss_ext_discount_amt#81, ss_net_paid#82, ss_sold_date_sk#83] (31) Filter [codegen id : 1] -Input [4]: [ss_quantity#83, ss_ext_discount_amt#84, ss_net_paid#85, ss_sold_date_sk#86] -Condition : ((isnotnull(ss_quantity#83) AND (ss_quantity#83 >= 61)) AND (ss_quantity#83 <= 80)) +Input [4]: [ss_quantity#80, ss_ext_discount_amt#81, ss_net_paid#82, ss_sold_date_sk#83] +Condition : ((isnotnull(ss_quantity#80) AND (ss_quantity#80 >= 61)) AND (ss_quantity#80 <= 80)) (32) Project [codegen id : 1] -Output [2]: [ss_ext_discount_amt#84, ss_net_paid#85] -Input [4]: [ss_quantity#83, ss_ext_discount_amt#84, ss_net_paid#85, ss_sold_date_sk#86] +Output [2]: [ss_ext_discount_amt#81, ss_net_paid#82] +Input [4]: [ss_quantity#80, ss_ext_discount_amt#81, ss_net_paid#82, ss_sold_date_sk#83] (33) HashAggregate [codegen id : 1] -Input [2]: [ss_ext_discount_amt#84, ss_net_paid#85] +Input [2]: [ss_ext_discount_amt#81, ss_net_paid#82] Keys: [] -Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#84)), partial_avg(UnscaledValue(ss_net_paid#85))] -Aggregate Attributes [5]: [count#87, sum#88, count#89, sum#90, count#91] -Results [5]: [count#92, sum#93, count#94, sum#95, count#96] +Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#81)), partial_avg(UnscaledValue(ss_net_paid#82))] +Aggregate Attributes [5]: [count#84, sum#85, count#86, sum#87, count#88] +Results [5]: [count#89, sum#90, count#91, sum#92, count#93] (34) Exchange -Input [5]: [count#92, sum#93, count#94, sum#95, count#96] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#97] +Input [5]: [count#89, sum#90, count#91, sum#92, count#93] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (35) HashAggregate [codegen id : 2] -Input [5]: [count#92, sum#93, count#94, sum#95, count#96] +Input [5]: [count#89, sum#90, count#91, sum#92, count#93] Keys: [] -Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#84)), avg(UnscaledValue(ss_net_paid#85))] -Aggregate Attributes [3]: [count(1)#98, avg(UnscaledValue(ss_ext_discount_amt#84))#99, avg(UnscaledValue(ss_net_paid#85))#100] -Results [3]: [count(1)#98 AS count(1)#101, cast((avg(UnscaledValue(ss_ext_discount_amt#84))#99 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#102, cast((avg(UnscaledValue(ss_net_paid#85))#100 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#103] +Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#81)), avg(UnscaledValue(ss_net_paid#82))] +Aggregate Attributes [3]: [count(1)#94, avg(UnscaledValue(ss_ext_discount_amt#81))#95, avg(UnscaledValue(ss_net_paid#82))#96] +Results [3]: [count(1)#94 AS count(1)#97, cast((avg(UnscaledValue(ss_ext_discount_amt#81))#95 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#98, cast((avg(UnscaledValue(ss_net_paid#82))#96 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#99] (36) Project [codegen id : 2] -Output [1]: [named_struct(count(1), count(1)#101, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#102, avg(ss_net_paid), avg(ss_net_paid)#103) AS mergedValue#104] -Input [3]: [count(1)#101, avg(ss_ext_discount_amt)#102, avg(ss_net_paid)#103] +Output [1]: [named_struct(count(1), count(1)#97, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#98, avg(ss_net_paid), avg(ss_net_paid)#99) AS mergedValue#100] +Input [3]: [count(1)#97, avg(ss_ext_discount_amt)#98, avg(ss_net_paid)#99] Subquery:11 Hosting operator id = 4 Hosting Expression = ReusedSubquery Subquery scalar-subquery#11, [id=#12] @@ -257,44 +257,44 @@ Subquery:13 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquer (37) Scan parquet default.store_sales -Output [4]: [ss_quantity#105, ss_ext_discount_amt#106, ss_net_paid#107, ss_sold_date_sk#108] +Output [4]: [ss_quantity#101, ss_ext_discount_amt#102, ss_net_paid#103, ss_sold_date_sk#104] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,81), LessThanOrEqual(ss_quantity,100)] ReadSchema: struct (38) ColumnarToRow [codegen id : 1] -Input [4]: [ss_quantity#105, ss_ext_discount_amt#106, ss_net_paid#107, ss_sold_date_sk#108] +Input [4]: [ss_quantity#101, ss_ext_discount_amt#102, ss_net_paid#103, ss_sold_date_sk#104] (39) Filter [codegen id : 1] -Input [4]: [ss_quantity#105, ss_ext_discount_amt#106, ss_net_paid#107, ss_sold_date_sk#108] -Condition : ((isnotnull(ss_quantity#105) AND (ss_quantity#105 >= 81)) AND (ss_quantity#105 <= 100)) +Input [4]: [ss_quantity#101, ss_ext_discount_amt#102, ss_net_paid#103, ss_sold_date_sk#104] +Condition : ((isnotnull(ss_quantity#101) AND (ss_quantity#101 >= 81)) AND (ss_quantity#101 <= 100)) (40) Project [codegen id : 1] -Output [2]: [ss_ext_discount_amt#106, ss_net_paid#107] -Input [4]: [ss_quantity#105, ss_ext_discount_amt#106, ss_net_paid#107, ss_sold_date_sk#108] +Output [2]: [ss_ext_discount_amt#102, ss_net_paid#103] +Input [4]: [ss_quantity#101, ss_ext_discount_amt#102, ss_net_paid#103, ss_sold_date_sk#104] (41) HashAggregate [codegen id : 1] -Input [2]: [ss_ext_discount_amt#106, ss_net_paid#107] +Input [2]: [ss_ext_discount_amt#102, ss_net_paid#103] Keys: [] -Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#106)), partial_avg(UnscaledValue(ss_net_paid#107))] -Aggregate Attributes [5]: [count#109, sum#110, count#111, sum#112, count#113] -Results [5]: [count#114, sum#115, count#116, sum#117, count#118] +Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#102)), partial_avg(UnscaledValue(ss_net_paid#103))] +Aggregate Attributes [5]: [count#105, sum#106, count#107, sum#108, count#109] +Results [5]: [count#110, sum#111, count#112, sum#113, count#114] (42) Exchange -Input [5]: [count#114, sum#115, count#116, sum#117, count#118] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#119] +Input [5]: [count#110, sum#111, count#112, sum#113, count#114] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5] (43) HashAggregate [codegen id : 2] -Input [5]: [count#114, sum#115, count#116, sum#117, count#118] +Input [5]: [count#110, sum#111, count#112, sum#113, count#114] Keys: [] -Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#106)), avg(UnscaledValue(ss_net_paid#107))] -Aggregate Attributes [3]: [count(1)#120, avg(UnscaledValue(ss_ext_discount_amt#106))#121, avg(UnscaledValue(ss_net_paid#107))#122] -Results [3]: [count(1)#120 AS count(1)#123, cast((avg(UnscaledValue(ss_ext_discount_amt#106))#121 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#124, cast((avg(UnscaledValue(ss_net_paid#107))#122 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#125] +Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#102)), avg(UnscaledValue(ss_net_paid#103))] +Aggregate Attributes [3]: [count(1)#115, avg(UnscaledValue(ss_ext_discount_amt#102))#116, avg(UnscaledValue(ss_net_paid#103))#117] +Results [3]: [count(1)#115 AS count(1)#118, cast((avg(UnscaledValue(ss_ext_discount_amt#102))#116 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#119, cast((avg(UnscaledValue(ss_net_paid#103))#117 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#120] (44) Project [codegen id : 2] -Output [1]: [named_struct(count(1), count(1)#123, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#124, avg(ss_net_paid), avg(ss_net_paid)#125) AS mergedValue#126] -Input [3]: [count(1)#123, avg(ss_ext_discount_amt)#124, avg(ss_net_paid)#125] +Output [1]: [named_struct(count(1), count(1)#118, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#119, avg(ss_net_paid), avg(ss_net_paid)#120) AS mergedValue#121] +Input [3]: [count(1)#118, avg(ss_ext_discount_amt)#119, avg(ss_net_paid)#120] Subquery:14 Hosting operator id = 4 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#15] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q9/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q9/explain.txt index 8bf63794f25e4..c57e62a638258 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q9/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q9/explain.txt @@ -63,18 +63,18 @@ Results [5]: [count#26, sum#27, count#28, sum#29, count#30] (10) Exchange Input [5]: [count#26, sum#27, count#28, sum#29, count#30] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#31] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=1] (11) HashAggregate [codegen id : 2] Input [5]: [count#26, sum#27, count#28, sum#29, count#30] Keys: [] Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#18)), avg(UnscaledValue(ss_net_paid#19))] -Aggregate Attributes [3]: [count(1)#32, avg(UnscaledValue(ss_ext_discount_amt#18))#33, avg(UnscaledValue(ss_net_paid#19))#34] -Results [3]: [count(1)#32 AS count(1)#35, cast((avg(UnscaledValue(ss_ext_discount_amt#18))#33 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#36, cast((avg(UnscaledValue(ss_net_paid#19))#34 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#37] +Aggregate Attributes [3]: [count(1)#31, avg(UnscaledValue(ss_ext_discount_amt#18))#32, avg(UnscaledValue(ss_net_paid#19))#33] +Results [3]: [count(1)#31 AS count(1)#34, cast((avg(UnscaledValue(ss_ext_discount_amt#18))#32 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#35, cast((avg(UnscaledValue(ss_net_paid#19))#33 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#36] (12) Project [codegen id : 2] -Output [1]: [named_struct(count(1), count(1)#35, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#36, avg(ss_net_paid), avg(ss_net_paid)#37) AS mergedValue#38] -Input [3]: [count(1)#35, avg(ss_ext_discount_amt)#36, avg(ss_net_paid)#37] +Output [1]: [named_struct(count(1), count(1)#34, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#35, avg(ss_net_paid), avg(ss_net_paid)#36) AS mergedValue#37] +Input [3]: [count(1)#34, avg(ss_ext_discount_amt)#35, avg(ss_net_paid)#36] Subquery:2 Hosting operator id = 4 Hosting Expression = ReusedSubquery Subquery scalar-subquery#2, [id=#3] @@ -92,44 +92,44 @@ Subquery:4 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery (13) Scan parquet default.store_sales -Output [4]: [ss_quantity#39, ss_ext_discount_amt#40, ss_net_paid#41, ss_sold_date_sk#42] +Output [4]: [ss_quantity#38, ss_ext_discount_amt#39, ss_net_paid#40, ss_sold_date_sk#41] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,21), LessThanOrEqual(ss_quantity,40)] ReadSchema: struct (14) ColumnarToRow [codegen id : 1] -Input [4]: [ss_quantity#39, ss_ext_discount_amt#40, ss_net_paid#41, ss_sold_date_sk#42] +Input [4]: [ss_quantity#38, ss_ext_discount_amt#39, ss_net_paid#40, ss_sold_date_sk#41] (15) Filter [codegen id : 1] -Input [4]: [ss_quantity#39, ss_ext_discount_amt#40, ss_net_paid#41, ss_sold_date_sk#42] -Condition : ((isnotnull(ss_quantity#39) AND (ss_quantity#39 >= 21)) AND (ss_quantity#39 <= 40)) +Input [4]: [ss_quantity#38, ss_ext_discount_amt#39, ss_net_paid#40, ss_sold_date_sk#41] +Condition : ((isnotnull(ss_quantity#38) AND (ss_quantity#38 >= 21)) AND (ss_quantity#38 <= 40)) (16) Project [codegen id : 1] -Output [2]: [ss_ext_discount_amt#40, ss_net_paid#41] -Input [4]: [ss_quantity#39, ss_ext_discount_amt#40, ss_net_paid#41, ss_sold_date_sk#42] +Output [2]: [ss_ext_discount_amt#39, ss_net_paid#40] +Input [4]: [ss_quantity#38, ss_ext_discount_amt#39, ss_net_paid#40, ss_sold_date_sk#41] (17) HashAggregate [codegen id : 1] -Input [2]: [ss_ext_discount_amt#40, ss_net_paid#41] +Input [2]: [ss_ext_discount_amt#39, ss_net_paid#40] Keys: [] -Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#40)), partial_avg(UnscaledValue(ss_net_paid#41))] -Aggregate Attributes [5]: [count#43, sum#44, count#45, sum#46, count#47] -Results [5]: [count#48, sum#49, count#50, sum#51, count#52] +Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#39)), partial_avg(UnscaledValue(ss_net_paid#40))] +Aggregate Attributes [5]: [count#42, sum#43, count#44, sum#45, count#46] +Results [5]: [count#47, sum#48, count#49, sum#50, count#51] (18) Exchange -Input [5]: [count#48, sum#49, count#50, sum#51, count#52] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#53] +Input [5]: [count#47, sum#48, count#49, sum#50, count#51] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2] (19) HashAggregate [codegen id : 2] -Input [5]: [count#48, sum#49, count#50, sum#51, count#52] +Input [5]: [count#47, sum#48, count#49, sum#50, count#51] Keys: [] -Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#40)), avg(UnscaledValue(ss_net_paid#41))] -Aggregate Attributes [3]: [count(1)#54, avg(UnscaledValue(ss_ext_discount_amt#40))#55, avg(UnscaledValue(ss_net_paid#41))#56] -Results [3]: [count(1)#54 AS count(1)#57, cast((avg(UnscaledValue(ss_ext_discount_amt#40))#55 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#58, cast((avg(UnscaledValue(ss_net_paid#41))#56 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#59] +Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#39)), avg(UnscaledValue(ss_net_paid#40))] +Aggregate Attributes [3]: [count(1)#52, avg(UnscaledValue(ss_ext_discount_amt#39))#53, avg(UnscaledValue(ss_net_paid#40))#54] +Results [3]: [count(1)#52 AS count(1)#55, cast((avg(UnscaledValue(ss_ext_discount_amt#39))#53 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#56, cast((avg(UnscaledValue(ss_net_paid#40))#54 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#57] (20) Project [codegen id : 2] -Output [1]: [named_struct(count(1), count(1)#57, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#58, avg(ss_net_paid), avg(ss_net_paid)#59) AS mergedValue#60] -Input [3]: [count(1)#57, avg(ss_ext_discount_amt)#58, avg(ss_net_paid)#59] +Output [1]: [named_struct(count(1), count(1)#55, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#56, avg(ss_net_paid), avg(ss_net_paid)#57) AS mergedValue#58] +Input [3]: [count(1)#55, avg(ss_ext_discount_amt)#56, avg(ss_net_paid)#57] Subquery:5 Hosting operator id = 4 Hosting Expression = ReusedSubquery Subquery scalar-subquery#5, [id=#6] @@ -147,44 +147,44 @@ Subquery:7 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquery (21) Scan parquet default.store_sales -Output [4]: [ss_quantity#61, ss_ext_discount_amt#62, ss_net_paid#63, ss_sold_date_sk#64] +Output [4]: [ss_quantity#59, ss_ext_discount_amt#60, ss_net_paid#61, ss_sold_date_sk#62] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,41), LessThanOrEqual(ss_quantity,60)] ReadSchema: struct (22) ColumnarToRow [codegen id : 1] -Input [4]: [ss_quantity#61, ss_ext_discount_amt#62, ss_net_paid#63, ss_sold_date_sk#64] +Input [4]: [ss_quantity#59, ss_ext_discount_amt#60, ss_net_paid#61, ss_sold_date_sk#62] (23) Filter [codegen id : 1] -Input [4]: [ss_quantity#61, ss_ext_discount_amt#62, ss_net_paid#63, ss_sold_date_sk#64] -Condition : ((isnotnull(ss_quantity#61) AND (ss_quantity#61 >= 41)) AND (ss_quantity#61 <= 60)) +Input [4]: [ss_quantity#59, ss_ext_discount_amt#60, ss_net_paid#61, ss_sold_date_sk#62] +Condition : ((isnotnull(ss_quantity#59) AND (ss_quantity#59 >= 41)) AND (ss_quantity#59 <= 60)) (24) Project [codegen id : 1] -Output [2]: [ss_ext_discount_amt#62, ss_net_paid#63] -Input [4]: [ss_quantity#61, ss_ext_discount_amt#62, ss_net_paid#63, ss_sold_date_sk#64] +Output [2]: [ss_ext_discount_amt#60, ss_net_paid#61] +Input [4]: [ss_quantity#59, ss_ext_discount_amt#60, ss_net_paid#61, ss_sold_date_sk#62] (25) HashAggregate [codegen id : 1] -Input [2]: [ss_ext_discount_amt#62, ss_net_paid#63] +Input [2]: [ss_ext_discount_amt#60, ss_net_paid#61] Keys: [] -Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#62)), partial_avg(UnscaledValue(ss_net_paid#63))] -Aggregate Attributes [5]: [count#65, sum#66, count#67, sum#68, count#69] -Results [5]: [count#70, sum#71, count#72, sum#73, count#74] +Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#60)), partial_avg(UnscaledValue(ss_net_paid#61))] +Aggregate Attributes [5]: [count#63, sum#64, count#65, sum#66, count#67] +Results [5]: [count#68, sum#69, count#70, sum#71, count#72] (26) Exchange -Input [5]: [count#70, sum#71, count#72, sum#73, count#74] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#75] +Input [5]: [count#68, sum#69, count#70, sum#71, count#72] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=3] (27) HashAggregate [codegen id : 2] -Input [5]: [count#70, sum#71, count#72, sum#73, count#74] +Input [5]: [count#68, sum#69, count#70, sum#71, count#72] Keys: [] -Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#62)), avg(UnscaledValue(ss_net_paid#63))] -Aggregate Attributes [3]: [count(1)#76, avg(UnscaledValue(ss_ext_discount_amt#62))#77, avg(UnscaledValue(ss_net_paid#63))#78] -Results [3]: [count(1)#76 AS count(1)#79, cast((avg(UnscaledValue(ss_ext_discount_amt#62))#77 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#80, cast((avg(UnscaledValue(ss_net_paid#63))#78 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#81] +Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#60)), avg(UnscaledValue(ss_net_paid#61))] +Aggregate Attributes [3]: [count(1)#73, avg(UnscaledValue(ss_ext_discount_amt#60))#74, avg(UnscaledValue(ss_net_paid#61))#75] +Results [3]: [count(1)#73 AS count(1)#76, cast((avg(UnscaledValue(ss_ext_discount_amt#60))#74 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#77, cast((avg(UnscaledValue(ss_net_paid#61))#75 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#78] (28) Project [codegen id : 2] -Output [1]: [named_struct(count(1), count(1)#79, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#80, avg(ss_net_paid), avg(ss_net_paid)#81) AS mergedValue#82] -Input [3]: [count(1)#79, avg(ss_ext_discount_amt)#80, avg(ss_net_paid)#81] +Output [1]: [named_struct(count(1), count(1)#76, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#77, avg(ss_net_paid), avg(ss_net_paid)#78) AS mergedValue#79] +Input [3]: [count(1)#76, avg(ss_ext_discount_amt)#77, avg(ss_net_paid)#78] Subquery:8 Hosting operator id = 4 Hosting Expression = ReusedSubquery Subquery scalar-subquery#8, [id=#9] @@ -202,44 +202,44 @@ Subquery:10 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquer (29) Scan parquet default.store_sales -Output [4]: [ss_quantity#83, ss_ext_discount_amt#84, ss_net_paid#85, ss_sold_date_sk#86] +Output [4]: [ss_quantity#80, ss_ext_discount_amt#81, ss_net_paid#82, ss_sold_date_sk#83] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,61), LessThanOrEqual(ss_quantity,80)] ReadSchema: struct (30) ColumnarToRow [codegen id : 1] -Input [4]: [ss_quantity#83, ss_ext_discount_amt#84, ss_net_paid#85, ss_sold_date_sk#86] +Input [4]: [ss_quantity#80, ss_ext_discount_amt#81, ss_net_paid#82, ss_sold_date_sk#83] (31) Filter [codegen id : 1] -Input [4]: [ss_quantity#83, ss_ext_discount_amt#84, ss_net_paid#85, ss_sold_date_sk#86] -Condition : ((isnotnull(ss_quantity#83) AND (ss_quantity#83 >= 61)) AND (ss_quantity#83 <= 80)) +Input [4]: [ss_quantity#80, ss_ext_discount_amt#81, ss_net_paid#82, ss_sold_date_sk#83] +Condition : ((isnotnull(ss_quantity#80) AND (ss_quantity#80 >= 61)) AND (ss_quantity#80 <= 80)) (32) Project [codegen id : 1] -Output [2]: [ss_ext_discount_amt#84, ss_net_paid#85] -Input [4]: [ss_quantity#83, ss_ext_discount_amt#84, ss_net_paid#85, ss_sold_date_sk#86] +Output [2]: [ss_ext_discount_amt#81, ss_net_paid#82] +Input [4]: [ss_quantity#80, ss_ext_discount_amt#81, ss_net_paid#82, ss_sold_date_sk#83] (33) HashAggregate [codegen id : 1] -Input [2]: [ss_ext_discount_amt#84, ss_net_paid#85] +Input [2]: [ss_ext_discount_amt#81, ss_net_paid#82] Keys: [] -Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#84)), partial_avg(UnscaledValue(ss_net_paid#85))] -Aggregate Attributes [5]: [count#87, sum#88, count#89, sum#90, count#91] -Results [5]: [count#92, sum#93, count#94, sum#95, count#96] +Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#81)), partial_avg(UnscaledValue(ss_net_paid#82))] +Aggregate Attributes [5]: [count#84, sum#85, count#86, sum#87, count#88] +Results [5]: [count#89, sum#90, count#91, sum#92, count#93] (34) Exchange -Input [5]: [count#92, sum#93, count#94, sum#95, count#96] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#97] +Input [5]: [count#89, sum#90, count#91, sum#92, count#93] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (35) HashAggregate [codegen id : 2] -Input [5]: [count#92, sum#93, count#94, sum#95, count#96] +Input [5]: [count#89, sum#90, count#91, sum#92, count#93] Keys: [] -Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#84)), avg(UnscaledValue(ss_net_paid#85))] -Aggregate Attributes [3]: [count(1)#98, avg(UnscaledValue(ss_ext_discount_amt#84))#99, avg(UnscaledValue(ss_net_paid#85))#100] -Results [3]: [count(1)#98 AS count(1)#101, cast((avg(UnscaledValue(ss_ext_discount_amt#84))#99 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#102, cast((avg(UnscaledValue(ss_net_paid#85))#100 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#103] +Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#81)), avg(UnscaledValue(ss_net_paid#82))] +Aggregate Attributes [3]: [count(1)#94, avg(UnscaledValue(ss_ext_discount_amt#81))#95, avg(UnscaledValue(ss_net_paid#82))#96] +Results [3]: [count(1)#94 AS count(1)#97, cast((avg(UnscaledValue(ss_ext_discount_amt#81))#95 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#98, cast((avg(UnscaledValue(ss_net_paid#82))#96 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#99] (36) Project [codegen id : 2] -Output [1]: [named_struct(count(1), count(1)#101, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#102, avg(ss_net_paid), avg(ss_net_paid)#103) AS mergedValue#104] -Input [3]: [count(1)#101, avg(ss_ext_discount_amt)#102, avg(ss_net_paid)#103] +Output [1]: [named_struct(count(1), count(1)#97, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#98, avg(ss_net_paid), avg(ss_net_paid)#99) AS mergedValue#100] +Input [3]: [count(1)#97, avg(ss_ext_discount_amt)#98, avg(ss_net_paid)#99] Subquery:11 Hosting operator id = 4 Hosting Expression = ReusedSubquery Subquery scalar-subquery#11, [id=#12] @@ -257,44 +257,44 @@ Subquery:13 Hosting operator id = 4 Hosting Expression = Subquery scalar-subquer (37) Scan parquet default.store_sales -Output [4]: [ss_quantity#105, ss_ext_discount_amt#106, ss_net_paid#107, ss_sold_date_sk#108] +Output [4]: [ss_quantity#101, ss_ext_discount_amt#102, ss_net_paid#103, ss_sold_date_sk#104] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_quantity), GreaterThanOrEqual(ss_quantity,81), LessThanOrEqual(ss_quantity,100)] ReadSchema: struct (38) ColumnarToRow [codegen id : 1] -Input [4]: [ss_quantity#105, ss_ext_discount_amt#106, ss_net_paid#107, ss_sold_date_sk#108] +Input [4]: [ss_quantity#101, ss_ext_discount_amt#102, ss_net_paid#103, ss_sold_date_sk#104] (39) Filter [codegen id : 1] -Input [4]: [ss_quantity#105, ss_ext_discount_amt#106, ss_net_paid#107, ss_sold_date_sk#108] -Condition : ((isnotnull(ss_quantity#105) AND (ss_quantity#105 >= 81)) AND (ss_quantity#105 <= 100)) +Input [4]: [ss_quantity#101, ss_ext_discount_amt#102, ss_net_paid#103, ss_sold_date_sk#104] +Condition : ((isnotnull(ss_quantity#101) AND (ss_quantity#101 >= 81)) AND (ss_quantity#101 <= 100)) (40) Project [codegen id : 1] -Output [2]: [ss_ext_discount_amt#106, ss_net_paid#107] -Input [4]: [ss_quantity#105, ss_ext_discount_amt#106, ss_net_paid#107, ss_sold_date_sk#108] +Output [2]: [ss_ext_discount_amt#102, ss_net_paid#103] +Input [4]: [ss_quantity#101, ss_ext_discount_amt#102, ss_net_paid#103, ss_sold_date_sk#104] (41) HashAggregate [codegen id : 1] -Input [2]: [ss_ext_discount_amt#106, ss_net_paid#107] +Input [2]: [ss_ext_discount_amt#102, ss_net_paid#103] Keys: [] -Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#106)), partial_avg(UnscaledValue(ss_net_paid#107))] -Aggregate Attributes [5]: [count#109, sum#110, count#111, sum#112, count#113] -Results [5]: [count#114, sum#115, count#116, sum#117, count#118] +Functions [3]: [partial_count(1), partial_avg(UnscaledValue(ss_ext_discount_amt#102)), partial_avg(UnscaledValue(ss_net_paid#103))] +Aggregate Attributes [5]: [count#105, sum#106, count#107, sum#108, count#109] +Results [5]: [count#110, sum#111, count#112, sum#113, count#114] (42) Exchange -Input [5]: [count#114, sum#115, count#116, sum#117, count#118] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#119] +Input [5]: [count#110, sum#111, count#112, sum#113, count#114] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5] (43) HashAggregate [codegen id : 2] -Input [5]: [count#114, sum#115, count#116, sum#117, count#118] +Input [5]: [count#110, sum#111, count#112, sum#113, count#114] Keys: [] -Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#106)), avg(UnscaledValue(ss_net_paid#107))] -Aggregate Attributes [3]: [count(1)#120, avg(UnscaledValue(ss_ext_discount_amt#106))#121, avg(UnscaledValue(ss_net_paid#107))#122] -Results [3]: [count(1)#120 AS count(1)#123, cast((avg(UnscaledValue(ss_ext_discount_amt#106))#121 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#124, cast((avg(UnscaledValue(ss_net_paid#107))#122 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#125] +Functions [3]: [count(1), avg(UnscaledValue(ss_ext_discount_amt#102)), avg(UnscaledValue(ss_net_paid#103))] +Aggregate Attributes [3]: [count(1)#115, avg(UnscaledValue(ss_ext_discount_amt#102))#116, avg(UnscaledValue(ss_net_paid#103))#117] +Results [3]: [count(1)#115 AS count(1)#118, cast((avg(UnscaledValue(ss_ext_discount_amt#102))#116 / 100.0) as decimal(11,6)) AS avg(ss_ext_discount_amt)#119, cast((avg(UnscaledValue(ss_net_paid#103))#117 / 100.0) as decimal(11,6)) AS avg(ss_net_paid)#120] (44) Project [codegen id : 2] -Output [1]: [named_struct(count(1), count(1)#123, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#124, avg(ss_net_paid), avg(ss_net_paid)#125) AS mergedValue#126] -Input [3]: [count(1)#123, avg(ss_ext_discount_amt)#124, avg(ss_net_paid)#125] +Output [1]: [named_struct(count(1), count(1)#118, avg(ss_ext_discount_amt), avg(ss_ext_discount_amt)#119, avg(ss_net_paid), avg(ss_net_paid)#120) AS mergedValue#121] +Input [3]: [count(1)#118, avg(ss_ext_discount_amt)#119, avg(ss_net_paid)#120] Subquery:14 Hosting operator id = 4 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#15] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q90.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q90.sf100/explain.txt index 095c3d531a509..e9b15a8928cbe 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q90.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q90.sf100/explain.txt @@ -90,7 +90,7 @@ Input [2]: [wp_web_page_sk#5, wp_char_count#6] (9) BroadcastExchange Input [1]: [wp_web_page_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ws_web_page_sk#3] @@ -102,184 +102,184 @@ Output [2]: [ws_sold_time_sk#1, ws_ship_hdemo_sk#2] Input [4]: [ws_sold_time_sk#1, ws_ship_hdemo_sk#2, ws_web_page_sk#3, wp_web_page_sk#5] (12) Scan parquet default.household_demographics -Output [2]: [hd_demo_sk#8, hd_dep_count#9] +Output [2]: [hd_demo_sk#7, hd_dep_count#8] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_dep_count), EqualTo(hd_dep_count,6), IsNotNull(hd_demo_sk)] ReadSchema: struct (13) ColumnarToRow [codegen id : 2] -Input [2]: [hd_demo_sk#8, hd_dep_count#9] +Input [2]: [hd_demo_sk#7, hd_dep_count#8] (14) Filter [codegen id : 2] -Input [2]: [hd_demo_sk#8, hd_dep_count#9] -Condition : ((isnotnull(hd_dep_count#9) AND (hd_dep_count#9 = 6)) AND isnotnull(hd_demo_sk#8)) +Input [2]: [hd_demo_sk#7, hd_dep_count#8] +Condition : ((isnotnull(hd_dep_count#8) AND (hd_dep_count#8 = 6)) AND isnotnull(hd_demo_sk#7)) (15) Project [codegen id : 2] -Output [1]: [hd_demo_sk#8] -Input [2]: [hd_demo_sk#8, hd_dep_count#9] +Output [1]: [hd_demo_sk#7] +Input [2]: [hd_demo_sk#7, hd_dep_count#8] (16) BroadcastExchange -Input [1]: [hd_demo_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Input [1]: [hd_demo_sk#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ws_ship_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#8] +Right keys [1]: [hd_demo_sk#7] Join condition: None (18) Project [codegen id : 4] Output [1]: [ws_sold_time_sk#1] -Input [3]: [ws_sold_time_sk#1, ws_ship_hdemo_sk#2, hd_demo_sk#8] +Input [3]: [ws_sold_time_sk#1, ws_ship_hdemo_sk#2, hd_demo_sk#7] (19) Scan parquet default.time_dim -Output [2]: [t_time_sk#11, t_hour#12] +Output [2]: [t_time_sk#9, t_hour#10] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), GreaterThanOrEqual(t_hour,8), LessThanOrEqual(t_hour,9), IsNotNull(t_time_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 3] -Input [2]: [t_time_sk#11, t_hour#12] +Input [2]: [t_time_sk#9, t_hour#10] (21) Filter [codegen id : 3] -Input [2]: [t_time_sk#11, t_hour#12] -Condition : (((isnotnull(t_hour#12) AND (t_hour#12 >= 8)) AND (t_hour#12 <= 9)) AND isnotnull(t_time_sk#11)) +Input [2]: [t_time_sk#9, t_hour#10] +Condition : (((isnotnull(t_hour#10) AND (t_hour#10 >= 8)) AND (t_hour#10 <= 9)) AND isnotnull(t_time_sk#9)) (22) Project [codegen id : 3] -Output [1]: [t_time_sk#11] -Input [2]: [t_time_sk#11, t_hour#12] +Output [1]: [t_time_sk#9] +Input [2]: [t_time_sk#9, t_hour#10] (23) BroadcastExchange -Input [1]: [t_time_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] +Input [1]: [t_time_sk#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ws_sold_time_sk#1] -Right keys [1]: [t_time_sk#11] +Right keys [1]: [t_time_sk#9] Join condition: None (25) Project [codegen id : 4] Output: [] -Input [2]: [ws_sold_time_sk#1, t_time_sk#11] +Input [2]: [ws_sold_time_sk#1, t_time_sk#9] (26) HashAggregate [codegen id : 4] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#14] -Results [1]: [count#15] +Aggregate Attributes [1]: [count#11] +Results [1]: [count#12] (27) Exchange -Input [1]: [count#15] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#16] +Input [1]: [count#12] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 10] -Input [1]: [count#15] +Input [1]: [count#12] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#17] -Results [1]: [count(1)#17 AS amc#18] +Aggregate Attributes [1]: [count(1)#13] +Results [1]: [count(1)#13 AS amc#14] (29) Scan parquet default.web_sales -Output [4]: [ws_sold_time_sk#19, ws_ship_hdemo_sk#20, ws_web_page_sk#21, ws_sold_date_sk#22] +Output [4]: [ws_sold_time_sk#15, ws_ship_hdemo_sk#16, ws_web_page_sk#17, ws_sold_date_sk#18] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] PushedFilters: [IsNotNull(ws_ship_hdemo_sk), IsNotNull(ws_sold_time_sk), IsNotNull(ws_web_page_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 8] -Input [4]: [ws_sold_time_sk#19, ws_ship_hdemo_sk#20, ws_web_page_sk#21, ws_sold_date_sk#22] +Input [4]: [ws_sold_time_sk#15, ws_ship_hdemo_sk#16, ws_web_page_sk#17, ws_sold_date_sk#18] (31) Filter [codegen id : 8] -Input [4]: [ws_sold_time_sk#19, ws_ship_hdemo_sk#20, ws_web_page_sk#21, ws_sold_date_sk#22] -Condition : ((isnotnull(ws_ship_hdemo_sk#20) AND isnotnull(ws_sold_time_sk#19)) AND isnotnull(ws_web_page_sk#21)) +Input [4]: [ws_sold_time_sk#15, ws_ship_hdemo_sk#16, ws_web_page_sk#17, ws_sold_date_sk#18] +Condition : ((isnotnull(ws_ship_hdemo_sk#16) AND isnotnull(ws_sold_time_sk#15)) AND isnotnull(ws_web_page_sk#17)) (32) Project [codegen id : 8] -Output [3]: [ws_sold_time_sk#19, ws_ship_hdemo_sk#20, ws_web_page_sk#21] -Input [4]: [ws_sold_time_sk#19, ws_ship_hdemo_sk#20, ws_web_page_sk#21, ws_sold_date_sk#22] +Output [3]: [ws_sold_time_sk#15, ws_ship_hdemo_sk#16, ws_web_page_sk#17] +Input [4]: [ws_sold_time_sk#15, ws_ship_hdemo_sk#16, ws_web_page_sk#17, ws_sold_date_sk#18] (33) ReusedExchange [Reuses operator id: 9] -Output [1]: [wp_web_page_sk#23] +Output [1]: [wp_web_page_sk#19] (34) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ws_web_page_sk#21] -Right keys [1]: [wp_web_page_sk#23] +Left keys [1]: [ws_web_page_sk#17] +Right keys [1]: [wp_web_page_sk#19] Join condition: None (35) Project [codegen id : 8] -Output [2]: [ws_sold_time_sk#19, ws_ship_hdemo_sk#20] -Input [4]: [ws_sold_time_sk#19, ws_ship_hdemo_sk#20, ws_web_page_sk#21, wp_web_page_sk#23] +Output [2]: [ws_sold_time_sk#15, ws_ship_hdemo_sk#16] +Input [4]: [ws_sold_time_sk#15, ws_ship_hdemo_sk#16, ws_web_page_sk#17, wp_web_page_sk#19] (36) ReusedExchange [Reuses operator id: 16] -Output [1]: [hd_demo_sk#24] +Output [1]: [hd_demo_sk#20] (37) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ws_ship_hdemo_sk#20] -Right keys [1]: [hd_demo_sk#24] +Left keys [1]: [ws_ship_hdemo_sk#16] +Right keys [1]: [hd_demo_sk#20] Join condition: None (38) Project [codegen id : 8] -Output [1]: [ws_sold_time_sk#19] -Input [3]: [ws_sold_time_sk#19, ws_ship_hdemo_sk#20, hd_demo_sk#24] +Output [1]: [ws_sold_time_sk#15] +Input [3]: [ws_sold_time_sk#15, ws_ship_hdemo_sk#16, hd_demo_sk#20] (39) Scan parquet default.time_dim -Output [2]: [t_time_sk#25, t_hour#26] +Output [2]: [t_time_sk#21, t_hour#22] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), GreaterThanOrEqual(t_hour,19), LessThanOrEqual(t_hour,20), IsNotNull(t_time_sk)] ReadSchema: struct (40) ColumnarToRow [codegen id : 7] -Input [2]: [t_time_sk#25, t_hour#26] +Input [2]: [t_time_sk#21, t_hour#22] (41) Filter [codegen id : 7] -Input [2]: [t_time_sk#25, t_hour#26] -Condition : (((isnotnull(t_hour#26) AND (t_hour#26 >= 19)) AND (t_hour#26 <= 20)) AND isnotnull(t_time_sk#25)) +Input [2]: [t_time_sk#21, t_hour#22] +Condition : (((isnotnull(t_hour#22) AND (t_hour#22 >= 19)) AND (t_hour#22 <= 20)) AND isnotnull(t_time_sk#21)) (42) Project [codegen id : 7] -Output [1]: [t_time_sk#25] -Input [2]: [t_time_sk#25, t_hour#26] +Output [1]: [t_time_sk#21] +Input [2]: [t_time_sk#21, t_hour#22] (43) BroadcastExchange -Input [1]: [t_time_sk#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#27] +Input [1]: [t_time_sk#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (44) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ws_sold_time_sk#19] -Right keys [1]: [t_time_sk#25] +Left keys [1]: [ws_sold_time_sk#15] +Right keys [1]: [t_time_sk#21] Join condition: None (45) Project [codegen id : 8] Output: [] -Input [2]: [ws_sold_time_sk#19, t_time_sk#25] +Input [2]: [ws_sold_time_sk#15, t_time_sk#21] (46) HashAggregate [codegen id : 8] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#28] -Results [1]: [count#29] +Aggregate Attributes [1]: [count#23] +Results [1]: [count#24] (47) Exchange -Input [1]: [count#29] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#30] +Input [1]: [count#24] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6] (48) HashAggregate [codegen id : 9] -Input [1]: [count#29] +Input [1]: [count#24] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#31] -Results [1]: [count(1)#31 AS pmc#32] +Aggregate Attributes [1]: [count(1)#25] +Results [1]: [count(1)#25 AS pmc#26] (49) BroadcastExchange -Input [1]: [pmc#32] -Arguments: IdentityBroadcastMode, [id=#33] +Input [1]: [pmc#26] +Arguments: IdentityBroadcastMode, [plan_id=7] (50) BroadcastNestedLoopJoin [codegen id : 10] Join condition: None (51) Project [codegen id : 10] -Output [1]: [CheckOverflow((promote_precision(cast(amc#18 as decimal(15,4))) / promote_precision(cast(pmc#32 as decimal(15,4)))), DecimalType(35,20)) AS am_pm_ratio#34] -Input [2]: [amc#18, pmc#32] +Output [1]: [CheckOverflow((promote_precision(cast(amc#14 as decimal(15,4))) / promote_precision(cast(pmc#26 as decimal(15,4)))), DecimalType(35,20)) AS am_pm_ratio#27] +Input [2]: [amc#14, pmc#26] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q90/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q90/explain.txt index e9884d694852d..c333bed23a03c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q90/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q90/explain.txt @@ -90,7 +90,7 @@ Input [2]: [hd_demo_sk#5, hd_dep_count#6] (9) BroadcastExchange Input [1]: [hd_demo_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ws_ship_hdemo_sk#2] @@ -102,184 +102,184 @@ Output [2]: [ws_sold_time_sk#1, ws_web_page_sk#3] Input [4]: [ws_sold_time_sk#1, ws_ship_hdemo_sk#2, ws_web_page_sk#3, hd_demo_sk#5] (12) Scan parquet default.time_dim -Output [2]: [t_time_sk#8, t_hour#9] +Output [2]: [t_time_sk#7, t_hour#8] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), GreaterThanOrEqual(t_hour,8), LessThanOrEqual(t_hour,9), IsNotNull(t_time_sk)] ReadSchema: struct (13) ColumnarToRow [codegen id : 2] -Input [2]: [t_time_sk#8, t_hour#9] +Input [2]: [t_time_sk#7, t_hour#8] (14) Filter [codegen id : 2] -Input [2]: [t_time_sk#8, t_hour#9] -Condition : (((isnotnull(t_hour#9) AND (t_hour#9 >= 8)) AND (t_hour#9 <= 9)) AND isnotnull(t_time_sk#8)) +Input [2]: [t_time_sk#7, t_hour#8] +Condition : (((isnotnull(t_hour#8) AND (t_hour#8 >= 8)) AND (t_hour#8 <= 9)) AND isnotnull(t_time_sk#7)) (15) Project [codegen id : 2] -Output [1]: [t_time_sk#8] -Input [2]: [t_time_sk#8, t_hour#9] +Output [1]: [t_time_sk#7] +Input [2]: [t_time_sk#7, t_hour#8] (16) BroadcastExchange -Input [1]: [t_time_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Input [1]: [t_time_sk#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ws_sold_time_sk#1] -Right keys [1]: [t_time_sk#8] +Right keys [1]: [t_time_sk#7] Join condition: None (18) Project [codegen id : 4] Output [1]: [ws_web_page_sk#3] -Input [3]: [ws_sold_time_sk#1, ws_web_page_sk#3, t_time_sk#8] +Input [3]: [ws_sold_time_sk#1, ws_web_page_sk#3, t_time_sk#7] (19) Scan parquet default.web_page -Output [2]: [wp_web_page_sk#11, wp_char_count#12] +Output [2]: [wp_web_page_sk#9, wp_char_count#10] Batched: true Location [not included in comparison]/{warehouse_dir}/web_page] PushedFilters: [IsNotNull(wp_char_count), GreaterThanOrEqual(wp_char_count,5000), LessThanOrEqual(wp_char_count,5200), IsNotNull(wp_web_page_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 3] -Input [2]: [wp_web_page_sk#11, wp_char_count#12] +Input [2]: [wp_web_page_sk#9, wp_char_count#10] (21) Filter [codegen id : 3] -Input [2]: [wp_web_page_sk#11, wp_char_count#12] -Condition : (((isnotnull(wp_char_count#12) AND (wp_char_count#12 >= 5000)) AND (wp_char_count#12 <= 5200)) AND isnotnull(wp_web_page_sk#11)) +Input [2]: [wp_web_page_sk#9, wp_char_count#10] +Condition : (((isnotnull(wp_char_count#10) AND (wp_char_count#10 >= 5000)) AND (wp_char_count#10 <= 5200)) AND isnotnull(wp_web_page_sk#9)) (22) Project [codegen id : 3] -Output [1]: [wp_web_page_sk#11] -Input [2]: [wp_web_page_sk#11, wp_char_count#12] +Output [1]: [wp_web_page_sk#9] +Input [2]: [wp_web_page_sk#9, wp_char_count#10] (23) BroadcastExchange -Input [1]: [wp_web_page_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] +Input [1]: [wp_web_page_sk#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ws_web_page_sk#3] -Right keys [1]: [wp_web_page_sk#11] +Right keys [1]: [wp_web_page_sk#9] Join condition: None (25) Project [codegen id : 4] Output: [] -Input [2]: [ws_web_page_sk#3, wp_web_page_sk#11] +Input [2]: [ws_web_page_sk#3, wp_web_page_sk#9] (26) HashAggregate [codegen id : 4] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#14] -Results [1]: [count#15] +Aggregate Attributes [1]: [count#11] +Results [1]: [count#12] (27) Exchange -Input [1]: [count#15] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#16] +Input [1]: [count#12] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 10] -Input [1]: [count#15] +Input [1]: [count#12] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#17] -Results [1]: [count(1)#17 AS amc#18] +Aggregate Attributes [1]: [count(1)#13] +Results [1]: [count(1)#13 AS amc#14] (29) Scan parquet default.web_sales -Output [4]: [ws_sold_time_sk#19, ws_ship_hdemo_sk#20, ws_web_page_sk#21, ws_sold_date_sk#22] +Output [4]: [ws_sold_time_sk#15, ws_ship_hdemo_sk#16, ws_web_page_sk#17, ws_sold_date_sk#18] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] PushedFilters: [IsNotNull(ws_ship_hdemo_sk), IsNotNull(ws_sold_time_sk), IsNotNull(ws_web_page_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 8] -Input [4]: [ws_sold_time_sk#19, ws_ship_hdemo_sk#20, ws_web_page_sk#21, ws_sold_date_sk#22] +Input [4]: [ws_sold_time_sk#15, ws_ship_hdemo_sk#16, ws_web_page_sk#17, ws_sold_date_sk#18] (31) Filter [codegen id : 8] -Input [4]: [ws_sold_time_sk#19, ws_ship_hdemo_sk#20, ws_web_page_sk#21, ws_sold_date_sk#22] -Condition : ((isnotnull(ws_ship_hdemo_sk#20) AND isnotnull(ws_sold_time_sk#19)) AND isnotnull(ws_web_page_sk#21)) +Input [4]: [ws_sold_time_sk#15, ws_ship_hdemo_sk#16, ws_web_page_sk#17, ws_sold_date_sk#18] +Condition : ((isnotnull(ws_ship_hdemo_sk#16) AND isnotnull(ws_sold_time_sk#15)) AND isnotnull(ws_web_page_sk#17)) (32) Project [codegen id : 8] -Output [3]: [ws_sold_time_sk#19, ws_ship_hdemo_sk#20, ws_web_page_sk#21] -Input [4]: [ws_sold_time_sk#19, ws_ship_hdemo_sk#20, ws_web_page_sk#21, ws_sold_date_sk#22] +Output [3]: [ws_sold_time_sk#15, ws_ship_hdemo_sk#16, ws_web_page_sk#17] +Input [4]: [ws_sold_time_sk#15, ws_ship_hdemo_sk#16, ws_web_page_sk#17, ws_sold_date_sk#18] (33) ReusedExchange [Reuses operator id: 9] -Output [1]: [hd_demo_sk#23] +Output [1]: [hd_demo_sk#19] (34) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ws_ship_hdemo_sk#20] -Right keys [1]: [hd_demo_sk#23] +Left keys [1]: [ws_ship_hdemo_sk#16] +Right keys [1]: [hd_demo_sk#19] Join condition: None (35) Project [codegen id : 8] -Output [2]: [ws_sold_time_sk#19, ws_web_page_sk#21] -Input [4]: [ws_sold_time_sk#19, ws_ship_hdemo_sk#20, ws_web_page_sk#21, hd_demo_sk#23] +Output [2]: [ws_sold_time_sk#15, ws_web_page_sk#17] +Input [4]: [ws_sold_time_sk#15, ws_ship_hdemo_sk#16, ws_web_page_sk#17, hd_demo_sk#19] (36) Scan parquet default.time_dim -Output [2]: [t_time_sk#24, t_hour#25] +Output [2]: [t_time_sk#20, t_hour#21] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), GreaterThanOrEqual(t_hour,19), LessThanOrEqual(t_hour,20), IsNotNull(t_time_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 6] -Input [2]: [t_time_sk#24, t_hour#25] +Input [2]: [t_time_sk#20, t_hour#21] (38) Filter [codegen id : 6] -Input [2]: [t_time_sk#24, t_hour#25] -Condition : (((isnotnull(t_hour#25) AND (t_hour#25 >= 19)) AND (t_hour#25 <= 20)) AND isnotnull(t_time_sk#24)) +Input [2]: [t_time_sk#20, t_hour#21] +Condition : (((isnotnull(t_hour#21) AND (t_hour#21 >= 19)) AND (t_hour#21 <= 20)) AND isnotnull(t_time_sk#20)) (39) Project [codegen id : 6] -Output [1]: [t_time_sk#24] -Input [2]: [t_time_sk#24, t_hour#25] +Output [1]: [t_time_sk#20] +Input [2]: [t_time_sk#20, t_hour#21] (40) BroadcastExchange -Input [1]: [t_time_sk#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [1]: [t_time_sk#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (41) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ws_sold_time_sk#19] -Right keys [1]: [t_time_sk#24] +Left keys [1]: [ws_sold_time_sk#15] +Right keys [1]: [t_time_sk#20] Join condition: None (42) Project [codegen id : 8] -Output [1]: [ws_web_page_sk#21] -Input [3]: [ws_sold_time_sk#19, ws_web_page_sk#21, t_time_sk#24] +Output [1]: [ws_web_page_sk#17] +Input [3]: [ws_sold_time_sk#15, ws_web_page_sk#17, t_time_sk#20] (43) ReusedExchange [Reuses operator id: 23] -Output [1]: [wp_web_page_sk#27] +Output [1]: [wp_web_page_sk#22] (44) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ws_web_page_sk#21] -Right keys [1]: [wp_web_page_sk#27] +Left keys [1]: [ws_web_page_sk#17] +Right keys [1]: [wp_web_page_sk#22] Join condition: None (45) Project [codegen id : 8] Output: [] -Input [2]: [ws_web_page_sk#21, wp_web_page_sk#27] +Input [2]: [ws_web_page_sk#17, wp_web_page_sk#22] (46) HashAggregate [codegen id : 8] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#28] -Results [1]: [count#29] +Aggregate Attributes [1]: [count#23] +Results [1]: [count#24] (47) Exchange -Input [1]: [count#29] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#30] +Input [1]: [count#24] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6] (48) HashAggregate [codegen id : 9] -Input [1]: [count#29] +Input [1]: [count#24] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#31] -Results [1]: [count(1)#31 AS pmc#32] +Aggregate Attributes [1]: [count(1)#25] +Results [1]: [count(1)#25 AS pmc#26] (49) BroadcastExchange -Input [1]: [pmc#32] -Arguments: IdentityBroadcastMode, [id=#33] +Input [1]: [pmc#26] +Arguments: IdentityBroadcastMode, [plan_id=7] (50) BroadcastNestedLoopJoin [codegen id : 10] Join condition: None (51) Project [codegen id : 10] -Output [1]: [CheckOverflow((promote_precision(cast(amc#18 as decimal(15,4))) / promote_precision(cast(pmc#32 as decimal(15,4)))), DecimalType(35,20)) AS am_pm_ratio#34] -Input [2]: [amc#18, pmc#32] +Output [1]: [CheckOverflow((promote_precision(cast(amc#14 as decimal(15,4))) / promote_precision(cast(pmc#26 as decimal(15,4)))), DecimalType(35,20)) AS am_pm_ratio#27] +Input [2]: [amc#14, pmc#26] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q91.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q91.sf100/explain.txt index 337958cb2f546..8e599c576b500 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q91.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q91.sf100/explain.txt @@ -74,7 +74,7 @@ Condition : ((((cd_marital_status#6 = M) AND (cd_education_status#7 = Unknown (7) BroadcastExchange Input [3]: [cd_demo_sk#5, cd_marital_status#6, cd_education_status#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 7] Left keys [1]: [c_current_cdemo_sk#2] @@ -86,163 +86,163 @@ Output [5]: [c_customer_sk#1, c_current_hdemo_sk#3, c_current_addr_sk#4, cd_mari Input [7]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_current_addr_sk#4, cd_demo_sk#5, cd_marital_status#6, cd_education_status#7] (10) Scan parquet default.household_demographics -Output [2]: [hd_demo_sk#9, hd_buy_potential#10] +Output [2]: [hd_demo_sk#8, hd_buy_potential#9] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_buy_potential), StringStartsWith(hd_buy_potential,Unknown), IsNotNull(hd_demo_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [2]: [hd_demo_sk#9, hd_buy_potential#10] +Input [2]: [hd_demo_sk#8, hd_buy_potential#9] (12) Filter [codegen id : 2] -Input [2]: [hd_demo_sk#9, hd_buy_potential#10] -Condition : ((isnotnull(hd_buy_potential#10) AND StartsWith(hd_buy_potential#10, Unknown)) AND isnotnull(hd_demo_sk#9)) +Input [2]: [hd_demo_sk#8, hd_buy_potential#9] +Condition : ((isnotnull(hd_buy_potential#9) AND StartsWith(hd_buy_potential#9, Unknown)) AND isnotnull(hd_demo_sk#8)) (13) Project [codegen id : 2] -Output [1]: [hd_demo_sk#9] -Input [2]: [hd_demo_sk#9, hd_buy_potential#10] +Output [1]: [hd_demo_sk#8] +Input [2]: [hd_demo_sk#8, hd_buy_potential#9] (14) BroadcastExchange -Input [1]: [hd_demo_sk#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#11] +Input [1]: [hd_demo_sk#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 7] Left keys [1]: [c_current_hdemo_sk#3] -Right keys [1]: [hd_demo_sk#9] +Right keys [1]: [hd_demo_sk#8] Join condition: None (16) Project [codegen id : 7] Output [4]: [c_customer_sk#1, c_current_addr_sk#4, cd_marital_status#6, cd_education_status#7] -Input [6]: [c_customer_sk#1, c_current_hdemo_sk#3, c_current_addr_sk#4, cd_marital_status#6, cd_education_status#7, hd_demo_sk#9] +Input [6]: [c_customer_sk#1, c_current_hdemo_sk#3, c_current_addr_sk#4, cd_marital_status#6, cd_education_status#7, hd_demo_sk#8] (17) Scan parquet default.customer_address -Output [2]: [ca_address_sk#12, ca_gmt_offset#13] +Output [2]: [ca_address_sk#10, ca_gmt_offset#11] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_gmt_offset), EqualTo(ca_gmt_offset,-7.00), IsNotNull(ca_address_sk)] ReadSchema: struct (18) ColumnarToRow [codegen id : 3] -Input [2]: [ca_address_sk#12, ca_gmt_offset#13] +Input [2]: [ca_address_sk#10, ca_gmt_offset#11] (19) Filter [codegen id : 3] -Input [2]: [ca_address_sk#12, ca_gmt_offset#13] -Condition : ((isnotnull(ca_gmt_offset#13) AND (ca_gmt_offset#13 = -7.00)) AND isnotnull(ca_address_sk#12)) +Input [2]: [ca_address_sk#10, ca_gmt_offset#11] +Condition : ((isnotnull(ca_gmt_offset#11) AND (ca_gmt_offset#11 = -7.00)) AND isnotnull(ca_address_sk#10)) (20) Project [codegen id : 3] -Output [1]: [ca_address_sk#12] -Input [2]: [ca_address_sk#12, ca_gmt_offset#13] +Output [1]: [ca_address_sk#10] +Input [2]: [ca_address_sk#10, ca_gmt_offset#11] (21) BroadcastExchange -Input [1]: [ca_address_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Input [1]: [ca_address_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (22) BroadcastHashJoin [codegen id : 7] Left keys [1]: [c_current_addr_sk#4] -Right keys [1]: [ca_address_sk#12] +Right keys [1]: [ca_address_sk#10] Join condition: None (23) Project [codegen id : 7] Output [3]: [c_customer_sk#1, cd_marital_status#6, cd_education_status#7] -Input [5]: [c_customer_sk#1, c_current_addr_sk#4, cd_marital_status#6, cd_education_status#7, ca_address_sk#12] +Input [5]: [c_customer_sk#1, c_current_addr_sk#4, cd_marital_status#6, cd_education_status#7, ca_address_sk#10] (24) Scan parquet default.catalog_returns -Output [4]: [cr_returning_customer_sk#15, cr_call_center_sk#16, cr_net_loss#17, cr_returned_date_sk#18] +Output [4]: [cr_returning_customer_sk#12, cr_call_center_sk#13, cr_net_loss#14, cr_returned_date_sk#15] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cr_returned_date_sk#18), dynamicpruningexpression(cr_returned_date_sk#18 IN dynamicpruning#19)] +PartitionFilters: [isnotnull(cr_returned_date_sk#15), dynamicpruningexpression(cr_returned_date_sk#15 IN dynamicpruning#16)] PushedFilters: [IsNotNull(cr_call_center_sk), IsNotNull(cr_returning_customer_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 5] -Input [4]: [cr_returning_customer_sk#15, cr_call_center_sk#16, cr_net_loss#17, cr_returned_date_sk#18] +Input [4]: [cr_returning_customer_sk#12, cr_call_center_sk#13, cr_net_loss#14, cr_returned_date_sk#15] (26) Filter [codegen id : 5] -Input [4]: [cr_returning_customer_sk#15, cr_call_center_sk#16, cr_net_loss#17, cr_returned_date_sk#18] -Condition : (isnotnull(cr_call_center_sk#16) AND isnotnull(cr_returning_customer_sk#15)) +Input [4]: [cr_returning_customer_sk#12, cr_call_center_sk#13, cr_net_loss#14, cr_returned_date_sk#15] +Condition : (isnotnull(cr_call_center_sk#13) AND isnotnull(cr_returning_customer_sk#12)) (27) ReusedExchange [Reuses operator id: 48] -Output [1]: [d_date_sk#20] +Output [1]: [d_date_sk#17] (28) BroadcastHashJoin [codegen id : 5] -Left keys [1]: [cr_returned_date_sk#18] -Right keys [1]: [d_date_sk#20] +Left keys [1]: [cr_returned_date_sk#15] +Right keys [1]: [d_date_sk#17] Join condition: None (29) Project [codegen id : 5] -Output [3]: [cr_returning_customer_sk#15, cr_call_center_sk#16, cr_net_loss#17] -Input [5]: [cr_returning_customer_sk#15, cr_call_center_sk#16, cr_net_loss#17, cr_returned_date_sk#18, d_date_sk#20] +Output [3]: [cr_returning_customer_sk#12, cr_call_center_sk#13, cr_net_loss#14] +Input [5]: [cr_returning_customer_sk#12, cr_call_center_sk#13, cr_net_loss#14, cr_returned_date_sk#15, d_date_sk#17] (30) BroadcastExchange -Input [3]: [cr_returning_customer_sk#15, cr_call_center_sk#16, cr_net_loss#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#21] +Input [3]: [cr_returning_customer_sk#12, cr_call_center_sk#13, cr_net_loss#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (31) BroadcastHashJoin [codegen id : 7] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [cr_returning_customer_sk#15] +Right keys [1]: [cr_returning_customer_sk#12] Join condition: None (32) Project [codegen id : 7] -Output [4]: [cd_marital_status#6, cd_education_status#7, cr_call_center_sk#16, cr_net_loss#17] -Input [6]: [c_customer_sk#1, cd_marital_status#6, cd_education_status#7, cr_returning_customer_sk#15, cr_call_center_sk#16, cr_net_loss#17] +Output [4]: [cd_marital_status#6, cd_education_status#7, cr_call_center_sk#13, cr_net_loss#14] +Input [6]: [c_customer_sk#1, cd_marital_status#6, cd_education_status#7, cr_returning_customer_sk#12, cr_call_center_sk#13, cr_net_loss#14] (33) Scan parquet default.call_center -Output [4]: [cc_call_center_sk#22, cc_call_center_id#23, cc_name#24, cc_manager#25] +Output [4]: [cc_call_center_sk#18, cc_call_center_id#19, cc_name#20, cc_manager#21] Batched: true Location [not included in comparison]/{warehouse_dir}/call_center] PushedFilters: [IsNotNull(cc_call_center_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 6] -Input [4]: [cc_call_center_sk#22, cc_call_center_id#23, cc_name#24, cc_manager#25] +Input [4]: [cc_call_center_sk#18, cc_call_center_id#19, cc_name#20, cc_manager#21] (35) Filter [codegen id : 6] -Input [4]: [cc_call_center_sk#22, cc_call_center_id#23, cc_name#24, cc_manager#25] -Condition : isnotnull(cc_call_center_sk#22) +Input [4]: [cc_call_center_sk#18, cc_call_center_id#19, cc_name#20, cc_manager#21] +Condition : isnotnull(cc_call_center_sk#18) (36) BroadcastExchange -Input [4]: [cc_call_center_sk#22, cc_call_center_id#23, cc_name#24, cc_manager#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#26] +Input [4]: [cc_call_center_sk#18, cc_call_center_id#19, cc_name#20, cc_manager#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (37) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [cr_call_center_sk#16] -Right keys [1]: [cc_call_center_sk#22] +Left keys [1]: [cr_call_center_sk#13] +Right keys [1]: [cc_call_center_sk#18] Join condition: None (38) Project [codegen id : 7] -Output [6]: [cc_call_center_id#23, cc_name#24, cc_manager#25, cr_net_loss#17, cd_marital_status#6, cd_education_status#7] -Input [8]: [cd_marital_status#6, cd_education_status#7, cr_call_center_sk#16, cr_net_loss#17, cc_call_center_sk#22, cc_call_center_id#23, cc_name#24, cc_manager#25] +Output [6]: [cc_call_center_id#19, cc_name#20, cc_manager#21, cr_net_loss#14, cd_marital_status#6, cd_education_status#7] +Input [8]: [cd_marital_status#6, cd_education_status#7, cr_call_center_sk#13, cr_net_loss#14, cc_call_center_sk#18, cc_call_center_id#19, cc_name#20, cc_manager#21] (39) HashAggregate [codegen id : 7] -Input [6]: [cc_call_center_id#23, cc_name#24, cc_manager#25, cr_net_loss#17, cd_marital_status#6, cd_education_status#7] -Keys [5]: [cc_call_center_id#23, cc_name#24, cc_manager#25, cd_marital_status#6, cd_education_status#7] -Functions [1]: [partial_sum(UnscaledValue(cr_net_loss#17))] -Aggregate Attributes [1]: [sum#27] -Results [6]: [cc_call_center_id#23, cc_name#24, cc_manager#25, cd_marital_status#6, cd_education_status#7, sum#28] +Input [6]: [cc_call_center_id#19, cc_name#20, cc_manager#21, cr_net_loss#14, cd_marital_status#6, cd_education_status#7] +Keys [5]: [cc_call_center_id#19, cc_name#20, cc_manager#21, cd_marital_status#6, cd_education_status#7] +Functions [1]: [partial_sum(UnscaledValue(cr_net_loss#14))] +Aggregate Attributes [1]: [sum#22] +Results [6]: [cc_call_center_id#19, cc_name#20, cc_manager#21, cd_marital_status#6, cd_education_status#7, sum#23] (40) Exchange -Input [6]: [cc_call_center_id#23, cc_name#24, cc_manager#25, cd_marital_status#6, cd_education_status#7, sum#28] -Arguments: hashpartitioning(cc_call_center_id#23, cc_name#24, cc_manager#25, cd_marital_status#6, cd_education_status#7, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [6]: [cc_call_center_id#19, cc_name#20, cc_manager#21, cd_marital_status#6, cd_education_status#7, sum#23] +Arguments: hashpartitioning(cc_call_center_id#19, cc_name#20, cc_manager#21, cd_marital_status#6, cd_education_status#7, 5), ENSURE_REQUIREMENTS, [plan_id=6] (41) HashAggregate [codegen id : 8] -Input [6]: [cc_call_center_id#23, cc_name#24, cc_manager#25, cd_marital_status#6, cd_education_status#7, sum#28] -Keys [5]: [cc_call_center_id#23, cc_name#24, cc_manager#25, cd_marital_status#6, cd_education_status#7] -Functions [1]: [sum(UnscaledValue(cr_net_loss#17))] -Aggregate Attributes [1]: [sum(UnscaledValue(cr_net_loss#17))#30] -Results [4]: [cc_call_center_id#23 AS Call_Center#31, cc_name#24 AS Call_Center_Name#32, cc_manager#25 AS Manager#33, MakeDecimal(sum(UnscaledValue(cr_net_loss#17))#30,17,2) AS Returns_Loss#34] +Input [6]: [cc_call_center_id#19, cc_name#20, cc_manager#21, cd_marital_status#6, cd_education_status#7, sum#23] +Keys [5]: [cc_call_center_id#19, cc_name#20, cc_manager#21, cd_marital_status#6, cd_education_status#7] +Functions [1]: [sum(UnscaledValue(cr_net_loss#14))] +Aggregate Attributes [1]: [sum(UnscaledValue(cr_net_loss#14))#24] +Results [4]: [cc_call_center_id#19 AS Call_Center#25, cc_name#20 AS Call_Center_Name#26, cc_manager#21 AS Manager#27, MakeDecimal(sum(UnscaledValue(cr_net_loss#14))#24,17,2) AS Returns_Loss#28] (42) Exchange -Input [4]: [Call_Center#31, Call_Center_Name#32, Manager#33, Returns_Loss#34] -Arguments: rangepartitioning(Returns_Loss#34 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#35] +Input [4]: [Call_Center#25, Call_Center_Name#26, Manager#27, Returns_Loss#28] +Arguments: rangepartitioning(Returns_Loss#28 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [plan_id=7] (43) Sort [codegen id : 9] -Input [4]: [Call_Center#31, Call_Center_Name#32, Manager#33, Returns_Loss#34] -Arguments: [Returns_Loss#34 DESC NULLS LAST], true, 0 +Input [4]: [Call_Center#25, Call_Center_Name#26, Manager#27, Returns_Loss#28] +Arguments: [Returns_Loss#28 DESC NULLS LAST], true, 0 ===== Subqueries ===== -Subquery:1 Hosting operator id = 24 Hosting Expression = cr_returned_date_sk#18 IN dynamicpruning#19 +Subquery:1 Hosting operator id = 24 Hosting Expression = cr_returned_date_sk#15 IN dynamicpruning#16 BroadcastExchange (48) +- * Project (47) +- * Filter (46) @@ -251,25 +251,25 @@ BroadcastExchange (48) (44) Scan parquet default.date_dim -Output [3]: [d_date_sk#20, d_year#36, d_moy#37] +Output [3]: [d_date_sk#17, d_year#29, d_moy#30] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,11), IsNotNull(d_date_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#20, d_year#36, d_moy#37] +Input [3]: [d_date_sk#17, d_year#29, d_moy#30] (46) Filter [codegen id : 1] -Input [3]: [d_date_sk#20, d_year#36, d_moy#37] -Condition : ((((isnotnull(d_year#36) AND isnotnull(d_moy#37)) AND (d_year#36 = 1998)) AND (d_moy#37 = 11)) AND isnotnull(d_date_sk#20)) +Input [3]: [d_date_sk#17, d_year#29, d_moy#30] +Condition : ((((isnotnull(d_year#29) AND isnotnull(d_moy#30)) AND (d_year#29 = 1998)) AND (d_moy#30 = 11)) AND isnotnull(d_date_sk#17)) (47) Project [codegen id : 1] -Output [1]: [d_date_sk#20] -Input [3]: [d_date_sk#20, d_year#36, d_moy#37] +Output [1]: [d_date_sk#17] +Input [3]: [d_date_sk#17, d_year#29, d_moy#30] (48) BroadcastExchange -Input [1]: [d_date_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#38] +Input [1]: [d_date_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q91/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q91/explain.txt index c56ad3e677ac9..9abdbe56d87cd 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q91/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q91/explain.txt @@ -75,7 +75,7 @@ Condition : (isnotnull(cr_call_center_sk#6) AND isnotnull(cr_returning_customer_ (7) BroadcastExchange Input [4]: [cr_returning_customer_sk#5, cr_call_center_sk#6, cr_net_loss#7, cr_returned_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 7] Left keys [1]: [cc_call_center_sk#1] @@ -87,158 +87,158 @@ Output [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_returning_customer Input [8]: [cc_call_center_sk#1, cc_call_center_id#2, cc_name#3, cc_manager#4, cr_returning_customer_sk#5, cr_call_center_sk#6, cr_net_loss#7, cr_returned_date_sk#8] (10) ReusedExchange [Reuses operator id: 48] -Output [1]: [d_date_sk#11] +Output [1]: [d_date_sk#10] (11) BroadcastHashJoin [codegen id : 7] Left keys [1]: [cr_returned_date_sk#8] -Right keys [1]: [d_date_sk#11] +Right keys [1]: [d_date_sk#10] Join condition: None (12) Project [codegen id : 7] Output [5]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_returning_customer_sk#5, cr_net_loss#7] -Input [7]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_returning_customer_sk#5, cr_net_loss#7, cr_returned_date_sk#8, d_date_sk#11] +Input [7]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_returning_customer_sk#5, cr_net_loss#7, cr_returned_date_sk#8, d_date_sk#10] (13) Scan parquet default.customer -Output [4]: [c_customer_sk#12, c_current_cdemo_sk#13, c_current_hdemo_sk#14, c_current_addr_sk#15] +Output [4]: [c_customer_sk#11, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_hdemo_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [4]: [c_customer_sk#12, c_current_cdemo_sk#13, c_current_hdemo_sk#14, c_current_addr_sk#15] +Input [4]: [c_customer_sk#11, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14] (15) Filter [codegen id : 3] -Input [4]: [c_customer_sk#12, c_current_cdemo_sk#13, c_current_hdemo_sk#14, c_current_addr_sk#15] -Condition : (((isnotnull(c_customer_sk#12) AND isnotnull(c_current_addr_sk#15)) AND isnotnull(c_current_cdemo_sk#13)) AND isnotnull(c_current_hdemo_sk#14)) +Input [4]: [c_customer_sk#11, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14] +Condition : (((isnotnull(c_customer_sk#11) AND isnotnull(c_current_addr_sk#14)) AND isnotnull(c_current_cdemo_sk#12)) AND isnotnull(c_current_hdemo_sk#13)) (16) BroadcastExchange -Input [4]: [c_customer_sk#12, c_current_cdemo_sk#13, c_current_hdemo_sk#14, c_current_addr_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#16] +Input [4]: [c_customer_sk#11, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 7] Left keys [1]: [cr_returning_customer_sk#5] -Right keys [1]: [c_customer_sk#12] +Right keys [1]: [c_customer_sk#11] Join condition: None (18) Project [codegen id : 7] -Output [7]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_cdemo_sk#13, c_current_hdemo_sk#14, c_current_addr_sk#15] -Input [9]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_returning_customer_sk#5, cr_net_loss#7, c_customer_sk#12, c_current_cdemo_sk#13, c_current_hdemo_sk#14, c_current_addr_sk#15] +Output [7]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14] +Input [9]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_returning_customer_sk#5, cr_net_loss#7, c_customer_sk#11, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14] (19) Scan parquet default.customer_address -Output [2]: [ca_address_sk#17, ca_gmt_offset#18] +Output [2]: [ca_address_sk#15, ca_gmt_offset#16] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_gmt_offset), EqualTo(ca_gmt_offset,-7.00), IsNotNull(ca_address_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 4] -Input [2]: [ca_address_sk#17, ca_gmt_offset#18] +Input [2]: [ca_address_sk#15, ca_gmt_offset#16] (21) Filter [codegen id : 4] -Input [2]: [ca_address_sk#17, ca_gmt_offset#18] -Condition : ((isnotnull(ca_gmt_offset#18) AND (ca_gmt_offset#18 = -7.00)) AND isnotnull(ca_address_sk#17)) +Input [2]: [ca_address_sk#15, ca_gmt_offset#16] +Condition : ((isnotnull(ca_gmt_offset#16) AND (ca_gmt_offset#16 = -7.00)) AND isnotnull(ca_address_sk#15)) (22) Project [codegen id : 4] -Output [1]: [ca_address_sk#17] -Input [2]: [ca_address_sk#17, ca_gmt_offset#18] +Output [1]: [ca_address_sk#15] +Input [2]: [ca_address_sk#15, ca_gmt_offset#16] (23) BroadcastExchange -Input [1]: [ca_address_sk#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#19] +Input [1]: [ca_address_sk#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [c_current_addr_sk#15] -Right keys [1]: [ca_address_sk#17] +Left keys [1]: [c_current_addr_sk#14] +Right keys [1]: [ca_address_sk#15] Join condition: None (25) Project [codegen id : 7] -Output [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_cdemo_sk#13, c_current_hdemo_sk#14] -Input [8]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_cdemo_sk#13, c_current_hdemo_sk#14, c_current_addr_sk#15, ca_address_sk#17] +Output [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_cdemo_sk#12, c_current_hdemo_sk#13] +Input [8]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14, ca_address_sk#15] (26) Scan parquet default.customer_demographics -Output [3]: [cd_demo_sk#20, cd_marital_status#21, cd_education_status#22] +Output [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [Or(And(EqualTo(cd_marital_status,M),EqualTo(cd_education_status,Unknown )),And(EqualTo(cd_marital_status,W),EqualTo(cd_education_status,Advanced Degree ))), IsNotNull(cd_demo_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 5] -Input [3]: [cd_demo_sk#20, cd_marital_status#21, cd_education_status#22] +Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19] (28) Filter [codegen id : 5] -Input [3]: [cd_demo_sk#20, cd_marital_status#21, cd_education_status#22] -Condition : ((((cd_marital_status#21 = M) AND (cd_education_status#22 = Unknown )) OR ((cd_marital_status#21 = W) AND (cd_education_status#22 = Advanced Degree ))) AND isnotnull(cd_demo_sk#20)) +Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19] +Condition : ((((cd_marital_status#18 = M) AND (cd_education_status#19 = Unknown )) OR ((cd_marital_status#18 = W) AND (cd_education_status#19 = Advanced Degree ))) AND isnotnull(cd_demo_sk#17)) (29) BroadcastExchange -Input [3]: [cd_demo_sk#20, cd_marital_status#21, cd_education_status#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23] +Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (30) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [c_current_cdemo_sk#13] -Right keys [1]: [cd_demo_sk#20] +Left keys [1]: [c_current_cdemo_sk#12] +Right keys [1]: [cd_demo_sk#17] Join condition: None (31) Project [codegen id : 7] -Output [7]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_hdemo_sk#14, cd_marital_status#21, cd_education_status#22] -Input [9]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_cdemo_sk#13, c_current_hdemo_sk#14, cd_demo_sk#20, cd_marital_status#21, cd_education_status#22] +Output [7]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_hdemo_sk#13, cd_marital_status#18, cd_education_status#19] +Input [9]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_cdemo_sk#12, c_current_hdemo_sk#13, cd_demo_sk#17, cd_marital_status#18, cd_education_status#19] (32) Scan parquet default.household_demographics -Output [2]: [hd_demo_sk#24, hd_buy_potential#25] +Output [2]: [hd_demo_sk#20, hd_buy_potential#21] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_buy_potential), StringStartsWith(hd_buy_potential,Unknown), IsNotNull(hd_demo_sk)] ReadSchema: struct (33) ColumnarToRow [codegen id : 6] -Input [2]: [hd_demo_sk#24, hd_buy_potential#25] +Input [2]: [hd_demo_sk#20, hd_buy_potential#21] (34) Filter [codegen id : 6] -Input [2]: [hd_demo_sk#24, hd_buy_potential#25] -Condition : ((isnotnull(hd_buy_potential#25) AND StartsWith(hd_buy_potential#25, Unknown)) AND isnotnull(hd_demo_sk#24)) +Input [2]: [hd_demo_sk#20, hd_buy_potential#21] +Condition : ((isnotnull(hd_buy_potential#21) AND StartsWith(hd_buy_potential#21, Unknown)) AND isnotnull(hd_demo_sk#20)) (35) Project [codegen id : 6] -Output [1]: [hd_demo_sk#24] -Input [2]: [hd_demo_sk#24, hd_buy_potential#25] +Output [1]: [hd_demo_sk#20] +Input [2]: [hd_demo_sk#20, hd_buy_potential#21] (36) BroadcastExchange -Input [1]: [hd_demo_sk#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [1]: [hd_demo_sk#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (37) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [c_current_hdemo_sk#14] -Right keys [1]: [hd_demo_sk#24] +Left keys [1]: [c_current_hdemo_sk#13] +Right keys [1]: [hd_demo_sk#20] Join condition: None (38) Project [codegen id : 7] -Output [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, cd_marital_status#21, cd_education_status#22] -Input [8]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_hdemo_sk#14, cd_marital_status#21, cd_education_status#22, hd_demo_sk#24] +Output [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, cd_marital_status#18, cd_education_status#19] +Input [8]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_hdemo_sk#13, cd_marital_status#18, cd_education_status#19, hd_demo_sk#20] (39) HashAggregate [codegen id : 7] -Input [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, cd_marital_status#21, cd_education_status#22] -Keys [5]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#21, cd_education_status#22] +Input [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, cd_marital_status#18, cd_education_status#19] +Keys [5]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19] Functions [1]: [partial_sum(UnscaledValue(cr_net_loss#7))] -Aggregate Attributes [1]: [sum#27] -Results [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#21, cd_education_status#22, sum#28] +Aggregate Attributes [1]: [sum#22] +Results [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum#23] (40) Exchange -Input [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#21, cd_education_status#22, sum#28] -Arguments: hashpartitioning(cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#21, cd_education_status#22, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum#23] +Arguments: hashpartitioning(cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, 5), ENSURE_REQUIREMENTS, [plan_id=6] (41) HashAggregate [codegen id : 8] -Input [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#21, cd_education_status#22, sum#28] -Keys [5]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#21, cd_education_status#22] +Input [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum#23] +Keys [5]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19] Functions [1]: [sum(UnscaledValue(cr_net_loss#7))] -Aggregate Attributes [1]: [sum(UnscaledValue(cr_net_loss#7))#30] -Results [4]: [cc_call_center_id#2 AS Call_Center#31, cc_name#3 AS Call_Center_Name#32, cc_manager#4 AS Manager#33, MakeDecimal(sum(UnscaledValue(cr_net_loss#7))#30,17,2) AS Returns_Loss#34] +Aggregate Attributes [1]: [sum(UnscaledValue(cr_net_loss#7))#24] +Results [4]: [cc_call_center_id#2 AS Call_Center#25, cc_name#3 AS Call_Center_Name#26, cc_manager#4 AS Manager#27, MakeDecimal(sum(UnscaledValue(cr_net_loss#7))#24,17,2) AS Returns_Loss#28] (42) Exchange -Input [4]: [Call_Center#31, Call_Center_Name#32, Manager#33, Returns_Loss#34] -Arguments: rangepartitioning(Returns_Loss#34 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#35] +Input [4]: [Call_Center#25, Call_Center_Name#26, Manager#27, Returns_Loss#28] +Arguments: rangepartitioning(Returns_Loss#28 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [plan_id=7] (43) Sort [codegen id : 9] -Input [4]: [Call_Center#31, Call_Center_Name#32, Manager#33, Returns_Loss#34] -Arguments: [Returns_Loss#34 DESC NULLS LAST], true, 0 +Input [4]: [Call_Center#25, Call_Center_Name#26, Manager#27, Returns_Loss#28] +Arguments: [Returns_Loss#28 DESC NULLS LAST], true, 0 ===== Subqueries ===== @@ -251,25 +251,25 @@ BroadcastExchange (48) (44) Scan parquet default.date_dim -Output [3]: [d_date_sk#11, d_year#36, d_moy#37] +Output [3]: [d_date_sk#10, d_year#29, d_moy#30] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,11), IsNotNull(d_date_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#36, d_moy#37] +Input [3]: [d_date_sk#10, d_year#29, d_moy#30] (46) Filter [codegen id : 1] -Input [3]: [d_date_sk#11, d_year#36, d_moy#37] -Condition : ((((isnotnull(d_year#36) AND isnotnull(d_moy#37)) AND (d_year#36 = 1998)) AND (d_moy#37 = 11)) AND isnotnull(d_date_sk#11)) +Input [3]: [d_date_sk#10, d_year#29, d_moy#30] +Condition : ((((isnotnull(d_year#29) AND isnotnull(d_moy#30)) AND (d_year#29 = 1998)) AND (d_moy#30 = 11)) AND isnotnull(d_date_sk#10)) (47) Project [codegen id : 1] -Output [1]: [d_date_sk#11] -Input [3]: [d_date_sk#11, d_year#36, d_moy#37] +Output [1]: [d_date_sk#10] +Input [3]: [d_date_sk#10, d_year#29, d_moy#30] (48) BroadcastExchange -Input [1]: [d_date_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#38] +Input [1]: [d_date_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q92.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q92.sf100/explain.txt index aa27347d22f55..601919832b397 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q92.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q92.sf100/explain.txt @@ -50,127 +50,127 @@ Input [2]: [i_item_sk#1, i_manufact_id#2] (5) BroadcastExchange Input [1]: [i_item_sk#1] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#3] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (6) Scan parquet default.web_sales -Output [3]: [ws_item_sk#4, ws_ext_discount_amt#5, ws_sold_date_sk#6] +Output [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#6), dynamicpruningexpression(ws_sold_date_sk#6 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(ws_sold_date_sk#5), dynamicpruningexpression(ws_sold_date_sk#5 IN dynamicpruning#6)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [3]: [ws_item_sk#4, ws_ext_discount_amt#5, ws_sold_date_sk#6] +Input [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] (8) Filter [codegen id : 3] -Input [3]: [ws_item_sk#4, ws_ext_discount_amt#5, ws_sold_date_sk#6] -Condition : (isnotnull(ws_item_sk#4) AND might_contain(Subquery scalar-subquery#8, [id=#9], xxhash64(ws_item_sk#4, 42))) +Input [3]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5] +Condition : (isnotnull(ws_item_sk#3) AND might_contain(Subquery scalar-subquery#7, [id=#8], xxhash64(ws_item_sk#3, 42))) (9) ReusedExchange [Reuses operator id: 41] -Output [1]: [d_date_sk#10] +Output [1]: [d_date_sk#9] (10) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [ws_sold_date_sk#6] -Right keys [1]: [d_date_sk#10] +Left keys [1]: [ws_sold_date_sk#5] +Right keys [1]: [d_date_sk#9] Join condition: None (11) Project [codegen id : 3] -Output [2]: [ws_item_sk#4, ws_ext_discount_amt#5] -Input [4]: [ws_item_sk#4, ws_ext_discount_amt#5, ws_sold_date_sk#6, d_date_sk#10] +Output [2]: [ws_item_sk#3, ws_ext_discount_amt#4] +Input [4]: [ws_item_sk#3, ws_ext_discount_amt#4, ws_sold_date_sk#5, d_date_sk#9] (12) HashAggregate [codegen id : 3] -Input [2]: [ws_item_sk#4, ws_ext_discount_amt#5] -Keys [1]: [ws_item_sk#4] -Functions [1]: [partial_avg(UnscaledValue(ws_ext_discount_amt#5))] -Aggregate Attributes [2]: [sum#11, count#12] -Results [3]: [ws_item_sk#4, sum#13, count#14] +Input [2]: [ws_item_sk#3, ws_ext_discount_amt#4] +Keys [1]: [ws_item_sk#3] +Functions [1]: [partial_avg(UnscaledValue(ws_ext_discount_amt#4))] +Aggregate Attributes [2]: [sum#10, count#11] +Results [3]: [ws_item_sk#3, sum#12, count#13] (13) Exchange -Input [3]: [ws_item_sk#4, sum#13, count#14] -Arguments: hashpartitioning(ws_item_sk#4, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [3]: [ws_item_sk#3, sum#12, count#13] +Arguments: hashpartitioning(ws_item_sk#3, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) HashAggregate -Input [3]: [ws_item_sk#4, sum#13, count#14] -Keys [1]: [ws_item_sk#4] -Functions [1]: [avg(UnscaledValue(ws_ext_discount_amt#5))] -Aggregate Attributes [1]: [avg(UnscaledValue(ws_ext_discount_amt#5))#16] -Results [2]: [CheckOverflow((1.300000 * promote_precision(cast((avg(UnscaledValue(ws_ext_discount_amt#5))#16 / 100.0) as decimal(11,6)))), DecimalType(14,7)) AS (1.3 * avg(ws_ext_discount_amt))#17, ws_item_sk#4] +Input [3]: [ws_item_sk#3, sum#12, count#13] +Keys [1]: [ws_item_sk#3] +Functions [1]: [avg(UnscaledValue(ws_ext_discount_amt#4))] +Aggregate Attributes [1]: [avg(UnscaledValue(ws_ext_discount_amt#4))#14] +Results [2]: [CheckOverflow((1.300000 * promote_precision(cast((avg(UnscaledValue(ws_ext_discount_amt#4))#14 / 100.0) as decimal(11,6)))), DecimalType(14,7)) AS (1.3 * avg(ws_ext_discount_amt))#15, ws_item_sk#3] (15) Filter -Input [2]: [(1.3 * avg(ws_ext_discount_amt))#17, ws_item_sk#4] -Condition : isnotnull((1.3 * avg(ws_ext_discount_amt))#17) +Input [2]: [(1.3 * avg(ws_ext_discount_amt))#15, ws_item_sk#3] +Condition : isnotnull((1.3 * avg(ws_ext_discount_amt))#15) (16) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] -Right keys [1]: [ws_item_sk#4] +Right keys [1]: [ws_item_sk#3] Join condition: None (17) Project [codegen id : 4] -Output [2]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#17] -Input [3]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#17, ws_item_sk#4] +Output [2]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#15] +Input [3]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#15, ws_item_sk#3] (18) BroadcastExchange -Input [2]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [2]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (19) Scan parquet default.web_sales -Output [3]: [ws_item_sk#19, ws_ext_discount_amt#20, ws_sold_date_sk#21] +Output [3]: [ws_item_sk#16, ws_ext_discount_amt#17, ws_sold_date_sk#18] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#21), dynamicpruningexpression(ws_sold_date_sk#21 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(ws_sold_date_sk#18), dynamicpruningexpression(ws_sold_date_sk#18 IN dynamicpruning#6)] PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_ext_discount_amt)] ReadSchema: struct (20) ColumnarToRow -Input [3]: [ws_item_sk#19, ws_ext_discount_amt#20, ws_sold_date_sk#21] +Input [3]: [ws_item_sk#16, ws_ext_discount_amt#17, ws_sold_date_sk#18] (21) Filter -Input [3]: [ws_item_sk#19, ws_ext_discount_amt#20, ws_sold_date_sk#21] -Condition : (isnotnull(ws_item_sk#19) AND isnotnull(ws_ext_discount_amt#20)) +Input [3]: [ws_item_sk#16, ws_ext_discount_amt#17, ws_sold_date_sk#18] +Condition : (isnotnull(ws_item_sk#16) AND isnotnull(ws_ext_discount_amt#17)) (22) BroadcastHashJoin [codegen id : 6] Left keys [1]: [i_item_sk#1] -Right keys [1]: [ws_item_sk#19] -Join condition: (cast(ws_ext_discount_amt#20 as decimal(14,7)) > (1.3 * avg(ws_ext_discount_amt))#17) +Right keys [1]: [ws_item_sk#16] +Join condition: (cast(ws_ext_discount_amt#17 as decimal(14,7)) > (1.3 * avg(ws_ext_discount_amt))#15) (23) Project [codegen id : 6] -Output [2]: [ws_ext_discount_amt#20, ws_sold_date_sk#21] -Input [5]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#17, ws_item_sk#19, ws_ext_discount_amt#20, ws_sold_date_sk#21] +Output [2]: [ws_ext_discount_amt#17, ws_sold_date_sk#18] +Input [5]: [i_item_sk#1, (1.3 * avg(ws_ext_discount_amt))#15, ws_item_sk#16, ws_ext_discount_amt#17, ws_sold_date_sk#18] (24) ReusedExchange [Reuses operator id: 41] -Output [1]: [d_date_sk#22] +Output [1]: [d_date_sk#19] (25) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ws_sold_date_sk#21] -Right keys [1]: [d_date_sk#22] +Left keys [1]: [ws_sold_date_sk#18] +Right keys [1]: [d_date_sk#19] Join condition: None (26) Project [codegen id : 6] -Output [1]: [ws_ext_discount_amt#20] -Input [3]: [ws_ext_discount_amt#20, ws_sold_date_sk#21, d_date_sk#22] +Output [1]: [ws_ext_discount_amt#17] +Input [3]: [ws_ext_discount_amt#17, ws_sold_date_sk#18, d_date_sk#19] (27) HashAggregate [codegen id : 6] -Input [1]: [ws_ext_discount_amt#20] +Input [1]: [ws_ext_discount_amt#17] Keys: [] -Functions [1]: [partial_sum(UnscaledValue(ws_ext_discount_amt#20))] -Aggregate Attributes [1]: [sum#23] -Results [1]: [sum#24] +Functions [1]: [partial_sum(UnscaledValue(ws_ext_discount_amt#17))] +Aggregate Attributes [1]: [sum#20] +Results [1]: [sum#21] (28) Exchange -Input [1]: [sum#24] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#25] +Input [1]: [sum#21] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 7] -Input [1]: [sum#24] +Input [1]: [sum#21] Keys: [] -Functions [1]: [sum(UnscaledValue(ws_ext_discount_amt#20))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_discount_amt#20))#26] -Results [1]: [MakeDecimal(sum(UnscaledValue(ws_ext_discount_amt#20))#26,17,2) AS Excess Discount Amount #27] +Functions [1]: [sum(UnscaledValue(ws_ext_discount_amt#17))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_discount_amt#17))#22] +Results [1]: [MakeDecimal(sum(UnscaledValue(ws_ext_discount_amt#17))#22,17,2) AS Excess Discount Amount #23] ===== Subqueries ===== -Subquery:1 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery#8, [id=#9] +Subquery:1 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery#7, [id=#8] ObjectHashAggregate (36) +- Exchange (35) +- ObjectHashAggregate (34) @@ -202,21 +202,21 @@ Input [2]: [i_item_sk#1, i_manufact_id#2] Input [1]: [i_item_sk#1] Keys: [] Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 1592, 0, 0)] -Aggregate Attributes [1]: [buf#28] -Results [1]: [buf#29] +Aggregate Attributes [1]: [buf#24] +Results [1]: [buf#25] (35) Exchange -Input [1]: [buf#29] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#30] +Input [1]: [buf#25] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5] (36) ObjectHashAggregate -Input [1]: [buf#29] +Input [1]: [buf#25] Keys: [] Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 1592, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 1592, 0, 0)#31] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 1592, 0, 0)#31 AS bloomFilter#32] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 1592, 0, 0)#26] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 1592, 0, 0)#26 AS bloomFilter#27] -Subquery:2 Hosting operator id = 6 Hosting Expression = ws_sold_date_sk#6 IN dynamicpruning#7 +Subquery:2 Hosting operator id = 6 Hosting Expression = ws_sold_date_sk#5 IN dynamicpruning#6 BroadcastExchange (41) +- * Project (40) +- * Filter (39) @@ -225,27 +225,27 @@ BroadcastExchange (41) (37) Scan parquet default.date_dim -Output [2]: [d_date_sk#10, d_date#33] +Output [2]: [d_date_sk#9, d_date#28] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-01-27), LessThanOrEqual(d_date,2000-04-26), IsNotNull(d_date_sk)] ReadSchema: struct (38) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#10, d_date#33] +Input [2]: [d_date_sk#9, d_date#28] (39) Filter [codegen id : 1] -Input [2]: [d_date_sk#10, d_date#33] -Condition : (((isnotnull(d_date#33) AND (d_date#33 >= 2000-01-27)) AND (d_date#33 <= 2000-04-26)) AND isnotnull(d_date_sk#10)) +Input [2]: [d_date_sk#9, d_date#28] +Condition : (((isnotnull(d_date#28) AND (d_date#28 >= 2000-01-27)) AND (d_date#28 <= 2000-04-26)) AND isnotnull(d_date_sk#9)) (40) Project [codegen id : 1] -Output [1]: [d_date_sk#10] -Input [2]: [d_date_sk#10, d_date#33] +Output [1]: [d_date_sk#9] +Input [2]: [d_date_sk#9, d_date#28] (41) BroadcastExchange -Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#34] +Input [1]: [d_date_sk#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -Subquery:3 Hosting operator id = 19 Hosting Expression = ws_sold_date_sk#21 IN dynamicpruning#7 +Subquery:3 Hosting operator id = 19 Hosting Expression = ws_sold_date_sk#18 IN dynamicpruning#6 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q92/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q92/explain.txt index bec857eb2489a..e4c526881dbeb 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q92/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q92/explain.txt @@ -65,7 +65,7 @@ Input [2]: [i_item_sk#5, i_manufact_id#6] (8) BroadcastExchange Input [1]: [i_item_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ws_item_sk#1] @@ -77,96 +77,96 @@ Output [3]: [ws_ext_discount_amt#2, ws_sold_date_sk#3, i_item_sk#5] Input [4]: [ws_item_sk#1, ws_ext_discount_amt#2, ws_sold_date_sk#3, i_item_sk#5] (11) Scan parquet default.web_sales -Output [3]: [ws_item_sk#8, ws_ext_discount_amt#9, ws_sold_date_sk#10] +Output [3]: [ws_item_sk#7, ws_ext_discount_amt#8, ws_sold_date_sk#9] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#10), dynamicpruningexpression(ws_sold_date_sk#10 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(ws_sold_date_sk#9), dynamicpruningexpression(ws_sold_date_sk#9 IN dynamicpruning#4)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 3] -Input [3]: [ws_item_sk#8, ws_ext_discount_amt#9, ws_sold_date_sk#10] +Input [3]: [ws_item_sk#7, ws_ext_discount_amt#8, ws_sold_date_sk#9] (13) Filter [codegen id : 3] -Input [3]: [ws_item_sk#8, ws_ext_discount_amt#9, ws_sold_date_sk#10] -Condition : isnotnull(ws_item_sk#8) +Input [3]: [ws_item_sk#7, ws_ext_discount_amt#8, ws_sold_date_sk#9] +Condition : isnotnull(ws_item_sk#7) (14) ReusedExchange [Reuses operator id: 34] -Output [1]: [d_date_sk#11] +Output [1]: [d_date_sk#10] (15) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [ws_sold_date_sk#10] -Right keys [1]: [d_date_sk#11] +Left keys [1]: [ws_sold_date_sk#9] +Right keys [1]: [d_date_sk#10] Join condition: None (16) Project [codegen id : 3] -Output [2]: [ws_item_sk#8, ws_ext_discount_amt#9] -Input [4]: [ws_item_sk#8, ws_ext_discount_amt#9, ws_sold_date_sk#10, d_date_sk#11] +Output [2]: [ws_item_sk#7, ws_ext_discount_amt#8] +Input [4]: [ws_item_sk#7, ws_ext_discount_amt#8, ws_sold_date_sk#9, d_date_sk#10] (17) HashAggregate [codegen id : 3] -Input [2]: [ws_item_sk#8, ws_ext_discount_amt#9] -Keys [1]: [ws_item_sk#8] -Functions [1]: [partial_avg(UnscaledValue(ws_ext_discount_amt#9))] -Aggregate Attributes [2]: [sum#12, count#13] -Results [3]: [ws_item_sk#8, sum#14, count#15] +Input [2]: [ws_item_sk#7, ws_ext_discount_amt#8] +Keys [1]: [ws_item_sk#7] +Functions [1]: [partial_avg(UnscaledValue(ws_ext_discount_amt#8))] +Aggregate Attributes [2]: [sum#11, count#12] +Results [3]: [ws_item_sk#7, sum#13, count#14] (18) Exchange -Input [3]: [ws_item_sk#8, sum#14, count#15] -Arguments: hashpartitioning(ws_item_sk#8, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [3]: [ws_item_sk#7, sum#13, count#14] +Arguments: hashpartitioning(ws_item_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (19) HashAggregate [codegen id : 4] -Input [3]: [ws_item_sk#8, sum#14, count#15] -Keys [1]: [ws_item_sk#8] -Functions [1]: [avg(UnscaledValue(ws_ext_discount_amt#9))] -Aggregate Attributes [1]: [avg(UnscaledValue(ws_ext_discount_amt#9))#17] -Results [2]: [CheckOverflow((1.300000 * promote_precision(cast((avg(UnscaledValue(ws_ext_discount_amt#9))#17 / 100.0) as decimal(11,6)))), DecimalType(14,7)) AS (1.3 * avg(ws_ext_discount_amt))#18, ws_item_sk#8] +Input [3]: [ws_item_sk#7, sum#13, count#14] +Keys [1]: [ws_item_sk#7] +Functions [1]: [avg(UnscaledValue(ws_ext_discount_amt#8))] +Aggregate Attributes [1]: [avg(UnscaledValue(ws_ext_discount_amt#8))#15] +Results [2]: [CheckOverflow((1.300000 * promote_precision(cast((avg(UnscaledValue(ws_ext_discount_amt#8))#15 / 100.0) as decimal(11,6)))), DecimalType(14,7)) AS (1.3 * avg(ws_ext_discount_amt))#16, ws_item_sk#7] (20) Filter [codegen id : 4] -Input [2]: [(1.3 * avg(ws_ext_discount_amt))#18, ws_item_sk#8] -Condition : isnotnull((1.3 * avg(ws_ext_discount_amt))#18) +Input [2]: [(1.3 * avg(ws_ext_discount_amt))#16, ws_item_sk#7] +Condition : isnotnull((1.3 * avg(ws_ext_discount_amt))#16) (21) BroadcastExchange -Input [2]: [(1.3 * avg(ws_ext_discount_amt))#18, ws_item_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#19] +Input [2]: [(1.3 * avg(ws_ext_discount_amt))#16, ws_item_sk#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [plan_id=3] (22) BroadcastHashJoin [codegen id : 6] Left keys [1]: [i_item_sk#5] -Right keys [1]: [ws_item_sk#8] -Join condition: (cast(ws_ext_discount_amt#2 as decimal(14,7)) > (1.3 * avg(ws_ext_discount_amt))#18) +Right keys [1]: [ws_item_sk#7] +Join condition: (cast(ws_ext_discount_amt#2 as decimal(14,7)) > (1.3 * avg(ws_ext_discount_amt))#16) (23) Project [codegen id : 6] Output [2]: [ws_ext_discount_amt#2, ws_sold_date_sk#3] -Input [5]: [ws_ext_discount_amt#2, ws_sold_date_sk#3, i_item_sk#5, (1.3 * avg(ws_ext_discount_amt))#18, ws_item_sk#8] +Input [5]: [ws_ext_discount_amt#2, ws_sold_date_sk#3, i_item_sk#5, (1.3 * avg(ws_ext_discount_amt))#16, ws_item_sk#7] (24) ReusedExchange [Reuses operator id: 34] -Output [1]: [d_date_sk#20] +Output [1]: [d_date_sk#17] (25) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ws_sold_date_sk#3] -Right keys [1]: [d_date_sk#20] +Right keys [1]: [d_date_sk#17] Join condition: None (26) Project [codegen id : 6] Output [1]: [ws_ext_discount_amt#2] -Input [3]: [ws_ext_discount_amt#2, ws_sold_date_sk#3, d_date_sk#20] +Input [3]: [ws_ext_discount_amt#2, ws_sold_date_sk#3, d_date_sk#17] (27) HashAggregate [codegen id : 6] Input [1]: [ws_ext_discount_amt#2] Keys: [] Functions [1]: [partial_sum(UnscaledValue(ws_ext_discount_amt#2))] -Aggregate Attributes [1]: [sum#21] -Results [1]: [sum#22] +Aggregate Attributes [1]: [sum#18] +Results [1]: [sum#19] (28) Exchange -Input [1]: [sum#22] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#23] +Input [1]: [sum#19] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (29) HashAggregate [codegen id : 7] -Input [1]: [sum#22] +Input [1]: [sum#19] Keys: [] Functions [1]: [sum(UnscaledValue(ws_ext_discount_amt#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_discount_amt#2))#24] -Results [1]: [MakeDecimal(sum(UnscaledValue(ws_ext_discount_amt#2))#24,17,2) AS Excess Discount Amount #25] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_discount_amt#2))#20] +Results [1]: [MakeDecimal(sum(UnscaledValue(ws_ext_discount_amt#2))#20,17,2) AS Excess Discount Amount #21] ===== Subqueries ===== @@ -179,27 +179,27 @@ BroadcastExchange (34) (30) Scan parquet default.date_dim -Output [2]: [d_date_sk#20, d_date#26] +Output [2]: [d_date_sk#17, d_date#22] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-01-27), LessThanOrEqual(d_date,2000-04-26), IsNotNull(d_date_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#20, d_date#26] +Input [2]: [d_date_sk#17, d_date#22] (32) Filter [codegen id : 1] -Input [2]: [d_date_sk#20, d_date#26] -Condition : (((isnotnull(d_date#26) AND (d_date#26 >= 2000-01-27)) AND (d_date#26 <= 2000-04-26)) AND isnotnull(d_date_sk#20)) +Input [2]: [d_date_sk#17, d_date#22] +Condition : (((isnotnull(d_date#22) AND (d_date#22 >= 2000-01-27)) AND (d_date#22 <= 2000-04-26)) AND isnotnull(d_date_sk#17)) (33) Project [codegen id : 1] -Output [1]: [d_date_sk#20] -Input [2]: [d_date_sk#20, d_date#26] +Output [1]: [d_date_sk#17] +Input [2]: [d_date_sk#17, d_date#22] (34) BroadcastExchange -Input [1]: [d_date_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#27] +Input [1]: [d_date_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] -Subquery:2 Hosting operator id = 11 Hosting Expression = ws_sold_date_sk#10 IN dynamicpruning#4 +Subquery:2 Hosting operator id = 11 Hosting Expression = ws_sold_date_sk#9 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93.sf100/explain.txt index 3f6b5ffb48a67..e29bcc99eeeed 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93.sf100/explain.txt @@ -63,7 +63,7 @@ Input [2]: [r_reason_sk#6, r_reason_desc#7] (9) BroadcastExchange Input [1]: [r_reason_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 2] Left keys [1]: [sr_reason_sk#2] @@ -76,61 +76,61 @@ Input [5]: [sr_item_sk#1, sr_reason_sk#2, sr_ticket_number#3, sr_return_quantity (12) Exchange Input [3]: [sr_item_sk#1, sr_ticket_number#3, sr_return_quantity#4] -Arguments: hashpartitioning(sr_item_sk#1, sr_ticket_number#3, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(sr_item_sk#1, sr_ticket_number#3, 5), ENSURE_REQUIREMENTS, [plan_id=2] (13) Sort [codegen id : 3] Input [3]: [sr_item_sk#1, sr_ticket_number#3, sr_return_quantity#4] Arguments: [sr_item_sk#1 ASC NULLS FIRST, sr_ticket_number#3 ASC NULLS FIRST], false, 0 (14) Scan parquet default.store_sales -Output [6]: [ss_item_sk#10, ss_customer_sk#11, ss_ticket_number#12, ss_quantity#13, ss_sales_price#14, ss_sold_date_sk#15] +Output [6]: [ss_item_sk#8, ss_customer_sk#9, ss_ticket_number#10, ss_quantity#11, ss_sales_price#12, ss_sold_date_sk#13] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] ReadSchema: struct (15) ColumnarToRow [codegen id : 4] -Input [6]: [ss_item_sk#10, ss_customer_sk#11, ss_ticket_number#12, ss_quantity#13, ss_sales_price#14, ss_sold_date_sk#15] +Input [6]: [ss_item_sk#8, ss_customer_sk#9, ss_ticket_number#10, ss_quantity#11, ss_sales_price#12, ss_sold_date_sk#13] (16) Project [codegen id : 4] -Output [5]: [ss_item_sk#10, ss_customer_sk#11, ss_ticket_number#12, ss_quantity#13, ss_sales_price#14] -Input [6]: [ss_item_sk#10, ss_customer_sk#11, ss_ticket_number#12, ss_quantity#13, ss_sales_price#14, ss_sold_date_sk#15] +Output [5]: [ss_item_sk#8, ss_customer_sk#9, ss_ticket_number#10, ss_quantity#11, ss_sales_price#12] +Input [6]: [ss_item_sk#8, ss_customer_sk#9, ss_ticket_number#10, ss_quantity#11, ss_sales_price#12, ss_sold_date_sk#13] (17) Exchange -Input [5]: [ss_item_sk#10, ss_customer_sk#11, ss_ticket_number#12, ss_quantity#13, ss_sales_price#14] -Arguments: hashpartitioning(ss_item_sk#10, ss_ticket_number#12, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [5]: [ss_item_sk#8, ss_customer_sk#9, ss_ticket_number#10, ss_quantity#11, ss_sales_price#12] +Arguments: hashpartitioning(ss_item_sk#8, ss_ticket_number#10, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) Sort [codegen id : 5] -Input [5]: [ss_item_sk#10, ss_customer_sk#11, ss_ticket_number#12, ss_quantity#13, ss_sales_price#14] -Arguments: [ss_item_sk#10 ASC NULLS FIRST, ss_ticket_number#12 ASC NULLS FIRST], false, 0 +Input [5]: [ss_item_sk#8, ss_customer_sk#9, ss_ticket_number#10, ss_quantity#11, ss_sales_price#12] +Arguments: [ss_item_sk#8 ASC NULLS FIRST, ss_ticket_number#10 ASC NULLS FIRST], false, 0 (19) SortMergeJoin [codegen id : 6] Left keys [2]: [sr_item_sk#1, sr_ticket_number#3] -Right keys [2]: [ss_item_sk#10, ss_ticket_number#12] +Right keys [2]: [ss_item_sk#8, ss_ticket_number#10] Join condition: None (20) Project [codegen id : 6] -Output [2]: [ss_customer_sk#11, CASE WHEN isnotnull(sr_return_quantity#4) THEN CheckOverflow((promote_precision(cast((ss_quantity#13 - sr_return_quantity#4) as decimal(12,2))) * promote_precision(cast(ss_sales_price#14 as decimal(12,2)))), DecimalType(18,2)) ELSE CheckOverflow((promote_precision(cast(ss_quantity#13 as decimal(12,2))) * promote_precision(cast(ss_sales_price#14 as decimal(12,2)))), DecimalType(18,2)) END AS act_sales#17] -Input [8]: [sr_item_sk#1, sr_ticket_number#3, sr_return_quantity#4, ss_item_sk#10, ss_customer_sk#11, ss_ticket_number#12, ss_quantity#13, ss_sales_price#14] +Output [2]: [ss_customer_sk#9, CASE WHEN isnotnull(sr_return_quantity#4) THEN CheckOverflow((promote_precision(cast((ss_quantity#11 - sr_return_quantity#4) as decimal(12,2))) * promote_precision(cast(ss_sales_price#12 as decimal(12,2)))), DecimalType(18,2)) ELSE CheckOverflow((promote_precision(cast(ss_quantity#11 as decimal(12,2))) * promote_precision(cast(ss_sales_price#12 as decimal(12,2)))), DecimalType(18,2)) END AS act_sales#14] +Input [8]: [sr_item_sk#1, sr_ticket_number#3, sr_return_quantity#4, ss_item_sk#8, ss_customer_sk#9, ss_ticket_number#10, ss_quantity#11, ss_sales_price#12] (21) HashAggregate [codegen id : 6] -Input [2]: [ss_customer_sk#11, act_sales#17] -Keys [1]: [ss_customer_sk#11] -Functions [1]: [partial_sum(act_sales#17)] -Aggregate Attributes [2]: [sum#18, isEmpty#19] -Results [3]: [ss_customer_sk#11, sum#20, isEmpty#21] +Input [2]: [ss_customer_sk#9, act_sales#14] +Keys [1]: [ss_customer_sk#9] +Functions [1]: [partial_sum(act_sales#14)] +Aggregate Attributes [2]: [sum#15, isEmpty#16] +Results [3]: [ss_customer_sk#9, sum#17, isEmpty#18] (22) Exchange -Input [3]: [ss_customer_sk#11, sum#20, isEmpty#21] -Arguments: hashpartitioning(ss_customer_sk#11, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [3]: [ss_customer_sk#9, sum#17, isEmpty#18] +Arguments: hashpartitioning(ss_customer_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) HashAggregate [codegen id : 7] -Input [3]: [ss_customer_sk#11, sum#20, isEmpty#21] -Keys [1]: [ss_customer_sk#11] -Functions [1]: [sum(act_sales#17)] -Aggregate Attributes [1]: [sum(act_sales#17)#23] -Results [2]: [ss_customer_sk#11, sum(act_sales#17)#23 AS sumsales#24] +Input [3]: [ss_customer_sk#9, sum#17, isEmpty#18] +Keys [1]: [ss_customer_sk#9] +Functions [1]: [sum(act_sales#14)] +Aggregate Attributes [1]: [sum(act_sales#14)#19] +Results [2]: [ss_customer_sk#9, sum(act_sales#14)#19 AS sumsales#20] (24) TakeOrderedAndProject -Input [2]: [ss_customer_sk#11, sumsales#24] -Arguments: 100, [sumsales#24 ASC NULLS FIRST, ss_customer_sk#11 ASC NULLS FIRST], [ss_customer_sk#11, sumsales#24] +Input [2]: [ss_customer_sk#9, sumsales#20] +Arguments: 100, [sumsales#20 ASC NULLS FIRST, ss_customer_sk#9 ASC NULLS FIRST], [ss_customer_sk#9, sumsales#20] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93/explain.txt index 11f69606ece91..032eb9152cfa1 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q93/explain.txt @@ -40,97 +40,97 @@ Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, s (4) Exchange Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5] -Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#3, 5), ENSURE_REQUIREMENTS, [id=#7] +Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#3, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5] Arguments: [ss_item_sk#1 ASC NULLS FIRST, ss_ticket_number#3 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_returns -Output [5]: [sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11, sr_returned_date_sk#12] +Output [5]: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10, sr_returned_date_sk#11] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number), IsNotNull(sr_reason_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [5]: [sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11, sr_returned_date_sk#12] +Input [5]: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10, sr_returned_date_sk#11] (8) Filter [codegen id : 3] -Input [5]: [sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11, sr_returned_date_sk#12] -Condition : ((isnotnull(sr_item_sk#8) AND isnotnull(sr_ticket_number#10)) AND isnotnull(sr_reason_sk#9)) +Input [5]: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10, sr_returned_date_sk#11] +Condition : ((isnotnull(sr_item_sk#7) AND isnotnull(sr_ticket_number#9)) AND isnotnull(sr_reason_sk#8)) (9) Project [codegen id : 3] -Output [4]: [sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11] -Input [5]: [sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11, sr_returned_date_sk#12] +Output [4]: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10] +Input [5]: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10, sr_returned_date_sk#11] (10) Exchange -Input [4]: [sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11] -Arguments: hashpartitioning(sr_item_sk#8, sr_ticket_number#10, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [4]: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10] +Arguments: hashpartitioning(sr_item_sk#7, sr_ticket_number#9, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [4]: [sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11] -Arguments: [sr_item_sk#8 ASC NULLS FIRST, sr_ticket_number#10 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10] +Arguments: [sr_item_sk#7 ASC NULLS FIRST, sr_ticket_number#9 ASC NULLS FIRST], false, 0 (12) SortMergeJoin [codegen id : 6] Left keys [2]: [ss_item_sk#1, ss_ticket_number#3] -Right keys [2]: [sr_item_sk#8, sr_ticket_number#10] +Right keys [2]: [sr_item_sk#7, sr_ticket_number#9] Join condition: None (13) Project [codegen id : 6] -Output [5]: [ss_customer_sk#2, ss_quantity#4, ss_sales_price#5, sr_reason_sk#9, sr_return_quantity#11] -Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5, sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11] +Output [5]: [ss_customer_sk#2, ss_quantity#4, ss_sales_price#5, sr_reason_sk#8, sr_return_quantity#10] +Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5, sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10] (14) Scan parquet default.reason -Output [2]: [r_reason_sk#14, r_reason_desc#15] +Output [2]: [r_reason_sk#12, r_reason_desc#13] Batched: true Location [not included in comparison]/{warehouse_dir}/reason] PushedFilters: [IsNotNull(r_reason_desc), EqualTo(r_reason_desc,reason 28 ), IsNotNull(r_reason_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 5] -Input [2]: [r_reason_sk#14, r_reason_desc#15] +Input [2]: [r_reason_sk#12, r_reason_desc#13] (16) Filter [codegen id : 5] -Input [2]: [r_reason_sk#14, r_reason_desc#15] -Condition : ((isnotnull(r_reason_desc#15) AND (r_reason_desc#15 = reason 28 )) AND isnotnull(r_reason_sk#14)) +Input [2]: [r_reason_sk#12, r_reason_desc#13] +Condition : ((isnotnull(r_reason_desc#13) AND (r_reason_desc#13 = reason 28 )) AND isnotnull(r_reason_sk#12)) (17) Project [codegen id : 5] -Output [1]: [r_reason_sk#14] -Input [2]: [r_reason_sk#14, r_reason_desc#15] +Output [1]: [r_reason_sk#12] +Input [2]: [r_reason_sk#12, r_reason_desc#13] (18) BroadcastExchange -Input [1]: [r_reason_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16] +Input [1]: [r_reason_sk#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (19) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [sr_reason_sk#9] -Right keys [1]: [r_reason_sk#14] +Left keys [1]: [sr_reason_sk#8] +Right keys [1]: [r_reason_sk#12] Join condition: None (20) Project [codegen id : 6] -Output [2]: [ss_customer_sk#2, CASE WHEN isnotnull(sr_return_quantity#11) THEN CheckOverflow((promote_precision(cast((ss_quantity#4 - sr_return_quantity#11) as decimal(12,2))) * promote_precision(cast(ss_sales_price#5 as decimal(12,2)))), DecimalType(18,2)) ELSE CheckOverflow((promote_precision(cast(ss_quantity#4 as decimal(12,2))) * promote_precision(cast(ss_sales_price#5 as decimal(12,2)))), DecimalType(18,2)) END AS act_sales#17] -Input [6]: [ss_customer_sk#2, ss_quantity#4, ss_sales_price#5, sr_reason_sk#9, sr_return_quantity#11, r_reason_sk#14] +Output [2]: [ss_customer_sk#2, CASE WHEN isnotnull(sr_return_quantity#10) THEN CheckOverflow((promote_precision(cast((ss_quantity#4 - sr_return_quantity#10) as decimal(12,2))) * promote_precision(cast(ss_sales_price#5 as decimal(12,2)))), DecimalType(18,2)) ELSE CheckOverflow((promote_precision(cast(ss_quantity#4 as decimal(12,2))) * promote_precision(cast(ss_sales_price#5 as decimal(12,2)))), DecimalType(18,2)) END AS act_sales#14] +Input [6]: [ss_customer_sk#2, ss_quantity#4, ss_sales_price#5, sr_reason_sk#8, sr_return_quantity#10, r_reason_sk#12] (21) HashAggregate [codegen id : 6] -Input [2]: [ss_customer_sk#2, act_sales#17] +Input [2]: [ss_customer_sk#2, act_sales#14] Keys [1]: [ss_customer_sk#2] -Functions [1]: [partial_sum(act_sales#17)] -Aggregate Attributes [2]: [sum#18, isEmpty#19] -Results [3]: [ss_customer_sk#2, sum#20, isEmpty#21] +Functions [1]: [partial_sum(act_sales#14)] +Aggregate Attributes [2]: [sum#15, isEmpty#16] +Results [3]: [ss_customer_sk#2, sum#17, isEmpty#18] (22) Exchange -Input [3]: [ss_customer_sk#2, sum#20, isEmpty#21] -Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [3]: [ss_customer_sk#2, sum#17, isEmpty#18] +Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) HashAggregate [codegen id : 7] -Input [3]: [ss_customer_sk#2, sum#20, isEmpty#21] +Input [3]: [ss_customer_sk#2, sum#17, isEmpty#18] Keys [1]: [ss_customer_sk#2] -Functions [1]: [sum(act_sales#17)] -Aggregate Attributes [1]: [sum(act_sales#17)#23] -Results [2]: [ss_customer_sk#2, sum(act_sales#17)#23 AS sumsales#24] +Functions [1]: [sum(act_sales#14)] +Aggregate Attributes [1]: [sum(act_sales#14)#19] +Results [2]: [ss_customer_sk#2, sum(act_sales#14)#19 AS sumsales#20] (24) TakeOrderedAndProject -Input [2]: [ss_customer_sk#2, sumsales#24] -Arguments: 100, [sumsales#24 ASC NULLS FIRST, ss_customer_sk#2 ASC NULLS FIRST], [ss_customer_sk#2, sumsales#24] +Input [2]: [ss_customer_sk#2, sumsales#20] +Arguments: 100, [sumsales#20 ASC NULLS FIRST, ss_customer_sk#2 ASC NULLS FIRST], [ss_customer_sk#2, sumsales#20] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94.sf100/explain.txt index f2c49cdbb90c8..e3396995d399c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94.sf100/explain.txt @@ -66,192 +66,192 @@ Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse (5) Exchange Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] -Arguments: hashpartitioning(ws_order_number#5, 5), ENSURE_REQUIREMENTS, [id=#15] +Arguments: hashpartitioning(ws_order_number#5, 5), ENSURE_REQUIREMENTS, [plan_id=1] (6) Sort [codegen id : 2] Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Arguments: [ws_order_number#5 ASC NULLS FIRST], false, 0 (7) Scan parquet default.web_sales -Output [3]: [ws_warehouse_sk#16, ws_order_number#17, ws_sold_date_sk#18] +Output [3]: [ws_warehouse_sk#15, ws_order_number#16, ws_sold_date_sk#17] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] ReadSchema: struct (8) ColumnarToRow [codegen id : 3] -Input [3]: [ws_warehouse_sk#16, ws_order_number#17, ws_sold_date_sk#18] +Input [3]: [ws_warehouse_sk#15, ws_order_number#16, ws_sold_date_sk#17] (9) Project [codegen id : 3] -Output [2]: [ws_warehouse_sk#16, ws_order_number#17] -Input [3]: [ws_warehouse_sk#16, ws_order_number#17, ws_sold_date_sk#18] +Output [2]: [ws_warehouse_sk#15, ws_order_number#16] +Input [3]: [ws_warehouse_sk#15, ws_order_number#16, ws_sold_date_sk#17] (10) Exchange -Input [2]: [ws_warehouse_sk#16, ws_order_number#17] -Arguments: hashpartitioning(ws_order_number#17, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [2]: [ws_warehouse_sk#15, ws_order_number#16] +Arguments: hashpartitioning(ws_order_number#16, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [2]: [ws_warehouse_sk#16, ws_order_number#17] -Arguments: [ws_order_number#17 ASC NULLS FIRST], false, 0 +Input [2]: [ws_warehouse_sk#15, ws_order_number#16] +Arguments: [ws_order_number#16 ASC NULLS FIRST], false, 0 (12) SortMergeJoin [codegen id : 5] Left keys [1]: [ws_order_number#5] -Right keys [1]: [ws_order_number#17] -Join condition: NOT (ws_warehouse_sk#4 = ws_warehouse_sk#16) +Right keys [1]: [ws_order_number#16] +Join condition: NOT (ws_warehouse_sk#4 = ws_warehouse_sk#15) (13) Project [codegen id : 5] Output [6]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] (14) Scan parquet default.web_returns -Output [2]: [wr_order_number#20, wr_returned_date_sk#21] +Output [2]: [wr_order_number#18, wr_returned_date_sk#19] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] ReadSchema: struct (15) ColumnarToRow [codegen id : 6] -Input [2]: [wr_order_number#20, wr_returned_date_sk#21] +Input [2]: [wr_order_number#18, wr_returned_date_sk#19] (16) Project [codegen id : 6] -Output [1]: [wr_order_number#20] -Input [2]: [wr_order_number#20, wr_returned_date_sk#21] +Output [1]: [wr_order_number#18] +Input [2]: [wr_order_number#18, wr_returned_date_sk#19] (17) Exchange -Input [1]: [wr_order_number#20] -Arguments: hashpartitioning(wr_order_number#20, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [1]: [wr_order_number#18] +Arguments: hashpartitioning(wr_order_number#18, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) Sort [codegen id : 7] -Input [1]: [wr_order_number#20] -Arguments: [wr_order_number#20 ASC NULLS FIRST], false, 0 +Input [1]: [wr_order_number#18] +Arguments: [wr_order_number#18 ASC NULLS FIRST], false, 0 (19) SortMergeJoin [codegen id : 11] Left keys [1]: [ws_order_number#5] -Right keys [1]: [wr_order_number#20] +Right keys [1]: [wr_order_number#18] Join condition: None (20) Scan parquet default.customer_address -Output [2]: [ca_address_sk#23, ca_state#24] +Output [2]: [ca_address_sk#20, ca_state#21] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 8] -Input [2]: [ca_address_sk#23, ca_state#24] +Input [2]: [ca_address_sk#20, ca_state#21] (22) Filter [codegen id : 8] -Input [2]: [ca_address_sk#23, ca_state#24] -Condition : ((isnotnull(ca_state#24) AND (ca_state#24 = IL)) AND isnotnull(ca_address_sk#23)) +Input [2]: [ca_address_sk#20, ca_state#21] +Condition : ((isnotnull(ca_state#21) AND (ca_state#21 = IL)) AND isnotnull(ca_address_sk#20)) (23) Project [codegen id : 8] -Output [1]: [ca_address_sk#23] -Input [2]: [ca_address_sk#23, ca_state#24] +Output [1]: [ca_address_sk#20] +Input [2]: [ca_address_sk#20, ca_state#21] (24) BroadcastExchange -Input [1]: [ca_address_sk#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [ca_address_sk#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (25) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ws_ship_addr_sk#2] -Right keys [1]: [ca_address_sk#23] +Right keys [1]: [ca_address_sk#20] Join condition: None (26) Project [codegen id : 11] Output [5]: [ws_ship_date_sk#1, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] -Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ca_address_sk#23] +Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ca_address_sk#20] (27) Scan parquet default.web_site -Output [2]: [web_site_sk#26, web_company_name#27] +Output [2]: [web_site_sk#22, web_company_name#23] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri ), IsNotNull(web_site_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 9] -Input [2]: [web_site_sk#26, web_company_name#27] +Input [2]: [web_site_sk#22, web_company_name#23] (29) Filter [codegen id : 9] -Input [2]: [web_site_sk#26, web_company_name#27] -Condition : ((isnotnull(web_company_name#27) AND (web_company_name#27 = pri )) AND isnotnull(web_site_sk#26)) +Input [2]: [web_site_sk#22, web_company_name#23] +Condition : ((isnotnull(web_company_name#23) AND (web_company_name#23 = pri )) AND isnotnull(web_site_sk#22)) (30) Project [codegen id : 9] -Output [1]: [web_site_sk#26] -Input [2]: [web_site_sk#26, web_company_name#27] +Output [1]: [web_site_sk#22] +Input [2]: [web_site_sk#22, web_company_name#23] (31) BroadcastExchange -Input [1]: [web_site_sk#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#28] +Input [1]: [web_site_sk#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (32) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ws_web_site_sk#3] -Right keys [1]: [web_site_sk#26] +Right keys [1]: [web_site_sk#22] Join condition: None (33) Project [codegen id : 11] Output [4]: [ws_ship_date_sk#1, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] -Input [6]: [ws_ship_date_sk#1, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, web_site_sk#26] +Input [6]: [ws_ship_date_sk#1, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, web_site_sk#22] (34) Scan parquet default.date_dim -Output [2]: [d_date_sk#29, d_date#30] +Output [2]: [d_date_sk#24, d_date#25] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-01), LessThanOrEqual(d_date,1999-04-02), IsNotNull(d_date_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 10] -Input [2]: [d_date_sk#29, d_date#30] +Input [2]: [d_date_sk#24, d_date#25] (36) Filter [codegen id : 10] -Input [2]: [d_date_sk#29, d_date#30] -Condition : (((isnotnull(d_date#30) AND (d_date#30 >= 1999-02-01)) AND (d_date#30 <= 1999-04-02)) AND isnotnull(d_date_sk#29)) +Input [2]: [d_date_sk#24, d_date#25] +Condition : (((isnotnull(d_date#25) AND (d_date#25 >= 1999-02-01)) AND (d_date#25 <= 1999-04-02)) AND isnotnull(d_date_sk#24)) (37) Project [codegen id : 10] -Output [1]: [d_date_sk#29] -Input [2]: [d_date_sk#29, d_date#30] +Output [1]: [d_date_sk#24] +Input [2]: [d_date_sk#24, d_date#25] (38) BroadcastExchange -Input [1]: [d_date_sk#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#31] +Input [1]: [d_date_sk#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] (39) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ws_ship_date_sk#1] -Right keys [1]: [d_date_sk#29] +Right keys [1]: [d_date_sk#24] Join condition: None (40) Project [codegen id : 11] Output [3]: [ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] -Input [5]: [ws_ship_date_sk#1, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, d_date_sk#29] +Input [5]: [ws_ship_date_sk#1, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, d_date_sk#24] (41) HashAggregate [codegen id : 11] Input [3]: [ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Keys [1]: [ws_order_number#5] Functions [2]: [partial_sum(UnscaledValue(ws_ext_ship_cost#6)), partial_sum(UnscaledValue(ws_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#32, sum(UnscaledValue(ws_net_profit#7))#33] -Results [3]: [ws_order_number#5, sum#34, sum#35] +Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#26, sum(UnscaledValue(ws_net_profit#7))#27] +Results [3]: [ws_order_number#5, sum#28, sum#29] (42) HashAggregate [codegen id : 11] -Input [3]: [ws_order_number#5, sum#34, sum#35] +Input [3]: [ws_order_number#5, sum#28, sum#29] Keys [1]: [ws_order_number#5] Functions [2]: [merge_sum(UnscaledValue(ws_ext_ship_cost#6)), merge_sum(UnscaledValue(ws_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#32, sum(UnscaledValue(ws_net_profit#7))#33] -Results [3]: [ws_order_number#5, sum#34, sum#35] +Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#26, sum(UnscaledValue(ws_net_profit#7))#27] +Results [3]: [ws_order_number#5, sum#28, sum#29] (43) HashAggregate [codegen id : 11] -Input [3]: [ws_order_number#5, sum#34, sum#35] +Input [3]: [ws_order_number#5, sum#28, sum#29] Keys: [] Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#6)), merge_sum(UnscaledValue(ws_net_profit#7)), partial_count(distinct ws_order_number#5)] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#32, sum(UnscaledValue(ws_net_profit#7))#33, count(ws_order_number#5)#36] -Results [3]: [sum#34, sum#35, count#37] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#26, sum(UnscaledValue(ws_net_profit#7))#27, count(ws_order_number#5)#30] +Results [3]: [sum#28, sum#29, count#31] (44) Exchange -Input [3]: [sum#34, sum#35, count#37] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#38] +Input [3]: [sum#28, sum#29, count#31] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (45) HashAggregate [codegen id : 12] -Input [3]: [sum#34, sum#35, count#37] +Input [3]: [sum#28, sum#29, count#31] Keys: [] Functions [3]: [sum(UnscaledValue(ws_ext_ship_cost#6)), sum(UnscaledValue(ws_net_profit#7)), count(distinct ws_order_number#5)] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#32, sum(UnscaledValue(ws_net_profit#7))#33, count(ws_order_number#5)#36] -Results [3]: [count(ws_order_number#5)#36 AS order count #39, MakeDecimal(sum(UnscaledValue(ws_ext_ship_cost#6))#32,17,2) AS total shipping cost #40, MakeDecimal(sum(UnscaledValue(ws_net_profit#7))#33,17,2) AS total net profit #41] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#26, sum(UnscaledValue(ws_net_profit#7))#27, count(ws_order_number#5)#30] +Results [3]: [count(ws_order_number#5)#30 AS order count #32, MakeDecimal(sum(UnscaledValue(ws_ext_ship_cost#6))#26,17,2) AS total shipping cost #33, MakeDecimal(sum(UnscaledValue(ws_net_profit#7))#27,17,2) AS total net profit #34] ===== Subqueries ===== @@ -266,40 +266,40 @@ ObjectHashAggregate (52) (46) Scan parquet default.customer_address -Output [2]: [ca_address_sk#23, ca_state#24] +Output [2]: [ca_address_sk#20, ca_state#21] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 1] -Input [2]: [ca_address_sk#23, ca_state#24] +Input [2]: [ca_address_sk#20, ca_state#21] (48) Filter [codegen id : 1] -Input [2]: [ca_address_sk#23, ca_state#24] -Condition : ((isnotnull(ca_state#24) AND (ca_state#24 = IL)) AND isnotnull(ca_address_sk#23)) +Input [2]: [ca_address_sk#20, ca_state#21] +Condition : ((isnotnull(ca_state#21) AND (ca_state#21 = IL)) AND isnotnull(ca_address_sk#20)) (49) Project [codegen id : 1] -Output [1]: [ca_address_sk#23] -Input [2]: [ca_address_sk#23, ca_state#24] +Output [1]: [ca_address_sk#20] +Input [2]: [ca_address_sk#20, ca_state#21] (50) ObjectHashAggregate -Input [1]: [ca_address_sk#23] +Input [1]: [ca_address_sk#20] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#23, 42), 17961, 143688, 0, 0)] -Aggregate Attributes [1]: [buf#42] -Results [1]: [buf#43] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 143688, 0, 0)] +Aggregate Attributes [1]: [buf#35] +Results [1]: [buf#36] (51) Exchange -Input [1]: [buf#43] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#44] +Input [1]: [buf#36] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8] (52) ObjectHashAggregate -Input [1]: [buf#43] +Input [1]: [buf#36] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#23, 42), 17961, 143688, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#23, 42), 17961, 143688, 0, 0)#45] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#23, 42), 17961, 143688, 0, 0)#45 AS bloomFilter#46] +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 143688, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 143688, 0, 0)#37] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#20, 42), 17961, 143688, 0, 0)#37 AS bloomFilter#38] Subquery:2 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#11, [id=#12] ObjectHashAggregate (59) @@ -312,40 +312,40 @@ ObjectHashAggregate (59) (53) Scan parquet default.web_site -Output [2]: [web_site_sk#26, web_company_name#27] +Output [2]: [web_site_sk#22, web_company_name#23] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri ), IsNotNull(web_site_sk)] ReadSchema: struct (54) ColumnarToRow [codegen id : 1] -Input [2]: [web_site_sk#26, web_company_name#27] +Input [2]: [web_site_sk#22, web_company_name#23] (55) Filter [codegen id : 1] -Input [2]: [web_site_sk#26, web_company_name#27] -Condition : ((isnotnull(web_company_name#27) AND (web_company_name#27 = pri )) AND isnotnull(web_site_sk#26)) +Input [2]: [web_site_sk#22, web_company_name#23] +Condition : ((isnotnull(web_company_name#23) AND (web_company_name#23 = pri )) AND isnotnull(web_site_sk#22)) (56) Project [codegen id : 1] -Output [1]: [web_site_sk#26] -Input [2]: [web_site_sk#26, web_company_name#27] +Output [1]: [web_site_sk#22] +Input [2]: [web_site_sk#22, web_company_name#23] (57) ObjectHashAggregate -Input [1]: [web_site_sk#26] +Input [1]: [web_site_sk#22] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(web_site_sk#26, 42), 4, 32, 0, 0)] -Aggregate Attributes [1]: [buf#47] -Results [1]: [buf#48] +Functions [1]: [partial_bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 32, 0, 0)] +Aggregate Attributes [1]: [buf#39] +Results [1]: [buf#40] (58) Exchange -Input [1]: [buf#48] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#49] +Input [1]: [buf#40] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=9] (59) ObjectHashAggregate -Input [1]: [buf#48] +Input [1]: [buf#40] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(web_site_sk#26, 42), 4, 32, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(web_site_sk#26, 42), 4, 32, 0, 0)#50] -Results [1]: [bloom_filter_agg(xxhash64(web_site_sk#26, 42), 4, 32, 0, 0)#50 AS bloomFilter#51] +Functions [1]: [bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 32, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 32, 0, 0)#41] +Results [1]: [bloom_filter_agg(xxhash64(web_site_sk#22, 42), 4, 32, 0, 0)#41 AS bloomFilter#42] Subquery:3 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#13, [id=#14] ObjectHashAggregate (66) @@ -358,39 +358,39 @@ ObjectHashAggregate (66) (60) Scan parquet default.date_dim -Output [2]: [d_date_sk#29, d_date#30] +Output [2]: [d_date_sk#24, d_date#25] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-01), LessThanOrEqual(d_date,1999-04-02), IsNotNull(d_date_sk)] ReadSchema: struct (61) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#29, d_date#30] +Input [2]: [d_date_sk#24, d_date#25] (62) Filter [codegen id : 1] -Input [2]: [d_date_sk#29, d_date#30] -Condition : (((isnotnull(d_date#30) AND (d_date#30 >= 1999-02-01)) AND (d_date#30 <= 1999-04-02)) AND isnotnull(d_date_sk#29)) +Input [2]: [d_date_sk#24, d_date#25] +Condition : (((isnotnull(d_date#25) AND (d_date#25 >= 1999-02-01)) AND (d_date#25 <= 1999-04-02)) AND isnotnull(d_date_sk#24)) (63) Project [codegen id : 1] -Output [1]: [d_date_sk#29] -Input [2]: [d_date_sk#29, d_date#30] +Output [1]: [d_date_sk#24] +Input [2]: [d_date_sk#24, d_date#25] (64) ObjectHashAggregate -Input [1]: [d_date_sk#29] +Input [1]: [d_date_sk#24] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 584392, 0, 0)] -Aggregate Attributes [1]: [buf#52] -Results [1]: [buf#53] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 584392, 0, 0)] +Aggregate Attributes [1]: [buf#43] +Results [1]: [buf#44] (65) Exchange -Input [1]: [buf#53] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#54] +Input [1]: [buf#44] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10] (66) ObjectHashAggregate -Input [1]: [buf#53] +Input [1]: [buf#44] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 584392, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 584392, 0, 0)#55] -Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#29, 42), 73049, 584392, 0, 0)#55 AS bloomFilter#56] +Functions [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 584392, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 584392, 0, 0)#45] +Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#24, 42), 73049, 584392, 0, 0)#45 AS bloomFilter#46] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94/explain.txt index 1c1f76169ca6a..a07112c751556 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q94/explain.txt @@ -66,190 +66,190 @@ Input [8]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse (5) Exchange Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] -Arguments: hashpartitioning(ws_order_number#5, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ws_order_number#5, 5), ENSURE_REQUIREMENTS, [plan_id=1] (6) Sort [codegen id : 2] Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Arguments: [ws_order_number#5 ASC NULLS FIRST], false, 0 (7) Scan parquet default.web_sales -Output [3]: [ws_warehouse_sk#10, ws_order_number#11, ws_sold_date_sk#12] +Output [3]: [ws_warehouse_sk#9, ws_order_number#10, ws_sold_date_sk#11] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] ReadSchema: struct (8) ColumnarToRow [codegen id : 3] -Input [3]: [ws_warehouse_sk#10, ws_order_number#11, ws_sold_date_sk#12] +Input [3]: [ws_warehouse_sk#9, ws_order_number#10, ws_sold_date_sk#11] (9) Project [codegen id : 3] -Output [2]: [ws_warehouse_sk#10, ws_order_number#11] -Input [3]: [ws_warehouse_sk#10, ws_order_number#11, ws_sold_date_sk#12] +Output [2]: [ws_warehouse_sk#9, ws_order_number#10] +Input [3]: [ws_warehouse_sk#9, ws_order_number#10, ws_sold_date_sk#11] (10) Exchange -Input [2]: [ws_warehouse_sk#10, ws_order_number#11] -Arguments: hashpartitioning(ws_order_number#11, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [2]: [ws_warehouse_sk#9, ws_order_number#10] +Arguments: hashpartitioning(ws_order_number#10, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [2]: [ws_warehouse_sk#10, ws_order_number#11] -Arguments: [ws_order_number#11 ASC NULLS FIRST], false, 0 +Input [2]: [ws_warehouse_sk#9, ws_order_number#10] +Arguments: [ws_order_number#10 ASC NULLS FIRST], false, 0 (12) SortMergeJoin [codegen id : 5] Left keys [1]: [ws_order_number#5] -Right keys [1]: [ws_order_number#11] -Join condition: NOT (ws_warehouse_sk#4 = ws_warehouse_sk#10) +Right keys [1]: [ws_order_number#10] +Join condition: NOT (ws_warehouse_sk#4 = ws_warehouse_sk#9) (13) Project [codegen id : 5] Output [6]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_warehouse_sk#4, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] (14) Scan parquet default.web_returns -Output [2]: [wr_order_number#14, wr_returned_date_sk#15] +Output [2]: [wr_order_number#12, wr_returned_date_sk#13] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] ReadSchema: struct (15) ColumnarToRow [codegen id : 6] -Input [2]: [wr_order_number#14, wr_returned_date_sk#15] +Input [2]: [wr_order_number#12, wr_returned_date_sk#13] (16) Project [codegen id : 6] -Output [1]: [wr_order_number#14] -Input [2]: [wr_order_number#14, wr_returned_date_sk#15] +Output [1]: [wr_order_number#12] +Input [2]: [wr_order_number#12, wr_returned_date_sk#13] (17) Exchange -Input [1]: [wr_order_number#14] -Arguments: hashpartitioning(wr_order_number#14, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [1]: [wr_order_number#12] +Arguments: hashpartitioning(wr_order_number#12, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) Sort [codegen id : 7] -Input [1]: [wr_order_number#14] -Arguments: [wr_order_number#14 ASC NULLS FIRST], false, 0 +Input [1]: [wr_order_number#12] +Arguments: [wr_order_number#12 ASC NULLS FIRST], false, 0 (19) SortMergeJoin [codegen id : 11] Left keys [1]: [ws_order_number#5] -Right keys [1]: [wr_order_number#14] +Right keys [1]: [wr_order_number#12] Join condition: None (20) Scan parquet default.date_dim -Output [2]: [d_date_sk#17, d_date#18] +Output [2]: [d_date_sk#14, d_date#15] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-01), LessThanOrEqual(d_date,1999-04-02), IsNotNull(d_date_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 8] -Input [2]: [d_date_sk#17, d_date#18] +Input [2]: [d_date_sk#14, d_date#15] (22) Filter [codegen id : 8] -Input [2]: [d_date_sk#17, d_date#18] -Condition : (((isnotnull(d_date#18) AND (d_date#18 >= 1999-02-01)) AND (d_date#18 <= 1999-04-02)) AND isnotnull(d_date_sk#17)) +Input [2]: [d_date_sk#14, d_date#15] +Condition : (((isnotnull(d_date#15) AND (d_date#15 >= 1999-02-01)) AND (d_date#15 <= 1999-04-02)) AND isnotnull(d_date_sk#14)) (23) Project [codegen id : 8] -Output [1]: [d_date_sk#17] -Input [2]: [d_date_sk#17, d_date#18] +Output [1]: [d_date_sk#14] +Input [2]: [d_date_sk#14, d_date#15] (24) BroadcastExchange -Input [1]: [d_date_sk#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#19] +Input [1]: [d_date_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (25) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ws_ship_date_sk#1] -Right keys [1]: [d_date_sk#17] +Right keys [1]: [d_date_sk#14] Join condition: None (26) Project [codegen id : 11] Output [5]: [ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] -Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, d_date_sk#17] +Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, d_date_sk#14] (27) Scan parquet default.customer_address -Output [2]: [ca_address_sk#20, ca_state#21] +Output [2]: [ca_address_sk#16, ca_state#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 9] -Input [2]: [ca_address_sk#20, ca_state#21] +Input [2]: [ca_address_sk#16, ca_state#17] (29) Filter [codegen id : 9] -Input [2]: [ca_address_sk#20, ca_state#21] -Condition : ((isnotnull(ca_state#21) AND (ca_state#21 = IL)) AND isnotnull(ca_address_sk#20)) +Input [2]: [ca_address_sk#16, ca_state#17] +Condition : ((isnotnull(ca_state#17) AND (ca_state#17 = IL)) AND isnotnull(ca_address_sk#16)) (30) Project [codegen id : 9] -Output [1]: [ca_address_sk#20] -Input [2]: [ca_address_sk#20, ca_state#21] +Output [1]: [ca_address_sk#16] +Input [2]: [ca_address_sk#16, ca_state#17] (31) BroadcastExchange -Input [1]: [ca_address_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [ca_address_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (32) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ws_ship_addr_sk#2] -Right keys [1]: [ca_address_sk#20] +Right keys [1]: [ca_address_sk#16] Join condition: None (33) Project [codegen id : 11] Output [4]: [ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] -Input [6]: [ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ca_address_sk#20] +Input [6]: [ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, ca_address_sk#16] (34) Scan parquet default.web_site -Output [2]: [web_site_sk#23, web_company_name#24] +Output [2]: [web_site_sk#18, web_company_name#19] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri ), IsNotNull(web_site_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 10] -Input [2]: [web_site_sk#23, web_company_name#24] +Input [2]: [web_site_sk#18, web_company_name#19] (36) Filter [codegen id : 10] -Input [2]: [web_site_sk#23, web_company_name#24] -Condition : ((isnotnull(web_company_name#24) AND (web_company_name#24 = pri )) AND isnotnull(web_site_sk#23)) +Input [2]: [web_site_sk#18, web_company_name#19] +Condition : ((isnotnull(web_company_name#19) AND (web_company_name#19 = pri )) AND isnotnull(web_site_sk#18)) (37) Project [codegen id : 10] -Output [1]: [web_site_sk#23] -Input [2]: [web_site_sk#23, web_company_name#24] +Output [1]: [web_site_sk#18] +Input [2]: [web_site_sk#18, web_company_name#19] (38) BroadcastExchange -Input [1]: [web_site_sk#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [web_site_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] (39) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ws_web_site_sk#3] -Right keys [1]: [web_site_sk#23] +Right keys [1]: [web_site_sk#18] Join condition: None (40) Project [codegen id : 11] Output [3]: [ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] -Input [5]: [ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, web_site_sk#23] +Input [5]: [ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7, web_site_sk#18] (41) HashAggregate [codegen id : 11] Input [3]: [ws_order_number#5, ws_ext_ship_cost#6, ws_net_profit#7] Keys [1]: [ws_order_number#5] Functions [2]: [partial_sum(UnscaledValue(ws_ext_ship_cost#6)), partial_sum(UnscaledValue(ws_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#26, sum(UnscaledValue(ws_net_profit#7))#27] -Results [3]: [ws_order_number#5, sum#28, sum#29] +Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#20, sum(UnscaledValue(ws_net_profit#7))#21] +Results [3]: [ws_order_number#5, sum#22, sum#23] (42) HashAggregate [codegen id : 11] -Input [3]: [ws_order_number#5, sum#28, sum#29] +Input [3]: [ws_order_number#5, sum#22, sum#23] Keys [1]: [ws_order_number#5] Functions [2]: [merge_sum(UnscaledValue(ws_ext_ship_cost#6)), merge_sum(UnscaledValue(ws_net_profit#7))] -Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#26, sum(UnscaledValue(ws_net_profit#7))#27] -Results [3]: [ws_order_number#5, sum#28, sum#29] +Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#20, sum(UnscaledValue(ws_net_profit#7))#21] +Results [3]: [ws_order_number#5, sum#22, sum#23] (43) HashAggregate [codegen id : 11] -Input [3]: [ws_order_number#5, sum#28, sum#29] +Input [3]: [ws_order_number#5, sum#22, sum#23] Keys: [] Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#6)), merge_sum(UnscaledValue(ws_net_profit#7)), partial_count(distinct ws_order_number#5)] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#26, sum(UnscaledValue(ws_net_profit#7))#27, count(ws_order_number#5)#30] -Results [3]: [sum#28, sum#29, count#31] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#20, sum(UnscaledValue(ws_net_profit#7))#21, count(ws_order_number#5)#24] +Results [3]: [sum#22, sum#23, count#25] (44) Exchange -Input [3]: [sum#28, sum#29, count#31] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#32] +Input [3]: [sum#22, sum#23, count#25] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (45) HashAggregate [codegen id : 12] -Input [3]: [sum#28, sum#29, count#31] +Input [3]: [sum#22, sum#23, count#25] Keys: [] Functions [3]: [sum(UnscaledValue(ws_ext_ship_cost#6)), sum(UnscaledValue(ws_net_profit#7)), count(distinct ws_order_number#5)] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#26, sum(UnscaledValue(ws_net_profit#7))#27, count(ws_order_number#5)#30] -Results [3]: [count(ws_order_number#5)#30 AS order count #33, MakeDecimal(sum(UnscaledValue(ws_ext_ship_cost#6))#26,17,2) AS total shipping cost #34, MakeDecimal(sum(UnscaledValue(ws_net_profit#7))#27,17,2) AS total net profit #35] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#6))#20, sum(UnscaledValue(ws_net_profit#7))#21, count(ws_order_number#5)#24] +Results [3]: [count(ws_order_number#5)#24 AS order count #26, MakeDecimal(sum(UnscaledValue(ws_ext_ship_cost#6))#20,17,2) AS total shipping cost #27, MakeDecimal(sum(UnscaledValue(ws_net_profit#7))#21,17,2) AS total net profit #28] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95.sf100/explain.txt index bb33ec30ccebf..d5fb05ec563f2 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95.sf100/explain.txt @@ -78,242 +78,242 @@ Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_num (5) Exchange Input [6]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] -Arguments: hashpartitioning(ws_order_number#4, 5), ENSURE_REQUIREMENTS, [id=#14] +Arguments: hashpartitioning(ws_order_number#4, 5), ENSURE_REQUIREMENTS, [plan_id=1] (6) Sort [codegen id : 2] Input [6]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Arguments: [ws_order_number#4 ASC NULLS FIRST], false, 0 (7) Scan parquet default.web_sales -Output [3]: [ws_warehouse_sk#15, ws_order_number#16, ws_sold_date_sk#17] +Output [3]: [ws_warehouse_sk#14, ws_order_number#15, ws_sold_date_sk#16] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] PushedFilters: [IsNotNull(ws_order_number), IsNotNull(ws_warehouse_sk)] ReadSchema: struct (8) ColumnarToRow [codegen id : 3] -Input [3]: [ws_warehouse_sk#15, ws_order_number#16, ws_sold_date_sk#17] +Input [3]: [ws_warehouse_sk#14, ws_order_number#15, ws_sold_date_sk#16] (9) Filter [codegen id : 3] -Input [3]: [ws_warehouse_sk#15, ws_order_number#16, ws_sold_date_sk#17] -Condition : (isnotnull(ws_order_number#16) AND isnotnull(ws_warehouse_sk#15)) +Input [3]: [ws_warehouse_sk#14, ws_order_number#15, ws_sold_date_sk#16] +Condition : (isnotnull(ws_order_number#15) AND isnotnull(ws_warehouse_sk#14)) (10) Project [codegen id : 3] -Output [2]: [ws_warehouse_sk#15, ws_order_number#16] -Input [3]: [ws_warehouse_sk#15, ws_order_number#16, ws_sold_date_sk#17] +Output [2]: [ws_warehouse_sk#14, ws_order_number#15] +Input [3]: [ws_warehouse_sk#14, ws_order_number#15, ws_sold_date_sk#16] (11) Exchange -Input [2]: [ws_warehouse_sk#15, ws_order_number#16] -Arguments: hashpartitioning(ws_order_number#16, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [2]: [ws_warehouse_sk#14, ws_order_number#15] +Arguments: hashpartitioning(ws_order_number#15, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 4] -Input [2]: [ws_warehouse_sk#15, ws_order_number#16] -Arguments: [ws_order_number#16 ASC NULLS FIRST], false, 0 +Input [2]: [ws_warehouse_sk#14, ws_order_number#15] +Arguments: [ws_order_number#15 ASC NULLS FIRST], false, 0 (13) ReusedExchange [Reuses operator id: 11] -Output [2]: [ws_warehouse_sk#19, ws_order_number#20] +Output [2]: [ws_warehouse_sk#17, ws_order_number#18] (14) Sort [codegen id : 6] -Input [2]: [ws_warehouse_sk#19, ws_order_number#20] -Arguments: [ws_order_number#20 ASC NULLS FIRST], false, 0 +Input [2]: [ws_warehouse_sk#17, ws_order_number#18] +Arguments: [ws_order_number#18 ASC NULLS FIRST], false, 0 (15) SortMergeJoin [codegen id : 7] -Left keys [1]: [ws_order_number#16] -Right keys [1]: [ws_order_number#20] -Join condition: NOT (ws_warehouse_sk#15 = ws_warehouse_sk#19) +Left keys [1]: [ws_order_number#15] +Right keys [1]: [ws_order_number#18] +Join condition: NOT (ws_warehouse_sk#14 = ws_warehouse_sk#17) (16) Project [codegen id : 7] -Output [1]: [ws_order_number#16] -Input [4]: [ws_warehouse_sk#15, ws_order_number#16, ws_warehouse_sk#19, ws_order_number#20] +Output [1]: [ws_order_number#15] +Input [4]: [ws_warehouse_sk#14, ws_order_number#15, ws_warehouse_sk#17, ws_order_number#18] (17) SortMergeJoin [codegen id : 8] Left keys [1]: [ws_order_number#4] -Right keys [1]: [ws_order_number#16] +Right keys [1]: [ws_order_number#15] Join condition: None (18) Scan parquet default.web_returns -Output [2]: [wr_order_number#21, wr_returned_date_sk#22] +Output [2]: [wr_order_number#19, wr_returned_date_sk#20] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_order_number)] ReadSchema: struct (19) ColumnarToRow [codegen id : 9] -Input [2]: [wr_order_number#21, wr_returned_date_sk#22] +Input [2]: [wr_order_number#19, wr_returned_date_sk#20] (20) Filter [codegen id : 9] -Input [2]: [wr_order_number#21, wr_returned_date_sk#22] -Condition : isnotnull(wr_order_number#21) +Input [2]: [wr_order_number#19, wr_returned_date_sk#20] +Condition : isnotnull(wr_order_number#19) (21) Project [codegen id : 9] -Output [1]: [wr_order_number#21] -Input [2]: [wr_order_number#21, wr_returned_date_sk#22] +Output [1]: [wr_order_number#19] +Input [2]: [wr_order_number#19, wr_returned_date_sk#20] (22) Exchange -Input [1]: [wr_order_number#21] -Arguments: hashpartitioning(wr_order_number#21, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [1]: [wr_order_number#19] +Arguments: hashpartitioning(wr_order_number#19, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) Sort [codegen id : 10] -Input [1]: [wr_order_number#21] -Arguments: [wr_order_number#21 ASC NULLS FIRST], false, 0 +Input [1]: [wr_order_number#19] +Arguments: [wr_order_number#19 ASC NULLS FIRST], false, 0 (24) ReusedExchange [Reuses operator id: 11] -Output [2]: [ws_warehouse_sk#15, ws_order_number#16] +Output [2]: [ws_warehouse_sk#14, ws_order_number#15] (25) Sort [codegen id : 12] -Input [2]: [ws_warehouse_sk#15, ws_order_number#16] -Arguments: [ws_order_number#16 ASC NULLS FIRST], false, 0 +Input [2]: [ws_warehouse_sk#14, ws_order_number#15] +Arguments: [ws_order_number#15 ASC NULLS FIRST], false, 0 (26) SortMergeJoin [codegen id : 13] -Left keys [1]: [wr_order_number#21] -Right keys [1]: [ws_order_number#16] +Left keys [1]: [wr_order_number#19] +Right keys [1]: [ws_order_number#15] Join condition: None (27) ReusedExchange [Reuses operator id: 11] -Output [2]: [ws_warehouse_sk#19, ws_order_number#20] +Output [2]: [ws_warehouse_sk#17, ws_order_number#18] (28) Sort [codegen id : 15] -Input [2]: [ws_warehouse_sk#19, ws_order_number#20] -Arguments: [ws_order_number#20 ASC NULLS FIRST], false, 0 +Input [2]: [ws_warehouse_sk#17, ws_order_number#18] +Arguments: [ws_order_number#18 ASC NULLS FIRST], false, 0 (29) SortMergeJoin [codegen id : 16] -Left keys [1]: [ws_order_number#16] -Right keys [1]: [ws_order_number#20] -Join condition: NOT (ws_warehouse_sk#15 = ws_warehouse_sk#19) +Left keys [1]: [ws_order_number#15] +Right keys [1]: [ws_order_number#18] +Join condition: NOT (ws_warehouse_sk#14 = ws_warehouse_sk#17) (30) Project [codegen id : 16] -Output [1]: [wr_order_number#21] -Input [5]: [wr_order_number#21, ws_warehouse_sk#15, ws_order_number#16, ws_warehouse_sk#19, ws_order_number#20] +Output [1]: [wr_order_number#19] +Input [5]: [wr_order_number#19, ws_warehouse_sk#14, ws_order_number#15, ws_warehouse_sk#17, ws_order_number#18] (31) SortMergeJoin [codegen id : 20] Left keys [1]: [ws_order_number#4] -Right keys [1]: [wr_order_number#21] +Right keys [1]: [wr_order_number#19] Join condition: None (32) Scan parquet default.customer_address -Output [2]: [ca_address_sk#24, ca_state#25] +Output [2]: [ca_address_sk#21, ca_state#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct (33) ColumnarToRow [codegen id : 17] -Input [2]: [ca_address_sk#24, ca_state#25] +Input [2]: [ca_address_sk#21, ca_state#22] (34) Filter [codegen id : 17] -Input [2]: [ca_address_sk#24, ca_state#25] -Condition : ((isnotnull(ca_state#25) AND (ca_state#25 = IL)) AND isnotnull(ca_address_sk#24)) +Input [2]: [ca_address_sk#21, ca_state#22] +Condition : ((isnotnull(ca_state#22) AND (ca_state#22 = IL)) AND isnotnull(ca_address_sk#21)) (35) Project [codegen id : 17] -Output [1]: [ca_address_sk#24] -Input [2]: [ca_address_sk#24, ca_state#25] +Output [1]: [ca_address_sk#21] +Input [2]: [ca_address_sk#21, ca_state#22] (36) BroadcastExchange -Input [1]: [ca_address_sk#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [1]: [ca_address_sk#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (37) BroadcastHashJoin [codegen id : 20] Left keys [1]: [ws_ship_addr_sk#2] -Right keys [1]: [ca_address_sk#24] +Right keys [1]: [ca_address_sk#21] Join condition: None (38) Project [codegen id : 20] Output [5]: [ws_ship_date_sk#1, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] -Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ca_address_sk#24] +Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ca_address_sk#21] (39) Scan parquet default.web_site -Output [2]: [web_site_sk#27, web_company_name#28] +Output [2]: [web_site_sk#23, web_company_name#24] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri ), IsNotNull(web_site_sk)] ReadSchema: struct (40) ColumnarToRow [codegen id : 18] -Input [2]: [web_site_sk#27, web_company_name#28] +Input [2]: [web_site_sk#23, web_company_name#24] (41) Filter [codegen id : 18] -Input [2]: [web_site_sk#27, web_company_name#28] -Condition : ((isnotnull(web_company_name#28) AND (web_company_name#28 = pri )) AND isnotnull(web_site_sk#27)) +Input [2]: [web_site_sk#23, web_company_name#24] +Condition : ((isnotnull(web_company_name#24) AND (web_company_name#24 = pri )) AND isnotnull(web_site_sk#23)) (42) Project [codegen id : 18] -Output [1]: [web_site_sk#27] -Input [2]: [web_site_sk#27, web_company_name#28] +Output [1]: [web_site_sk#23] +Input [2]: [web_site_sk#23, web_company_name#24] (43) BroadcastExchange -Input [1]: [web_site_sk#27] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#29] +Input [1]: [web_site_sk#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (44) BroadcastHashJoin [codegen id : 20] Left keys [1]: [ws_web_site_sk#3] -Right keys [1]: [web_site_sk#27] +Right keys [1]: [web_site_sk#23] Join condition: None (45) Project [codegen id : 20] Output [4]: [ws_ship_date_sk#1, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] -Input [6]: [ws_ship_date_sk#1, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, web_site_sk#27] +Input [6]: [ws_ship_date_sk#1, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, web_site_sk#23] (46) Scan parquet default.date_dim -Output [2]: [d_date_sk#30, d_date#31] +Output [2]: [d_date_sk#25, d_date#26] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-01), LessThanOrEqual(d_date,1999-04-02), IsNotNull(d_date_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 19] -Input [2]: [d_date_sk#30, d_date#31] +Input [2]: [d_date_sk#25, d_date#26] (48) Filter [codegen id : 19] -Input [2]: [d_date_sk#30, d_date#31] -Condition : (((isnotnull(d_date#31) AND (d_date#31 >= 1999-02-01)) AND (d_date#31 <= 1999-04-02)) AND isnotnull(d_date_sk#30)) +Input [2]: [d_date_sk#25, d_date#26] +Condition : (((isnotnull(d_date#26) AND (d_date#26 >= 1999-02-01)) AND (d_date#26 <= 1999-04-02)) AND isnotnull(d_date_sk#25)) (49) Project [codegen id : 19] -Output [1]: [d_date_sk#30] -Input [2]: [d_date_sk#30, d_date#31] +Output [1]: [d_date_sk#25] +Input [2]: [d_date_sk#25, d_date#26] (50) BroadcastExchange -Input [1]: [d_date_sk#30] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#32] +Input [1]: [d_date_sk#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] (51) BroadcastHashJoin [codegen id : 20] Left keys [1]: [ws_ship_date_sk#1] -Right keys [1]: [d_date_sk#30] +Right keys [1]: [d_date_sk#25] Join condition: None (52) Project [codegen id : 20] Output [3]: [ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] -Input [5]: [ws_ship_date_sk#1, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, d_date_sk#30] +Input [5]: [ws_ship_date_sk#1, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, d_date_sk#25] (53) HashAggregate [codegen id : 20] Input [3]: [ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Keys [1]: [ws_order_number#4] Functions [2]: [partial_sum(UnscaledValue(ws_ext_ship_cost#5)), partial_sum(UnscaledValue(ws_net_profit#6))] -Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34] -Results [3]: [ws_order_number#4, sum#35, sum#36] +Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#27, sum(UnscaledValue(ws_net_profit#6))#28] +Results [3]: [ws_order_number#4, sum#29, sum#30] (54) HashAggregate [codegen id : 20] -Input [3]: [ws_order_number#4, sum#35, sum#36] +Input [3]: [ws_order_number#4, sum#29, sum#30] Keys [1]: [ws_order_number#4] Functions [2]: [merge_sum(UnscaledValue(ws_ext_ship_cost#5)), merge_sum(UnscaledValue(ws_net_profit#6))] -Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34] -Results [3]: [ws_order_number#4, sum#35, sum#36] +Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#27, sum(UnscaledValue(ws_net_profit#6))#28] +Results [3]: [ws_order_number#4, sum#29, sum#30] (55) HashAggregate [codegen id : 20] -Input [3]: [ws_order_number#4, sum#35, sum#36] +Input [3]: [ws_order_number#4, sum#29, sum#30] Keys: [] Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#5)), merge_sum(UnscaledValue(ws_net_profit#6)), partial_count(distinct ws_order_number#4)] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34, count(ws_order_number#4)#37] -Results [3]: [sum#35, sum#36, count#38] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#27, sum(UnscaledValue(ws_net_profit#6))#28, count(ws_order_number#4)#31] +Results [3]: [sum#29, sum#30, count#32] (56) Exchange -Input [3]: [sum#35, sum#36, count#38] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#39] +Input [3]: [sum#29, sum#30, count#32] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (57) HashAggregate [codegen id : 21] -Input [3]: [sum#35, sum#36, count#38] +Input [3]: [sum#29, sum#30, count#32] Keys: [] Functions [3]: [sum(UnscaledValue(ws_ext_ship_cost#5)), sum(UnscaledValue(ws_net_profit#6)), count(distinct ws_order_number#4)] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, sum(UnscaledValue(ws_net_profit#6))#34, count(ws_order_number#4)#37] -Results [3]: [count(ws_order_number#4)#37 AS order count #40, MakeDecimal(sum(UnscaledValue(ws_ext_ship_cost#5))#33,17,2) AS total shipping cost #41, MakeDecimal(sum(UnscaledValue(ws_net_profit#6))#34,17,2) AS total net profit #42] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#27, sum(UnscaledValue(ws_net_profit#6))#28, count(ws_order_number#4)#31] +Results [3]: [count(ws_order_number#4)#31 AS order count #33, MakeDecimal(sum(UnscaledValue(ws_ext_ship_cost#5))#27,17,2) AS total shipping cost #34, MakeDecimal(sum(UnscaledValue(ws_net_profit#6))#28,17,2) AS total net profit #35] ===== Subqueries ===== @@ -328,40 +328,40 @@ ObjectHashAggregate (64) (58) Scan parquet default.customer_address -Output [2]: [ca_address_sk#24, ca_state#25] +Output [2]: [ca_address_sk#21, ca_state#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct (59) ColumnarToRow [codegen id : 1] -Input [2]: [ca_address_sk#24, ca_state#25] +Input [2]: [ca_address_sk#21, ca_state#22] (60) Filter [codegen id : 1] -Input [2]: [ca_address_sk#24, ca_state#25] -Condition : ((isnotnull(ca_state#25) AND (ca_state#25 = IL)) AND isnotnull(ca_address_sk#24)) +Input [2]: [ca_address_sk#21, ca_state#22] +Condition : ((isnotnull(ca_state#22) AND (ca_state#22 = IL)) AND isnotnull(ca_address_sk#21)) (61) Project [codegen id : 1] -Output [1]: [ca_address_sk#24] -Input [2]: [ca_address_sk#24, ca_state#25] +Output [1]: [ca_address_sk#21] +Input [2]: [ca_address_sk#21, ca_state#22] (62) ObjectHashAggregate -Input [1]: [ca_address_sk#24] +Input [1]: [ca_address_sk#21] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#24, 42), 17961, 143688, 0, 0)] -Aggregate Attributes [1]: [buf#43] -Results [1]: [buf#44] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 17961, 143688, 0, 0)] +Aggregate Attributes [1]: [buf#36] +Results [1]: [buf#37] (63) Exchange -Input [1]: [buf#44] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#45] +Input [1]: [buf#37] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8] (64) ObjectHashAggregate -Input [1]: [buf#44] +Input [1]: [buf#37] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#24, 42), 17961, 143688, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#24, 42), 17961, 143688, 0, 0)#46] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#24, 42), 17961, 143688, 0, 0)#46 AS bloomFilter#47] +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 17961, 143688, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 17961, 143688, 0, 0)#38] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 17961, 143688, 0, 0)#38 AS bloomFilter#39] Subquery:2 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#10, [id=#11] ObjectHashAggregate (71) @@ -374,40 +374,40 @@ ObjectHashAggregate (71) (65) Scan parquet default.web_site -Output [2]: [web_site_sk#27, web_company_name#28] +Output [2]: [web_site_sk#23, web_company_name#24] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri ), IsNotNull(web_site_sk)] ReadSchema: struct (66) ColumnarToRow [codegen id : 1] -Input [2]: [web_site_sk#27, web_company_name#28] +Input [2]: [web_site_sk#23, web_company_name#24] (67) Filter [codegen id : 1] -Input [2]: [web_site_sk#27, web_company_name#28] -Condition : ((isnotnull(web_company_name#28) AND (web_company_name#28 = pri )) AND isnotnull(web_site_sk#27)) +Input [2]: [web_site_sk#23, web_company_name#24] +Condition : ((isnotnull(web_company_name#24) AND (web_company_name#24 = pri )) AND isnotnull(web_site_sk#23)) (68) Project [codegen id : 1] -Output [1]: [web_site_sk#27] -Input [2]: [web_site_sk#27, web_company_name#28] +Output [1]: [web_site_sk#23] +Input [2]: [web_site_sk#23, web_company_name#24] (69) ObjectHashAggregate -Input [1]: [web_site_sk#27] +Input [1]: [web_site_sk#23] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 32, 0, 0)] -Aggregate Attributes [1]: [buf#48] -Results [1]: [buf#49] +Functions [1]: [partial_bloom_filter_agg(xxhash64(web_site_sk#23, 42), 4, 32, 0, 0)] +Aggregate Attributes [1]: [buf#40] +Results [1]: [buf#41] (70) Exchange -Input [1]: [buf#49] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#50] +Input [1]: [buf#41] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=9] (71) ObjectHashAggregate -Input [1]: [buf#49] +Input [1]: [buf#41] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 32, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 32, 0, 0)#51] -Results [1]: [bloom_filter_agg(xxhash64(web_site_sk#27, 42), 4, 32, 0, 0)#51 AS bloomFilter#52] +Functions [1]: [bloom_filter_agg(xxhash64(web_site_sk#23, 42), 4, 32, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(web_site_sk#23, 42), 4, 32, 0, 0)#42] +Results [1]: [bloom_filter_agg(xxhash64(web_site_sk#23, 42), 4, 32, 0, 0)#42 AS bloomFilter#43] Subquery:3 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#12, [id=#13] ObjectHashAggregate (78) @@ -420,39 +420,39 @@ ObjectHashAggregate (78) (72) Scan parquet default.date_dim -Output [2]: [d_date_sk#30, d_date#31] +Output [2]: [d_date_sk#25, d_date#26] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-01), LessThanOrEqual(d_date,1999-04-02), IsNotNull(d_date_sk)] ReadSchema: struct (73) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#30, d_date#31] +Input [2]: [d_date_sk#25, d_date#26] (74) Filter [codegen id : 1] -Input [2]: [d_date_sk#30, d_date#31] -Condition : (((isnotnull(d_date#31) AND (d_date#31 >= 1999-02-01)) AND (d_date#31 <= 1999-04-02)) AND isnotnull(d_date_sk#30)) +Input [2]: [d_date_sk#25, d_date#26] +Condition : (((isnotnull(d_date#26) AND (d_date#26 >= 1999-02-01)) AND (d_date#26 <= 1999-04-02)) AND isnotnull(d_date_sk#25)) (75) Project [codegen id : 1] -Output [1]: [d_date_sk#30] -Input [2]: [d_date_sk#30, d_date#31] +Output [1]: [d_date_sk#25] +Input [2]: [d_date_sk#25, d_date#26] (76) ObjectHashAggregate -Input [1]: [d_date_sk#30] +Input [1]: [d_date_sk#25] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(d_date_sk#30, 42), 73049, 584392, 0, 0)] -Aggregate Attributes [1]: [buf#53] -Results [1]: [buf#54] +Functions [1]: [partial_bloom_filter_agg(xxhash64(d_date_sk#25, 42), 73049, 584392, 0, 0)] +Aggregate Attributes [1]: [buf#44] +Results [1]: [buf#45] (77) Exchange -Input [1]: [buf#54] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#55] +Input [1]: [buf#45] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10] (78) ObjectHashAggregate -Input [1]: [buf#54] +Input [1]: [buf#45] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(d_date_sk#30, 42), 73049, 584392, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#30, 42), 73049, 584392, 0, 0)#56] -Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#30, 42), 73049, 584392, 0, 0)#56 AS bloomFilter#57] +Functions [1]: [bloom_filter_agg(xxhash64(d_date_sk#25, 42), 73049, 584392, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(d_date_sk#25, 42), 73049, 584392, 0, 0)#46] +Results [1]: [bloom_filter_agg(xxhash64(d_date_sk#25, 42), 73049, 584392, 0, 0)#46 AS bloomFilter#47] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95/explain.txt index 79519bfde99f6..a73394d626dce 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q95/explain.txt @@ -79,244 +79,244 @@ Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_num (5) Exchange Input [6]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] -Arguments: hashpartitioning(ws_order_number#4, 5), ENSURE_REQUIREMENTS, [id=#8] +Arguments: hashpartitioning(ws_order_number#4, 5), ENSURE_REQUIREMENTS, [plan_id=1] (6) Sort [codegen id : 2] Input [6]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Arguments: [ws_order_number#4 ASC NULLS FIRST], false, 0 (7) Scan parquet default.web_sales -Output [3]: [ws_warehouse_sk#9, ws_order_number#10, ws_sold_date_sk#11] +Output [3]: [ws_warehouse_sk#8, ws_order_number#9, ws_sold_date_sk#10] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] PushedFilters: [IsNotNull(ws_order_number), IsNotNull(ws_warehouse_sk)] ReadSchema: struct (8) ColumnarToRow [codegen id : 3] -Input [3]: [ws_warehouse_sk#9, ws_order_number#10, ws_sold_date_sk#11] +Input [3]: [ws_warehouse_sk#8, ws_order_number#9, ws_sold_date_sk#10] (9) Filter [codegen id : 3] -Input [3]: [ws_warehouse_sk#9, ws_order_number#10, ws_sold_date_sk#11] -Condition : (isnotnull(ws_order_number#10) AND isnotnull(ws_warehouse_sk#9)) +Input [3]: [ws_warehouse_sk#8, ws_order_number#9, ws_sold_date_sk#10] +Condition : (isnotnull(ws_order_number#9) AND isnotnull(ws_warehouse_sk#8)) (10) Project [codegen id : 3] -Output [2]: [ws_warehouse_sk#9, ws_order_number#10] -Input [3]: [ws_warehouse_sk#9, ws_order_number#10, ws_sold_date_sk#11] +Output [2]: [ws_warehouse_sk#8, ws_order_number#9] +Input [3]: [ws_warehouse_sk#8, ws_order_number#9, ws_sold_date_sk#10] (11) Exchange -Input [2]: [ws_warehouse_sk#9, ws_order_number#10] -Arguments: hashpartitioning(ws_order_number#10, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [2]: [ws_warehouse_sk#8, ws_order_number#9] +Arguments: hashpartitioning(ws_order_number#9, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 4] -Input [2]: [ws_warehouse_sk#9, ws_order_number#10] -Arguments: [ws_order_number#10 ASC NULLS FIRST], false, 0 +Input [2]: [ws_warehouse_sk#8, ws_order_number#9] +Arguments: [ws_order_number#9 ASC NULLS FIRST], false, 0 (13) ReusedExchange [Reuses operator id: 11] -Output [2]: [ws_warehouse_sk#13, ws_order_number#14] +Output [2]: [ws_warehouse_sk#11, ws_order_number#12] (14) Sort [codegen id : 6] -Input [2]: [ws_warehouse_sk#13, ws_order_number#14] -Arguments: [ws_order_number#14 ASC NULLS FIRST], false, 0 +Input [2]: [ws_warehouse_sk#11, ws_order_number#12] +Arguments: [ws_order_number#12 ASC NULLS FIRST], false, 0 (15) SortMergeJoin [codegen id : 7] -Left keys [1]: [ws_order_number#10] -Right keys [1]: [ws_order_number#14] -Join condition: NOT (ws_warehouse_sk#9 = ws_warehouse_sk#13) +Left keys [1]: [ws_order_number#9] +Right keys [1]: [ws_order_number#12] +Join condition: NOT (ws_warehouse_sk#8 = ws_warehouse_sk#11) (16) Project [codegen id : 7] -Output [1]: [ws_order_number#10] -Input [4]: [ws_warehouse_sk#9, ws_order_number#10, ws_warehouse_sk#13, ws_order_number#14] +Output [1]: [ws_order_number#9] +Input [4]: [ws_warehouse_sk#8, ws_order_number#9, ws_warehouse_sk#11, ws_order_number#12] (17) SortMergeJoin [codegen id : 8] Left keys [1]: [ws_order_number#4] -Right keys [1]: [ws_order_number#10] +Right keys [1]: [ws_order_number#9] Join condition: None (18) Scan parquet default.web_returns -Output [2]: [wr_order_number#15, wr_returned_date_sk#16] +Output [2]: [wr_order_number#13, wr_returned_date_sk#14] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_order_number)] ReadSchema: struct (19) ColumnarToRow [codegen id : 9] -Input [2]: [wr_order_number#15, wr_returned_date_sk#16] +Input [2]: [wr_order_number#13, wr_returned_date_sk#14] (20) Filter [codegen id : 9] -Input [2]: [wr_order_number#15, wr_returned_date_sk#16] -Condition : isnotnull(wr_order_number#15) +Input [2]: [wr_order_number#13, wr_returned_date_sk#14] +Condition : isnotnull(wr_order_number#13) (21) Project [codegen id : 9] -Output [1]: [wr_order_number#15] -Input [2]: [wr_order_number#15, wr_returned_date_sk#16] +Output [1]: [wr_order_number#13] +Input [2]: [wr_order_number#13, wr_returned_date_sk#14] (22) Exchange -Input [1]: [wr_order_number#15] -Arguments: hashpartitioning(wr_order_number#15, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [1]: [wr_order_number#13] +Arguments: hashpartitioning(wr_order_number#13, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) Sort [codegen id : 10] -Input [1]: [wr_order_number#15] -Arguments: [wr_order_number#15 ASC NULLS FIRST], false, 0 +Input [1]: [wr_order_number#13] +Arguments: [wr_order_number#13 ASC NULLS FIRST], false, 0 (24) ReusedExchange [Reuses operator id: 11] -Output [2]: [ws_warehouse_sk#9, ws_order_number#10] +Output [2]: [ws_warehouse_sk#8, ws_order_number#9] (25) Sort [codegen id : 12] -Input [2]: [ws_warehouse_sk#9, ws_order_number#10] -Arguments: [ws_order_number#10 ASC NULLS FIRST], false, 0 +Input [2]: [ws_warehouse_sk#8, ws_order_number#9] +Arguments: [ws_order_number#9 ASC NULLS FIRST], false, 0 (26) ReusedExchange [Reuses operator id: 11] -Output [2]: [ws_warehouse_sk#13, ws_order_number#14] +Output [2]: [ws_warehouse_sk#11, ws_order_number#12] (27) Sort [codegen id : 14] -Input [2]: [ws_warehouse_sk#13, ws_order_number#14] -Arguments: [ws_order_number#14 ASC NULLS FIRST], false, 0 +Input [2]: [ws_warehouse_sk#11, ws_order_number#12] +Arguments: [ws_order_number#12 ASC NULLS FIRST], false, 0 (28) SortMergeJoin [codegen id : 15] -Left keys [1]: [ws_order_number#10] -Right keys [1]: [ws_order_number#14] -Join condition: NOT (ws_warehouse_sk#9 = ws_warehouse_sk#13) +Left keys [1]: [ws_order_number#9] +Right keys [1]: [ws_order_number#12] +Join condition: NOT (ws_warehouse_sk#8 = ws_warehouse_sk#11) (29) Project [codegen id : 15] -Output [1]: [ws_order_number#10] -Input [4]: [ws_warehouse_sk#9, ws_order_number#10, ws_warehouse_sk#13, ws_order_number#14] +Output [1]: [ws_order_number#9] +Input [4]: [ws_warehouse_sk#8, ws_order_number#9, ws_warehouse_sk#11, ws_order_number#12] (30) SortMergeJoin [codegen id : 16] -Left keys [1]: [wr_order_number#15] -Right keys [1]: [ws_order_number#10] +Left keys [1]: [wr_order_number#13] +Right keys [1]: [ws_order_number#9] Join condition: None (31) Project [codegen id : 16] -Output [1]: [wr_order_number#15] -Input [2]: [wr_order_number#15, ws_order_number#10] +Output [1]: [wr_order_number#13] +Input [2]: [wr_order_number#13, ws_order_number#9] (32) SortMergeJoin [codegen id : 20] Left keys [1]: [ws_order_number#4] -Right keys [1]: [wr_order_number#15] +Right keys [1]: [wr_order_number#13] Join condition: None (33) Scan parquet default.date_dim -Output [2]: [d_date_sk#18, d_date#19] +Output [2]: [d_date_sk#15, d_date#16] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-01), LessThanOrEqual(d_date,1999-04-02), IsNotNull(d_date_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 17] -Input [2]: [d_date_sk#18, d_date#19] +Input [2]: [d_date_sk#15, d_date#16] (35) Filter [codegen id : 17] -Input [2]: [d_date_sk#18, d_date#19] -Condition : (((isnotnull(d_date#19) AND (d_date#19 >= 1999-02-01)) AND (d_date#19 <= 1999-04-02)) AND isnotnull(d_date_sk#18)) +Input [2]: [d_date_sk#15, d_date#16] +Condition : (((isnotnull(d_date#16) AND (d_date#16 >= 1999-02-01)) AND (d_date#16 <= 1999-04-02)) AND isnotnull(d_date_sk#15)) (36) Project [codegen id : 17] -Output [1]: [d_date_sk#18] -Input [2]: [d_date_sk#18, d_date#19] +Output [1]: [d_date_sk#15] +Input [2]: [d_date_sk#15, d_date#16] (37) BroadcastExchange -Input [1]: [d_date_sk#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20] +Input [1]: [d_date_sk#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (38) BroadcastHashJoin [codegen id : 20] Left keys [1]: [ws_ship_date_sk#1] -Right keys [1]: [d_date_sk#18] +Right keys [1]: [d_date_sk#15] Join condition: None (39) Project [codegen id : 20] Output [5]: [ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] -Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, d_date_sk#18] +Input [7]: [ws_ship_date_sk#1, ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, d_date_sk#15] (40) Scan parquet default.customer_address -Output [2]: [ca_address_sk#21, ca_state#22] +Output [2]: [ca_address_sk#17, ca_state#18] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_state), EqualTo(ca_state,IL), IsNotNull(ca_address_sk)] ReadSchema: struct (41) ColumnarToRow [codegen id : 18] -Input [2]: [ca_address_sk#21, ca_state#22] +Input [2]: [ca_address_sk#17, ca_state#18] (42) Filter [codegen id : 18] -Input [2]: [ca_address_sk#21, ca_state#22] -Condition : ((isnotnull(ca_state#22) AND (ca_state#22 = IL)) AND isnotnull(ca_address_sk#21)) +Input [2]: [ca_address_sk#17, ca_state#18] +Condition : ((isnotnull(ca_state#18) AND (ca_state#18 = IL)) AND isnotnull(ca_address_sk#17)) (43) Project [codegen id : 18] -Output [1]: [ca_address_sk#21] -Input [2]: [ca_address_sk#21, ca_state#22] +Output [1]: [ca_address_sk#17] +Input [2]: [ca_address_sk#17, ca_state#18] (44) BroadcastExchange -Input [1]: [ca_address_sk#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#23] +Input [1]: [ca_address_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (45) BroadcastHashJoin [codegen id : 20] Left keys [1]: [ws_ship_addr_sk#2] -Right keys [1]: [ca_address_sk#21] +Right keys [1]: [ca_address_sk#17] Join condition: None (46) Project [codegen id : 20] Output [4]: [ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] -Input [6]: [ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ca_address_sk#21] +Input [6]: [ws_ship_addr_sk#2, ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, ca_address_sk#17] (47) Scan parquet default.web_site -Output [2]: [web_site_sk#24, web_company_name#25] +Output [2]: [web_site_sk#19, web_company_name#20] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_company_name), EqualTo(web_company_name,pri ), IsNotNull(web_site_sk)] ReadSchema: struct (48) ColumnarToRow [codegen id : 19] -Input [2]: [web_site_sk#24, web_company_name#25] +Input [2]: [web_site_sk#19, web_company_name#20] (49) Filter [codegen id : 19] -Input [2]: [web_site_sk#24, web_company_name#25] -Condition : ((isnotnull(web_company_name#25) AND (web_company_name#25 = pri )) AND isnotnull(web_site_sk#24)) +Input [2]: [web_site_sk#19, web_company_name#20] +Condition : ((isnotnull(web_company_name#20) AND (web_company_name#20 = pri )) AND isnotnull(web_site_sk#19)) (50) Project [codegen id : 19] -Output [1]: [web_site_sk#24] -Input [2]: [web_site_sk#24, web_company_name#25] +Output [1]: [web_site_sk#19] +Input [2]: [web_site_sk#19, web_company_name#20] (51) BroadcastExchange -Input [1]: [web_site_sk#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [1]: [web_site_sk#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] (52) BroadcastHashJoin [codegen id : 20] Left keys [1]: [ws_web_site_sk#3] -Right keys [1]: [web_site_sk#24] +Right keys [1]: [web_site_sk#19] Join condition: None (53) Project [codegen id : 20] Output [3]: [ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] -Input [5]: [ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, web_site_sk#24] +Input [5]: [ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6, web_site_sk#19] (54) HashAggregate [codegen id : 20] Input [3]: [ws_order_number#4, ws_ext_ship_cost#5, ws_net_profit#6] Keys [1]: [ws_order_number#4] Functions [2]: [partial_sum(UnscaledValue(ws_ext_ship_cost#5)), partial_sum(UnscaledValue(ws_net_profit#6))] -Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#27, sum(UnscaledValue(ws_net_profit#6))#28] -Results [3]: [ws_order_number#4, sum#29, sum#30] +Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#21, sum(UnscaledValue(ws_net_profit#6))#22] +Results [3]: [ws_order_number#4, sum#23, sum#24] (55) HashAggregate [codegen id : 20] -Input [3]: [ws_order_number#4, sum#29, sum#30] +Input [3]: [ws_order_number#4, sum#23, sum#24] Keys [1]: [ws_order_number#4] Functions [2]: [merge_sum(UnscaledValue(ws_ext_ship_cost#5)), merge_sum(UnscaledValue(ws_net_profit#6))] -Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#27, sum(UnscaledValue(ws_net_profit#6))#28] -Results [3]: [ws_order_number#4, sum#29, sum#30] +Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#21, sum(UnscaledValue(ws_net_profit#6))#22] +Results [3]: [ws_order_number#4, sum#23, sum#24] (56) HashAggregate [codegen id : 20] -Input [3]: [ws_order_number#4, sum#29, sum#30] +Input [3]: [ws_order_number#4, sum#23, sum#24] Keys: [] Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#5)), merge_sum(UnscaledValue(ws_net_profit#6)), partial_count(distinct ws_order_number#4)] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#27, sum(UnscaledValue(ws_net_profit#6))#28, count(ws_order_number#4)#31] -Results [3]: [sum#29, sum#30, count#32] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#21, sum(UnscaledValue(ws_net_profit#6))#22, count(ws_order_number#4)#25] +Results [3]: [sum#23, sum#24, count#26] (57) Exchange -Input [3]: [sum#29, sum#30, count#32] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#33] +Input [3]: [sum#23, sum#24, count#26] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (58) HashAggregate [codegen id : 21] -Input [3]: [sum#29, sum#30, count#32] +Input [3]: [sum#23, sum#24, count#26] Keys: [] Functions [3]: [sum(UnscaledValue(ws_ext_ship_cost#5)), sum(UnscaledValue(ws_net_profit#6)), count(distinct ws_order_number#4)] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#27, sum(UnscaledValue(ws_net_profit#6))#28, count(ws_order_number#4)#31] -Results [3]: [count(ws_order_number#4)#31 AS order count #34, MakeDecimal(sum(UnscaledValue(ws_ext_ship_cost#5))#27,17,2) AS total shipping cost #35, MakeDecimal(sum(UnscaledValue(ws_net_profit#6))#28,17,2) AS total net profit #36] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_ship_cost#5))#21, sum(UnscaledValue(ws_net_profit#6))#22, count(ws_order_number#4)#25] +Results [3]: [count(ws_order_number#4)#25 AS order count #27, MakeDecimal(sum(UnscaledValue(ws_ext_ship_cost#5))#21,17,2) AS total shipping cost #28, MakeDecimal(sum(UnscaledValue(ws_net_profit#6))#22,17,2) AS total net profit #29] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q96.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q96.sf100/explain.txt index de1eaa98e4d12..7cb46fa759c55 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q96.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q96.sf100/explain.txt @@ -67,7 +67,7 @@ Input [3]: [t_time_sk#5, t_hour#6, t_minute#7] (9) BroadcastExchange Input [1]: [t_time_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_time_sk#1] @@ -79,82 +79,82 @@ Output [2]: [ss_hdemo_sk#2, ss_store_sk#3] Input [4]: [ss_sold_time_sk#1, ss_hdemo_sk#2, ss_store_sk#3, t_time_sk#5] (12) Scan parquet default.store -Output [2]: [s_store_sk#9, s_store_name#10] +Output [2]: [s_store_sk#8, s_store_name#9] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_name), EqualTo(s_store_name,ese), IsNotNull(s_store_sk)] ReadSchema: struct (13) ColumnarToRow [codegen id : 2] -Input [2]: [s_store_sk#9, s_store_name#10] +Input [2]: [s_store_sk#8, s_store_name#9] (14) Filter [codegen id : 2] -Input [2]: [s_store_sk#9, s_store_name#10] -Condition : ((isnotnull(s_store_name#10) AND (s_store_name#10 = ese)) AND isnotnull(s_store_sk#9)) +Input [2]: [s_store_sk#8, s_store_name#9] +Condition : ((isnotnull(s_store_name#9) AND (s_store_name#9 = ese)) AND isnotnull(s_store_sk#8)) (15) Project [codegen id : 2] -Output [1]: [s_store_sk#9] -Input [2]: [s_store_sk#9, s_store_name#10] +Output [1]: [s_store_sk#8] +Input [2]: [s_store_sk#8, s_store_name#9] (16) BroadcastExchange -Input [1]: [s_store_sk#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#11] +Input [1]: [s_store_sk#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#9] +Right keys [1]: [s_store_sk#8] Join condition: None (18) Project [codegen id : 4] Output [1]: [ss_hdemo_sk#2] -Input [3]: [ss_hdemo_sk#2, ss_store_sk#3, s_store_sk#9] +Input [3]: [ss_hdemo_sk#2, ss_store_sk#3, s_store_sk#8] (19) Scan parquet default.household_demographics -Output [2]: [hd_demo_sk#12, hd_dep_count#13] +Output [2]: [hd_demo_sk#10, hd_dep_count#11] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_dep_count), EqualTo(hd_dep_count,7), IsNotNull(hd_demo_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 3] -Input [2]: [hd_demo_sk#12, hd_dep_count#13] +Input [2]: [hd_demo_sk#10, hd_dep_count#11] (21) Filter [codegen id : 3] -Input [2]: [hd_demo_sk#12, hd_dep_count#13] -Condition : ((isnotnull(hd_dep_count#13) AND (hd_dep_count#13 = 7)) AND isnotnull(hd_demo_sk#12)) +Input [2]: [hd_demo_sk#10, hd_dep_count#11] +Condition : ((isnotnull(hd_dep_count#11) AND (hd_dep_count#11 = 7)) AND isnotnull(hd_demo_sk#10)) (22) Project [codegen id : 3] -Output [1]: [hd_demo_sk#12] -Input [2]: [hd_demo_sk#12, hd_dep_count#13] +Output [1]: [hd_demo_sk#10] +Input [2]: [hd_demo_sk#10, hd_dep_count#11] (23) BroadcastExchange -Input [1]: [hd_demo_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Input [1]: [hd_demo_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#12] +Right keys [1]: [hd_demo_sk#10] Join condition: None (25) Project [codegen id : 4] Output: [] -Input [2]: [ss_hdemo_sk#2, hd_demo_sk#12] +Input [2]: [ss_hdemo_sk#2, hd_demo_sk#10] (26) HashAggregate [codegen id : 4] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#15] -Results [1]: [count#16] +Aggregate Attributes [1]: [count#12] +Results [1]: [count#13] (27) Exchange -Input [1]: [count#16] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#17] +Input [1]: [count#13] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 5] -Input [1]: [count#16] +Input [1]: [count#13] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#18] -Results [1]: [count(1)#18 AS count(1)#19] +Aggregate Attributes [1]: [count(1)#14] +Results [1]: [count(1)#14 AS count(1)#15] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q96/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q96/explain.txt index 8ff4d605c2af4..eb0dd4570ce08 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q96/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q96/explain.txt @@ -67,7 +67,7 @@ Input [2]: [hd_demo_sk#5, hd_dep_count#6] (9) BroadcastExchange Input [1]: [hd_demo_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] @@ -79,82 +79,82 @@ Output [2]: [ss_sold_time_sk#1, ss_store_sk#3] Input [4]: [ss_sold_time_sk#1, ss_hdemo_sk#2, ss_store_sk#3, hd_demo_sk#5] (12) Scan parquet default.time_dim -Output [3]: [t_time_sk#8, t_hour#9, t_minute#10] +Output [3]: [t_time_sk#7, t_hour#8, t_minute#9] Batched: true Location [not included in comparison]/{warehouse_dir}/time_dim] PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,20), GreaterThanOrEqual(t_minute,30), IsNotNull(t_time_sk)] ReadSchema: struct (13) ColumnarToRow [codegen id : 2] -Input [3]: [t_time_sk#8, t_hour#9, t_minute#10] +Input [3]: [t_time_sk#7, t_hour#8, t_minute#9] (14) Filter [codegen id : 2] -Input [3]: [t_time_sk#8, t_hour#9, t_minute#10] -Condition : ((((isnotnull(t_hour#9) AND isnotnull(t_minute#10)) AND (t_hour#9 = 20)) AND (t_minute#10 >= 30)) AND isnotnull(t_time_sk#8)) +Input [3]: [t_time_sk#7, t_hour#8, t_minute#9] +Condition : ((((isnotnull(t_hour#8) AND isnotnull(t_minute#9)) AND (t_hour#8 = 20)) AND (t_minute#9 >= 30)) AND isnotnull(t_time_sk#7)) (15) Project [codegen id : 2] -Output [1]: [t_time_sk#8] -Input [3]: [t_time_sk#8, t_hour#9, t_minute#10] +Output [1]: [t_time_sk#7] +Input [3]: [t_time_sk#7, t_hour#8, t_minute#9] (16) BroadcastExchange -Input [1]: [t_time_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#11] +Input [1]: [t_time_sk#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_time_sk#1] -Right keys [1]: [t_time_sk#8] +Right keys [1]: [t_time_sk#7] Join condition: None (18) Project [codegen id : 4] Output [1]: [ss_store_sk#3] -Input [3]: [ss_sold_time_sk#1, ss_store_sk#3, t_time_sk#8] +Input [3]: [ss_sold_time_sk#1, ss_store_sk#3, t_time_sk#7] (19) Scan parquet default.store -Output [2]: [s_store_sk#12, s_store_name#13] +Output [2]: [s_store_sk#10, s_store_name#11] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_name), EqualTo(s_store_name,ese), IsNotNull(s_store_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 3] -Input [2]: [s_store_sk#12, s_store_name#13] +Input [2]: [s_store_sk#10, s_store_name#11] (21) Filter [codegen id : 3] -Input [2]: [s_store_sk#12, s_store_name#13] -Condition : ((isnotnull(s_store_name#13) AND (s_store_name#13 = ese)) AND isnotnull(s_store_sk#12)) +Input [2]: [s_store_sk#10, s_store_name#11] +Condition : ((isnotnull(s_store_name#11) AND (s_store_name#11 = ese)) AND isnotnull(s_store_sk#10)) (22) Project [codegen id : 3] -Output [1]: [s_store_sk#12] -Input [2]: [s_store_sk#12, s_store_name#13] +Output [1]: [s_store_sk#10] +Input [2]: [s_store_sk#10, s_store_name#11] (23) BroadcastExchange -Input [1]: [s_store_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Input [1]: [s_store_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#12] +Right keys [1]: [s_store_sk#10] Join condition: None (25) Project [codegen id : 4] Output: [] -Input [2]: [ss_store_sk#3, s_store_sk#12] +Input [2]: [ss_store_sk#3, s_store_sk#10] (26) HashAggregate [codegen id : 4] Input: [] Keys: [] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#15] -Results [1]: [count#16] +Aggregate Attributes [1]: [count#12] +Results [1]: [count#13] (27) Exchange -Input [1]: [count#16] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#17] +Input [1]: [count#13] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 5] -Input [1]: [count#16] +Input [1]: [count#13] Keys: [] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#18] -Results [1]: [count(1)#18 AS count(1)#19] +Aggregate Attributes [1]: [count(1)#14] +Results [1]: [count(1)#14 AS count(1)#15] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q97.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q97.sf100/explain.txt index e47aaf2217cfd..106bb85e83b54 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q97.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q97.sf100/explain.txt @@ -55,89 +55,89 @@ Results [2]: [ss_customer_sk#2, ss_item_sk#1] (7) Exchange Input [2]: [ss_customer_sk#2, ss_item_sk#1] -Arguments: hashpartitioning(ss_customer_sk#2, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(ss_customer_sk#2, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (8) HashAggregate [codegen id : 3] Input [2]: [ss_customer_sk#2, ss_item_sk#1] Keys [2]: [ss_customer_sk#2, ss_item_sk#1] Functions: [] Aggregate Attributes: [] -Results [2]: [ss_customer_sk#2 AS customer_sk#7, ss_item_sk#1 AS item_sk#8] +Results [2]: [ss_customer_sk#2 AS customer_sk#6, ss_item_sk#1 AS item_sk#7] (9) Sort [codegen id : 3] -Input [2]: [customer_sk#7, item_sk#8] -Arguments: [customer_sk#7 ASC NULLS FIRST, item_sk#8 ASC NULLS FIRST], false, 0 +Input [2]: [customer_sk#6, item_sk#7] +Arguments: [customer_sk#6 ASC NULLS FIRST, item_sk#7 ASC NULLS FIRST], false, 0 (10) Scan parquet default.catalog_sales -Output [3]: [cs_bill_customer_sk#9, cs_item_sk#10, cs_sold_date_sk#11] +Output [3]: [cs_bill_customer_sk#8, cs_item_sk#9, cs_sold_date_sk#10] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#11), dynamicpruningexpression(cs_sold_date_sk#11 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(cs_sold_date_sk#10), dynamicpruningexpression(cs_sold_date_sk#10 IN dynamicpruning#4)] ReadSchema: struct (11) ColumnarToRow [codegen id : 5] -Input [3]: [cs_bill_customer_sk#9, cs_item_sk#10, cs_sold_date_sk#11] +Input [3]: [cs_bill_customer_sk#8, cs_item_sk#9, cs_sold_date_sk#10] (12) ReusedExchange [Reuses operator id: 28] -Output [1]: [d_date_sk#12] +Output [1]: [d_date_sk#11] (13) BroadcastHashJoin [codegen id : 5] -Left keys [1]: [cs_sold_date_sk#11] -Right keys [1]: [d_date_sk#12] +Left keys [1]: [cs_sold_date_sk#10] +Right keys [1]: [d_date_sk#11] Join condition: None (14) Project [codegen id : 5] -Output [2]: [cs_bill_customer_sk#9, cs_item_sk#10] -Input [4]: [cs_bill_customer_sk#9, cs_item_sk#10, cs_sold_date_sk#11, d_date_sk#12] +Output [2]: [cs_bill_customer_sk#8, cs_item_sk#9] +Input [4]: [cs_bill_customer_sk#8, cs_item_sk#9, cs_sold_date_sk#10, d_date_sk#11] (15) HashAggregate [codegen id : 5] -Input [2]: [cs_bill_customer_sk#9, cs_item_sk#10] -Keys [2]: [cs_bill_customer_sk#9, cs_item_sk#10] +Input [2]: [cs_bill_customer_sk#8, cs_item_sk#9] +Keys [2]: [cs_bill_customer_sk#8, cs_item_sk#9] Functions: [] Aggregate Attributes: [] -Results [2]: [cs_bill_customer_sk#9, cs_item_sk#10] +Results [2]: [cs_bill_customer_sk#8, cs_item_sk#9] (16) Exchange -Input [2]: [cs_bill_customer_sk#9, cs_item_sk#10] -Arguments: hashpartitioning(cs_bill_customer_sk#9, cs_item_sk#10, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [2]: [cs_bill_customer_sk#8, cs_item_sk#9] +Arguments: hashpartitioning(cs_bill_customer_sk#8, cs_item_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=2] (17) HashAggregate [codegen id : 6] -Input [2]: [cs_bill_customer_sk#9, cs_item_sk#10] -Keys [2]: [cs_bill_customer_sk#9, cs_item_sk#10] +Input [2]: [cs_bill_customer_sk#8, cs_item_sk#9] +Keys [2]: [cs_bill_customer_sk#8, cs_item_sk#9] Functions: [] Aggregate Attributes: [] -Results [2]: [cs_bill_customer_sk#9 AS customer_sk#14, cs_item_sk#10 AS item_sk#15] +Results [2]: [cs_bill_customer_sk#8 AS customer_sk#12, cs_item_sk#9 AS item_sk#13] (18) Sort [codegen id : 6] -Input [2]: [customer_sk#14, item_sk#15] -Arguments: [customer_sk#14 ASC NULLS FIRST, item_sk#15 ASC NULLS FIRST], false, 0 +Input [2]: [customer_sk#12, item_sk#13] +Arguments: [customer_sk#12 ASC NULLS FIRST, item_sk#13 ASC NULLS FIRST], false, 0 (19) SortMergeJoin [codegen id : 7] -Left keys [2]: [customer_sk#7, item_sk#8] -Right keys [2]: [customer_sk#14, item_sk#15] +Left keys [2]: [customer_sk#6, item_sk#7] +Right keys [2]: [customer_sk#12, item_sk#13] Join condition: None (20) Project [codegen id : 7] -Output [2]: [customer_sk#7, customer_sk#14] -Input [4]: [customer_sk#7, item_sk#8, customer_sk#14, item_sk#15] +Output [2]: [customer_sk#6, customer_sk#12] +Input [4]: [customer_sk#6, item_sk#7, customer_sk#12, item_sk#13] (21) HashAggregate [codegen id : 7] -Input [2]: [customer_sk#7, customer_sk#14] +Input [2]: [customer_sk#6, customer_sk#12] Keys: [] -Functions [3]: [partial_sum(CASE WHEN (isnotnull(customer_sk#7) AND isnull(customer_sk#14)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (isnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (isnotnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END)] -Aggregate Attributes [3]: [sum#16, sum#17, sum#18] -Results [3]: [sum#19, sum#20, sum#21] +Functions [3]: [partial_sum(CASE WHEN (isnotnull(customer_sk#6) AND isnull(customer_sk#12)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (isnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (isnotnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END)] +Aggregate Attributes [3]: [sum#14, sum#15, sum#16] +Results [3]: [sum#17, sum#18, sum#19] (22) Exchange -Input [3]: [sum#19, sum#20, sum#21] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#22] +Input [3]: [sum#17, sum#18, sum#19] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 8] -Input [3]: [sum#19, sum#20, sum#21] +Input [3]: [sum#17, sum#18, sum#19] Keys: [] -Functions [3]: [sum(CASE WHEN (isnotnull(customer_sk#7) AND isnull(customer_sk#14)) THEN 1 ELSE 0 END), sum(CASE WHEN (isnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END), sum(CASE WHEN (isnotnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END)] -Aggregate Attributes [3]: [sum(CASE WHEN (isnotnull(customer_sk#7) AND isnull(customer_sk#14)) THEN 1 ELSE 0 END)#23, sum(CASE WHEN (isnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END)#24, sum(CASE WHEN (isnotnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END)#25] -Results [3]: [sum(CASE WHEN (isnotnull(customer_sk#7) AND isnull(customer_sk#14)) THEN 1 ELSE 0 END)#23 AS store_only#26, sum(CASE WHEN (isnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END)#24 AS catalog_only#27, sum(CASE WHEN (isnotnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END)#25 AS store_and_catalog#28] +Functions [3]: [sum(CASE WHEN (isnotnull(customer_sk#6) AND isnull(customer_sk#12)) THEN 1 ELSE 0 END), sum(CASE WHEN (isnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END), sum(CASE WHEN (isnotnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END)] +Aggregate Attributes [3]: [sum(CASE WHEN (isnotnull(customer_sk#6) AND isnull(customer_sk#12)) THEN 1 ELSE 0 END)#20, sum(CASE WHEN (isnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END)#21, sum(CASE WHEN (isnotnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END)#22] +Results [3]: [sum(CASE WHEN (isnotnull(customer_sk#6) AND isnull(customer_sk#12)) THEN 1 ELSE 0 END)#20 AS store_only#23, sum(CASE WHEN (isnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END)#21 AS catalog_only#24, sum(CASE WHEN (isnotnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END)#22 AS store_and_catalog#25] ===== Subqueries ===== @@ -150,27 +150,27 @@ BroadcastExchange (28) (24) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_month_seq#29] +Output [2]: [d_date_sk#5, d_month_seq#26] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#29] +Input [2]: [d_date_sk#5, d_month_seq#26] (26) Filter [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#29] -Condition : (((isnotnull(d_month_seq#29) AND (d_month_seq#29 >= 1200)) AND (d_month_seq#29 <= 1211)) AND isnotnull(d_date_sk#5)) +Input [2]: [d_date_sk#5, d_month_seq#26] +Condition : (((isnotnull(d_month_seq#26) AND (d_month_seq#26 >= 1200)) AND (d_month_seq#26 <= 1211)) AND isnotnull(d_date_sk#5)) (27) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_month_seq#29] +Input [2]: [d_date_sk#5, d_month_seq#26] (28) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#30] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] -Subquery:2 Hosting operator id = 10 Hosting Expression = cs_sold_date_sk#11 IN dynamicpruning#4 +Subquery:2 Hosting operator id = 10 Hosting Expression = cs_sold_date_sk#10 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q97/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q97/explain.txt index e47aaf2217cfd..106bb85e83b54 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q97/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q97/explain.txt @@ -55,89 +55,89 @@ Results [2]: [ss_customer_sk#2, ss_item_sk#1] (7) Exchange Input [2]: [ss_customer_sk#2, ss_item_sk#1] -Arguments: hashpartitioning(ss_customer_sk#2, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(ss_customer_sk#2, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (8) HashAggregate [codegen id : 3] Input [2]: [ss_customer_sk#2, ss_item_sk#1] Keys [2]: [ss_customer_sk#2, ss_item_sk#1] Functions: [] Aggregate Attributes: [] -Results [2]: [ss_customer_sk#2 AS customer_sk#7, ss_item_sk#1 AS item_sk#8] +Results [2]: [ss_customer_sk#2 AS customer_sk#6, ss_item_sk#1 AS item_sk#7] (9) Sort [codegen id : 3] -Input [2]: [customer_sk#7, item_sk#8] -Arguments: [customer_sk#7 ASC NULLS FIRST, item_sk#8 ASC NULLS FIRST], false, 0 +Input [2]: [customer_sk#6, item_sk#7] +Arguments: [customer_sk#6 ASC NULLS FIRST, item_sk#7 ASC NULLS FIRST], false, 0 (10) Scan parquet default.catalog_sales -Output [3]: [cs_bill_customer_sk#9, cs_item_sk#10, cs_sold_date_sk#11] +Output [3]: [cs_bill_customer_sk#8, cs_item_sk#9, cs_sold_date_sk#10] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#11), dynamicpruningexpression(cs_sold_date_sk#11 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(cs_sold_date_sk#10), dynamicpruningexpression(cs_sold_date_sk#10 IN dynamicpruning#4)] ReadSchema: struct (11) ColumnarToRow [codegen id : 5] -Input [3]: [cs_bill_customer_sk#9, cs_item_sk#10, cs_sold_date_sk#11] +Input [3]: [cs_bill_customer_sk#8, cs_item_sk#9, cs_sold_date_sk#10] (12) ReusedExchange [Reuses operator id: 28] -Output [1]: [d_date_sk#12] +Output [1]: [d_date_sk#11] (13) BroadcastHashJoin [codegen id : 5] -Left keys [1]: [cs_sold_date_sk#11] -Right keys [1]: [d_date_sk#12] +Left keys [1]: [cs_sold_date_sk#10] +Right keys [1]: [d_date_sk#11] Join condition: None (14) Project [codegen id : 5] -Output [2]: [cs_bill_customer_sk#9, cs_item_sk#10] -Input [4]: [cs_bill_customer_sk#9, cs_item_sk#10, cs_sold_date_sk#11, d_date_sk#12] +Output [2]: [cs_bill_customer_sk#8, cs_item_sk#9] +Input [4]: [cs_bill_customer_sk#8, cs_item_sk#9, cs_sold_date_sk#10, d_date_sk#11] (15) HashAggregate [codegen id : 5] -Input [2]: [cs_bill_customer_sk#9, cs_item_sk#10] -Keys [2]: [cs_bill_customer_sk#9, cs_item_sk#10] +Input [2]: [cs_bill_customer_sk#8, cs_item_sk#9] +Keys [2]: [cs_bill_customer_sk#8, cs_item_sk#9] Functions: [] Aggregate Attributes: [] -Results [2]: [cs_bill_customer_sk#9, cs_item_sk#10] +Results [2]: [cs_bill_customer_sk#8, cs_item_sk#9] (16) Exchange -Input [2]: [cs_bill_customer_sk#9, cs_item_sk#10] -Arguments: hashpartitioning(cs_bill_customer_sk#9, cs_item_sk#10, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [2]: [cs_bill_customer_sk#8, cs_item_sk#9] +Arguments: hashpartitioning(cs_bill_customer_sk#8, cs_item_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=2] (17) HashAggregate [codegen id : 6] -Input [2]: [cs_bill_customer_sk#9, cs_item_sk#10] -Keys [2]: [cs_bill_customer_sk#9, cs_item_sk#10] +Input [2]: [cs_bill_customer_sk#8, cs_item_sk#9] +Keys [2]: [cs_bill_customer_sk#8, cs_item_sk#9] Functions: [] Aggregate Attributes: [] -Results [2]: [cs_bill_customer_sk#9 AS customer_sk#14, cs_item_sk#10 AS item_sk#15] +Results [2]: [cs_bill_customer_sk#8 AS customer_sk#12, cs_item_sk#9 AS item_sk#13] (18) Sort [codegen id : 6] -Input [2]: [customer_sk#14, item_sk#15] -Arguments: [customer_sk#14 ASC NULLS FIRST, item_sk#15 ASC NULLS FIRST], false, 0 +Input [2]: [customer_sk#12, item_sk#13] +Arguments: [customer_sk#12 ASC NULLS FIRST, item_sk#13 ASC NULLS FIRST], false, 0 (19) SortMergeJoin [codegen id : 7] -Left keys [2]: [customer_sk#7, item_sk#8] -Right keys [2]: [customer_sk#14, item_sk#15] +Left keys [2]: [customer_sk#6, item_sk#7] +Right keys [2]: [customer_sk#12, item_sk#13] Join condition: None (20) Project [codegen id : 7] -Output [2]: [customer_sk#7, customer_sk#14] -Input [4]: [customer_sk#7, item_sk#8, customer_sk#14, item_sk#15] +Output [2]: [customer_sk#6, customer_sk#12] +Input [4]: [customer_sk#6, item_sk#7, customer_sk#12, item_sk#13] (21) HashAggregate [codegen id : 7] -Input [2]: [customer_sk#7, customer_sk#14] +Input [2]: [customer_sk#6, customer_sk#12] Keys: [] -Functions [3]: [partial_sum(CASE WHEN (isnotnull(customer_sk#7) AND isnull(customer_sk#14)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (isnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (isnotnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END)] -Aggregate Attributes [3]: [sum#16, sum#17, sum#18] -Results [3]: [sum#19, sum#20, sum#21] +Functions [3]: [partial_sum(CASE WHEN (isnotnull(customer_sk#6) AND isnull(customer_sk#12)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (isnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (isnotnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END)] +Aggregate Attributes [3]: [sum#14, sum#15, sum#16] +Results [3]: [sum#17, sum#18, sum#19] (22) Exchange -Input [3]: [sum#19, sum#20, sum#21] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#22] +Input [3]: [sum#17, sum#18, sum#19] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 8] -Input [3]: [sum#19, sum#20, sum#21] +Input [3]: [sum#17, sum#18, sum#19] Keys: [] -Functions [3]: [sum(CASE WHEN (isnotnull(customer_sk#7) AND isnull(customer_sk#14)) THEN 1 ELSE 0 END), sum(CASE WHEN (isnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END), sum(CASE WHEN (isnotnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END)] -Aggregate Attributes [3]: [sum(CASE WHEN (isnotnull(customer_sk#7) AND isnull(customer_sk#14)) THEN 1 ELSE 0 END)#23, sum(CASE WHEN (isnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END)#24, sum(CASE WHEN (isnotnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END)#25] -Results [3]: [sum(CASE WHEN (isnotnull(customer_sk#7) AND isnull(customer_sk#14)) THEN 1 ELSE 0 END)#23 AS store_only#26, sum(CASE WHEN (isnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END)#24 AS catalog_only#27, sum(CASE WHEN (isnotnull(customer_sk#7) AND isnotnull(customer_sk#14)) THEN 1 ELSE 0 END)#25 AS store_and_catalog#28] +Functions [3]: [sum(CASE WHEN (isnotnull(customer_sk#6) AND isnull(customer_sk#12)) THEN 1 ELSE 0 END), sum(CASE WHEN (isnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END), sum(CASE WHEN (isnotnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END)] +Aggregate Attributes [3]: [sum(CASE WHEN (isnotnull(customer_sk#6) AND isnull(customer_sk#12)) THEN 1 ELSE 0 END)#20, sum(CASE WHEN (isnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END)#21, sum(CASE WHEN (isnotnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END)#22] +Results [3]: [sum(CASE WHEN (isnotnull(customer_sk#6) AND isnull(customer_sk#12)) THEN 1 ELSE 0 END)#20 AS store_only#23, sum(CASE WHEN (isnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END)#21 AS catalog_only#24, sum(CASE WHEN (isnotnull(customer_sk#6) AND isnotnull(customer_sk#12)) THEN 1 ELSE 0 END)#22 AS store_and_catalog#25] ===== Subqueries ===== @@ -150,27 +150,27 @@ BroadcastExchange (28) (24) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_month_seq#29] +Output [2]: [d_date_sk#5, d_month_seq#26] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#29] +Input [2]: [d_date_sk#5, d_month_seq#26] (26) Filter [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#29] -Condition : (((isnotnull(d_month_seq#29) AND (d_month_seq#29 >= 1200)) AND (d_month_seq#29 <= 1211)) AND isnotnull(d_date_sk#5)) +Input [2]: [d_date_sk#5, d_month_seq#26] +Condition : (((isnotnull(d_month_seq#26) AND (d_month_seq#26 >= 1200)) AND (d_month_seq#26 <= 1211)) AND isnotnull(d_date_sk#5)) (27) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_month_seq#29] +Input [2]: [d_date_sk#5, d_month_seq#26] (28) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#30] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] -Subquery:2 Hosting operator id = 10 Hosting Expression = cs_sold_date_sk#11 IN dynamicpruning#4 +Subquery:2 Hosting operator id = 10 Hosting Expression = cs_sold_date_sk#10 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q98.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q98.sf100/explain.txt index b3528e4b6881b..7f2a84fa037cf 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q98.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q98.sf100/explain.txt @@ -43,100 +43,100 @@ Condition : isnotnull(ss_item_sk#1) (4) Exchange Input [3]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#5] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [3]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.item -Output [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Output [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [In(i_category, [Books ,Home ,Sports ]), IsNotNull(i_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (8) Filter [codegen id : 3] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Condition : (i_category#11 IN (Sports ,Books ,Home ) AND isnotnull(i_item_sk#6)) +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Condition : (i_category#10 IN (Sports ,Books ,Home ) AND isnotnull(i_item_sk#5)) (9) Exchange -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Arguments: hashpartitioning(i_item_sk#6, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Arguments: hashpartitioning(i_item_sk#5, 5), ENSURE_REQUIREMENTS, [plan_id=2] (10) Sort [codegen id : 4] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Arguments: [i_item_sk#6 ASC NULLS FIRST], false, 0 +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Arguments: [i_item_sk#5 ASC NULLS FIRST], false, 0 (11) SortMergeJoin [codegen id : 6] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#6] +Right keys [1]: [i_item_sk#5] Join condition: None (12) Project [codegen id : 6] -Output [7]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Input [9]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Output [7]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Input [9]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (13) ReusedExchange [Reuses operator id: 30] -Output [1]: [d_date_sk#13] +Output [1]: [d_date_sk#11] (14) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_sold_date_sk#3] -Right keys [1]: [d_date_sk#13] +Right keys [1]: [d_date_sk#11] Join condition: None (15) Project [codegen id : 6] -Output [6]: [ss_ext_sales_price#2, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Input [8]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11, d_date_sk#13] +Output [6]: [ss_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Input [8]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#11] (16) HashAggregate [codegen id : 6] -Input [6]: [ss_ext_sales_price#2, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Keys [5]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9] +Input [6]: [ss_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#14] -Results [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] +Aggregate Attributes [1]: [sum#12] +Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] (17) Exchange -Input [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] -Arguments: hashpartitioning(i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 7] -Input [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] -Keys [5]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#17] -Results [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#17,17,2) AS itemrevenue#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#17,17,2) AS _w0#19, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#17,17,2) AS _w1#20, i_item_id#7] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#14] +Results [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS itemrevenue#15, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS _w0#16, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS _w1#17, i_item_id#6] (19) Exchange -Input [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, i_item_id#7] -Arguments: hashpartitioning(i_class#10, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=4] (20) Sort [codegen id : 8] -Input [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, i_item_id#7] -Arguments: [i_class#10 ASC NULLS FIRST], false, 0 +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: [i_class#9 ASC NULLS FIRST], false, 0 (21) Window -Input [8]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, i_item_id#7] -Arguments: [sum(_w1#20) windowspecdefinition(i_class#10, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#22], [i_class#10] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: [sum(_w1#17) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#9] (22) Project [codegen id : 9] -Output [7]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#19) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#22)), DecimalType(38,17)) AS revenueratio#23, i_item_id#7] -Input [9]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, i_item_id#7, _we0#22] +Output [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#16) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#18)), DecimalType(38,17)) AS revenueratio#19, i_item_id#6] +Input [9]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6, _we0#18] (23) Exchange -Input [7]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, revenueratio#23, i_item_id#7] -Arguments: rangepartitioning(i_category#11 ASC NULLS FIRST, i_class#10 ASC NULLS FIRST, i_item_id#7 ASC NULLS FIRST, i_item_desc#8 ASC NULLS FIRST, revenueratio#23 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19, i_item_id#6] +Arguments: rangepartitioning(i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=5] (24) Sort [codegen id : 10] -Input [7]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, revenueratio#23, i_item_id#7] -Arguments: [i_category#11 ASC NULLS FIRST, i_class#10 ASC NULLS FIRST, i_item_id#7 ASC NULLS FIRST, i_item_desc#8 ASC NULLS FIRST, revenueratio#23 ASC NULLS FIRST], true, 0 +Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19, i_item_id#6] +Arguments: [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], true, 0 (25) Project [codegen id : 10] -Output [6]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, revenueratio#23] -Input [7]: [i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, revenueratio#23, i_item_id#7] +Output [6]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] +Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19, i_item_id#6] ===== Subqueries ===== @@ -149,25 +149,25 @@ BroadcastExchange (30) (26) Scan parquet default.date_dim -Output [2]: [d_date_sk#13, d_date#25] +Output [2]: [d_date_sk#11, d_date#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-22), LessThanOrEqual(d_date,1999-03-24), IsNotNull(d_date_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#13, d_date#25] +Input [2]: [d_date_sk#11, d_date#20] (28) Filter [codegen id : 1] -Input [2]: [d_date_sk#13, d_date#25] -Condition : (((isnotnull(d_date#25) AND (d_date#25 >= 1999-02-22)) AND (d_date#25 <= 1999-03-24)) AND isnotnull(d_date_sk#13)) +Input [2]: [d_date_sk#11, d_date#20] +Condition : (((isnotnull(d_date#20) AND (d_date#20 >= 1999-02-22)) AND (d_date#20 <= 1999-03-24)) AND isnotnull(d_date_sk#11)) (29) Project [codegen id : 1] -Output [1]: [d_date_sk#13] -Input [2]: [d_date_sk#13, d_date#25] +Output [1]: [d_date_sk#11] +Input [2]: [d_date_sk#11, d_date#20] (30) BroadcastExchange -Input [1]: [d_date_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [1]: [d_date_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q98/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q98/explain.txt index ec1192af4d398..4d8874720c8c5 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q98/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q98/explain.txt @@ -54,7 +54,7 @@ Condition : (i_category#10 IN (Sports (7) BroadcastExchange Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#1] @@ -66,62 +66,62 @@ Output [7]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, i_item_desc#7 Input [9]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (10) ReusedExchange [Reuses operator id: 27] -Output [1]: [d_date_sk#12] +Output [1]: [d_date_sk#11] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_sold_date_sk#3] -Right keys [1]: [d_date_sk#12] +Right keys [1]: [d_date_sk#11] Join condition: None (12) Project [codegen id : 3] Output [6]: [ss_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] -Input [8]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#12] +Input [8]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#11] (13) HashAggregate [codegen id : 3] Input [6]: [ss_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#13] -Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] +Aggregate Attributes [1]: [sum#12] +Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] (14) Exchange -Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] -Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 4] -Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#16] -Results [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#16,17,2) AS itemrevenue#17, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#16,17,2) AS _w0#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#16,17,2) AS _w1#19, i_item_id#6] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#14] +Results [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS itemrevenue#15, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS _w0#16, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS _w1#17, i_item_id#6] (16) Exchange -Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6] -Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (17) Sort [codegen id : 5] -Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] Arguments: [i_class#9 ASC NULLS FIRST], false, 0 (18) Window -Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6] -Arguments: [sum(_w1#19) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#21], [i_class#9] +Input [8]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6] +Arguments: [sum(_w1#17) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#9] (19) Project [codegen id : 6] -Output [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#18) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#21)), DecimalType(38,17)) AS revenueratio#22, i_item_id#6] -Input [9]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, i_item_id#6, _we0#21] +Output [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#16) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#18)), DecimalType(38,17)) AS revenueratio#19, i_item_id#6] +Input [9]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, i_item_id#6, _we0#18] (20) Exchange -Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22, i_item_id#6] -Arguments: rangepartitioning(i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#22 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19, i_item_id#6] +Arguments: rangepartitioning(i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=4] (21) Sort [codegen id : 7] -Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22, i_item_id#6] -Arguments: [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#22 ASC NULLS FIRST], true, 0 +Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19, i_item_id#6] +Arguments: [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], true, 0 (22) Project [codegen id : 7] -Output [6]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22] -Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22, i_item_id#6] +Output [6]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] +Input [7]: [i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19, i_item_id#6] ===== Subqueries ===== @@ -134,25 +134,25 @@ BroadcastExchange (27) (23) Scan parquet default.date_dim -Output [2]: [d_date_sk#12, d_date#24] +Output [2]: [d_date_sk#11, d_date#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-22), LessThanOrEqual(d_date,1999-03-24), IsNotNull(d_date_sk)] ReadSchema: struct (24) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#12, d_date#24] +Input [2]: [d_date_sk#11, d_date#20] (25) Filter [codegen id : 1] -Input [2]: [d_date_sk#12, d_date#24] -Condition : (((isnotnull(d_date#24) AND (d_date#24 >= 1999-02-22)) AND (d_date#24 <= 1999-03-24)) AND isnotnull(d_date_sk#12)) +Input [2]: [d_date_sk#11, d_date#20] +Condition : (((isnotnull(d_date#20) AND (d_date#20 >= 1999-02-22)) AND (d_date#20 <= 1999-03-24)) AND isnotnull(d_date_sk#11)) (26) Project [codegen id : 1] -Output [1]: [d_date_sk#12] -Input [2]: [d_date_sk#12, d_date#24] +Output [1]: [d_date_sk#11] +Input [2]: [d_date_sk#11, d_date#20] (27) BroadcastExchange -Input [1]: [d_date_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [d_date_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q99.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q99.sf100/explain.txt index 1b955ee3bd96c..212bc3b1eaacd 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q99.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q99.sf100/explain.txt @@ -67,7 +67,7 @@ Input [2]: [d_date_sk#6, d_month_seq#7] (8) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_ship_date_sk#1] @@ -79,105 +79,105 @@ Output [5]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_ship_mode_sk#3, cs_wareh Input [6]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_ship_mode_sk#3, cs_warehouse_sk#4, cs_sold_date_sk#5, d_date_sk#6] (11) Scan parquet default.ship_mode -Output [2]: [sm_ship_mode_sk#9, sm_type#10] +Output [2]: [sm_ship_mode_sk#8, sm_type#9] Batched: true Location [not included in comparison]/{warehouse_dir}/ship_mode] PushedFilters: [IsNotNull(sm_ship_mode_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [2]: [sm_ship_mode_sk#9, sm_type#10] +Input [2]: [sm_ship_mode_sk#8, sm_type#9] (13) Filter [codegen id : 2] -Input [2]: [sm_ship_mode_sk#9, sm_type#10] -Condition : isnotnull(sm_ship_mode_sk#9) +Input [2]: [sm_ship_mode_sk#8, sm_type#9] +Condition : isnotnull(sm_ship_mode_sk#8) (14) BroadcastExchange -Input [2]: [sm_ship_mode_sk#9, sm_type#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Input [2]: [sm_ship_mode_sk#8, sm_type#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_ship_mode_sk#3] -Right keys [1]: [sm_ship_mode_sk#9] +Right keys [1]: [sm_ship_mode_sk#8] Join condition: None (16) Project [codegen id : 5] -Output [5]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_warehouse_sk#4, cs_sold_date_sk#5, sm_type#10] -Input [7]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_ship_mode_sk#3, cs_warehouse_sk#4, cs_sold_date_sk#5, sm_ship_mode_sk#9, sm_type#10] +Output [5]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_warehouse_sk#4, cs_sold_date_sk#5, sm_type#9] +Input [7]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_ship_mode_sk#3, cs_warehouse_sk#4, cs_sold_date_sk#5, sm_ship_mode_sk#8, sm_type#9] (17) Scan parquet default.call_center -Output [2]: [cc_call_center_sk#12, cc_name#13] +Output [2]: [cc_call_center_sk#10, cc_name#11] Batched: true Location [not included in comparison]/{warehouse_dir}/call_center] PushedFilters: [IsNotNull(cc_call_center_sk)] ReadSchema: struct (18) ColumnarToRow [codegen id : 3] -Input [2]: [cc_call_center_sk#12, cc_name#13] +Input [2]: [cc_call_center_sk#10, cc_name#11] (19) Filter [codegen id : 3] -Input [2]: [cc_call_center_sk#12, cc_name#13] -Condition : isnotnull(cc_call_center_sk#12) +Input [2]: [cc_call_center_sk#10, cc_name#11] +Condition : isnotnull(cc_call_center_sk#10) (20) BroadcastExchange -Input [2]: [cc_call_center_sk#12, cc_name#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Input [2]: [cc_call_center_sk#10, cc_name#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_call_center_sk#2] -Right keys [1]: [cc_call_center_sk#12] +Right keys [1]: [cc_call_center_sk#10] Join condition: None (22) Project [codegen id : 5] -Output [5]: [cs_ship_date_sk#1, cs_warehouse_sk#4, cs_sold_date_sk#5, sm_type#10, cc_name#13] -Input [7]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_warehouse_sk#4, cs_sold_date_sk#5, sm_type#10, cc_call_center_sk#12, cc_name#13] +Output [5]: [cs_ship_date_sk#1, cs_warehouse_sk#4, cs_sold_date_sk#5, sm_type#9, cc_name#11] +Input [7]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_warehouse_sk#4, cs_sold_date_sk#5, sm_type#9, cc_call_center_sk#10, cc_name#11] (23) Scan parquet default.warehouse -Output [2]: [w_warehouse_sk#15, w_warehouse_name#16] +Output [2]: [w_warehouse_sk#12, w_warehouse_name#13] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (24) ColumnarToRow [codegen id : 4] -Input [2]: [w_warehouse_sk#15, w_warehouse_name#16] +Input [2]: [w_warehouse_sk#12, w_warehouse_name#13] (25) Filter [codegen id : 4] -Input [2]: [w_warehouse_sk#15, w_warehouse_name#16] -Condition : isnotnull(w_warehouse_sk#15) +Input [2]: [w_warehouse_sk#12, w_warehouse_name#13] +Condition : isnotnull(w_warehouse_sk#12) (26) BroadcastExchange -Input [2]: [w_warehouse_sk#15, w_warehouse_name#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#17] +Input [2]: [w_warehouse_sk#12, w_warehouse_name#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (27) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_warehouse_sk#4] -Right keys [1]: [w_warehouse_sk#15] +Right keys [1]: [w_warehouse_sk#12] Join condition: None (28) Project [codegen id : 5] -Output [5]: [cs_ship_date_sk#1, cs_sold_date_sk#5, sm_type#10, cc_name#13, substr(w_warehouse_name#16, 1, 20) AS _groupingexpression#18] -Input [7]: [cs_ship_date_sk#1, cs_warehouse_sk#4, cs_sold_date_sk#5, sm_type#10, cc_name#13, w_warehouse_sk#15, w_warehouse_name#16] +Output [5]: [cs_ship_date_sk#1, cs_sold_date_sk#5, sm_type#9, cc_name#11, substr(w_warehouse_name#13, 1, 20) AS _groupingexpression#14] +Input [7]: [cs_ship_date_sk#1, cs_warehouse_sk#4, cs_sold_date_sk#5, sm_type#9, cc_name#11, w_warehouse_sk#12, w_warehouse_name#13] (29) HashAggregate [codegen id : 5] -Input [5]: [cs_ship_date_sk#1, cs_sold_date_sk#5, sm_type#10, cc_name#13, _groupingexpression#18] -Keys [3]: [_groupingexpression#18, sm_type#10, cc_name#13] +Input [5]: [cs_ship_date_sk#1, cs_sold_date_sk#5, sm_type#9, cc_name#11, _groupingexpression#14] +Keys [3]: [_groupingexpression#14, sm_type#9, cc_name#11] Functions [5]: [partial_sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 30) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 60) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 90) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)] -Aggregate Attributes [5]: [sum#19, sum#20, sum#21, sum#22, sum#23] -Results [8]: [_groupingexpression#18, sm_type#10, cc_name#13, sum#24, sum#25, sum#26, sum#27, sum#28] +Aggregate Attributes [5]: [sum#15, sum#16, sum#17, sum#18, sum#19] +Results [8]: [_groupingexpression#14, sm_type#9, cc_name#11, sum#20, sum#21, sum#22, sum#23, sum#24] (30) Exchange -Input [8]: [_groupingexpression#18, sm_type#10, cc_name#13, sum#24, sum#25, sum#26, sum#27, sum#28] -Arguments: hashpartitioning(_groupingexpression#18, sm_type#10, cc_name#13, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [8]: [_groupingexpression#14, sm_type#9, cc_name#11, sum#20, sum#21, sum#22, sum#23, sum#24] +Arguments: hashpartitioning(_groupingexpression#14, sm_type#9, cc_name#11, 5), ENSURE_REQUIREMENTS, [plan_id=5] (31) HashAggregate [codegen id : 6] -Input [8]: [_groupingexpression#18, sm_type#10, cc_name#13, sum#24, sum#25, sum#26, sum#27, sum#28] -Keys [3]: [_groupingexpression#18, sm_type#10, cc_name#13] +Input [8]: [_groupingexpression#14, sm_type#9, cc_name#11, sum#20, sum#21, sum#22, sum#23, sum#24] +Keys [3]: [_groupingexpression#14, sm_type#9, cc_name#11] Functions [5]: [sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END), sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 30) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END), sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 60) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END), sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 90) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END), sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)] -Aggregate Attributes [5]: [sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#30, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 30) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#31, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 60) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#32, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 90) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#33, sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#34] -Results [8]: [_groupingexpression#18 AS substr(w_warehouse_name, 1, 20)#35, sm_type#10, cc_name#13, sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#30 AS 30 days #36, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 30) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#31 AS 31 - 60 days #37, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 60) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#32 AS 61 - 90 days #38, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 90) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#33 AS 91 - 120 days #39, sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#34 AS >120 days #40] +Aggregate Attributes [5]: [sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#25, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 30) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#26, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 60) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#27, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 90) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#28, sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#29] +Results [8]: [_groupingexpression#14 AS substr(w_warehouse_name, 1, 20)#30, sm_type#9, cc_name#11, sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#25 AS 30 days #31, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 30) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#26 AS 31 - 60 days #32, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 60) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#27 AS 61 - 90 days #33, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 90) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#28 AS 91 - 120 days #34, sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#29 AS >120 days #35] (32) TakeOrderedAndProject -Input [8]: [substr(w_warehouse_name, 1, 20)#35, sm_type#10, cc_name#13, 30 days #36, 31 - 60 days #37, 61 - 90 days #38, 91 - 120 days #39, >120 days #40] -Arguments: 100, [substr(w_warehouse_name, 1, 20)#35 ASC NULLS FIRST, sm_type#10 ASC NULLS FIRST, cc_name#13 ASC NULLS FIRST], [substr(w_warehouse_name, 1, 20)#35, sm_type#10, cc_name#13, 30 days #36, 31 - 60 days #37, 61 - 90 days #38, 91 - 120 days #39, >120 days #40] +Input [8]: [substr(w_warehouse_name, 1, 20)#30, sm_type#9, cc_name#11, 30 days #31, 31 - 60 days #32, 61 - 90 days #33, 91 - 120 days #34, >120 days #35] +Arguments: 100, [substr(w_warehouse_name, 1, 20)#30 ASC NULLS FIRST, sm_type#9 ASC NULLS FIRST, cc_name#11 ASC NULLS FIRST], [substr(w_warehouse_name, 1, 20)#30, sm_type#9, cc_name#11, 30 days #31, 31 - 60 days #32, 61 - 90 days #33, 91 - 120 days #34, >120 days #35] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q99/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q99/explain.txt index 1431623539828..2dd94aed3490b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q99/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q99/explain.txt @@ -63,7 +63,7 @@ Condition : isnotnull(w_warehouse_sk#6) (7) BroadcastExchange Input [2]: [w_warehouse_sk#6, w_warehouse_name#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_warehouse_sk#4] @@ -75,109 +75,109 @@ Output [5]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_ship_mode_sk#3, cs_sold_ Input [7]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_ship_mode_sk#3, cs_warehouse_sk#4, cs_sold_date_sk#5, w_warehouse_sk#6, w_warehouse_name#7] (10) Scan parquet default.ship_mode -Output [2]: [sm_ship_mode_sk#9, sm_type#10] +Output [2]: [sm_ship_mode_sk#8, sm_type#9] Batched: true Location [not included in comparison]/{warehouse_dir}/ship_mode] PushedFilters: [IsNotNull(sm_ship_mode_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [2]: [sm_ship_mode_sk#9, sm_type#10] +Input [2]: [sm_ship_mode_sk#8, sm_type#9] (12) Filter [codegen id : 2] -Input [2]: [sm_ship_mode_sk#9, sm_type#10] -Condition : isnotnull(sm_ship_mode_sk#9) +Input [2]: [sm_ship_mode_sk#8, sm_type#9] +Condition : isnotnull(sm_ship_mode_sk#8) (13) BroadcastExchange -Input [2]: [sm_ship_mode_sk#9, sm_type#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Input [2]: [sm_ship_mode_sk#8, sm_type#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_ship_mode_sk#3] -Right keys [1]: [sm_ship_mode_sk#9] +Right keys [1]: [sm_ship_mode_sk#8] Join condition: None (15) Project [codegen id : 5] -Output [5]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_sold_date_sk#5, w_warehouse_name#7, sm_type#10] -Input [7]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_ship_mode_sk#3, cs_sold_date_sk#5, w_warehouse_name#7, sm_ship_mode_sk#9, sm_type#10] +Output [5]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_sold_date_sk#5, w_warehouse_name#7, sm_type#9] +Input [7]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_ship_mode_sk#3, cs_sold_date_sk#5, w_warehouse_name#7, sm_ship_mode_sk#8, sm_type#9] (16) Scan parquet default.call_center -Output [2]: [cc_call_center_sk#12, cc_name#13] +Output [2]: [cc_call_center_sk#10, cc_name#11] Batched: true Location [not included in comparison]/{warehouse_dir}/call_center] PushedFilters: [IsNotNull(cc_call_center_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 3] -Input [2]: [cc_call_center_sk#12, cc_name#13] +Input [2]: [cc_call_center_sk#10, cc_name#11] (18) Filter [codegen id : 3] -Input [2]: [cc_call_center_sk#12, cc_name#13] -Condition : isnotnull(cc_call_center_sk#12) +Input [2]: [cc_call_center_sk#10, cc_name#11] +Condition : isnotnull(cc_call_center_sk#10) (19) BroadcastExchange -Input [2]: [cc_call_center_sk#12, cc_name#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Input [2]: [cc_call_center_sk#10, cc_name#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (20) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_call_center_sk#2] -Right keys [1]: [cc_call_center_sk#12] +Right keys [1]: [cc_call_center_sk#10] Join condition: None (21) Project [codegen id : 5] -Output [5]: [cs_ship_date_sk#1, cs_sold_date_sk#5, w_warehouse_name#7, sm_type#10, cc_name#13] -Input [7]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_sold_date_sk#5, w_warehouse_name#7, sm_type#10, cc_call_center_sk#12, cc_name#13] +Output [5]: [cs_ship_date_sk#1, cs_sold_date_sk#5, w_warehouse_name#7, sm_type#9, cc_name#11] +Input [7]: [cs_ship_date_sk#1, cs_call_center_sk#2, cs_sold_date_sk#5, w_warehouse_name#7, sm_type#9, cc_call_center_sk#10, cc_name#11] (22) Scan parquet default.date_dim -Output [2]: [d_date_sk#15, d_month_seq#16] +Output [2]: [d_date_sk#12, d_month_seq#13] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 4] -Input [2]: [d_date_sk#15, d_month_seq#16] +Input [2]: [d_date_sk#12, d_month_seq#13] (24) Filter [codegen id : 4] -Input [2]: [d_date_sk#15, d_month_seq#16] -Condition : (((isnotnull(d_month_seq#16) AND (d_month_seq#16 >= 1200)) AND (d_month_seq#16 <= 1211)) AND isnotnull(d_date_sk#15)) +Input [2]: [d_date_sk#12, d_month_seq#13] +Condition : (((isnotnull(d_month_seq#13) AND (d_month_seq#13 >= 1200)) AND (d_month_seq#13 <= 1211)) AND isnotnull(d_date_sk#12)) (25) Project [codegen id : 4] -Output [1]: [d_date_sk#15] -Input [2]: [d_date_sk#15, d_month_seq#16] +Output [1]: [d_date_sk#12] +Input [2]: [d_date_sk#12, d_month_seq#13] (26) BroadcastExchange -Input [1]: [d_date_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Input [1]: [d_date_sk#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (27) BroadcastHashJoin [codegen id : 5] Left keys [1]: [cs_ship_date_sk#1] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#12] Join condition: None (28) Project [codegen id : 5] -Output [5]: [cs_ship_date_sk#1, cs_sold_date_sk#5, sm_type#10, cc_name#13, substr(w_warehouse_name#7, 1, 20) AS _groupingexpression#18] -Input [6]: [cs_ship_date_sk#1, cs_sold_date_sk#5, w_warehouse_name#7, sm_type#10, cc_name#13, d_date_sk#15] +Output [5]: [cs_ship_date_sk#1, cs_sold_date_sk#5, sm_type#9, cc_name#11, substr(w_warehouse_name#7, 1, 20) AS _groupingexpression#14] +Input [6]: [cs_ship_date_sk#1, cs_sold_date_sk#5, w_warehouse_name#7, sm_type#9, cc_name#11, d_date_sk#12] (29) HashAggregate [codegen id : 5] -Input [5]: [cs_ship_date_sk#1, cs_sold_date_sk#5, sm_type#10, cc_name#13, _groupingexpression#18] -Keys [3]: [_groupingexpression#18, sm_type#10, cc_name#13] +Input [5]: [cs_ship_date_sk#1, cs_sold_date_sk#5, sm_type#9, cc_name#11, _groupingexpression#14] +Keys [3]: [_groupingexpression#14, sm_type#9, cc_name#11] Functions [5]: [partial_sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 30) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 60) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 90) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)] -Aggregate Attributes [5]: [sum#19, sum#20, sum#21, sum#22, sum#23] -Results [8]: [_groupingexpression#18, sm_type#10, cc_name#13, sum#24, sum#25, sum#26, sum#27, sum#28] +Aggregate Attributes [5]: [sum#15, sum#16, sum#17, sum#18, sum#19] +Results [8]: [_groupingexpression#14, sm_type#9, cc_name#11, sum#20, sum#21, sum#22, sum#23, sum#24] (30) Exchange -Input [8]: [_groupingexpression#18, sm_type#10, cc_name#13, sum#24, sum#25, sum#26, sum#27, sum#28] -Arguments: hashpartitioning(_groupingexpression#18, sm_type#10, cc_name#13, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [8]: [_groupingexpression#14, sm_type#9, cc_name#11, sum#20, sum#21, sum#22, sum#23, sum#24] +Arguments: hashpartitioning(_groupingexpression#14, sm_type#9, cc_name#11, 5), ENSURE_REQUIREMENTS, [plan_id=5] (31) HashAggregate [codegen id : 6] -Input [8]: [_groupingexpression#18, sm_type#10, cc_name#13, sum#24, sum#25, sum#26, sum#27, sum#28] -Keys [3]: [_groupingexpression#18, sm_type#10, cc_name#13] +Input [8]: [_groupingexpression#14, sm_type#9, cc_name#11, sum#20, sum#21, sum#22, sum#23, sum#24] +Keys [3]: [_groupingexpression#14, sm_type#9, cc_name#11] Functions [5]: [sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END), sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 30) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END), sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 60) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END), sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 90) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END), sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)] -Aggregate Attributes [5]: [sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#30, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 30) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#31, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 60) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#32, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 90) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#33, sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#34] -Results [8]: [_groupingexpression#18 AS substr(w_warehouse_name, 1, 20)#35, sm_type#10, cc_name#13, sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#30 AS 30 days #36, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 30) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#31 AS 31 - 60 days #37, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 60) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#32 AS 61 - 90 days #38, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 90) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#33 AS 91 - 120 days #39, sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#34 AS >120 days #40] +Aggregate Attributes [5]: [sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#25, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 30) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#26, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 60) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#27, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 90) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#28, sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#29] +Results [8]: [_groupingexpression#14 AS substr(w_warehouse_name, 1, 20)#30, sm_type#9, cc_name#11, sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 30) THEN 1 ELSE 0 END)#25 AS 30 days #31, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 30) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 60)) THEN 1 ELSE 0 END)#26 AS 31 - 60 days #32, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 60) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 90)) THEN 1 ELSE 0 END)#27 AS 61 - 90 days #33, sum(CASE WHEN (((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 90) AND ((cs_ship_date_sk#1 - cs_sold_date_sk#5) <= 120)) THEN 1 ELSE 0 END)#28 AS 91 - 120 days #34, sum(CASE WHEN ((cs_ship_date_sk#1 - cs_sold_date_sk#5) > 120) THEN 1 ELSE 0 END)#29 AS >120 days #35] (32) TakeOrderedAndProject -Input [8]: [substr(w_warehouse_name, 1, 20)#35, sm_type#10, cc_name#13, 30 days #36, 31 - 60 days #37, 61 - 90 days #38, 91 - 120 days #39, >120 days #40] -Arguments: 100, [substr(w_warehouse_name, 1, 20)#35 ASC NULLS FIRST, sm_type#10 ASC NULLS FIRST, cc_name#13 ASC NULLS FIRST], [substr(w_warehouse_name, 1, 20)#35, sm_type#10, cc_name#13, 30 days #36, 31 - 60 days #37, 61 - 90 days #38, 91 - 120 days #39, >120 days #40] +Input [8]: [substr(w_warehouse_name, 1, 20)#30, sm_type#9, cc_name#11, 30 days #31, 31 - 60 days #32, 61 - 90 days #33, 91 - 120 days #34, >120 days #35] +Arguments: 100, [substr(w_warehouse_name, 1, 20)#30 ASC NULLS FIRST, sm_type#9 ASC NULLS FIRST, cc_name#11 ASC NULLS FIRST], [substr(w_warehouse_name, 1, 20)#30, sm_type#9, cc_name#11, 30 days #31, 31 - 60 days #32, 61 - 90 days #33, 91 - 120 days #34, >120 days #35] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a.sf100/explain.txt index 2971e067eab63..ee12260ec96b6 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a.sf100/explain.txt @@ -62,104 +62,104 @@ Condition : ((isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2) (4) Exchange Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: [c_customer_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_sales -Output [2]: [ss_customer_sk#7, ss_sold_date_sk#8] +Output [2]: [ss_customer_sk#6, ss_sold_date_sk#7] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#8), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)] ReadSchema: struct (7) ColumnarToRow [codegen id : 4] -Input [2]: [ss_customer_sk#7, ss_sold_date_sk#8] +Input [2]: [ss_customer_sk#6, ss_sold_date_sk#7] (8) ReusedExchange [Reuses operator id: 57] -Output [1]: [d_date_sk#10] +Output [1]: [d_date_sk#9] (9) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#10] +Left keys [1]: [ss_sold_date_sk#7] +Right keys [1]: [d_date_sk#9] Join condition: None (10) Project [codegen id : 4] -Output [1]: [ss_customer_sk#7] -Input [3]: [ss_customer_sk#7, ss_sold_date_sk#8, d_date_sk#10] +Output [1]: [ss_customer_sk#6] +Input [3]: [ss_customer_sk#6, ss_sold_date_sk#7, d_date_sk#9] (11) Exchange -Input [1]: [ss_customer_sk#7] -Arguments: hashpartitioning(ss_customer_sk#7, 5), ENSURE_REQUIREMENTS, [id=#11] +Input [1]: [ss_customer_sk#6] +Arguments: hashpartitioning(ss_customer_sk#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 5] -Input [1]: [ss_customer_sk#7] -Arguments: [ss_customer_sk#7 ASC NULLS FIRST], false, 0 +Input [1]: [ss_customer_sk#6] +Arguments: [ss_customer_sk#6 ASC NULLS FIRST], false, 0 (13) SortMergeJoin [codegen id : 6] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [ss_customer_sk#7] +Right keys [1]: [ss_customer_sk#6] Join condition: None (14) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#12, ws_sold_date_sk#13] +Output [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#13), dynamicpruningexpression(ws_sold_date_sk#13 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(ws_sold_date_sk#11), dynamicpruningexpression(ws_sold_date_sk#11 IN dynamicpruning#8)] ReadSchema: struct (15) ColumnarToRow [codegen id : 8] -Input [2]: [ws_bill_customer_sk#12, ws_sold_date_sk#13] +Input [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] (16) ReusedExchange [Reuses operator id: 57] -Output [1]: [d_date_sk#14] +Output [1]: [d_date_sk#12] (17) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ws_sold_date_sk#13] -Right keys [1]: [d_date_sk#14] +Left keys [1]: [ws_sold_date_sk#11] +Right keys [1]: [d_date_sk#12] Join condition: None (18) Project [codegen id : 8] -Output [1]: [ws_bill_customer_sk#12 AS customer_sk#15] -Input [3]: [ws_bill_customer_sk#12, ws_sold_date_sk#13, d_date_sk#14] +Output [1]: [ws_bill_customer_sk#10 AS customer_sk#13] +Input [3]: [ws_bill_customer_sk#10, ws_sold_date_sk#11, d_date_sk#12] (19) Scan parquet default.catalog_sales -Output [2]: [cs_ship_customer_sk#16, cs_sold_date_sk#17] +Output [2]: [cs_ship_customer_sk#14, cs_sold_date_sk#15] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#17), dynamicpruningexpression(cs_sold_date_sk#17 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(cs_sold_date_sk#15), dynamicpruningexpression(cs_sold_date_sk#15 IN dynamicpruning#8)] ReadSchema: struct (20) ColumnarToRow [codegen id : 10] -Input [2]: [cs_ship_customer_sk#16, cs_sold_date_sk#17] +Input [2]: [cs_ship_customer_sk#14, cs_sold_date_sk#15] (21) ReusedExchange [Reuses operator id: 57] -Output [1]: [d_date_sk#18] +Output [1]: [d_date_sk#16] (22) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cs_sold_date_sk#17] -Right keys [1]: [d_date_sk#18] +Left keys [1]: [cs_sold_date_sk#15] +Right keys [1]: [d_date_sk#16] Join condition: None (23) Project [codegen id : 10] -Output [1]: [cs_ship_customer_sk#16 AS customer_sk#19] -Input [3]: [cs_ship_customer_sk#16, cs_sold_date_sk#17, d_date_sk#18] +Output [1]: [cs_ship_customer_sk#14 AS customer_sk#17] +Input [3]: [cs_ship_customer_sk#14, cs_sold_date_sk#15, d_date_sk#16] (24) Union (25) Exchange -Input [1]: [customer_sk#15] -Arguments: hashpartitioning(customer_sk#15, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [1]: [customer_sk#13] +Arguments: hashpartitioning(customer_sk#13, 5), ENSURE_REQUIREMENTS, [plan_id=3] (26) Sort [codegen id : 11] -Input [1]: [customer_sk#15] -Arguments: [customer_sk#15 ASC NULLS FIRST], false, 0 +Input [1]: [customer_sk#13] +Arguments: [customer_sk#13 ASC NULLS FIRST], false, 0 (27) SortMergeJoin [codegen id : 13] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [customer_sk#15] +Right keys [1]: [customer_sk#13] Join condition: None (28) Project [codegen id : 13] @@ -167,84 +167,84 @@ Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] (29) Scan parquet default.customer_address -Output [2]: [ca_address_sk#21, ca_county#22] +Output [2]: [ca_address_sk#18, ca_county#19] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Douglas County,Gaines County,Richland County,Walker County]), IsNotNull(ca_address_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 12] -Input [2]: [ca_address_sk#21, ca_county#22] +Input [2]: [ca_address_sk#18, ca_county#19] (31) Filter [codegen id : 12] -Input [2]: [ca_address_sk#21, ca_county#22] -Condition : (ca_county#22 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#21)) +Input [2]: [ca_address_sk#18, ca_county#19] +Condition : (ca_county#19 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#18)) (32) Project [codegen id : 12] -Output [1]: [ca_address_sk#21] -Input [2]: [ca_address_sk#21, ca_county#22] +Output [1]: [ca_address_sk#18] +Input [2]: [ca_address_sk#18, ca_county#19] (33) BroadcastExchange -Input [1]: [ca_address_sk#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#23] +Input [1]: [ca_address_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (34) BroadcastHashJoin [codegen id : 13] Left keys [1]: [c_current_addr_sk#3] -Right keys [1]: [ca_address_sk#21] +Right keys [1]: [ca_address_sk#18] Join condition: None (35) Project [codegen id : 13] Output [1]: [c_current_cdemo_sk#2] -Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#21] +Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#18] (36) BroadcastExchange Input [1]: [c_current_cdemo_sk#2] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (37) Scan parquet default.customer_demographics -Output [9]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33] +Output [9]: [cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (38) ColumnarToRow -Input [9]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33] +Input [9]: [cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] (39) Filter -Input [9]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33] -Condition : isnotnull(cd_demo_sk#25) +Input [9]: [cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] +Condition : isnotnull(cd_demo_sk#20) (40) BroadcastHashJoin [codegen id : 14] Left keys [1]: [c_current_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#25] +Right keys [1]: [cd_demo_sk#20] Join condition: None (41) Project [codegen id : 14] -Output [8]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33] -Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33] +Output [8]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] +Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#20, cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] (42) HashAggregate [codegen id : 14] -Input [8]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33] -Keys [8]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33] +Input [8]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] +Keys [8]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#34] -Results [9]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33, count#35] +Aggregate Attributes [1]: [count#29] +Results [9]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28, count#30] (43) Exchange -Input [9]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33, count#35] -Arguments: hashpartitioning(cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [9]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28, count#30] +Arguments: hashpartitioning(cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28, 5), ENSURE_REQUIREMENTS, [plan_id=6] (44) HashAggregate [codegen id : 15] -Input [9]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33, count#35] -Keys [8]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33] +Input [9]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28, count#30] +Keys [8]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cd_purchase_estimate#24, cd_credit_rating#25, cd_dep_count#26, cd_dep_employed_count#27, cd_dep_college_count#28] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#37] -Results [14]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, count(1)#37 AS cnt1#38, cd_purchase_estimate#29, count(1)#37 AS cnt2#39, cd_credit_rating#30, count(1)#37 AS cnt3#40, cd_dep_count#31, count(1)#37 AS cnt4#41, cd_dep_employed_count#32, count(1)#37 AS cnt5#42, cd_dep_college_count#33, count(1)#37 AS cnt6#43] +Aggregate Attributes [1]: [count(1)#31] +Results [14]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, count(1)#31 AS cnt1#32, cd_purchase_estimate#24, count(1)#31 AS cnt2#33, cd_credit_rating#25, count(1)#31 AS cnt3#34, cd_dep_count#26, count(1)#31 AS cnt4#35, cd_dep_employed_count#27, count(1)#31 AS cnt5#36, cd_dep_college_count#28, count(1)#31 AS cnt6#37] (45) TakeOrderedAndProject -Input [14]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cnt1#38, cd_purchase_estimate#29, cnt2#39, cd_credit_rating#30, cnt3#40, cd_dep_count#31, cnt4#41, cd_dep_employed_count#32, cnt5#42, cd_dep_college_count#33, cnt6#43] -Arguments: 100, [cd_gender#26 ASC NULLS FIRST, cd_marital_status#27 ASC NULLS FIRST, cd_education_status#28 ASC NULLS FIRST, cd_purchase_estimate#29 ASC NULLS FIRST, cd_credit_rating#30 ASC NULLS FIRST, cd_dep_count#31 ASC NULLS FIRST, cd_dep_employed_count#32 ASC NULLS FIRST, cd_dep_college_count#33 ASC NULLS FIRST], [cd_gender#26, cd_marital_status#27, cd_education_status#28, cnt1#38, cd_purchase_estimate#29, cnt2#39, cd_credit_rating#30, cnt3#40, cd_dep_count#31, cnt4#41, cd_dep_employed_count#32, cnt5#42, cd_dep_college_count#33, cnt6#43] +Input [14]: [cd_gender#21, cd_marital_status#22, cd_education_status#23, cnt1#32, cd_purchase_estimate#24, cnt2#33, cd_credit_rating#25, cnt3#34, cd_dep_count#26, cnt4#35, cd_dep_employed_count#27, cnt5#36, cd_dep_college_count#28, cnt6#37] +Arguments: 100, [cd_gender#21 ASC NULLS FIRST, cd_marital_status#22 ASC NULLS FIRST, cd_education_status#23 ASC NULLS FIRST, cd_purchase_estimate#24 ASC NULLS FIRST, cd_credit_rating#25 ASC NULLS FIRST, cd_dep_count#26 ASC NULLS FIRST, cd_dep_employed_count#27 ASC NULLS FIRST, cd_dep_college_count#28 ASC NULLS FIRST], [cd_gender#21, cd_marital_status#22, cd_education_status#23, cnt1#32, cd_purchase_estimate#24, cnt2#33, cd_credit_rating#25, cnt3#34, cd_dep_count#26, cnt4#35, cd_dep_employed_count#27, cnt5#36, cd_dep_college_count#28, cnt6#37] ===== Subqueries ===== @@ -259,42 +259,42 @@ ObjectHashAggregate (52) (46) Scan parquet default.customer_address -Output [2]: [ca_address_sk#21, ca_county#22] +Output [2]: [ca_address_sk#18, ca_county#19] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Douglas County,Gaines County,Richland County,Walker County]), IsNotNull(ca_address_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 1] -Input [2]: [ca_address_sk#21, ca_county#22] +Input [2]: [ca_address_sk#18, ca_county#19] (48) Filter [codegen id : 1] -Input [2]: [ca_address_sk#21, ca_county#22] -Condition : (ca_county#22 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#21)) +Input [2]: [ca_address_sk#18, ca_county#19] +Condition : (ca_county#19 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#18)) (49) Project [codegen id : 1] -Output [1]: [ca_address_sk#21] -Input [2]: [ca_address_sk#21, ca_county#22] +Output [1]: [ca_address_sk#18] +Input [2]: [ca_address_sk#18, ca_county#19] (50) ObjectHashAggregate -Input [1]: [ca_address_sk#21] +Input [1]: [ca_address_sk#18] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 20440, 0, 0)] -Aggregate Attributes [1]: [buf#44] -Results [1]: [buf#45] +Functions [1]: [partial_bloom_filter_agg(xxhash64(ca_address_sk#18, 42), 2555, 20440, 0, 0)] +Aggregate Attributes [1]: [buf#38] +Results [1]: [buf#39] (51) Exchange -Input [1]: [buf#45] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#46] +Input [1]: [buf#39] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (52) ObjectHashAggregate -Input [1]: [buf#45] +Input [1]: [buf#39] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 20440, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 20440, 0, 0)#47] -Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#21, 42), 2555, 20440, 0, 0)#47 AS bloomFilter#48] +Functions [1]: [bloom_filter_agg(xxhash64(ca_address_sk#18, 42), 2555, 20440, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(ca_address_sk#18, 42), 2555, 20440, 0, 0)#40] +Results [1]: [bloom_filter_agg(xxhash64(ca_address_sk#18, 42), 2555, 20440, 0, 0)#40 AS bloomFilter#41] -Subquery:2 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 +Subquery:2 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 BroadcastExchange (57) +- * Project (56) +- * Filter (55) @@ -303,29 +303,29 @@ BroadcastExchange (57) (53) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#49, d_moy#50] +Output [3]: [d_date_sk#9, d_year#42, d_moy#43] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,7), IsNotNull(d_date_sk)] ReadSchema: struct (54) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#49, d_moy#50] +Input [3]: [d_date_sk#9, d_year#42, d_moy#43] (55) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#49, d_moy#50] -Condition : (((((isnotnull(d_year#49) AND isnotnull(d_moy#50)) AND (d_year#49 = 2002)) AND (d_moy#50 >= 4)) AND (d_moy#50 <= 7)) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#9, d_year#42, d_moy#43] +Condition : (((((isnotnull(d_year#42) AND isnotnull(d_moy#43)) AND (d_year#42 = 2002)) AND (d_moy#43 >= 4)) AND (d_moy#43 <= 7)) AND isnotnull(d_date_sk#9)) (56) Project [codegen id : 1] -Output [1]: [d_date_sk#10] -Input [3]: [d_date_sk#10, d_year#49, d_moy#50] +Output [1]: [d_date_sk#9] +Input [3]: [d_date_sk#9, d_year#42, d_moy#43] (57) BroadcastExchange -Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#51] +Input [1]: [d_date_sk#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] -Subquery:3 Hosting operator id = 14 Hosting Expression = ws_sold_date_sk#13 IN dynamicpruning#9 +Subquery:3 Hosting operator id = 14 Hosting Expression = ws_sold_date_sk#11 IN dynamicpruning#8 -Subquery:4 Hosting operator id = 19 Hosting Expression = cs_sold_date_sk#17 IN dynamicpruning#9 +Subquery:4 Hosting operator id = 19 Hosting Expression = cs_sold_date_sk#15 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a/explain.txt index 02522cd257d71..8396cdbc7d0fa 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q10a/explain.txt @@ -80,7 +80,7 @@ Input [3]: [ss_customer_sk#4, ss_sold_date_sk#5, d_date_sk#7] (9) BroadcastExchange Input [1]: [ss_customer_sk#4] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#1] @@ -88,58 +88,58 @@ Right keys [1]: [ss_customer_sk#4] Join condition: None (11) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#9, ws_sold_date_sk#10] +Output [2]: [ws_bill_customer_sk#8, ws_sold_date_sk#9] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#10), dynamicpruningexpression(ws_sold_date_sk#10 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(ws_sold_date_sk#9), dynamicpruningexpression(ws_sold_date_sk#9 IN dynamicpruning#6)] ReadSchema: struct (12) ColumnarToRow [codegen id : 4] -Input [2]: [ws_bill_customer_sk#9, ws_sold_date_sk#10] +Input [2]: [ws_bill_customer_sk#8, ws_sold_date_sk#9] (13) ReusedExchange [Reuses operator id: 46] -Output [1]: [d_date_sk#11] +Output [1]: [d_date_sk#10] (14) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ws_sold_date_sk#10] -Right keys [1]: [d_date_sk#11] +Left keys [1]: [ws_sold_date_sk#9] +Right keys [1]: [d_date_sk#10] Join condition: None (15) Project [codegen id : 4] -Output [1]: [ws_bill_customer_sk#9 AS customer_sk#12] -Input [3]: [ws_bill_customer_sk#9, ws_sold_date_sk#10, d_date_sk#11] +Output [1]: [ws_bill_customer_sk#8 AS customer_sk#11] +Input [3]: [ws_bill_customer_sk#8, ws_sold_date_sk#9, d_date_sk#10] (16) Scan parquet default.catalog_sales -Output [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] +Output [2]: [cs_ship_customer_sk#12, cs_sold_date_sk#13] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#14), dynamicpruningexpression(cs_sold_date_sk#14 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(cs_sold_date_sk#13), dynamicpruningexpression(cs_sold_date_sk#13 IN dynamicpruning#6)] ReadSchema: struct (17) ColumnarToRow [codegen id : 6] -Input [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] +Input [2]: [cs_ship_customer_sk#12, cs_sold_date_sk#13] (18) ReusedExchange [Reuses operator id: 46] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (19) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [cs_sold_date_sk#14] -Right keys [1]: [d_date_sk#15] +Left keys [1]: [cs_sold_date_sk#13] +Right keys [1]: [d_date_sk#14] Join condition: None (20) Project [codegen id : 6] -Output [1]: [cs_ship_customer_sk#13 AS customer_sk#16] -Input [3]: [cs_ship_customer_sk#13, cs_sold_date_sk#14, d_date_sk#15] +Output [1]: [cs_ship_customer_sk#12 AS customer_sk#15] +Input [3]: [cs_ship_customer_sk#12, cs_sold_date_sk#13, d_date_sk#14] (21) Union (22) BroadcastExchange -Input [1]: [customer_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Input [1]: [customer_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (23) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [customer_sk#12] +Right keys [1]: [customer_sk#11] Join condition: None (24) Project [codegen id : 9] @@ -147,84 +147,84 @@ Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] (25) Scan parquet default.customer_address -Output [2]: [ca_address_sk#18, ca_county#19] +Output [2]: [ca_address_sk#16, ca_county#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_county, [Dona Ana County,Douglas County,Gaines County,Richland County,Walker County]), IsNotNull(ca_address_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 7] -Input [2]: [ca_address_sk#18, ca_county#19] +Input [2]: [ca_address_sk#16, ca_county#17] (27) Filter [codegen id : 7] -Input [2]: [ca_address_sk#18, ca_county#19] -Condition : (ca_county#19 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#18)) +Input [2]: [ca_address_sk#16, ca_county#17] +Condition : (ca_county#17 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#16)) (28) Project [codegen id : 7] -Output [1]: [ca_address_sk#18] -Input [2]: [ca_address_sk#18, ca_county#19] +Output [1]: [ca_address_sk#16] +Input [2]: [ca_address_sk#16, ca_county#17] (29) BroadcastExchange -Input [1]: [ca_address_sk#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20] +Input [1]: [ca_address_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (30) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_current_addr_sk#3] -Right keys [1]: [ca_address_sk#18] +Right keys [1]: [ca_address_sk#16] Join condition: None (31) Project [codegen id : 9] Output [1]: [c_current_cdemo_sk#2] -Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#18] +Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#16] (32) Scan parquet default.customer_demographics -Output [9]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] +Output [9]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (33) ColumnarToRow [codegen id : 8] -Input [9]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] +Input [9]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] (34) Filter [codegen id : 8] -Input [9]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] -Condition : isnotnull(cd_demo_sk#21) +Input [9]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] +Condition : isnotnull(cd_demo_sk#18) (35) BroadcastExchange -Input [9]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#30] +Input [9]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (36) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_current_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#21] +Right keys [1]: [cd_demo_sk#18] Join condition: None (37) Project [codegen id : 9] -Output [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] -Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] +Output [8]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] +Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] (38) HashAggregate [codegen id : 9] -Input [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] -Keys [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] +Input [8]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] +Keys [8]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#31] -Results [9]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29, count#32] +Aggregate Attributes [1]: [count#27] +Results [9]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26, count#28] (39) Exchange -Input [9]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29, count#32] -Arguments: hashpartitioning(cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29, 5), ENSURE_REQUIREMENTS, [id=#33] +Input [9]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26, count#28] +Arguments: hashpartitioning(cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26, 5), ENSURE_REQUIREMENTS, [plan_id=5] (40) HashAggregate [codegen id : 10] -Input [9]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29, count#32] -Keys [8]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cd_purchase_estimate#25, cd_credit_rating#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] +Input [9]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26, count#28] +Keys [8]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cd_purchase_estimate#22, cd_credit_rating#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#34] -Results [14]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, count(1)#34 AS cnt1#35, cd_purchase_estimate#25, count(1)#34 AS cnt2#36, cd_credit_rating#26, count(1)#34 AS cnt3#37, cd_dep_count#27, count(1)#34 AS cnt4#38, cd_dep_employed_count#28, count(1)#34 AS cnt5#39, cd_dep_college_count#29, count(1)#34 AS cnt6#40] +Aggregate Attributes [1]: [count(1)#29] +Results [14]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, count(1)#29 AS cnt1#30, cd_purchase_estimate#22, count(1)#29 AS cnt2#31, cd_credit_rating#23, count(1)#29 AS cnt3#32, cd_dep_count#24, count(1)#29 AS cnt4#33, cd_dep_employed_count#25, count(1)#29 AS cnt5#34, cd_dep_college_count#26, count(1)#29 AS cnt6#35] (41) TakeOrderedAndProject -Input [14]: [cd_gender#22, cd_marital_status#23, cd_education_status#24, cnt1#35, cd_purchase_estimate#25, cnt2#36, cd_credit_rating#26, cnt3#37, cd_dep_count#27, cnt4#38, cd_dep_employed_count#28, cnt5#39, cd_dep_college_count#29, cnt6#40] -Arguments: 100, [cd_gender#22 ASC NULLS FIRST, cd_marital_status#23 ASC NULLS FIRST, cd_education_status#24 ASC NULLS FIRST, cd_purchase_estimate#25 ASC NULLS FIRST, cd_credit_rating#26 ASC NULLS FIRST, cd_dep_count#27 ASC NULLS FIRST, cd_dep_employed_count#28 ASC NULLS FIRST, cd_dep_college_count#29 ASC NULLS FIRST], [cd_gender#22, cd_marital_status#23, cd_education_status#24, cnt1#35, cd_purchase_estimate#25, cnt2#36, cd_credit_rating#26, cnt3#37, cd_dep_count#27, cnt4#38, cd_dep_employed_count#28, cnt5#39, cd_dep_college_count#29, cnt6#40] +Input [14]: [cd_gender#19, cd_marital_status#20, cd_education_status#21, cnt1#30, cd_purchase_estimate#22, cnt2#31, cd_credit_rating#23, cnt3#32, cd_dep_count#24, cnt4#33, cd_dep_employed_count#25, cnt5#34, cd_dep_college_count#26, cnt6#35] +Arguments: 100, [cd_gender#19 ASC NULLS FIRST, cd_marital_status#20 ASC NULLS FIRST, cd_education_status#21 ASC NULLS FIRST, cd_purchase_estimate#22 ASC NULLS FIRST, cd_credit_rating#23 ASC NULLS FIRST, cd_dep_count#24 ASC NULLS FIRST, cd_dep_employed_count#25 ASC NULLS FIRST, cd_dep_college_count#26 ASC NULLS FIRST], [cd_gender#19, cd_marital_status#20, cd_education_status#21, cnt1#30, cd_purchase_estimate#22, cnt2#31, cd_credit_rating#23, cnt3#32, cd_dep_count#24, cnt4#33, cd_dep_employed_count#25, cnt5#34, cd_dep_college_count#26, cnt6#35] ===== Subqueries ===== @@ -237,29 +237,29 @@ BroadcastExchange (46) (42) Scan parquet default.date_dim -Output [3]: [d_date_sk#7, d_year#41, d_moy#42] +Output [3]: [d_date_sk#7, d_year#36, d_moy#37] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,7), IsNotNull(d_date_sk)] ReadSchema: struct (43) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#41, d_moy#42] +Input [3]: [d_date_sk#7, d_year#36, d_moy#37] (44) Filter [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#41, d_moy#42] -Condition : (((((isnotnull(d_year#41) AND isnotnull(d_moy#42)) AND (d_year#41 = 2002)) AND (d_moy#42 >= 4)) AND (d_moy#42 <= 7)) AND isnotnull(d_date_sk#7)) +Input [3]: [d_date_sk#7, d_year#36, d_moy#37] +Condition : (((((isnotnull(d_year#36) AND isnotnull(d_moy#37)) AND (d_year#36 = 2002)) AND (d_moy#37 >= 4)) AND (d_moy#37 <= 7)) AND isnotnull(d_date_sk#7)) (45) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [3]: [d_date_sk#7, d_year#41, d_moy#42] +Input [3]: [d_date_sk#7, d_year#36, d_moy#37] (46) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#43] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -Subquery:2 Hosting operator id = 11 Hosting Expression = ws_sold_date_sk#10 IN dynamicpruning#6 +Subquery:2 Hosting operator id = 11 Hosting Expression = ws_sold_date_sk#9 IN dynamicpruning#6 -Subquery:3 Hosting operator id = 16 Hosting Expression = cs_sold_date_sk#14 IN dynamicpruning#6 +Subquery:3 Hosting operator id = 16 Hosting Expression = cs_sold_date_sk#13 IN dynamicpruning#6 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q11.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q11.sf100/explain.txt index 7591e3bdb30c7..eef33ed4a9731 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q11.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q11.sf100/explain.txt @@ -109,334 +109,334 @@ Input [6]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_list_price#3, ss_sol (7) Exchange Input [4]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7] -Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#8] +Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (8) Sort [codegen id : 3] Input [4]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7] Arguments: [ss_customer_sk#1 ASC NULLS FIRST], false, 0 (9) Scan parquet default.customer -Output [8]: [c_customer_sk#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] +Output [8]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (10) ColumnarToRow [codegen id : 4] -Input [8]: [c_customer_sk#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] +Input [8]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] (11) Filter [codegen id : 4] -Input [8]: [c_customer_sk#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] -Condition : (isnotnull(c_customer_sk#9) AND isnotnull(c_customer_id#10)) +Input [8]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] +Condition : (isnotnull(c_customer_sk#8) AND isnotnull(c_customer_id#9)) (12) Exchange -Input [8]: [c_customer_sk#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] -Arguments: hashpartitioning(c_customer_sk#9, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [8]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] +Arguments: hashpartitioning(c_customer_sk#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (13) Sort [codegen id : 5] -Input [8]: [c_customer_sk#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] -Arguments: [c_customer_sk#9 ASC NULLS FIRST], false, 0 +Input [8]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] +Arguments: [c_customer_sk#8 ASC NULLS FIRST], false, 0 (14) SortMergeJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#9] +Right keys [1]: [c_customer_sk#8] Join condition: None (15) Project [codegen id : 6] -Output [10]: [c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7] -Input [12]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7, c_customer_sk#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] +Output [10]: [c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7] +Input [12]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7, c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] (16) HashAggregate [codegen id : 6] -Input [10]: [c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7] -Keys [8]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] +Input [10]: [c_customer_id#9, c_first_name#10, c_last_name#11, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7] +Keys [8]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#7, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#3 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#18] -Results [9]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum#19] +Aggregate Attributes [1]: [sum#16] +Results [9]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#7, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15, sum#17] (17) Exchange -Input [9]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum#19] -Arguments: hashpartitioning(c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [9]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#7, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15, sum#17] +Arguments: hashpartitioning(c_customer_id#9, c_first_name#10, c_last_name#11, d_year#7, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 7] -Input [9]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum#19] -Keys [8]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16] +Input [9]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#7, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15, sum#17] +Keys [8]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#7, c_preferred_cust_flag#12, c_birth_country#13, c_login#14, c_email_address#15] Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#3 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#3 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(8,2)))), DecimalType(8,2))))#21] -Results [2]: [c_customer_id#10 AS customer_id#22, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#3 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(8,2)))), DecimalType(8,2))))#21,18,2) AS year_total#23] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#3 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(8,2)))), DecimalType(8,2))))#18] +Results [2]: [c_customer_id#9 AS customer_id#19, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#3 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#2 as decimal(8,2)))), DecimalType(8,2))))#18,18,2) AS year_total#20] (19) Filter [codegen id : 7] -Input [2]: [customer_id#22, year_total#23] -Condition : (isnotnull(year_total#23) AND (year_total#23 > 0.00)) +Input [2]: [customer_id#19, year_total#20] +Condition : (isnotnull(year_total#20) AND (year_total#20 > 0.00)) (20) Exchange -Input [2]: [customer_id#22, year_total#23] -Arguments: hashpartitioning(customer_id#22, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [2]: [customer_id#19, year_total#20] +Arguments: hashpartitioning(customer_id#19, 5), ENSURE_REQUIREMENTS, [plan_id=4] (21) Sort [codegen id : 8] -Input [2]: [customer_id#22, year_total#23] -Arguments: [customer_id#22 ASC NULLS FIRST], false, 0 +Input [2]: [customer_id#19, year_total#20] +Arguments: [customer_id#19 ASC NULLS FIRST], false, 0 (22) Scan parquet default.store_sales -Output [4]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, ss_sold_date_sk#28] +Output [4]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, ss_sold_date_sk#24] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#28), dynamicpruningexpression(ss_sold_date_sk#28 IN dynamicpruning#29)] +PartitionFilters: [isnotnull(ss_sold_date_sk#24), dynamicpruningexpression(ss_sold_date_sk#24 IN dynamicpruning#25)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 10] -Input [4]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, ss_sold_date_sk#28] +Input [4]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, ss_sold_date_sk#24] (24) Filter [codegen id : 10] -Input [4]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, ss_sold_date_sk#28] -Condition : isnotnull(ss_customer_sk#25) +Input [4]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, ss_sold_date_sk#24] +Condition : isnotnull(ss_customer_sk#21) (25) ReusedExchange [Reuses operator id: 87] -Output [2]: [d_date_sk#30, d_year#31] +Output [2]: [d_date_sk#26, d_year#27] (26) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_sold_date_sk#28] -Right keys [1]: [d_date_sk#30] +Left keys [1]: [ss_sold_date_sk#24] +Right keys [1]: [d_date_sk#26] Join condition: None (27) Project [codegen id : 10] -Output [4]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, d_year#31] -Input [6]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, ss_sold_date_sk#28, d_date_sk#30, d_year#31] +Output [4]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, d_year#27] +Input [6]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, ss_sold_date_sk#24, d_date_sk#26, d_year#27] (28) Exchange -Input [4]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, d_year#31] -Arguments: hashpartitioning(ss_customer_sk#25, 5), ENSURE_REQUIREMENTS, [id=#32] +Input [4]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, d_year#27] +Arguments: hashpartitioning(ss_customer_sk#21, 5), ENSURE_REQUIREMENTS, [plan_id=5] (29) Sort [codegen id : 11] -Input [4]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, d_year#31] -Arguments: [ss_customer_sk#25 ASC NULLS FIRST], false, 0 +Input [4]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, d_year#27] +Arguments: [ss_customer_sk#21 ASC NULLS FIRST], false, 0 (30) ReusedExchange [Reuses operator id: 12] -Output [8]: [c_customer_sk#33, c_customer_id#34, c_first_name#35, c_last_name#36, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40] +Output [8]: [c_customer_sk#28, c_customer_id#29, c_first_name#30, c_last_name#31, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35] (31) Sort [codegen id : 13] -Input [8]: [c_customer_sk#33, c_customer_id#34, c_first_name#35, c_last_name#36, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40] -Arguments: [c_customer_sk#33 ASC NULLS FIRST], false, 0 +Input [8]: [c_customer_sk#28, c_customer_id#29, c_first_name#30, c_last_name#31, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35] +Arguments: [c_customer_sk#28 ASC NULLS FIRST], false, 0 (32) SortMergeJoin [codegen id : 14] -Left keys [1]: [ss_customer_sk#25] -Right keys [1]: [c_customer_sk#33] +Left keys [1]: [ss_customer_sk#21] +Right keys [1]: [c_customer_sk#28] Join condition: None (33) Project [codegen id : 14] -Output [10]: [c_customer_id#34, c_first_name#35, c_last_name#36, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40, ss_ext_discount_amt#26, ss_ext_list_price#27, d_year#31] -Input [12]: [ss_customer_sk#25, ss_ext_discount_amt#26, ss_ext_list_price#27, d_year#31, c_customer_sk#33, c_customer_id#34, c_first_name#35, c_last_name#36, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40] +Output [10]: [c_customer_id#29, c_first_name#30, c_last_name#31, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35, ss_ext_discount_amt#22, ss_ext_list_price#23, d_year#27] +Input [12]: [ss_customer_sk#21, ss_ext_discount_amt#22, ss_ext_list_price#23, d_year#27, c_customer_sk#28, c_customer_id#29, c_first_name#30, c_last_name#31, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35] (34) HashAggregate [codegen id : 14] -Input [10]: [c_customer_id#34, c_first_name#35, c_last_name#36, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40, ss_ext_discount_amt#26, ss_ext_list_price#27, d_year#31] -Keys [8]: [c_customer_id#34, c_first_name#35, c_last_name#36, d_year#31, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40] -Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#27 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#26 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#41] -Results [9]: [c_customer_id#34, c_first_name#35, c_last_name#36, d_year#31, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40, sum#42] +Input [10]: [c_customer_id#29, c_first_name#30, c_last_name#31, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35, ss_ext_discount_amt#22, ss_ext_list_price#23, d_year#27] +Keys [8]: [c_customer_id#29, c_first_name#30, c_last_name#31, d_year#27, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35] +Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#23 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#22 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum#36] +Results [9]: [c_customer_id#29, c_first_name#30, c_last_name#31, d_year#27, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35, sum#37] (35) Exchange -Input [9]: [c_customer_id#34, c_first_name#35, c_last_name#36, d_year#31, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40, sum#42] -Arguments: hashpartitioning(c_customer_id#34, c_first_name#35, c_last_name#36, d_year#31, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40, 5), ENSURE_REQUIREMENTS, [id=#43] +Input [9]: [c_customer_id#29, c_first_name#30, c_last_name#31, d_year#27, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35, sum#37] +Arguments: hashpartitioning(c_customer_id#29, c_first_name#30, c_last_name#31, d_year#27, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35, 5), ENSURE_REQUIREMENTS, [plan_id=6] (36) HashAggregate [codegen id : 15] -Input [9]: [c_customer_id#34, c_first_name#35, c_last_name#36, d_year#31, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40, sum#42] -Keys [8]: [c_customer_id#34, c_first_name#35, c_last_name#36, d_year#31, c_preferred_cust_flag#37, c_birth_country#38, c_login#39, c_email_address#40] -Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#27 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#26 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#27 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#26 as decimal(8,2)))), DecimalType(8,2))))#21] -Results [5]: [c_customer_id#34 AS customer_id#44, c_first_name#35 AS customer_first_name#45, c_last_name#36 AS customer_last_name#46, c_email_address#40 AS customer_email_address#47, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#27 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#26 as decimal(8,2)))), DecimalType(8,2))))#21,18,2) AS year_total#48] +Input [9]: [c_customer_id#29, c_first_name#30, c_last_name#31, d_year#27, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35, sum#37] +Keys [8]: [c_customer_id#29, c_first_name#30, c_last_name#31, d_year#27, c_preferred_cust_flag#32, c_birth_country#33, c_login#34, c_email_address#35] +Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#23 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#22 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#23 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#22 as decimal(8,2)))), DecimalType(8,2))))#18] +Results [5]: [c_customer_id#29 AS customer_id#38, c_first_name#30 AS customer_first_name#39, c_last_name#31 AS customer_last_name#40, c_email_address#35 AS customer_email_address#41, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#23 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#22 as decimal(8,2)))), DecimalType(8,2))))#18,18,2) AS year_total#42] (37) Exchange -Input [5]: [customer_id#44, customer_first_name#45, customer_last_name#46, customer_email_address#47, year_total#48] -Arguments: hashpartitioning(customer_id#44, 5), ENSURE_REQUIREMENTS, [id=#49] +Input [5]: [customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41, year_total#42] +Arguments: hashpartitioning(customer_id#38, 5), ENSURE_REQUIREMENTS, [plan_id=7] (38) Sort [codegen id : 16] -Input [5]: [customer_id#44, customer_first_name#45, customer_last_name#46, customer_email_address#47, year_total#48] -Arguments: [customer_id#44 ASC NULLS FIRST], false, 0 +Input [5]: [customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41, year_total#42] +Arguments: [customer_id#38 ASC NULLS FIRST], false, 0 (39) SortMergeJoin [codegen id : 17] -Left keys [1]: [customer_id#22] -Right keys [1]: [customer_id#44] +Left keys [1]: [customer_id#19] +Right keys [1]: [customer_id#38] Join condition: None (40) Scan parquet default.web_sales -Output [4]: [ws_bill_customer_sk#50, ws_ext_discount_amt#51, ws_ext_list_price#52, ws_sold_date_sk#53] +Output [4]: [ws_bill_customer_sk#43, ws_ext_discount_amt#44, ws_ext_list_price#45, ws_sold_date_sk#46] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#53), dynamicpruningexpression(ws_sold_date_sk#53 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#46), dynamicpruningexpression(ws_sold_date_sk#46 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (41) ColumnarToRow [codegen id : 19] -Input [4]: [ws_bill_customer_sk#50, ws_ext_discount_amt#51, ws_ext_list_price#52, ws_sold_date_sk#53] +Input [4]: [ws_bill_customer_sk#43, ws_ext_discount_amt#44, ws_ext_list_price#45, ws_sold_date_sk#46] (42) Filter [codegen id : 19] -Input [4]: [ws_bill_customer_sk#50, ws_ext_discount_amt#51, ws_ext_list_price#52, ws_sold_date_sk#53] -Condition : isnotnull(ws_bill_customer_sk#50) +Input [4]: [ws_bill_customer_sk#43, ws_ext_discount_amt#44, ws_ext_list_price#45, ws_sold_date_sk#46] +Condition : isnotnull(ws_bill_customer_sk#43) (43) ReusedExchange [Reuses operator id: 83] -Output [2]: [d_date_sk#54, d_year#55] +Output [2]: [d_date_sk#47, d_year#48] (44) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [ws_sold_date_sk#53] -Right keys [1]: [d_date_sk#54] +Left keys [1]: [ws_sold_date_sk#46] +Right keys [1]: [d_date_sk#47] Join condition: None (45) Project [codegen id : 19] -Output [4]: [ws_bill_customer_sk#50, ws_ext_discount_amt#51, ws_ext_list_price#52, d_year#55] -Input [6]: [ws_bill_customer_sk#50, ws_ext_discount_amt#51, ws_ext_list_price#52, ws_sold_date_sk#53, d_date_sk#54, d_year#55] +Output [4]: [ws_bill_customer_sk#43, ws_ext_discount_amt#44, ws_ext_list_price#45, d_year#48] +Input [6]: [ws_bill_customer_sk#43, ws_ext_discount_amt#44, ws_ext_list_price#45, ws_sold_date_sk#46, d_date_sk#47, d_year#48] (46) Exchange -Input [4]: [ws_bill_customer_sk#50, ws_ext_discount_amt#51, ws_ext_list_price#52, d_year#55] -Arguments: hashpartitioning(ws_bill_customer_sk#50, 5), ENSURE_REQUIREMENTS, [id=#56] +Input [4]: [ws_bill_customer_sk#43, ws_ext_discount_amt#44, ws_ext_list_price#45, d_year#48] +Arguments: hashpartitioning(ws_bill_customer_sk#43, 5), ENSURE_REQUIREMENTS, [plan_id=8] (47) Sort [codegen id : 20] -Input [4]: [ws_bill_customer_sk#50, ws_ext_discount_amt#51, ws_ext_list_price#52, d_year#55] -Arguments: [ws_bill_customer_sk#50 ASC NULLS FIRST], false, 0 +Input [4]: [ws_bill_customer_sk#43, ws_ext_discount_amt#44, ws_ext_list_price#45, d_year#48] +Arguments: [ws_bill_customer_sk#43 ASC NULLS FIRST], false, 0 (48) ReusedExchange [Reuses operator id: 12] -Output [8]: [c_customer_sk#57, c_customer_id#58, c_first_name#59, c_last_name#60, c_preferred_cust_flag#61, c_birth_country#62, c_login#63, c_email_address#64] +Output [8]: [c_customer_sk#49, c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56] (49) Sort [codegen id : 22] -Input [8]: [c_customer_sk#57, c_customer_id#58, c_first_name#59, c_last_name#60, c_preferred_cust_flag#61, c_birth_country#62, c_login#63, c_email_address#64] -Arguments: [c_customer_sk#57 ASC NULLS FIRST], false, 0 +Input [8]: [c_customer_sk#49, c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56] +Arguments: [c_customer_sk#49 ASC NULLS FIRST], false, 0 (50) SortMergeJoin [codegen id : 23] -Left keys [1]: [ws_bill_customer_sk#50] -Right keys [1]: [c_customer_sk#57] +Left keys [1]: [ws_bill_customer_sk#43] +Right keys [1]: [c_customer_sk#49] Join condition: None (51) Project [codegen id : 23] -Output [10]: [c_customer_id#58, c_first_name#59, c_last_name#60, c_preferred_cust_flag#61, c_birth_country#62, c_login#63, c_email_address#64, ws_ext_discount_amt#51, ws_ext_list_price#52, d_year#55] -Input [12]: [ws_bill_customer_sk#50, ws_ext_discount_amt#51, ws_ext_list_price#52, d_year#55, c_customer_sk#57, c_customer_id#58, c_first_name#59, c_last_name#60, c_preferred_cust_flag#61, c_birth_country#62, c_login#63, c_email_address#64] +Output [10]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, ws_ext_discount_amt#44, ws_ext_list_price#45, d_year#48] +Input [12]: [ws_bill_customer_sk#43, ws_ext_discount_amt#44, ws_ext_list_price#45, d_year#48, c_customer_sk#49, c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56] (52) HashAggregate [codegen id : 23] -Input [10]: [c_customer_id#58, c_first_name#59, c_last_name#60, c_preferred_cust_flag#61, c_birth_country#62, c_login#63, c_email_address#64, ws_ext_discount_amt#51, ws_ext_list_price#52, d_year#55] -Keys [8]: [c_customer_id#58, c_first_name#59, c_last_name#60, c_preferred_cust_flag#61, c_birth_country#62, c_login#63, c_email_address#64, d_year#55] -Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#52 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#51 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#65] -Results [9]: [c_customer_id#58, c_first_name#59, c_last_name#60, c_preferred_cust_flag#61, c_birth_country#62, c_login#63, c_email_address#64, d_year#55, sum#66] +Input [10]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, ws_ext_discount_amt#44, ws_ext_list_price#45, d_year#48] +Keys [8]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#48] +Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#45 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#44 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum#57] +Results [9]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#48, sum#58] (53) Exchange -Input [9]: [c_customer_id#58, c_first_name#59, c_last_name#60, c_preferred_cust_flag#61, c_birth_country#62, c_login#63, c_email_address#64, d_year#55, sum#66] -Arguments: hashpartitioning(c_customer_id#58, c_first_name#59, c_last_name#60, c_preferred_cust_flag#61, c_birth_country#62, c_login#63, c_email_address#64, d_year#55, 5), ENSURE_REQUIREMENTS, [id=#67] +Input [9]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#48, sum#58] +Arguments: hashpartitioning(c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#48, 5), ENSURE_REQUIREMENTS, [plan_id=9] (54) HashAggregate [codegen id : 24] -Input [9]: [c_customer_id#58, c_first_name#59, c_last_name#60, c_preferred_cust_flag#61, c_birth_country#62, c_login#63, c_email_address#64, d_year#55, sum#66] -Keys [8]: [c_customer_id#58, c_first_name#59, c_last_name#60, c_preferred_cust_flag#61, c_birth_country#62, c_login#63, c_email_address#64, d_year#55] -Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#52 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#51 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#52 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#51 as decimal(8,2)))), DecimalType(8,2))))#68] -Results [2]: [c_customer_id#58 AS customer_id#69, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#52 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#51 as decimal(8,2)))), DecimalType(8,2))))#68,18,2) AS year_total#70] +Input [9]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#48, sum#58] +Keys [8]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#48] +Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#45 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#44 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#45 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#44 as decimal(8,2)))), DecimalType(8,2))))#59] +Results [2]: [c_customer_id#50 AS customer_id#60, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#45 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#44 as decimal(8,2)))), DecimalType(8,2))))#59,18,2) AS year_total#61] (55) Filter [codegen id : 24] -Input [2]: [customer_id#69, year_total#70] -Condition : (isnotnull(year_total#70) AND (year_total#70 > 0.00)) +Input [2]: [customer_id#60, year_total#61] +Condition : (isnotnull(year_total#61) AND (year_total#61 > 0.00)) (56) Exchange -Input [2]: [customer_id#69, year_total#70] -Arguments: hashpartitioning(customer_id#69, 5), ENSURE_REQUIREMENTS, [id=#71] +Input [2]: [customer_id#60, year_total#61] +Arguments: hashpartitioning(customer_id#60, 5), ENSURE_REQUIREMENTS, [plan_id=10] (57) Sort [codegen id : 25] -Input [2]: [customer_id#69, year_total#70] -Arguments: [customer_id#69 ASC NULLS FIRST], false, 0 +Input [2]: [customer_id#60, year_total#61] +Arguments: [customer_id#60 ASC NULLS FIRST], false, 0 (58) SortMergeJoin [codegen id : 26] -Left keys [1]: [customer_id#22] -Right keys [1]: [customer_id#69] +Left keys [1]: [customer_id#19] +Right keys [1]: [customer_id#60] Join condition: None (59) Project [codegen id : 26] -Output [8]: [customer_id#22, year_total#23, customer_id#44, customer_first_name#45, customer_last_name#46, customer_email_address#47, year_total#48, year_total#70] -Input [9]: [customer_id#22, year_total#23, customer_id#44, customer_first_name#45, customer_last_name#46, customer_email_address#47, year_total#48, customer_id#69, year_total#70] +Output [8]: [customer_id#19, year_total#20, customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41, year_total#42, year_total#61] +Input [9]: [customer_id#19, year_total#20, customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41, year_total#42, customer_id#60, year_total#61] (60) Scan parquet default.web_sales -Output [4]: [ws_bill_customer_sk#72, ws_ext_discount_amt#73, ws_ext_list_price#74, ws_sold_date_sk#75] +Output [4]: [ws_bill_customer_sk#62, ws_ext_discount_amt#63, ws_ext_list_price#64, ws_sold_date_sk#65] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#75), dynamicpruningexpression(ws_sold_date_sk#75 IN dynamicpruning#29)] +PartitionFilters: [isnotnull(ws_sold_date_sk#65), dynamicpruningexpression(ws_sold_date_sk#65 IN dynamicpruning#25)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (61) ColumnarToRow [codegen id : 28] -Input [4]: [ws_bill_customer_sk#72, ws_ext_discount_amt#73, ws_ext_list_price#74, ws_sold_date_sk#75] +Input [4]: [ws_bill_customer_sk#62, ws_ext_discount_amt#63, ws_ext_list_price#64, ws_sold_date_sk#65] (62) Filter [codegen id : 28] -Input [4]: [ws_bill_customer_sk#72, ws_ext_discount_amt#73, ws_ext_list_price#74, ws_sold_date_sk#75] -Condition : isnotnull(ws_bill_customer_sk#72) +Input [4]: [ws_bill_customer_sk#62, ws_ext_discount_amt#63, ws_ext_list_price#64, ws_sold_date_sk#65] +Condition : isnotnull(ws_bill_customer_sk#62) (63) ReusedExchange [Reuses operator id: 87] -Output [2]: [d_date_sk#76, d_year#77] +Output [2]: [d_date_sk#66, d_year#67] (64) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [ws_sold_date_sk#75] -Right keys [1]: [d_date_sk#76] +Left keys [1]: [ws_sold_date_sk#65] +Right keys [1]: [d_date_sk#66] Join condition: None (65) Project [codegen id : 28] -Output [4]: [ws_bill_customer_sk#72, ws_ext_discount_amt#73, ws_ext_list_price#74, d_year#77] -Input [6]: [ws_bill_customer_sk#72, ws_ext_discount_amt#73, ws_ext_list_price#74, ws_sold_date_sk#75, d_date_sk#76, d_year#77] +Output [4]: [ws_bill_customer_sk#62, ws_ext_discount_amt#63, ws_ext_list_price#64, d_year#67] +Input [6]: [ws_bill_customer_sk#62, ws_ext_discount_amt#63, ws_ext_list_price#64, ws_sold_date_sk#65, d_date_sk#66, d_year#67] (66) Exchange -Input [4]: [ws_bill_customer_sk#72, ws_ext_discount_amt#73, ws_ext_list_price#74, d_year#77] -Arguments: hashpartitioning(ws_bill_customer_sk#72, 5), ENSURE_REQUIREMENTS, [id=#78] +Input [4]: [ws_bill_customer_sk#62, ws_ext_discount_amt#63, ws_ext_list_price#64, d_year#67] +Arguments: hashpartitioning(ws_bill_customer_sk#62, 5), ENSURE_REQUIREMENTS, [plan_id=11] (67) Sort [codegen id : 29] -Input [4]: [ws_bill_customer_sk#72, ws_ext_discount_amt#73, ws_ext_list_price#74, d_year#77] -Arguments: [ws_bill_customer_sk#72 ASC NULLS FIRST], false, 0 +Input [4]: [ws_bill_customer_sk#62, ws_ext_discount_amt#63, ws_ext_list_price#64, d_year#67] +Arguments: [ws_bill_customer_sk#62 ASC NULLS FIRST], false, 0 (68) ReusedExchange [Reuses operator id: 12] -Output [8]: [c_customer_sk#79, c_customer_id#80, c_first_name#81, c_last_name#82, c_preferred_cust_flag#83, c_birth_country#84, c_login#85, c_email_address#86] +Output [8]: [c_customer_sk#68, c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75] (69) Sort [codegen id : 31] -Input [8]: [c_customer_sk#79, c_customer_id#80, c_first_name#81, c_last_name#82, c_preferred_cust_flag#83, c_birth_country#84, c_login#85, c_email_address#86] -Arguments: [c_customer_sk#79 ASC NULLS FIRST], false, 0 +Input [8]: [c_customer_sk#68, c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75] +Arguments: [c_customer_sk#68 ASC NULLS FIRST], false, 0 (70) SortMergeJoin [codegen id : 32] -Left keys [1]: [ws_bill_customer_sk#72] -Right keys [1]: [c_customer_sk#79] +Left keys [1]: [ws_bill_customer_sk#62] +Right keys [1]: [c_customer_sk#68] Join condition: None (71) Project [codegen id : 32] -Output [10]: [c_customer_id#80, c_first_name#81, c_last_name#82, c_preferred_cust_flag#83, c_birth_country#84, c_login#85, c_email_address#86, ws_ext_discount_amt#73, ws_ext_list_price#74, d_year#77] -Input [12]: [ws_bill_customer_sk#72, ws_ext_discount_amt#73, ws_ext_list_price#74, d_year#77, c_customer_sk#79, c_customer_id#80, c_first_name#81, c_last_name#82, c_preferred_cust_flag#83, c_birth_country#84, c_login#85, c_email_address#86] +Output [10]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, ws_ext_discount_amt#63, ws_ext_list_price#64, d_year#67] +Input [12]: [ws_bill_customer_sk#62, ws_ext_discount_amt#63, ws_ext_list_price#64, d_year#67, c_customer_sk#68, c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75] (72) HashAggregate [codegen id : 32] -Input [10]: [c_customer_id#80, c_first_name#81, c_last_name#82, c_preferred_cust_flag#83, c_birth_country#84, c_login#85, c_email_address#86, ws_ext_discount_amt#73, ws_ext_list_price#74, d_year#77] -Keys [8]: [c_customer_id#80, c_first_name#81, c_last_name#82, c_preferred_cust_flag#83, c_birth_country#84, c_login#85, c_email_address#86, d_year#77] -Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#74 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#73 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#87] -Results [9]: [c_customer_id#80, c_first_name#81, c_last_name#82, c_preferred_cust_flag#83, c_birth_country#84, c_login#85, c_email_address#86, d_year#77, sum#88] +Input [10]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, ws_ext_discount_amt#63, ws_ext_list_price#64, d_year#67] +Keys [8]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#67] +Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#64 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#63 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum#76] +Results [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#67, sum#77] (73) Exchange -Input [9]: [c_customer_id#80, c_first_name#81, c_last_name#82, c_preferred_cust_flag#83, c_birth_country#84, c_login#85, c_email_address#86, d_year#77, sum#88] -Arguments: hashpartitioning(c_customer_id#80, c_first_name#81, c_last_name#82, c_preferred_cust_flag#83, c_birth_country#84, c_login#85, c_email_address#86, d_year#77, 5), ENSURE_REQUIREMENTS, [id=#89] +Input [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#67, sum#77] +Arguments: hashpartitioning(c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#67, 5), ENSURE_REQUIREMENTS, [plan_id=12] (74) HashAggregate [codegen id : 33] -Input [9]: [c_customer_id#80, c_first_name#81, c_last_name#82, c_preferred_cust_flag#83, c_birth_country#84, c_login#85, c_email_address#86, d_year#77, sum#88] -Keys [8]: [c_customer_id#80, c_first_name#81, c_last_name#82, c_preferred_cust_flag#83, c_birth_country#84, c_login#85, c_email_address#86, d_year#77] -Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#74 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#73 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#74 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#73 as decimal(8,2)))), DecimalType(8,2))))#68] -Results [2]: [c_customer_id#80 AS customer_id#90, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#74 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#73 as decimal(8,2)))), DecimalType(8,2))))#68,18,2) AS year_total#91] +Input [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#67, sum#77] +Keys [8]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#67] +Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#64 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#63 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#64 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#63 as decimal(8,2)))), DecimalType(8,2))))#59] +Results [2]: [c_customer_id#69 AS customer_id#78, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#64 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#63 as decimal(8,2)))), DecimalType(8,2))))#59,18,2) AS year_total#79] (75) Exchange -Input [2]: [customer_id#90, year_total#91] -Arguments: hashpartitioning(customer_id#90, 5), ENSURE_REQUIREMENTS, [id=#92] +Input [2]: [customer_id#78, year_total#79] +Arguments: hashpartitioning(customer_id#78, 5), ENSURE_REQUIREMENTS, [plan_id=13] (76) Sort [codegen id : 34] -Input [2]: [customer_id#90, year_total#91] -Arguments: [customer_id#90 ASC NULLS FIRST], false, 0 +Input [2]: [customer_id#78, year_total#79] +Arguments: [customer_id#78 ASC NULLS FIRST], false, 0 (77) SortMergeJoin [codegen id : 35] -Left keys [1]: [customer_id#22] -Right keys [1]: [customer_id#90] -Join condition: (CASE WHEN (year_total#70 > 0.00) THEN CheckOverflow((promote_precision(year_total#91) / promote_precision(year_total#70)), DecimalType(38,20)) ELSE 0E-20 END > CASE WHEN (year_total#23 > 0.00) THEN CheckOverflow((promote_precision(year_total#48) / promote_precision(year_total#23)), DecimalType(38,20)) ELSE 0E-20 END) +Left keys [1]: [customer_id#19] +Right keys [1]: [customer_id#78] +Join condition: (CASE WHEN (year_total#61 > 0.00) THEN CheckOverflow((promote_precision(year_total#79) / promote_precision(year_total#61)), DecimalType(38,20)) ELSE 0E-20 END > CASE WHEN (year_total#20 > 0.00) THEN CheckOverflow((promote_precision(year_total#42) / promote_precision(year_total#20)), DecimalType(38,20)) ELSE 0E-20 END) (78) Project [codegen id : 35] -Output [4]: [customer_id#44, customer_first_name#45, customer_last_name#46, customer_email_address#47] -Input [10]: [customer_id#22, year_total#23, customer_id#44, customer_first_name#45, customer_last_name#46, customer_email_address#47, year_total#48, year_total#70, customer_id#90, year_total#91] +Output [4]: [customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41] +Input [10]: [customer_id#19, year_total#20, customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41, year_total#42, year_total#61, customer_id#78, year_total#79] (79) TakeOrderedAndProject -Input [4]: [customer_id#44, customer_first_name#45, customer_last_name#46, customer_email_address#47] -Arguments: 100, [customer_id#44 ASC NULLS FIRST, customer_first_name#45 ASC NULLS FIRST, customer_last_name#46 ASC NULLS FIRST, customer_email_address#47 ASC NULLS FIRST], [customer_id#44, customer_first_name#45, customer_last_name#46, customer_email_address#47] +Input [4]: [customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41] +Arguments: 100, [customer_id#38 ASC NULLS FIRST, customer_first_name#39 ASC NULLS FIRST, customer_last_name#40 ASC NULLS FIRST, customer_email_address#41 ASC NULLS FIRST], [customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41] ===== Subqueries ===== @@ -463,9 +463,9 @@ Condition : ((isnotnull(d_year#7) AND (d_year#7 = 2001)) AND isnotnull(d_date_sk (83) BroadcastExchange Input [2]: [d_date_sk#6, d_year#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#93] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=14] -Subquery:2 Hosting operator id = 22 Hosting Expression = ss_sold_date_sk#28 IN dynamicpruning#29 +Subquery:2 Hosting operator id = 22 Hosting Expression = ss_sold_date_sk#24 IN dynamicpruning#25 BroadcastExchange (87) +- * Filter (86) +- * ColumnarToRow (85) @@ -473,25 +473,25 @@ BroadcastExchange (87) (84) Scan parquet default.date_dim -Output [2]: [d_date_sk#30, d_year#31] +Output [2]: [d_date_sk#26, d_year#27] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)] ReadSchema: struct (85) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#30, d_year#31] +Input [2]: [d_date_sk#26, d_year#27] (86) Filter [codegen id : 1] -Input [2]: [d_date_sk#30, d_year#31] -Condition : ((isnotnull(d_year#31) AND (d_year#31 = 2002)) AND isnotnull(d_date_sk#30)) +Input [2]: [d_date_sk#26, d_year#27] +Condition : ((isnotnull(d_year#27) AND (d_year#27 = 2002)) AND isnotnull(d_date_sk#26)) (87) BroadcastExchange -Input [2]: [d_date_sk#30, d_year#31] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#94] +Input [2]: [d_date_sk#26, d_year#27] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15] -Subquery:3 Hosting operator id = 40 Hosting Expression = ws_sold_date_sk#53 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 40 Hosting Expression = ws_sold_date_sk#46 IN dynamicpruning#5 -Subquery:4 Hosting operator id = 60 Hosting Expression = ws_sold_date_sk#75 IN dynamicpruning#29 +Subquery:4 Hosting operator id = 60 Hosting Expression = ws_sold_date_sk#65 IN dynamicpruning#25 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q11/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q11/explain.txt index 69d3f4ac97247..2884c8e7ba231 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q11/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q11/explain.txt @@ -103,7 +103,7 @@ Condition : isnotnull(ss_customer_sk#9) (7) BroadcastExchange Input [4]: [ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [c_customer_sk#1] @@ -115,297 +115,297 @@ Output [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_f Input [12]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12] (10) ReusedExchange [Reuses operator id: 75] -Output [2]: [d_date_sk#15, d_year#16] +Output [2]: [d_date_sk#14, d_year#15] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_sold_date_sk#12] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (12) Project [codegen id : 3] -Output [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_list_price#11, d_year#16] -Input [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12, d_date_sk#15, d_year#16] +Output [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_list_price#11, d_year#15] +Input [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12, d_date_sk#14, d_year#15] (13) HashAggregate [codegen id : 3] -Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_list_price#11, d_year#16] -Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#16, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8] +Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_list_price#11, d_year#15] +Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8] Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#11 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#17] -Results [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#16, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18] +Aggregate Attributes [1]: [sum#16] +Results [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#17] (14) Exchange -Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#16, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18] -Arguments: hashpartitioning(c_customer_id#2, c_first_name#3, c_last_name#4, d_year#16, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#17] +Arguments: hashpartitioning(c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 16] -Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#16, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18] -Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#16, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8] +Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#17] +Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8] Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#11 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#11 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(8,2)))), DecimalType(8,2))))#20] -Results [2]: [c_customer_id#2 AS customer_id#21, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#11 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(8,2)))), DecimalType(8,2))))#20,18,2) AS year_total#22] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#11 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(8,2)))), DecimalType(8,2))))#18] +Results [2]: [c_customer_id#2 AS customer_id#19, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#11 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#10 as decimal(8,2)))), DecimalType(8,2))))#18,18,2) AS year_total#20] (16) Filter [codegen id : 16] -Input [2]: [customer_id#21, year_total#22] -Condition : (isnotnull(year_total#22) AND (year_total#22 > 0.00)) +Input [2]: [customer_id#19, year_total#20] +Condition : (isnotnull(year_total#20) AND (year_total#20 > 0.00)) (17) Scan parquet default.customer -Output [8]: [c_customer_sk#23, c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30] +Output [8]: [c_customer_sk#21, c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (18) ColumnarToRow [codegen id : 6] -Input [8]: [c_customer_sk#23, c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30] +Input [8]: [c_customer_sk#21, c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28] (19) Filter [codegen id : 6] -Input [8]: [c_customer_sk#23, c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30] -Condition : (isnotnull(c_customer_sk#23) AND isnotnull(c_customer_id#24)) +Input [8]: [c_customer_sk#21, c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28] +Condition : (isnotnull(c_customer_sk#21) AND isnotnull(c_customer_id#22)) (20) Scan parquet default.store_sales -Output [4]: [ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34] +Output [4]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_list_price#31, ss_sold_date_sk#32] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#34), dynamicpruningexpression(ss_sold_date_sk#34 IN dynamicpruning#35)] +PartitionFilters: [isnotnull(ss_sold_date_sk#32), dynamicpruningexpression(ss_sold_date_sk#32 IN dynamicpruning#33)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [4]: [ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34] +Input [4]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_list_price#31, ss_sold_date_sk#32] (22) Filter [codegen id : 4] -Input [4]: [ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34] -Condition : isnotnull(ss_customer_sk#31) +Input [4]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_list_price#31, ss_sold_date_sk#32] +Condition : isnotnull(ss_customer_sk#29) (23) BroadcastExchange -Input [4]: [ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#36] +Input [4]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_list_price#31, ss_sold_date_sk#32] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [c_customer_sk#23] -Right keys [1]: [ss_customer_sk#31] +Left keys [1]: [c_customer_sk#21] +Right keys [1]: [ss_customer_sk#29] Join condition: None (25) Project [codegen id : 6] -Output [10]: [c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34] -Input [12]: [c_customer_sk#23, c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34] +Output [10]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_list_price#31, ss_sold_date_sk#32] +Input [12]: [c_customer_sk#21, c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_list_price#31, ss_sold_date_sk#32] (26) ReusedExchange [Reuses operator id: 79] -Output [2]: [d_date_sk#37, d_year#38] +Output [2]: [d_date_sk#34, d_year#35] (27) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ss_sold_date_sk#34] -Right keys [1]: [d_date_sk#37] +Left keys [1]: [ss_sold_date_sk#32] +Right keys [1]: [d_date_sk#34] Join condition: None (28) Project [codegen id : 6] -Output [10]: [c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, ss_ext_discount_amt#32, ss_ext_list_price#33, d_year#38] -Input [12]: [c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34, d_date_sk#37, d_year#38] +Output [10]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_list_price#31, d_year#35] +Input [12]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_list_price#31, ss_sold_date_sk#32, d_date_sk#34, d_year#35] (29) HashAggregate [codegen id : 6] -Input [10]: [c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, ss_ext_discount_amt#32, ss_ext_list_price#33, d_year#38] -Keys [8]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#38, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30] -Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#33 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#32 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#39] -Results [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#38, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40] +Input [10]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_list_price#31, d_year#35] +Keys [8]: [c_customer_id#22, c_first_name#23, c_last_name#24, d_year#35, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28] +Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#31 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#30 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum#36] +Results [9]: [c_customer_id#22, c_first_name#23, c_last_name#24, d_year#35, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, sum#37] (30) Exchange -Input [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#38, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40] -Arguments: hashpartitioning(c_customer_id#24, c_first_name#25, c_last_name#26, d_year#38, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, 5), ENSURE_REQUIREMENTS, [id=#41] +Input [9]: [c_customer_id#22, c_first_name#23, c_last_name#24, d_year#35, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, sum#37] +Arguments: hashpartitioning(c_customer_id#22, c_first_name#23, c_last_name#24, d_year#35, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, 5), ENSURE_REQUIREMENTS, [plan_id=4] (31) HashAggregate [codegen id : 7] -Input [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#38, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40] -Keys [8]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#38, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30] -Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#33 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#32 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#33 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#32 as decimal(8,2)))), DecimalType(8,2))))#20] -Results [5]: [c_customer_id#24 AS customer_id#42, c_first_name#25 AS customer_first_name#43, c_last_name#26 AS customer_last_name#44, c_email_address#30 AS customer_email_address#45, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#33 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#32 as decimal(8,2)))), DecimalType(8,2))))#20,18,2) AS year_total#46] +Input [9]: [c_customer_id#22, c_first_name#23, c_last_name#24, d_year#35, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, sum#37] +Keys [8]: [c_customer_id#22, c_first_name#23, c_last_name#24, d_year#35, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28] +Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#31 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#30 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#31 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#30 as decimal(8,2)))), DecimalType(8,2))))#18] +Results [5]: [c_customer_id#22 AS customer_id#38, c_first_name#23 AS customer_first_name#39, c_last_name#24 AS customer_last_name#40, c_email_address#28 AS customer_email_address#41, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ss_ext_list_price#31 as decimal(8,2))) - promote_precision(cast(ss_ext_discount_amt#30 as decimal(8,2)))), DecimalType(8,2))))#18,18,2) AS year_total#42] (32) BroadcastExchange -Input [5]: [customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45, year_total#46] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#47] +Input [5]: [customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41, year_total#42] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=5] (33) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [customer_id#21] -Right keys [1]: [customer_id#42] +Left keys [1]: [customer_id#19] +Right keys [1]: [customer_id#38] Join condition: None (34) Scan parquet default.customer -Output [8]: [c_customer_sk#48, c_customer_id#49, c_first_name#50, c_last_name#51, c_preferred_cust_flag#52, c_birth_country#53, c_login#54, c_email_address#55] +Output [8]: [c_customer_sk#43, c_customer_id#44, c_first_name#45, c_last_name#46, c_preferred_cust_flag#47, c_birth_country#48, c_login#49, c_email_address#50] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (35) ColumnarToRow [codegen id : 10] -Input [8]: [c_customer_sk#48, c_customer_id#49, c_first_name#50, c_last_name#51, c_preferred_cust_flag#52, c_birth_country#53, c_login#54, c_email_address#55] +Input [8]: [c_customer_sk#43, c_customer_id#44, c_first_name#45, c_last_name#46, c_preferred_cust_flag#47, c_birth_country#48, c_login#49, c_email_address#50] (36) Filter [codegen id : 10] -Input [8]: [c_customer_sk#48, c_customer_id#49, c_first_name#50, c_last_name#51, c_preferred_cust_flag#52, c_birth_country#53, c_login#54, c_email_address#55] -Condition : (isnotnull(c_customer_sk#48) AND isnotnull(c_customer_id#49)) +Input [8]: [c_customer_sk#43, c_customer_id#44, c_first_name#45, c_last_name#46, c_preferred_cust_flag#47, c_birth_country#48, c_login#49, c_email_address#50] +Condition : (isnotnull(c_customer_sk#43) AND isnotnull(c_customer_id#44)) (37) Scan parquet default.web_sales -Output [4]: [ws_bill_customer_sk#56, ws_ext_discount_amt#57, ws_ext_list_price#58, ws_sold_date_sk#59] +Output [4]: [ws_bill_customer_sk#51, ws_ext_discount_amt#52, ws_ext_list_price#53, ws_sold_date_sk#54] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#59), dynamicpruningexpression(ws_sold_date_sk#59 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ws_sold_date_sk#54), dynamicpruningexpression(ws_sold_date_sk#54 IN dynamicpruning#13)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (38) ColumnarToRow [codegen id : 8] -Input [4]: [ws_bill_customer_sk#56, ws_ext_discount_amt#57, ws_ext_list_price#58, ws_sold_date_sk#59] +Input [4]: [ws_bill_customer_sk#51, ws_ext_discount_amt#52, ws_ext_list_price#53, ws_sold_date_sk#54] (39) Filter [codegen id : 8] -Input [4]: [ws_bill_customer_sk#56, ws_ext_discount_amt#57, ws_ext_list_price#58, ws_sold_date_sk#59] -Condition : isnotnull(ws_bill_customer_sk#56) +Input [4]: [ws_bill_customer_sk#51, ws_ext_discount_amt#52, ws_ext_list_price#53, ws_sold_date_sk#54] +Condition : isnotnull(ws_bill_customer_sk#51) (40) BroadcastExchange -Input [4]: [ws_bill_customer_sk#56, ws_ext_discount_amt#57, ws_ext_list_price#58, ws_sold_date_sk#59] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#60] +Input [4]: [ws_bill_customer_sk#51, ws_ext_discount_amt#52, ws_ext_list_price#53, ws_sold_date_sk#54] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] (41) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [c_customer_sk#48] -Right keys [1]: [ws_bill_customer_sk#56] +Left keys [1]: [c_customer_sk#43] +Right keys [1]: [ws_bill_customer_sk#51] Join condition: None (42) Project [codegen id : 10] -Output [10]: [c_customer_id#49, c_first_name#50, c_last_name#51, c_preferred_cust_flag#52, c_birth_country#53, c_login#54, c_email_address#55, ws_ext_discount_amt#57, ws_ext_list_price#58, ws_sold_date_sk#59] -Input [12]: [c_customer_sk#48, c_customer_id#49, c_first_name#50, c_last_name#51, c_preferred_cust_flag#52, c_birth_country#53, c_login#54, c_email_address#55, ws_bill_customer_sk#56, ws_ext_discount_amt#57, ws_ext_list_price#58, ws_sold_date_sk#59] +Output [10]: [c_customer_id#44, c_first_name#45, c_last_name#46, c_preferred_cust_flag#47, c_birth_country#48, c_login#49, c_email_address#50, ws_ext_discount_amt#52, ws_ext_list_price#53, ws_sold_date_sk#54] +Input [12]: [c_customer_sk#43, c_customer_id#44, c_first_name#45, c_last_name#46, c_preferred_cust_flag#47, c_birth_country#48, c_login#49, c_email_address#50, ws_bill_customer_sk#51, ws_ext_discount_amt#52, ws_ext_list_price#53, ws_sold_date_sk#54] (43) ReusedExchange [Reuses operator id: 75] -Output [2]: [d_date_sk#61, d_year#62] +Output [2]: [d_date_sk#55, d_year#56] (44) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ws_sold_date_sk#59] -Right keys [1]: [d_date_sk#61] +Left keys [1]: [ws_sold_date_sk#54] +Right keys [1]: [d_date_sk#55] Join condition: None (45) Project [codegen id : 10] -Output [10]: [c_customer_id#49, c_first_name#50, c_last_name#51, c_preferred_cust_flag#52, c_birth_country#53, c_login#54, c_email_address#55, ws_ext_discount_amt#57, ws_ext_list_price#58, d_year#62] -Input [12]: [c_customer_id#49, c_first_name#50, c_last_name#51, c_preferred_cust_flag#52, c_birth_country#53, c_login#54, c_email_address#55, ws_ext_discount_amt#57, ws_ext_list_price#58, ws_sold_date_sk#59, d_date_sk#61, d_year#62] +Output [10]: [c_customer_id#44, c_first_name#45, c_last_name#46, c_preferred_cust_flag#47, c_birth_country#48, c_login#49, c_email_address#50, ws_ext_discount_amt#52, ws_ext_list_price#53, d_year#56] +Input [12]: [c_customer_id#44, c_first_name#45, c_last_name#46, c_preferred_cust_flag#47, c_birth_country#48, c_login#49, c_email_address#50, ws_ext_discount_amt#52, ws_ext_list_price#53, ws_sold_date_sk#54, d_date_sk#55, d_year#56] (46) HashAggregate [codegen id : 10] -Input [10]: [c_customer_id#49, c_first_name#50, c_last_name#51, c_preferred_cust_flag#52, c_birth_country#53, c_login#54, c_email_address#55, ws_ext_discount_amt#57, ws_ext_list_price#58, d_year#62] -Keys [8]: [c_customer_id#49, c_first_name#50, c_last_name#51, c_preferred_cust_flag#52, c_birth_country#53, c_login#54, c_email_address#55, d_year#62] -Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#58 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#57 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#63] -Results [9]: [c_customer_id#49, c_first_name#50, c_last_name#51, c_preferred_cust_flag#52, c_birth_country#53, c_login#54, c_email_address#55, d_year#62, sum#64] +Input [10]: [c_customer_id#44, c_first_name#45, c_last_name#46, c_preferred_cust_flag#47, c_birth_country#48, c_login#49, c_email_address#50, ws_ext_discount_amt#52, ws_ext_list_price#53, d_year#56] +Keys [8]: [c_customer_id#44, c_first_name#45, c_last_name#46, c_preferred_cust_flag#47, c_birth_country#48, c_login#49, c_email_address#50, d_year#56] +Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#53 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#52 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum#57] +Results [9]: [c_customer_id#44, c_first_name#45, c_last_name#46, c_preferred_cust_flag#47, c_birth_country#48, c_login#49, c_email_address#50, d_year#56, sum#58] (47) Exchange -Input [9]: [c_customer_id#49, c_first_name#50, c_last_name#51, c_preferred_cust_flag#52, c_birth_country#53, c_login#54, c_email_address#55, d_year#62, sum#64] -Arguments: hashpartitioning(c_customer_id#49, c_first_name#50, c_last_name#51, c_preferred_cust_flag#52, c_birth_country#53, c_login#54, c_email_address#55, d_year#62, 5), ENSURE_REQUIREMENTS, [id=#65] +Input [9]: [c_customer_id#44, c_first_name#45, c_last_name#46, c_preferred_cust_flag#47, c_birth_country#48, c_login#49, c_email_address#50, d_year#56, sum#58] +Arguments: hashpartitioning(c_customer_id#44, c_first_name#45, c_last_name#46, c_preferred_cust_flag#47, c_birth_country#48, c_login#49, c_email_address#50, d_year#56, 5), ENSURE_REQUIREMENTS, [plan_id=7] (48) HashAggregate [codegen id : 11] -Input [9]: [c_customer_id#49, c_first_name#50, c_last_name#51, c_preferred_cust_flag#52, c_birth_country#53, c_login#54, c_email_address#55, d_year#62, sum#64] -Keys [8]: [c_customer_id#49, c_first_name#50, c_last_name#51, c_preferred_cust_flag#52, c_birth_country#53, c_login#54, c_email_address#55, d_year#62] -Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#58 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#57 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#58 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#57 as decimal(8,2)))), DecimalType(8,2))))#66] -Results [2]: [c_customer_id#49 AS customer_id#67, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#58 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#57 as decimal(8,2)))), DecimalType(8,2))))#66,18,2) AS year_total#68] +Input [9]: [c_customer_id#44, c_first_name#45, c_last_name#46, c_preferred_cust_flag#47, c_birth_country#48, c_login#49, c_email_address#50, d_year#56, sum#58] +Keys [8]: [c_customer_id#44, c_first_name#45, c_last_name#46, c_preferred_cust_flag#47, c_birth_country#48, c_login#49, c_email_address#50, d_year#56] +Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#53 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#52 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#53 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#52 as decimal(8,2)))), DecimalType(8,2))))#59] +Results [2]: [c_customer_id#44 AS customer_id#60, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#53 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#52 as decimal(8,2)))), DecimalType(8,2))))#59,18,2) AS year_total#61] (49) Filter [codegen id : 11] -Input [2]: [customer_id#67, year_total#68] -Condition : (isnotnull(year_total#68) AND (year_total#68 > 0.00)) +Input [2]: [customer_id#60, year_total#61] +Condition : (isnotnull(year_total#61) AND (year_total#61 > 0.00)) (50) BroadcastExchange -Input [2]: [customer_id#67, year_total#68] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#69] +Input [2]: [customer_id#60, year_total#61] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=8] (51) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [customer_id#21] -Right keys [1]: [customer_id#67] +Left keys [1]: [customer_id#19] +Right keys [1]: [customer_id#60] Join condition: None (52) Project [codegen id : 16] -Output [8]: [customer_id#21, year_total#22, customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45, year_total#46, year_total#68] -Input [9]: [customer_id#21, year_total#22, customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45, year_total#46, customer_id#67, year_total#68] +Output [8]: [customer_id#19, year_total#20, customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41, year_total#42, year_total#61] +Input [9]: [customer_id#19, year_total#20, customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41, year_total#42, customer_id#60, year_total#61] (53) Scan parquet default.customer -Output [8]: [c_customer_sk#70, c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77] +Output [8]: [c_customer_sk#62, c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (54) ColumnarToRow [codegen id : 14] -Input [8]: [c_customer_sk#70, c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77] +Input [8]: [c_customer_sk#62, c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69] (55) Filter [codegen id : 14] -Input [8]: [c_customer_sk#70, c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77] -Condition : (isnotnull(c_customer_sk#70) AND isnotnull(c_customer_id#71)) +Input [8]: [c_customer_sk#62, c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69] +Condition : (isnotnull(c_customer_sk#62) AND isnotnull(c_customer_id#63)) (56) Scan parquet default.web_sales -Output [4]: [ws_bill_customer_sk#78, ws_ext_discount_amt#79, ws_ext_list_price#80, ws_sold_date_sk#81] +Output [4]: [ws_bill_customer_sk#70, ws_ext_discount_amt#71, ws_ext_list_price#72, ws_sold_date_sk#73] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#81), dynamicpruningexpression(ws_sold_date_sk#81 IN dynamicpruning#35)] +PartitionFilters: [isnotnull(ws_sold_date_sk#73), dynamicpruningexpression(ws_sold_date_sk#73 IN dynamicpruning#33)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 12] -Input [4]: [ws_bill_customer_sk#78, ws_ext_discount_amt#79, ws_ext_list_price#80, ws_sold_date_sk#81] +Input [4]: [ws_bill_customer_sk#70, ws_ext_discount_amt#71, ws_ext_list_price#72, ws_sold_date_sk#73] (58) Filter [codegen id : 12] -Input [4]: [ws_bill_customer_sk#78, ws_ext_discount_amt#79, ws_ext_list_price#80, ws_sold_date_sk#81] -Condition : isnotnull(ws_bill_customer_sk#78) +Input [4]: [ws_bill_customer_sk#70, ws_ext_discount_amt#71, ws_ext_list_price#72, ws_sold_date_sk#73] +Condition : isnotnull(ws_bill_customer_sk#70) (59) BroadcastExchange -Input [4]: [ws_bill_customer_sk#78, ws_ext_discount_amt#79, ws_ext_list_price#80, ws_sold_date_sk#81] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#82] +Input [4]: [ws_bill_customer_sk#70, ws_ext_discount_amt#71, ws_ext_list_price#72, ws_sold_date_sk#73] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] (60) BroadcastHashJoin [codegen id : 14] -Left keys [1]: [c_customer_sk#70] -Right keys [1]: [ws_bill_customer_sk#78] +Left keys [1]: [c_customer_sk#62] +Right keys [1]: [ws_bill_customer_sk#70] Join condition: None (61) Project [codegen id : 14] -Output [10]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, ws_ext_discount_amt#79, ws_ext_list_price#80, ws_sold_date_sk#81] -Input [12]: [c_customer_sk#70, c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, ws_bill_customer_sk#78, ws_ext_discount_amt#79, ws_ext_list_price#80, ws_sold_date_sk#81] +Output [10]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, ws_ext_discount_amt#71, ws_ext_list_price#72, ws_sold_date_sk#73] +Input [12]: [c_customer_sk#62, c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, ws_bill_customer_sk#70, ws_ext_discount_amt#71, ws_ext_list_price#72, ws_sold_date_sk#73] (62) ReusedExchange [Reuses operator id: 79] -Output [2]: [d_date_sk#83, d_year#84] +Output [2]: [d_date_sk#74, d_year#75] (63) BroadcastHashJoin [codegen id : 14] -Left keys [1]: [ws_sold_date_sk#81] -Right keys [1]: [d_date_sk#83] +Left keys [1]: [ws_sold_date_sk#73] +Right keys [1]: [d_date_sk#74] Join condition: None (64) Project [codegen id : 14] -Output [10]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, ws_ext_discount_amt#79, ws_ext_list_price#80, d_year#84] -Input [12]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, ws_ext_discount_amt#79, ws_ext_list_price#80, ws_sold_date_sk#81, d_date_sk#83, d_year#84] +Output [10]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, ws_ext_discount_amt#71, ws_ext_list_price#72, d_year#75] +Input [12]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, ws_ext_discount_amt#71, ws_ext_list_price#72, ws_sold_date_sk#73, d_date_sk#74, d_year#75] (65) HashAggregate [codegen id : 14] -Input [10]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, ws_ext_discount_amt#79, ws_ext_list_price#80, d_year#84] -Keys [8]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84] -Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#80 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#79 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum#85] -Results [9]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, sum#86] +Input [10]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, ws_ext_discount_amt#71, ws_ext_list_price#72, d_year#75] +Keys [8]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, d_year#75] +Functions [1]: [partial_sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#72 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#71 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum#76] +Results [9]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, d_year#75, sum#77] (66) Exchange -Input [9]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, sum#86] -Arguments: hashpartitioning(c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, 5), ENSURE_REQUIREMENTS, [id=#87] +Input [9]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, d_year#75, sum#77] +Arguments: hashpartitioning(c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, d_year#75, 5), ENSURE_REQUIREMENTS, [plan_id=10] (67) HashAggregate [codegen id : 15] -Input [9]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, sum#86] -Keys [8]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84] -Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#80 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#79 as decimal(8,2)))), DecimalType(8,2))))] -Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#80 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#79 as decimal(8,2)))), DecimalType(8,2))))#66] -Results [2]: [c_customer_id#71 AS customer_id#88, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#80 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#79 as decimal(8,2)))), DecimalType(8,2))))#66,18,2) AS year_total#89] +Input [9]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, d_year#75, sum#77] +Keys [8]: [c_customer_id#63, c_first_name#64, c_last_name#65, c_preferred_cust_flag#66, c_birth_country#67, c_login#68, c_email_address#69, d_year#75] +Functions [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#72 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#71 as decimal(8,2)))), DecimalType(8,2))))] +Aggregate Attributes [1]: [sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#72 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#71 as decimal(8,2)))), DecimalType(8,2))))#59] +Results [2]: [c_customer_id#63 AS customer_id#78, MakeDecimal(sum(UnscaledValue(CheckOverflow((promote_precision(cast(ws_ext_list_price#72 as decimal(8,2))) - promote_precision(cast(ws_ext_discount_amt#71 as decimal(8,2)))), DecimalType(8,2))))#59,18,2) AS year_total#79] (68) BroadcastExchange -Input [2]: [customer_id#88, year_total#89] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#90] +Input [2]: [customer_id#78, year_total#79] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=11] (69) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [customer_id#21] -Right keys [1]: [customer_id#88] -Join condition: (CASE WHEN (year_total#68 > 0.00) THEN CheckOverflow((promote_precision(year_total#89) / promote_precision(year_total#68)), DecimalType(38,20)) ELSE 0E-20 END > CASE WHEN (year_total#22 > 0.00) THEN CheckOverflow((promote_precision(year_total#46) / promote_precision(year_total#22)), DecimalType(38,20)) ELSE 0E-20 END) +Left keys [1]: [customer_id#19] +Right keys [1]: [customer_id#78] +Join condition: (CASE WHEN (year_total#61 > 0.00) THEN CheckOverflow((promote_precision(year_total#79) / promote_precision(year_total#61)), DecimalType(38,20)) ELSE 0E-20 END > CASE WHEN (year_total#20 > 0.00) THEN CheckOverflow((promote_precision(year_total#42) / promote_precision(year_total#20)), DecimalType(38,20)) ELSE 0E-20 END) (70) Project [codegen id : 16] -Output [4]: [customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45] -Input [10]: [customer_id#21, year_total#22, customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45, year_total#46, year_total#68, customer_id#88, year_total#89] +Output [4]: [customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41] +Input [10]: [customer_id#19, year_total#20, customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41, year_total#42, year_total#61, customer_id#78, year_total#79] (71) TakeOrderedAndProject -Input [4]: [customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45] -Arguments: 100, [customer_id#42 ASC NULLS FIRST, customer_first_name#43 ASC NULLS FIRST, customer_last_name#44 ASC NULLS FIRST, customer_email_address#45 ASC NULLS FIRST], [customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45] +Input [4]: [customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41] +Arguments: 100, [customer_id#38 ASC NULLS FIRST, customer_first_name#39 ASC NULLS FIRST, customer_last_name#40 ASC NULLS FIRST, customer_email_address#41 ASC NULLS FIRST], [customer_id#38, customer_first_name#39, customer_last_name#40, customer_email_address#41] ===== Subqueries ===== @@ -417,24 +417,24 @@ BroadcastExchange (75) (72) Scan parquet default.date_dim -Output [2]: [d_date_sk#15, d_year#16] +Output [2]: [d_date_sk#14, d_year#15] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (73) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#16] +Input [2]: [d_date_sk#14, d_year#15] (74) Filter [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#16] -Condition : ((isnotnull(d_year#16) AND (d_year#16 = 2001)) AND isnotnull(d_date_sk#15)) +Input [2]: [d_date_sk#14, d_year#15] +Condition : ((isnotnull(d_year#15) AND (d_year#15 = 2001)) AND isnotnull(d_date_sk#14)) (75) BroadcastExchange -Input [2]: [d_date_sk#15, d_year#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#91] +Input [2]: [d_date_sk#14, d_year#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=12] -Subquery:2 Hosting operator id = 20 Hosting Expression = ss_sold_date_sk#34 IN dynamicpruning#35 +Subquery:2 Hosting operator id = 20 Hosting Expression = ss_sold_date_sk#32 IN dynamicpruning#33 BroadcastExchange (79) +- * Filter (78) +- * ColumnarToRow (77) @@ -442,25 +442,25 @@ BroadcastExchange (79) (76) Scan parquet default.date_dim -Output [2]: [d_date_sk#37, d_year#38] +Output [2]: [d_date_sk#34, d_year#35] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)] ReadSchema: struct (77) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#37, d_year#38] +Input [2]: [d_date_sk#34, d_year#35] (78) Filter [codegen id : 1] -Input [2]: [d_date_sk#37, d_year#38] -Condition : ((isnotnull(d_year#38) AND (d_year#38 = 2002)) AND isnotnull(d_date_sk#37)) +Input [2]: [d_date_sk#34, d_year#35] +Condition : ((isnotnull(d_year#35) AND (d_year#35 = 2002)) AND isnotnull(d_date_sk#34)) (79) BroadcastExchange -Input [2]: [d_date_sk#37, d_year#38] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#92] +Input [2]: [d_date_sk#34, d_year#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=13] -Subquery:3 Hosting operator id = 37 Hosting Expression = ws_sold_date_sk#59 IN dynamicpruning#13 +Subquery:3 Hosting operator id = 37 Hosting Expression = ws_sold_date_sk#54 IN dynamicpruning#13 -Subquery:4 Hosting operator id = 56 Hosting Expression = ws_sold_date_sk#81 IN dynamicpruning#35 +Subquery:4 Hosting operator id = 56 Hosting Expression = ws_sold_date_sk#73 IN dynamicpruning#33 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q12.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q12.sf100/explain.txt index 40793508f4786..3d13a020acb66 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q12.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q12.sf100/explain.txt @@ -41,92 +41,92 @@ Condition : isnotnull(ws_item_sk#1) (4) Exchange Input [3]: [ws_item_sk#1, ws_ext_sales_price#2, ws_sold_date_sk#3] -Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#5] +Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [3]: [ws_item_sk#1, ws_ext_sales_price#2, ws_sold_date_sk#3] Arguments: [ws_item_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.item -Output [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Output [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [In(i_category, [Books ,Home ,Sports ]), IsNotNull(i_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (8) Filter [codegen id : 3] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Condition : (i_category#11 IN (Sports ,Books ,Home ) AND isnotnull(i_item_sk#6)) +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Condition : (i_category#10 IN (Sports ,Books ,Home ) AND isnotnull(i_item_sk#5)) (9) Exchange -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Arguments: hashpartitioning(i_item_sk#6, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Arguments: hashpartitioning(i_item_sk#5, 5), ENSURE_REQUIREMENTS, [plan_id=2] (10) Sort [codegen id : 4] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Arguments: [i_item_sk#6 ASC NULLS FIRST], false, 0 +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Arguments: [i_item_sk#5 ASC NULLS FIRST], false, 0 (11) SortMergeJoin [codegen id : 6] Left keys [1]: [ws_item_sk#1] -Right keys [1]: [i_item_sk#6] +Right keys [1]: [i_item_sk#5] Join condition: None (12) Project [codegen id : 6] -Output [7]: [ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Input [9]: [ws_item_sk#1, ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Output [7]: [ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Input [9]: [ws_item_sk#1, ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (13) ReusedExchange [Reuses operator id: 28] -Output [1]: [d_date_sk#13] +Output [1]: [d_date_sk#11] (14) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ws_sold_date_sk#3] -Right keys [1]: [d_date_sk#13] +Right keys [1]: [d_date_sk#11] Join condition: None (15) Project [codegen id : 6] -Output [6]: [ws_ext_sales_price#2, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Input [8]: [ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11, d_date_sk#13] +Output [6]: [ws_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Input [8]: [ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#11] (16) HashAggregate [codegen id : 6] -Input [6]: [ws_ext_sales_price#2, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Keys [5]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9] +Input [6]: [ws_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#14] -Results [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] +Aggregate Attributes [1]: [sum#12] +Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] (17) Exchange -Input [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] -Arguments: hashpartitioning(i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 7] -Input [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] -Keys [5]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#2))#17] -Results [8]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#17,17,2) AS itemrevenue#18, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#17,17,2) AS _w0#19, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#17,17,2) AS _w1#20] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#2))#14] +Results [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#14,17,2) AS itemrevenue#15, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#14,17,2) AS _w0#16, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#14,17,2) AS _w1#17] (19) Exchange -Input [8]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20] -Arguments: hashpartitioning(i_class#10, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=4] (20) Sort [codegen id : 8] -Input [8]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20] -Arguments: [i_class#10 ASC NULLS FIRST], false, 0 +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: [i_class#9 ASC NULLS FIRST], false, 0 (21) Window -Input [8]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20] -Arguments: [sum(_w1#20) windowspecdefinition(i_class#10, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#22], [i_class#10] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: [sum(_w1#17) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#9] (22) Project [codegen id : 9] -Output [7]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#19) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#22)), DecimalType(38,17)) AS revenueratio#23] -Input [9]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, _we0#22] +Output [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#16) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#18)), DecimalType(38,17)) AS revenueratio#19] +Input [9]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, _we0#18] (23) TakeOrderedAndProject -Input [7]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, revenueratio#23] -Arguments: 100, [i_category#11 ASC NULLS FIRST, i_class#10 ASC NULLS FIRST, i_item_id#7 ASC NULLS FIRST, i_item_desc#8 ASC NULLS FIRST, revenueratio#23 ASC NULLS FIRST], [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, revenueratio#23] +Input [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] +Arguments: 100, [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] ===== Subqueries ===== @@ -139,25 +139,25 @@ BroadcastExchange (28) (24) Scan parquet default.date_dim -Output [2]: [d_date_sk#13, d_date#24] +Output [2]: [d_date_sk#11, d_date#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-22), LessThanOrEqual(d_date,1999-03-24), IsNotNull(d_date_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#13, d_date#24] +Input [2]: [d_date_sk#11, d_date#20] (26) Filter [codegen id : 1] -Input [2]: [d_date_sk#13, d_date#24] -Condition : (((isnotnull(d_date#24) AND (d_date#24 >= 1999-02-22)) AND (d_date#24 <= 1999-03-24)) AND isnotnull(d_date_sk#13)) +Input [2]: [d_date_sk#11, d_date#20] +Condition : (((isnotnull(d_date#20) AND (d_date#20 >= 1999-02-22)) AND (d_date#20 <= 1999-03-24)) AND isnotnull(d_date_sk#11)) (27) Project [codegen id : 1] -Output [1]: [d_date_sk#13] -Input [2]: [d_date_sk#13, d_date#24] +Output [1]: [d_date_sk#11] +Input [2]: [d_date_sk#11, d_date#20] (28) BroadcastExchange -Input [1]: [d_date_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [d_date_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q12/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q12/explain.txt index 02f8baa5a0b81..8c652f4782c4b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q12/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q12/explain.txt @@ -52,7 +52,7 @@ Condition : (i_category#10 IN (Sports (7) BroadcastExchange Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ws_item_sk#1] @@ -64,54 +64,54 @@ Output [7]: [ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_id#6, i_item_desc#7 Input [9]: [ws_item_sk#1, ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (10) ReusedExchange [Reuses operator id: 25] -Output [1]: [d_date_sk#12] +Output [1]: [d_date_sk#11] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ws_sold_date_sk#3] -Right keys [1]: [d_date_sk#12] +Right keys [1]: [d_date_sk#11] Join condition: None (12) Project [codegen id : 3] Output [6]: [ws_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] -Input [8]: [ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#12] +Input [8]: [ws_ext_sales_price#2, ws_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#11] (13) HashAggregate [codegen id : 3] Input [6]: [ws_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [partial_sum(UnscaledValue(ws_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#13] -Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] +Aggregate Attributes [1]: [sum#12] +Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] (14) Exchange -Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] -Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 4] -Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#2))#16] -Results [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#16,17,2) AS itemrevenue#17, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#16,17,2) AS _w0#18, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#16,17,2) AS _w1#19] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#2))#14] +Results [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#14,17,2) AS itemrevenue#15, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#14,17,2) AS _w0#16, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#2))#14,17,2) AS _w1#17] (16) Exchange -Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19] -Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (17) Sort [codegen id : 5] -Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] Arguments: [i_class#9 ASC NULLS FIRST], false, 0 (18) Window -Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19] -Arguments: [sum(_w1#19) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#21], [i_class#9] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: [sum(_w1#17) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#9] (19) Project [codegen id : 6] -Output [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#18) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#21)), DecimalType(38,17)) AS revenueratio#22] -Input [9]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, _we0#21] +Output [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#16) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#18)), DecimalType(38,17)) AS revenueratio#19] +Input [9]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, _we0#18] (20) TakeOrderedAndProject -Input [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22] -Arguments: 100, [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#22 ASC NULLS FIRST], [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22] +Input [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] +Arguments: 100, [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] ===== Subqueries ===== @@ -124,25 +124,25 @@ BroadcastExchange (25) (21) Scan parquet default.date_dim -Output [2]: [d_date_sk#12, d_date#23] +Output [2]: [d_date_sk#11, d_date#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-22), LessThanOrEqual(d_date,1999-03-24), IsNotNull(d_date_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#12, d_date#23] +Input [2]: [d_date_sk#11, d_date#20] (23) Filter [codegen id : 1] -Input [2]: [d_date_sk#12, d_date#23] -Condition : (((isnotnull(d_date#23) AND (d_date#23 >= 1999-02-22)) AND (d_date#23 <= 1999-03-24)) AND isnotnull(d_date_sk#12)) +Input [2]: [d_date_sk#11, d_date#20] +Condition : (((isnotnull(d_date#20) AND (d_date#20 >= 1999-02-22)) AND (d_date#20 <= 1999-03-24)) AND isnotnull(d_date_sk#11)) (24) Project [codegen id : 1] -Output [1]: [d_date_sk#12] -Input [2]: [d_date_sk#12, d_date#23] +Output [1]: [d_date_sk#11] +Input [2]: [d_date_sk#11, d_date#20] (25) BroadcastExchange -Input [1]: [d_date_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#24] +Input [1]: [d_date_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14.sf100/explain.txt index 92b80b4085c67..809219a4ee851 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14.sf100/explain.txt @@ -117,437 +117,437 @@ Condition : isnotnull(ss_item_sk#1) (4) Exchange Input [4]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [4]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.item -Output [4]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10] +Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)] ReadSchema: struct (7) ColumnarToRow [codegen id : 19] -Input [4]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10] +Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] (8) Filter [codegen id : 19] -Input [4]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10] -Condition : ((isnotnull(i_brand_id#8) AND isnotnull(i_class_id#9)) AND isnotnull(i_category_id#10)) +Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] +Condition : ((isnotnull(i_brand_id#7) AND isnotnull(i_class_id#8)) AND isnotnull(i_category_id#9)) (9) Scan parquet default.store_sales -Output [2]: [ss_item_sk#11, ss_sold_date_sk#12] +Output [2]: [ss_item_sk#10, ss_sold_date_sk#11] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#12), dynamicpruningexpression(ss_sold_date_sk#12 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ss_sold_date_sk#11), dynamicpruningexpression(ss_sold_date_sk#11 IN dynamicpruning#12)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (10) ColumnarToRow [codegen id : 11] -Input [2]: [ss_item_sk#11, ss_sold_date_sk#12] +Input [2]: [ss_item_sk#10, ss_sold_date_sk#11] (11) Filter [codegen id : 11] -Input [2]: [ss_item_sk#11, ss_sold_date_sk#12] -Condition : isnotnull(ss_item_sk#11) +Input [2]: [ss_item_sk#10, ss_sold_date_sk#11] +Condition : isnotnull(ss_item_sk#10) (12) ReusedExchange [Reuses operator id: 132] -Output [1]: [d_date_sk#14] +Output [1]: [d_date_sk#13] (13) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [ss_sold_date_sk#12] -Right keys [1]: [d_date_sk#14] +Left keys [1]: [ss_sold_date_sk#11] +Right keys [1]: [d_date_sk#13] Join condition: None (14) Project [codegen id : 11] -Output [1]: [ss_item_sk#11] -Input [3]: [ss_item_sk#11, ss_sold_date_sk#12, d_date_sk#14] +Output [1]: [ss_item_sk#10] +Input [3]: [ss_item_sk#10, ss_sold_date_sk#11, d_date_sk#13] (15) Scan parquet default.item -Output [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] +Output [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)] ReadSchema: struct (16) ColumnarToRow [codegen id : 4] -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] (17) Filter [codegen id : 4] -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Condition : (((isnotnull(i_item_sk#15) AND isnotnull(i_brand_id#16)) AND isnotnull(i_class_id#17)) AND isnotnull(i_category_id#18)) +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Condition : (((isnotnull(i_item_sk#14) AND isnotnull(i_brand_id#15)) AND isnotnull(i_class_id#16)) AND isnotnull(i_category_id#17)) (18) Exchange -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Arguments: hashpartitioning(coalesce(i_brand_id#16, 0), isnull(i_brand_id#16), coalesce(i_class_id#17, 0), isnull(i_class_id#17), coalesce(i_category_id#18, 0), isnull(i_category_id#18), 5), ENSURE_REQUIREMENTS, [id=#19] +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Arguments: hashpartitioning(coalesce(i_brand_id#15, 0), isnull(i_brand_id#15), coalesce(i_class_id#16, 0), isnull(i_class_id#16), coalesce(i_category_id#17, 0), isnull(i_category_id#17), 5), ENSURE_REQUIREMENTS, [plan_id=2] (19) Sort [codegen id : 5] -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Arguments: [coalesce(i_brand_id#16, 0) ASC NULLS FIRST, isnull(i_brand_id#16) ASC NULLS FIRST, coalesce(i_class_id#17, 0) ASC NULLS FIRST, isnull(i_class_id#17) ASC NULLS FIRST, coalesce(i_category_id#18, 0) ASC NULLS FIRST, isnull(i_category_id#18) ASC NULLS FIRST], false, 0 +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Arguments: [coalesce(i_brand_id#15, 0) ASC NULLS FIRST, isnull(i_brand_id#15) ASC NULLS FIRST, coalesce(i_class_id#16, 0) ASC NULLS FIRST, isnull(i_class_id#16) ASC NULLS FIRST, coalesce(i_category_id#17, 0) ASC NULLS FIRST, isnull(i_category_id#17) ASC NULLS FIRST], false, 0 (20) Scan parquet default.catalog_sales -Output [2]: [cs_item_sk#20, cs_sold_date_sk#21] +Output [2]: [cs_item_sk#18, cs_sold_date_sk#19] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#21), dynamicpruningexpression(cs_sold_date_sk#21 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(cs_sold_date_sk#19), dynamicpruningexpression(cs_sold_date_sk#19 IN dynamicpruning#12)] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 8] -Input [2]: [cs_item_sk#20, cs_sold_date_sk#21] +Input [2]: [cs_item_sk#18, cs_sold_date_sk#19] (22) Filter [codegen id : 8] -Input [2]: [cs_item_sk#20, cs_sold_date_sk#21] -Condition : isnotnull(cs_item_sk#20) +Input [2]: [cs_item_sk#18, cs_sold_date_sk#19] +Condition : isnotnull(cs_item_sk#18) (23) ReusedExchange [Reuses operator id: 132] -Output [1]: [d_date_sk#22] +Output [1]: [d_date_sk#20] (24) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_sold_date_sk#21] -Right keys [1]: [d_date_sk#22] +Left keys [1]: [cs_sold_date_sk#19] +Right keys [1]: [d_date_sk#20] Join condition: None (25) Project [codegen id : 8] -Output [1]: [cs_item_sk#20] -Input [3]: [cs_item_sk#20, cs_sold_date_sk#21, d_date_sk#22] +Output [1]: [cs_item_sk#18] +Input [3]: [cs_item_sk#18, cs_sold_date_sk#19, d_date_sk#20] (26) Scan parquet default.item -Output [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] +Output [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 7] -Input [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] +Input [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] (28) Filter [codegen id : 7] -Input [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] -Condition : isnotnull(i_item_sk#23) +Input [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] +Condition : isnotnull(i_item_sk#21) (29) BroadcastExchange -Input [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#27] +Input [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (30) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_item_sk#20] -Right keys [1]: [i_item_sk#23] +Left keys [1]: [cs_item_sk#18] +Right keys [1]: [i_item_sk#21] Join condition: None (31) Project [codegen id : 8] -Output [3]: [i_brand_id#24, i_class_id#25, i_category_id#26] -Input [5]: [cs_item_sk#20, i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] +Output [3]: [i_brand_id#22, i_class_id#23, i_category_id#24] +Input [5]: [cs_item_sk#18, i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] (32) Exchange -Input [3]: [i_brand_id#24, i_class_id#25, i_category_id#26] -Arguments: hashpartitioning(coalesce(i_brand_id#24, 0), isnull(i_brand_id#24), coalesce(i_class_id#25, 0), isnull(i_class_id#25), coalesce(i_category_id#26, 0), isnull(i_category_id#26), 5), ENSURE_REQUIREMENTS, [id=#28] +Input [3]: [i_brand_id#22, i_class_id#23, i_category_id#24] +Arguments: hashpartitioning(coalesce(i_brand_id#22, 0), isnull(i_brand_id#22), coalesce(i_class_id#23, 0), isnull(i_class_id#23), coalesce(i_category_id#24, 0), isnull(i_category_id#24), 5), ENSURE_REQUIREMENTS, [plan_id=4] (33) Sort [codegen id : 9] -Input [3]: [i_brand_id#24, i_class_id#25, i_category_id#26] -Arguments: [coalesce(i_brand_id#24, 0) ASC NULLS FIRST, isnull(i_brand_id#24) ASC NULLS FIRST, coalesce(i_class_id#25, 0) ASC NULLS FIRST, isnull(i_class_id#25) ASC NULLS FIRST, coalesce(i_category_id#26, 0) ASC NULLS FIRST, isnull(i_category_id#26) ASC NULLS FIRST], false, 0 +Input [3]: [i_brand_id#22, i_class_id#23, i_category_id#24] +Arguments: [coalesce(i_brand_id#22, 0) ASC NULLS FIRST, isnull(i_brand_id#22) ASC NULLS FIRST, coalesce(i_class_id#23, 0) ASC NULLS FIRST, isnull(i_class_id#23) ASC NULLS FIRST, coalesce(i_category_id#24, 0) ASC NULLS FIRST, isnull(i_category_id#24) ASC NULLS FIRST], false, 0 (34) SortMergeJoin [codegen id : 10] -Left keys [6]: [coalesce(i_brand_id#16, 0), isnull(i_brand_id#16), coalesce(i_class_id#17, 0), isnull(i_class_id#17), coalesce(i_category_id#18, 0), isnull(i_category_id#18)] -Right keys [6]: [coalesce(i_brand_id#24, 0), isnull(i_brand_id#24), coalesce(i_class_id#25, 0), isnull(i_class_id#25), coalesce(i_category_id#26, 0), isnull(i_category_id#26)] +Left keys [6]: [coalesce(i_brand_id#15, 0), isnull(i_brand_id#15), coalesce(i_class_id#16, 0), isnull(i_class_id#16), coalesce(i_category_id#17, 0), isnull(i_category_id#17)] +Right keys [6]: [coalesce(i_brand_id#22, 0), isnull(i_brand_id#22), coalesce(i_class_id#23, 0), isnull(i_class_id#23), coalesce(i_category_id#24, 0), isnull(i_category_id#24)] Join condition: None (35) BroadcastExchange -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#29] +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (36) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [ss_item_sk#11] -Right keys [1]: [i_item_sk#15] +Left keys [1]: [ss_item_sk#10] +Right keys [1]: [i_item_sk#14] Join condition: None (37) Project [codegen id : 11] -Output [3]: [i_brand_id#16 AS brand_id#30, i_class_id#17 AS class_id#31, i_category_id#18 AS category_id#32] -Input [5]: [ss_item_sk#11, i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] +Output [3]: [i_brand_id#15 AS brand_id#25, i_class_id#16 AS class_id#26, i_category_id#17 AS category_id#27] +Input [5]: [ss_item_sk#10, i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] (38) HashAggregate [codegen id : 11] -Input [3]: [brand_id#30, class_id#31, category_id#32] -Keys [3]: [brand_id#30, class_id#31, category_id#32] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#30, class_id#31, category_id#32] +Results [3]: [brand_id#25, class_id#26, category_id#27] (39) Exchange -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: hashpartitioning(brand_id#30, class_id#31, category_id#32, 5), ENSURE_REQUIREMENTS, [id=#33] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: hashpartitioning(brand_id#25, class_id#26, category_id#27, 5), ENSURE_REQUIREMENTS, [plan_id=6] (40) HashAggregate [codegen id : 12] -Input [3]: [brand_id#30, class_id#31, category_id#32] -Keys [3]: [brand_id#30, class_id#31, category_id#32] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#30, class_id#31, category_id#32] +Results [3]: [brand_id#25, class_id#26, category_id#27] (41) Exchange -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: hashpartitioning(coalesce(brand_id#30, 0), isnull(brand_id#30), coalesce(class_id#31, 0), isnull(class_id#31), coalesce(category_id#32, 0), isnull(category_id#32), 5), ENSURE_REQUIREMENTS, [id=#34] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: hashpartitioning(coalesce(brand_id#25, 0), isnull(brand_id#25), coalesce(class_id#26, 0), isnull(class_id#26), coalesce(category_id#27, 0), isnull(category_id#27), 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) Sort [codegen id : 13] -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: [coalesce(brand_id#30, 0) ASC NULLS FIRST, isnull(brand_id#30) ASC NULLS FIRST, coalesce(class_id#31, 0) ASC NULLS FIRST, isnull(class_id#31) ASC NULLS FIRST, coalesce(category_id#32, 0) ASC NULLS FIRST, isnull(category_id#32) ASC NULLS FIRST], false, 0 +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: [coalesce(brand_id#25, 0) ASC NULLS FIRST, isnull(brand_id#25) ASC NULLS FIRST, coalesce(class_id#26, 0) ASC NULLS FIRST, isnull(class_id#26) ASC NULLS FIRST, coalesce(category_id#27, 0) ASC NULLS FIRST, isnull(category_id#27) ASC NULLS FIRST], false, 0 (43) Scan parquet default.web_sales -Output [2]: [ws_item_sk#35, ws_sold_date_sk#36] +Output [2]: [ws_item_sk#28, ws_sold_date_sk#29] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#36), dynamicpruningexpression(ws_sold_date_sk#36 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ws_sold_date_sk#29), dynamicpruningexpression(ws_sold_date_sk#29 IN dynamicpruning#12)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 16] -Input [2]: [ws_item_sk#35, ws_sold_date_sk#36] +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] (45) Filter [codegen id : 16] -Input [2]: [ws_item_sk#35, ws_sold_date_sk#36] -Condition : isnotnull(ws_item_sk#35) +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] +Condition : isnotnull(ws_item_sk#28) (46) ReusedExchange [Reuses operator id: 132] -Output [1]: [d_date_sk#37] +Output [1]: [d_date_sk#30] (47) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [ws_sold_date_sk#36] -Right keys [1]: [d_date_sk#37] +Left keys [1]: [ws_sold_date_sk#29] +Right keys [1]: [d_date_sk#30] Join condition: None (48) Project [codegen id : 16] -Output [1]: [ws_item_sk#35] -Input [3]: [ws_item_sk#35, ws_sold_date_sk#36, d_date_sk#37] +Output [1]: [ws_item_sk#28] +Input [3]: [ws_item_sk#28, ws_sold_date_sk#29, d_date_sk#30] (49) ReusedExchange [Reuses operator id: 29] -Output [4]: [i_item_sk#38, i_brand_id#39, i_class_id#40, i_category_id#41] +Output [4]: [i_item_sk#31, i_brand_id#32, i_class_id#33, i_category_id#34] (50) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [ws_item_sk#35] -Right keys [1]: [i_item_sk#38] +Left keys [1]: [ws_item_sk#28] +Right keys [1]: [i_item_sk#31] Join condition: None (51) Project [codegen id : 16] -Output [3]: [i_brand_id#39, i_class_id#40, i_category_id#41] -Input [5]: [ws_item_sk#35, i_item_sk#38, i_brand_id#39, i_class_id#40, i_category_id#41] +Output [3]: [i_brand_id#32, i_class_id#33, i_category_id#34] +Input [5]: [ws_item_sk#28, i_item_sk#31, i_brand_id#32, i_class_id#33, i_category_id#34] (52) Exchange -Input [3]: [i_brand_id#39, i_class_id#40, i_category_id#41] -Arguments: hashpartitioning(coalesce(i_brand_id#39, 0), isnull(i_brand_id#39), coalesce(i_class_id#40, 0), isnull(i_class_id#40), coalesce(i_category_id#41, 0), isnull(i_category_id#41), 5), ENSURE_REQUIREMENTS, [id=#42] +Input [3]: [i_brand_id#32, i_class_id#33, i_category_id#34] +Arguments: hashpartitioning(coalesce(i_brand_id#32, 0), isnull(i_brand_id#32), coalesce(i_class_id#33, 0), isnull(i_class_id#33), coalesce(i_category_id#34, 0), isnull(i_category_id#34), 5), ENSURE_REQUIREMENTS, [plan_id=8] (53) Sort [codegen id : 17] -Input [3]: [i_brand_id#39, i_class_id#40, i_category_id#41] -Arguments: [coalesce(i_brand_id#39, 0) ASC NULLS FIRST, isnull(i_brand_id#39) ASC NULLS FIRST, coalesce(i_class_id#40, 0) ASC NULLS FIRST, isnull(i_class_id#40) ASC NULLS FIRST, coalesce(i_category_id#41, 0) ASC NULLS FIRST, isnull(i_category_id#41) ASC NULLS FIRST], false, 0 +Input [3]: [i_brand_id#32, i_class_id#33, i_category_id#34] +Arguments: [coalesce(i_brand_id#32, 0) ASC NULLS FIRST, isnull(i_brand_id#32) ASC NULLS FIRST, coalesce(i_class_id#33, 0) ASC NULLS FIRST, isnull(i_class_id#33) ASC NULLS FIRST, coalesce(i_category_id#34, 0) ASC NULLS FIRST, isnull(i_category_id#34) ASC NULLS FIRST], false, 0 (54) SortMergeJoin [codegen id : 18] -Left keys [6]: [coalesce(brand_id#30, 0), isnull(brand_id#30), coalesce(class_id#31, 0), isnull(class_id#31), coalesce(category_id#32, 0), isnull(category_id#32)] -Right keys [6]: [coalesce(i_brand_id#39, 0), isnull(i_brand_id#39), coalesce(i_class_id#40, 0), isnull(i_class_id#40), coalesce(i_category_id#41, 0), isnull(i_category_id#41)] +Left keys [6]: [coalesce(brand_id#25, 0), isnull(brand_id#25), coalesce(class_id#26, 0), isnull(class_id#26), coalesce(category_id#27, 0), isnull(category_id#27)] +Right keys [6]: [coalesce(i_brand_id#32, 0), isnull(i_brand_id#32), coalesce(i_class_id#33, 0), isnull(i_class_id#33), coalesce(i_category_id#34, 0), isnull(i_category_id#34)] Join condition: None (55) BroadcastExchange -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [id=#43] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [plan_id=9] (56) BroadcastHashJoin [codegen id : 19] -Left keys [3]: [i_brand_id#8, i_class_id#9, i_category_id#10] -Right keys [3]: [brand_id#30, class_id#31, category_id#32] +Left keys [3]: [i_brand_id#7, i_class_id#8, i_category_id#9] +Right keys [3]: [brand_id#25, class_id#26, category_id#27] Join condition: None (57) Project [codegen id : 19] -Output [1]: [i_item_sk#7 AS ss_item_sk#44] -Input [7]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, brand_id#30, class_id#31, category_id#32] +Output [1]: [i_item_sk#6 AS ss_item_sk#35] +Input [7]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9, brand_id#25, class_id#26, category_id#27] (58) Exchange -Input [1]: [ss_item_sk#44] -Arguments: hashpartitioning(ss_item_sk#44, 5), ENSURE_REQUIREMENTS, [id=#45] +Input [1]: [ss_item_sk#35] +Arguments: hashpartitioning(ss_item_sk#35, 5), ENSURE_REQUIREMENTS, [plan_id=10] (59) Sort [codegen id : 20] -Input [1]: [ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#35] +Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0 (60) SortMergeJoin [codegen id : 43] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [ss_item_sk#44] +Right keys [1]: [ss_item_sk#35] Join condition: None (61) ReusedExchange [Reuses operator id: 123] -Output [1]: [d_date_sk#46] +Output [1]: [d_date_sk#36] (62) BroadcastHashJoin [codegen id : 43] Left keys [1]: [ss_sold_date_sk#4] -Right keys [1]: [d_date_sk#46] +Right keys [1]: [d_date_sk#36] Join condition: None (63) Project [codegen id : 43] Output [3]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3] -Input [5]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, d_date_sk#46] +Input [5]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, d_date_sk#36] (64) Scan parquet default.item -Output [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] +Output [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)] ReadSchema: struct (65) ColumnarToRow [codegen id : 22] -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] (66) Filter [codegen id : 22] -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Condition : (((isnotnull(i_item_sk#47) AND isnotnull(i_brand_id#48)) AND isnotnull(i_class_id#49)) AND isnotnull(i_category_id#50)) +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Condition : (((isnotnull(i_item_sk#37) AND isnotnull(i_brand_id#38)) AND isnotnull(i_class_id#39)) AND isnotnull(i_category_id#40)) (67) Exchange -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Arguments: hashpartitioning(i_item_sk#47, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Arguments: hashpartitioning(i_item_sk#37, 5), ENSURE_REQUIREMENTS, [plan_id=11] (68) Sort [codegen id : 23] -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Arguments: [i_item_sk#47 ASC NULLS FIRST], false, 0 +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Arguments: [i_item_sk#37 ASC NULLS FIRST], false, 0 (69) ReusedExchange [Reuses operator id: 58] -Output [1]: [ss_item_sk#44] +Output [1]: [ss_item_sk#35] (70) Sort [codegen id : 41] -Input [1]: [ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#35] +Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0 (71) SortMergeJoin [codegen id : 42] -Left keys [1]: [i_item_sk#47] -Right keys [1]: [ss_item_sk#44] +Left keys [1]: [i_item_sk#37] +Right keys [1]: [ss_item_sk#35] Join condition: None (72) BroadcastExchange -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#52] +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=12] (73) BroadcastHashJoin [codegen id : 43] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#47] +Right keys [1]: [i_item_sk#37] Join condition: None (74) Project [codegen id : 43] -Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#48, i_class_id#49, i_category_id#50] -Input [7]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] +Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#38, i_class_id#39, i_category_id#40] +Input [7]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] (75) HashAggregate [codegen id : 43] -Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#48, i_class_id#49, i_category_id#50] -Keys [3]: [i_brand_id#48, i_class_id#49, i_category_id#50] +Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#38, i_class_id#39, i_category_id#40] +Keys [3]: [i_brand_id#38, i_class_id#39, i_category_id#40] Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#53, isEmpty#54, count#55] -Results [6]: [i_brand_id#48, i_class_id#49, i_category_id#50, sum#56, isEmpty#57, count#58] +Aggregate Attributes [3]: [sum#41, isEmpty#42, count#43] +Results [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#44, isEmpty#45, count#46] (76) Exchange -Input [6]: [i_brand_id#48, i_class_id#49, i_category_id#50, sum#56, isEmpty#57, count#58] -Arguments: hashpartitioning(i_brand_id#48, i_class_id#49, i_category_id#50, 5), ENSURE_REQUIREMENTS, [id=#59] +Input [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#44, isEmpty#45, count#46] +Arguments: hashpartitioning(i_brand_id#38, i_class_id#39, i_category_id#40, 5), ENSURE_REQUIREMENTS, [plan_id=13] (77) HashAggregate [codegen id : 88] -Input [6]: [i_brand_id#48, i_class_id#49, i_category_id#50, sum#56, isEmpty#57, count#58] -Keys [3]: [i_brand_id#48, i_class_id#49, i_category_id#50] +Input [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#44, isEmpty#45, count#46] +Keys [3]: [i_brand_id#38, i_class_id#39, i_category_id#40] Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#60, count(1)#61] -Results [6]: [store AS channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#60 AS sales#63, count(1)#61 AS number_sales#64] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47, count(1)#48] +Results [6]: [store AS channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47 AS sales#50, count(1)#48 AS number_sales#51] (78) Filter [codegen id : 88] -Input [6]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sales#63, number_sales#64] -Condition : (isnotnull(sales#63) AND (cast(sales#63 as decimal(32,6)) > cast(Subquery scalar-subquery#65, [id=#66] as decimal(32,6)))) +Input [6]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sales#50, number_sales#51] +Condition : (isnotnull(sales#50) AND (cast(sales#50 as decimal(32,6)) > cast(Subquery scalar-subquery#52, [id=#53] as decimal(32,6)))) (79) Scan parquet default.store_sales -Output [4]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69, ss_sold_date_sk#70] +Output [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#70), dynamicpruningexpression(ss_sold_date_sk#70 IN dynamicpruning#71)] +PartitionFilters: [isnotnull(ss_sold_date_sk#57), dynamicpruningexpression(ss_sold_date_sk#57 IN dynamicpruning#58)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (80) ColumnarToRow [codegen id : 44] -Input [4]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69, ss_sold_date_sk#70] +Input [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] (81) Filter [codegen id : 44] -Input [4]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69, ss_sold_date_sk#70] -Condition : isnotnull(ss_item_sk#67) +Input [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] +Condition : isnotnull(ss_item_sk#54) (82) Exchange -Input [4]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69, ss_sold_date_sk#70] -Arguments: hashpartitioning(ss_item_sk#67, 5), ENSURE_REQUIREMENTS, [id=#72] +Input [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] +Arguments: hashpartitioning(ss_item_sk#54, 5), ENSURE_REQUIREMENTS, [plan_id=14] (83) Sort [codegen id : 45] -Input [4]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69, ss_sold_date_sk#70] -Arguments: [ss_item_sk#67 ASC NULLS FIRST], false, 0 +Input [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] +Arguments: [ss_item_sk#54 ASC NULLS FIRST], false, 0 (84) ReusedExchange [Reuses operator id: 58] -Output [1]: [ss_item_sk#44] +Output [1]: [ss_item_sk#35] (85) Sort [codegen id : 63] -Input [1]: [ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#35] +Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0 (86) SortMergeJoin [codegen id : 86] -Left keys [1]: [ss_item_sk#67] -Right keys [1]: [ss_item_sk#44] +Left keys [1]: [ss_item_sk#54] +Right keys [1]: [ss_item_sk#35] Join condition: None (87) ReusedExchange [Reuses operator id: 137] -Output [1]: [d_date_sk#73] +Output [1]: [d_date_sk#59] (88) BroadcastHashJoin [codegen id : 86] -Left keys [1]: [ss_sold_date_sk#70] -Right keys [1]: [d_date_sk#73] +Left keys [1]: [ss_sold_date_sk#57] +Right keys [1]: [d_date_sk#59] Join condition: None (89) Project [codegen id : 86] -Output [3]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69] -Input [5]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69, ss_sold_date_sk#70, d_date_sk#73] +Output [3]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56] +Input [5]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57, d_date_sk#59] (90) ReusedExchange [Reuses operator id: 72] -Output [4]: [i_item_sk#74, i_brand_id#75, i_class_id#76, i_category_id#77] +Output [4]: [i_item_sk#60, i_brand_id#61, i_class_id#62, i_category_id#63] (91) BroadcastHashJoin [codegen id : 86] -Left keys [1]: [ss_item_sk#67] -Right keys [1]: [i_item_sk#74] +Left keys [1]: [ss_item_sk#54] +Right keys [1]: [i_item_sk#60] Join condition: None (92) Project [codegen id : 86] -Output [5]: [ss_quantity#68, ss_list_price#69, i_brand_id#75, i_class_id#76, i_category_id#77] -Input [7]: [ss_item_sk#67, ss_quantity#68, ss_list_price#69, i_item_sk#74, i_brand_id#75, i_class_id#76, i_category_id#77] +Output [5]: [ss_quantity#55, ss_list_price#56, i_brand_id#61, i_class_id#62, i_category_id#63] +Input [7]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, i_item_sk#60, i_brand_id#61, i_class_id#62, i_category_id#63] (93) HashAggregate [codegen id : 86] -Input [5]: [ss_quantity#68, ss_list_price#69, i_brand_id#75, i_class_id#76, i_category_id#77] -Keys [3]: [i_brand_id#75, i_class_id#76, i_category_id#77] -Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#68 as decimal(12,2))) * promote_precision(cast(ss_list_price#69 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#78, isEmpty#79, count#80] -Results [6]: [i_brand_id#75, i_class_id#76, i_category_id#77, sum#81, isEmpty#82, count#83] +Input [5]: [ss_quantity#55, ss_list_price#56, i_brand_id#61, i_class_id#62, i_category_id#63] +Keys [3]: [i_brand_id#61, i_class_id#62, i_category_id#63] +Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] +Aggregate Attributes [3]: [sum#64, isEmpty#65, count#66] +Results [6]: [i_brand_id#61, i_class_id#62, i_category_id#63, sum#67, isEmpty#68, count#69] (94) Exchange -Input [6]: [i_brand_id#75, i_class_id#76, i_category_id#77, sum#81, isEmpty#82, count#83] -Arguments: hashpartitioning(i_brand_id#75, i_class_id#76, i_category_id#77, 5), ENSURE_REQUIREMENTS, [id=#84] +Input [6]: [i_brand_id#61, i_class_id#62, i_category_id#63, sum#67, isEmpty#68, count#69] +Arguments: hashpartitioning(i_brand_id#61, i_class_id#62, i_category_id#63, 5), ENSURE_REQUIREMENTS, [plan_id=15] (95) HashAggregate [codegen id : 87] -Input [6]: [i_brand_id#75, i_class_id#76, i_category_id#77, sum#81, isEmpty#82, count#83] -Keys [3]: [i_brand_id#75, i_class_id#76, i_category_id#77] -Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#68 as decimal(12,2))) * promote_precision(cast(ss_list_price#69 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#68 as decimal(12,2))) * promote_precision(cast(ss_list_price#69 as decimal(12,2)))), DecimalType(18,2)))#85, count(1)#86] -Results [6]: [store AS channel#87, i_brand_id#75, i_class_id#76, i_category_id#77, sum(CheckOverflow((promote_precision(cast(ss_quantity#68 as decimal(12,2))) * promote_precision(cast(ss_list_price#69 as decimal(12,2)))), DecimalType(18,2)))#85 AS sales#88, count(1)#86 AS number_sales#89] +Input [6]: [i_brand_id#61, i_class_id#62, i_category_id#63, sum#67, isEmpty#68, count#69] +Keys [3]: [i_brand_id#61, i_class_id#62, i_category_id#63] +Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2))), count(1)] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#70, count(1)#71] +Results [6]: [store AS channel#72, i_brand_id#61, i_class_id#62, i_category_id#63, sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#70 AS sales#73, count(1)#71 AS number_sales#74] (96) Filter [codegen id : 87] -Input [6]: [channel#87, i_brand_id#75, i_class_id#76, i_category_id#77, sales#88, number_sales#89] -Condition : (isnotnull(sales#88) AND (cast(sales#88 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#65, [id=#66] as decimal(32,6)))) +Input [6]: [channel#72, i_brand_id#61, i_class_id#62, i_category_id#63, sales#73, number_sales#74] +Condition : (isnotnull(sales#73) AND (cast(sales#73 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#52, [id=#53] as decimal(32,6)))) (97) BroadcastExchange -Input [6]: [channel#87, i_brand_id#75, i_class_id#76, i_category_id#77, sales#88, number_sales#89] -Arguments: HashedRelationBroadcastMode(List(input[1, int, true], input[2, int, true], input[3, int, true]),false), [id=#90] +Input [6]: [channel#72, i_brand_id#61, i_class_id#62, i_category_id#63, sales#73, number_sales#74] +Arguments: HashedRelationBroadcastMode(List(input[1, int, true], input[2, int, true], input[3, int, true]),false), [plan_id=16] (98) BroadcastHashJoin [codegen id : 88] -Left keys [3]: [i_brand_id#48, i_class_id#49, i_category_id#50] -Right keys [3]: [i_brand_id#75, i_class_id#76, i_category_id#77] +Left keys [3]: [i_brand_id#38, i_class_id#39, i_category_id#40] +Right keys [3]: [i_brand_id#61, i_class_id#62, i_category_id#63] Join condition: None (99) TakeOrderedAndProject -Input [12]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sales#63, number_sales#64, channel#87, i_brand_id#75, i_class_id#76, i_category_id#77, sales#88, number_sales#89] -Arguments: 100, [i_brand_id#48 ASC NULLS FIRST, i_class_id#49 ASC NULLS FIRST, i_category_id#50 ASC NULLS FIRST], [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sales#63, number_sales#64, channel#87, i_brand_id#75, i_class_id#76, i_category_id#77, sales#88, number_sales#89] +Input [12]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sales#50, number_sales#51, channel#72, i_brand_id#61, i_class_id#62, i_category_id#63, sales#73, number_sales#74] +Arguments: 100, [i_brand_id#38 ASC NULLS FIRST, i_class_id#39 ASC NULLS FIRST, i_category_id#40 ASC NULLS FIRST], [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sales#50, number_sales#51, channel#72, i_brand_id#61, i_class_id#62, i_category_id#63, sales#73, number_sales#74] ===== Subqueries ===== -Subquery:1 Hosting operator id = 78 Hosting Expression = Subquery scalar-subquery#65, [id=#66] +Subquery:1 Hosting operator id = 78 Hosting Expression = Subquery scalar-subquery#52, [id=#53] * HashAggregate (118) +- Exchange (117) +- * HashAggregate (116) @@ -570,96 +570,96 @@ Subquery:1 Hosting operator id = 78 Hosting Expression = Subquery scalar-subquer (100) Scan parquet default.store_sales -Output [3]: [ss_quantity#91, ss_list_price#92, ss_sold_date_sk#93] +Output [3]: [ss_quantity#75, ss_list_price#76, ss_sold_date_sk#77] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#93), dynamicpruningexpression(ss_sold_date_sk#93 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ss_sold_date_sk#77), dynamicpruningexpression(ss_sold_date_sk#77 IN dynamicpruning#12)] ReadSchema: struct (101) ColumnarToRow [codegen id : 2] -Input [3]: [ss_quantity#91, ss_list_price#92, ss_sold_date_sk#93] +Input [3]: [ss_quantity#75, ss_list_price#76, ss_sold_date_sk#77] (102) ReusedExchange [Reuses operator id: 132] -Output [1]: [d_date_sk#94] +Output [1]: [d_date_sk#78] (103) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [ss_sold_date_sk#93] -Right keys [1]: [d_date_sk#94] +Left keys [1]: [ss_sold_date_sk#77] +Right keys [1]: [d_date_sk#78] Join condition: None (104) Project [codegen id : 2] -Output [2]: [ss_quantity#91 AS quantity#95, ss_list_price#92 AS list_price#96] -Input [4]: [ss_quantity#91, ss_list_price#92, ss_sold_date_sk#93, d_date_sk#94] +Output [2]: [ss_quantity#75 AS quantity#79, ss_list_price#76 AS list_price#80] +Input [4]: [ss_quantity#75, ss_list_price#76, ss_sold_date_sk#77, d_date_sk#78] (105) Scan parquet default.catalog_sales -Output [3]: [cs_quantity#97, cs_list_price#98, cs_sold_date_sk#99] +Output [3]: [cs_quantity#81, cs_list_price#82, cs_sold_date_sk#83] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#99), dynamicpruningexpression(cs_sold_date_sk#99 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(cs_sold_date_sk#83), dynamicpruningexpression(cs_sold_date_sk#83 IN dynamicpruning#12)] ReadSchema: struct (106) ColumnarToRow [codegen id : 4] -Input [3]: [cs_quantity#97, cs_list_price#98, cs_sold_date_sk#99] +Input [3]: [cs_quantity#81, cs_list_price#82, cs_sold_date_sk#83] (107) ReusedExchange [Reuses operator id: 132] -Output [1]: [d_date_sk#100] +Output [1]: [d_date_sk#84] (108) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [cs_sold_date_sk#99] -Right keys [1]: [d_date_sk#100] +Left keys [1]: [cs_sold_date_sk#83] +Right keys [1]: [d_date_sk#84] Join condition: None (109) Project [codegen id : 4] -Output [2]: [cs_quantity#97 AS quantity#101, cs_list_price#98 AS list_price#102] -Input [4]: [cs_quantity#97, cs_list_price#98, cs_sold_date_sk#99, d_date_sk#100] +Output [2]: [cs_quantity#81 AS quantity#85, cs_list_price#82 AS list_price#86] +Input [4]: [cs_quantity#81, cs_list_price#82, cs_sold_date_sk#83, d_date_sk#84] (110) Scan parquet default.web_sales -Output [3]: [ws_quantity#103, ws_list_price#104, ws_sold_date_sk#105] +Output [3]: [ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#105), dynamicpruningexpression(ws_sold_date_sk#105 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ws_sold_date_sk#89), dynamicpruningexpression(ws_sold_date_sk#89 IN dynamicpruning#12)] ReadSchema: struct (111) ColumnarToRow [codegen id : 6] -Input [3]: [ws_quantity#103, ws_list_price#104, ws_sold_date_sk#105] +Input [3]: [ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89] (112) ReusedExchange [Reuses operator id: 132] -Output [1]: [d_date_sk#106] +Output [1]: [d_date_sk#90] (113) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ws_sold_date_sk#105] -Right keys [1]: [d_date_sk#106] +Left keys [1]: [ws_sold_date_sk#89] +Right keys [1]: [d_date_sk#90] Join condition: None (114) Project [codegen id : 6] -Output [2]: [ws_quantity#103 AS quantity#107, ws_list_price#104 AS list_price#108] -Input [4]: [ws_quantity#103, ws_list_price#104, ws_sold_date_sk#105, d_date_sk#106] +Output [2]: [ws_quantity#87 AS quantity#91, ws_list_price#88 AS list_price#92] +Input [4]: [ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89, d_date_sk#90] (115) Union (116) HashAggregate [codegen id : 7] -Input [2]: [quantity#95, list_price#96] +Input [2]: [quantity#79, list_price#80] Keys: [] -Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#95 as decimal(12,2))) * promote_precision(cast(list_price#96 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#109, count#110] -Results [2]: [sum#111, count#112] +Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#93, count#94] +Results [2]: [sum#95, count#96] (117) Exchange -Input [2]: [sum#111, count#112] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#113] +Input [2]: [sum#95, count#96] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=17] (118) HashAggregate [codegen id : 8] -Input [2]: [sum#111, count#112] +Input [2]: [sum#95, count#96] Keys: [] -Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#95 as decimal(12,2))) * promote_precision(cast(list_price#96 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#95 as decimal(12,2))) * promote_precision(cast(list_price#96 as decimal(12,2)))), DecimalType(18,2)))#114] -Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#95 as decimal(12,2))) * promote_precision(cast(list_price#96 as decimal(12,2)))), DecimalType(18,2)))#114 AS average_sales#115] +Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))#97] +Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))#97 AS average_sales#98] -Subquery:2 Hosting operator id = 100 Hosting Expression = ss_sold_date_sk#93 IN dynamicpruning#13 +Subquery:2 Hosting operator id = 100 Hosting Expression = ss_sold_date_sk#77 IN dynamicpruning#12 -Subquery:3 Hosting operator id = 105 Hosting Expression = cs_sold_date_sk#99 IN dynamicpruning#13 +Subquery:3 Hosting operator id = 105 Hosting Expression = cs_sold_date_sk#83 IN dynamicpruning#12 -Subquery:4 Hosting operator id = 110 Hosting Expression = ws_sold_date_sk#105 IN dynamicpruning#13 +Subquery:4 Hosting operator id = 110 Hosting Expression = ws_sold_date_sk#89 IN dynamicpruning#12 Subquery:5 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5 BroadcastExchange (123) @@ -670,28 +670,28 @@ BroadcastExchange (123) (119) Scan parquet default.date_dim -Output [2]: [d_date_sk#46, d_week_seq#116] +Output [2]: [d_date_sk#36, d_week_seq#99] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date_sk)] ReadSchema: struct (120) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#46, d_week_seq#116] +Input [2]: [d_date_sk#36, d_week_seq#99] (121) Filter [codegen id : 1] -Input [2]: [d_date_sk#46, d_week_seq#116] -Condition : ((isnotnull(d_week_seq#116) AND (d_week_seq#116 = Subquery scalar-subquery#117, [id=#118])) AND isnotnull(d_date_sk#46)) +Input [2]: [d_date_sk#36, d_week_seq#99] +Condition : ((isnotnull(d_week_seq#99) AND (d_week_seq#99 = Subquery scalar-subquery#100, [id=#101])) AND isnotnull(d_date_sk#36)) (122) Project [codegen id : 1] -Output [1]: [d_date_sk#46] -Input [2]: [d_date_sk#46, d_week_seq#116] +Output [1]: [d_date_sk#36] +Input [2]: [d_date_sk#36, d_week_seq#99] (123) BroadcastExchange -Input [1]: [d_date_sk#46] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#119] +Input [1]: [d_date_sk#36] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=18] -Subquery:6 Hosting operator id = 121 Hosting Expression = Subquery scalar-subquery#117, [id=#118] +Subquery:6 Hosting operator id = 121 Hosting Expression = Subquery scalar-subquery#100, [id=#101] * Project (127) +- * Filter (126) +- * ColumnarToRow (125) @@ -699,24 +699,24 @@ Subquery:6 Hosting operator id = 121 Hosting Expression = Subquery scalar-subque (124) Scan parquet default.date_dim -Output [4]: [d_week_seq#120, d_year#121, d_moy#122, d_dom#123] +Output [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), IsNotNull(d_dom), EqualTo(d_year,1999), EqualTo(d_moy,12), EqualTo(d_dom,16)] ReadSchema: struct (125) ColumnarToRow [codegen id : 1] -Input [4]: [d_week_seq#120, d_year#121, d_moy#122, d_dom#123] +Input [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] (126) Filter [codegen id : 1] -Input [4]: [d_week_seq#120, d_year#121, d_moy#122, d_dom#123] -Condition : (((((isnotnull(d_year#121) AND isnotnull(d_moy#122)) AND isnotnull(d_dom#123)) AND (d_year#121 = 1999)) AND (d_moy#122 = 12)) AND (d_dom#123 = 16)) +Input [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] +Condition : (((((isnotnull(d_year#103) AND isnotnull(d_moy#104)) AND isnotnull(d_dom#105)) AND (d_year#103 = 1999)) AND (d_moy#104 = 12)) AND (d_dom#105 = 16)) (127) Project [codegen id : 1] -Output [1]: [d_week_seq#120] -Input [4]: [d_week_seq#120, d_year#121, d_moy#122, d_dom#123] +Output [1]: [d_week_seq#102] +Input [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] -Subquery:7 Hosting operator id = 9 Hosting Expression = ss_sold_date_sk#12 IN dynamicpruning#13 +Subquery:7 Hosting operator id = 9 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#12 BroadcastExchange (132) +- * Project (131) +- * Filter (130) @@ -725,34 +725,34 @@ BroadcastExchange (132) (128) Scan parquet default.date_dim -Output [2]: [d_date_sk#14, d_year#124] +Output [2]: [d_date_sk#13, d_year#106] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1998), LessThanOrEqual(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (129) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#124] +Input [2]: [d_date_sk#13, d_year#106] (130) Filter [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#124] -Condition : (((isnotnull(d_year#124) AND (d_year#124 >= 1998)) AND (d_year#124 <= 2000)) AND isnotnull(d_date_sk#14)) +Input [2]: [d_date_sk#13, d_year#106] +Condition : (((isnotnull(d_year#106) AND (d_year#106 >= 1998)) AND (d_year#106 <= 2000)) AND isnotnull(d_date_sk#13)) (131) Project [codegen id : 1] -Output [1]: [d_date_sk#14] -Input [2]: [d_date_sk#14, d_year#124] +Output [1]: [d_date_sk#13] +Input [2]: [d_date_sk#13, d_year#106] (132) BroadcastExchange -Input [1]: [d_date_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#125] +Input [1]: [d_date_sk#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=19] -Subquery:8 Hosting operator id = 20 Hosting Expression = cs_sold_date_sk#21 IN dynamicpruning#13 +Subquery:8 Hosting operator id = 20 Hosting Expression = cs_sold_date_sk#19 IN dynamicpruning#12 -Subquery:9 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#36 IN dynamicpruning#13 +Subquery:9 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#29 IN dynamicpruning#12 -Subquery:10 Hosting operator id = 96 Hosting Expression = ReusedSubquery Subquery scalar-subquery#65, [id=#66] +Subquery:10 Hosting operator id = 96 Hosting Expression = ReusedSubquery Subquery scalar-subquery#52, [id=#53] -Subquery:11 Hosting operator id = 79 Hosting Expression = ss_sold_date_sk#70 IN dynamicpruning#71 +Subquery:11 Hosting operator id = 79 Hosting Expression = ss_sold_date_sk#57 IN dynamicpruning#58 BroadcastExchange (137) +- * Project (136) +- * Filter (135) @@ -761,28 +761,28 @@ BroadcastExchange (137) (133) Scan parquet default.date_dim -Output [2]: [d_date_sk#73, d_week_seq#126] +Output [2]: [d_date_sk#59, d_week_seq#107] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date_sk)] ReadSchema: struct (134) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#73, d_week_seq#126] +Input [2]: [d_date_sk#59, d_week_seq#107] (135) Filter [codegen id : 1] -Input [2]: [d_date_sk#73, d_week_seq#126] -Condition : ((isnotnull(d_week_seq#126) AND (d_week_seq#126 = Subquery scalar-subquery#127, [id=#128])) AND isnotnull(d_date_sk#73)) +Input [2]: [d_date_sk#59, d_week_seq#107] +Condition : ((isnotnull(d_week_seq#107) AND (d_week_seq#107 = Subquery scalar-subquery#108, [id=#109])) AND isnotnull(d_date_sk#59)) (136) Project [codegen id : 1] -Output [1]: [d_date_sk#73] -Input [2]: [d_date_sk#73, d_week_seq#126] +Output [1]: [d_date_sk#59] +Input [2]: [d_date_sk#59, d_week_seq#107] (137) BroadcastExchange -Input [1]: [d_date_sk#73] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#129] +Input [1]: [d_date_sk#59] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=20] -Subquery:12 Hosting operator id = 135 Hosting Expression = Subquery scalar-subquery#127, [id=#128] +Subquery:12 Hosting operator id = 135 Hosting Expression = Subquery scalar-subquery#108, [id=#109] * Project (141) +- * Filter (140) +- * ColumnarToRow (139) @@ -790,21 +790,21 @@ Subquery:12 Hosting operator id = 135 Hosting Expression = Subquery scalar-subqu (138) Scan parquet default.date_dim -Output [4]: [d_week_seq#130, d_year#131, d_moy#132, d_dom#133] +Output [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), IsNotNull(d_dom), EqualTo(d_year,1998), EqualTo(d_moy,12), EqualTo(d_dom,16)] ReadSchema: struct (139) ColumnarToRow [codegen id : 1] -Input [4]: [d_week_seq#130, d_year#131, d_moy#132, d_dom#133] +Input [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] (140) Filter [codegen id : 1] -Input [4]: [d_week_seq#130, d_year#131, d_moy#132, d_dom#133] -Condition : (((((isnotnull(d_year#131) AND isnotnull(d_moy#132)) AND isnotnull(d_dom#133)) AND (d_year#131 = 1998)) AND (d_moy#132 = 12)) AND (d_dom#133 = 16)) +Input [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] +Condition : (((((isnotnull(d_year#111) AND isnotnull(d_moy#112)) AND isnotnull(d_dom#113)) AND (d_year#111 = 1998)) AND (d_moy#112 = 12)) AND (d_dom#113 = 16)) (141) Project [codegen id : 1] -Output [1]: [d_week_seq#130] -Input [4]: [d_week_seq#130, d_year#131, d_moy#132, d_dom#133] +Output [1]: [d_week_seq#110] +Input [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14/explain.txt index 86bbc553e8c31..28a695ae202c9 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14/explain.txt @@ -174,7 +174,7 @@ Condition : isnotnull(i_item_sk#19) (19) BroadcastExchange Input [4]: [i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (20) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_item_sk#17] @@ -186,20 +186,20 @@ Output [4]: [cs_sold_date_sk#18, i_brand_id#20, i_class_id#21, i_category_id#22] Input [6]: [cs_item_sk#17, cs_sold_date_sk#18, i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22] (22) ReusedExchange [Reuses operator id: 117] -Output [1]: [d_date_sk#24] +Output [1]: [d_date_sk#23] (23) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_sold_date_sk#18] -Right keys [1]: [d_date_sk#24] +Right keys [1]: [d_date_sk#23] Join condition: None (24) Project [codegen id : 3] Output [3]: [i_brand_id#20, i_class_id#21, i_category_id#22] -Input [5]: [cs_sold_date_sk#18, i_brand_id#20, i_class_id#21, i_category_id#22, d_date_sk#24] +Input [5]: [cs_sold_date_sk#18, i_brand_id#20, i_class_id#21, i_category_id#22, d_date_sk#23] (25) BroadcastExchange Input [3]: [i_brand_id#20, i_class_id#21, i_category_id#22] -Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [id=#25] +Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [plan_id=2] (26) BroadcastHashJoin [codegen id : 4] Left keys [6]: [coalesce(i_brand_id#14, 0), isnull(i_brand_id#14), coalesce(i_class_id#15, 0), isnull(i_class_id#15), coalesce(i_category_id#16, 0), isnull(i_category_id#16)] @@ -208,7 +208,7 @@ Join condition: None (27) BroadcastExchange Input [4]: [i_item_sk#13, i_brand_id#14, i_class_id#15, i_category_id#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (28) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_item_sk#10] @@ -220,259 +220,259 @@ Output [4]: [ss_sold_date_sk#11, i_brand_id#14, i_class_id#15, i_category_id#16] Input [6]: [ss_item_sk#10, ss_sold_date_sk#11, i_item_sk#13, i_brand_id#14, i_class_id#15, i_category_id#16] (30) ReusedExchange [Reuses operator id: 117] -Output [1]: [d_date_sk#27] +Output [1]: [d_date_sk#24] (31) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_sold_date_sk#11] -Right keys [1]: [d_date_sk#27] +Right keys [1]: [d_date_sk#24] Join condition: None (32) Project [codegen id : 6] -Output [3]: [i_brand_id#14 AS brand_id#28, i_class_id#15 AS class_id#29, i_category_id#16 AS category_id#30] -Input [5]: [ss_sold_date_sk#11, i_brand_id#14, i_class_id#15, i_category_id#16, d_date_sk#27] +Output [3]: [i_brand_id#14 AS brand_id#25, i_class_id#15 AS class_id#26, i_category_id#16 AS category_id#27] +Input [5]: [ss_sold_date_sk#11, i_brand_id#14, i_class_id#15, i_category_id#16, d_date_sk#24] (33) HashAggregate [codegen id : 6] -Input [3]: [brand_id#28, class_id#29, category_id#30] -Keys [3]: [brand_id#28, class_id#29, category_id#30] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#28, class_id#29, category_id#30] +Results [3]: [brand_id#25, class_id#26, category_id#27] (34) Exchange -Input [3]: [brand_id#28, class_id#29, category_id#30] -Arguments: hashpartitioning(brand_id#28, class_id#29, category_id#30, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: hashpartitioning(brand_id#25, class_id#26, category_id#27, 5), ENSURE_REQUIREMENTS, [plan_id=4] (35) HashAggregate [codegen id : 10] -Input [3]: [brand_id#28, class_id#29, category_id#30] -Keys [3]: [brand_id#28, class_id#29, category_id#30] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#28, class_id#29, category_id#30] +Results [3]: [brand_id#25, class_id#26, category_id#27] (36) Scan parquet default.web_sales -Output [2]: [ws_item_sk#32, ws_sold_date_sk#33] +Output [2]: [ws_item_sk#28, ws_sold_date_sk#29] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#33), dynamicpruningexpression(ws_sold_date_sk#33 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(ws_sold_date_sk#29), dynamicpruningexpression(ws_sold_date_sk#29 IN dynamicpruning#12)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 9] -Input [2]: [ws_item_sk#32, ws_sold_date_sk#33] +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] (38) Filter [codegen id : 9] -Input [2]: [ws_item_sk#32, ws_sold_date_sk#33] -Condition : isnotnull(ws_item_sk#32) +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] +Condition : isnotnull(ws_item_sk#28) (39) ReusedExchange [Reuses operator id: 19] -Output [4]: [i_item_sk#34, i_brand_id#35, i_class_id#36, i_category_id#37] +Output [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33] (40) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [ws_item_sk#32] -Right keys [1]: [i_item_sk#34] +Left keys [1]: [ws_item_sk#28] +Right keys [1]: [i_item_sk#30] Join condition: None (41) Project [codegen id : 9] -Output [4]: [ws_sold_date_sk#33, i_brand_id#35, i_class_id#36, i_category_id#37] -Input [6]: [ws_item_sk#32, ws_sold_date_sk#33, i_item_sk#34, i_brand_id#35, i_class_id#36, i_category_id#37] +Output [4]: [ws_sold_date_sk#29, i_brand_id#31, i_class_id#32, i_category_id#33] +Input [6]: [ws_item_sk#28, ws_sold_date_sk#29, i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33] (42) ReusedExchange [Reuses operator id: 117] -Output [1]: [d_date_sk#38] +Output [1]: [d_date_sk#34] (43) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [ws_sold_date_sk#33] -Right keys [1]: [d_date_sk#38] +Left keys [1]: [ws_sold_date_sk#29] +Right keys [1]: [d_date_sk#34] Join condition: None (44) Project [codegen id : 9] -Output [3]: [i_brand_id#35, i_class_id#36, i_category_id#37] -Input [5]: [ws_sold_date_sk#33, i_brand_id#35, i_class_id#36, i_category_id#37, d_date_sk#38] +Output [3]: [i_brand_id#31, i_class_id#32, i_category_id#33] +Input [5]: [ws_sold_date_sk#29, i_brand_id#31, i_class_id#32, i_category_id#33, d_date_sk#34] (45) BroadcastExchange -Input [3]: [i_brand_id#35, i_class_id#36, i_category_id#37] -Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [id=#39] +Input [3]: [i_brand_id#31, i_class_id#32, i_category_id#33] +Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [plan_id=5] (46) BroadcastHashJoin [codegen id : 10] -Left keys [6]: [coalesce(brand_id#28, 0), isnull(brand_id#28), coalesce(class_id#29, 0), isnull(class_id#29), coalesce(category_id#30, 0), isnull(category_id#30)] -Right keys [6]: [coalesce(i_brand_id#35, 0), isnull(i_brand_id#35), coalesce(i_class_id#36, 0), isnull(i_class_id#36), coalesce(i_category_id#37, 0), isnull(i_category_id#37)] +Left keys [6]: [coalesce(brand_id#25, 0), isnull(brand_id#25), coalesce(class_id#26, 0), isnull(class_id#26), coalesce(category_id#27, 0), isnull(category_id#27)] +Right keys [6]: [coalesce(i_brand_id#31, 0), isnull(i_brand_id#31), coalesce(i_class_id#32, 0), isnull(i_class_id#32), coalesce(i_category_id#33, 0), isnull(i_category_id#33)] Join condition: None (47) BroadcastExchange -Input [3]: [brand_id#28, class_id#29, category_id#30] -Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [id=#40] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [plan_id=6] (48) BroadcastHashJoin [codegen id : 11] Left keys [3]: [i_brand_id#7, i_class_id#8, i_category_id#9] -Right keys [3]: [brand_id#28, class_id#29, category_id#30] +Right keys [3]: [brand_id#25, class_id#26, category_id#27] Join condition: None (49) Project [codegen id : 11] -Output [1]: [i_item_sk#6 AS ss_item_sk#41] -Input [7]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9, brand_id#28, class_id#29, category_id#30] +Output [1]: [i_item_sk#6 AS ss_item_sk#35] +Input [7]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9, brand_id#25, class_id#26, category_id#27] (50) BroadcastExchange -Input [1]: [ss_item_sk#41] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#42] +Input [1]: [ss_item_sk#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] (51) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [ss_item_sk#41] +Right keys [1]: [ss_item_sk#35] Join condition: None (52) Scan parquet default.item -Output [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] +Output [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)] ReadSchema: struct (53) ColumnarToRow [codegen id : 23] -Input [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] +Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] (54) Filter [codegen id : 23] -Input [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] -Condition : (((isnotnull(i_item_sk#43) AND isnotnull(i_brand_id#44)) AND isnotnull(i_class_id#45)) AND isnotnull(i_category_id#46)) +Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] +Condition : (((isnotnull(i_item_sk#36) AND isnotnull(i_brand_id#37)) AND isnotnull(i_class_id#38)) AND isnotnull(i_category_id#39)) (55) ReusedExchange [Reuses operator id: 50] -Output [1]: [ss_item_sk#41] +Output [1]: [ss_item_sk#35] (56) BroadcastHashJoin [codegen id : 23] -Left keys [1]: [i_item_sk#43] -Right keys [1]: [ss_item_sk#41] +Left keys [1]: [i_item_sk#36] +Right keys [1]: [ss_item_sk#35] Join condition: None (57) BroadcastExchange -Input [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#47] +Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] (58) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#43] +Right keys [1]: [i_item_sk#36] Join condition: None (59) Project [codegen id : 25] -Output [6]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#44, i_class_id#45, i_category_id#46] -Input [8]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] +Output [6]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#37, i_class_id#38, i_category_id#39] +Input [8]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] (60) ReusedExchange [Reuses operator id: 108] -Output [1]: [d_date_sk#48] +Output [1]: [d_date_sk#40] (61) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_sold_date_sk#4] -Right keys [1]: [d_date_sk#48] +Right keys [1]: [d_date_sk#40] Join condition: None (62) Project [codegen id : 25] -Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#44, i_class_id#45, i_category_id#46] -Input [7]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#44, i_class_id#45, i_category_id#46, d_date_sk#48] +Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#37, i_class_id#38, i_category_id#39] +Input [7]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#37, i_class_id#38, i_category_id#39, d_date_sk#40] (63) HashAggregate [codegen id : 25] -Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#44, i_class_id#45, i_category_id#46] -Keys [3]: [i_brand_id#44, i_class_id#45, i_category_id#46] +Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#37, i_class_id#38, i_category_id#39] +Keys [3]: [i_brand_id#37, i_class_id#38, i_category_id#39] Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#49, isEmpty#50, count#51] -Results [6]: [i_brand_id#44, i_class_id#45, i_category_id#46, sum#52, isEmpty#53, count#54] +Aggregate Attributes [3]: [sum#41, isEmpty#42, count#43] +Results [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#44, isEmpty#45, count#46] (64) Exchange -Input [6]: [i_brand_id#44, i_class_id#45, i_category_id#46, sum#52, isEmpty#53, count#54] -Arguments: hashpartitioning(i_brand_id#44, i_class_id#45, i_category_id#46, 5), ENSURE_REQUIREMENTS, [id=#55] +Input [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#44, isEmpty#45, count#46] +Arguments: hashpartitioning(i_brand_id#37, i_class_id#38, i_category_id#39, 5), ENSURE_REQUIREMENTS, [plan_id=9] (65) HashAggregate [codegen id : 52] -Input [6]: [i_brand_id#44, i_class_id#45, i_category_id#46, sum#52, isEmpty#53, count#54] -Keys [3]: [i_brand_id#44, i_class_id#45, i_category_id#46] +Input [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#44, isEmpty#45, count#46] +Keys [3]: [i_brand_id#37, i_class_id#38, i_category_id#39] Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#56, count(1)#57] -Results [6]: [store AS channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#56 AS sales#59, count(1)#57 AS number_sales#60] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47, count(1)#48] +Results [6]: [store AS channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47 AS sales#50, count(1)#48 AS number_sales#51] (66) Filter [codegen id : 52] -Input [6]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sales#59, number_sales#60] -Condition : (isnotnull(sales#59) AND (cast(sales#59 as decimal(32,6)) > cast(Subquery scalar-subquery#61, [id=#62] as decimal(32,6)))) +Input [6]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sales#50, number_sales#51] +Condition : (isnotnull(sales#50) AND (cast(sales#50 as decimal(32,6)) > cast(Subquery scalar-subquery#52, [id=#53] as decimal(32,6)))) (67) Scan parquet default.store_sales -Output [4]: [ss_item_sk#63, ss_quantity#64, ss_list_price#65, ss_sold_date_sk#66] +Output [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#66), dynamicpruningexpression(ss_sold_date_sk#66 IN dynamicpruning#67)] +PartitionFilters: [isnotnull(ss_sold_date_sk#57), dynamicpruningexpression(ss_sold_date_sk#57 IN dynamicpruning#58)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (68) ColumnarToRow [codegen id : 50] -Input [4]: [ss_item_sk#63, ss_quantity#64, ss_list_price#65, ss_sold_date_sk#66] +Input [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] (69) Filter [codegen id : 50] -Input [4]: [ss_item_sk#63, ss_quantity#64, ss_list_price#65, ss_sold_date_sk#66] -Condition : isnotnull(ss_item_sk#63) +Input [4]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57] +Condition : isnotnull(ss_item_sk#54) (70) ReusedExchange [Reuses operator id: 50] -Output [1]: [ss_item_sk#41] +Output [1]: [ss_item_sk#35] (71) BroadcastHashJoin [codegen id : 50] -Left keys [1]: [ss_item_sk#63] -Right keys [1]: [ss_item_sk#41] +Left keys [1]: [ss_item_sk#54] +Right keys [1]: [ss_item_sk#35] Join condition: None (72) ReusedExchange [Reuses operator id: 57] -Output [4]: [i_item_sk#68, i_brand_id#69, i_class_id#70, i_category_id#71] +Output [4]: [i_item_sk#59, i_brand_id#60, i_class_id#61, i_category_id#62] (73) BroadcastHashJoin [codegen id : 50] -Left keys [1]: [ss_item_sk#63] -Right keys [1]: [i_item_sk#68] +Left keys [1]: [ss_item_sk#54] +Right keys [1]: [i_item_sk#59] Join condition: None (74) Project [codegen id : 50] -Output [6]: [ss_quantity#64, ss_list_price#65, ss_sold_date_sk#66, i_brand_id#69, i_class_id#70, i_category_id#71] -Input [8]: [ss_item_sk#63, ss_quantity#64, ss_list_price#65, ss_sold_date_sk#66, i_item_sk#68, i_brand_id#69, i_class_id#70, i_category_id#71] +Output [6]: [ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57, i_brand_id#60, i_class_id#61, i_category_id#62] +Input [8]: [ss_item_sk#54, ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57, i_item_sk#59, i_brand_id#60, i_class_id#61, i_category_id#62] (75) ReusedExchange [Reuses operator id: 122] -Output [1]: [d_date_sk#72] +Output [1]: [d_date_sk#63] (76) BroadcastHashJoin [codegen id : 50] -Left keys [1]: [ss_sold_date_sk#66] -Right keys [1]: [d_date_sk#72] +Left keys [1]: [ss_sold_date_sk#57] +Right keys [1]: [d_date_sk#63] Join condition: None (77) Project [codegen id : 50] -Output [5]: [ss_quantity#64, ss_list_price#65, i_brand_id#69, i_class_id#70, i_category_id#71] -Input [7]: [ss_quantity#64, ss_list_price#65, ss_sold_date_sk#66, i_brand_id#69, i_class_id#70, i_category_id#71, d_date_sk#72] +Output [5]: [ss_quantity#55, ss_list_price#56, i_brand_id#60, i_class_id#61, i_category_id#62] +Input [7]: [ss_quantity#55, ss_list_price#56, ss_sold_date_sk#57, i_brand_id#60, i_class_id#61, i_category_id#62, d_date_sk#63] (78) HashAggregate [codegen id : 50] -Input [5]: [ss_quantity#64, ss_list_price#65, i_brand_id#69, i_class_id#70, i_category_id#71] -Keys [3]: [i_brand_id#69, i_class_id#70, i_category_id#71] -Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_list_price#65 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#73, isEmpty#74, count#75] -Results [6]: [i_brand_id#69, i_class_id#70, i_category_id#71, sum#76, isEmpty#77, count#78] +Input [5]: [ss_quantity#55, ss_list_price#56, i_brand_id#60, i_class_id#61, i_category_id#62] +Keys [3]: [i_brand_id#60, i_class_id#61, i_category_id#62] +Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] +Aggregate Attributes [3]: [sum#64, isEmpty#65, count#66] +Results [6]: [i_brand_id#60, i_class_id#61, i_category_id#62, sum#67, isEmpty#68, count#69] (79) Exchange -Input [6]: [i_brand_id#69, i_class_id#70, i_category_id#71, sum#76, isEmpty#77, count#78] -Arguments: hashpartitioning(i_brand_id#69, i_class_id#70, i_category_id#71, 5), ENSURE_REQUIREMENTS, [id=#79] +Input [6]: [i_brand_id#60, i_class_id#61, i_category_id#62, sum#67, isEmpty#68, count#69] +Arguments: hashpartitioning(i_brand_id#60, i_class_id#61, i_category_id#62, 5), ENSURE_REQUIREMENTS, [plan_id=10] (80) HashAggregate [codegen id : 51] -Input [6]: [i_brand_id#69, i_class_id#70, i_category_id#71, sum#76, isEmpty#77, count#78] -Keys [3]: [i_brand_id#69, i_class_id#70, i_category_id#71] -Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_list_price#65 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_list_price#65 as decimal(12,2)))), DecimalType(18,2)))#80, count(1)#81] -Results [6]: [store AS channel#82, i_brand_id#69, i_class_id#70, i_category_id#71, sum(CheckOverflow((promote_precision(cast(ss_quantity#64 as decimal(12,2))) * promote_precision(cast(ss_list_price#65 as decimal(12,2)))), DecimalType(18,2)))#80 AS sales#83, count(1)#81 AS number_sales#84] +Input [6]: [i_brand_id#60, i_class_id#61, i_category_id#62, sum#67, isEmpty#68, count#69] +Keys [3]: [i_brand_id#60, i_class_id#61, i_category_id#62] +Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2))), count(1)] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#70, count(1)#71] +Results [6]: [store AS channel#72, i_brand_id#60, i_class_id#61, i_category_id#62, sum(CheckOverflow((promote_precision(cast(ss_quantity#55 as decimal(12,2))) * promote_precision(cast(ss_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#70 AS sales#73, count(1)#71 AS number_sales#74] (81) Filter [codegen id : 51] -Input [6]: [channel#82, i_brand_id#69, i_class_id#70, i_category_id#71, sales#83, number_sales#84] -Condition : (isnotnull(sales#83) AND (cast(sales#83 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#61, [id=#62] as decimal(32,6)))) +Input [6]: [channel#72, i_brand_id#60, i_class_id#61, i_category_id#62, sales#73, number_sales#74] +Condition : (isnotnull(sales#73) AND (cast(sales#73 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#52, [id=#53] as decimal(32,6)))) (82) BroadcastExchange -Input [6]: [channel#82, i_brand_id#69, i_class_id#70, i_category_id#71, sales#83, number_sales#84] -Arguments: HashedRelationBroadcastMode(List(input[1, int, true], input[2, int, true], input[3, int, true]),false), [id=#85] +Input [6]: [channel#72, i_brand_id#60, i_class_id#61, i_category_id#62, sales#73, number_sales#74] +Arguments: HashedRelationBroadcastMode(List(input[1, int, true], input[2, int, true], input[3, int, true]),false), [plan_id=11] (83) BroadcastHashJoin [codegen id : 52] -Left keys [3]: [i_brand_id#44, i_class_id#45, i_category_id#46] -Right keys [3]: [i_brand_id#69, i_class_id#70, i_category_id#71] +Left keys [3]: [i_brand_id#37, i_class_id#38, i_category_id#39] +Right keys [3]: [i_brand_id#60, i_class_id#61, i_category_id#62] Join condition: None (84) TakeOrderedAndProject -Input [12]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sales#59, number_sales#60, channel#82, i_brand_id#69, i_class_id#70, i_category_id#71, sales#83, number_sales#84] -Arguments: 100, [i_brand_id#44 ASC NULLS FIRST, i_class_id#45 ASC NULLS FIRST, i_category_id#46 ASC NULLS FIRST], [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sales#59, number_sales#60, channel#82, i_brand_id#69, i_class_id#70, i_category_id#71, sales#83, number_sales#84] +Input [12]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sales#50, number_sales#51, channel#72, i_brand_id#60, i_class_id#61, i_category_id#62, sales#73, number_sales#74] +Arguments: 100, [i_brand_id#37 ASC NULLS FIRST, i_class_id#38 ASC NULLS FIRST, i_category_id#39 ASC NULLS FIRST], [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sales#50, number_sales#51, channel#72, i_brand_id#60, i_class_id#61, i_category_id#62, sales#73, number_sales#74] ===== Subqueries ===== -Subquery:1 Hosting operator id = 66 Hosting Expression = Subquery scalar-subquery#61, [id=#62] +Subquery:1 Hosting operator id = 66 Hosting Expression = Subquery scalar-subquery#52, [id=#53] * HashAggregate (103) +- Exchange (102) +- * HashAggregate (101) @@ -495,96 +495,96 @@ Subquery:1 Hosting operator id = 66 Hosting Expression = Subquery scalar-subquer (85) Scan parquet default.store_sales -Output [3]: [ss_quantity#86, ss_list_price#87, ss_sold_date_sk#88] +Output [3]: [ss_quantity#75, ss_list_price#76, ss_sold_date_sk#77] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#88), dynamicpruningexpression(ss_sold_date_sk#88 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(ss_sold_date_sk#77), dynamicpruningexpression(ss_sold_date_sk#77 IN dynamicpruning#12)] ReadSchema: struct (86) ColumnarToRow [codegen id : 2] -Input [3]: [ss_quantity#86, ss_list_price#87, ss_sold_date_sk#88] +Input [3]: [ss_quantity#75, ss_list_price#76, ss_sold_date_sk#77] (87) ReusedExchange [Reuses operator id: 117] -Output [1]: [d_date_sk#89] +Output [1]: [d_date_sk#78] (88) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [ss_sold_date_sk#88] -Right keys [1]: [d_date_sk#89] +Left keys [1]: [ss_sold_date_sk#77] +Right keys [1]: [d_date_sk#78] Join condition: None (89) Project [codegen id : 2] -Output [2]: [ss_quantity#86 AS quantity#90, ss_list_price#87 AS list_price#91] -Input [4]: [ss_quantity#86, ss_list_price#87, ss_sold_date_sk#88, d_date_sk#89] +Output [2]: [ss_quantity#75 AS quantity#79, ss_list_price#76 AS list_price#80] +Input [4]: [ss_quantity#75, ss_list_price#76, ss_sold_date_sk#77, d_date_sk#78] (90) Scan parquet default.catalog_sales -Output [3]: [cs_quantity#92, cs_list_price#93, cs_sold_date_sk#94] +Output [3]: [cs_quantity#81, cs_list_price#82, cs_sold_date_sk#83] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#94), dynamicpruningexpression(cs_sold_date_sk#94 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(cs_sold_date_sk#83), dynamicpruningexpression(cs_sold_date_sk#83 IN dynamicpruning#12)] ReadSchema: struct (91) ColumnarToRow [codegen id : 4] -Input [3]: [cs_quantity#92, cs_list_price#93, cs_sold_date_sk#94] +Input [3]: [cs_quantity#81, cs_list_price#82, cs_sold_date_sk#83] (92) ReusedExchange [Reuses operator id: 117] -Output [1]: [d_date_sk#95] +Output [1]: [d_date_sk#84] (93) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [cs_sold_date_sk#94] -Right keys [1]: [d_date_sk#95] +Left keys [1]: [cs_sold_date_sk#83] +Right keys [1]: [d_date_sk#84] Join condition: None (94) Project [codegen id : 4] -Output [2]: [cs_quantity#92 AS quantity#96, cs_list_price#93 AS list_price#97] -Input [4]: [cs_quantity#92, cs_list_price#93, cs_sold_date_sk#94, d_date_sk#95] +Output [2]: [cs_quantity#81 AS quantity#85, cs_list_price#82 AS list_price#86] +Input [4]: [cs_quantity#81, cs_list_price#82, cs_sold_date_sk#83, d_date_sk#84] (95) Scan parquet default.web_sales -Output [3]: [ws_quantity#98, ws_list_price#99, ws_sold_date_sk#100] +Output [3]: [ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#100), dynamicpruningexpression(ws_sold_date_sk#100 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(ws_sold_date_sk#89), dynamicpruningexpression(ws_sold_date_sk#89 IN dynamicpruning#12)] ReadSchema: struct (96) ColumnarToRow [codegen id : 6] -Input [3]: [ws_quantity#98, ws_list_price#99, ws_sold_date_sk#100] +Input [3]: [ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89] (97) ReusedExchange [Reuses operator id: 117] -Output [1]: [d_date_sk#101] +Output [1]: [d_date_sk#90] (98) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ws_sold_date_sk#100] -Right keys [1]: [d_date_sk#101] +Left keys [1]: [ws_sold_date_sk#89] +Right keys [1]: [d_date_sk#90] Join condition: None (99) Project [codegen id : 6] -Output [2]: [ws_quantity#98 AS quantity#102, ws_list_price#99 AS list_price#103] -Input [4]: [ws_quantity#98, ws_list_price#99, ws_sold_date_sk#100, d_date_sk#101] +Output [2]: [ws_quantity#87 AS quantity#91, ws_list_price#88 AS list_price#92] +Input [4]: [ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89, d_date_sk#90] (100) Union (101) HashAggregate [codegen id : 7] -Input [2]: [quantity#90, list_price#91] +Input [2]: [quantity#79, list_price#80] Keys: [] -Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#90 as decimal(12,2))) * promote_precision(cast(list_price#91 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#104, count#105] -Results [2]: [sum#106, count#107] +Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#93, count#94] +Results [2]: [sum#95, count#96] (102) Exchange -Input [2]: [sum#106, count#107] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#108] +Input [2]: [sum#95, count#96] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12] (103) HashAggregate [codegen id : 8] -Input [2]: [sum#106, count#107] +Input [2]: [sum#95, count#96] Keys: [] -Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#90 as decimal(12,2))) * promote_precision(cast(list_price#91 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#90 as decimal(12,2))) * promote_precision(cast(list_price#91 as decimal(12,2)))), DecimalType(18,2)))#109] -Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#90 as decimal(12,2))) * promote_precision(cast(list_price#91 as decimal(12,2)))), DecimalType(18,2)))#109 AS average_sales#110] +Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))#97] +Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#79 as decimal(12,2))) * promote_precision(cast(list_price#80 as decimal(12,2)))), DecimalType(18,2)))#97 AS average_sales#98] -Subquery:2 Hosting operator id = 85 Hosting Expression = ss_sold_date_sk#88 IN dynamicpruning#12 +Subquery:2 Hosting operator id = 85 Hosting Expression = ss_sold_date_sk#77 IN dynamicpruning#12 -Subquery:3 Hosting operator id = 90 Hosting Expression = cs_sold_date_sk#94 IN dynamicpruning#12 +Subquery:3 Hosting operator id = 90 Hosting Expression = cs_sold_date_sk#83 IN dynamicpruning#12 -Subquery:4 Hosting operator id = 95 Hosting Expression = ws_sold_date_sk#100 IN dynamicpruning#12 +Subquery:4 Hosting operator id = 95 Hosting Expression = ws_sold_date_sk#89 IN dynamicpruning#12 Subquery:5 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5 BroadcastExchange (108) @@ -595,28 +595,28 @@ BroadcastExchange (108) (104) Scan parquet default.date_dim -Output [2]: [d_date_sk#48, d_week_seq#111] +Output [2]: [d_date_sk#40, d_week_seq#99] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date_sk)] ReadSchema: struct (105) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#48, d_week_seq#111] +Input [2]: [d_date_sk#40, d_week_seq#99] (106) Filter [codegen id : 1] -Input [2]: [d_date_sk#48, d_week_seq#111] -Condition : ((isnotnull(d_week_seq#111) AND (d_week_seq#111 = Subquery scalar-subquery#112, [id=#113])) AND isnotnull(d_date_sk#48)) +Input [2]: [d_date_sk#40, d_week_seq#99] +Condition : ((isnotnull(d_week_seq#99) AND (d_week_seq#99 = Subquery scalar-subquery#100, [id=#101])) AND isnotnull(d_date_sk#40)) (107) Project [codegen id : 1] -Output [1]: [d_date_sk#48] -Input [2]: [d_date_sk#48, d_week_seq#111] +Output [1]: [d_date_sk#40] +Input [2]: [d_date_sk#40, d_week_seq#99] (108) BroadcastExchange -Input [1]: [d_date_sk#48] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#114] +Input [1]: [d_date_sk#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=13] -Subquery:6 Hosting operator id = 106 Hosting Expression = Subquery scalar-subquery#112, [id=#113] +Subquery:6 Hosting operator id = 106 Hosting Expression = Subquery scalar-subquery#100, [id=#101] * Project (112) +- * Filter (111) +- * ColumnarToRow (110) @@ -624,22 +624,22 @@ Subquery:6 Hosting operator id = 106 Hosting Expression = Subquery scalar-subque (109) Scan parquet default.date_dim -Output [4]: [d_week_seq#115, d_year#116, d_moy#117, d_dom#118] +Output [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), IsNotNull(d_dom), EqualTo(d_year,1999), EqualTo(d_moy,12), EqualTo(d_dom,16)] ReadSchema: struct (110) ColumnarToRow [codegen id : 1] -Input [4]: [d_week_seq#115, d_year#116, d_moy#117, d_dom#118] +Input [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] (111) Filter [codegen id : 1] -Input [4]: [d_week_seq#115, d_year#116, d_moy#117, d_dom#118] -Condition : (((((isnotnull(d_year#116) AND isnotnull(d_moy#117)) AND isnotnull(d_dom#118)) AND (d_year#116 = 1999)) AND (d_moy#117 = 12)) AND (d_dom#118 = 16)) +Input [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] +Condition : (((((isnotnull(d_year#103) AND isnotnull(d_moy#104)) AND isnotnull(d_dom#105)) AND (d_year#103 = 1999)) AND (d_moy#104 = 12)) AND (d_dom#105 = 16)) (112) Project [codegen id : 1] -Output [1]: [d_week_seq#115] -Input [4]: [d_week_seq#115, d_year#116, d_moy#117, d_dom#118] +Output [1]: [d_week_seq#102] +Input [4]: [d_week_seq#102, d_year#103, d_moy#104, d_dom#105] Subquery:7 Hosting operator id = 7 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#12 BroadcastExchange (117) @@ -650,34 +650,34 @@ BroadcastExchange (117) (113) Scan parquet default.date_dim -Output [2]: [d_date_sk#27, d_year#119] +Output [2]: [d_date_sk#24, d_year#106] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1998), LessThanOrEqual(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (114) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#27, d_year#119] +Input [2]: [d_date_sk#24, d_year#106] (115) Filter [codegen id : 1] -Input [2]: [d_date_sk#27, d_year#119] -Condition : (((isnotnull(d_year#119) AND (d_year#119 >= 1998)) AND (d_year#119 <= 2000)) AND isnotnull(d_date_sk#27)) +Input [2]: [d_date_sk#24, d_year#106] +Condition : (((isnotnull(d_year#106) AND (d_year#106 >= 1998)) AND (d_year#106 <= 2000)) AND isnotnull(d_date_sk#24)) (116) Project [codegen id : 1] -Output [1]: [d_date_sk#27] -Input [2]: [d_date_sk#27, d_year#119] +Output [1]: [d_date_sk#24] +Input [2]: [d_date_sk#24, d_year#106] (117) BroadcastExchange -Input [1]: [d_date_sk#27] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#120] +Input [1]: [d_date_sk#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=14] Subquery:8 Hosting operator id = 13 Hosting Expression = cs_sold_date_sk#18 IN dynamicpruning#12 -Subquery:9 Hosting operator id = 36 Hosting Expression = ws_sold_date_sk#33 IN dynamicpruning#12 +Subquery:9 Hosting operator id = 36 Hosting Expression = ws_sold_date_sk#29 IN dynamicpruning#12 -Subquery:10 Hosting operator id = 81 Hosting Expression = ReusedSubquery Subquery scalar-subquery#61, [id=#62] +Subquery:10 Hosting operator id = 81 Hosting Expression = ReusedSubquery Subquery scalar-subquery#52, [id=#53] -Subquery:11 Hosting operator id = 67 Hosting Expression = ss_sold_date_sk#66 IN dynamicpruning#67 +Subquery:11 Hosting operator id = 67 Hosting Expression = ss_sold_date_sk#57 IN dynamicpruning#58 BroadcastExchange (122) +- * Project (121) +- * Filter (120) @@ -686,28 +686,28 @@ BroadcastExchange (122) (118) Scan parquet default.date_dim -Output [2]: [d_date_sk#72, d_week_seq#121] +Output [2]: [d_date_sk#63, d_week_seq#107] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date_sk)] ReadSchema: struct (119) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#72, d_week_seq#121] +Input [2]: [d_date_sk#63, d_week_seq#107] (120) Filter [codegen id : 1] -Input [2]: [d_date_sk#72, d_week_seq#121] -Condition : ((isnotnull(d_week_seq#121) AND (d_week_seq#121 = Subquery scalar-subquery#122, [id=#123])) AND isnotnull(d_date_sk#72)) +Input [2]: [d_date_sk#63, d_week_seq#107] +Condition : ((isnotnull(d_week_seq#107) AND (d_week_seq#107 = Subquery scalar-subquery#108, [id=#109])) AND isnotnull(d_date_sk#63)) (121) Project [codegen id : 1] -Output [1]: [d_date_sk#72] -Input [2]: [d_date_sk#72, d_week_seq#121] +Output [1]: [d_date_sk#63] +Input [2]: [d_date_sk#63, d_week_seq#107] (122) BroadcastExchange -Input [1]: [d_date_sk#72] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#124] +Input [1]: [d_date_sk#63] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=15] -Subquery:12 Hosting operator id = 120 Hosting Expression = Subquery scalar-subquery#122, [id=#123] +Subquery:12 Hosting operator id = 120 Hosting Expression = Subquery scalar-subquery#108, [id=#109] * Project (126) +- * Filter (125) +- * ColumnarToRow (124) @@ -715,21 +715,21 @@ Subquery:12 Hosting operator id = 120 Hosting Expression = Subquery scalar-subqu (123) Scan parquet default.date_dim -Output [4]: [d_week_seq#125, d_year#126, d_moy#127, d_dom#128] +Output [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), IsNotNull(d_dom), EqualTo(d_year,1998), EqualTo(d_moy,12), EqualTo(d_dom,16)] ReadSchema: struct (124) ColumnarToRow [codegen id : 1] -Input [4]: [d_week_seq#125, d_year#126, d_moy#127, d_dom#128] +Input [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] (125) Filter [codegen id : 1] -Input [4]: [d_week_seq#125, d_year#126, d_moy#127, d_dom#128] -Condition : (((((isnotnull(d_year#126) AND isnotnull(d_moy#127)) AND isnotnull(d_dom#128)) AND (d_year#126 = 1998)) AND (d_moy#127 = 12)) AND (d_dom#128 = 16)) +Input [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] +Condition : (((((isnotnull(d_year#111) AND isnotnull(d_moy#112)) AND isnotnull(d_dom#113)) AND (d_year#111 = 1998)) AND (d_moy#112 = 12)) AND (d_dom#113 = 16)) (126) Project [codegen id : 1] -Output [1]: [d_week_seq#125] -Input [4]: [d_week_seq#125, d_year#126, d_moy#127, d_dom#128] +Output [1]: [d_week_seq#110] +Input [4]: [d_week_seq#110, d_year#111, d_moy#112, d_dom#113] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a.sf100/explain.txt index 88d71316966c6..6777e024d930a 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a.sf100/explain.txt @@ -161,661 +161,661 @@ Condition : isnotnull(ss_item_sk#1) (4) Exchange Input [4]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [4]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.item -Output [4]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10] +Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)] ReadSchema: struct (7) ColumnarToRow [codegen id : 19] -Input [4]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10] +Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] (8) Filter [codegen id : 19] -Input [4]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10] -Condition : ((isnotnull(i_brand_id#8) AND isnotnull(i_class_id#9)) AND isnotnull(i_category_id#10)) +Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9] +Condition : ((isnotnull(i_brand_id#7) AND isnotnull(i_class_id#8)) AND isnotnull(i_category_id#9)) (9) Scan parquet default.store_sales -Output [2]: [ss_item_sk#11, ss_sold_date_sk#12] +Output [2]: [ss_item_sk#10, ss_sold_date_sk#11] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#12), dynamicpruningexpression(ss_sold_date_sk#12 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ss_sold_date_sk#11), dynamicpruningexpression(ss_sold_date_sk#11 IN dynamicpruning#12)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (10) ColumnarToRow [codegen id : 11] -Input [2]: [ss_item_sk#11, ss_sold_date_sk#12] +Input [2]: [ss_item_sk#10, ss_sold_date_sk#11] (11) Filter [codegen id : 11] -Input [2]: [ss_item_sk#11, ss_sold_date_sk#12] -Condition : isnotnull(ss_item_sk#11) +Input [2]: [ss_item_sk#10, ss_sold_date_sk#11] +Condition : isnotnull(ss_item_sk#10) (12) ReusedExchange [Reuses operator id: 177] -Output [1]: [d_date_sk#14] +Output [1]: [d_date_sk#13] (13) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [ss_sold_date_sk#12] -Right keys [1]: [d_date_sk#14] +Left keys [1]: [ss_sold_date_sk#11] +Right keys [1]: [d_date_sk#13] Join condition: None (14) Project [codegen id : 11] -Output [1]: [ss_item_sk#11] -Input [3]: [ss_item_sk#11, ss_sold_date_sk#12, d_date_sk#14] +Output [1]: [ss_item_sk#10] +Input [3]: [ss_item_sk#10, ss_sold_date_sk#11, d_date_sk#13] (15) Scan parquet default.item -Output [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] +Output [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)] ReadSchema: struct (16) ColumnarToRow [codegen id : 4] -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] (17) Filter [codegen id : 4] -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Condition : (((isnotnull(i_item_sk#15) AND isnotnull(i_brand_id#16)) AND isnotnull(i_class_id#17)) AND isnotnull(i_category_id#18)) +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Condition : (((isnotnull(i_item_sk#14) AND isnotnull(i_brand_id#15)) AND isnotnull(i_class_id#16)) AND isnotnull(i_category_id#17)) (18) Exchange -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Arguments: hashpartitioning(coalesce(i_brand_id#16, 0), isnull(i_brand_id#16), coalesce(i_class_id#17, 0), isnull(i_class_id#17), coalesce(i_category_id#18, 0), isnull(i_category_id#18), 5), ENSURE_REQUIREMENTS, [id=#19] +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Arguments: hashpartitioning(coalesce(i_brand_id#15, 0), isnull(i_brand_id#15), coalesce(i_class_id#16, 0), isnull(i_class_id#16), coalesce(i_category_id#17, 0), isnull(i_category_id#17), 5), ENSURE_REQUIREMENTS, [plan_id=2] (19) Sort [codegen id : 5] -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Arguments: [coalesce(i_brand_id#16, 0) ASC NULLS FIRST, isnull(i_brand_id#16) ASC NULLS FIRST, coalesce(i_class_id#17, 0) ASC NULLS FIRST, isnull(i_class_id#17) ASC NULLS FIRST, coalesce(i_category_id#18, 0) ASC NULLS FIRST, isnull(i_category_id#18) ASC NULLS FIRST], false, 0 +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Arguments: [coalesce(i_brand_id#15, 0) ASC NULLS FIRST, isnull(i_brand_id#15) ASC NULLS FIRST, coalesce(i_class_id#16, 0) ASC NULLS FIRST, isnull(i_class_id#16) ASC NULLS FIRST, coalesce(i_category_id#17, 0) ASC NULLS FIRST, isnull(i_category_id#17) ASC NULLS FIRST], false, 0 (20) Scan parquet default.catalog_sales -Output [2]: [cs_item_sk#20, cs_sold_date_sk#21] +Output [2]: [cs_item_sk#18, cs_sold_date_sk#19] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#21), dynamicpruningexpression(cs_sold_date_sk#21 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(cs_sold_date_sk#19), dynamicpruningexpression(cs_sold_date_sk#19 IN dynamicpruning#12)] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 8] -Input [2]: [cs_item_sk#20, cs_sold_date_sk#21] +Input [2]: [cs_item_sk#18, cs_sold_date_sk#19] (22) Filter [codegen id : 8] -Input [2]: [cs_item_sk#20, cs_sold_date_sk#21] -Condition : isnotnull(cs_item_sk#20) +Input [2]: [cs_item_sk#18, cs_sold_date_sk#19] +Condition : isnotnull(cs_item_sk#18) (23) ReusedExchange [Reuses operator id: 177] -Output [1]: [d_date_sk#22] +Output [1]: [d_date_sk#20] (24) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_sold_date_sk#21] -Right keys [1]: [d_date_sk#22] +Left keys [1]: [cs_sold_date_sk#19] +Right keys [1]: [d_date_sk#20] Join condition: None (25) Project [codegen id : 8] -Output [1]: [cs_item_sk#20] -Input [3]: [cs_item_sk#20, cs_sold_date_sk#21, d_date_sk#22] +Output [1]: [cs_item_sk#18] +Input [3]: [cs_item_sk#18, cs_sold_date_sk#19, d_date_sk#20] (26) Scan parquet default.item -Output [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] +Output [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 7] -Input [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] +Input [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] (28) Filter [codegen id : 7] -Input [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] -Condition : isnotnull(i_item_sk#23) +Input [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] +Condition : isnotnull(i_item_sk#21) (29) BroadcastExchange -Input [4]: [i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#27] +Input [4]: [i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (30) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [cs_item_sk#20] -Right keys [1]: [i_item_sk#23] +Left keys [1]: [cs_item_sk#18] +Right keys [1]: [i_item_sk#21] Join condition: None (31) Project [codegen id : 8] -Output [3]: [i_brand_id#24, i_class_id#25, i_category_id#26] -Input [5]: [cs_item_sk#20, i_item_sk#23, i_brand_id#24, i_class_id#25, i_category_id#26] +Output [3]: [i_brand_id#22, i_class_id#23, i_category_id#24] +Input [5]: [cs_item_sk#18, i_item_sk#21, i_brand_id#22, i_class_id#23, i_category_id#24] (32) Exchange -Input [3]: [i_brand_id#24, i_class_id#25, i_category_id#26] -Arguments: hashpartitioning(coalesce(i_brand_id#24, 0), isnull(i_brand_id#24), coalesce(i_class_id#25, 0), isnull(i_class_id#25), coalesce(i_category_id#26, 0), isnull(i_category_id#26), 5), ENSURE_REQUIREMENTS, [id=#28] +Input [3]: [i_brand_id#22, i_class_id#23, i_category_id#24] +Arguments: hashpartitioning(coalesce(i_brand_id#22, 0), isnull(i_brand_id#22), coalesce(i_class_id#23, 0), isnull(i_class_id#23), coalesce(i_category_id#24, 0), isnull(i_category_id#24), 5), ENSURE_REQUIREMENTS, [plan_id=4] (33) Sort [codegen id : 9] -Input [3]: [i_brand_id#24, i_class_id#25, i_category_id#26] -Arguments: [coalesce(i_brand_id#24, 0) ASC NULLS FIRST, isnull(i_brand_id#24) ASC NULLS FIRST, coalesce(i_class_id#25, 0) ASC NULLS FIRST, isnull(i_class_id#25) ASC NULLS FIRST, coalesce(i_category_id#26, 0) ASC NULLS FIRST, isnull(i_category_id#26) ASC NULLS FIRST], false, 0 +Input [3]: [i_brand_id#22, i_class_id#23, i_category_id#24] +Arguments: [coalesce(i_brand_id#22, 0) ASC NULLS FIRST, isnull(i_brand_id#22) ASC NULLS FIRST, coalesce(i_class_id#23, 0) ASC NULLS FIRST, isnull(i_class_id#23) ASC NULLS FIRST, coalesce(i_category_id#24, 0) ASC NULLS FIRST, isnull(i_category_id#24) ASC NULLS FIRST], false, 0 (34) SortMergeJoin [codegen id : 10] -Left keys [6]: [coalesce(i_brand_id#16, 0), isnull(i_brand_id#16), coalesce(i_class_id#17, 0), isnull(i_class_id#17), coalesce(i_category_id#18, 0), isnull(i_category_id#18)] -Right keys [6]: [coalesce(i_brand_id#24, 0), isnull(i_brand_id#24), coalesce(i_class_id#25, 0), isnull(i_class_id#25), coalesce(i_category_id#26, 0), isnull(i_category_id#26)] +Left keys [6]: [coalesce(i_brand_id#15, 0), isnull(i_brand_id#15), coalesce(i_class_id#16, 0), isnull(i_class_id#16), coalesce(i_category_id#17, 0), isnull(i_category_id#17)] +Right keys [6]: [coalesce(i_brand_id#22, 0), isnull(i_brand_id#22), coalesce(i_class_id#23, 0), isnull(i_class_id#23), coalesce(i_category_id#24, 0), isnull(i_category_id#24)] Join condition: None (35) BroadcastExchange -Input [4]: [i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#29] +Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (36) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [ss_item_sk#11] -Right keys [1]: [i_item_sk#15] +Left keys [1]: [ss_item_sk#10] +Right keys [1]: [i_item_sk#14] Join condition: None (37) Project [codegen id : 11] -Output [3]: [i_brand_id#16 AS brand_id#30, i_class_id#17 AS class_id#31, i_category_id#18 AS category_id#32] -Input [5]: [ss_item_sk#11, i_item_sk#15, i_brand_id#16, i_class_id#17, i_category_id#18] +Output [3]: [i_brand_id#15 AS brand_id#25, i_class_id#16 AS class_id#26, i_category_id#17 AS category_id#27] +Input [5]: [ss_item_sk#10, i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17] (38) HashAggregate [codegen id : 11] -Input [3]: [brand_id#30, class_id#31, category_id#32] -Keys [3]: [brand_id#30, class_id#31, category_id#32] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#30, class_id#31, category_id#32] +Results [3]: [brand_id#25, class_id#26, category_id#27] (39) Exchange -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: hashpartitioning(brand_id#30, class_id#31, category_id#32, 5), ENSURE_REQUIREMENTS, [id=#33] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: hashpartitioning(brand_id#25, class_id#26, category_id#27, 5), ENSURE_REQUIREMENTS, [plan_id=6] (40) HashAggregate [codegen id : 12] -Input [3]: [brand_id#30, class_id#31, category_id#32] -Keys [3]: [brand_id#30, class_id#31, category_id#32] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#30, class_id#31, category_id#32] +Results [3]: [brand_id#25, class_id#26, category_id#27] (41) Exchange -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: hashpartitioning(coalesce(brand_id#30, 0), isnull(brand_id#30), coalesce(class_id#31, 0), isnull(class_id#31), coalesce(category_id#32, 0), isnull(category_id#32), 5), ENSURE_REQUIREMENTS, [id=#34] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: hashpartitioning(coalesce(brand_id#25, 0), isnull(brand_id#25), coalesce(class_id#26, 0), isnull(class_id#26), coalesce(category_id#27, 0), isnull(category_id#27), 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) Sort [codegen id : 13] -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: [coalesce(brand_id#30, 0) ASC NULLS FIRST, isnull(brand_id#30) ASC NULLS FIRST, coalesce(class_id#31, 0) ASC NULLS FIRST, isnull(class_id#31) ASC NULLS FIRST, coalesce(category_id#32, 0) ASC NULLS FIRST, isnull(category_id#32) ASC NULLS FIRST], false, 0 +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: [coalesce(brand_id#25, 0) ASC NULLS FIRST, isnull(brand_id#25) ASC NULLS FIRST, coalesce(class_id#26, 0) ASC NULLS FIRST, isnull(class_id#26) ASC NULLS FIRST, coalesce(category_id#27, 0) ASC NULLS FIRST, isnull(category_id#27) ASC NULLS FIRST], false, 0 (43) Scan parquet default.web_sales -Output [2]: [ws_item_sk#35, ws_sold_date_sk#36] +Output [2]: [ws_item_sk#28, ws_sold_date_sk#29] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#36), dynamicpruningexpression(ws_sold_date_sk#36 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ws_sold_date_sk#29), dynamicpruningexpression(ws_sold_date_sk#29 IN dynamicpruning#12)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 16] -Input [2]: [ws_item_sk#35, ws_sold_date_sk#36] +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] (45) Filter [codegen id : 16] -Input [2]: [ws_item_sk#35, ws_sold_date_sk#36] -Condition : isnotnull(ws_item_sk#35) +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] +Condition : isnotnull(ws_item_sk#28) (46) ReusedExchange [Reuses operator id: 177] -Output [1]: [d_date_sk#37] +Output [1]: [d_date_sk#30] (47) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [ws_sold_date_sk#36] -Right keys [1]: [d_date_sk#37] +Left keys [1]: [ws_sold_date_sk#29] +Right keys [1]: [d_date_sk#30] Join condition: None (48) Project [codegen id : 16] -Output [1]: [ws_item_sk#35] -Input [3]: [ws_item_sk#35, ws_sold_date_sk#36, d_date_sk#37] +Output [1]: [ws_item_sk#28] +Input [3]: [ws_item_sk#28, ws_sold_date_sk#29, d_date_sk#30] (49) ReusedExchange [Reuses operator id: 29] -Output [4]: [i_item_sk#38, i_brand_id#39, i_class_id#40, i_category_id#41] +Output [4]: [i_item_sk#31, i_brand_id#32, i_class_id#33, i_category_id#34] (50) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [ws_item_sk#35] -Right keys [1]: [i_item_sk#38] +Left keys [1]: [ws_item_sk#28] +Right keys [1]: [i_item_sk#31] Join condition: None (51) Project [codegen id : 16] -Output [3]: [i_brand_id#39, i_class_id#40, i_category_id#41] -Input [5]: [ws_item_sk#35, i_item_sk#38, i_brand_id#39, i_class_id#40, i_category_id#41] +Output [3]: [i_brand_id#32, i_class_id#33, i_category_id#34] +Input [5]: [ws_item_sk#28, i_item_sk#31, i_brand_id#32, i_class_id#33, i_category_id#34] (52) Exchange -Input [3]: [i_brand_id#39, i_class_id#40, i_category_id#41] -Arguments: hashpartitioning(coalesce(i_brand_id#39, 0), isnull(i_brand_id#39), coalesce(i_class_id#40, 0), isnull(i_class_id#40), coalesce(i_category_id#41, 0), isnull(i_category_id#41), 5), ENSURE_REQUIREMENTS, [id=#42] +Input [3]: [i_brand_id#32, i_class_id#33, i_category_id#34] +Arguments: hashpartitioning(coalesce(i_brand_id#32, 0), isnull(i_brand_id#32), coalesce(i_class_id#33, 0), isnull(i_class_id#33), coalesce(i_category_id#34, 0), isnull(i_category_id#34), 5), ENSURE_REQUIREMENTS, [plan_id=8] (53) Sort [codegen id : 17] -Input [3]: [i_brand_id#39, i_class_id#40, i_category_id#41] -Arguments: [coalesce(i_brand_id#39, 0) ASC NULLS FIRST, isnull(i_brand_id#39) ASC NULLS FIRST, coalesce(i_class_id#40, 0) ASC NULLS FIRST, isnull(i_class_id#40) ASC NULLS FIRST, coalesce(i_category_id#41, 0) ASC NULLS FIRST, isnull(i_category_id#41) ASC NULLS FIRST], false, 0 +Input [3]: [i_brand_id#32, i_class_id#33, i_category_id#34] +Arguments: [coalesce(i_brand_id#32, 0) ASC NULLS FIRST, isnull(i_brand_id#32) ASC NULLS FIRST, coalesce(i_class_id#33, 0) ASC NULLS FIRST, isnull(i_class_id#33) ASC NULLS FIRST, coalesce(i_category_id#34, 0) ASC NULLS FIRST, isnull(i_category_id#34) ASC NULLS FIRST], false, 0 (54) SortMergeJoin [codegen id : 18] -Left keys [6]: [coalesce(brand_id#30, 0), isnull(brand_id#30), coalesce(class_id#31, 0), isnull(class_id#31), coalesce(category_id#32, 0), isnull(category_id#32)] -Right keys [6]: [coalesce(i_brand_id#39, 0), isnull(i_brand_id#39), coalesce(i_class_id#40, 0), isnull(i_class_id#40), coalesce(i_category_id#41, 0), isnull(i_category_id#41)] +Left keys [6]: [coalesce(brand_id#25, 0), isnull(brand_id#25), coalesce(class_id#26, 0), isnull(class_id#26), coalesce(category_id#27, 0), isnull(category_id#27)] +Right keys [6]: [coalesce(i_brand_id#32, 0), isnull(i_brand_id#32), coalesce(i_class_id#33, 0), isnull(i_class_id#33), coalesce(i_category_id#34, 0), isnull(i_category_id#34)] Join condition: None (55) BroadcastExchange -Input [3]: [brand_id#30, class_id#31, category_id#32] -Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [id=#43] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [plan_id=9] (56) BroadcastHashJoin [codegen id : 19] -Left keys [3]: [i_brand_id#8, i_class_id#9, i_category_id#10] -Right keys [3]: [brand_id#30, class_id#31, category_id#32] +Left keys [3]: [i_brand_id#7, i_class_id#8, i_category_id#9] +Right keys [3]: [brand_id#25, class_id#26, category_id#27] Join condition: None (57) Project [codegen id : 19] -Output [1]: [i_item_sk#7 AS ss_item_sk#44] -Input [7]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, brand_id#30, class_id#31, category_id#32] +Output [1]: [i_item_sk#6 AS ss_item_sk#35] +Input [7]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9, brand_id#25, class_id#26, category_id#27] (58) Exchange -Input [1]: [ss_item_sk#44] -Arguments: hashpartitioning(ss_item_sk#44, 5), ENSURE_REQUIREMENTS, [id=#45] +Input [1]: [ss_item_sk#35] +Arguments: hashpartitioning(ss_item_sk#35, 5), ENSURE_REQUIREMENTS, [plan_id=10] (59) Sort [codegen id : 20] -Input [1]: [ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#35] +Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0 (60) SortMergeJoin [codegen id : 43] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [ss_item_sk#44] +Right keys [1]: [ss_item_sk#35] Join condition: None (61) ReusedExchange [Reuses operator id: 172] -Output [1]: [d_date_sk#46] +Output [1]: [d_date_sk#36] (62) BroadcastHashJoin [codegen id : 43] Left keys [1]: [ss_sold_date_sk#4] -Right keys [1]: [d_date_sk#46] +Right keys [1]: [d_date_sk#36] Join condition: None (63) Project [codegen id : 43] Output [3]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3] -Input [5]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, d_date_sk#46] +Input [5]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, d_date_sk#36] (64) Scan parquet default.item -Output [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] +Output [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (65) ColumnarToRow [codegen id : 22] -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] (66) Filter [codegen id : 22] -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Condition : isnotnull(i_item_sk#47) +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Condition : isnotnull(i_item_sk#37) (67) Exchange -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Arguments: hashpartitioning(i_item_sk#47, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Arguments: hashpartitioning(i_item_sk#37, 5), ENSURE_REQUIREMENTS, [plan_id=11] (68) Sort [codegen id : 23] -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Arguments: [i_item_sk#47 ASC NULLS FIRST], false, 0 +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Arguments: [i_item_sk#37 ASC NULLS FIRST], false, 0 (69) ReusedExchange [Reuses operator id: 58] -Output [1]: [ss_item_sk#44] +Output [1]: [ss_item_sk#35] (70) Sort [codegen id : 41] -Input [1]: [ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#35] +Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0 (71) SortMergeJoin [codegen id : 42] -Left keys [1]: [i_item_sk#47] -Right keys [1]: [ss_item_sk#44] +Left keys [1]: [i_item_sk#37] +Right keys [1]: [ss_item_sk#35] Join condition: None (72) BroadcastExchange -Input [4]: [i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#52] +Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=12] (73) BroadcastHashJoin [codegen id : 43] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#47] +Right keys [1]: [i_item_sk#37] Join condition: None (74) Project [codegen id : 43] -Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#48, i_class_id#49, i_category_id#50] -Input [7]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, i_item_sk#47, i_brand_id#48, i_class_id#49, i_category_id#50] +Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#38, i_class_id#39, i_category_id#40] +Input [7]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40] (75) HashAggregate [codegen id : 43] -Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#48, i_class_id#49, i_category_id#50] -Keys [3]: [i_brand_id#48, i_class_id#49, i_category_id#50] +Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#38, i_class_id#39, i_category_id#40] +Keys [3]: [i_brand_id#38, i_class_id#39, i_category_id#40] Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#53, isEmpty#54, count#55] -Results [6]: [i_brand_id#48, i_class_id#49, i_category_id#50, sum#56, isEmpty#57, count#58] +Aggregate Attributes [3]: [sum#41, isEmpty#42, count#43] +Results [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#44, isEmpty#45, count#46] (76) Exchange -Input [6]: [i_brand_id#48, i_class_id#49, i_category_id#50, sum#56, isEmpty#57, count#58] -Arguments: hashpartitioning(i_brand_id#48, i_class_id#49, i_category_id#50, 5), ENSURE_REQUIREMENTS, [id=#59] +Input [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#44, isEmpty#45, count#46] +Arguments: hashpartitioning(i_brand_id#38, i_class_id#39, i_category_id#40, 5), ENSURE_REQUIREMENTS, [plan_id=13] (77) HashAggregate [codegen id : 44] -Input [6]: [i_brand_id#48, i_class_id#49, i_category_id#50, sum#56, isEmpty#57, count#58] -Keys [3]: [i_brand_id#48, i_class_id#49, i_category_id#50] +Input [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#44, isEmpty#45, count#46] +Keys [3]: [i_brand_id#38, i_class_id#39, i_category_id#40] Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#60, count(1)#61] -Results [6]: [store AS channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#60 AS sales#63, count(1)#61 AS number_sales#64] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47, count(1)#48] +Results [6]: [store AS channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47 AS sales#50, count(1)#48 AS number_sales#51] (78) Filter [codegen id : 44] -Input [6]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sales#63, number_sales#64] -Condition : (isnotnull(sales#63) AND (cast(sales#63 as decimal(32,6)) > cast(Subquery scalar-subquery#65, [id=#66] as decimal(32,6)))) +Input [6]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sales#50, number_sales#51] +Condition : (isnotnull(sales#50) AND (cast(sales#50 as decimal(32,6)) > cast(Subquery scalar-subquery#52, [id=#53] as decimal(32,6)))) (79) Scan parquet default.catalog_sales -Output [4]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69, cs_sold_date_sk#70] +Output [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#70), dynamicpruningexpression(cs_sold_date_sk#70 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#57), dynamicpruningexpression(cs_sold_date_sk#57 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (80) ColumnarToRow [codegen id : 45] -Input [4]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69, cs_sold_date_sk#70] +Input [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] (81) Filter [codegen id : 45] -Input [4]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69, cs_sold_date_sk#70] -Condition : isnotnull(cs_item_sk#67) +Input [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] +Condition : isnotnull(cs_item_sk#54) (82) Exchange -Input [4]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69, cs_sold_date_sk#70] -Arguments: hashpartitioning(cs_item_sk#67, 5), ENSURE_REQUIREMENTS, [id=#71] +Input [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] +Arguments: hashpartitioning(cs_item_sk#54, 5), ENSURE_REQUIREMENTS, [plan_id=14] (83) Sort [codegen id : 46] -Input [4]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69, cs_sold_date_sk#70] -Arguments: [cs_item_sk#67 ASC NULLS FIRST], false, 0 +Input [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] +Arguments: [cs_item_sk#54 ASC NULLS FIRST], false, 0 (84) ReusedExchange [Reuses operator id: 58] -Output [1]: [ss_item_sk#44] +Output [1]: [ss_item_sk#35] (85) Sort [codegen id : 64] -Input [1]: [ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#35] +Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0 (86) SortMergeJoin [codegen id : 87] -Left keys [1]: [cs_item_sk#67] -Right keys [1]: [ss_item_sk#44] +Left keys [1]: [cs_item_sk#54] +Right keys [1]: [ss_item_sk#35] Join condition: None (87) ReusedExchange [Reuses operator id: 172] -Output [1]: [d_date_sk#72] +Output [1]: [d_date_sk#58] (88) BroadcastHashJoin [codegen id : 87] -Left keys [1]: [cs_sold_date_sk#70] -Right keys [1]: [d_date_sk#72] +Left keys [1]: [cs_sold_date_sk#57] +Right keys [1]: [d_date_sk#58] Join condition: None (89) Project [codegen id : 87] -Output [3]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69] -Input [5]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69, cs_sold_date_sk#70, d_date_sk#72] +Output [3]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56] +Input [5]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57, d_date_sk#58] (90) ReusedExchange [Reuses operator id: 72] -Output [4]: [i_item_sk#73, i_brand_id#74, i_class_id#75, i_category_id#76] +Output [4]: [i_item_sk#59, i_brand_id#60, i_class_id#61, i_category_id#62] (91) BroadcastHashJoin [codegen id : 87] -Left keys [1]: [cs_item_sk#67] -Right keys [1]: [i_item_sk#73] +Left keys [1]: [cs_item_sk#54] +Right keys [1]: [i_item_sk#59] Join condition: None (92) Project [codegen id : 87] -Output [5]: [cs_quantity#68, cs_list_price#69, i_brand_id#74, i_class_id#75, i_category_id#76] -Input [7]: [cs_item_sk#67, cs_quantity#68, cs_list_price#69, i_item_sk#73, i_brand_id#74, i_class_id#75, i_category_id#76] +Output [5]: [cs_quantity#55, cs_list_price#56, i_brand_id#60, i_class_id#61, i_category_id#62] +Input [7]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, i_item_sk#59, i_brand_id#60, i_class_id#61, i_category_id#62] (93) HashAggregate [codegen id : 87] -Input [5]: [cs_quantity#68, cs_list_price#69, i_brand_id#74, i_class_id#75, i_category_id#76] -Keys [3]: [i_brand_id#74, i_class_id#75, i_category_id#76] -Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(cs_quantity#68 as decimal(12,2))) * promote_precision(cast(cs_list_price#69 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#77, isEmpty#78, count#79] -Results [6]: [i_brand_id#74, i_class_id#75, i_category_id#76, sum#80, isEmpty#81, count#82] +Input [5]: [cs_quantity#55, cs_list_price#56, i_brand_id#60, i_class_id#61, i_category_id#62] +Keys [3]: [i_brand_id#60, i_class_id#61, i_category_id#62] +Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] +Aggregate Attributes [3]: [sum#63, isEmpty#64, count#65] +Results [6]: [i_brand_id#60, i_class_id#61, i_category_id#62, sum#66, isEmpty#67, count#68] (94) Exchange -Input [6]: [i_brand_id#74, i_class_id#75, i_category_id#76, sum#80, isEmpty#81, count#82] -Arguments: hashpartitioning(i_brand_id#74, i_class_id#75, i_category_id#76, 5), ENSURE_REQUIREMENTS, [id=#83] +Input [6]: [i_brand_id#60, i_class_id#61, i_category_id#62, sum#66, isEmpty#67, count#68] +Arguments: hashpartitioning(i_brand_id#60, i_class_id#61, i_category_id#62, 5), ENSURE_REQUIREMENTS, [plan_id=15] (95) HashAggregate [codegen id : 88] -Input [6]: [i_brand_id#74, i_class_id#75, i_category_id#76, sum#80, isEmpty#81, count#82] -Keys [3]: [i_brand_id#74, i_class_id#75, i_category_id#76] -Functions [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#68 as decimal(12,2))) * promote_precision(cast(cs_list_price#69 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#68 as decimal(12,2))) * promote_precision(cast(cs_list_price#69 as decimal(12,2)))), DecimalType(18,2)))#84, count(1)#85] -Results [6]: [catalog AS channel#86, i_brand_id#74, i_class_id#75, i_category_id#76, sum(CheckOverflow((promote_precision(cast(cs_quantity#68 as decimal(12,2))) * promote_precision(cast(cs_list_price#69 as decimal(12,2)))), DecimalType(18,2)))#84 AS sales#87, count(1)#85 AS number_sales#88] +Input [6]: [i_brand_id#60, i_class_id#61, i_category_id#62, sum#66, isEmpty#67, count#68] +Keys [3]: [i_brand_id#60, i_class_id#61, i_category_id#62] +Functions [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2))), count(1)] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#69, count(1)#70] +Results [6]: [catalog AS channel#71, i_brand_id#60, i_class_id#61, i_category_id#62, sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#69 AS sales#72, count(1)#70 AS number_sales#73] (96) Filter [codegen id : 88] -Input [6]: [channel#86, i_brand_id#74, i_class_id#75, i_category_id#76, sales#87, number_sales#88] -Condition : (isnotnull(sales#87) AND (cast(sales#87 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#65, [id=#66] as decimal(32,6)))) +Input [6]: [channel#71, i_brand_id#60, i_class_id#61, i_category_id#62, sales#72, number_sales#73] +Condition : (isnotnull(sales#72) AND (cast(sales#72 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#52, [id=#53] as decimal(32,6)))) (97) Scan parquet default.web_sales -Output [4]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91, ws_sold_date_sk#92] +Output [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#92), dynamicpruningexpression(ws_sold_date_sk#92 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#77), dynamicpruningexpression(ws_sold_date_sk#77 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (98) ColumnarToRow [codegen id : 89] -Input [4]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91, ws_sold_date_sk#92] +Input [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] (99) Filter [codegen id : 89] -Input [4]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91, ws_sold_date_sk#92] -Condition : isnotnull(ws_item_sk#89) +Input [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] +Condition : isnotnull(ws_item_sk#74) (100) Exchange -Input [4]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91, ws_sold_date_sk#92] -Arguments: hashpartitioning(ws_item_sk#89, 5), ENSURE_REQUIREMENTS, [id=#93] +Input [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] +Arguments: hashpartitioning(ws_item_sk#74, 5), ENSURE_REQUIREMENTS, [plan_id=16] (101) Sort [codegen id : 90] -Input [4]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91, ws_sold_date_sk#92] -Arguments: [ws_item_sk#89 ASC NULLS FIRST], false, 0 +Input [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] +Arguments: [ws_item_sk#74 ASC NULLS FIRST], false, 0 (102) ReusedExchange [Reuses operator id: 58] -Output [1]: [ss_item_sk#44] +Output [1]: [ss_item_sk#35] (103) Sort [codegen id : 108] -Input [1]: [ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST], false, 0 +Input [1]: [ss_item_sk#35] +Arguments: [ss_item_sk#35 ASC NULLS FIRST], false, 0 (104) SortMergeJoin [codegen id : 131] -Left keys [1]: [ws_item_sk#89] -Right keys [1]: [ss_item_sk#44] +Left keys [1]: [ws_item_sk#74] +Right keys [1]: [ss_item_sk#35] Join condition: None (105) ReusedExchange [Reuses operator id: 172] -Output [1]: [d_date_sk#94] +Output [1]: [d_date_sk#78] (106) BroadcastHashJoin [codegen id : 131] -Left keys [1]: [ws_sold_date_sk#92] -Right keys [1]: [d_date_sk#94] +Left keys [1]: [ws_sold_date_sk#77] +Right keys [1]: [d_date_sk#78] Join condition: None (107) Project [codegen id : 131] -Output [3]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91] -Input [5]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91, ws_sold_date_sk#92, d_date_sk#94] +Output [3]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76] +Input [5]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77, d_date_sk#78] (108) ReusedExchange [Reuses operator id: 72] -Output [4]: [i_item_sk#95, i_brand_id#96, i_class_id#97, i_category_id#98] +Output [4]: [i_item_sk#79, i_brand_id#80, i_class_id#81, i_category_id#82] (109) BroadcastHashJoin [codegen id : 131] -Left keys [1]: [ws_item_sk#89] -Right keys [1]: [i_item_sk#95] +Left keys [1]: [ws_item_sk#74] +Right keys [1]: [i_item_sk#79] Join condition: None (110) Project [codegen id : 131] -Output [5]: [ws_quantity#90, ws_list_price#91, i_brand_id#96, i_class_id#97, i_category_id#98] -Input [7]: [ws_item_sk#89, ws_quantity#90, ws_list_price#91, i_item_sk#95, i_brand_id#96, i_class_id#97, i_category_id#98] +Output [5]: [ws_quantity#75, ws_list_price#76, i_brand_id#80, i_class_id#81, i_category_id#82] +Input [7]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, i_item_sk#79, i_brand_id#80, i_class_id#81, i_category_id#82] (111) HashAggregate [codegen id : 131] -Input [5]: [ws_quantity#90, ws_list_price#91, i_brand_id#96, i_class_id#97, i_category_id#98] -Keys [3]: [i_brand_id#96, i_class_id#97, i_category_id#98] -Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ws_quantity#90 as decimal(12,2))) * promote_precision(cast(ws_list_price#91 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#99, isEmpty#100, count#101] -Results [6]: [i_brand_id#96, i_class_id#97, i_category_id#98, sum#102, isEmpty#103, count#104] +Input [5]: [ws_quantity#75, ws_list_price#76, i_brand_id#80, i_class_id#81, i_category_id#82] +Keys [3]: [i_brand_id#80, i_class_id#81, i_category_id#82] +Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] +Aggregate Attributes [3]: [sum#83, isEmpty#84, count#85] +Results [6]: [i_brand_id#80, i_class_id#81, i_category_id#82, sum#86, isEmpty#87, count#88] (112) Exchange -Input [6]: [i_brand_id#96, i_class_id#97, i_category_id#98, sum#102, isEmpty#103, count#104] -Arguments: hashpartitioning(i_brand_id#96, i_class_id#97, i_category_id#98, 5), ENSURE_REQUIREMENTS, [id=#105] +Input [6]: [i_brand_id#80, i_class_id#81, i_category_id#82, sum#86, isEmpty#87, count#88] +Arguments: hashpartitioning(i_brand_id#80, i_class_id#81, i_category_id#82, 5), ENSURE_REQUIREMENTS, [plan_id=17] (113) HashAggregate [codegen id : 132] -Input [6]: [i_brand_id#96, i_class_id#97, i_category_id#98, sum#102, isEmpty#103, count#104] -Keys [3]: [i_brand_id#96, i_class_id#97, i_category_id#98] -Functions [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#90 as decimal(12,2))) * promote_precision(cast(ws_list_price#91 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#90 as decimal(12,2))) * promote_precision(cast(ws_list_price#91 as decimal(12,2)))), DecimalType(18,2)))#106, count(1)#107] -Results [6]: [web AS channel#108, i_brand_id#96, i_class_id#97, i_category_id#98, sum(CheckOverflow((promote_precision(cast(ws_quantity#90 as decimal(12,2))) * promote_precision(cast(ws_list_price#91 as decimal(12,2)))), DecimalType(18,2)))#106 AS sales#109, count(1)#107 AS number_sales#110] +Input [6]: [i_brand_id#80, i_class_id#81, i_category_id#82, sum#86, isEmpty#87, count#88] +Keys [3]: [i_brand_id#80, i_class_id#81, i_category_id#82] +Functions [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2))), count(1)] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2)))#89, count(1)#90] +Results [6]: [web AS channel#91, i_brand_id#80, i_class_id#81, i_category_id#82, sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2)))#89 AS sales#92, count(1)#90 AS number_sales#93] (114) Filter [codegen id : 132] -Input [6]: [channel#108, i_brand_id#96, i_class_id#97, i_category_id#98, sales#109, number_sales#110] -Condition : (isnotnull(sales#109) AND (cast(sales#109 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#65, [id=#66] as decimal(32,6)))) +Input [6]: [channel#91, i_brand_id#80, i_class_id#81, i_category_id#82, sales#92, number_sales#93] +Condition : (isnotnull(sales#92) AND (cast(sales#92 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#52, [id=#53] as decimal(32,6)))) (115) Union (116) HashAggregate [codegen id : 133] -Input [6]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sales#63, number_sales#64] -Keys [4]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50] -Functions [2]: [partial_sum(sales#63), partial_sum(number_sales#64)] -Aggregate Attributes [3]: [sum#111, isEmpty#112, sum#113] -Results [7]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum#114, isEmpty#115, sum#116] +Input [6]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sales#50, number_sales#51] +Keys [4]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40] +Functions [2]: [partial_sum(sales#50), partial_sum(number_sales#51)] +Aggregate Attributes [3]: [sum#94, isEmpty#95, sum#96] +Results [7]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#97, isEmpty#98, sum#99] (117) Exchange -Input [7]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum#114, isEmpty#115, sum#116] -Arguments: hashpartitioning(channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, 5), ENSURE_REQUIREMENTS, [id=#117] +Input [7]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#97, isEmpty#98, sum#99] +Arguments: hashpartitioning(channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, 5), ENSURE_REQUIREMENTS, [plan_id=18] (118) HashAggregate [codegen id : 134] -Input [7]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum#114, isEmpty#115, sum#116] -Keys [4]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50] -Functions [2]: [sum(sales#63), sum(number_sales#64)] -Aggregate Attributes [2]: [sum(sales#63)#118, sum(number_sales#64)#119] -Results [6]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum(sales#63)#118 AS sum_sales#120, sum(number_sales#64)#119 AS number_sales#121] +Input [7]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#97, isEmpty#98, sum#99] +Keys [4]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40] +Functions [2]: [sum(sales#50), sum(number_sales#51)] +Aggregate Attributes [2]: [sum(sales#50)#100, sum(number_sales#51)#101] +Results [6]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum(sales#50)#100 AS sum_sales#102, sum(number_sales#51)#101 AS number_sales#103] (119) ReusedExchange [Reuses operator id: 117] -Output [7]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum#114, isEmpty#115, sum#116] +Output [7]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#97, isEmpty#98, sum#99] (120) HashAggregate [codegen id : 268] -Input [7]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum#114, isEmpty#115, sum#116] -Keys [4]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50] -Functions [2]: [sum(sales#63), sum(number_sales#64)] -Aggregate Attributes [2]: [sum(sales#63)#118, sum(number_sales#64)#119] -Results [5]: [channel#62, i_brand_id#48, i_class_id#49, sum(sales#63)#118 AS sum_sales#120, sum(number_sales#64)#119 AS number_sales#121] +Input [7]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#97, isEmpty#98, sum#99] +Keys [4]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40] +Functions [2]: [sum(sales#50), sum(number_sales#51)] +Aggregate Attributes [2]: [sum(sales#50)#100, sum(number_sales#51)#101] +Results [5]: [channel#49, i_brand_id#38, i_class_id#39, sum(sales#50)#100 AS sum_sales#102, sum(number_sales#51)#101 AS number_sales#103] (121) HashAggregate [codegen id : 268] -Input [5]: [channel#62, i_brand_id#48, i_class_id#49, sum_sales#120, number_sales#121] -Keys [3]: [channel#62, i_brand_id#48, i_class_id#49] -Functions [2]: [partial_sum(sum_sales#120), partial_sum(number_sales#121)] -Aggregate Attributes [3]: [sum#122, isEmpty#123, sum#124] -Results [6]: [channel#62, i_brand_id#48, i_class_id#49, sum#125, isEmpty#126, sum#127] +Input [5]: [channel#49, i_brand_id#38, i_class_id#39, sum_sales#102, number_sales#103] +Keys [3]: [channel#49, i_brand_id#38, i_class_id#39] +Functions [2]: [partial_sum(sum_sales#102), partial_sum(number_sales#103)] +Aggregate Attributes [3]: [sum#104, isEmpty#105, sum#106] +Results [6]: [channel#49, i_brand_id#38, i_class_id#39, sum#107, isEmpty#108, sum#109] (122) Exchange -Input [6]: [channel#62, i_brand_id#48, i_class_id#49, sum#125, isEmpty#126, sum#127] -Arguments: hashpartitioning(channel#62, i_brand_id#48, i_class_id#49, 5), ENSURE_REQUIREMENTS, [id=#128] +Input [6]: [channel#49, i_brand_id#38, i_class_id#39, sum#107, isEmpty#108, sum#109] +Arguments: hashpartitioning(channel#49, i_brand_id#38, i_class_id#39, 5), ENSURE_REQUIREMENTS, [plan_id=19] (123) HashAggregate [codegen id : 269] -Input [6]: [channel#62, i_brand_id#48, i_class_id#49, sum#125, isEmpty#126, sum#127] -Keys [3]: [channel#62, i_brand_id#48, i_class_id#49] -Functions [2]: [sum(sum_sales#120), sum(number_sales#121)] -Aggregate Attributes [2]: [sum(sum_sales#120)#129, sum(number_sales#121)#130] -Results [6]: [channel#62, i_brand_id#48, i_class_id#49, null AS i_category_id#131, sum(sum_sales#120)#129 AS sum(sum_sales)#132, sum(number_sales#121)#130 AS sum(number_sales)#133] +Input [6]: [channel#49, i_brand_id#38, i_class_id#39, sum#107, isEmpty#108, sum#109] +Keys [3]: [channel#49, i_brand_id#38, i_class_id#39] +Functions [2]: [sum(sum_sales#102), sum(number_sales#103)] +Aggregate Attributes [2]: [sum(sum_sales#102)#110, sum(number_sales#103)#111] +Results [6]: [channel#49, i_brand_id#38, i_class_id#39, null AS i_category_id#112, sum(sum_sales#102)#110 AS sum(sum_sales)#113, sum(number_sales#103)#111 AS sum(number_sales)#114] (124) ReusedExchange [Reuses operator id: 117] -Output [7]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum#114, isEmpty#115, sum#116] +Output [7]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#97, isEmpty#98, sum#99] (125) HashAggregate [codegen id : 403] -Input [7]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum#114, isEmpty#115, sum#116] -Keys [4]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50] -Functions [2]: [sum(sales#63), sum(number_sales#64)] -Aggregate Attributes [2]: [sum(sales#63)#118, sum(number_sales#64)#119] -Results [4]: [channel#62, i_brand_id#48, sum(sales#63)#118 AS sum_sales#120, sum(number_sales#64)#119 AS number_sales#121] +Input [7]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#97, isEmpty#98, sum#99] +Keys [4]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40] +Functions [2]: [sum(sales#50), sum(number_sales#51)] +Aggregate Attributes [2]: [sum(sales#50)#100, sum(number_sales#51)#101] +Results [4]: [channel#49, i_brand_id#38, sum(sales#50)#100 AS sum_sales#102, sum(number_sales#51)#101 AS number_sales#103] (126) HashAggregate [codegen id : 403] -Input [4]: [channel#62, i_brand_id#48, sum_sales#120, number_sales#121] -Keys [2]: [channel#62, i_brand_id#48] -Functions [2]: [partial_sum(sum_sales#120), partial_sum(number_sales#121)] -Aggregate Attributes [3]: [sum#134, isEmpty#135, sum#136] -Results [5]: [channel#62, i_brand_id#48, sum#137, isEmpty#138, sum#139] +Input [4]: [channel#49, i_brand_id#38, sum_sales#102, number_sales#103] +Keys [2]: [channel#49, i_brand_id#38] +Functions [2]: [partial_sum(sum_sales#102), partial_sum(number_sales#103)] +Aggregate Attributes [3]: [sum#115, isEmpty#116, sum#117] +Results [5]: [channel#49, i_brand_id#38, sum#118, isEmpty#119, sum#120] (127) Exchange -Input [5]: [channel#62, i_brand_id#48, sum#137, isEmpty#138, sum#139] -Arguments: hashpartitioning(channel#62, i_brand_id#48, 5), ENSURE_REQUIREMENTS, [id=#140] +Input [5]: [channel#49, i_brand_id#38, sum#118, isEmpty#119, sum#120] +Arguments: hashpartitioning(channel#49, i_brand_id#38, 5), ENSURE_REQUIREMENTS, [plan_id=20] (128) HashAggregate [codegen id : 404] -Input [5]: [channel#62, i_brand_id#48, sum#137, isEmpty#138, sum#139] -Keys [2]: [channel#62, i_brand_id#48] -Functions [2]: [sum(sum_sales#120), sum(number_sales#121)] -Aggregate Attributes [2]: [sum(sum_sales#120)#141, sum(number_sales#121)#142] -Results [6]: [channel#62, i_brand_id#48, null AS i_class_id#143, null AS i_category_id#144, sum(sum_sales#120)#141 AS sum(sum_sales)#145, sum(number_sales#121)#142 AS sum(number_sales)#146] +Input [5]: [channel#49, i_brand_id#38, sum#118, isEmpty#119, sum#120] +Keys [2]: [channel#49, i_brand_id#38] +Functions [2]: [sum(sum_sales#102), sum(number_sales#103)] +Aggregate Attributes [2]: [sum(sum_sales#102)#121, sum(number_sales#103)#122] +Results [6]: [channel#49, i_brand_id#38, null AS i_class_id#123, null AS i_category_id#124, sum(sum_sales#102)#121 AS sum(sum_sales)#125, sum(number_sales#103)#122 AS sum(number_sales)#126] (129) ReusedExchange [Reuses operator id: 117] -Output [7]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum#114, isEmpty#115, sum#116] +Output [7]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#97, isEmpty#98, sum#99] (130) HashAggregate [codegen id : 538] -Input [7]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum#114, isEmpty#115, sum#116] -Keys [4]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50] -Functions [2]: [sum(sales#63), sum(number_sales#64)] -Aggregate Attributes [2]: [sum(sales#63)#118, sum(number_sales#64)#119] -Results [3]: [channel#62, sum(sales#63)#118 AS sum_sales#120, sum(number_sales#64)#119 AS number_sales#121] +Input [7]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#97, isEmpty#98, sum#99] +Keys [4]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40] +Functions [2]: [sum(sales#50), sum(number_sales#51)] +Aggregate Attributes [2]: [sum(sales#50)#100, sum(number_sales#51)#101] +Results [3]: [channel#49, sum(sales#50)#100 AS sum_sales#102, sum(number_sales#51)#101 AS number_sales#103] (131) HashAggregate [codegen id : 538] -Input [3]: [channel#62, sum_sales#120, number_sales#121] -Keys [1]: [channel#62] -Functions [2]: [partial_sum(sum_sales#120), partial_sum(number_sales#121)] -Aggregate Attributes [3]: [sum#147, isEmpty#148, sum#149] -Results [4]: [channel#62, sum#150, isEmpty#151, sum#152] +Input [3]: [channel#49, sum_sales#102, number_sales#103] +Keys [1]: [channel#49] +Functions [2]: [partial_sum(sum_sales#102), partial_sum(number_sales#103)] +Aggregate Attributes [3]: [sum#127, isEmpty#128, sum#129] +Results [4]: [channel#49, sum#130, isEmpty#131, sum#132] (132) Exchange -Input [4]: [channel#62, sum#150, isEmpty#151, sum#152] -Arguments: hashpartitioning(channel#62, 5), ENSURE_REQUIREMENTS, [id=#153] +Input [4]: [channel#49, sum#130, isEmpty#131, sum#132] +Arguments: hashpartitioning(channel#49, 5), ENSURE_REQUIREMENTS, [plan_id=21] (133) HashAggregate [codegen id : 539] -Input [4]: [channel#62, sum#150, isEmpty#151, sum#152] -Keys [1]: [channel#62] -Functions [2]: [sum(sum_sales#120), sum(number_sales#121)] -Aggregate Attributes [2]: [sum(sum_sales#120)#154, sum(number_sales#121)#155] -Results [6]: [channel#62, null AS i_brand_id#156, null AS i_class_id#157, null AS i_category_id#158, sum(sum_sales#120)#154 AS sum(sum_sales)#159, sum(number_sales#121)#155 AS sum(number_sales)#160] +Input [4]: [channel#49, sum#130, isEmpty#131, sum#132] +Keys [1]: [channel#49] +Functions [2]: [sum(sum_sales#102), sum(number_sales#103)] +Aggregate Attributes [2]: [sum(sum_sales#102)#133, sum(number_sales#103)#134] +Results [6]: [channel#49, null AS i_brand_id#135, null AS i_class_id#136, null AS i_category_id#137, sum(sum_sales#102)#133 AS sum(sum_sales)#138, sum(number_sales#103)#134 AS sum(number_sales)#139] (134) ReusedExchange [Reuses operator id: 117] -Output [7]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum#114, isEmpty#115, sum#116] +Output [7]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#97, isEmpty#98, sum#99] (135) HashAggregate [codegen id : 673] -Input [7]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum#114, isEmpty#115, sum#116] -Keys [4]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50] -Functions [2]: [sum(sales#63), sum(number_sales#64)] -Aggregate Attributes [2]: [sum(sales#63)#118, sum(number_sales#64)#119] -Results [2]: [sum(sales#63)#118 AS sum_sales#120, sum(number_sales#64)#119 AS number_sales#121] +Input [7]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#97, isEmpty#98, sum#99] +Keys [4]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40] +Functions [2]: [sum(sales#50), sum(number_sales#51)] +Aggregate Attributes [2]: [sum(sales#50)#100, sum(number_sales#51)#101] +Results [2]: [sum(sales#50)#100 AS sum_sales#102, sum(number_sales#51)#101 AS number_sales#103] (136) HashAggregate [codegen id : 673] -Input [2]: [sum_sales#120, number_sales#121] +Input [2]: [sum_sales#102, number_sales#103] Keys: [] -Functions [2]: [partial_sum(sum_sales#120), partial_sum(number_sales#121)] -Aggregate Attributes [3]: [sum#161, isEmpty#162, sum#163] -Results [3]: [sum#164, isEmpty#165, sum#166] +Functions [2]: [partial_sum(sum_sales#102), partial_sum(number_sales#103)] +Aggregate Attributes [3]: [sum#140, isEmpty#141, sum#142] +Results [3]: [sum#143, isEmpty#144, sum#145] (137) Exchange -Input [3]: [sum#164, isEmpty#165, sum#166] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#167] +Input [3]: [sum#143, isEmpty#144, sum#145] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=22] (138) HashAggregate [codegen id : 674] -Input [3]: [sum#164, isEmpty#165, sum#166] +Input [3]: [sum#143, isEmpty#144, sum#145] Keys: [] -Functions [2]: [sum(sum_sales#120), sum(number_sales#121)] -Aggregate Attributes [2]: [sum(sum_sales#120)#168, sum(number_sales#121)#169] -Results [6]: [null AS channel#170, null AS i_brand_id#171, null AS i_class_id#172, null AS i_category_id#173, sum(sum_sales#120)#168 AS sum(sum_sales)#174, sum(number_sales#121)#169 AS sum(number_sales)#175] +Functions [2]: [sum(sum_sales#102), sum(number_sales#103)] +Aggregate Attributes [2]: [sum(sum_sales#102)#146, sum(number_sales#103)#147] +Results [6]: [null AS channel#148, null AS i_brand_id#149, null AS i_class_id#150, null AS i_category_id#151, sum(sum_sales#102)#146 AS sum(sum_sales)#152, sum(number_sales#103)#147 AS sum(number_sales)#153] (139) Union (140) HashAggregate [codegen id : 675] -Input [6]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum_sales#120, number_sales#121] -Keys [6]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum_sales#120, number_sales#121] +Input [6]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum_sales#102, number_sales#103] +Keys [6]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum_sales#102, number_sales#103] Functions: [] Aggregate Attributes: [] -Results [6]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum_sales#120, number_sales#121] +Results [6]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum_sales#102, number_sales#103] (141) Exchange -Input [6]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum_sales#120, number_sales#121] -Arguments: hashpartitioning(channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum_sales#120, number_sales#121, 5), ENSURE_REQUIREMENTS, [id=#176] +Input [6]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum_sales#102, number_sales#103] +Arguments: hashpartitioning(channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum_sales#102, number_sales#103, 5), ENSURE_REQUIREMENTS, [plan_id=23] (142) HashAggregate [codegen id : 676] -Input [6]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum_sales#120, number_sales#121] -Keys [6]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum_sales#120, number_sales#121] +Input [6]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum_sales#102, number_sales#103] +Keys [6]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum_sales#102, number_sales#103] Functions: [] Aggregate Attributes: [] -Results [6]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum_sales#120, number_sales#121] +Results [6]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum_sales#102, number_sales#103] (143) TakeOrderedAndProject -Input [6]: [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum_sales#120, number_sales#121] -Arguments: 100, [channel#62 ASC NULLS FIRST, i_brand_id#48 ASC NULLS FIRST, i_class_id#49 ASC NULLS FIRST, i_category_id#50 ASC NULLS FIRST], [channel#62, i_brand_id#48, i_class_id#49, i_category_id#50, sum_sales#120, number_sales#121] +Input [6]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum_sales#102, number_sales#103] +Arguments: 100, [channel#49 ASC NULLS FIRST, i_brand_id#38 ASC NULLS FIRST, i_class_id#39 ASC NULLS FIRST, i_category_id#40 ASC NULLS FIRST], [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum_sales#102, number_sales#103] ===== Subqueries ===== -Subquery:1 Hosting operator id = 78 Hosting Expression = Subquery scalar-subquery#65, [id=#66] +Subquery:1 Hosting operator id = 78 Hosting Expression = Subquery scalar-subquery#52, [id=#53] * HashAggregate (162) +- Exchange (161) +- * HashAggregate (160) @@ -838,94 +838,94 @@ Subquery:1 Hosting operator id = 78 Hosting Expression = Subquery scalar-subquer (144) Scan parquet default.store_sales -Output [3]: [ss_quantity#177, ss_list_price#178, ss_sold_date_sk#179] +Output [3]: [ss_quantity#154, ss_list_price#155, ss_sold_date_sk#156] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#179), dynamicpruningexpression(ss_sold_date_sk#179 IN dynamicpruning#13)] +PartitionFilters: [isnotnull(ss_sold_date_sk#156), dynamicpruningexpression(ss_sold_date_sk#156 IN dynamicpruning#12)] ReadSchema: struct (145) ColumnarToRow [codegen id : 2] -Input [3]: [ss_quantity#177, ss_list_price#178, ss_sold_date_sk#179] +Input [3]: [ss_quantity#154, ss_list_price#155, ss_sold_date_sk#156] (146) ReusedExchange [Reuses operator id: 177] -Output [1]: [d_date_sk#180] +Output [1]: [d_date_sk#157] (147) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [ss_sold_date_sk#179] -Right keys [1]: [d_date_sk#180] +Left keys [1]: [ss_sold_date_sk#156] +Right keys [1]: [d_date_sk#157] Join condition: None (148) Project [codegen id : 2] -Output [2]: [ss_quantity#177 AS quantity#181, ss_list_price#178 AS list_price#182] -Input [4]: [ss_quantity#177, ss_list_price#178, ss_sold_date_sk#179, d_date_sk#180] +Output [2]: [ss_quantity#154 AS quantity#158, ss_list_price#155 AS list_price#159] +Input [4]: [ss_quantity#154, ss_list_price#155, ss_sold_date_sk#156, d_date_sk#157] (149) Scan parquet default.catalog_sales -Output [3]: [cs_quantity#183, cs_list_price#184, cs_sold_date_sk#185] +Output [3]: [cs_quantity#160, cs_list_price#161, cs_sold_date_sk#162] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#185), dynamicpruningexpression(cs_sold_date_sk#185 IN dynamicpruning#186)] +PartitionFilters: [isnotnull(cs_sold_date_sk#162), dynamicpruningexpression(cs_sold_date_sk#162 IN dynamicpruning#163)] ReadSchema: struct (150) ColumnarToRow [codegen id : 4] -Input [3]: [cs_quantity#183, cs_list_price#184, cs_sold_date_sk#185] +Input [3]: [cs_quantity#160, cs_list_price#161, cs_sold_date_sk#162] (151) ReusedExchange [Reuses operator id: 167] -Output [1]: [d_date_sk#187] +Output [1]: [d_date_sk#164] (152) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [cs_sold_date_sk#185] -Right keys [1]: [d_date_sk#187] +Left keys [1]: [cs_sold_date_sk#162] +Right keys [1]: [d_date_sk#164] Join condition: None (153) Project [codegen id : 4] -Output [2]: [cs_quantity#183 AS quantity#188, cs_list_price#184 AS list_price#189] -Input [4]: [cs_quantity#183, cs_list_price#184, cs_sold_date_sk#185, d_date_sk#187] +Output [2]: [cs_quantity#160 AS quantity#165, cs_list_price#161 AS list_price#166] +Input [4]: [cs_quantity#160, cs_list_price#161, cs_sold_date_sk#162, d_date_sk#164] (154) Scan parquet default.web_sales -Output [3]: [ws_quantity#190, ws_list_price#191, ws_sold_date_sk#192] +Output [3]: [ws_quantity#167, ws_list_price#168, ws_sold_date_sk#169] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#192), dynamicpruningexpression(ws_sold_date_sk#192 IN dynamicpruning#186)] +PartitionFilters: [isnotnull(ws_sold_date_sk#169), dynamicpruningexpression(ws_sold_date_sk#169 IN dynamicpruning#163)] ReadSchema: struct (155) ColumnarToRow [codegen id : 6] -Input [3]: [ws_quantity#190, ws_list_price#191, ws_sold_date_sk#192] +Input [3]: [ws_quantity#167, ws_list_price#168, ws_sold_date_sk#169] (156) ReusedExchange [Reuses operator id: 167] -Output [1]: [d_date_sk#193] +Output [1]: [d_date_sk#170] (157) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ws_sold_date_sk#192] -Right keys [1]: [d_date_sk#193] +Left keys [1]: [ws_sold_date_sk#169] +Right keys [1]: [d_date_sk#170] Join condition: None (158) Project [codegen id : 6] -Output [2]: [ws_quantity#190 AS quantity#194, ws_list_price#191 AS list_price#195] -Input [4]: [ws_quantity#190, ws_list_price#191, ws_sold_date_sk#192, d_date_sk#193] +Output [2]: [ws_quantity#167 AS quantity#171, ws_list_price#168 AS list_price#172] +Input [4]: [ws_quantity#167, ws_list_price#168, ws_sold_date_sk#169, d_date_sk#170] (159) Union (160) HashAggregate [codegen id : 7] -Input [2]: [quantity#181, list_price#182] +Input [2]: [quantity#158, list_price#159] Keys: [] -Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#181 as decimal(12,2))) * promote_precision(cast(list_price#182 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#196, count#197] -Results [2]: [sum#198, count#199] +Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#158 as decimal(12,2))) * promote_precision(cast(list_price#159 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#173, count#174] +Results [2]: [sum#175, count#176] (161) Exchange -Input [2]: [sum#198, count#199] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#200] +Input [2]: [sum#175, count#176] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=24] (162) HashAggregate [codegen id : 8] -Input [2]: [sum#198, count#199] +Input [2]: [sum#175, count#176] Keys: [] -Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#181 as decimal(12,2))) * promote_precision(cast(list_price#182 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#181 as decimal(12,2))) * promote_precision(cast(list_price#182 as decimal(12,2)))), DecimalType(18,2)))#201] -Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#181 as decimal(12,2))) * promote_precision(cast(list_price#182 as decimal(12,2)))), DecimalType(18,2)))#201 AS average_sales#202] +Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#158 as decimal(12,2))) * promote_precision(cast(list_price#159 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#158 as decimal(12,2))) * promote_precision(cast(list_price#159 as decimal(12,2)))), DecimalType(18,2)))#177] +Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#158 as decimal(12,2))) * promote_precision(cast(list_price#159 as decimal(12,2)))), DecimalType(18,2)))#177 AS average_sales#178] -Subquery:2 Hosting operator id = 144 Hosting Expression = ss_sold_date_sk#179 IN dynamicpruning#13 +Subquery:2 Hosting operator id = 144 Hosting Expression = ss_sold_date_sk#156 IN dynamicpruning#12 -Subquery:3 Hosting operator id = 149 Hosting Expression = cs_sold_date_sk#185 IN dynamicpruning#186 +Subquery:3 Hosting operator id = 149 Hosting Expression = cs_sold_date_sk#162 IN dynamicpruning#163 BroadcastExchange (167) +- * Project (166) +- * Filter (165) @@ -934,28 +934,28 @@ BroadcastExchange (167) (163) Scan parquet default.date_dim -Output [2]: [d_date_sk#187, d_year#203] +Output [2]: [d_date_sk#164, d_year#179] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1998), LessThanOrEqual(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (164) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#187, d_year#203] +Input [2]: [d_date_sk#164, d_year#179] (165) Filter [codegen id : 1] -Input [2]: [d_date_sk#187, d_year#203] -Condition : (((isnotnull(d_year#203) AND (d_year#203 >= 1998)) AND (d_year#203 <= 2000)) AND isnotnull(d_date_sk#187)) +Input [2]: [d_date_sk#164, d_year#179] +Condition : (((isnotnull(d_year#179) AND (d_year#179 >= 1998)) AND (d_year#179 <= 2000)) AND isnotnull(d_date_sk#164)) (166) Project [codegen id : 1] -Output [1]: [d_date_sk#187] -Input [2]: [d_date_sk#187, d_year#203] +Output [1]: [d_date_sk#164] +Input [2]: [d_date_sk#164, d_year#179] (167) BroadcastExchange -Input [1]: [d_date_sk#187] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#204] +Input [1]: [d_date_sk#164] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=25] -Subquery:4 Hosting operator id = 154 Hosting Expression = ws_sold_date_sk#192 IN dynamicpruning#186 +Subquery:4 Hosting operator id = 154 Hosting Expression = ws_sold_date_sk#169 IN dynamicpruning#163 Subquery:5 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5 BroadcastExchange (172) @@ -966,28 +966,28 @@ BroadcastExchange (172) (168) Scan parquet default.date_dim -Output [3]: [d_date_sk#46, d_year#205, d_moy#206] +Output [3]: [d_date_sk#36, d_year#180, d_moy#181] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2000), EqualTo(d_moy,11), IsNotNull(d_date_sk)] ReadSchema: struct (169) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#46, d_year#205, d_moy#206] +Input [3]: [d_date_sk#36, d_year#180, d_moy#181] (170) Filter [codegen id : 1] -Input [3]: [d_date_sk#46, d_year#205, d_moy#206] -Condition : ((((isnotnull(d_year#205) AND isnotnull(d_moy#206)) AND (d_year#205 = 2000)) AND (d_moy#206 = 11)) AND isnotnull(d_date_sk#46)) +Input [3]: [d_date_sk#36, d_year#180, d_moy#181] +Condition : ((((isnotnull(d_year#180) AND isnotnull(d_moy#181)) AND (d_year#180 = 2000)) AND (d_moy#181 = 11)) AND isnotnull(d_date_sk#36)) (171) Project [codegen id : 1] -Output [1]: [d_date_sk#46] -Input [3]: [d_date_sk#46, d_year#205, d_moy#206] +Output [1]: [d_date_sk#36] +Input [3]: [d_date_sk#36, d_year#180, d_moy#181] (172) BroadcastExchange -Input [1]: [d_date_sk#46] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#207] +Input [1]: [d_date_sk#36] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=26] -Subquery:6 Hosting operator id = 9 Hosting Expression = ss_sold_date_sk#12 IN dynamicpruning#13 +Subquery:6 Hosting operator id = 9 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#12 BroadcastExchange (177) +- * Project (176) +- * Filter (175) @@ -996,37 +996,37 @@ BroadcastExchange (177) (173) Scan parquet default.date_dim -Output [2]: [d_date_sk#14, d_year#208] +Output [2]: [d_date_sk#13, d_year#182] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (174) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#208] +Input [2]: [d_date_sk#13, d_year#182] (175) Filter [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#208] -Condition : (((isnotnull(d_year#208) AND (d_year#208 >= 1999)) AND (d_year#208 <= 2001)) AND isnotnull(d_date_sk#14)) +Input [2]: [d_date_sk#13, d_year#182] +Condition : (((isnotnull(d_year#182) AND (d_year#182 >= 1999)) AND (d_year#182 <= 2001)) AND isnotnull(d_date_sk#13)) (176) Project [codegen id : 1] -Output [1]: [d_date_sk#14] -Input [2]: [d_date_sk#14, d_year#208] +Output [1]: [d_date_sk#13] +Input [2]: [d_date_sk#13, d_year#182] (177) BroadcastExchange -Input [1]: [d_date_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#209] +Input [1]: [d_date_sk#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=27] -Subquery:7 Hosting operator id = 20 Hosting Expression = cs_sold_date_sk#21 IN dynamicpruning#13 +Subquery:7 Hosting operator id = 20 Hosting Expression = cs_sold_date_sk#19 IN dynamicpruning#12 -Subquery:8 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#36 IN dynamicpruning#13 +Subquery:8 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#29 IN dynamicpruning#12 -Subquery:9 Hosting operator id = 96 Hosting Expression = ReusedSubquery Subquery scalar-subquery#65, [id=#66] +Subquery:9 Hosting operator id = 96 Hosting Expression = ReusedSubquery Subquery scalar-subquery#52, [id=#53] -Subquery:10 Hosting operator id = 79 Hosting Expression = cs_sold_date_sk#70 IN dynamicpruning#5 +Subquery:10 Hosting operator id = 79 Hosting Expression = cs_sold_date_sk#57 IN dynamicpruning#5 -Subquery:11 Hosting operator id = 114 Hosting Expression = ReusedSubquery Subquery scalar-subquery#65, [id=#66] +Subquery:11 Hosting operator id = 114 Hosting Expression = ReusedSubquery Subquery scalar-subquery#52, [id=#53] -Subquery:12 Hosting operator id = 97 Hosting Expression = ws_sold_date_sk#92 IN dynamicpruning#5 +Subquery:12 Hosting operator id = 97 Hosting Expression = ws_sold_date_sk#77 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a/explain.txt index 2438fa9d7eb57..727c700735c0e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q14a/explain.txt @@ -215,7 +215,7 @@ Condition : isnotnull(i_item_sk#19) (19) BroadcastExchange Input [4]: [i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (20) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_item_sk#17] @@ -227,20 +227,20 @@ Output [4]: [cs_sold_date_sk#18, i_brand_id#20, i_class_id#21, i_category_id#22] Input [6]: [cs_item_sk#17, cs_sold_date_sk#18, i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22] (22) ReusedExchange [Reuses operator id: 159] -Output [1]: [d_date_sk#24] +Output [1]: [d_date_sk#23] (23) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_sold_date_sk#18] -Right keys [1]: [d_date_sk#24] +Right keys [1]: [d_date_sk#23] Join condition: None (24) Project [codegen id : 3] Output [3]: [i_brand_id#20, i_class_id#21, i_category_id#22] -Input [5]: [cs_sold_date_sk#18, i_brand_id#20, i_class_id#21, i_category_id#22, d_date_sk#24] +Input [5]: [cs_sold_date_sk#18, i_brand_id#20, i_class_id#21, i_category_id#22, d_date_sk#23] (25) BroadcastExchange Input [3]: [i_brand_id#20, i_class_id#21, i_category_id#22] -Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [id=#25] +Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [plan_id=2] (26) BroadcastHashJoin [codegen id : 4] Left keys [6]: [coalesce(i_brand_id#14, 0), isnull(i_brand_id#14), coalesce(i_class_id#15, 0), isnull(i_class_id#15), coalesce(i_category_id#16, 0), isnull(i_category_id#16)] @@ -249,7 +249,7 @@ Join condition: None (27) BroadcastExchange Input [4]: [i_item_sk#13, i_brand_id#14, i_class_id#15, i_category_id#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (28) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_item_sk#10] @@ -261,471 +261,471 @@ Output [4]: [ss_sold_date_sk#11, i_brand_id#14, i_class_id#15, i_category_id#16] Input [6]: [ss_item_sk#10, ss_sold_date_sk#11, i_item_sk#13, i_brand_id#14, i_class_id#15, i_category_id#16] (30) ReusedExchange [Reuses operator id: 159] -Output [1]: [d_date_sk#27] +Output [1]: [d_date_sk#24] (31) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_sold_date_sk#11] -Right keys [1]: [d_date_sk#27] +Right keys [1]: [d_date_sk#24] Join condition: None (32) Project [codegen id : 6] -Output [3]: [i_brand_id#14 AS brand_id#28, i_class_id#15 AS class_id#29, i_category_id#16 AS category_id#30] -Input [5]: [ss_sold_date_sk#11, i_brand_id#14, i_class_id#15, i_category_id#16, d_date_sk#27] +Output [3]: [i_brand_id#14 AS brand_id#25, i_class_id#15 AS class_id#26, i_category_id#16 AS category_id#27] +Input [5]: [ss_sold_date_sk#11, i_brand_id#14, i_class_id#15, i_category_id#16, d_date_sk#24] (33) HashAggregate [codegen id : 6] -Input [3]: [brand_id#28, class_id#29, category_id#30] -Keys [3]: [brand_id#28, class_id#29, category_id#30] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#28, class_id#29, category_id#30] +Results [3]: [brand_id#25, class_id#26, category_id#27] (34) Exchange -Input [3]: [brand_id#28, class_id#29, category_id#30] -Arguments: hashpartitioning(brand_id#28, class_id#29, category_id#30, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: hashpartitioning(brand_id#25, class_id#26, category_id#27, 5), ENSURE_REQUIREMENTS, [plan_id=4] (35) HashAggregate [codegen id : 10] -Input [3]: [brand_id#28, class_id#29, category_id#30] -Keys [3]: [brand_id#28, class_id#29, category_id#30] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Keys [3]: [brand_id#25, class_id#26, category_id#27] Functions: [] Aggregate Attributes: [] -Results [3]: [brand_id#28, class_id#29, category_id#30] +Results [3]: [brand_id#25, class_id#26, category_id#27] (36) Scan parquet default.web_sales -Output [2]: [ws_item_sk#32, ws_sold_date_sk#33] +Output [2]: [ws_item_sk#28, ws_sold_date_sk#29] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#33), dynamicpruningexpression(ws_sold_date_sk#33 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(ws_sold_date_sk#29), dynamicpruningexpression(ws_sold_date_sk#29 IN dynamicpruning#12)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 9] -Input [2]: [ws_item_sk#32, ws_sold_date_sk#33] +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] (38) Filter [codegen id : 9] -Input [2]: [ws_item_sk#32, ws_sold_date_sk#33] -Condition : isnotnull(ws_item_sk#32) +Input [2]: [ws_item_sk#28, ws_sold_date_sk#29] +Condition : isnotnull(ws_item_sk#28) (39) ReusedExchange [Reuses operator id: 19] -Output [4]: [i_item_sk#34, i_brand_id#35, i_class_id#36, i_category_id#37] +Output [4]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33] (40) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [ws_item_sk#32] -Right keys [1]: [i_item_sk#34] +Left keys [1]: [ws_item_sk#28] +Right keys [1]: [i_item_sk#30] Join condition: None (41) Project [codegen id : 9] -Output [4]: [ws_sold_date_sk#33, i_brand_id#35, i_class_id#36, i_category_id#37] -Input [6]: [ws_item_sk#32, ws_sold_date_sk#33, i_item_sk#34, i_brand_id#35, i_class_id#36, i_category_id#37] +Output [4]: [ws_sold_date_sk#29, i_brand_id#31, i_class_id#32, i_category_id#33] +Input [6]: [ws_item_sk#28, ws_sold_date_sk#29, i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33] (42) ReusedExchange [Reuses operator id: 159] -Output [1]: [d_date_sk#38] +Output [1]: [d_date_sk#34] (43) BroadcastHashJoin [codegen id : 9] -Left keys [1]: [ws_sold_date_sk#33] -Right keys [1]: [d_date_sk#38] +Left keys [1]: [ws_sold_date_sk#29] +Right keys [1]: [d_date_sk#34] Join condition: None (44) Project [codegen id : 9] -Output [3]: [i_brand_id#35, i_class_id#36, i_category_id#37] -Input [5]: [ws_sold_date_sk#33, i_brand_id#35, i_class_id#36, i_category_id#37, d_date_sk#38] +Output [3]: [i_brand_id#31, i_class_id#32, i_category_id#33] +Input [5]: [ws_sold_date_sk#29, i_brand_id#31, i_class_id#32, i_category_id#33, d_date_sk#34] (45) BroadcastExchange -Input [3]: [i_brand_id#35, i_class_id#36, i_category_id#37] -Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [id=#39] +Input [3]: [i_brand_id#31, i_class_id#32, i_category_id#33] +Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [plan_id=5] (46) BroadcastHashJoin [codegen id : 10] -Left keys [6]: [coalesce(brand_id#28, 0), isnull(brand_id#28), coalesce(class_id#29, 0), isnull(class_id#29), coalesce(category_id#30, 0), isnull(category_id#30)] -Right keys [6]: [coalesce(i_brand_id#35, 0), isnull(i_brand_id#35), coalesce(i_class_id#36, 0), isnull(i_class_id#36), coalesce(i_category_id#37, 0), isnull(i_category_id#37)] +Left keys [6]: [coalesce(brand_id#25, 0), isnull(brand_id#25), coalesce(class_id#26, 0), isnull(class_id#26), coalesce(category_id#27, 0), isnull(category_id#27)] +Right keys [6]: [coalesce(i_brand_id#31, 0), isnull(i_brand_id#31), coalesce(i_class_id#32, 0), isnull(i_class_id#32), coalesce(i_category_id#33, 0), isnull(i_category_id#33)] Join condition: None (47) BroadcastExchange -Input [3]: [brand_id#28, class_id#29, category_id#30] -Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [id=#40] +Input [3]: [brand_id#25, class_id#26, category_id#27] +Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [plan_id=6] (48) BroadcastHashJoin [codegen id : 11] Left keys [3]: [i_brand_id#7, i_class_id#8, i_category_id#9] -Right keys [3]: [brand_id#28, class_id#29, category_id#30] +Right keys [3]: [brand_id#25, class_id#26, category_id#27] Join condition: None (49) Project [codegen id : 11] -Output [1]: [i_item_sk#6 AS ss_item_sk#41] -Input [7]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9, brand_id#28, class_id#29, category_id#30] +Output [1]: [i_item_sk#6 AS ss_item_sk#35] +Input [7]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9, brand_id#25, class_id#26, category_id#27] (50) BroadcastExchange -Input [1]: [ss_item_sk#41] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#42] +Input [1]: [ss_item_sk#35] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] (51) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [ss_item_sk#41] +Right keys [1]: [ss_item_sk#35] Join condition: None (52) Scan parquet default.item -Output [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] +Output [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (53) ColumnarToRow [codegen id : 23] -Input [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] +Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] (54) Filter [codegen id : 23] -Input [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] -Condition : isnotnull(i_item_sk#43) +Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] +Condition : isnotnull(i_item_sk#36) (55) ReusedExchange [Reuses operator id: 50] -Output [1]: [ss_item_sk#41] +Output [1]: [ss_item_sk#35] (56) BroadcastHashJoin [codegen id : 23] -Left keys [1]: [i_item_sk#43] -Right keys [1]: [ss_item_sk#41] +Left keys [1]: [i_item_sk#36] +Right keys [1]: [ss_item_sk#35] Join condition: None (57) BroadcastExchange -Input [4]: [i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#47] +Input [4]: [i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] (58) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#43] +Right keys [1]: [i_item_sk#36] Join condition: None (59) Project [codegen id : 25] -Output [6]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#44, i_class_id#45, i_category_id#46] -Input [8]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_item_sk#43, i_brand_id#44, i_class_id#45, i_category_id#46] +Output [6]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#37, i_class_id#38, i_category_id#39] +Input [8]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_item_sk#36, i_brand_id#37, i_class_id#38, i_category_id#39] (60) ReusedExchange [Reuses operator id: 154] -Output [1]: [d_date_sk#48] +Output [1]: [d_date_sk#40] (61) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_sold_date_sk#4] -Right keys [1]: [d_date_sk#48] +Right keys [1]: [d_date_sk#40] Join condition: None (62) Project [codegen id : 25] -Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#44, i_class_id#45, i_category_id#46] -Input [7]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#44, i_class_id#45, i_category_id#46, d_date_sk#48] +Output [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#37, i_class_id#38, i_category_id#39] +Input [7]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#37, i_class_id#38, i_category_id#39, d_date_sk#40] (63) HashAggregate [codegen id : 25] -Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#44, i_class_id#45, i_category_id#46] -Keys [3]: [i_brand_id#44, i_class_id#45, i_category_id#46] +Input [5]: [ss_quantity#2, ss_list_price#3, i_brand_id#37, i_class_id#38, i_category_id#39] +Keys [3]: [i_brand_id#37, i_class_id#38, i_category_id#39] Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#49, isEmpty#50, count#51] -Results [6]: [i_brand_id#44, i_class_id#45, i_category_id#46, sum#52, isEmpty#53, count#54] +Aggregate Attributes [3]: [sum#41, isEmpty#42, count#43] +Results [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#44, isEmpty#45, count#46] (64) Exchange -Input [6]: [i_brand_id#44, i_class_id#45, i_category_id#46, sum#52, isEmpty#53, count#54] -Arguments: hashpartitioning(i_brand_id#44, i_class_id#45, i_category_id#46, 5), ENSURE_REQUIREMENTS, [id=#55] +Input [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#44, isEmpty#45, count#46] +Arguments: hashpartitioning(i_brand_id#37, i_class_id#38, i_category_id#39, 5), ENSURE_REQUIREMENTS, [plan_id=9] (65) HashAggregate [codegen id : 26] -Input [6]: [i_brand_id#44, i_class_id#45, i_category_id#46, sum#52, isEmpty#53, count#54] -Keys [3]: [i_brand_id#44, i_class_id#45, i_category_id#46] +Input [6]: [i_brand_id#37, i_class_id#38, i_category_id#39, sum#44, isEmpty#45, count#46] +Keys [3]: [i_brand_id#37, i_class_id#38, i_category_id#39] Functions [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#56, count(1)#57] -Results [6]: [store AS channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#56 AS sales#59, count(1)#57 AS number_sales#60] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47, count(1)#48] +Results [6]: [store AS channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum(CheckOverflow((promote_precision(cast(ss_quantity#2 as decimal(12,2))) * promote_precision(cast(ss_list_price#3 as decimal(12,2)))), DecimalType(18,2)))#47 AS sales#50, count(1)#48 AS number_sales#51] (66) Filter [codegen id : 26] -Input [6]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sales#59, number_sales#60] -Condition : (isnotnull(sales#59) AND (cast(sales#59 as decimal(32,6)) > cast(Subquery scalar-subquery#61, [id=#62] as decimal(32,6)))) +Input [6]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sales#50, number_sales#51] +Condition : (isnotnull(sales#50) AND (cast(sales#50 as decimal(32,6)) > cast(Subquery scalar-subquery#52, [id=#53] as decimal(32,6)))) (67) Scan parquet default.catalog_sales -Output [4]: [cs_item_sk#63, cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66] +Output [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#66), dynamicpruningexpression(cs_sold_date_sk#66 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#57), dynamicpruningexpression(cs_sold_date_sk#57 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (68) ColumnarToRow [codegen id : 51] -Input [4]: [cs_item_sk#63, cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66] +Input [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] (69) Filter [codegen id : 51] -Input [4]: [cs_item_sk#63, cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66] -Condition : isnotnull(cs_item_sk#63) +Input [4]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57] +Condition : isnotnull(cs_item_sk#54) (70) ReusedExchange [Reuses operator id: 50] -Output [1]: [ss_item_sk#41] +Output [1]: [ss_item_sk#35] (71) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [cs_item_sk#63] -Right keys [1]: [ss_item_sk#41] +Left keys [1]: [cs_item_sk#54] +Right keys [1]: [ss_item_sk#35] Join condition: None (72) ReusedExchange [Reuses operator id: 57] -Output [4]: [i_item_sk#67, i_brand_id#68, i_class_id#69, i_category_id#70] +Output [4]: [i_item_sk#58, i_brand_id#59, i_class_id#60, i_category_id#61] (73) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [cs_item_sk#63] -Right keys [1]: [i_item_sk#67] +Left keys [1]: [cs_item_sk#54] +Right keys [1]: [i_item_sk#58] Join condition: None (74) Project [codegen id : 51] -Output [6]: [cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66, i_brand_id#68, i_class_id#69, i_category_id#70] -Input [8]: [cs_item_sk#63, cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66, i_item_sk#67, i_brand_id#68, i_class_id#69, i_category_id#70] +Output [6]: [cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57, i_brand_id#59, i_class_id#60, i_category_id#61] +Input [8]: [cs_item_sk#54, cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57, i_item_sk#58, i_brand_id#59, i_class_id#60, i_category_id#61] (75) ReusedExchange [Reuses operator id: 154] -Output [1]: [d_date_sk#71] +Output [1]: [d_date_sk#62] (76) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [cs_sold_date_sk#66] -Right keys [1]: [d_date_sk#71] +Left keys [1]: [cs_sold_date_sk#57] +Right keys [1]: [d_date_sk#62] Join condition: None (77) Project [codegen id : 51] -Output [5]: [cs_quantity#64, cs_list_price#65, i_brand_id#68, i_class_id#69, i_category_id#70] -Input [7]: [cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66, i_brand_id#68, i_class_id#69, i_category_id#70, d_date_sk#71] +Output [5]: [cs_quantity#55, cs_list_price#56, i_brand_id#59, i_class_id#60, i_category_id#61] +Input [7]: [cs_quantity#55, cs_list_price#56, cs_sold_date_sk#57, i_brand_id#59, i_class_id#60, i_category_id#61, d_date_sk#62] (78) HashAggregate [codegen id : 51] -Input [5]: [cs_quantity#64, cs_list_price#65, i_brand_id#68, i_class_id#69, i_category_id#70] -Keys [3]: [i_brand_id#68, i_class_id#69, i_category_id#70] -Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(cs_quantity#64 as decimal(12,2))) * promote_precision(cast(cs_list_price#65 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#72, isEmpty#73, count#74] -Results [6]: [i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77] +Input [5]: [cs_quantity#55, cs_list_price#56, i_brand_id#59, i_class_id#60, i_category_id#61] +Keys [3]: [i_brand_id#59, i_class_id#60, i_category_id#61] +Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] +Aggregate Attributes [3]: [sum#63, isEmpty#64, count#65] +Results [6]: [i_brand_id#59, i_class_id#60, i_category_id#61, sum#66, isEmpty#67, count#68] (79) Exchange -Input [6]: [i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77] -Arguments: hashpartitioning(i_brand_id#68, i_class_id#69, i_category_id#70, 5), ENSURE_REQUIREMENTS, [id=#78] +Input [6]: [i_brand_id#59, i_class_id#60, i_category_id#61, sum#66, isEmpty#67, count#68] +Arguments: hashpartitioning(i_brand_id#59, i_class_id#60, i_category_id#61, 5), ENSURE_REQUIREMENTS, [plan_id=10] (80) HashAggregate [codegen id : 52] -Input [6]: [i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77] -Keys [3]: [i_brand_id#68, i_class_id#69, i_category_id#70] -Functions [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#64 as decimal(12,2))) * promote_precision(cast(cs_list_price#65 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#64 as decimal(12,2))) * promote_precision(cast(cs_list_price#65 as decimal(12,2)))), DecimalType(18,2)))#79, count(1)#80] -Results [6]: [catalog AS channel#81, i_brand_id#68, i_class_id#69, i_category_id#70, sum(CheckOverflow((promote_precision(cast(cs_quantity#64 as decimal(12,2))) * promote_precision(cast(cs_list_price#65 as decimal(12,2)))), DecimalType(18,2)))#79 AS sales#82, count(1)#80 AS number_sales#83] +Input [6]: [i_brand_id#59, i_class_id#60, i_category_id#61, sum#66, isEmpty#67, count#68] +Keys [3]: [i_brand_id#59, i_class_id#60, i_category_id#61] +Functions [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2))), count(1)] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#69, count(1)#70] +Results [6]: [catalog AS channel#71, i_brand_id#59, i_class_id#60, i_category_id#61, sum(CheckOverflow((promote_precision(cast(cs_quantity#55 as decimal(12,2))) * promote_precision(cast(cs_list_price#56 as decimal(12,2)))), DecimalType(18,2)))#69 AS sales#72, count(1)#70 AS number_sales#73] (81) Filter [codegen id : 52] -Input [6]: [channel#81, i_brand_id#68, i_class_id#69, i_category_id#70, sales#82, number_sales#83] -Condition : (isnotnull(sales#82) AND (cast(sales#82 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#61, [id=#62] as decimal(32,6)))) +Input [6]: [channel#71, i_brand_id#59, i_class_id#60, i_category_id#61, sales#72, number_sales#73] +Condition : (isnotnull(sales#72) AND (cast(sales#72 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#52, [id=#53] as decimal(32,6)))) (82) Scan parquet default.web_sales -Output [4]: [ws_item_sk#84, ws_quantity#85, ws_list_price#86, ws_sold_date_sk#87] +Output [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#87), dynamicpruningexpression(ws_sold_date_sk#87 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#77), dynamicpruningexpression(ws_sold_date_sk#77 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (83) ColumnarToRow [codegen id : 77] -Input [4]: [ws_item_sk#84, ws_quantity#85, ws_list_price#86, ws_sold_date_sk#87] +Input [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] (84) Filter [codegen id : 77] -Input [4]: [ws_item_sk#84, ws_quantity#85, ws_list_price#86, ws_sold_date_sk#87] -Condition : isnotnull(ws_item_sk#84) +Input [4]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77] +Condition : isnotnull(ws_item_sk#74) (85) ReusedExchange [Reuses operator id: 50] -Output [1]: [ss_item_sk#41] +Output [1]: [ss_item_sk#35] (86) BroadcastHashJoin [codegen id : 77] -Left keys [1]: [ws_item_sk#84] -Right keys [1]: [ss_item_sk#41] +Left keys [1]: [ws_item_sk#74] +Right keys [1]: [ss_item_sk#35] Join condition: None (87) ReusedExchange [Reuses operator id: 57] -Output [4]: [i_item_sk#88, i_brand_id#89, i_class_id#90, i_category_id#91] +Output [4]: [i_item_sk#78, i_brand_id#79, i_class_id#80, i_category_id#81] (88) BroadcastHashJoin [codegen id : 77] -Left keys [1]: [ws_item_sk#84] -Right keys [1]: [i_item_sk#88] +Left keys [1]: [ws_item_sk#74] +Right keys [1]: [i_item_sk#78] Join condition: None (89) Project [codegen id : 77] -Output [6]: [ws_quantity#85, ws_list_price#86, ws_sold_date_sk#87, i_brand_id#89, i_class_id#90, i_category_id#91] -Input [8]: [ws_item_sk#84, ws_quantity#85, ws_list_price#86, ws_sold_date_sk#87, i_item_sk#88, i_brand_id#89, i_class_id#90, i_category_id#91] +Output [6]: [ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77, i_brand_id#79, i_class_id#80, i_category_id#81] +Input [8]: [ws_item_sk#74, ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77, i_item_sk#78, i_brand_id#79, i_class_id#80, i_category_id#81] (90) ReusedExchange [Reuses operator id: 154] -Output [1]: [d_date_sk#92] +Output [1]: [d_date_sk#82] (91) BroadcastHashJoin [codegen id : 77] -Left keys [1]: [ws_sold_date_sk#87] -Right keys [1]: [d_date_sk#92] +Left keys [1]: [ws_sold_date_sk#77] +Right keys [1]: [d_date_sk#82] Join condition: None (92) Project [codegen id : 77] -Output [5]: [ws_quantity#85, ws_list_price#86, i_brand_id#89, i_class_id#90, i_category_id#91] -Input [7]: [ws_quantity#85, ws_list_price#86, ws_sold_date_sk#87, i_brand_id#89, i_class_id#90, i_category_id#91, d_date_sk#92] +Output [5]: [ws_quantity#75, ws_list_price#76, i_brand_id#79, i_class_id#80, i_category_id#81] +Input [7]: [ws_quantity#75, ws_list_price#76, ws_sold_date_sk#77, i_brand_id#79, i_class_id#80, i_category_id#81, d_date_sk#82] (93) HashAggregate [codegen id : 77] -Input [5]: [ws_quantity#85, ws_list_price#86, i_brand_id#89, i_class_id#90, i_category_id#91] -Keys [3]: [i_brand_id#89, i_class_id#90, i_category_id#91] -Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ws_quantity#85 as decimal(12,2))) * promote_precision(cast(ws_list_price#86 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] -Aggregate Attributes [3]: [sum#93, isEmpty#94, count#95] -Results [6]: [i_brand_id#89, i_class_id#90, i_category_id#91, sum#96, isEmpty#97, count#98] +Input [5]: [ws_quantity#75, ws_list_price#76, i_brand_id#79, i_class_id#80, i_category_id#81] +Keys [3]: [i_brand_id#79, i_class_id#80, i_category_id#81] +Functions [2]: [partial_sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2))), partial_count(1)] +Aggregate Attributes [3]: [sum#83, isEmpty#84, count#85] +Results [6]: [i_brand_id#79, i_class_id#80, i_category_id#81, sum#86, isEmpty#87, count#88] (94) Exchange -Input [6]: [i_brand_id#89, i_class_id#90, i_category_id#91, sum#96, isEmpty#97, count#98] -Arguments: hashpartitioning(i_brand_id#89, i_class_id#90, i_category_id#91, 5), ENSURE_REQUIREMENTS, [id=#99] +Input [6]: [i_brand_id#79, i_class_id#80, i_category_id#81, sum#86, isEmpty#87, count#88] +Arguments: hashpartitioning(i_brand_id#79, i_class_id#80, i_category_id#81, 5), ENSURE_REQUIREMENTS, [plan_id=11] (95) HashAggregate [codegen id : 78] -Input [6]: [i_brand_id#89, i_class_id#90, i_category_id#91, sum#96, isEmpty#97, count#98] -Keys [3]: [i_brand_id#89, i_class_id#90, i_category_id#91] -Functions [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#85 as decimal(12,2))) * promote_precision(cast(ws_list_price#86 as decimal(12,2)))), DecimalType(18,2))), count(1)] -Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#85 as decimal(12,2))) * promote_precision(cast(ws_list_price#86 as decimal(12,2)))), DecimalType(18,2)))#100, count(1)#101] -Results [6]: [web AS channel#102, i_brand_id#89, i_class_id#90, i_category_id#91, sum(CheckOverflow((promote_precision(cast(ws_quantity#85 as decimal(12,2))) * promote_precision(cast(ws_list_price#86 as decimal(12,2)))), DecimalType(18,2)))#100 AS sales#103, count(1)#101 AS number_sales#104] +Input [6]: [i_brand_id#79, i_class_id#80, i_category_id#81, sum#86, isEmpty#87, count#88] +Keys [3]: [i_brand_id#79, i_class_id#80, i_category_id#81] +Functions [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2))), count(1)] +Aggregate Attributes [2]: [sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2)))#89, count(1)#90] +Results [6]: [web AS channel#91, i_brand_id#79, i_class_id#80, i_category_id#81, sum(CheckOverflow((promote_precision(cast(ws_quantity#75 as decimal(12,2))) * promote_precision(cast(ws_list_price#76 as decimal(12,2)))), DecimalType(18,2)))#89 AS sales#92, count(1)#90 AS number_sales#93] (96) Filter [codegen id : 78] -Input [6]: [channel#102, i_brand_id#89, i_class_id#90, i_category_id#91, sales#103, number_sales#104] -Condition : (isnotnull(sales#103) AND (cast(sales#103 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#61, [id=#62] as decimal(32,6)))) +Input [6]: [channel#91, i_brand_id#79, i_class_id#80, i_category_id#81, sales#92, number_sales#93] +Condition : (isnotnull(sales#92) AND (cast(sales#92 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#52, [id=#53] as decimal(32,6)))) (97) Union (98) HashAggregate [codegen id : 79] -Input [6]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sales#59, number_sales#60] -Keys [4]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46] -Functions [2]: [partial_sum(sales#59), partial_sum(number_sales#60)] -Aggregate Attributes [3]: [sum#105, isEmpty#106, sum#107] -Results [7]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum#108, isEmpty#109, sum#110] +Input [6]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sales#50, number_sales#51] +Keys [4]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39] +Functions [2]: [partial_sum(sales#50), partial_sum(number_sales#51)] +Aggregate Attributes [3]: [sum#94, isEmpty#95, sum#96] +Results [7]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum#97, isEmpty#98, sum#99] (99) Exchange -Input [7]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum#108, isEmpty#109, sum#110] -Arguments: hashpartitioning(channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, 5), ENSURE_REQUIREMENTS, [id=#111] +Input [7]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum#97, isEmpty#98, sum#99] +Arguments: hashpartitioning(channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, 5), ENSURE_REQUIREMENTS, [plan_id=12] (100) HashAggregate [codegen id : 80] -Input [7]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum#108, isEmpty#109, sum#110] -Keys [4]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46] -Functions [2]: [sum(sales#59), sum(number_sales#60)] -Aggregate Attributes [2]: [sum(sales#59)#112, sum(number_sales#60)#113] -Results [6]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum(sales#59)#112 AS sum_sales#114, sum(number_sales#60)#113 AS number_sales#115] +Input [7]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum#97, isEmpty#98, sum#99] +Keys [4]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39] +Functions [2]: [sum(sales#50), sum(number_sales#51)] +Aggregate Attributes [2]: [sum(sales#50)#100, sum(number_sales#51)#101] +Results [6]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum(sales#50)#100 AS sum_sales#102, sum(number_sales#51)#101 AS number_sales#103] (101) ReusedExchange [Reuses operator id: 99] -Output [7]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum#108, isEmpty#109, sum#110] +Output [7]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum#97, isEmpty#98, sum#99] (102) HashAggregate [codegen id : 160] -Input [7]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum#108, isEmpty#109, sum#110] -Keys [4]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46] -Functions [2]: [sum(sales#59), sum(number_sales#60)] -Aggregate Attributes [2]: [sum(sales#59)#112, sum(number_sales#60)#113] -Results [5]: [channel#58, i_brand_id#44, i_class_id#45, sum(sales#59)#112 AS sum_sales#114, sum(number_sales#60)#113 AS number_sales#115] +Input [7]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum#97, isEmpty#98, sum#99] +Keys [4]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39] +Functions [2]: [sum(sales#50), sum(number_sales#51)] +Aggregate Attributes [2]: [sum(sales#50)#100, sum(number_sales#51)#101] +Results [5]: [channel#49, i_brand_id#37, i_class_id#38, sum(sales#50)#100 AS sum_sales#102, sum(number_sales#51)#101 AS number_sales#103] (103) HashAggregate [codegen id : 160] -Input [5]: [channel#58, i_brand_id#44, i_class_id#45, sum_sales#114, number_sales#115] -Keys [3]: [channel#58, i_brand_id#44, i_class_id#45] -Functions [2]: [partial_sum(sum_sales#114), partial_sum(number_sales#115)] -Aggregate Attributes [3]: [sum#116, isEmpty#117, sum#118] -Results [6]: [channel#58, i_brand_id#44, i_class_id#45, sum#119, isEmpty#120, sum#121] +Input [5]: [channel#49, i_brand_id#37, i_class_id#38, sum_sales#102, number_sales#103] +Keys [3]: [channel#49, i_brand_id#37, i_class_id#38] +Functions [2]: [partial_sum(sum_sales#102), partial_sum(number_sales#103)] +Aggregate Attributes [3]: [sum#104, isEmpty#105, sum#106] +Results [6]: [channel#49, i_brand_id#37, i_class_id#38, sum#107, isEmpty#108, sum#109] (104) Exchange -Input [6]: [channel#58, i_brand_id#44, i_class_id#45, sum#119, isEmpty#120, sum#121] -Arguments: hashpartitioning(channel#58, i_brand_id#44, i_class_id#45, 5), ENSURE_REQUIREMENTS, [id=#122] +Input [6]: [channel#49, i_brand_id#37, i_class_id#38, sum#107, isEmpty#108, sum#109] +Arguments: hashpartitioning(channel#49, i_brand_id#37, i_class_id#38, 5), ENSURE_REQUIREMENTS, [plan_id=13] (105) HashAggregate [codegen id : 161] -Input [6]: [channel#58, i_brand_id#44, i_class_id#45, sum#119, isEmpty#120, sum#121] -Keys [3]: [channel#58, i_brand_id#44, i_class_id#45] -Functions [2]: [sum(sum_sales#114), sum(number_sales#115)] -Aggregate Attributes [2]: [sum(sum_sales#114)#123, sum(number_sales#115)#124] -Results [6]: [channel#58, i_brand_id#44, i_class_id#45, null AS i_category_id#125, sum(sum_sales#114)#123 AS sum(sum_sales)#126, sum(number_sales#115)#124 AS sum(number_sales)#127] +Input [6]: [channel#49, i_brand_id#37, i_class_id#38, sum#107, isEmpty#108, sum#109] +Keys [3]: [channel#49, i_brand_id#37, i_class_id#38] +Functions [2]: [sum(sum_sales#102), sum(number_sales#103)] +Aggregate Attributes [2]: [sum(sum_sales#102)#110, sum(number_sales#103)#111] +Results [6]: [channel#49, i_brand_id#37, i_class_id#38, null AS i_category_id#112, sum(sum_sales#102)#110 AS sum(sum_sales)#113, sum(number_sales#103)#111 AS sum(number_sales)#114] (106) ReusedExchange [Reuses operator id: 99] -Output [7]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum#108, isEmpty#109, sum#110] +Output [7]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum#97, isEmpty#98, sum#99] (107) HashAggregate [codegen id : 241] -Input [7]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum#108, isEmpty#109, sum#110] -Keys [4]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46] -Functions [2]: [sum(sales#59), sum(number_sales#60)] -Aggregate Attributes [2]: [sum(sales#59)#112, sum(number_sales#60)#113] -Results [4]: [channel#58, i_brand_id#44, sum(sales#59)#112 AS sum_sales#114, sum(number_sales#60)#113 AS number_sales#115] +Input [7]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum#97, isEmpty#98, sum#99] +Keys [4]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39] +Functions [2]: [sum(sales#50), sum(number_sales#51)] +Aggregate Attributes [2]: [sum(sales#50)#100, sum(number_sales#51)#101] +Results [4]: [channel#49, i_brand_id#37, sum(sales#50)#100 AS sum_sales#102, sum(number_sales#51)#101 AS number_sales#103] (108) HashAggregate [codegen id : 241] -Input [4]: [channel#58, i_brand_id#44, sum_sales#114, number_sales#115] -Keys [2]: [channel#58, i_brand_id#44] -Functions [2]: [partial_sum(sum_sales#114), partial_sum(number_sales#115)] -Aggregate Attributes [3]: [sum#128, isEmpty#129, sum#130] -Results [5]: [channel#58, i_brand_id#44, sum#131, isEmpty#132, sum#133] +Input [4]: [channel#49, i_brand_id#37, sum_sales#102, number_sales#103] +Keys [2]: [channel#49, i_brand_id#37] +Functions [2]: [partial_sum(sum_sales#102), partial_sum(number_sales#103)] +Aggregate Attributes [3]: [sum#115, isEmpty#116, sum#117] +Results [5]: [channel#49, i_brand_id#37, sum#118, isEmpty#119, sum#120] (109) Exchange -Input [5]: [channel#58, i_brand_id#44, sum#131, isEmpty#132, sum#133] -Arguments: hashpartitioning(channel#58, i_brand_id#44, 5), ENSURE_REQUIREMENTS, [id=#134] +Input [5]: [channel#49, i_brand_id#37, sum#118, isEmpty#119, sum#120] +Arguments: hashpartitioning(channel#49, i_brand_id#37, 5), ENSURE_REQUIREMENTS, [plan_id=14] (110) HashAggregate [codegen id : 242] -Input [5]: [channel#58, i_brand_id#44, sum#131, isEmpty#132, sum#133] -Keys [2]: [channel#58, i_brand_id#44] -Functions [2]: [sum(sum_sales#114), sum(number_sales#115)] -Aggregate Attributes [2]: [sum(sum_sales#114)#135, sum(number_sales#115)#136] -Results [6]: [channel#58, i_brand_id#44, null AS i_class_id#137, null AS i_category_id#138, sum(sum_sales#114)#135 AS sum(sum_sales)#139, sum(number_sales#115)#136 AS sum(number_sales)#140] +Input [5]: [channel#49, i_brand_id#37, sum#118, isEmpty#119, sum#120] +Keys [2]: [channel#49, i_brand_id#37] +Functions [2]: [sum(sum_sales#102), sum(number_sales#103)] +Aggregate Attributes [2]: [sum(sum_sales#102)#121, sum(number_sales#103)#122] +Results [6]: [channel#49, i_brand_id#37, null AS i_class_id#123, null AS i_category_id#124, sum(sum_sales#102)#121 AS sum(sum_sales)#125, sum(number_sales#103)#122 AS sum(number_sales)#126] (111) ReusedExchange [Reuses operator id: 99] -Output [7]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum#108, isEmpty#109, sum#110] +Output [7]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum#97, isEmpty#98, sum#99] (112) HashAggregate [codegen id : 322] -Input [7]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum#108, isEmpty#109, sum#110] -Keys [4]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46] -Functions [2]: [sum(sales#59), sum(number_sales#60)] -Aggregate Attributes [2]: [sum(sales#59)#112, sum(number_sales#60)#113] -Results [3]: [channel#58, sum(sales#59)#112 AS sum_sales#114, sum(number_sales#60)#113 AS number_sales#115] +Input [7]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum#97, isEmpty#98, sum#99] +Keys [4]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39] +Functions [2]: [sum(sales#50), sum(number_sales#51)] +Aggregate Attributes [2]: [sum(sales#50)#100, sum(number_sales#51)#101] +Results [3]: [channel#49, sum(sales#50)#100 AS sum_sales#102, sum(number_sales#51)#101 AS number_sales#103] (113) HashAggregate [codegen id : 322] -Input [3]: [channel#58, sum_sales#114, number_sales#115] -Keys [1]: [channel#58] -Functions [2]: [partial_sum(sum_sales#114), partial_sum(number_sales#115)] -Aggregate Attributes [3]: [sum#141, isEmpty#142, sum#143] -Results [4]: [channel#58, sum#144, isEmpty#145, sum#146] +Input [3]: [channel#49, sum_sales#102, number_sales#103] +Keys [1]: [channel#49] +Functions [2]: [partial_sum(sum_sales#102), partial_sum(number_sales#103)] +Aggregate Attributes [3]: [sum#127, isEmpty#128, sum#129] +Results [4]: [channel#49, sum#130, isEmpty#131, sum#132] (114) Exchange -Input [4]: [channel#58, sum#144, isEmpty#145, sum#146] -Arguments: hashpartitioning(channel#58, 5), ENSURE_REQUIREMENTS, [id=#147] +Input [4]: [channel#49, sum#130, isEmpty#131, sum#132] +Arguments: hashpartitioning(channel#49, 5), ENSURE_REQUIREMENTS, [plan_id=15] (115) HashAggregate [codegen id : 323] -Input [4]: [channel#58, sum#144, isEmpty#145, sum#146] -Keys [1]: [channel#58] -Functions [2]: [sum(sum_sales#114), sum(number_sales#115)] -Aggregate Attributes [2]: [sum(sum_sales#114)#148, sum(number_sales#115)#149] -Results [6]: [channel#58, null AS i_brand_id#150, null AS i_class_id#151, null AS i_category_id#152, sum(sum_sales#114)#148 AS sum(sum_sales)#153, sum(number_sales#115)#149 AS sum(number_sales)#154] +Input [4]: [channel#49, sum#130, isEmpty#131, sum#132] +Keys [1]: [channel#49] +Functions [2]: [sum(sum_sales#102), sum(number_sales#103)] +Aggregate Attributes [2]: [sum(sum_sales#102)#133, sum(number_sales#103)#134] +Results [6]: [channel#49, null AS i_brand_id#135, null AS i_class_id#136, null AS i_category_id#137, sum(sum_sales#102)#133 AS sum(sum_sales)#138, sum(number_sales#103)#134 AS sum(number_sales)#139] (116) ReusedExchange [Reuses operator id: 99] -Output [7]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum#108, isEmpty#109, sum#110] +Output [7]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum#97, isEmpty#98, sum#99] (117) HashAggregate [codegen id : 403] -Input [7]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum#108, isEmpty#109, sum#110] -Keys [4]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46] -Functions [2]: [sum(sales#59), sum(number_sales#60)] -Aggregate Attributes [2]: [sum(sales#59)#112, sum(number_sales#60)#113] -Results [2]: [sum(sales#59)#112 AS sum_sales#114, sum(number_sales#60)#113 AS number_sales#115] +Input [7]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum#97, isEmpty#98, sum#99] +Keys [4]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39] +Functions [2]: [sum(sales#50), sum(number_sales#51)] +Aggregate Attributes [2]: [sum(sales#50)#100, sum(number_sales#51)#101] +Results [2]: [sum(sales#50)#100 AS sum_sales#102, sum(number_sales#51)#101 AS number_sales#103] (118) HashAggregate [codegen id : 403] -Input [2]: [sum_sales#114, number_sales#115] +Input [2]: [sum_sales#102, number_sales#103] Keys: [] -Functions [2]: [partial_sum(sum_sales#114), partial_sum(number_sales#115)] -Aggregate Attributes [3]: [sum#155, isEmpty#156, sum#157] -Results [3]: [sum#158, isEmpty#159, sum#160] +Functions [2]: [partial_sum(sum_sales#102), partial_sum(number_sales#103)] +Aggregate Attributes [3]: [sum#140, isEmpty#141, sum#142] +Results [3]: [sum#143, isEmpty#144, sum#145] (119) Exchange -Input [3]: [sum#158, isEmpty#159, sum#160] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#161] +Input [3]: [sum#143, isEmpty#144, sum#145] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=16] (120) HashAggregate [codegen id : 404] -Input [3]: [sum#158, isEmpty#159, sum#160] +Input [3]: [sum#143, isEmpty#144, sum#145] Keys: [] -Functions [2]: [sum(sum_sales#114), sum(number_sales#115)] -Aggregate Attributes [2]: [sum(sum_sales#114)#162, sum(number_sales#115)#163] -Results [6]: [null AS channel#164, null AS i_brand_id#165, null AS i_class_id#166, null AS i_category_id#167, sum(sum_sales#114)#162 AS sum(sum_sales)#168, sum(number_sales#115)#163 AS sum(number_sales)#169] +Functions [2]: [sum(sum_sales#102), sum(number_sales#103)] +Aggregate Attributes [2]: [sum(sum_sales#102)#146, sum(number_sales#103)#147] +Results [6]: [null AS channel#148, null AS i_brand_id#149, null AS i_class_id#150, null AS i_category_id#151, sum(sum_sales#102)#146 AS sum(sum_sales)#152, sum(number_sales#103)#147 AS sum(number_sales)#153] (121) Union (122) HashAggregate [codegen id : 405] -Input [6]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum_sales#114, number_sales#115] -Keys [6]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum_sales#114, number_sales#115] +Input [6]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum_sales#102, number_sales#103] +Keys [6]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum_sales#102, number_sales#103] Functions: [] Aggregate Attributes: [] -Results [6]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum_sales#114, number_sales#115] +Results [6]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum_sales#102, number_sales#103] (123) Exchange -Input [6]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum_sales#114, number_sales#115] -Arguments: hashpartitioning(channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum_sales#114, number_sales#115, 5), ENSURE_REQUIREMENTS, [id=#170] +Input [6]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum_sales#102, number_sales#103] +Arguments: hashpartitioning(channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum_sales#102, number_sales#103, 5), ENSURE_REQUIREMENTS, [plan_id=17] (124) HashAggregate [codegen id : 406] -Input [6]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum_sales#114, number_sales#115] -Keys [6]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum_sales#114, number_sales#115] +Input [6]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum_sales#102, number_sales#103] +Keys [6]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum_sales#102, number_sales#103] Functions: [] Aggregate Attributes: [] -Results [6]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum_sales#114, number_sales#115] +Results [6]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum_sales#102, number_sales#103] (125) TakeOrderedAndProject -Input [6]: [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum_sales#114, number_sales#115] -Arguments: 100, [channel#58 ASC NULLS FIRST, i_brand_id#44 ASC NULLS FIRST, i_class_id#45 ASC NULLS FIRST, i_category_id#46 ASC NULLS FIRST], [channel#58, i_brand_id#44, i_class_id#45, i_category_id#46, sum_sales#114, number_sales#115] +Input [6]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum_sales#102, number_sales#103] +Arguments: 100, [channel#49 ASC NULLS FIRST, i_brand_id#37 ASC NULLS FIRST, i_class_id#38 ASC NULLS FIRST, i_category_id#39 ASC NULLS FIRST], [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum_sales#102, number_sales#103] ===== Subqueries ===== -Subquery:1 Hosting operator id = 66 Hosting Expression = Subquery scalar-subquery#61, [id=#62] +Subquery:1 Hosting operator id = 66 Hosting Expression = Subquery scalar-subquery#52, [id=#53] * HashAggregate (144) +- Exchange (143) +- * HashAggregate (142) @@ -748,94 +748,94 @@ Subquery:1 Hosting operator id = 66 Hosting Expression = Subquery scalar-subquer (126) Scan parquet default.store_sales -Output [3]: [ss_quantity#171, ss_list_price#172, ss_sold_date_sk#173] +Output [3]: [ss_quantity#154, ss_list_price#155, ss_sold_date_sk#156] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#173), dynamicpruningexpression(ss_sold_date_sk#173 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(ss_sold_date_sk#156), dynamicpruningexpression(ss_sold_date_sk#156 IN dynamicpruning#12)] ReadSchema: struct (127) ColumnarToRow [codegen id : 2] -Input [3]: [ss_quantity#171, ss_list_price#172, ss_sold_date_sk#173] +Input [3]: [ss_quantity#154, ss_list_price#155, ss_sold_date_sk#156] (128) ReusedExchange [Reuses operator id: 159] -Output [1]: [d_date_sk#174] +Output [1]: [d_date_sk#157] (129) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [ss_sold_date_sk#173] -Right keys [1]: [d_date_sk#174] +Left keys [1]: [ss_sold_date_sk#156] +Right keys [1]: [d_date_sk#157] Join condition: None (130) Project [codegen id : 2] -Output [2]: [ss_quantity#171 AS quantity#175, ss_list_price#172 AS list_price#176] -Input [4]: [ss_quantity#171, ss_list_price#172, ss_sold_date_sk#173, d_date_sk#174] +Output [2]: [ss_quantity#154 AS quantity#158, ss_list_price#155 AS list_price#159] +Input [4]: [ss_quantity#154, ss_list_price#155, ss_sold_date_sk#156, d_date_sk#157] (131) Scan parquet default.catalog_sales -Output [3]: [cs_quantity#177, cs_list_price#178, cs_sold_date_sk#179] +Output [3]: [cs_quantity#160, cs_list_price#161, cs_sold_date_sk#162] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#179), dynamicpruningexpression(cs_sold_date_sk#179 IN dynamicpruning#180)] +PartitionFilters: [isnotnull(cs_sold_date_sk#162), dynamicpruningexpression(cs_sold_date_sk#162 IN dynamicpruning#163)] ReadSchema: struct (132) ColumnarToRow [codegen id : 4] -Input [3]: [cs_quantity#177, cs_list_price#178, cs_sold_date_sk#179] +Input [3]: [cs_quantity#160, cs_list_price#161, cs_sold_date_sk#162] (133) ReusedExchange [Reuses operator id: 149] -Output [1]: [d_date_sk#181] +Output [1]: [d_date_sk#164] (134) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [cs_sold_date_sk#179] -Right keys [1]: [d_date_sk#181] +Left keys [1]: [cs_sold_date_sk#162] +Right keys [1]: [d_date_sk#164] Join condition: None (135) Project [codegen id : 4] -Output [2]: [cs_quantity#177 AS quantity#182, cs_list_price#178 AS list_price#183] -Input [4]: [cs_quantity#177, cs_list_price#178, cs_sold_date_sk#179, d_date_sk#181] +Output [2]: [cs_quantity#160 AS quantity#165, cs_list_price#161 AS list_price#166] +Input [4]: [cs_quantity#160, cs_list_price#161, cs_sold_date_sk#162, d_date_sk#164] (136) Scan parquet default.web_sales -Output [3]: [ws_quantity#184, ws_list_price#185, ws_sold_date_sk#186] +Output [3]: [ws_quantity#167, ws_list_price#168, ws_sold_date_sk#169] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#186), dynamicpruningexpression(ws_sold_date_sk#186 IN dynamicpruning#180)] +PartitionFilters: [isnotnull(ws_sold_date_sk#169), dynamicpruningexpression(ws_sold_date_sk#169 IN dynamicpruning#163)] ReadSchema: struct (137) ColumnarToRow [codegen id : 6] -Input [3]: [ws_quantity#184, ws_list_price#185, ws_sold_date_sk#186] +Input [3]: [ws_quantity#167, ws_list_price#168, ws_sold_date_sk#169] (138) ReusedExchange [Reuses operator id: 149] -Output [1]: [d_date_sk#187] +Output [1]: [d_date_sk#170] (139) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ws_sold_date_sk#186] -Right keys [1]: [d_date_sk#187] +Left keys [1]: [ws_sold_date_sk#169] +Right keys [1]: [d_date_sk#170] Join condition: None (140) Project [codegen id : 6] -Output [2]: [ws_quantity#184 AS quantity#188, ws_list_price#185 AS list_price#189] -Input [4]: [ws_quantity#184, ws_list_price#185, ws_sold_date_sk#186, d_date_sk#187] +Output [2]: [ws_quantity#167 AS quantity#171, ws_list_price#168 AS list_price#172] +Input [4]: [ws_quantity#167, ws_list_price#168, ws_sold_date_sk#169, d_date_sk#170] (141) Union (142) HashAggregate [codegen id : 7] -Input [2]: [quantity#175, list_price#176] +Input [2]: [quantity#158, list_price#159] Keys: [] -Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#175 as decimal(12,2))) * promote_precision(cast(list_price#176 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [2]: [sum#190, count#191] -Results [2]: [sum#192, count#193] +Functions [1]: [partial_avg(CheckOverflow((promote_precision(cast(quantity#158 as decimal(12,2))) * promote_precision(cast(list_price#159 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [2]: [sum#173, count#174] +Results [2]: [sum#175, count#176] (143) Exchange -Input [2]: [sum#192, count#193] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#194] +Input [2]: [sum#175, count#176] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=18] (144) HashAggregate [codegen id : 8] -Input [2]: [sum#192, count#193] +Input [2]: [sum#175, count#176] Keys: [] -Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#175 as decimal(12,2))) * promote_precision(cast(list_price#176 as decimal(12,2)))), DecimalType(18,2)))] -Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#175 as decimal(12,2))) * promote_precision(cast(list_price#176 as decimal(12,2)))), DecimalType(18,2)))#195] -Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#175 as decimal(12,2))) * promote_precision(cast(list_price#176 as decimal(12,2)))), DecimalType(18,2)))#195 AS average_sales#196] +Functions [1]: [avg(CheckOverflow((promote_precision(cast(quantity#158 as decimal(12,2))) * promote_precision(cast(list_price#159 as decimal(12,2)))), DecimalType(18,2)))] +Aggregate Attributes [1]: [avg(CheckOverflow((promote_precision(cast(quantity#158 as decimal(12,2))) * promote_precision(cast(list_price#159 as decimal(12,2)))), DecimalType(18,2)))#177] +Results [1]: [avg(CheckOverflow((promote_precision(cast(quantity#158 as decimal(12,2))) * promote_precision(cast(list_price#159 as decimal(12,2)))), DecimalType(18,2)))#177 AS average_sales#178] -Subquery:2 Hosting operator id = 126 Hosting Expression = ss_sold_date_sk#173 IN dynamicpruning#12 +Subquery:2 Hosting operator id = 126 Hosting Expression = ss_sold_date_sk#156 IN dynamicpruning#12 -Subquery:3 Hosting operator id = 131 Hosting Expression = cs_sold_date_sk#179 IN dynamicpruning#180 +Subquery:3 Hosting operator id = 131 Hosting Expression = cs_sold_date_sk#162 IN dynamicpruning#163 BroadcastExchange (149) +- * Project (148) +- * Filter (147) @@ -844,28 +844,28 @@ BroadcastExchange (149) (145) Scan parquet default.date_dim -Output [2]: [d_date_sk#181, d_year#197] +Output [2]: [d_date_sk#164, d_year#179] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1998), LessThanOrEqual(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (146) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#181, d_year#197] +Input [2]: [d_date_sk#164, d_year#179] (147) Filter [codegen id : 1] -Input [2]: [d_date_sk#181, d_year#197] -Condition : (((isnotnull(d_year#197) AND (d_year#197 >= 1998)) AND (d_year#197 <= 2000)) AND isnotnull(d_date_sk#181)) +Input [2]: [d_date_sk#164, d_year#179] +Condition : (((isnotnull(d_year#179) AND (d_year#179 >= 1998)) AND (d_year#179 <= 2000)) AND isnotnull(d_date_sk#164)) (148) Project [codegen id : 1] -Output [1]: [d_date_sk#181] -Input [2]: [d_date_sk#181, d_year#197] +Output [1]: [d_date_sk#164] +Input [2]: [d_date_sk#164, d_year#179] (149) BroadcastExchange -Input [1]: [d_date_sk#181] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#198] +Input [1]: [d_date_sk#164] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=19] -Subquery:4 Hosting operator id = 136 Hosting Expression = ws_sold_date_sk#186 IN dynamicpruning#180 +Subquery:4 Hosting operator id = 136 Hosting Expression = ws_sold_date_sk#169 IN dynamicpruning#163 Subquery:5 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5 BroadcastExchange (154) @@ -876,26 +876,26 @@ BroadcastExchange (154) (150) Scan parquet default.date_dim -Output [3]: [d_date_sk#48, d_year#199, d_moy#200] +Output [3]: [d_date_sk#40, d_year#180, d_moy#181] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2000), EqualTo(d_moy,11), IsNotNull(d_date_sk)] ReadSchema: struct (151) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#48, d_year#199, d_moy#200] +Input [3]: [d_date_sk#40, d_year#180, d_moy#181] (152) Filter [codegen id : 1] -Input [3]: [d_date_sk#48, d_year#199, d_moy#200] -Condition : ((((isnotnull(d_year#199) AND isnotnull(d_moy#200)) AND (d_year#199 = 2000)) AND (d_moy#200 = 11)) AND isnotnull(d_date_sk#48)) +Input [3]: [d_date_sk#40, d_year#180, d_moy#181] +Condition : ((((isnotnull(d_year#180) AND isnotnull(d_moy#181)) AND (d_year#180 = 2000)) AND (d_moy#181 = 11)) AND isnotnull(d_date_sk#40)) (153) Project [codegen id : 1] -Output [1]: [d_date_sk#48] -Input [3]: [d_date_sk#48, d_year#199, d_moy#200] +Output [1]: [d_date_sk#40] +Input [3]: [d_date_sk#40, d_year#180, d_moy#181] (154) BroadcastExchange -Input [1]: [d_date_sk#48] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#201] +Input [1]: [d_date_sk#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=20] Subquery:6 Hosting operator id = 7 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#12 BroadcastExchange (159) @@ -906,37 +906,37 @@ BroadcastExchange (159) (155) Scan parquet default.date_dim -Output [2]: [d_date_sk#27, d_year#202] +Output [2]: [d_date_sk#24, d_year#182] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1999), LessThanOrEqual(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (156) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#27, d_year#202] +Input [2]: [d_date_sk#24, d_year#182] (157) Filter [codegen id : 1] -Input [2]: [d_date_sk#27, d_year#202] -Condition : (((isnotnull(d_year#202) AND (d_year#202 >= 1999)) AND (d_year#202 <= 2001)) AND isnotnull(d_date_sk#27)) +Input [2]: [d_date_sk#24, d_year#182] +Condition : (((isnotnull(d_year#182) AND (d_year#182 >= 1999)) AND (d_year#182 <= 2001)) AND isnotnull(d_date_sk#24)) (158) Project [codegen id : 1] -Output [1]: [d_date_sk#27] -Input [2]: [d_date_sk#27, d_year#202] +Output [1]: [d_date_sk#24] +Input [2]: [d_date_sk#24, d_year#182] (159) BroadcastExchange -Input [1]: [d_date_sk#27] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#203] +Input [1]: [d_date_sk#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=21] Subquery:7 Hosting operator id = 13 Hosting Expression = cs_sold_date_sk#18 IN dynamicpruning#12 -Subquery:8 Hosting operator id = 36 Hosting Expression = ws_sold_date_sk#33 IN dynamicpruning#12 +Subquery:8 Hosting operator id = 36 Hosting Expression = ws_sold_date_sk#29 IN dynamicpruning#12 -Subquery:9 Hosting operator id = 81 Hosting Expression = ReusedSubquery Subquery scalar-subquery#61, [id=#62] +Subquery:9 Hosting operator id = 81 Hosting Expression = ReusedSubquery Subquery scalar-subquery#52, [id=#53] -Subquery:10 Hosting operator id = 67 Hosting Expression = cs_sold_date_sk#66 IN dynamicpruning#5 +Subquery:10 Hosting operator id = 67 Hosting Expression = cs_sold_date_sk#57 IN dynamicpruning#5 -Subquery:11 Hosting operator id = 96 Hosting Expression = ReusedSubquery Subquery scalar-subquery#61, [id=#62] +Subquery:11 Hosting operator id = 96 Hosting Expression = ReusedSubquery Subquery scalar-subquery#52, [id=#53] -Subquery:12 Hosting operator id = 82 Hosting Expression = ws_sold_date_sk#87 IN dynamicpruning#5 +Subquery:12 Hosting operator id = 82 Hosting Expression = ws_sold_date_sk#77 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q18a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q18a.sf100/explain.txt index 506e18eabcc20..c77c01832e146 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q18a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q18a.sf100/explain.txt @@ -192,7 +192,7 @@ Input [4]: [cd_demo_sk#11, cd_gender#12, cd_education_status#13, cd_dep_count#14 (8) BroadcastExchange Input [2]: [cd_demo_sk#11, cd_dep_count#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_bill_cdemo_sk#2] @@ -204,396 +204,396 @@ Output [9]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5 Input [11]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_demo_sk#11, cd_dep_count#14] (11) ReusedExchange [Reuses operator id: 161] -Output [1]: [d_date_sk#16] +Output [1]: [d_date_sk#15] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_sold_date_sk#9] -Right keys [1]: [d_date_sk#16] +Right keys [1]: [d_date_sk#15] Join condition: None (13) Project [codegen id : 4] Output [8]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14] -Input [10]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, d_date_sk#16] +Input [10]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, d_date_sk#15] (14) Scan parquet default.item -Output [2]: [i_item_sk#17, i_item_id#18] +Output [2]: [i_item_sk#16, i_item_id#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [2]: [i_item_sk#17, i_item_id#18] +Input [2]: [i_item_sk#16, i_item_id#17] (16) Filter [codegen id : 3] -Input [2]: [i_item_sk#17, i_item_id#18] -Condition : isnotnull(i_item_sk#17) +Input [2]: [i_item_sk#16, i_item_id#17] +Condition : isnotnull(i_item_sk#16) (17) BroadcastExchange -Input [2]: [i_item_sk#17, i_item_id#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19] +Input [2]: [i_item_sk#16, i_item_id#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_item_sk#3] -Right keys [1]: [i_item_sk#17] +Right keys [1]: [i_item_sk#16] Join condition: None (19) Project [codegen id : 4] -Output [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#18] -Input [10]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_sk#17, i_item_id#18] +Output [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#17] +Input [10]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_sk#16, i_item_id#17] (20) Exchange -Input [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#18] -Arguments: hashpartitioning(cs_bill_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#17] +Arguments: hashpartitioning(cs_bill_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) Sort [codegen id : 5] -Input [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#18] +Input [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#17] Arguments: [cs_bill_customer_sk#1 ASC NULLS FIRST], false, 0 (22) Scan parquet default.customer -Output [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Output [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [In(c_birth_month, [1,10,12,4,5,9]), IsNotNull(c_customer_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 7] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] (24) Filter [codegen id : 7] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] -Condition : (((c_birth_month#24 IN (9,5,12,4,1,10) AND isnotnull(c_customer_sk#21)) AND isnotnull(c_current_cdemo_sk#22)) AND isnotnull(c_current_addr_sk#23)) +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] +Condition : (((c_birth_month#21 IN (9,5,12,4,1,10) AND isnotnull(c_customer_sk#18)) AND isnotnull(c_current_cdemo_sk#19)) AND isnotnull(c_current_addr_sk#20)) (25) Project [codegen id : 7] -Output [4]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_year#25] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Output [4]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_year#22] +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] (26) Scan parquet default.customer_address -Output [4]: [ca_address_sk#26, ca_county#27, ca_state#28, ca_country#29] +Output [4]: [ca_address_sk#23, ca_county#24, ca_state#25, ca_country#26] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [AL,MS,NC,ND,OK,TN,WI]), IsNotNull(ca_address_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 6] -Input [4]: [ca_address_sk#26, ca_county#27, ca_state#28, ca_country#29] +Input [4]: [ca_address_sk#23, ca_county#24, ca_state#25, ca_country#26] (28) Filter [codegen id : 6] -Input [4]: [ca_address_sk#26, ca_county#27, ca_state#28, ca_country#29] -Condition : (ca_state#28 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#26)) +Input [4]: [ca_address_sk#23, ca_county#24, ca_state#25, ca_country#26] +Condition : (ca_state#25 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#23)) (29) BroadcastExchange -Input [4]: [ca_address_sk#26, ca_county#27, ca_state#28, ca_country#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#30] +Input [4]: [ca_address_sk#23, ca_county#24, ca_state#25, ca_country#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (30) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [c_current_addr_sk#23] -Right keys [1]: [ca_address_sk#26] +Left keys [1]: [c_current_addr_sk#20] +Right keys [1]: [ca_address_sk#23] Join condition: None (31) Project [codegen id : 7] -Output [6]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29] -Input [8]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_year#25, ca_address_sk#26, ca_county#27, ca_state#28, ca_country#29] +Output [6]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26] +Input [8]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_year#22, ca_address_sk#23, ca_county#24, ca_state#25, ca_country#26] (32) Exchange -Input [6]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29] -Arguments: hashpartitioning(c_current_cdemo_sk#22, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [6]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26] +Arguments: hashpartitioning(c_current_cdemo_sk#19, 5), ENSURE_REQUIREMENTS, [plan_id=5] (33) Sort [codegen id : 8] -Input [6]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29] -Arguments: [c_current_cdemo_sk#22 ASC NULLS FIRST], false, 0 +Input [6]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26] +Arguments: [c_current_cdemo_sk#19 ASC NULLS FIRST], false, 0 (34) Scan parquet default.customer_demographics -Output [1]: [cd_demo_sk#32] +Output [1]: [cd_demo_sk#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 9] -Input [1]: [cd_demo_sk#32] +Input [1]: [cd_demo_sk#27] (36) Filter [codegen id : 9] -Input [1]: [cd_demo_sk#32] -Condition : isnotnull(cd_demo_sk#32) +Input [1]: [cd_demo_sk#27] +Condition : isnotnull(cd_demo_sk#27) (37) Exchange -Input [1]: [cd_demo_sk#32] -Arguments: hashpartitioning(cd_demo_sk#32, 5), ENSURE_REQUIREMENTS, [id=#33] +Input [1]: [cd_demo_sk#27] +Arguments: hashpartitioning(cd_demo_sk#27, 5), ENSURE_REQUIREMENTS, [plan_id=6] (38) Sort [codegen id : 10] -Input [1]: [cd_demo_sk#32] -Arguments: [cd_demo_sk#32 ASC NULLS FIRST], false, 0 +Input [1]: [cd_demo_sk#27] +Arguments: [cd_demo_sk#27 ASC NULLS FIRST], false, 0 (39) SortMergeJoin [codegen id : 11] -Left keys [1]: [c_current_cdemo_sk#22] -Right keys [1]: [cd_demo_sk#32] +Left keys [1]: [c_current_cdemo_sk#19] +Right keys [1]: [cd_demo_sk#27] Join condition: None (40) Project [codegen id : 11] -Output [5]: [c_customer_sk#21, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29] -Input [7]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29, cd_demo_sk#32] +Output [5]: [c_customer_sk#18, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26] +Input [7]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26, cd_demo_sk#27] (41) Exchange -Input [5]: [c_customer_sk#21, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29] -Arguments: hashpartitioning(c_customer_sk#21, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [5]: [c_customer_sk#18, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26] +Arguments: hashpartitioning(c_customer_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) Sort [codegen id : 12] -Input [5]: [c_customer_sk#21, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29] -Arguments: [c_customer_sk#21 ASC NULLS FIRST], false, 0 +Input [5]: [c_customer_sk#18, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26] +Arguments: [c_customer_sk#18 ASC NULLS FIRST], false, 0 (43) SortMergeJoin [codegen id : 13] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#21] +Right keys [1]: [c_customer_sk#18] Join condition: None (44) Project [codegen id : 13] -Output [11]: [i_item_id#18, ca_country#29, ca_state#28, ca_county#27, cast(cs_quantity#4 as decimal(12,2)) AS agg1#35, cast(cs_list_price#5 as decimal(12,2)) AS agg2#36, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#37, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#38, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#39, cast(c_birth_year#25 as decimal(12,2)) AS agg6#40, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#41] -Input [13]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#18, c_customer_sk#21, c_birth_year#25, ca_county#27, ca_state#28, ca_country#29] +Output [11]: [i_item_id#17, ca_country#26, ca_state#25, ca_county#24, cast(cs_quantity#4 as decimal(12,2)) AS agg1#28, cast(cs_list_price#5 as decimal(12,2)) AS agg2#29, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#30, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#31, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#32, cast(c_birth_year#22 as decimal(12,2)) AS agg6#33, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#34] +Input [13]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#17, c_customer_sk#18, c_birth_year#22, ca_county#24, ca_state#25, ca_country#26] (45) HashAggregate [codegen id : 13] -Input [11]: [i_item_id#18, ca_country#29, ca_state#28, ca_county#27, agg1#35, agg2#36, agg3#37, agg4#38, agg5#39, agg6#40, agg7#41] -Keys [4]: [i_item_id#18, ca_country#29, ca_state#28, ca_county#27] -Functions [7]: [partial_avg(agg1#35), partial_avg(agg2#36), partial_avg(agg3#37), partial_avg(agg4#38), partial_avg(agg5#39), partial_avg(agg6#40), partial_avg(agg7#41)] -Aggregate Attributes [14]: [sum#42, count#43, sum#44, count#45, sum#46, count#47, sum#48, count#49, sum#50, count#51, sum#52, count#53, sum#54, count#55] -Results [18]: [i_item_id#18, ca_country#29, ca_state#28, ca_county#27, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63, sum#64, count#65, sum#66, count#67, sum#68, count#69] +Input [11]: [i_item_id#17, ca_country#26, ca_state#25, ca_county#24, agg1#28, agg2#29, agg3#30, agg4#31, agg5#32, agg6#33, agg7#34] +Keys [4]: [i_item_id#17, ca_country#26, ca_state#25, ca_county#24] +Functions [7]: [partial_avg(agg1#28), partial_avg(agg2#29), partial_avg(agg3#30), partial_avg(agg4#31), partial_avg(agg5#32), partial_avg(agg6#33), partial_avg(agg7#34)] +Aggregate Attributes [14]: [sum#35, count#36, sum#37, count#38, sum#39, count#40, sum#41, count#42, sum#43, count#44, sum#45, count#46, sum#47, count#48] +Results [18]: [i_item_id#17, ca_country#26, ca_state#25, ca_county#24, sum#49, count#50, sum#51, count#52, sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60, sum#61, count#62] (46) Exchange -Input [18]: [i_item_id#18, ca_country#29, ca_state#28, ca_county#27, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63, sum#64, count#65, sum#66, count#67, sum#68, count#69] -Arguments: hashpartitioning(i_item_id#18, ca_country#29, ca_state#28, ca_county#27, 5), ENSURE_REQUIREMENTS, [id=#70] +Input [18]: [i_item_id#17, ca_country#26, ca_state#25, ca_county#24, sum#49, count#50, sum#51, count#52, sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60, sum#61, count#62] +Arguments: hashpartitioning(i_item_id#17, ca_country#26, ca_state#25, ca_county#24, 5), ENSURE_REQUIREMENTS, [plan_id=8] (47) HashAggregate [codegen id : 14] -Input [18]: [i_item_id#18, ca_country#29, ca_state#28, ca_county#27, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63, sum#64, count#65, sum#66, count#67, sum#68, count#69] -Keys [4]: [i_item_id#18, ca_country#29, ca_state#28, ca_county#27] -Functions [7]: [avg(agg1#35), avg(agg2#36), avg(agg3#37), avg(agg4#38), avg(agg5#39), avg(agg6#40), avg(agg7#41)] -Aggregate Attributes [7]: [avg(agg1#35)#71, avg(agg2#36)#72, avg(agg3#37)#73, avg(agg4#38)#74, avg(agg5#39)#75, avg(agg6#40)#76, avg(agg7#41)#77] -Results [11]: [i_item_id#18, ca_country#29, ca_state#28, ca_county#27, avg(agg1#35)#71 AS agg1#78, avg(agg2#36)#72 AS agg2#79, avg(agg3#37)#73 AS agg3#80, avg(agg4#38)#74 AS agg4#81, avg(agg5#39)#75 AS agg5#82, avg(agg6#40)#76 AS agg6#83, avg(agg7#41)#77 AS agg7#84] +Input [18]: [i_item_id#17, ca_country#26, ca_state#25, ca_county#24, sum#49, count#50, sum#51, count#52, sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60, sum#61, count#62] +Keys [4]: [i_item_id#17, ca_country#26, ca_state#25, ca_county#24] +Functions [7]: [avg(agg1#28), avg(agg2#29), avg(agg3#30), avg(agg4#31), avg(agg5#32), avg(agg6#33), avg(agg7#34)] +Aggregate Attributes [7]: [avg(agg1#28)#63, avg(agg2#29)#64, avg(agg3#30)#65, avg(agg4#31)#66, avg(agg5#32)#67, avg(agg6#33)#68, avg(agg7#34)#69] +Results [11]: [i_item_id#17, ca_country#26, ca_state#25, ca_county#24, avg(agg1#28)#63 AS agg1#70, avg(agg2#29)#64 AS agg2#71, avg(agg3#30)#65 AS agg3#72, avg(agg4#31)#66 AS agg4#73, avg(agg5#32)#67 AS agg5#74, avg(agg6#33)#68 AS agg6#75, avg(agg7#34)#69 AS agg7#76] (48) ReusedExchange [Reuses operator id: 20] -Output [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#18] +Output [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#17] (49) Sort [codegen id : 19] -Input [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#18] +Input [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#17] Arguments: [cs_bill_customer_sk#1 ASC NULLS FIRST], false, 0 (50) Scan parquet default.customer -Output [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Output [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [In(c_birth_month, [1,10,12,4,5,9]), IsNotNull(c_customer_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 21] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] (52) Filter [codegen id : 21] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] -Condition : (((c_birth_month#24 IN (9,5,12,4,1,10) AND isnotnull(c_customer_sk#21)) AND isnotnull(c_current_cdemo_sk#22)) AND isnotnull(c_current_addr_sk#23)) +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] +Condition : (((c_birth_month#21 IN (9,5,12,4,1,10) AND isnotnull(c_customer_sk#18)) AND isnotnull(c_current_cdemo_sk#19)) AND isnotnull(c_current_addr_sk#20)) (53) Project [codegen id : 21] -Output [4]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_year#25] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Output [4]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_year#22] +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] (54) Scan parquet default.customer_address -Output [3]: [ca_address_sk#26, ca_state#28, ca_country#29] +Output [3]: [ca_address_sk#23, ca_state#25, ca_country#26] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [AL,MS,NC,ND,OK,TN,WI]), IsNotNull(ca_address_sk)] ReadSchema: struct (55) ColumnarToRow [codegen id : 20] -Input [3]: [ca_address_sk#26, ca_state#28, ca_country#29] +Input [3]: [ca_address_sk#23, ca_state#25, ca_country#26] (56) Filter [codegen id : 20] -Input [3]: [ca_address_sk#26, ca_state#28, ca_country#29] -Condition : (ca_state#28 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#26)) +Input [3]: [ca_address_sk#23, ca_state#25, ca_country#26] +Condition : (ca_state#25 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#23)) (57) BroadcastExchange -Input [3]: [ca_address_sk#26, ca_state#28, ca_country#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#85] +Input [3]: [ca_address_sk#23, ca_state#25, ca_country#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] (58) BroadcastHashJoin [codegen id : 21] -Left keys [1]: [c_current_addr_sk#23] -Right keys [1]: [ca_address_sk#26] +Left keys [1]: [c_current_addr_sk#20] +Right keys [1]: [ca_address_sk#23] Join condition: None (59) Project [codegen id : 21] -Output [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_state#28, ca_country#29] -Input [7]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_year#25, ca_address_sk#26, ca_state#28, ca_country#29] +Output [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_state#25, ca_country#26] +Input [7]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_year#22, ca_address_sk#23, ca_state#25, ca_country#26] (60) Exchange -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_state#28, ca_country#29] -Arguments: hashpartitioning(c_current_cdemo_sk#22, 5), ENSURE_REQUIREMENTS, [id=#86] +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_state#25, ca_country#26] +Arguments: hashpartitioning(c_current_cdemo_sk#19, 5), ENSURE_REQUIREMENTS, [plan_id=10] (61) Sort [codegen id : 22] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_state#28, ca_country#29] -Arguments: [c_current_cdemo_sk#22 ASC NULLS FIRST], false, 0 +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_state#25, ca_country#26] +Arguments: [c_current_cdemo_sk#19 ASC NULLS FIRST], false, 0 (62) ReusedExchange [Reuses operator id: 37] -Output [1]: [cd_demo_sk#32] +Output [1]: [cd_demo_sk#27] (63) Sort [codegen id : 24] -Input [1]: [cd_demo_sk#32] -Arguments: [cd_demo_sk#32 ASC NULLS FIRST], false, 0 +Input [1]: [cd_demo_sk#27] +Arguments: [cd_demo_sk#27 ASC NULLS FIRST], false, 0 (64) SortMergeJoin [codegen id : 25] -Left keys [1]: [c_current_cdemo_sk#22] -Right keys [1]: [cd_demo_sk#32] +Left keys [1]: [c_current_cdemo_sk#19] +Right keys [1]: [cd_demo_sk#27] Join condition: None (65) Project [codegen id : 25] -Output [4]: [c_customer_sk#21, c_birth_year#25, ca_state#28, ca_country#29] -Input [6]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_state#28, ca_country#29, cd_demo_sk#32] +Output [4]: [c_customer_sk#18, c_birth_year#22, ca_state#25, ca_country#26] +Input [6]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_state#25, ca_country#26, cd_demo_sk#27] (66) Exchange -Input [4]: [c_customer_sk#21, c_birth_year#25, ca_state#28, ca_country#29] -Arguments: hashpartitioning(c_customer_sk#21, 5), ENSURE_REQUIREMENTS, [id=#87] +Input [4]: [c_customer_sk#18, c_birth_year#22, ca_state#25, ca_country#26] +Arguments: hashpartitioning(c_customer_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=11] (67) Sort [codegen id : 26] -Input [4]: [c_customer_sk#21, c_birth_year#25, ca_state#28, ca_country#29] -Arguments: [c_customer_sk#21 ASC NULLS FIRST], false, 0 +Input [4]: [c_customer_sk#18, c_birth_year#22, ca_state#25, ca_country#26] +Arguments: [c_customer_sk#18 ASC NULLS FIRST], false, 0 (68) SortMergeJoin [codegen id : 27] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#21] +Right keys [1]: [c_customer_sk#18] Join condition: None (69) Project [codegen id : 27] -Output [10]: [i_item_id#18, ca_country#29, ca_state#28, cast(cs_quantity#4 as decimal(12,2)) AS agg1#35, cast(cs_list_price#5 as decimal(12,2)) AS agg2#36, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#37, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#38, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#39, cast(c_birth_year#25 as decimal(12,2)) AS agg6#40, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#41] -Input [12]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#18, c_customer_sk#21, c_birth_year#25, ca_state#28, ca_country#29] +Output [10]: [i_item_id#17, ca_country#26, ca_state#25, cast(cs_quantity#4 as decimal(12,2)) AS agg1#28, cast(cs_list_price#5 as decimal(12,2)) AS agg2#29, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#30, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#31, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#32, cast(c_birth_year#22 as decimal(12,2)) AS agg6#33, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#34] +Input [12]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#17, c_customer_sk#18, c_birth_year#22, ca_state#25, ca_country#26] (70) HashAggregate [codegen id : 27] -Input [10]: [i_item_id#18, ca_country#29, ca_state#28, agg1#35, agg2#36, agg3#37, agg4#38, agg5#39, agg6#40, agg7#41] -Keys [3]: [i_item_id#18, ca_country#29, ca_state#28] -Functions [7]: [partial_avg(agg1#35), partial_avg(agg2#36), partial_avg(agg3#37), partial_avg(agg4#38), partial_avg(agg5#39), partial_avg(agg6#40), partial_avg(agg7#41)] -Aggregate Attributes [14]: [sum#88, count#89, sum#90, count#91, sum#92, count#93, sum#94, count#95, sum#96, count#97, sum#98, count#99, sum#100, count#101] -Results [17]: [i_item_id#18, ca_country#29, ca_state#28, sum#102, count#103, sum#104, count#105, sum#106, count#107, sum#108, count#109, sum#110, count#111, sum#112, count#113, sum#114, count#115] +Input [10]: [i_item_id#17, ca_country#26, ca_state#25, agg1#28, agg2#29, agg3#30, agg4#31, agg5#32, agg6#33, agg7#34] +Keys [3]: [i_item_id#17, ca_country#26, ca_state#25] +Functions [7]: [partial_avg(agg1#28), partial_avg(agg2#29), partial_avg(agg3#30), partial_avg(agg4#31), partial_avg(agg5#32), partial_avg(agg6#33), partial_avg(agg7#34)] +Aggregate Attributes [14]: [sum#77, count#78, sum#79, count#80, sum#81, count#82, sum#83, count#84, sum#85, count#86, sum#87, count#88, sum#89, count#90] +Results [17]: [i_item_id#17, ca_country#26, ca_state#25, sum#91, count#92, sum#93, count#94, sum#95, count#96, sum#97, count#98, sum#99, count#100, sum#101, count#102, sum#103, count#104] (71) Exchange -Input [17]: [i_item_id#18, ca_country#29, ca_state#28, sum#102, count#103, sum#104, count#105, sum#106, count#107, sum#108, count#109, sum#110, count#111, sum#112, count#113, sum#114, count#115] -Arguments: hashpartitioning(i_item_id#18, ca_country#29, ca_state#28, 5), ENSURE_REQUIREMENTS, [id=#116] +Input [17]: [i_item_id#17, ca_country#26, ca_state#25, sum#91, count#92, sum#93, count#94, sum#95, count#96, sum#97, count#98, sum#99, count#100, sum#101, count#102, sum#103, count#104] +Arguments: hashpartitioning(i_item_id#17, ca_country#26, ca_state#25, 5), ENSURE_REQUIREMENTS, [plan_id=12] (72) HashAggregate [codegen id : 28] -Input [17]: [i_item_id#18, ca_country#29, ca_state#28, sum#102, count#103, sum#104, count#105, sum#106, count#107, sum#108, count#109, sum#110, count#111, sum#112, count#113, sum#114, count#115] -Keys [3]: [i_item_id#18, ca_country#29, ca_state#28] -Functions [7]: [avg(agg1#35), avg(agg2#36), avg(agg3#37), avg(agg4#38), avg(agg5#39), avg(agg6#40), avg(agg7#41)] -Aggregate Attributes [7]: [avg(agg1#35)#117, avg(agg2#36)#118, avg(agg3#37)#119, avg(agg4#38)#120, avg(agg5#39)#121, avg(agg6#40)#122, avg(agg7#41)#123] -Results [11]: [i_item_id#18, ca_country#29, ca_state#28, null AS county#124, avg(agg1#35)#117 AS agg1#125, avg(agg2#36)#118 AS agg2#126, avg(agg3#37)#119 AS agg3#127, avg(agg4#38)#120 AS agg4#128, avg(agg5#39)#121 AS agg5#129, avg(agg6#40)#122 AS agg6#130, avg(agg7#41)#123 AS agg7#131] +Input [17]: [i_item_id#17, ca_country#26, ca_state#25, sum#91, count#92, sum#93, count#94, sum#95, count#96, sum#97, count#98, sum#99, count#100, sum#101, count#102, sum#103, count#104] +Keys [3]: [i_item_id#17, ca_country#26, ca_state#25] +Functions [7]: [avg(agg1#28), avg(agg2#29), avg(agg3#30), avg(agg4#31), avg(agg5#32), avg(agg6#33), avg(agg7#34)] +Aggregate Attributes [7]: [avg(agg1#28)#105, avg(agg2#29)#106, avg(agg3#30)#107, avg(agg4#31)#108, avg(agg5#32)#109, avg(agg6#33)#110, avg(agg7#34)#111] +Results [11]: [i_item_id#17, ca_country#26, ca_state#25, null AS county#112, avg(agg1#28)#105 AS agg1#113, avg(agg2#29)#106 AS agg2#114, avg(agg3#30)#107 AS agg3#115, avg(agg4#31)#108 AS agg4#116, avg(agg5#32)#109 AS agg5#117, avg(agg6#33)#110 AS agg6#118, avg(agg7#34)#111 AS agg7#119] (73) ReusedExchange [Reuses operator id: 20] -Output [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#18] +Output [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#17] (74) Sort [codegen id : 33] -Input [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#18] +Input [8]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#17] Arguments: [cs_bill_customer_sk#1 ASC NULLS FIRST], false, 0 (75) Scan parquet default.customer -Output [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Output [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [In(c_birth_month, [1,10,12,4,5,9]), IsNotNull(c_customer_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (76) ColumnarToRow [codegen id : 35] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] (77) Filter [codegen id : 35] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] -Condition : (((c_birth_month#24 IN (9,5,12,4,1,10) AND isnotnull(c_customer_sk#21)) AND isnotnull(c_current_cdemo_sk#22)) AND isnotnull(c_current_addr_sk#23)) +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] +Condition : (((c_birth_month#21 IN (9,5,12,4,1,10) AND isnotnull(c_customer_sk#18)) AND isnotnull(c_current_cdemo_sk#19)) AND isnotnull(c_current_addr_sk#20)) (78) Project [codegen id : 35] -Output [4]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_year#25] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Output [4]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_year#22] +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] (79) Scan parquet default.customer_address -Output [3]: [ca_address_sk#26, ca_state#28, ca_country#29] +Output [3]: [ca_address_sk#23, ca_state#25, ca_country#26] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [AL,MS,NC,ND,OK,TN,WI]), IsNotNull(ca_address_sk)] ReadSchema: struct (80) ColumnarToRow [codegen id : 34] -Input [3]: [ca_address_sk#26, ca_state#28, ca_country#29] +Input [3]: [ca_address_sk#23, ca_state#25, ca_country#26] (81) Filter [codegen id : 34] -Input [3]: [ca_address_sk#26, ca_state#28, ca_country#29] -Condition : (ca_state#28 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#26)) +Input [3]: [ca_address_sk#23, ca_state#25, ca_country#26] +Condition : (ca_state#25 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#23)) (82) Project [codegen id : 34] -Output [2]: [ca_address_sk#26, ca_country#29] -Input [3]: [ca_address_sk#26, ca_state#28, ca_country#29] +Output [2]: [ca_address_sk#23, ca_country#26] +Input [3]: [ca_address_sk#23, ca_state#25, ca_country#26] (83) BroadcastExchange -Input [2]: [ca_address_sk#26, ca_country#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#132] +Input [2]: [ca_address_sk#23, ca_country#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=13] (84) BroadcastHashJoin [codegen id : 35] -Left keys [1]: [c_current_addr_sk#23] -Right keys [1]: [ca_address_sk#26] +Left keys [1]: [c_current_addr_sk#20] +Right keys [1]: [ca_address_sk#23] Join condition: None (85) Project [codegen id : 35] -Output [4]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_country#29] -Input [6]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_year#25, ca_address_sk#26, ca_country#29] +Output [4]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_country#26] +Input [6]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_year#22, ca_address_sk#23, ca_country#26] (86) Exchange -Input [4]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_country#29] -Arguments: hashpartitioning(c_current_cdemo_sk#22, 5), ENSURE_REQUIREMENTS, [id=#133] +Input [4]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_country#26] +Arguments: hashpartitioning(c_current_cdemo_sk#19, 5), ENSURE_REQUIREMENTS, [plan_id=14] (87) Sort [codegen id : 36] -Input [4]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_country#29] -Arguments: [c_current_cdemo_sk#22 ASC NULLS FIRST], false, 0 +Input [4]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_country#26] +Arguments: [c_current_cdemo_sk#19 ASC NULLS FIRST], false, 0 (88) ReusedExchange [Reuses operator id: 37] -Output [1]: [cd_demo_sk#32] +Output [1]: [cd_demo_sk#27] (89) Sort [codegen id : 38] -Input [1]: [cd_demo_sk#32] -Arguments: [cd_demo_sk#32 ASC NULLS FIRST], false, 0 +Input [1]: [cd_demo_sk#27] +Arguments: [cd_demo_sk#27 ASC NULLS FIRST], false, 0 (90) SortMergeJoin [codegen id : 39] -Left keys [1]: [c_current_cdemo_sk#22] -Right keys [1]: [cd_demo_sk#32] +Left keys [1]: [c_current_cdemo_sk#19] +Right keys [1]: [cd_demo_sk#27] Join condition: None (91) Project [codegen id : 39] -Output [3]: [c_customer_sk#21, c_birth_year#25, ca_country#29] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, ca_country#29, cd_demo_sk#32] +Output [3]: [c_customer_sk#18, c_birth_year#22, ca_country#26] +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, ca_country#26, cd_demo_sk#27] (92) Exchange -Input [3]: [c_customer_sk#21, c_birth_year#25, ca_country#29] -Arguments: hashpartitioning(c_customer_sk#21, 5), ENSURE_REQUIREMENTS, [id=#134] +Input [3]: [c_customer_sk#18, c_birth_year#22, ca_country#26] +Arguments: hashpartitioning(c_customer_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=15] (93) Sort [codegen id : 40] -Input [3]: [c_customer_sk#21, c_birth_year#25, ca_country#29] -Arguments: [c_customer_sk#21 ASC NULLS FIRST], false, 0 +Input [3]: [c_customer_sk#18, c_birth_year#22, ca_country#26] +Arguments: [c_customer_sk#18 ASC NULLS FIRST], false, 0 (94) SortMergeJoin [codegen id : 41] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#21] +Right keys [1]: [c_customer_sk#18] Join condition: None (95) Project [codegen id : 41] -Output [9]: [i_item_id#18, ca_country#29, cast(cs_quantity#4 as decimal(12,2)) AS agg1#35, cast(cs_list_price#5 as decimal(12,2)) AS agg2#36, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#37, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#38, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#39, cast(c_birth_year#25 as decimal(12,2)) AS agg6#40, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#41] -Input [11]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#18, c_customer_sk#21, c_birth_year#25, ca_country#29] +Output [9]: [i_item_id#17, ca_country#26, cast(cs_quantity#4 as decimal(12,2)) AS agg1#28, cast(cs_list_price#5 as decimal(12,2)) AS agg2#29, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#30, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#31, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#32, cast(c_birth_year#22 as decimal(12,2)) AS agg6#33, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#34] +Input [11]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_id#17, c_customer_sk#18, c_birth_year#22, ca_country#26] (96) HashAggregate [codegen id : 41] -Input [9]: [i_item_id#18, ca_country#29, agg1#35, agg2#36, agg3#37, agg4#38, agg5#39, agg6#40, agg7#41] -Keys [2]: [i_item_id#18, ca_country#29] -Functions [7]: [partial_avg(agg1#35), partial_avg(agg2#36), partial_avg(agg3#37), partial_avg(agg4#38), partial_avg(agg5#39), partial_avg(agg6#40), partial_avg(agg7#41)] -Aggregate Attributes [14]: [sum#135, count#136, sum#137, count#138, sum#139, count#140, sum#141, count#142, sum#143, count#144, sum#145, count#146, sum#147, count#148] -Results [16]: [i_item_id#18, ca_country#29, sum#149, count#150, sum#151, count#152, sum#153, count#154, sum#155, count#156, sum#157, count#158, sum#159, count#160, sum#161, count#162] +Input [9]: [i_item_id#17, ca_country#26, agg1#28, agg2#29, agg3#30, agg4#31, agg5#32, agg6#33, agg7#34] +Keys [2]: [i_item_id#17, ca_country#26] +Functions [7]: [partial_avg(agg1#28), partial_avg(agg2#29), partial_avg(agg3#30), partial_avg(agg4#31), partial_avg(agg5#32), partial_avg(agg6#33), partial_avg(agg7#34)] +Aggregate Attributes [14]: [sum#120, count#121, sum#122, count#123, sum#124, count#125, sum#126, count#127, sum#128, count#129, sum#130, count#131, sum#132, count#133] +Results [16]: [i_item_id#17, ca_country#26, sum#134, count#135, sum#136, count#137, sum#138, count#139, sum#140, count#141, sum#142, count#143, sum#144, count#145, sum#146, count#147] (97) Exchange -Input [16]: [i_item_id#18, ca_country#29, sum#149, count#150, sum#151, count#152, sum#153, count#154, sum#155, count#156, sum#157, count#158, sum#159, count#160, sum#161, count#162] -Arguments: hashpartitioning(i_item_id#18, ca_country#29, 5), ENSURE_REQUIREMENTS, [id=#163] +Input [16]: [i_item_id#17, ca_country#26, sum#134, count#135, sum#136, count#137, sum#138, count#139, sum#140, count#141, sum#142, count#143, sum#144, count#145, sum#146, count#147] +Arguments: hashpartitioning(i_item_id#17, ca_country#26, 5), ENSURE_REQUIREMENTS, [plan_id=16] (98) HashAggregate [codegen id : 42] -Input [16]: [i_item_id#18, ca_country#29, sum#149, count#150, sum#151, count#152, sum#153, count#154, sum#155, count#156, sum#157, count#158, sum#159, count#160, sum#161, count#162] -Keys [2]: [i_item_id#18, ca_country#29] -Functions [7]: [avg(agg1#35), avg(agg2#36), avg(agg3#37), avg(agg4#38), avg(agg5#39), avg(agg6#40), avg(agg7#41)] -Aggregate Attributes [7]: [avg(agg1#35)#164, avg(agg2#36)#165, avg(agg3#37)#166, avg(agg4#38)#167, avg(agg5#39)#168, avg(agg6#40)#169, avg(agg7#41)#170] -Results [11]: [i_item_id#18, ca_country#29, null AS ca_state#171, null AS county#172, avg(agg1#35)#164 AS agg1#173, avg(agg2#36)#165 AS agg2#174, avg(agg3#37)#166 AS agg3#175, avg(agg4#38)#167 AS agg4#176, avg(agg5#39)#168 AS agg5#177, avg(agg6#40)#169 AS agg6#178, avg(agg7#41)#170 AS agg7#179] +Input [16]: [i_item_id#17, ca_country#26, sum#134, count#135, sum#136, count#137, sum#138, count#139, sum#140, count#141, sum#142, count#143, sum#144, count#145, sum#146, count#147] +Keys [2]: [i_item_id#17, ca_country#26] +Functions [7]: [avg(agg1#28), avg(agg2#29), avg(agg3#30), avg(agg4#31), avg(agg5#32), avg(agg6#33), avg(agg7#34)] +Aggregate Attributes [7]: [avg(agg1#28)#148, avg(agg2#29)#149, avg(agg3#30)#150, avg(agg4#31)#151, avg(agg5#32)#152, avg(agg6#33)#153, avg(agg7#34)#154] +Results [11]: [i_item_id#17, ca_country#26, null AS ca_state#155, null AS county#156, avg(agg1#28)#148 AS agg1#157, avg(agg2#29)#149 AS agg2#158, avg(agg3#30)#150 AS agg3#159, avg(agg4#31)#151 AS agg4#160, avg(agg5#32)#152 AS agg5#161, avg(agg6#33)#153 AS agg6#162, avg(agg7#34)#154 AS agg7#163] (99) Scan parquet default.catalog_sales Output [9]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9] @@ -623,135 +623,135 @@ Output [9]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5 Input [11]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_demo_sk#11, cd_dep_count#14] (105) ReusedExchange [Reuses operator id: 161] -Output [1]: [d_date_sk#16] +Output [1]: [d_date_sk#15] (106) BroadcastHashJoin [codegen id : 49] Left keys [1]: [cs_sold_date_sk#9] -Right keys [1]: [d_date_sk#16] +Right keys [1]: [d_date_sk#15] Join condition: None (107) Project [codegen id : 49] Output [8]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14] -Input [10]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, d_date_sk#16] +Input [10]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, d_date_sk#15] (108) Scan parquet default.customer -Output [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Output [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [In(c_birth_month, [1,10,12,4,5,9]), IsNotNull(c_customer_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (109) ColumnarToRow [codegen id : 46] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] (110) Filter [codegen id : 46] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] -Condition : (((c_birth_month#24 IN (9,5,12,4,1,10) AND isnotnull(c_customer_sk#21)) AND isnotnull(c_current_cdemo_sk#22)) AND isnotnull(c_current_addr_sk#23)) +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] +Condition : (((c_birth_month#21 IN (9,5,12,4,1,10) AND isnotnull(c_customer_sk#18)) AND isnotnull(c_current_cdemo_sk#19)) AND isnotnull(c_current_addr_sk#20)) (111) Project [codegen id : 46] -Output [4]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_year#25] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_month#24, c_birth_year#25] +Output [4]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_year#22] +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_month#21, c_birth_year#22] (112) Scan parquet default.customer_address -Output [2]: [ca_address_sk#26, ca_state#28] +Output [2]: [ca_address_sk#23, ca_state#25] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [AL,MS,NC,ND,OK,TN,WI]), IsNotNull(ca_address_sk)] ReadSchema: struct (113) ColumnarToRow [codegen id : 45] -Input [2]: [ca_address_sk#26, ca_state#28] +Input [2]: [ca_address_sk#23, ca_state#25] (114) Filter [codegen id : 45] -Input [2]: [ca_address_sk#26, ca_state#28] -Condition : (ca_state#28 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#26)) +Input [2]: [ca_address_sk#23, ca_state#25] +Condition : (ca_state#25 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#23)) (115) Project [codegen id : 45] -Output [1]: [ca_address_sk#26] -Input [2]: [ca_address_sk#26, ca_state#28] +Output [1]: [ca_address_sk#23] +Input [2]: [ca_address_sk#23, ca_state#25] (116) BroadcastExchange -Input [1]: [ca_address_sk#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#180] +Input [1]: [ca_address_sk#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=17] (117) BroadcastHashJoin [codegen id : 46] -Left keys [1]: [c_current_addr_sk#23] -Right keys [1]: [ca_address_sk#26] +Left keys [1]: [c_current_addr_sk#20] +Right keys [1]: [ca_address_sk#23] Join condition: None (118) Project [codegen id : 46] -Output [3]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25] -Input [5]: [c_customer_sk#21, c_current_cdemo_sk#22, c_current_addr_sk#23, c_birth_year#25, ca_address_sk#26] +Output [3]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22] +Input [5]: [c_customer_sk#18, c_current_cdemo_sk#19, c_current_addr_sk#20, c_birth_year#22, ca_address_sk#23] (119) BroadcastExchange -Input [3]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#181] +Input [3]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [plan_id=18] (120) Scan parquet default.customer_demographics -Output [1]: [cd_demo_sk#32] +Output [1]: [cd_demo_sk#27] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (121) ColumnarToRow -Input [1]: [cd_demo_sk#32] +Input [1]: [cd_demo_sk#27] (122) Filter -Input [1]: [cd_demo_sk#32] -Condition : isnotnull(cd_demo_sk#32) +Input [1]: [cd_demo_sk#27] +Condition : isnotnull(cd_demo_sk#27) (123) BroadcastHashJoin [codegen id : 47] -Left keys [1]: [c_current_cdemo_sk#22] -Right keys [1]: [cd_demo_sk#32] +Left keys [1]: [c_current_cdemo_sk#19] +Right keys [1]: [cd_demo_sk#27] Join condition: None (124) Project [codegen id : 47] -Output [2]: [c_customer_sk#21, c_birth_year#25] -Input [4]: [c_customer_sk#21, c_current_cdemo_sk#22, c_birth_year#25, cd_demo_sk#32] +Output [2]: [c_customer_sk#18, c_birth_year#22] +Input [4]: [c_customer_sk#18, c_current_cdemo_sk#19, c_birth_year#22, cd_demo_sk#27] (125) BroadcastExchange -Input [2]: [c_customer_sk#21, c_birth_year#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#182] +Input [2]: [c_customer_sk#18, c_birth_year#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=19] (126) BroadcastHashJoin [codegen id : 49] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#21] +Right keys [1]: [c_customer_sk#18] Join condition: None (127) Project [codegen id : 49] -Output [8]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#25] -Input [10]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_customer_sk#21, c_birth_year#25] +Output [8]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#22] +Input [10]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_customer_sk#18, c_birth_year#22] (128) ReusedExchange [Reuses operator id: 17] -Output [2]: [i_item_sk#17, i_item_id#18] +Output [2]: [i_item_sk#16, i_item_id#17] (129) BroadcastHashJoin [codegen id : 49] Left keys [1]: [cs_item_sk#3] -Right keys [1]: [i_item_sk#17] +Right keys [1]: [i_item_sk#16] Join condition: None (130) Project [codegen id : 49] -Output [8]: [i_item_id#18, cast(cs_quantity#4 as decimal(12,2)) AS agg1#35, cast(cs_list_price#5 as decimal(12,2)) AS agg2#36, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#37, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#38, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#39, cast(c_birth_year#25 as decimal(12,2)) AS agg6#40, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#41] -Input [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#25, i_item_sk#17, i_item_id#18] +Output [8]: [i_item_id#17, cast(cs_quantity#4 as decimal(12,2)) AS agg1#28, cast(cs_list_price#5 as decimal(12,2)) AS agg2#29, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#30, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#31, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#32, cast(c_birth_year#22 as decimal(12,2)) AS agg6#33, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#34] +Input [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#22, i_item_sk#16, i_item_id#17] (131) HashAggregate [codegen id : 49] -Input [8]: [i_item_id#18, agg1#35, agg2#36, agg3#37, agg4#38, agg5#39, agg6#40, agg7#41] -Keys [1]: [i_item_id#18] -Functions [7]: [partial_avg(agg1#35), partial_avg(agg2#36), partial_avg(agg3#37), partial_avg(agg4#38), partial_avg(agg5#39), partial_avg(agg6#40), partial_avg(agg7#41)] -Aggregate Attributes [14]: [sum#183, count#184, sum#185, count#186, sum#187, count#188, sum#189, count#190, sum#191, count#192, sum#193, count#194, sum#195, count#196] -Results [15]: [i_item_id#18, sum#197, count#198, sum#199, count#200, sum#201, count#202, sum#203, count#204, sum#205, count#206, sum#207, count#208, sum#209, count#210] +Input [8]: [i_item_id#17, agg1#28, agg2#29, agg3#30, agg4#31, agg5#32, agg6#33, agg7#34] +Keys [1]: [i_item_id#17] +Functions [7]: [partial_avg(agg1#28), partial_avg(agg2#29), partial_avg(agg3#30), partial_avg(agg4#31), partial_avg(agg5#32), partial_avg(agg6#33), partial_avg(agg7#34)] +Aggregate Attributes [14]: [sum#164, count#165, sum#166, count#167, sum#168, count#169, sum#170, count#171, sum#172, count#173, sum#174, count#175, sum#176, count#177] +Results [15]: [i_item_id#17, sum#178, count#179, sum#180, count#181, sum#182, count#183, sum#184, count#185, sum#186, count#187, sum#188, count#189, sum#190, count#191] (132) Exchange -Input [15]: [i_item_id#18, sum#197, count#198, sum#199, count#200, sum#201, count#202, sum#203, count#204, sum#205, count#206, sum#207, count#208, sum#209, count#210] -Arguments: hashpartitioning(i_item_id#18, 5), ENSURE_REQUIREMENTS, [id=#211] +Input [15]: [i_item_id#17, sum#178, count#179, sum#180, count#181, sum#182, count#183, sum#184, count#185, sum#186, count#187, sum#188, count#189, sum#190, count#191] +Arguments: hashpartitioning(i_item_id#17, 5), ENSURE_REQUIREMENTS, [plan_id=20] (133) HashAggregate [codegen id : 50] -Input [15]: [i_item_id#18, sum#197, count#198, sum#199, count#200, sum#201, count#202, sum#203, count#204, sum#205, count#206, sum#207, count#208, sum#209, count#210] -Keys [1]: [i_item_id#18] -Functions [7]: [avg(agg1#35), avg(agg2#36), avg(agg3#37), avg(agg4#38), avg(agg5#39), avg(agg6#40), avg(agg7#41)] -Aggregate Attributes [7]: [avg(agg1#35)#212, avg(agg2#36)#213, avg(agg3#37)#214, avg(agg4#38)#215, avg(agg5#39)#216, avg(agg6#40)#217, avg(agg7#41)#218] -Results [11]: [i_item_id#18, null AS ca_country#219, null AS ca_state#220, null AS county#221, avg(agg1#35)#212 AS agg1#222, avg(agg2#36)#213 AS agg2#223, avg(agg3#37)#214 AS agg3#224, avg(agg4#38)#215 AS agg4#225, avg(agg5#39)#216 AS agg5#226, avg(agg6#40)#217 AS agg6#227, avg(agg7#41)#218 AS agg7#228] +Input [15]: [i_item_id#17, sum#178, count#179, sum#180, count#181, sum#182, count#183, sum#184, count#185, sum#186, count#187, sum#188, count#189, sum#190, count#191] +Keys [1]: [i_item_id#17] +Functions [7]: [avg(agg1#28), avg(agg2#29), avg(agg3#30), avg(agg4#31), avg(agg5#32), avg(agg6#33), avg(agg7#34)] +Aggregate Attributes [7]: [avg(agg1#28)#192, avg(agg2#29)#193, avg(agg3#30)#194, avg(agg4#31)#195, avg(agg5#32)#196, avg(agg6#33)#197, avg(agg7#34)#198] +Results [11]: [i_item_id#17, null AS ca_country#199, null AS ca_state#200, null AS county#201, avg(agg1#28)#192 AS agg1#202, avg(agg2#29)#193 AS agg2#203, avg(agg3#30)#194 AS agg3#204, avg(agg4#31)#195 AS agg4#205, avg(agg5#32)#196 AS agg5#206, avg(agg6#33)#197 AS agg6#207, avg(agg7#34)#198 AS agg7#208] (134) Scan parquet default.catalog_sales Output [9]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9] @@ -781,79 +781,79 @@ Output [9]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5 Input [11]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_demo_sk#11, cd_dep_count#14] (140) ReusedExchange [Reuses operator id: 161] -Output [1]: [d_date_sk#16] +Output [1]: [d_date_sk#15] (141) BroadcastHashJoin [codegen id : 57] Left keys [1]: [cs_sold_date_sk#9] -Right keys [1]: [d_date_sk#16] +Right keys [1]: [d_date_sk#15] Join condition: None (142) Project [codegen id : 57] Output [8]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14] -Input [10]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, d_date_sk#16] +Input [10]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, d_date_sk#15] (143) Scan parquet default.item -Output [1]: [i_item_sk#17] +Output [1]: [i_item_sk#16] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (144) ColumnarToRow [codegen id : 53] -Input [1]: [i_item_sk#17] +Input [1]: [i_item_sk#16] (145) Filter [codegen id : 53] -Input [1]: [i_item_sk#17] -Condition : isnotnull(i_item_sk#17) +Input [1]: [i_item_sk#16] +Condition : isnotnull(i_item_sk#16) (146) BroadcastExchange -Input [1]: [i_item_sk#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#229] +Input [1]: [i_item_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=21] (147) BroadcastHashJoin [codegen id : 57] Left keys [1]: [cs_item_sk#3] -Right keys [1]: [i_item_sk#17] +Right keys [1]: [i_item_sk#16] Join condition: None (148) Project [codegen id : 57] Output [7]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14] -Input [9]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_sk#17] +Input [9]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, i_item_sk#16] (149) ReusedExchange [Reuses operator id: 125] -Output [2]: [c_customer_sk#21, c_birth_year#25] +Output [2]: [c_customer_sk#18, c_birth_year#22] (150) BroadcastHashJoin [codegen id : 57] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#21] +Right keys [1]: [c_customer_sk#18] Join condition: None (151) Project [codegen id : 57] -Output [7]: [cast(cs_quantity#4 as decimal(12,2)) AS agg1#35, cast(cs_list_price#5 as decimal(12,2)) AS agg2#36, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#37, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#38, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#39, cast(c_birth_year#25 as decimal(12,2)) AS agg6#40, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#41] -Input [9]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_customer_sk#21, c_birth_year#25] +Output [7]: [cast(cs_quantity#4 as decimal(12,2)) AS agg1#28, cast(cs_list_price#5 as decimal(12,2)) AS agg2#29, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#30, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#31, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#32, cast(c_birth_year#22 as decimal(12,2)) AS agg6#33, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#34] +Input [9]: [cs_bill_customer_sk#1, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_customer_sk#18, c_birth_year#22] (152) HashAggregate [codegen id : 57] -Input [7]: [agg1#35, agg2#36, agg3#37, agg4#38, agg5#39, agg6#40, agg7#41] +Input [7]: [agg1#28, agg2#29, agg3#30, agg4#31, agg5#32, agg6#33, agg7#34] Keys: [] -Functions [7]: [partial_avg(agg1#35), partial_avg(agg2#36), partial_avg(agg3#37), partial_avg(agg4#38), partial_avg(agg5#39), partial_avg(agg6#40), partial_avg(agg7#41)] -Aggregate Attributes [14]: [sum#230, count#231, sum#232, count#233, sum#234, count#235, sum#236, count#237, sum#238, count#239, sum#240, count#241, sum#242, count#243] -Results [14]: [sum#244, count#245, sum#246, count#247, sum#248, count#249, sum#250, count#251, sum#252, count#253, sum#254, count#255, sum#256, count#257] +Functions [7]: [partial_avg(agg1#28), partial_avg(agg2#29), partial_avg(agg3#30), partial_avg(agg4#31), partial_avg(agg5#32), partial_avg(agg6#33), partial_avg(agg7#34)] +Aggregate Attributes [14]: [sum#209, count#210, sum#211, count#212, sum#213, count#214, sum#215, count#216, sum#217, count#218, sum#219, count#220, sum#221, count#222] +Results [14]: [sum#223, count#224, sum#225, count#226, sum#227, count#228, sum#229, count#230, sum#231, count#232, sum#233, count#234, sum#235, count#236] (153) Exchange -Input [14]: [sum#244, count#245, sum#246, count#247, sum#248, count#249, sum#250, count#251, sum#252, count#253, sum#254, count#255, sum#256, count#257] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#258] +Input [14]: [sum#223, count#224, sum#225, count#226, sum#227, count#228, sum#229, count#230, sum#231, count#232, sum#233, count#234, sum#235, count#236] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=22] (154) HashAggregate [codegen id : 58] -Input [14]: [sum#244, count#245, sum#246, count#247, sum#248, count#249, sum#250, count#251, sum#252, count#253, sum#254, count#255, sum#256, count#257] +Input [14]: [sum#223, count#224, sum#225, count#226, sum#227, count#228, sum#229, count#230, sum#231, count#232, sum#233, count#234, sum#235, count#236] Keys: [] -Functions [7]: [avg(agg1#35), avg(agg2#36), avg(agg3#37), avg(agg4#38), avg(agg5#39), avg(agg6#40), avg(agg7#41)] -Aggregate Attributes [7]: [avg(agg1#35)#259, avg(agg2#36)#260, avg(agg3#37)#261, avg(agg4#38)#262, avg(agg5#39)#263, avg(agg6#40)#264, avg(agg7#41)#265] -Results [11]: [null AS i_item_id#266, null AS ca_country#267, null AS ca_state#268, null AS county#269, avg(agg1#35)#259 AS agg1#270, avg(agg2#36)#260 AS agg2#271, avg(agg3#37)#261 AS agg3#272, avg(agg4#38)#262 AS agg4#273, avg(agg5#39)#263 AS agg5#274, avg(agg6#40)#264 AS agg6#275, avg(agg7#41)#265 AS agg7#276] +Functions [7]: [avg(agg1#28), avg(agg2#29), avg(agg3#30), avg(agg4#31), avg(agg5#32), avg(agg6#33), avg(agg7#34)] +Aggregate Attributes [7]: [avg(agg1#28)#237, avg(agg2#29)#238, avg(agg3#30)#239, avg(agg4#31)#240, avg(agg5#32)#241, avg(agg6#33)#242, avg(agg7#34)#243] +Results [11]: [null AS i_item_id#244, null AS ca_country#245, null AS ca_state#246, null AS county#247, avg(agg1#28)#237 AS agg1#248, avg(agg2#29)#238 AS agg2#249, avg(agg3#30)#239 AS agg3#250, avg(agg4#31)#240 AS agg4#251, avg(agg5#32)#241 AS agg5#252, avg(agg6#33)#242 AS agg6#253, avg(agg7#34)#243 AS agg7#254] (155) Union (156) TakeOrderedAndProject -Input [11]: [i_item_id#18, ca_country#29, ca_state#28, ca_county#27, agg1#78, agg2#79, agg3#80, agg4#81, agg5#82, agg6#83, agg7#84] -Arguments: 100, [ca_country#29 ASC NULLS FIRST, ca_state#28 ASC NULLS FIRST, ca_county#27 ASC NULLS FIRST, i_item_id#18 ASC NULLS FIRST], [i_item_id#18, ca_country#29, ca_state#28, ca_county#27, agg1#78, agg2#79, agg3#80, agg4#81, agg5#82, agg6#83, agg7#84] +Input [11]: [i_item_id#17, ca_country#26, ca_state#25, ca_county#24, agg1#70, agg2#71, agg3#72, agg4#73, agg5#74, agg6#75, agg7#76] +Arguments: 100, [ca_country#26 ASC NULLS FIRST, ca_state#25 ASC NULLS FIRST, ca_county#24 ASC NULLS FIRST, i_item_id#17 ASC NULLS FIRST], [i_item_id#17, ca_country#26, ca_state#25, ca_county#24, agg1#70, agg2#71, agg3#72, agg4#73, agg5#74, agg6#75, agg7#76] ===== Subqueries ===== @@ -866,26 +866,26 @@ BroadcastExchange (161) (157) Scan parquet default.date_dim -Output [2]: [d_date_sk#16, d_year#277] +Output [2]: [d_date_sk#15, d_year#255] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (158) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#16, d_year#277] +Input [2]: [d_date_sk#15, d_year#255] (159) Filter [codegen id : 1] -Input [2]: [d_date_sk#16, d_year#277] -Condition : ((isnotnull(d_year#277) AND (d_year#277 = 2001)) AND isnotnull(d_date_sk#16)) +Input [2]: [d_date_sk#15, d_year#255] +Condition : ((isnotnull(d_year#255) AND (d_year#255 = 2001)) AND isnotnull(d_date_sk#15)) (160) Project [codegen id : 1] -Output [1]: [d_date_sk#16] -Input [2]: [d_date_sk#16, d_year#277] +Output [1]: [d_date_sk#15] +Input [2]: [d_date_sk#15, d_year#255] (161) BroadcastExchange -Input [1]: [d_date_sk#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#278] +Input [1]: [d_date_sk#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=23] Subquery:2 Hosting operator id = 99 Hosting Expression = cs_sold_date_sk#9 IN dynamicpruning#10 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q18a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q18a/explain.txt index 7bd7a7ae80176..daea93e01540d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q18a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q18a/explain.txt @@ -189,7 +189,7 @@ Input [4]: [cd_demo_sk#11, cd_gender#12, cd_education_status#13, cd_dep_count#14 (8) BroadcastExchange Input [2]: [cd_demo_sk#11, cd_dep_count#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 7] Left keys [1]: [cs_bill_cdemo_sk#2] @@ -201,146 +201,146 @@ Output [9]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5 Input [11]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_demo_sk#11, cd_dep_count#14] (11) Scan parquet default.customer -Output [5]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_month#19, c_birth_year#20] +Output [5]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_month#18, c_birth_year#19] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [In(c_birth_month, [1,10,12,4,5,9]), IsNotNull(c_customer_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [5]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_month#19, c_birth_year#20] +Input [5]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_month#18, c_birth_year#19] (13) Filter [codegen id : 2] -Input [5]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_month#19, c_birth_year#20] -Condition : (((c_birth_month#19 IN (9,5,12,4,1,10) AND isnotnull(c_customer_sk#16)) AND isnotnull(c_current_cdemo_sk#17)) AND isnotnull(c_current_addr_sk#18)) +Input [5]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_month#18, c_birth_year#19] +Condition : (((c_birth_month#18 IN (9,5,12,4,1,10) AND isnotnull(c_customer_sk#15)) AND isnotnull(c_current_cdemo_sk#16)) AND isnotnull(c_current_addr_sk#17)) (14) Project [codegen id : 2] -Output [4]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] -Input [5]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_month#19, c_birth_year#20] +Output [4]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] +Input [5]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_month#18, c_birth_year#19] (15) BroadcastExchange -Input [4]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#21] +Input [4]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 7] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#16] +Right keys [1]: [c_customer_sk#15] Join condition: None (17) Project [codegen id : 7] -Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] -Input [13]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] +Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] +Input [13]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] (18) Scan parquet default.customer_demographics -Output [1]: [cd_demo_sk#22] +Output [1]: [cd_demo_sk#20] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (19) ColumnarToRow [codegen id : 3] -Input [1]: [cd_demo_sk#22] +Input [1]: [cd_demo_sk#20] (20) Filter [codegen id : 3] -Input [1]: [cd_demo_sk#22] -Condition : isnotnull(cd_demo_sk#22) +Input [1]: [cd_demo_sk#20] +Condition : isnotnull(cd_demo_sk#20) (21) BroadcastExchange -Input [1]: [cd_demo_sk#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23] +Input [1]: [cd_demo_sk#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (22) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [c_current_cdemo_sk#17] -Right keys [1]: [cd_demo_sk#22] +Left keys [1]: [c_current_cdemo_sk#16] +Right keys [1]: [cd_demo_sk#20] Join condition: None (23) Project [codegen id : 7] -Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#18, c_birth_year#20] -Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20, cd_demo_sk#22] +Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#17, c_birth_year#19] +Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19, cd_demo_sk#20] (24) Scan parquet default.customer_address -Output [4]: [ca_address_sk#24, ca_county#25, ca_state#26, ca_country#27] +Output [4]: [ca_address_sk#21, ca_county#22, ca_state#23, ca_country#24] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [AL,MS,NC,ND,OK,TN,WI]), IsNotNull(ca_address_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 4] -Input [4]: [ca_address_sk#24, ca_county#25, ca_state#26, ca_country#27] +Input [4]: [ca_address_sk#21, ca_county#22, ca_state#23, ca_country#24] (26) Filter [codegen id : 4] -Input [4]: [ca_address_sk#24, ca_county#25, ca_state#26, ca_country#27] -Condition : (ca_state#26 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#24)) +Input [4]: [ca_address_sk#21, ca_county#22, ca_state#23, ca_country#24] +Condition : (ca_state#23 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#21)) (27) BroadcastExchange -Input [4]: [ca_address_sk#24, ca_county#25, ca_state#26, ca_country#27] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#28] +Input [4]: [ca_address_sk#21, ca_county#22, ca_state#23, ca_country#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (28) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [c_current_addr_sk#18] -Right keys [1]: [ca_address_sk#24] +Left keys [1]: [c_current_addr_sk#17] +Right keys [1]: [ca_address_sk#21] Join condition: None (29) Project [codegen id : 7] -Output [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#20, ca_county#25, ca_state#26, ca_country#27] -Input [14]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#18, c_birth_year#20, ca_address_sk#24, ca_county#25, ca_state#26, ca_country#27] +Output [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#19, ca_county#22, ca_state#23, ca_country#24] +Input [14]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#17, c_birth_year#19, ca_address_sk#21, ca_county#22, ca_state#23, ca_country#24] (30) ReusedExchange [Reuses operator id: 158] -Output [1]: [d_date_sk#29] +Output [1]: [d_date_sk#25] (31) BroadcastHashJoin [codegen id : 7] Left keys [1]: [cs_sold_date_sk#9] -Right keys [1]: [d_date_sk#29] +Right keys [1]: [d_date_sk#25] Join condition: None (32) Project [codegen id : 7] -Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, ca_county#25, ca_state#26, ca_country#27] -Input [13]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#20, ca_county#25, ca_state#26, ca_country#27, d_date_sk#29] +Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, ca_county#22, ca_state#23, ca_country#24] +Input [13]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#19, ca_county#22, ca_state#23, ca_country#24, d_date_sk#25] (33) Scan parquet default.item -Output [2]: [i_item_sk#30, i_item_id#31] +Output [2]: [i_item_sk#26, i_item_id#27] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 6] -Input [2]: [i_item_sk#30, i_item_id#31] +Input [2]: [i_item_sk#26, i_item_id#27] (35) Filter [codegen id : 6] -Input [2]: [i_item_sk#30, i_item_id#31] -Condition : isnotnull(i_item_sk#30) +Input [2]: [i_item_sk#26, i_item_id#27] +Condition : isnotnull(i_item_sk#26) (36) BroadcastExchange -Input [2]: [i_item_sk#30, i_item_id#31] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#32] +Input [2]: [i_item_sk#26, i_item_id#27] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (37) BroadcastHashJoin [codegen id : 7] Left keys [1]: [cs_item_sk#3] -Right keys [1]: [i_item_sk#30] +Right keys [1]: [i_item_sk#26] Join condition: None (38) Project [codegen id : 7] -Output [11]: [i_item_id#31, ca_country#27, ca_state#26, ca_county#25, cast(cs_quantity#4 as decimal(12,2)) AS agg1#33, cast(cs_list_price#5 as decimal(12,2)) AS agg2#34, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#35, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#36, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#37, cast(c_birth_year#20 as decimal(12,2)) AS agg6#38, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#39] -Input [13]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, ca_county#25, ca_state#26, ca_country#27, i_item_sk#30, i_item_id#31] +Output [11]: [i_item_id#27, ca_country#24, ca_state#23, ca_county#22, cast(cs_quantity#4 as decimal(12,2)) AS agg1#28, cast(cs_list_price#5 as decimal(12,2)) AS agg2#29, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#30, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#31, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#32, cast(c_birth_year#19 as decimal(12,2)) AS agg6#33, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#34] +Input [13]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, ca_county#22, ca_state#23, ca_country#24, i_item_sk#26, i_item_id#27] (39) HashAggregate [codegen id : 7] -Input [11]: [i_item_id#31, ca_country#27, ca_state#26, ca_county#25, agg1#33, agg2#34, agg3#35, agg4#36, agg5#37, agg6#38, agg7#39] -Keys [4]: [i_item_id#31, ca_country#27, ca_state#26, ca_county#25] -Functions [7]: [partial_avg(agg1#33), partial_avg(agg2#34), partial_avg(agg3#35), partial_avg(agg4#36), partial_avg(agg5#37), partial_avg(agg6#38), partial_avg(agg7#39)] -Aggregate Attributes [14]: [sum#40, count#41, sum#42, count#43, sum#44, count#45, sum#46, count#47, sum#48, count#49, sum#50, count#51, sum#52, count#53] -Results [18]: [i_item_id#31, ca_country#27, ca_state#26, ca_county#25, sum#54, count#55, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63, sum#64, count#65, sum#66, count#67] +Input [11]: [i_item_id#27, ca_country#24, ca_state#23, ca_county#22, agg1#28, agg2#29, agg3#30, agg4#31, agg5#32, agg6#33, agg7#34] +Keys [4]: [i_item_id#27, ca_country#24, ca_state#23, ca_county#22] +Functions [7]: [partial_avg(agg1#28), partial_avg(agg2#29), partial_avg(agg3#30), partial_avg(agg4#31), partial_avg(agg5#32), partial_avg(agg6#33), partial_avg(agg7#34)] +Aggregate Attributes [14]: [sum#35, count#36, sum#37, count#38, sum#39, count#40, sum#41, count#42, sum#43, count#44, sum#45, count#46, sum#47, count#48] +Results [18]: [i_item_id#27, ca_country#24, ca_state#23, ca_county#22, sum#49, count#50, sum#51, count#52, sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60, sum#61, count#62] (40) Exchange -Input [18]: [i_item_id#31, ca_country#27, ca_state#26, ca_county#25, sum#54, count#55, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63, sum#64, count#65, sum#66, count#67] -Arguments: hashpartitioning(i_item_id#31, ca_country#27, ca_state#26, ca_county#25, 5), ENSURE_REQUIREMENTS, [id=#68] +Input [18]: [i_item_id#27, ca_country#24, ca_state#23, ca_county#22, sum#49, count#50, sum#51, count#52, sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60, sum#61, count#62] +Arguments: hashpartitioning(i_item_id#27, ca_country#24, ca_state#23, ca_county#22, 5), ENSURE_REQUIREMENTS, [plan_id=6] (41) HashAggregate [codegen id : 8] -Input [18]: [i_item_id#31, ca_country#27, ca_state#26, ca_county#25, sum#54, count#55, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63, sum#64, count#65, sum#66, count#67] -Keys [4]: [i_item_id#31, ca_country#27, ca_state#26, ca_county#25] -Functions [7]: [avg(agg1#33), avg(agg2#34), avg(agg3#35), avg(agg4#36), avg(agg5#37), avg(agg6#38), avg(agg7#39)] -Aggregate Attributes [7]: [avg(agg1#33)#69, avg(agg2#34)#70, avg(agg3#35)#71, avg(agg4#36)#72, avg(agg5#37)#73, avg(agg6#38)#74, avg(agg7#39)#75] -Results [11]: [i_item_id#31, ca_country#27, ca_state#26, ca_county#25, avg(agg1#33)#69 AS agg1#76, avg(agg2#34)#70 AS agg2#77, avg(agg3#35)#71 AS agg3#78, avg(agg4#36)#72 AS agg4#79, avg(agg5#37)#73 AS agg5#80, avg(agg6#38)#74 AS agg6#81, avg(agg7#39)#75 AS agg7#82] +Input [18]: [i_item_id#27, ca_country#24, ca_state#23, ca_county#22, sum#49, count#50, sum#51, count#52, sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60, sum#61, count#62] +Keys [4]: [i_item_id#27, ca_country#24, ca_state#23, ca_county#22] +Functions [7]: [avg(agg1#28), avg(agg2#29), avg(agg3#30), avg(agg4#31), avg(agg5#32), avg(agg6#33), avg(agg7#34)] +Aggregate Attributes [7]: [avg(agg1#28)#63, avg(agg2#29)#64, avg(agg3#30)#65, avg(agg4#31)#66, avg(agg5#32)#67, avg(agg6#33)#68, avg(agg7#34)#69] +Results [11]: [i_item_id#27, ca_country#24, ca_state#23, ca_county#22, avg(agg1#28)#63 AS agg1#70, avg(agg2#29)#64 AS agg2#71, avg(agg3#30)#65 AS agg3#72, avg(agg4#31)#66 AS agg4#73, avg(agg5#32)#67 AS agg5#74, avg(agg6#33)#68 AS agg6#75, avg(agg7#34)#69 AS agg7#76] (42) Scan parquet default.catalog_sales Output [9]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9] @@ -370,97 +370,97 @@ Output [9]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5 Input [11]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_demo_sk#11, cd_dep_count#14] (48) ReusedExchange [Reuses operator id: 15] -Output [4]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] +Output [4]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] (49) BroadcastHashJoin [codegen id : 15] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#16] +Right keys [1]: [c_customer_sk#15] Join condition: None (50) Project [codegen id : 15] -Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] -Input [13]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] +Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] +Input [13]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] (51) ReusedExchange [Reuses operator id: 21] -Output [1]: [cd_demo_sk#22] +Output [1]: [cd_demo_sk#20] (52) BroadcastHashJoin [codegen id : 15] -Left keys [1]: [c_current_cdemo_sk#17] -Right keys [1]: [cd_demo_sk#22] +Left keys [1]: [c_current_cdemo_sk#16] +Right keys [1]: [cd_demo_sk#20] Join condition: None (53) Project [codegen id : 15] -Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#18, c_birth_year#20] -Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20, cd_demo_sk#22] +Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#17, c_birth_year#19] +Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19, cd_demo_sk#20] (54) Scan parquet default.customer_address -Output [3]: [ca_address_sk#24, ca_state#26, ca_country#27] +Output [3]: [ca_address_sk#21, ca_state#23, ca_country#24] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [AL,MS,NC,ND,OK,TN,WI]), IsNotNull(ca_address_sk)] ReadSchema: struct (55) ColumnarToRow [codegen id : 12] -Input [3]: [ca_address_sk#24, ca_state#26, ca_country#27] +Input [3]: [ca_address_sk#21, ca_state#23, ca_country#24] (56) Filter [codegen id : 12] -Input [3]: [ca_address_sk#24, ca_state#26, ca_country#27] -Condition : (ca_state#26 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#24)) +Input [3]: [ca_address_sk#21, ca_state#23, ca_country#24] +Condition : (ca_state#23 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#21)) (57) BroadcastExchange -Input [3]: [ca_address_sk#24, ca_state#26, ca_country#27] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#83] +Input [3]: [ca_address_sk#21, ca_state#23, ca_country#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (58) BroadcastHashJoin [codegen id : 15] -Left keys [1]: [c_current_addr_sk#18] -Right keys [1]: [ca_address_sk#24] +Left keys [1]: [c_current_addr_sk#17] +Right keys [1]: [ca_address_sk#21] Join condition: None (59) Project [codegen id : 15] -Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#20, ca_state#26, ca_country#27] -Input [13]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#18, c_birth_year#20, ca_address_sk#24, ca_state#26, ca_country#27] +Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#19, ca_state#23, ca_country#24] +Input [13]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#17, c_birth_year#19, ca_address_sk#21, ca_state#23, ca_country#24] (60) ReusedExchange [Reuses operator id: 158] -Output [1]: [d_date_sk#29] +Output [1]: [d_date_sk#25] (61) BroadcastHashJoin [codegen id : 15] Left keys [1]: [cs_sold_date_sk#9] -Right keys [1]: [d_date_sk#29] +Right keys [1]: [d_date_sk#25] Join condition: None (62) Project [codegen id : 15] -Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, ca_state#26, ca_country#27] -Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#20, ca_state#26, ca_country#27, d_date_sk#29] +Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, ca_state#23, ca_country#24] +Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#19, ca_state#23, ca_country#24, d_date_sk#25] (63) ReusedExchange [Reuses operator id: 36] -Output [2]: [i_item_sk#30, i_item_id#31] +Output [2]: [i_item_sk#26, i_item_id#27] (64) BroadcastHashJoin [codegen id : 15] Left keys [1]: [cs_item_sk#3] -Right keys [1]: [i_item_sk#30] +Right keys [1]: [i_item_sk#26] Join condition: None (65) Project [codegen id : 15] -Output [10]: [i_item_id#31, ca_country#27, ca_state#26, cast(cs_quantity#4 as decimal(12,2)) AS agg1#33, cast(cs_list_price#5 as decimal(12,2)) AS agg2#34, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#35, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#36, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#37, cast(c_birth_year#20 as decimal(12,2)) AS agg6#38, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#39] -Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, ca_state#26, ca_country#27, i_item_sk#30, i_item_id#31] +Output [10]: [i_item_id#27, ca_country#24, ca_state#23, cast(cs_quantity#4 as decimal(12,2)) AS agg1#28, cast(cs_list_price#5 as decimal(12,2)) AS agg2#29, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#30, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#31, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#32, cast(c_birth_year#19 as decimal(12,2)) AS agg6#33, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#34] +Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, ca_state#23, ca_country#24, i_item_sk#26, i_item_id#27] (66) HashAggregate [codegen id : 15] -Input [10]: [i_item_id#31, ca_country#27, ca_state#26, agg1#33, agg2#34, agg3#35, agg4#36, agg5#37, agg6#38, agg7#39] -Keys [3]: [i_item_id#31, ca_country#27, ca_state#26] -Functions [7]: [partial_avg(agg1#33), partial_avg(agg2#34), partial_avg(agg3#35), partial_avg(agg4#36), partial_avg(agg5#37), partial_avg(agg6#38), partial_avg(agg7#39)] -Aggregate Attributes [14]: [sum#84, count#85, sum#86, count#87, sum#88, count#89, sum#90, count#91, sum#92, count#93, sum#94, count#95, sum#96, count#97] -Results [17]: [i_item_id#31, ca_country#27, ca_state#26, sum#98, count#99, sum#100, count#101, sum#102, count#103, sum#104, count#105, sum#106, count#107, sum#108, count#109, sum#110, count#111] +Input [10]: [i_item_id#27, ca_country#24, ca_state#23, agg1#28, agg2#29, agg3#30, agg4#31, agg5#32, agg6#33, agg7#34] +Keys [3]: [i_item_id#27, ca_country#24, ca_state#23] +Functions [7]: [partial_avg(agg1#28), partial_avg(agg2#29), partial_avg(agg3#30), partial_avg(agg4#31), partial_avg(agg5#32), partial_avg(agg6#33), partial_avg(agg7#34)] +Aggregate Attributes [14]: [sum#77, count#78, sum#79, count#80, sum#81, count#82, sum#83, count#84, sum#85, count#86, sum#87, count#88, sum#89, count#90] +Results [17]: [i_item_id#27, ca_country#24, ca_state#23, sum#91, count#92, sum#93, count#94, sum#95, count#96, sum#97, count#98, sum#99, count#100, sum#101, count#102, sum#103, count#104] (67) Exchange -Input [17]: [i_item_id#31, ca_country#27, ca_state#26, sum#98, count#99, sum#100, count#101, sum#102, count#103, sum#104, count#105, sum#106, count#107, sum#108, count#109, sum#110, count#111] -Arguments: hashpartitioning(i_item_id#31, ca_country#27, ca_state#26, 5), ENSURE_REQUIREMENTS, [id=#112] +Input [17]: [i_item_id#27, ca_country#24, ca_state#23, sum#91, count#92, sum#93, count#94, sum#95, count#96, sum#97, count#98, sum#99, count#100, sum#101, count#102, sum#103, count#104] +Arguments: hashpartitioning(i_item_id#27, ca_country#24, ca_state#23, 5), ENSURE_REQUIREMENTS, [plan_id=8] (68) HashAggregate [codegen id : 16] -Input [17]: [i_item_id#31, ca_country#27, ca_state#26, sum#98, count#99, sum#100, count#101, sum#102, count#103, sum#104, count#105, sum#106, count#107, sum#108, count#109, sum#110, count#111] -Keys [3]: [i_item_id#31, ca_country#27, ca_state#26] -Functions [7]: [avg(agg1#33), avg(agg2#34), avg(agg3#35), avg(agg4#36), avg(agg5#37), avg(agg6#38), avg(agg7#39)] -Aggregate Attributes [7]: [avg(agg1#33)#113, avg(agg2#34)#114, avg(agg3#35)#115, avg(agg4#36)#116, avg(agg5#37)#117, avg(agg6#38)#118, avg(agg7#39)#119] -Results [11]: [i_item_id#31, ca_country#27, ca_state#26, null AS county#120, avg(agg1#33)#113 AS agg1#121, avg(agg2#34)#114 AS agg2#122, avg(agg3#35)#115 AS agg3#123, avg(agg4#36)#116 AS agg4#124, avg(agg5#37)#117 AS agg5#125, avg(agg6#38)#118 AS agg6#126, avg(agg7#39)#119 AS agg7#127] +Input [17]: [i_item_id#27, ca_country#24, ca_state#23, sum#91, count#92, sum#93, count#94, sum#95, count#96, sum#97, count#98, sum#99, count#100, sum#101, count#102, sum#103, count#104] +Keys [3]: [i_item_id#27, ca_country#24, ca_state#23] +Functions [7]: [avg(agg1#28), avg(agg2#29), avg(agg3#30), avg(agg4#31), avg(agg5#32), avg(agg6#33), avg(agg7#34)] +Aggregate Attributes [7]: [avg(agg1#28)#105, avg(agg2#29)#106, avg(agg3#30)#107, avg(agg4#31)#108, avg(agg5#32)#109, avg(agg6#33)#110, avg(agg7#34)#111] +Results [11]: [i_item_id#27, ca_country#24, ca_state#23, null AS county#112, avg(agg1#28)#105 AS agg1#113, avg(agg2#29)#106 AS agg2#114, avg(agg3#30)#107 AS agg3#115, avg(agg4#31)#108 AS agg4#116, avg(agg5#32)#109 AS agg5#117, avg(agg6#33)#110 AS agg6#118, avg(agg7#34)#111 AS agg7#119] (69) Scan parquet default.catalog_sales Output [9]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9] @@ -490,101 +490,101 @@ Output [9]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5 Input [11]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_demo_sk#11, cd_dep_count#14] (75) ReusedExchange [Reuses operator id: 15] -Output [4]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] +Output [4]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] (76) BroadcastHashJoin [codegen id : 23] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#16] +Right keys [1]: [c_customer_sk#15] Join condition: None (77) Project [codegen id : 23] -Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] -Input [13]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] +Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] +Input [13]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] (78) ReusedExchange [Reuses operator id: 21] -Output [1]: [cd_demo_sk#22] +Output [1]: [cd_demo_sk#20] (79) BroadcastHashJoin [codegen id : 23] -Left keys [1]: [c_current_cdemo_sk#17] -Right keys [1]: [cd_demo_sk#22] +Left keys [1]: [c_current_cdemo_sk#16] +Right keys [1]: [cd_demo_sk#20] Join condition: None (80) Project [codegen id : 23] -Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#18, c_birth_year#20] -Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20, cd_demo_sk#22] +Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#17, c_birth_year#19] +Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19, cd_demo_sk#20] (81) Scan parquet default.customer_address -Output [3]: [ca_address_sk#24, ca_state#26, ca_country#27] +Output [3]: [ca_address_sk#21, ca_state#23, ca_country#24] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [AL,MS,NC,ND,OK,TN,WI]), IsNotNull(ca_address_sk)] ReadSchema: struct (82) ColumnarToRow [codegen id : 20] -Input [3]: [ca_address_sk#24, ca_state#26, ca_country#27] +Input [3]: [ca_address_sk#21, ca_state#23, ca_country#24] (83) Filter [codegen id : 20] -Input [3]: [ca_address_sk#24, ca_state#26, ca_country#27] -Condition : (ca_state#26 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#24)) +Input [3]: [ca_address_sk#21, ca_state#23, ca_country#24] +Condition : (ca_state#23 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#21)) (84) Project [codegen id : 20] -Output [2]: [ca_address_sk#24, ca_country#27] -Input [3]: [ca_address_sk#24, ca_state#26, ca_country#27] +Output [2]: [ca_address_sk#21, ca_country#24] +Input [3]: [ca_address_sk#21, ca_state#23, ca_country#24] (85) BroadcastExchange -Input [2]: [ca_address_sk#24, ca_country#27] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#128] +Input [2]: [ca_address_sk#21, ca_country#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] (86) BroadcastHashJoin [codegen id : 23] -Left keys [1]: [c_current_addr_sk#18] -Right keys [1]: [ca_address_sk#24] +Left keys [1]: [c_current_addr_sk#17] +Right keys [1]: [ca_address_sk#21] Join condition: None (87) Project [codegen id : 23] -Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#20, ca_country#27] -Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#18, c_birth_year#20, ca_address_sk#24, ca_country#27] +Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#19, ca_country#24] +Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#17, c_birth_year#19, ca_address_sk#21, ca_country#24] (88) ReusedExchange [Reuses operator id: 158] -Output [1]: [d_date_sk#29] +Output [1]: [d_date_sk#25] (89) BroadcastHashJoin [codegen id : 23] Left keys [1]: [cs_sold_date_sk#9] -Right keys [1]: [d_date_sk#29] +Right keys [1]: [d_date_sk#25] Join condition: None (90) Project [codegen id : 23] -Output [9]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, ca_country#27] -Input [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#20, ca_country#27, d_date_sk#29] +Output [9]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, ca_country#24] +Input [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#19, ca_country#24, d_date_sk#25] (91) ReusedExchange [Reuses operator id: 36] -Output [2]: [i_item_sk#30, i_item_id#31] +Output [2]: [i_item_sk#26, i_item_id#27] (92) BroadcastHashJoin [codegen id : 23] Left keys [1]: [cs_item_sk#3] -Right keys [1]: [i_item_sk#30] +Right keys [1]: [i_item_sk#26] Join condition: None (93) Project [codegen id : 23] -Output [9]: [i_item_id#31, ca_country#27, cast(cs_quantity#4 as decimal(12,2)) AS agg1#33, cast(cs_list_price#5 as decimal(12,2)) AS agg2#34, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#35, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#36, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#37, cast(c_birth_year#20 as decimal(12,2)) AS agg6#38, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#39] -Input [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, ca_country#27, i_item_sk#30, i_item_id#31] +Output [9]: [i_item_id#27, ca_country#24, cast(cs_quantity#4 as decimal(12,2)) AS agg1#28, cast(cs_list_price#5 as decimal(12,2)) AS agg2#29, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#30, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#31, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#32, cast(c_birth_year#19 as decimal(12,2)) AS agg6#33, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#34] +Input [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, ca_country#24, i_item_sk#26, i_item_id#27] (94) HashAggregate [codegen id : 23] -Input [9]: [i_item_id#31, ca_country#27, agg1#33, agg2#34, agg3#35, agg4#36, agg5#37, agg6#38, agg7#39] -Keys [2]: [i_item_id#31, ca_country#27] -Functions [7]: [partial_avg(agg1#33), partial_avg(agg2#34), partial_avg(agg3#35), partial_avg(agg4#36), partial_avg(agg5#37), partial_avg(agg6#38), partial_avg(agg7#39)] -Aggregate Attributes [14]: [sum#129, count#130, sum#131, count#132, sum#133, count#134, sum#135, count#136, sum#137, count#138, sum#139, count#140, sum#141, count#142] -Results [16]: [i_item_id#31, ca_country#27, sum#143, count#144, sum#145, count#146, sum#147, count#148, sum#149, count#150, sum#151, count#152, sum#153, count#154, sum#155, count#156] +Input [9]: [i_item_id#27, ca_country#24, agg1#28, agg2#29, agg3#30, agg4#31, agg5#32, agg6#33, agg7#34] +Keys [2]: [i_item_id#27, ca_country#24] +Functions [7]: [partial_avg(agg1#28), partial_avg(agg2#29), partial_avg(agg3#30), partial_avg(agg4#31), partial_avg(agg5#32), partial_avg(agg6#33), partial_avg(agg7#34)] +Aggregate Attributes [14]: [sum#120, count#121, sum#122, count#123, sum#124, count#125, sum#126, count#127, sum#128, count#129, sum#130, count#131, sum#132, count#133] +Results [16]: [i_item_id#27, ca_country#24, sum#134, count#135, sum#136, count#137, sum#138, count#139, sum#140, count#141, sum#142, count#143, sum#144, count#145, sum#146, count#147] (95) Exchange -Input [16]: [i_item_id#31, ca_country#27, sum#143, count#144, sum#145, count#146, sum#147, count#148, sum#149, count#150, sum#151, count#152, sum#153, count#154, sum#155, count#156] -Arguments: hashpartitioning(i_item_id#31, ca_country#27, 5), ENSURE_REQUIREMENTS, [id=#157] +Input [16]: [i_item_id#27, ca_country#24, sum#134, count#135, sum#136, count#137, sum#138, count#139, sum#140, count#141, sum#142, count#143, sum#144, count#145, sum#146, count#147] +Arguments: hashpartitioning(i_item_id#27, ca_country#24, 5), ENSURE_REQUIREMENTS, [plan_id=10] (96) HashAggregate [codegen id : 24] -Input [16]: [i_item_id#31, ca_country#27, sum#143, count#144, sum#145, count#146, sum#147, count#148, sum#149, count#150, sum#151, count#152, sum#153, count#154, sum#155, count#156] -Keys [2]: [i_item_id#31, ca_country#27] -Functions [7]: [avg(agg1#33), avg(agg2#34), avg(agg3#35), avg(agg4#36), avg(agg5#37), avg(agg6#38), avg(agg7#39)] -Aggregate Attributes [7]: [avg(agg1#33)#158, avg(agg2#34)#159, avg(agg3#35)#160, avg(agg4#36)#161, avg(agg5#37)#162, avg(agg6#38)#163, avg(agg7#39)#164] -Results [11]: [i_item_id#31, ca_country#27, null AS ca_state#165, null AS county#166, avg(agg1#33)#158 AS agg1#167, avg(agg2#34)#159 AS agg2#168, avg(agg3#35)#160 AS agg3#169, avg(agg4#36)#161 AS agg4#170, avg(agg5#37)#162 AS agg5#171, avg(agg6#38)#163 AS agg6#172, avg(agg7#39)#164 AS agg7#173] +Input [16]: [i_item_id#27, ca_country#24, sum#134, count#135, sum#136, count#137, sum#138, count#139, sum#140, count#141, sum#142, count#143, sum#144, count#145, sum#146, count#147] +Keys [2]: [i_item_id#27, ca_country#24] +Functions [7]: [avg(agg1#28), avg(agg2#29), avg(agg3#30), avg(agg4#31), avg(agg5#32), avg(agg6#33), avg(agg7#34)] +Aggregate Attributes [7]: [avg(agg1#28)#148, avg(agg2#29)#149, avg(agg3#30)#150, avg(agg4#31)#151, avg(agg5#32)#152, avg(agg6#33)#153, avg(agg7#34)#154] +Results [11]: [i_item_id#27, ca_country#24, null AS ca_state#155, null AS county#156, avg(agg1#28)#148 AS agg1#157, avg(agg2#29)#149 AS agg2#158, avg(agg3#30)#150 AS agg3#159, avg(agg4#31)#151 AS agg4#160, avg(agg5#32)#152 AS agg5#161, avg(agg6#33)#153 AS agg6#162, avg(agg7#34)#154 AS agg7#163] (97) Scan parquet default.catalog_sales Output [9]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9] @@ -614,101 +614,101 @@ Output [9]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5 Input [11]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_demo_sk#11, cd_dep_count#14] (103) ReusedExchange [Reuses operator id: 15] -Output [4]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] +Output [4]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] (104) BroadcastHashJoin [codegen id : 31] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#16] +Right keys [1]: [c_customer_sk#15] Join condition: None (105) Project [codegen id : 31] -Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] -Input [13]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] +Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] +Input [13]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] (106) ReusedExchange [Reuses operator id: 21] -Output [1]: [cd_demo_sk#22] +Output [1]: [cd_demo_sk#20] (107) BroadcastHashJoin [codegen id : 31] -Left keys [1]: [c_current_cdemo_sk#17] -Right keys [1]: [cd_demo_sk#22] +Left keys [1]: [c_current_cdemo_sk#16] +Right keys [1]: [cd_demo_sk#20] Join condition: None (108) Project [codegen id : 31] -Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#18, c_birth_year#20] -Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20, cd_demo_sk#22] +Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#17, c_birth_year#19] +Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19, cd_demo_sk#20] (109) Scan parquet default.customer_address -Output [2]: [ca_address_sk#24, ca_state#26] +Output [2]: [ca_address_sk#21, ca_state#23] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [In(ca_state, [AL,MS,NC,ND,OK,TN,WI]), IsNotNull(ca_address_sk)] ReadSchema: struct (110) ColumnarToRow [codegen id : 28] -Input [2]: [ca_address_sk#24, ca_state#26] +Input [2]: [ca_address_sk#21, ca_state#23] (111) Filter [codegen id : 28] -Input [2]: [ca_address_sk#24, ca_state#26] -Condition : (ca_state#26 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#24)) +Input [2]: [ca_address_sk#21, ca_state#23] +Condition : (ca_state#23 IN (ND,WI,AL,NC,OK,MS,TN) AND isnotnull(ca_address_sk#21)) (112) Project [codegen id : 28] -Output [1]: [ca_address_sk#24] -Input [2]: [ca_address_sk#24, ca_state#26] +Output [1]: [ca_address_sk#21] +Input [2]: [ca_address_sk#21, ca_state#23] (113) BroadcastExchange -Input [1]: [ca_address_sk#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#174] +Input [1]: [ca_address_sk#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11] (114) BroadcastHashJoin [codegen id : 31] -Left keys [1]: [c_current_addr_sk#18] -Right keys [1]: [ca_address_sk#24] +Left keys [1]: [c_current_addr_sk#17] +Right keys [1]: [ca_address_sk#21] Join condition: None (115) Project [codegen id : 31] -Output [9]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#20] -Input [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#18, c_birth_year#20, ca_address_sk#24] +Output [9]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#19] +Input [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#17, c_birth_year#19, ca_address_sk#21] (116) ReusedExchange [Reuses operator id: 158] -Output [1]: [d_date_sk#29] +Output [1]: [d_date_sk#25] (117) BroadcastHashJoin [codegen id : 31] Left keys [1]: [cs_sold_date_sk#9] -Right keys [1]: [d_date_sk#29] +Right keys [1]: [d_date_sk#25] Join condition: None (118) Project [codegen id : 31] -Output [8]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20] -Input [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#20, d_date_sk#29] +Output [8]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19] +Input [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#19, d_date_sk#25] (119) ReusedExchange [Reuses operator id: 36] -Output [2]: [i_item_sk#30, i_item_id#31] +Output [2]: [i_item_sk#26, i_item_id#27] (120) BroadcastHashJoin [codegen id : 31] Left keys [1]: [cs_item_sk#3] -Right keys [1]: [i_item_sk#30] +Right keys [1]: [i_item_sk#26] Join condition: None (121) Project [codegen id : 31] -Output [8]: [i_item_id#31, cast(cs_quantity#4 as decimal(12,2)) AS agg1#33, cast(cs_list_price#5 as decimal(12,2)) AS agg2#34, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#35, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#36, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#37, cast(c_birth_year#20 as decimal(12,2)) AS agg6#38, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#39] -Input [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, i_item_sk#30, i_item_id#31] +Output [8]: [i_item_id#27, cast(cs_quantity#4 as decimal(12,2)) AS agg1#28, cast(cs_list_price#5 as decimal(12,2)) AS agg2#29, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#30, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#31, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#32, cast(c_birth_year#19 as decimal(12,2)) AS agg6#33, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#34] +Input [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, i_item_sk#26, i_item_id#27] (122) HashAggregate [codegen id : 31] -Input [8]: [i_item_id#31, agg1#33, agg2#34, agg3#35, agg4#36, agg5#37, agg6#38, agg7#39] -Keys [1]: [i_item_id#31] -Functions [7]: [partial_avg(agg1#33), partial_avg(agg2#34), partial_avg(agg3#35), partial_avg(agg4#36), partial_avg(agg5#37), partial_avg(agg6#38), partial_avg(agg7#39)] -Aggregate Attributes [14]: [sum#175, count#176, sum#177, count#178, sum#179, count#180, sum#181, count#182, sum#183, count#184, sum#185, count#186, sum#187, count#188] -Results [15]: [i_item_id#31, sum#189, count#190, sum#191, count#192, sum#193, count#194, sum#195, count#196, sum#197, count#198, sum#199, count#200, sum#201, count#202] +Input [8]: [i_item_id#27, agg1#28, agg2#29, agg3#30, agg4#31, agg5#32, agg6#33, agg7#34] +Keys [1]: [i_item_id#27] +Functions [7]: [partial_avg(agg1#28), partial_avg(agg2#29), partial_avg(agg3#30), partial_avg(agg4#31), partial_avg(agg5#32), partial_avg(agg6#33), partial_avg(agg7#34)] +Aggregate Attributes [14]: [sum#164, count#165, sum#166, count#167, sum#168, count#169, sum#170, count#171, sum#172, count#173, sum#174, count#175, sum#176, count#177] +Results [15]: [i_item_id#27, sum#178, count#179, sum#180, count#181, sum#182, count#183, sum#184, count#185, sum#186, count#187, sum#188, count#189, sum#190, count#191] (123) Exchange -Input [15]: [i_item_id#31, sum#189, count#190, sum#191, count#192, sum#193, count#194, sum#195, count#196, sum#197, count#198, sum#199, count#200, sum#201, count#202] -Arguments: hashpartitioning(i_item_id#31, 5), ENSURE_REQUIREMENTS, [id=#203] +Input [15]: [i_item_id#27, sum#178, count#179, sum#180, count#181, sum#182, count#183, sum#184, count#185, sum#186, count#187, sum#188, count#189, sum#190, count#191] +Arguments: hashpartitioning(i_item_id#27, 5), ENSURE_REQUIREMENTS, [plan_id=12] (124) HashAggregate [codegen id : 32] -Input [15]: [i_item_id#31, sum#189, count#190, sum#191, count#192, sum#193, count#194, sum#195, count#196, sum#197, count#198, sum#199, count#200, sum#201, count#202] -Keys [1]: [i_item_id#31] -Functions [7]: [avg(agg1#33), avg(agg2#34), avg(agg3#35), avg(agg4#36), avg(agg5#37), avg(agg6#38), avg(agg7#39)] -Aggregate Attributes [7]: [avg(agg1#33)#204, avg(agg2#34)#205, avg(agg3#35)#206, avg(agg4#36)#207, avg(agg5#37)#208, avg(agg6#38)#209, avg(agg7#39)#210] -Results [11]: [i_item_id#31, null AS ca_country#211, null AS ca_state#212, null AS county#213, avg(agg1#33)#204 AS agg1#214, avg(agg2#34)#205 AS agg2#215, avg(agg3#35)#206 AS agg3#216, avg(agg4#36)#207 AS agg4#217, avg(agg5#37)#208 AS agg5#218, avg(agg6#38)#209 AS agg6#219, avg(agg7#39)#210 AS agg7#220] +Input [15]: [i_item_id#27, sum#178, count#179, sum#180, count#181, sum#182, count#183, sum#184, count#185, sum#186, count#187, sum#188, count#189, sum#190, count#191] +Keys [1]: [i_item_id#27] +Functions [7]: [avg(agg1#28), avg(agg2#29), avg(agg3#30), avg(agg4#31), avg(agg5#32), avg(agg6#33), avg(agg7#34)] +Aggregate Attributes [7]: [avg(agg1#28)#192, avg(agg2#29)#193, avg(agg3#30)#194, avg(agg4#31)#195, avg(agg5#32)#196, avg(agg6#33)#197, avg(agg7#34)#198] +Results [11]: [i_item_id#27, null AS ca_country#199, null AS ca_state#200, null AS county#201, avg(agg1#28)#192 AS agg1#202, avg(agg2#29)#193 AS agg2#203, avg(agg3#30)#194 AS agg3#204, avg(agg4#31)#195 AS agg4#205, avg(agg5#32)#196 AS agg5#206, avg(agg6#33)#197 AS agg6#207, avg(agg7#34)#198 AS agg7#208] (125) Scan parquet default.catalog_sales Output [9]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9] @@ -738,103 +738,103 @@ Output [9]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5 Input [11]: [cs_bill_customer_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_demo_sk#11, cd_dep_count#14] (131) ReusedExchange [Reuses operator id: 15] -Output [4]: [c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] +Output [4]: [c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] (132) BroadcastHashJoin [codegen id : 39] Left keys [1]: [cs_bill_customer_sk#1] -Right keys [1]: [c_customer_sk#16] +Right keys [1]: [c_customer_sk#15] Join condition: None (133) Project [codegen id : 39] -Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] -Input [13]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_customer_sk#16, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20] +Output [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] +Input [13]: [cs_bill_customer_sk#1, cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_customer_sk#15, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19] (134) ReusedExchange [Reuses operator id: 21] -Output [1]: [cd_demo_sk#22] +Output [1]: [cd_demo_sk#20] (135) BroadcastHashJoin [codegen id : 39] -Left keys [1]: [c_current_cdemo_sk#17] -Right keys [1]: [cd_demo_sk#22] +Left keys [1]: [c_current_cdemo_sk#16] +Right keys [1]: [cd_demo_sk#20] Join condition: None (136) Project [codegen id : 39] -Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#18, c_birth_year#20] -Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#17, c_current_addr_sk#18, c_birth_year#20, cd_demo_sk#22] +Output [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#17, c_birth_year#19] +Input [12]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_cdemo_sk#16, c_current_addr_sk#17, c_birth_year#19, cd_demo_sk#20] (137) ReusedExchange [Reuses operator id: 113] -Output [1]: [ca_address_sk#24] +Output [1]: [ca_address_sk#21] (138) BroadcastHashJoin [codegen id : 39] -Left keys [1]: [c_current_addr_sk#18] -Right keys [1]: [ca_address_sk#24] +Left keys [1]: [c_current_addr_sk#17] +Right keys [1]: [ca_address_sk#21] Join condition: None (139) Project [codegen id : 39] -Output [9]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#20] -Input [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#18, c_birth_year#20, ca_address_sk#24] +Output [9]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#19] +Input [11]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_current_addr_sk#17, c_birth_year#19, ca_address_sk#21] (140) ReusedExchange [Reuses operator id: 158] -Output [1]: [d_date_sk#29] +Output [1]: [d_date_sk#25] (141) BroadcastHashJoin [codegen id : 39] Left keys [1]: [cs_sold_date_sk#9] -Right keys [1]: [d_date_sk#29] +Right keys [1]: [d_date_sk#25] Join condition: None (142) Project [codegen id : 39] -Output [8]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20] -Input [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#20, d_date_sk#29] +Output [8]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19] +Input [10]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cs_sold_date_sk#9, cd_dep_count#14, c_birth_year#19, d_date_sk#25] (143) Scan parquet default.item -Output [1]: [i_item_sk#30] +Output [1]: [i_item_sk#26] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (144) ColumnarToRow [codegen id : 38] -Input [1]: [i_item_sk#30] +Input [1]: [i_item_sk#26] (145) Filter [codegen id : 38] -Input [1]: [i_item_sk#30] -Condition : isnotnull(i_item_sk#30) +Input [1]: [i_item_sk#26] +Condition : isnotnull(i_item_sk#26) (146) BroadcastExchange -Input [1]: [i_item_sk#30] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#221] +Input [1]: [i_item_sk#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=13] (147) BroadcastHashJoin [codegen id : 39] Left keys [1]: [cs_item_sk#3] -Right keys [1]: [i_item_sk#30] +Right keys [1]: [i_item_sk#26] Join condition: None (148) Project [codegen id : 39] -Output [7]: [cast(cs_quantity#4 as decimal(12,2)) AS agg1#33, cast(cs_list_price#5 as decimal(12,2)) AS agg2#34, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#35, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#36, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#37, cast(c_birth_year#20 as decimal(12,2)) AS agg6#38, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#39] -Input [9]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#20, i_item_sk#30] +Output [7]: [cast(cs_quantity#4 as decimal(12,2)) AS agg1#28, cast(cs_list_price#5 as decimal(12,2)) AS agg2#29, cast(cs_coupon_amt#7 as decimal(12,2)) AS agg3#30, cast(cs_sales_price#6 as decimal(12,2)) AS agg4#31, cast(cs_net_profit#8 as decimal(12,2)) AS agg5#32, cast(c_birth_year#19 as decimal(12,2)) AS agg6#33, cast(cd_dep_count#14 as decimal(12,2)) AS agg7#34] +Input [9]: [cs_item_sk#3, cs_quantity#4, cs_list_price#5, cs_sales_price#6, cs_coupon_amt#7, cs_net_profit#8, cd_dep_count#14, c_birth_year#19, i_item_sk#26] (149) HashAggregate [codegen id : 39] -Input [7]: [agg1#33, agg2#34, agg3#35, agg4#36, agg5#37, agg6#38, agg7#39] +Input [7]: [agg1#28, agg2#29, agg3#30, agg4#31, agg5#32, agg6#33, agg7#34] Keys: [] -Functions [7]: [partial_avg(agg1#33), partial_avg(agg2#34), partial_avg(agg3#35), partial_avg(agg4#36), partial_avg(agg5#37), partial_avg(agg6#38), partial_avg(agg7#39)] -Aggregate Attributes [14]: [sum#222, count#223, sum#224, count#225, sum#226, count#227, sum#228, count#229, sum#230, count#231, sum#232, count#233, sum#234, count#235] -Results [14]: [sum#236, count#237, sum#238, count#239, sum#240, count#241, sum#242, count#243, sum#244, count#245, sum#246, count#247, sum#248, count#249] +Functions [7]: [partial_avg(agg1#28), partial_avg(agg2#29), partial_avg(agg3#30), partial_avg(agg4#31), partial_avg(agg5#32), partial_avg(agg6#33), partial_avg(agg7#34)] +Aggregate Attributes [14]: [sum#209, count#210, sum#211, count#212, sum#213, count#214, sum#215, count#216, sum#217, count#218, sum#219, count#220, sum#221, count#222] +Results [14]: [sum#223, count#224, sum#225, count#226, sum#227, count#228, sum#229, count#230, sum#231, count#232, sum#233, count#234, sum#235, count#236] (150) Exchange -Input [14]: [sum#236, count#237, sum#238, count#239, sum#240, count#241, sum#242, count#243, sum#244, count#245, sum#246, count#247, sum#248, count#249] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#250] +Input [14]: [sum#223, count#224, sum#225, count#226, sum#227, count#228, sum#229, count#230, sum#231, count#232, sum#233, count#234, sum#235, count#236] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=14] (151) HashAggregate [codegen id : 40] -Input [14]: [sum#236, count#237, sum#238, count#239, sum#240, count#241, sum#242, count#243, sum#244, count#245, sum#246, count#247, sum#248, count#249] +Input [14]: [sum#223, count#224, sum#225, count#226, sum#227, count#228, sum#229, count#230, sum#231, count#232, sum#233, count#234, sum#235, count#236] Keys: [] -Functions [7]: [avg(agg1#33), avg(agg2#34), avg(agg3#35), avg(agg4#36), avg(agg5#37), avg(agg6#38), avg(agg7#39)] -Aggregate Attributes [7]: [avg(agg1#33)#251, avg(agg2#34)#252, avg(agg3#35)#253, avg(agg4#36)#254, avg(agg5#37)#255, avg(agg6#38)#256, avg(agg7#39)#257] -Results [11]: [null AS i_item_id#258, null AS ca_country#259, null AS ca_state#260, null AS county#261, avg(agg1#33)#251 AS agg1#262, avg(agg2#34)#252 AS agg2#263, avg(agg3#35)#253 AS agg3#264, avg(agg4#36)#254 AS agg4#265, avg(agg5#37)#255 AS agg5#266, avg(agg6#38)#256 AS agg6#267, avg(agg7#39)#257 AS agg7#268] +Functions [7]: [avg(agg1#28), avg(agg2#29), avg(agg3#30), avg(agg4#31), avg(agg5#32), avg(agg6#33), avg(agg7#34)] +Aggregate Attributes [7]: [avg(agg1#28)#237, avg(agg2#29)#238, avg(agg3#30)#239, avg(agg4#31)#240, avg(agg5#32)#241, avg(agg6#33)#242, avg(agg7#34)#243] +Results [11]: [null AS i_item_id#244, null AS ca_country#245, null AS ca_state#246, null AS county#247, avg(agg1#28)#237 AS agg1#248, avg(agg2#29)#238 AS agg2#249, avg(agg3#30)#239 AS agg3#250, avg(agg4#31)#240 AS agg4#251, avg(agg5#32)#241 AS agg5#252, avg(agg6#33)#242 AS agg6#253, avg(agg7#34)#243 AS agg7#254] (152) Union (153) TakeOrderedAndProject -Input [11]: [i_item_id#31, ca_country#27, ca_state#26, ca_county#25, agg1#76, agg2#77, agg3#78, agg4#79, agg5#80, agg6#81, agg7#82] -Arguments: 100, [ca_country#27 ASC NULLS FIRST, ca_state#26 ASC NULLS FIRST, ca_county#25 ASC NULLS FIRST, i_item_id#31 ASC NULLS FIRST], [i_item_id#31, ca_country#27, ca_state#26, ca_county#25, agg1#76, agg2#77, agg3#78, agg4#79, agg5#80, agg6#81, agg7#82] +Input [11]: [i_item_id#27, ca_country#24, ca_state#23, ca_county#22, agg1#70, agg2#71, agg3#72, agg4#73, agg5#74, agg6#75, agg7#76] +Arguments: 100, [ca_country#24 ASC NULLS FIRST, ca_state#23 ASC NULLS FIRST, ca_county#22 ASC NULLS FIRST, i_item_id#27 ASC NULLS FIRST], [i_item_id#27, ca_country#24, ca_state#23, ca_county#22, agg1#70, agg2#71, agg3#72, agg4#73, agg5#74, agg6#75, agg7#76] ===== Subqueries ===== @@ -847,26 +847,26 @@ BroadcastExchange (158) (154) Scan parquet default.date_dim -Output [2]: [d_date_sk#29, d_year#269] +Output [2]: [d_date_sk#25, d_year#255] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (155) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#29, d_year#269] +Input [2]: [d_date_sk#25, d_year#255] (156) Filter [codegen id : 1] -Input [2]: [d_date_sk#29, d_year#269] -Condition : ((isnotnull(d_year#269) AND (d_year#269 = 2001)) AND isnotnull(d_date_sk#29)) +Input [2]: [d_date_sk#25, d_year#255] +Condition : ((isnotnull(d_year#255) AND (d_year#255 = 2001)) AND isnotnull(d_date_sk#25)) (157) Project [codegen id : 1] -Output [1]: [d_date_sk#29] -Input [2]: [d_date_sk#29, d_year#269] +Output [1]: [d_date_sk#25] +Input [2]: [d_date_sk#25, d_year#255] (158) BroadcastExchange -Input [1]: [d_date_sk#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#270] +Input [1]: [d_date_sk#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=15] Subquery:2 Hosting operator id = 42 Hosting Expression = cs_sold_date_sk#9 IN dynamicpruning#10 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q20.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q20.sf100/explain.txt index c925197336e95..72200f5f5e032 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q20.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q20.sf100/explain.txt @@ -41,92 +41,92 @@ Condition : isnotnull(cs_item_sk#1) (4) Exchange Input [3]: [cs_item_sk#1, cs_ext_sales_price#2, cs_sold_date_sk#3] -Arguments: hashpartitioning(cs_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#5] +Arguments: hashpartitioning(cs_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [3]: [cs_item_sk#1, cs_ext_sales_price#2, cs_sold_date_sk#3] Arguments: [cs_item_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.item -Output [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Output [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [In(i_category, [Books ,Home ,Sports ]), IsNotNull(i_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (8) Filter [codegen id : 3] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Condition : (i_category#11 IN (Sports ,Books ,Home ) AND isnotnull(i_item_sk#6)) +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Condition : (i_category#10 IN (Sports ,Books ,Home ) AND isnotnull(i_item_sk#5)) (9) Exchange -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Arguments: hashpartitioning(i_item_sk#6, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Arguments: hashpartitioning(i_item_sk#5, 5), ENSURE_REQUIREMENTS, [plan_id=2] (10) Sort [codegen id : 4] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Arguments: [i_item_sk#6 ASC NULLS FIRST], false, 0 +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Arguments: [i_item_sk#5 ASC NULLS FIRST], false, 0 (11) SortMergeJoin [codegen id : 6] Left keys [1]: [cs_item_sk#1] -Right keys [1]: [i_item_sk#6] +Right keys [1]: [i_item_sk#5] Join condition: None (12) Project [codegen id : 6] -Output [7]: [cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Input [9]: [cs_item_sk#1, cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Output [7]: [cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Input [9]: [cs_item_sk#1, cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (13) ReusedExchange [Reuses operator id: 28] -Output [1]: [d_date_sk#13] +Output [1]: [d_date_sk#11] (14) BroadcastHashJoin [codegen id : 6] Left keys [1]: [cs_sold_date_sk#3] -Right keys [1]: [d_date_sk#13] +Right keys [1]: [d_date_sk#11] Join condition: None (15) Project [codegen id : 6] -Output [6]: [cs_ext_sales_price#2, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Input [8]: [cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11, d_date_sk#13] +Output [6]: [cs_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Input [8]: [cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#11] (16) HashAggregate [codegen id : 6] -Input [6]: [cs_ext_sales_price#2, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Keys [5]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9] +Input [6]: [cs_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#14] -Results [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] +Aggregate Attributes [1]: [sum#12] +Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] (17) Exchange -Input [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] -Arguments: hashpartitioning(i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 7] -Input [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] -Keys [5]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#2))#17] -Results [8]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#17,17,2) AS itemrevenue#18, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#17,17,2) AS _w0#19, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#17,17,2) AS _w1#20] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#2))#14] +Results [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#14,17,2) AS itemrevenue#15, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#14,17,2) AS _w0#16, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#14,17,2) AS _w1#17] (19) Exchange -Input [8]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20] -Arguments: hashpartitioning(i_class#10, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=4] (20) Sort [codegen id : 8] -Input [8]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20] -Arguments: [i_class#10 ASC NULLS FIRST], false, 0 +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: [i_class#9 ASC NULLS FIRST], false, 0 (21) Window -Input [8]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20] -Arguments: [sum(_w1#20) windowspecdefinition(i_class#10, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#22], [i_class#10] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: [sum(_w1#17) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#9] (22) Project [codegen id : 9] -Output [7]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#19) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#22)), DecimalType(38,17)) AS revenueratio#23] -Input [9]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, _we0#22] +Output [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#16) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#18)), DecimalType(38,17)) AS revenueratio#19] +Input [9]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, _we0#18] (23) TakeOrderedAndProject -Input [7]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, revenueratio#23] -Arguments: 100, [i_category#11 ASC NULLS FIRST, i_class#10 ASC NULLS FIRST, i_item_id#7 ASC NULLS FIRST, i_item_desc#8 ASC NULLS FIRST, revenueratio#23 ASC NULLS FIRST], [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, revenueratio#23] +Input [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] +Arguments: 100, [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] ===== Subqueries ===== @@ -139,25 +139,25 @@ BroadcastExchange (28) (24) Scan parquet default.date_dim -Output [2]: [d_date_sk#13, d_date#24] +Output [2]: [d_date_sk#11, d_date#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-22), LessThanOrEqual(d_date,1999-03-24), IsNotNull(d_date_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#13, d_date#24] +Input [2]: [d_date_sk#11, d_date#20] (26) Filter [codegen id : 1] -Input [2]: [d_date_sk#13, d_date#24] -Condition : (((isnotnull(d_date#24) AND (d_date#24 >= 1999-02-22)) AND (d_date#24 <= 1999-03-24)) AND isnotnull(d_date_sk#13)) +Input [2]: [d_date_sk#11, d_date#20] +Condition : (((isnotnull(d_date#20) AND (d_date#20 >= 1999-02-22)) AND (d_date#20 <= 1999-03-24)) AND isnotnull(d_date_sk#11)) (27) Project [codegen id : 1] -Output [1]: [d_date_sk#13] -Input [2]: [d_date_sk#13, d_date#24] +Output [1]: [d_date_sk#11] +Input [2]: [d_date_sk#11, d_date#20] (28) BroadcastExchange -Input [1]: [d_date_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [d_date_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q20/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q20/explain.txt index ff461dafc09c0..fdc4cc9239c2d 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q20/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q20/explain.txt @@ -52,7 +52,7 @@ Condition : (i_category#10 IN (Sports (7) BroadcastExchange Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_item_sk#1] @@ -64,54 +64,54 @@ Output [7]: [cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_id#6, i_item_desc#7 Input [9]: [cs_item_sk#1, cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (10) ReusedExchange [Reuses operator id: 25] -Output [1]: [d_date_sk#12] +Output [1]: [d_date_sk#11] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_sold_date_sk#3] -Right keys [1]: [d_date_sk#12] +Right keys [1]: [d_date_sk#11] Join condition: None (12) Project [codegen id : 3] Output [6]: [cs_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] -Input [8]: [cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#12] +Input [8]: [cs_ext_sales_price#2, cs_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#11] (13) HashAggregate [codegen id : 3] Input [6]: [cs_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#13] -Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] +Aggregate Attributes [1]: [sum#12] +Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] (14) Exchange -Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] -Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 4] -Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#2))#16] -Results [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#16,17,2) AS itemrevenue#17, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#16,17,2) AS _w0#18, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#16,17,2) AS _w1#19] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#2))#14] +Results [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#14,17,2) AS itemrevenue#15, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#14,17,2) AS _w0#16, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#2))#14,17,2) AS _w1#17] (16) Exchange -Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19] -Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (17) Sort [codegen id : 5] -Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] Arguments: [i_class#9 ASC NULLS FIRST], false, 0 (18) Window -Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19] -Arguments: [sum(_w1#19) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#21], [i_class#9] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: [sum(_w1#17) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#9] (19) Project [codegen id : 6] -Output [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#18) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#21)), DecimalType(38,17)) AS revenueratio#22] -Input [9]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, _we0#21] +Output [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#16) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#18)), DecimalType(38,17)) AS revenueratio#19] +Input [9]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, _we0#18] (20) TakeOrderedAndProject -Input [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22] -Arguments: 100, [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#22 ASC NULLS FIRST], [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22] +Input [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] +Arguments: 100, [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] ===== Subqueries ===== @@ -124,25 +124,25 @@ BroadcastExchange (25) (21) Scan parquet default.date_dim -Output [2]: [d_date_sk#12, d_date#23] +Output [2]: [d_date_sk#11, d_date#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-22), LessThanOrEqual(d_date,1999-03-24), IsNotNull(d_date_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#12, d_date#23] +Input [2]: [d_date_sk#11, d_date#20] (23) Filter [codegen id : 1] -Input [2]: [d_date_sk#12, d_date#23] -Condition : (((isnotnull(d_date#23) AND (d_date#23 >= 1999-02-22)) AND (d_date#23 <= 1999-03-24)) AND isnotnull(d_date_sk#12)) +Input [2]: [d_date_sk#11, d_date#20] +Condition : (((isnotnull(d_date#20) AND (d_date#20 >= 1999-02-22)) AND (d_date#20 <= 1999-03-24)) AND isnotnull(d_date_sk#11)) (24) Project [codegen id : 1] -Output [1]: [d_date_sk#12] -Input [2]: [d_date_sk#12, d_date#23] +Output [1]: [d_date_sk#11] +Input [2]: [d_date_sk#11, d_date#20] (25) BroadcastExchange -Input [1]: [d_date_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#24] +Input [1]: [d_date_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22.sf100/explain.txt index eb956b9e75ab0..1d3378f030147 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22.sf100/explain.txt @@ -55,42 +55,42 @@ Input [4]: [inv_item_sk#1, inv_quantity_on_hand#2, inv_date_sk#3, d_date_sk#5] (7) Exchange Input [2]: [inv_item_sk#1, inv_quantity_on_hand#2] -Arguments: hashpartitioning(inv_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(inv_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (8) Sort [codegen id : 3] Input [2]: [inv_item_sk#1, inv_quantity_on_hand#2] Arguments: [inv_item_sk#1 ASC NULLS FIRST], false, 0 (9) Scan parquet default.item -Output [5]: [i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11] +Output [5]: [i_item_sk#6, i_brand#7, i_class#8, i_category#9, i_product_name#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (10) ColumnarToRow [codegen id : 4] -Input [5]: [i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11] +Input [5]: [i_item_sk#6, i_brand#7, i_class#8, i_category#9, i_product_name#10] (11) Filter [codegen id : 4] -Input [5]: [i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11] -Condition : isnotnull(i_item_sk#7) +Input [5]: [i_item_sk#6, i_brand#7, i_class#8, i_category#9, i_product_name#10] +Condition : isnotnull(i_item_sk#6) (12) Exchange -Input [5]: [i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11] -Arguments: hashpartitioning(i_item_sk#7, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [5]: [i_item_sk#6, i_brand#7, i_class#8, i_category#9, i_product_name#10] +Arguments: hashpartitioning(i_item_sk#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (13) Sort [codegen id : 5] -Input [5]: [i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11] -Arguments: [i_item_sk#7 ASC NULLS FIRST], false, 0 +Input [5]: [i_item_sk#6, i_brand#7, i_class#8, i_category#9, i_product_name#10] +Arguments: [i_item_sk#6 ASC NULLS FIRST], false, 0 (14) SortMergeJoin [codegen id : 7] Left keys [1]: [inv_item_sk#1] -Right keys [1]: [i_item_sk#7] +Right keys [1]: [i_item_sk#6] Join condition: None (15) Project [codegen id : 7] -Output [5]: [inv_quantity_on_hand#2, i_brand#8, i_class#9, i_category#10, i_product_name#11] -Input [7]: [inv_item_sk#1, inv_quantity_on_hand#2, i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11] +Output [5]: [inv_quantity_on_hand#2, i_brand#7, i_class#8, i_category#9, i_product_name#10] +Input [7]: [inv_item_sk#1, inv_quantity_on_hand#2, i_item_sk#6, i_brand#7, i_class#8, i_category#9, i_product_name#10] (16) Scan parquet default.warehouse Output: [] @@ -103,40 +103,40 @@ Input: [] (18) BroadcastExchange Input: [] -Arguments: IdentityBroadcastMode, [id=#13] +Arguments: IdentityBroadcastMode, [plan_id=3] (19) BroadcastNestedLoopJoin [codegen id : 7] Join condition: None (20) Project [codegen id : 7] -Output [5]: [inv_quantity_on_hand#2, i_product_name#11, i_brand#8, i_class#9, i_category#10] -Input [5]: [inv_quantity_on_hand#2, i_brand#8, i_class#9, i_category#10, i_product_name#11] +Output [5]: [inv_quantity_on_hand#2, i_product_name#10, i_brand#7, i_class#8, i_category#9] +Input [5]: [inv_quantity_on_hand#2, i_brand#7, i_class#8, i_category#9, i_product_name#10] (21) Expand [codegen id : 7] -Input [5]: [inv_quantity_on_hand#2, i_product_name#11, i_brand#8, i_class#9, i_category#10] -Arguments: [[inv_quantity_on_hand#2, i_product_name#11, i_brand#8, i_class#9, i_category#10, 0], [inv_quantity_on_hand#2, i_product_name#11, i_brand#8, i_class#9, null, 1], [inv_quantity_on_hand#2, i_product_name#11, i_brand#8, null, null, 3], [inv_quantity_on_hand#2, i_product_name#11, null, null, null, 7], [inv_quantity_on_hand#2, null, null, null, null, 15]], [inv_quantity_on_hand#2, i_product_name#14, i_brand#15, i_class#16, i_category#17, spark_grouping_id#18] +Input [5]: [inv_quantity_on_hand#2, i_product_name#10, i_brand#7, i_class#8, i_category#9] +Arguments: [[inv_quantity_on_hand#2, i_product_name#10, i_brand#7, i_class#8, i_category#9, 0], [inv_quantity_on_hand#2, i_product_name#10, i_brand#7, i_class#8, null, 1], [inv_quantity_on_hand#2, i_product_name#10, i_brand#7, null, null, 3], [inv_quantity_on_hand#2, i_product_name#10, null, null, null, 7], [inv_quantity_on_hand#2, null, null, null, null, 15]], [inv_quantity_on_hand#2, i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15] (22) HashAggregate [codegen id : 7] -Input [6]: [inv_quantity_on_hand#2, i_product_name#14, i_brand#15, i_class#16, i_category#17, spark_grouping_id#18] -Keys [5]: [i_product_name#14, i_brand#15, i_class#16, i_category#17, spark_grouping_id#18] +Input [6]: [inv_quantity_on_hand#2, i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15] +Keys [5]: [i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15] Functions [1]: [partial_avg(inv_quantity_on_hand#2)] -Aggregate Attributes [2]: [sum#19, count#20] -Results [7]: [i_product_name#14, i_brand#15, i_class#16, i_category#17, spark_grouping_id#18, sum#21, count#22] +Aggregate Attributes [2]: [sum#16, count#17] +Results [7]: [i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15, sum#18, count#19] (23) Exchange -Input [7]: [i_product_name#14, i_brand#15, i_class#16, i_category#17, spark_grouping_id#18, sum#21, count#22] -Arguments: hashpartitioning(i_product_name#14, i_brand#15, i_class#16, i_category#17, spark_grouping_id#18, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [7]: [i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15, sum#18, count#19] +Arguments: hashpartitioning(i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) HashAggregate [codegen id : 8] -Input [7]: [i_product_name#14, i_brand#15, i_class#16, i_category#17, spark_grouping_id#18, sum#21, count#22] -Keys [5]: [i_product_name#14, i_brand#15, i_class#16, i_category#17, spark_grouping_id#18] +Input [7]: [i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15, sum#18, count#19] +Keys [5]: [i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15] Functions [1]: [avg(inv_quantity_on_hand#2)] -Aggregate Attributes [1]: [avg(inv_quantity_on_hand#2)#24] -Results [5]: [i_product_name#14, i_brand#15, i_class#16, i_category#17, avg(inv_quantity_on_hand#2)#24 AS qoh#25] +Aggregate Attributes [1]: [avg(inv_quantity_on_hand#2)#20] +Results [5]: [i_product_name#11, i_brand#12, i_class#13, i_category#14, avg(inv_quantity_on_hand#2)#20 AS qoh#21] (25) TakeOrderedAndProject -Input [5]: [i_product_name#14, i_brand#15, i_class#16, i_category#17, qoh#25] -Arguments: 100, [qoh#25 ASC NULLS FIRST, i_product_name#14 ASC NULLS FIRST, i_brand#15 ASC NULLS FIRST, i_class#16 ASC NULLS FIRST, i_category#17 ASC NULLS FIRST], [i_product_name#14, i_brand#15, i_class#16, i_category#17, qoh#25] +Input [5]: [i_product_name#11, i_brand#12, i_class#13, i_category#14, qoh#21] +Arguments: 100, [qoh#21 ASC NULLS FIRST, i_product_name#11 ASC NULLS FIRST, i_brand#12 ASC NULLS FIRST, i_class#13 ASC NULLS FIRST, i_category#14 ASC NULLS FIRST], [i_product_name#11, i_brand#12, i_class#13, i_category#14, qoh#21] ===== Subqueries ===== @@ -149,25 +149,25 @@ BroadcastExchange (30) (26) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_month_seq#26] +Output [2]: [d_date_sk#5, d_month_seq#22] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#26] +Input [2]: [d_date_sk#5, d_month_seq#22] (28) Filter [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#26] -Condition : (((isnotnull(d_month_seq#26) AND (d_month_seq#26 >= 1200)) AND (d_month_seq#26 <= 1211)) AND isnotnull(d_date_sk#5)) +Input [2]: [d_date_sk#5, d_month_seq#22] +Condition : (((isnotnull(d_month_seq#22) AND (d_month_seq#22 >= 1200)) AND (d_month_seq#22 <= 1211)) AND isnotnull(d_date_sk#5)) (29) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_month_seq#26] +Input [2]: [d_date_sk#5, d_month_seq#22] (30) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#27] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22/explain.txt index 85c21eca87544..a33275b23229e 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22/explain.txt @@ -66,7 +66,7 @@ Condition : isnotnull(i_item_sk#6) (10) BroadcastExchange Input [5]: [i_item_sk#6, i_brand#7, i_class#8, i_category#9, i_product_name#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_item_sk#1] @@ -88,7 +88,7 @@ Input: [] (15) BroadcastExchange Input: [] -Arguments: IdentityBroadcastMode, [id=#12] +Arguments: IdentityBroadcastMode, [plan_id=2] (16) BroadcastNestedLoopJoin [codegen id : 4] Join condition: None @@ -99,29 +99,29 @@ Input [5]: [inv_quantity_on_hand#2, i_brand#7, i_class#8, i_category#9, i_produc (18) Expand [codegen id : 4] Input [5]: [inv_quantity_on_hand#2, i_product_name#10, i_brand#7, i_class#8, i_category#9] -Arguments: [[inv_quantity_on_hand#2, i_product_name#10, i_brand#7, i_class#8, i_category#9, 0], [inv_quantity_on_hand#2, i_product_name#10, i_brand#7, i_class#8, null, 1], [inv_quantity_on_hand#2, i_product_name#10, i_brand#7, null, null, 3], [inv_quantity_on_hand#2, i_product_name#10, null, null, null, 7], [inv_quantity_on_hand#2, null, null, null, null, 15]], [inv_quantity_on_hand#2, i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17] +Arguments: [[inv_quantity_on_hand#2, i_product_name#10, i_brand#7, i_class#8, i_category#9, 0], [inv_quantity_on_hand#2, i_product_name#10, i_brand#7, i_class#8, null, 1], [inv_quantity_on_hand#2, i_product_name#10, i_brand#7, null, null, 3], [inv_quantity_on_hand#2, i_product_name#10, null, null, null, 7], [inv_quantity_on_hand#2, null, null, null, null, 15]], [inv_quantity_on_hand#2, i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15] (19) HashAggregate [codegen id : 4] -Input [6]: [inv_quantity_on_hand#2, i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17] -Keys [5]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17] +Input [6]: [inv_quantity_on_hand#2, i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15] +Keys [5]: [i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15] Functions [1]: [partial_avg(inv_quantity_on_hand#2)] -Aggregate Attributes [2]: [sum#18, count#19] -Results [7]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17, sum#20, count#21] +Aggregate Attributes [2]: [sum#16, count#17] +Results [7]: [i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15, sum#18, count#19] (20) Exchange -Input [7]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17, sum#20, count#21] -Arguments: hashpartitioning(i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [7]: [i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15, sum#18, count#19] +Arguments: hashpartitioning(i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 5] -Input [7]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17, sum#20, count#21] -Keys [5]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, spark_grouping_id#17] +Input [7]: [i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15, sum#18, count#19] +Keys [5]: [i_product_name#11, i_brand#12, i_class#13, i_category#14, spark_grouping_id#15] Functions [1]: [avg(inv_quantity_on_hand#2)] -Aggregate Attributes [1]: [avg(inv_quantity_on_hand#2)#23] -Results [5]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, avg(inv_quantity_on_hand#2)#23 AS qoh#24] +Aggregate Attributes [1]: [avg(inv_quantity_on_hand#2)#20] +Results [5]: [i_product_name#11, i_brand#12, i_class#13, i_category#14, avg(inv_quantity_on_hand#2)#20 AS qoh#21] (22) TakeOrderedAndProject -Input [5]: [i_product_name#13, i_brand#14, i_class#15, i_category#16, qoh#24] -Arguments: 100, [qoh#24 ASC NULLS FIRST, i_product_name#13 ASC NULLS FIRST, i_brand#14 ASC NULLS FIRST, i_class#15 ASC NULLS FIRST, i_category#16 ASC NULLS FIRST], [i_product_name#13, i_brand#14, i_class#15, i_category#16, qoh#24] +Input [5]: [i_product_name#11, i_brand#12, i_class#13, i_category#14, qoh#21] +Arguments: 100, [qoh#21 ASC NULLS FIRST, i_product_name#11 ASC NULLS FIRST, i_brand#12 ASC NULLS FIRST, i_class#13 ASC NULLS FIRST, i_category#14 ASC NULLS FIRST], [i_product_name#11, i_brand#12, i_class#13, i_category#14, qoh#21] ===== Subqueries ===== @@ -134,25 +134,25 @@ BroadcastExchange (27) (23) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_month_seq#25] +Output [2]: [d_date_sk#5, d_month_seq#22] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)] ReadSchema: struct (24) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#25] +Input [2]: [d_date_sk#5, d_month_seq#22] (25) Filter [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#25] -Condition : (((isnotnull(d_month_seq#25) AND (d_month_seq#25 >= 1200)) AND (d_month_seq#25 <= 1211)) AND isnotnull(d_date_sk#5)) +Input [2]: [d_date_sk#5, d_month_seq#22] +Condition : (((isnotnull(d_month_seq#22) AND (d_month_seq#22 >= 1200)) AND (d_month_seq#22 <= 1211)) AND isnotnull(d_date_sk#5)) (26) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_month_seq#25] +Input [2]: [d_date_sk#5, d_month_seq#22] (27) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22a.sf100/explain.txt index e7072101f8f23..ed0af9e0d295f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22a.sf100/explain.txt @@ -80,7 +80,7 @@ Condition : isnotnull(w_warehouse_sk#6) (7) BroadcastExchange Input [1]: [w_warehouse_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [inv_warehouse_sk#2] @@ -92,205 +92,205 @@ Output [3]: [inv_item_sk#1, inv_quantity_on_hand#3, inv_date_sk#4] Input [5]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, w_warehouse_sk#6] (10) ReusedExchange [Reuses operator id: 53] -Output [1]: [d_date_sk#8] +Output [1]: [d_date_sk#7] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [inv_date_sk#4] -Right keys [1]: [d_date_sk#8] +Right keys [1]: [d_date_sk#7] Join condition: None (12) Project [codegen id : 3] Output [2]: [inv_item_sk#1, inv_quantity_on_hand#3] -Input [4]: [inv_item_sk#1, inv_quantity_on_hand#3, inv_date_sk#4, d_date_sk#8] +Input [4]: [inv_item_sk#1, inv_quantity_on_hand#3, inv_date_sk#4, d_date_sk#7] (13) Exchange Input [2]: [inv_item_sk#1, inv_quantity_on_hand#3] -Arguments: hashpartitioning(inv_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(inv_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) Sort [codegen id : 4] Input [2]: [inv_item_sk#1, inv_quantity_on_hand#3] Arguments: [inv_item_sk#1 ASC NULLS FIRST], false, 0 (15) Scan parquet default.item -Output [5]: [i_item_sk#10, i_brand#11, i_class#12, i_category#13, i_product_name#14] +Output [5]: [i_item_sk#8, i_brand#9, i_class#10, i_category#11, i_product_name#12] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [5]: [i_item_sk#10, i_brand#11, i_class#12, i_category#13, i_product_name#14] +Input [5]: [i_item_sk#8, i_brand#9, i_class#10, i_category#11, i_product_name#12] (17) Filter [codegen id : 5] -Input [5]: [i_item_sk#10, i_brand#11, i_class#12, i_category#13, i_product_name#14] -Condition : isnotnull(i_item_sk#10) +Input [5]: [i_item_sk#8, i_brand#9, i_class#10, i_category#11, i_product_name#12] +Condition : isnotnull(i_item_sk#8) (18) Exchange -Input [5]: [i_item_sk#10, i_brand#11, i_class#12, i_category#13, i_product_name#14] -Arguments: hashpartitioning(i_item_sk#10, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [5]: [i_item_sk#8, i_brand#9, i_class#10, i_category#11, i_product_name#12] +Arguments: hashpartitioning(i_item_sk#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 6] -Input [5]: [i_item_sk#10, i_brand#11, i_class#12, i_category#13, i_product_name#14] -Arguments: [i_item_sk#10 ASC NULLS FIRST], false, 0 +Input [5]: [i_item_sk#8, i_brand#9, i_class#10, i_category#11, i_product_name#12] +Arguments: [i_item_sk#8 ASC NULLS FIRST], false, 0 (20) SortMergeJoin [codegen id : 7] Left keys [1]: [inv_item_sk#1] -Right keys [1]: [i_item_sk#10] +Right keys [1]: [i_item_sk#8] Join condition: None (21) Project [codegen id : 7] -Output [5]: [inv_quantity_on_hand#3, i_brand#11, i_class#12, i_category#13, i_product_name#14] -Input [7]: [inv_item_sk#1, inv_quantity_on_hand#3, i_item_sk#10, i_brand#11, i_class#12, i_category#13, i_product_name#14] +Output [5]: [inv_quantity_on_hand#3, i_brand#9, i_class#10, i_category#11, i_product_name#12] +Input [7]: [inv_item_sk#1, inv_quantity_on_hand#3, i_item_sk#8, i_brand#9, i_class#10, i_category#11, i_product_name#12] (22) HashAggregate [codegen id : 7] -Input [5]: [inv_quantity_on_hand#3, i_brand#11, i_class#12, i_category#13, i_product_name#14] -Keys [4]: [i_product_name#14, i_brand#11, i_class#12, i_category#13] +Input [5]: [inv_quantity_on_hand#3, i_brand#9, i_class#10, i_category#11, i_product_name#12] +Keys [4]: [i_product_name#12, i_brand#9, i_class#10, i_category#11] Functions [1]: [partial_avg(inv_quantity_on_hand#3)] -Aggregate Attributes [2]: [sum#16, count#17] -Results [6]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, sum#18, count#19] +Aggregate Attributes [2]: [sum#13, count#14] +Results [6]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, sum#15, count#16] (23) Exchange -Input [6]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, sum#18, count#19] -Arguments: hashpartitioning(i_product_name#14, i_brand#11, i_class#12, i_category#13, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [6]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, sum#15, count#16] +Arguments: hashpartitioning(i_product_name#12, i_brand#9, i_class#10, i_category#11, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) HashAggregate [codegen id : 8] -Input [6]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, sum#18, count#19] -Keys [4]: [i_product_name#14, i_brand#11, i_class#12, i_category#13] +Input [6]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, sum#15, count#16] +Keys [4]: [i_product_name#12, i_brand#9, i_class#10, i_category#11] Functions [1]: [avg(inv_quantity_on_hand#3)] -Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#21] -Results [5]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, avg(inv_quantity_on_hand#3)#21 AS qoh#22] +Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#17] +Results [5]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, avg(inv_quantity_on_hand#3)#17 AS qoh#18] (25) HashAggregate [codegen id : 8] -Input [5]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, qoh#22] -Keys [4]: [i_product_name#14, i_brand#11, i_class#12, i_category#13] -Functions [1]: [partial_avg(qoh#22)] -Aggregate Attributes [2]: [sum#23, count#24] -Results [6]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, sum#25, count#26] +Input [5]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, qoh#18] +Keys [4]: [i_product_name#12, i_brand#9, i_class#10, i_category#11] +Functions [1]: [partial_avg(qoh#18)] +Aggregate Attributes [2]: [sum#19, count#20] +Results [6]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, sum#21, count#22] (26) HashAggregate [codegen id : 8] -Input [6]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, sum#25, count#26] -Keys [4]: [i_product_name#14, i_brand#11, i_class#12, i_category#13] -Functions [1]: [avg(qoh#22)] -Aggregate Attributes [1]: [avg(qoh#22)#27] -Results [5]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, avg(qoh#22)#27 AS qoh#28] +Input [6]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, sum#21, count#22] +Keys [4]: [i_product_name#12, i_brand#9, i_class#10, i_category#11] +Functions [1]: [avg(qoh#18)] +Aggregate Attributes [1]: [avg(qoh#18)#23] +Results [5]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, avg(qoh#18)#23 AS qoh#24] (27) ReusedExchange [Reuses operator id: 23] -Output [6]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, sum#18, count#19] +Output [6]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, sum#15, count#16] (28) HashAggregate [codegen id : 16] -Input [6]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, sum#18, count#19] -Keys [4]: [i_product_name#14, i_brand#11, i_class#12, i_category#13] +Input [6]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, sum#15, count#16] +Keys [4]: [i_product_name#12, i_brand#9, i_class#10, i_category#11] Functions [1]: [avg(inv_quantity_on_hand#3)] -Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#21] -Results [4]: [i_product_name#14, i_brand#11, i_class#12, avg(inv_quantity_on_hand#3)#21 AS qoh#22] +Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#17] +Results [4]: [i_product_name#12, i_brand#9, i_class#10, avg(inv_quantity_on_hand#3)#17 AS qoh#18] (29) HashAggregate [codegen id : 16] -Input [4]: [i_product_name#14, i_brand#11, i_class#12, qoh#22] -Keys [3]: [i_product_name#14, i_brand#11, i_class#12] -Functions [1]: [partial_avg(qoh#22)] -Aggregate Attributes [2]: [sum#29, count#30] -Results [5]: [i_product_name#14, i_brand#11, i_class#12, sum#31, count#32] +Input [4]: [i_product_name#12, i_brand#9, i_class#10, qoh#18] +Keys [3]: [i_product_name#12, i_brand#9, i_class#10] +Functions [1]: [partial_avg(qoh#18)] +Aggregate Attributes [2]: [sum#25, count#26] +Results [5]: [i_product_name#12, i_brand#9, i_class#10, sum#27, count#28] (30) Exchange -Input [5]: [i_product_name#14, i_brand#11, i_class#12, sum#31, count#32] -Arguments: hashpartitioning(i_product_name#14, i_brand#11, i_class#12, 5), ENSURE_REQUIREMENTS, [id=#33] +Input [5]: [i_product_name#12, i_brand#9, i_class#10, sum#27, count#28] +Arguments: hashpartitioning(i_product_name#12, i_brand#9, i_class#10, 5), ENSURE_REQUIREMENTS, [plan_id=5] (31) HashAggregate [codegen id : 17] -Input [5]: [i_product_name#14, i_brand#11, i_class#12, sum#31, count#32] -Keys [3]: [i_product_name#14, i_brand#11, i_class#12] -Functions [1]: [avg(qoh#22)] -Aggregate Attributes [1]: [avg(qoh#22)#34] -Results [5]: [i_product_name#14, i_brand#11, i_class#12, null AS i_category#35, avg(qoh#22)#34 AS qoh#36] +Input [5]: [i_product_name#12, i_brand#9, i_class#10, sum#27, count#28] +Keys [3]: [i_product_name#12, i_brand#9, i_class#10] +Functions [1]: [avg(qoh#18)] +Aggregate Attributes [1]: [avg(qoh#18)#29] +Results [5]: [i_product_name#12, i_brand#9, i_class#10, null AS i_category#30, avg(qoh#18)#29 AS qoh#31] (32) ReusedExchange [Reuses operator id: 23] -Output [6]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, sum#18, count#19] +Output [6]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, sum#15, count#16] (33) HashAggregate [codegen id : 25] -Input [6]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, sum#18, count#19] -Keys [4]: [i_product_name#14, i_brand#11, i_class#12, i_category#13] +Input [6]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, sum#15, count#16] +Keys [4]: [i_product_name#12, i_brand#9, i_class#10, i_category#11] Functions [1]: [avg(inv_quantity_on_hand#3)] -Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#21] -Results [3]: [i_product_name#14, i_brand#11, avg(inv_quantity_on_hand#3)#21 AS qoh#22] +Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#17] +Results [3]: [i_product_name#12, i_brand#9, avg(inv_quantity_on_hand#3)#17 AS qoh#18] (34) HashAggregate [codegen id : 25] -Input [3]: [i_product_name#14, i_brand#11, qoh#22] -Keys [2]: [i_product_name#14, i_brand#11] -Functions [1]: [partial_avg(qoh#22)] -Aggregate Attributes [2]: [sum#37, count#38] -Results [4]: [i_product_name#14, i_brand#11, sum#39, count#40] +Input [3]: [i_product_name#12, i_brand#9, qoh#18] +Keys [2]: [i_product_name#12, i_brand#9] +Functions [1]: [partial_avg(qoh#18)] +Aggregate Attributes [2]: [sum#32, count#33] +Results [4]: [i_product_name#12, i_brand#9, sum#34, count#35] (35) Exchange -Input [4]: [i_product_name#14, i_brand#11, sum#39, count#40] -Arguments: hashpartitioning(i_product_name#14, i_brand#11, 5), ENSURE_REQUIREMENTS, [id=#41] +Input [4]: [i_product_name#12, i_brand#9, sum#34, count#35] +Arguments: hashpartitioning(i_product_name#12, i_brand#9, 5), ENSURE_REQUIREMENTS, [plan_id=6] (36) HashAggregate [codegen id : 26] -Input [4]: [i_product_name#14, i_brand#11, sum#39, count#40] -Keys [2]: [i_product_name#14, i_brand#11] -Functions [1]: [avg(qoh#22)] -Aggregate Attributes [1]: [avg(qoh#22)#42] -Results [5]: [i_product_name#14, i_brand#11, null AS i_class#43, null AS i_category#44, avg(qoh#22)#42 AS qoh#45] +Input [4]: [i_product_name#12, i_brand#9, sum#34, count#35] +Keys [2]: [i_product_name#12, i_brand#9] +Functions [1]: [avg(qoh#18)] +Aggregate Attributes [1]: [avg(qoh#18)#36] +Results [5]: [i_product_name#12, i_brand#9, null AS i_class#37, null AS i_category#38, avg(qoh#18)#36 AS qoh#39] (37) ReusedExchange [Reuses operator id: 23] -Output [6]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, sum#18, count#19] +Output [6]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, sum#15, count#16] (38) HashAggregate [codegen id : 34] -Input [6]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, sum#18, count#19] -Keys [4]: [i_product_name#14, i_brand#11, i_class#12, i_category#13] +Input [6]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, sum#15, count#16] +Keys [4]: [i_product_name#12, i_brand#9, i_class#10, i_category#11] Functions [1]: [avg(inv_quantity_on_hand#3)] -Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#21] -Results [2]: [i_product_name#14, avg(inv_quantity_on_hand#3)#21 AS qoh#22] +Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#17] +Results [2]: [i_product_name#12, avg(inv_quantity_on_hand#3)#17 AS qoh#18] (39) HashAggregate [codegen id : 34] -Input [2]: [i_product_name#14, qoh#22] -Keys [1]: [i_product_name#14] -Functions [1]: [partial_avg(qoh#22)] -Aggregate Attributes [2]: [sum#46, count#47] -Results [3]: [i_product_name#14, sum#48, count#49] +Input [2]: [i_product_name#12, qoh#18] +Keys [1]: [i_product_name#12] +Functions [1]: [partial_avg(qoh#18)] +Aggregate Attributes [2]: [sum#40, count#41] +Results [3]: [i_product_name#12, sum#42, count#43] (40) Exchange -Input [3]: [i_product_name#14, sum#48, count#49] -Arguments: hashpartitioning(i_product_name#14, 5), ENSURE_REQUIREMENTS, [id=#50] +Input [3]: [i_product_name#12, sum#42, count#43] +Arguments: hashpartitioning(i_product_name#12, 5), ENSURE_REQUIREMENTS, [plan_id=7] (41) HashAggregate [codegen id : 35] -Input [3]: [i_product_name#14, sum#48, count#49] -Keys [1]: [i_product_name#14] -Functions [1]: [avg(qoh#22)] -Aggregate Attributes [1]: [avg(qoh#22)#51] -Results [5]: [i_product_name#14, null AS i_brand#52, null AS i_class#53, null AS i_category#54, avg(qoh#22)#51 AS qoh#55] +Input [3]: [i_product_name#12, sum#42, count#43] +Keys [1]: [i_product_name#12] +Functions [1]: [avg(qoh#18)] +Aggregate Attributes [1]: [avg(qoh#18)#44] +Results [5]: [i_product_name#12, null AS i_brand#45, null AS i_class#46, null AS i_category#47, avg(qoh#18)#44 AS qoh#48] (42) ReusedExchange [Reuses operator id: 23] -Output [6]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, sum#18, count#19] +Output [6]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, sum#15, count#16] (43) HashAggregate [codegen id : 43] -Input [6]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, sum#18, count#19] -Keys [4]: [i_product_name#14, i_brand#11, i_class#12, i_category#13] +Input [6]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, sum#15, count#16] +Keys [4]: [i_product_name#12, i_brand#9, i_class#10, i_category#11] Functions [1]: [avg(inv_quantity_on_hand#3)] -Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#21] -Results [1]: [avg(inv_quantity_on_hand#3)#21 AS qoh#22] +Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#17] +Results [1]: [avg(inv_quantity_on_hand#3)#17 AS qoh#18] (44) HashAggregate [codegen id : 43] -Input [1]: [qoh#22] +Input [1]: [qoh#18] Keys: [] -Functions [1]: [partial_avg(qoh#22)] -Aggregate Attributes [2]: [sum#56, count#57] -Results [2]: [sum#58, count#59] +Functions [1]: [partial_avg(qoh#18)] +Aggregate Attributes [2]: [sum#49, count#50] +Results [2]: [sum#51, count#52] (45) Exchange -Input [2]: [sum#58, count#59] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#60] +Input [2]: [sum#51, count#52] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8] (46) HashAggregate [codegen id : 44] -Input [2]: [sum#58, count#59] +Input [2]: [sum#51, count#52] Keys: [] -Functions [1]: [avg(qoh#22)] -Aggregate Attributes [1]: [avg(qoh#22)#61] -Results [5]: [null AS i_product_name#62, null AS i_brand#63, null AS i_class#64, null AS i_category#65, avg(qoh#22)#61 AS qoh#66] +Functions [1]: [avg(qoh#18)] +Aggregate Attributes [1]: [avg(qoh#18)#53] +Results [5]: [null AS i_product_name#54, null AS i_brand#55, null AS i_class#56, null AS i_category#57, avg(qoh#18)#53 AS qoh#58] (47) Union (48) TakeOrderedAndProject -Input [5]: [i_product_name#14, i_brand#11, i_class#12, i_category#13, qoh#28] -Arguments: 100, [qoh#28 ASC NULLS FIRST, i_product_name#14 ASC NULLS FIRST, i_brand#11 ASC NULLS FIRST, i_class#12 ASC NULLS FIRST, i_category#13 ASC NULLS FIRST], [i_product_name#14, i_brand#11, i_class#12, i_category#13, qoh#28] +Input [5]: [i_product_name#12, i_brand#9, i_class#10, i_category#11, qoh#24] +Arguments: 100, [qoh#24 ASC NULLS FIRST, i_product_name#12 ASC NULLS FIRST, i_brand#9 ASC NULLS FIRST, i_class#10 ASC NULLS FIRST, i_category#11 ASC NULLS FIRST], [i_product_name#12, i_brand#9, i_class#10, i_category#11, qoh#24] ===== Subqueries ===== @@ -303,25 +303,25 @@ BroadcastExchange (53) (49) Scan parquet default.date_dim -Output [2]: [d_date_sk#8, d_month_seq#67] +Output [2]: [d_date_sk#7, d_month_seq#59] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_date_sk)] ReadSchema: struct (50) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#8, d_month_seq#67] +Input [2]: [d_date_sk#7, d_month_seq#59] (51) Filter [codegen id : 1] -Input [2]: [d_date_sk#8, d_month_seq#67] -Condition : (((isnotnull(d_month_seq#67) AND (d_month_seq#67 >= 1212)) AND (d_month_seq#67 <= 1223)) AND isnotnull(d_date_sk#8)) +Input [2]: [d_date_sk#7, d_month_seq#59] +Condition : (((isnotnull(d_month_seq#59) AND (d_month_seq#59 >= 1212)) AND (d_month_seq#59 <= 1223)) AND isnotnull(d_date_sk#7)) (52) Project [codegen id : 1] -Output [1]: [d_date_sk#8] -Input [2]: [d_date_sk#8, d_month_seq#67] +Output [1]: [d_date_sk#7] +Input [2]: [d_date_sk#7, d_month_seq#59] (53) BroadcastExchange -Input [1]: [d_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#68] +Input [1]: [d_date_sk#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22a/explain.txt index c5bef0d13db91..72387f12a4037 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q22a/explain.txt @@ -89,7 +89,7 @@ Condition : isnotnull(i_item_sk#7) (10) BroadcastExchange Input [5]: [i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_item_sk#1] @@ -101,181 +101,181 @@ Output [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, i_brand#8, i_class#9, i Input [8]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11] (13) Scan parquet default.warehouse -Output [1]: [w_warehouse_sk#13] +Output [1]: [w_warehouse_sk#12] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [1]: [w_warehouse_sk#13] +Input [1]: [w_warehouse_sk#12] (15) Filter [codegen id : 3] -Input [1]: [w_warehouse_sk#13] -Condition : isnotnull(w_warehouse_sk#13) +Input [1]: [w_warehouse_sk#12] +Condition : isnotnull(w_warehouse_sk#12) (16) BroadcastExchange -Input [1]: [w_warehouse_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Input [1]: [w_warehouse_sk#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [inv_warehouse_sk#2] -Right keys [1]: [w_warehouse_sk#13] +Right keys [1]: [w_warehouse_sk#12] Join condition: None (18) Project [codegen id : 4] Output [5]: [inv_quantity_on_hand#3, i_brand#8, i_class#9, i_category#10, i_product_name#11] -Input [7]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, i_brand#8, i_class#9, i_category#10, i_product_name#11, w_warehouse_sk#13] +Input [7]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, i_brand#8, i_class#9, i_category#10, i_product_name#11, w_warehouse_sk#12] (19) HashAggregate [codegen id : 4] Input [5]: [inv_quantity_on_hand#3, i_brand#8, i_class#9, i_category#10, i_product_name#11] Keys [4]: [i_product_name#11, i_brand#8, i_class#9, i_category#10] Functions [1]: [partial_avg(inv_quantity_on_hand#3)] -Aggregate Attributes [2]: [sum#15, count#16] -Results [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#17, count#18] +Aggregate Attributes [2]: [sum#13, count#14] +Results [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16] (20) Exchange -Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#17, count#18] -Arguments: hashpartitioning(i_product_name#11, i_brand#8, i_class#9, i_category#10, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16] +Arguments: hashpartitioning(i_product_name#11, i_brand#8, i_class#9, i_category#10, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 5] -Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#17, count#18] +Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16] Keys [4]: [i_product_name#11, i_brand#8, i_class#9, i_category#10] Functions [1]: [avg(inv_quantity_on_hand#3)] -Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#20] -Results [5]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, avg(inv_quantity_on_hand#3)#20 AS qoh#21] +Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#17] +Results [5]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, avg(inv_quantity_on_hand#3)#17 AS qoh#18] (22) HashAggregate [codegen id : 5] -Input [5]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, qoh#21] +Input [5]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, qoh#18] Keys [4]: [i_product_name#11, i_brand#8, i_class#9, i_category#10] -Functions [1]: [partial_avg(qoh#21)] -Aggregate Attributes [2]: [sum#22, count#23] -Results [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#24, count#25] +Functions [1]: [partial_avg(qoh#18)] +Aggregate Attributes [2]: [sum#19, count#20] +Results [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#21, count#22] (23) HashAggregate [codegen id : 5] -Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#24, count#25] +Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#21, count#22] Keys [4]: [i_product_name#11, i_brand#8, i_class#9, i_category#10] -Functions [1]: [avg(qoh#21)] -Aggregate Attributes [1]: [avg(qoh#21)#26] -Results [5]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, avg(qoh#21)#26 AS qoh#27] +Functions [1]: [avg(qoh#18)] +Aggregate Attributes [1]: [avg(qoh#18)#23] +Results [5]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, avg(qoh#18)#23 AS qoh#24] (24) ReusedExchange [Reuses operator id: 20] -Output [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#17, count#18] +Output [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16] (25) HashAggregate [codegen id : 10] -Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#17, count#18] +Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16] Keys [4]: [i_product_name#11, i_brand#8, i_class#9, i_category#10] Functions [1]: [avg(inv_quantity_on_hand#3)] -Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#20] -Results [4]: [i_product_name#11, i_brand#8, i_class#9, avg(inv_quantity_on_hand#3)#20 AS qoh#21] +Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#17] +Results [4]: [i_product_name#11, i_brand#8, i_class#9, avg(inv_quantity_on_hand#3)#17 AS qoh#18] (26) HashAggregate [codegen id : 10] -Input [4]: [i_product_name#11, i_brand#8, i_class#9, qoh#21] +Input [4]: [i_product_name#11, i_brand#8, i_class#9, qoh#18] Keys [3]: [i_product_name#11, i_brand#8, i_class#9] -Functions [1]: [partial_avg(qoh#21)] -Aggregate Attributes [2]: [sum#28, count#29] -Results [5]: [i_product_name#11, i_brand#8, i_class#9, sum#30, count#31] +Functions [1]: [partial_avg(qoh#18)] +Aggregate Attributes [2]: [sum#25, count#26] +Results [5]: [i_product_name#11, i_brand#8, i_class#9, sum#27, count#28] (27) Exchange -Input [5]: [i_product_name#11, i_brand#8, i_class#9, sum#30, count#31] -Arguments: hashpartitioning(i_product_name#11, i_brand#8, i_class#9, 5), ENSURE_REQUIREMENTS, [id=#32] +Input [5]: [i_product_name#11, i_brand#8, i_class#9, sum#27, count#28] +Arguments: hashpartitioning(i_product_name#11, i_brand#8, i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 11] -Input [5]: [i_product_name#11, i_brand#8, i_class#9, sum#30, count#31] +Input [5]: [i_product_name#11, i_brand#8, i_class#9, sum#27, count#28] Keys [3]: [i_product_name#11, i_brand#8, i_class#9] -Functions [1]: [avg(qoh#21)] -Aggregate Attributes [1]: [avg(qoh#21)#33] -Results [5]: [i_product_name#11, i_brand#8, i_class#9, null AS i_category#34, avg(qoh#21)#33 AS qoh#35] +Functions [1]: [avg(qoh#18)] +Aggregate Attributes [1]: [avg(qoh#18)#29] +Results [5]: [i_product_name#11, i_brand#8, i_class#9, null AS i_category#30, avg(qoh#18)#29 AS qoh#31] (29) ReusedExchange [Reuses operator id: 20] -Output [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#17, count#18] +Output [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16] (30) HashAggregate [codegen id : 16] -Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#17, count#18] +Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16] Keys [4]: [i_product_name#11, i_brand#8, i_class#9, i_category#10] Functions [1]: [avg(inv_quantity_on_hand#3)] -Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#20] -Results [3]: [i_product_name#11, i_brand#8, avg(inv_quantity_on_hand#3)#20 AS qoh#21] +Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#17] +Results [3]: [i_product_name#11, i_brand#8, avg(inv_quantity_on_hand#3)#17 AS qoh#18] (31) HashAggregate [codegen id : 16] -Input [3]: [i_product_name#11, i_brand#8, qoh#21] +Input [3]: [i_product_name#11, i_brand#8, qoh#18] Keys [2]: [i_product_name#11, i_brand#8] -Functions [1]: [partial_avg(qoh#21)] -Aggregate Attributes [2]: [sum#36, count#37] -Results [4]: [i_product_name#11, i_brand#8, sum#38, count#39] +Functions [1]: [partial_avg(qoh#18)] +Aggregate Attributes [2]: [sum#32, count#33] +Results [4]: [i_product_name#11, i_brand#8, sum#34, count#35] (32) Exchange -Input [4]: [i_product_name#11, i_brand#8, sum#38, count#39] -Arguments: hashpartitioning(i_product_name#11, i_brand#8, 5), ENSURE_REQUIREMENTS, [id=#40] +Input [4]: [i_product_name#11, i_brand#8, sum#34, count#35] +Arguments: hashpartitioning(i_product_name#11, i_brand#8, 5), ENSURE_REQUIREMENTS, [plan_id=5] (33) HashAggregate [codegen id : 17] -Input [4]: [i_product_name#11, i_brand#8, sum#38, count#39] +Input [4]: [i_product_name#11, i_brand#8, sum#34, count#35] Keys [2]: [i_product_name#11, i_brand#8] -Functions [1]: [avg(qoh#21)] -Aggregate Attributes [1]: [avg(qoh#21)#41] -Results [5]: [i_product_name#11, i_brand#8, null AS i_class#42, null AS i_category#43, avg(qoh#21)#41 AS qoh#44] +Functions [1]: [avg(qoh#18)] +Aggregate Attributes [1]: [avg(qoh#18)#36] +Results [5]: [i_product_name#11, i_brand#8, null AS i_class#37, null AS i_category#38, avg(qoh#18)#36 AS qoh#39] (34) ReusedExchange [Reuses operator id: 20] -Output [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#17, count#18] +Output [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16] (35) HashAggregate [codegen id : 22] -Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#17, count#18] +Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16] Keys [4]: [i_product_name#11, i_brand#8, i_class#9, i_category#10] Functions [1]: [avg(inv_quantity_on_hand#3)] -Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#20] -Results [2]: [i_product_name#11, avg(inv_quantity_on_hand#3)#20 AS qoh#21] +Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#17] +Results [2]: [i_product_name#11, avg(inv_quantity_on_hand#3)#17 AS qoh#18] (36) HashAggregate [codegen id : 22] -Input [2]: [i_product_name#11, qoh#21] +Input [2]: [i_product_name#11, qoh#18] Keys [1]: [i_product_name#11] -Functions [1]: [partial_avg(qoh#21)] -Aggregate Attributes [2]: [sum#45, count#46] -Results [3]: [i_product_name#11, sum#47, count#48] +Functions [1]: [partial_avg(qoh#18)] +Aggregate Attributes [2]: [sum#40, count#41] +Results [3]: [i_product_name#11, sum#42, count#43] (37) Exchange -Input [3]: [i_product_name#11, sum#47, count#48] -Arguments: hashpartitioning(i_product_name#11, 5), ENSURE_REQUIREMENTS, [id=#49] +Input [3]: [i_product_name#11, sum#42, count#43] +Arguments: hashpartitioning(i_product_name#11, 5), ENSURE_REQUIREMENTS, [plan_id=6] (38) HashAggregate [codegen id : 23] -Input [3]: [i_product_name#11, sum#47, count#48] +Input [3]: [i_product_name#11, sum#42, count#43] Keys [1]: [i_product_name#11] -Functions [1]: [avg(qoh#21)] -Aggregate Attributes [1]: [avg(qoh#21)#50] -Results [5]: [i_product_name#11, null AS i_brand#51, null AS i_class#52, null AS i_category#53, avg(qoh#21)#50 AS qoh#54] +Functions [1]: [avg(qoh#18)] +Aggregate Attributes [1]: [avg(qoh#18)#44] +Results [5]: [i_product_name#11, null AS i_brand#45, null AS i_class#46, null AS i_category#47, avg(qoh#18)#44 AS qoh#48] (39) ReusedExchange [Reuses operator id: 20] -Output [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#17, count#18] +Output [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16] (40) HashAggregate [codegen id : 28] -Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#17, count#18] +Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16] Keys [4]: [i_product_name#11, i_brand#8, i_class#9, i_category#10] Functions [1]: [avg(inv_quantity_on_hand#3)] -Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#20] -Results [1]: [avg(inv_quantity_on_hand#3)#20 AS qoh#21] +Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#17] +Results [1]: [avg(inv_quantity_on_hand#3)#17 AS qoh#18] (41) HashAggregate [codegen id : 28] -Input [1]: [qoh#21] +Input [1]: [qoh#18] Keys: [] -Functions [1]: [partial_avg(qoh#21)] -Aggregate Attributes [2]: [sum#55, count#56] -Results [2]: [sum#57, count#58] +Functions [1]: [partial_avg(qoh#18)] +Aggregate Attributes [2]: [sum#49, count#50] +Results [2]: [sum#51, count#52] (42) Exchange -Input [2]: [sum#57, count#58] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#59] +Input [2]: [sum#51, count#52] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (43) HashAggregate [codegen id : 29] -Input [2]: [sum#57, count#58] +Input [2]: [sum#51, count#52] Keys: [] -Functions [1]: [avg(qoh#21)] -Aggregate Attributes [1]: [avg(qoh#21)#60] -Results [5]: [null AS i_product_name#61, null AS i_brand#62, null AS i_class#63, null AS i_category#64, avg(qoh#21)#60 AS qoh#65] +Functions [1]: [avg(qoh#18)] +Aggregate Attributes [1]: [avg(qoh#18)#53] +Results [5]: [null AS i_product_name#54, null AS i_brand#55, null AS i_class#56, null AS i_category#57, avg(qoh#18)#53 AS qoh#58] (44) Union (45) TakeOrderedAndProject -Input [5]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, qoh#27] -Arguments: 100, [qoh#27 ASC NULLS FIRST, i_product_name#11 ASC NULLS FIRST, i_brand#8 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_category#10 ASC NULLS FIRST], [i_product_name#11, i_brand#8, i_class#9, i_category#10, qoh#27] +Input [5]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, qoh#24] +Arguments: 100, [qoh#24 ASC NULLS FIRST, i_product_name#11 ASC NULLS FIRST, i_brand#8 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_category#10 ASC NULLS FIRST], [i_product_name#11, i_brand#8, i_class#9, i_category#10, qoh#24] ===== Subqueries ===== @@ -288,25 +288,25 @@ BroadcastExchange (50) (46) Scan parquet default.date_dim -Output [2]: [d_date_sk#6, d_month_seq#66] +Output [2]: [d_date_sk#6, d_month_seq#59] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_date_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#6, d_month_seq#66] +Input [2]: [d_date_sk#6, d_month_seq#59] (48) Filter [codegen id : 1] -Input [2]: [d_date_sk#6, d_month_seq#66] -Condition : (((isnotnull(d_month_seq#66) AND (d_month_seq#66 >= 1212)) AND (d_month_seq#66 <= 1223)) AND isnotnull(d_date_sk#6)) +Input [2]: [d_date_sk#6, d_month_seq#59] +Condition : (((isnotnull(d_month_seq#59) AND (d_month_seq#59 >= 1212)) AND (d_month_seq#59 <= 1223)) AND isnotnull(d_date_sk#6)) (49) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [2]: [d_date_sk#6, d_month_seq#66] +Input [2]: [d_date_sk#6, d_month_seq#59] (50) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#67] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q24.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q24.sf100/explain.txt index db2116117c81e..22079f0f10a8a 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q24.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q24.sf100/explain.txt @@ -69,210 +69,210 @@ Input [5]: [s_store_sk#1, s_store_name#2, s_market_id#3, s_state#4, s_zip#5] (5) BroadcastExchange Input [4]: [s_store_sk#1, s_store_name#2, s_state#4, s_zip#5] -Arguments: HashedRelationBroadcastMode(List(input[3, string, true]),false), [id=#6] +Arguments: HashedRelationBroadcastMode(List(input[3, string, true]),false), [plan_id=1] (6) Scan parquet default.customer_address -Output [4]: [ca_address_sk#7, ca_state#8, ca_zip#9, ca_country#10] +Output [4]: [ca_address_sk#6, ca_state#7, ca_zip#8, ca_country#9] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct (7) ColumnarToRow -Input [4]: [ca_address_sk#7, ca_state#8, ca_zip#9, ca_country#10] +Input [4]: [ca_address_sk#6, ca_state#7, ca_zip#8, ca_country#9] (8) Filter -Input [4]: [ca_address_sk#7, ca_state#8, ca_zip#9, ca_country#10] -Condition : ((isnotnull(ca_address_sk#7) AND isnotnull(ca_country#10)) AND isnotnull(ca_zip#9)) +Input [4]: [ca_address_sk#6, ca_state#7, ca_zip#8, ca_country#9] +Condition : ((isnotnull(ca_address_sk#6) AND isnotnull(ca_country#9)) AND isnotnull(ca_zip#8)) (9) BroadcastHashJoin [codegen id : 2] Left keys [1]: [s_zip#5] -Right keys [1]: [ca_zip#9] +Right keys [1]: [ca_zip#8] Join condition: None (10) Project [codegen id : 2] -Output [6]: [s_store_sk#1, s_store_name#2, s_state#4, ca_address_sk#7, ca_state#8, ca_country#10] -Input [8]: [s_store_sk#1, s_store_name#2, s_state#4, s_zip#5, ca_address_sk#7, ca_state#8, ca_zip#9, ca_country#10] +Output [6]: [s_store_sk#1, s_store_name#2, s_state#4, ca_address_sk#6, ca_state#7, ca_country#9] +Input [8]: [s_store_sk#1, s_store_name#2, s_state#4, s_zip#5, ca_address_sk#6, ca_state#7, ca_zip#8, ca_country#9] (11) BroadcastExchange -Input [6]: [s_store_sk#1, s_store_name#2, s_state#4, ca_address_sk#7, ca_state#8, ca_country#10] -Arguments: HashedRelationBroadcastMode(List(input[3, int, true], upper(input[5, string, true])),false), [id=#11] +Input [6]: [s_store_sk#1, s_store_name#2, s_state#4, ca_address_sk#6, ca_state#7, ca_country#9] +Arguments: HashedRelationBroadcastMode(List(input[3, int, true], upper(input[5, string, true])),false), [plan_id=2] (12) Scan parquet default.customer -Output [5]: [c_customer_sk#12, c_current_addr_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] +Output [5]: [c_customer_sk#10, c_current_addr_sk#11, c_first_name#12, c_last_name#13, c_birth_country#14] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk), IsNotNull(c_birth_country)] ReadSchema: struct (13) ColumnarToRow -Input [5]: [c_customer_sk#12, c_current_addr_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] +Input [5]: [c_customer_sk#10, c_current_addr_sk#11, c_first_name#12, c_last_name#13, c_birth_country#14] (14) Filter -Input [5]: [c_customer_sk#12, c_current_addr_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] -Condition : ((isnotnull(c_customer_sk#12) AND isnotnull(c_current_addr_sk#13)) AND isnotnull(c_birth_country#16)) +Input [5]: [c_customer_sk#10, c_current_addr_sk#11, c_first_name#12, c_last_name#13, c_birth_country#14] +Condition : ((isnotnull(c_customer_sk#10) AND isnotnull(c_current_addr_sk#11)) AND isnotnull(c_birth_country#14)) (15) BroadcastHashJoin [codegen id : 3] -Left keys [2]: [ca_address_sk#7, upper(ca_country#10)] -Right keys [2]: [c_current_addr_sk#13, c_birth_country#16] +Left keys [2]: [ca_address_sk#6, upper(ca_country#9)] +Right keys [2]: [c_current_addr_sk#11, c_birth_country#14] Join condition: None (16) Project [codegen id : 3] -Output [7]: [s_store_sk#1, s_store_name#2, s_state#4, ca_state#8, c_customer_sk#12, c_first_name#14, c_last_name#15] -Input [11]: [s_store_sk#1, s_store_name#2, s_state#4, ca_address_sk#7, ca_state#8, ca_country#10, c_customer_sk#12, c_current_addr_sk#13, c_first_name#14, c_last_name#15, c_birth_country#16] +Output [7]: [s_store_sk#1, s_store_name#2, s_state#4, ca_state#7, c_customer_sk#10, c_first_name#12, c_last_name#13] +Input [11]: [s_store_sk#1, s_store_name#2, s_state#4, ca_address_sk#6, ca_state#7, ca_country#9, c_customer_sk#10, c_current_addr_sk#11, c_first_name#12, c_last_name#13, c_birth_country#14] (17) BroadcastExchange -Input [7]: [s_store_sk#1, s_store_name#2, s_state#4, ca_state#8, c_customer_sk#12, c_first_name#14, c_last_name#15] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, true] as bigint), 32) | (cast(input[4, int, true] as bigint) & 4294967295))),false), [id=#17] +Input [7]: [s_store_sk#1, s_store_name#2, s_state#4, ca_state#7, c_customer_sk#10, c_first_name#12, c_last_name#13] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, true] as bigint), 32) | (cast(input[4, int, true] as bigint) & 4294967295))),false), [plan_id=3] (18) Scan parquet default.store_sales -Output [6]: [ss_item_sk#18, ss_customer_sk#19, ss_store_sk#20, ss_ticket_number#21, ss_net_paid#22, ss_sold_date_sk#23] +Output [6]: [ss_item_sk#15, ss_customer_sk#16, ss_store_sk#17, ss_ticket_number#18, ss_net_paid#19, ss_sold_date_sk#20] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (19) ColumnarToRow -Input [6]: [ss_item_sk#18, ss_customer_sk#19, ss_store_sk#20, ss_ticket_number#21, ss_net_paid#22, ss_sold_date_sk#23] +Input [6]: [ss_item_sk#15, ss_customer_sk#16, ss_store_sk#17, ss_ticket_number#18, ss_net_paid#19, ss_sold_date_sk#20] (20) Filter -Input [6]: [ss_item_sk#18, ss_customer_sk#19, ss_store_sk#20, ss_ticket_number#21, ss_net_paid#22, ss_sold_date_sk#23] -Condition : (((isnotnull(ss_ticket_number#21) AND isnotnull(ss_item_sk#18)) AND isnotnull(ss_store_sk#20)) AND isnotnull(ss_customer_sk#19)) +Input [6]: [ss_item_sk#15, ss_customer_sk#16, ss_store_sk#17, ss_ticket_number#18, ss_net_paid#19, ss_sold_date_sk#20] +Condition : (((isnotnull(ss_ticket_number#18) AND isnotnull(ss_item_sk#15)) AND isnotnull(ss_store_sk#17)) AND isnotnull(ss_customer_sk#16)) (21) Project -Output [5]: [ss_item_sk#18, ss_customer_sk#19, ss_store_sk#20, ss_ticket_number#21, ss_net_paid#22] -Input [6]: [ss_item_sk#18, ss_customer_sk#19, ss_store_sk#20, ss_ticket_number#21, ss_net_paid#22, ss_sold_date_sk#23] +Output [5]: [ss_item_sk#15, ss_customer_sk#16, ss_store_sk#17, ss_ticket_number#18, ss_net_paid#19] +Input [6]: [ss_item_sk#15, ss_customer_sk#16, ss_store_sk#17, ss_ticket_number#18, ss_net_paid#19, ss_sold_date_sk#20] (22) BroadcastHashJoin [codegen id : 5] -Left keys [2]: [s_store_sk#1, c_customer_sk#12] -Right keys [2]: [ss_store_sk#20, ss_customer_sk#19] +Left keys [2]: [s_store_sk#1, c_customer_sk#10] +Right keys [2]: [ss_store_sk#17, ss_customer_sk#16] Join condition: None (23) Project [codegen id : 5] -Output [8]: [s_store_name#2, s_state#4, ca_state#8, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_ticket_number#21, ss_net_paid#22] -Input [12]: [s_store_sk#1, s_store_name#2, s_state#4, ca_state#8, c_customer_sk#12, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_customer_sk#19, ss_store_sk#20, ss_ticket_number#21, ss_net_paid#22] +Output [8]: [s_store_name#2, s_state#4, ca_state#7, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_ticket_number#18, ss_net_paid#19] +Input [12]: [s_store_sk#1, s_store_name#2, s_state#4, ca_state#7, c_customer_sk#10, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_customer_sk#16, ss_store_sk#17, ss_ticket_number#18, ss_net_paid#19] (24) Scan parquet default.item -Output [6]: [i_item_sk#24, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] +Output [6]: [i_item_sk#21, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_color), EqualTo(i_color,pale ), IsNotNull(i_item_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 4] -Input [6]: [i_item_sk#24, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] +Input [6]: [i_item_sk#21, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] (26) Filter [codegen id : 4] -Input [6]: [i_item_sk#24, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] -Condition : ((isnotnull(i_color#27) AND (i_color#27 = pale )) AND isnotnull(i_item_sk#24)) +Input [6]: [i_item_sk#21, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] +Condition : ((isnotnull(i_color#24) AND (i_color#24 = pale )) AND isnotnull(i_item_sk#21)) (27) BroadcastExchange -Input [6]: [i_item_sk#24, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#30] +Input [6]: [i_item_sk#21, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (28) BroadcastHashJoin [codegen id : 5] -Left keys [1]: [ss_item_sk#18] -Right keys [1]: [i_item_sk#24] +Left keys [1]: [ss_item_sk#15] +Right keys [1]: [i_item_sk#21] Join condition: None (29) Project [codegen id : 5] -Output [13]: [s_store_name#2, s_state#4, ca_state#8, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_ticket_number#21, ss_net_paid#22, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] -Input [14]: [s_store_name#2, s_state#4, ca_state#8, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_ticket_number#21, ss_net_paid#22, i_item_sk#24, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] +Output [13]: [s_store_name#2, s_state#4, ca_state#7, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_ticket_number#18, ss_net_paid#19, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] +Input [14]: [s_store_name#2, s_state#4, ca_state#7, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_ticket_number#18, ss_net_paid#19, i_item_sk#21, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] (30) Exchange -Input [13]: [s_store_name#2, s_state#4, ca_state#8, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_ticket_number#21, ss_net_paid#22, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] -Arguments: hashpartitioning(ss_ticket_number#21, ss_item_sk#18, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [13]: [s_store_name#2, s_state#4, ca_state#7, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_ticket_number#18, ss_net_paid#19, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] +Arguments: hashpartitioning(ss_ticket_number#18, ss_item_sk#15, 5), ENSURE_REQUIREMENTS, [plan_id=5] (31) Sort [codegen id : 6] -Input [13]: [s_store_name#2, s_state#4, ca_state#8, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_ticket_number#21, ss_net_paid#22, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] -Arguments: [ss_ticket_number#21 ASC NULLS FIRST, ss_item_sk#18 ASC NULLS FIRST], false, 0 +Input [13]: [s_store_name#2, s_state#4, ca_state#7, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_ticket_number#18, ss_net_paid#19, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] +Arguments: [ss_ticket_number#18 ASC NULLS FIRST, ss_item_sk#15 ASC NULLS FIRST], false, 0 (32) Scan parquet default.store_returns -Output [3]: [sr_item_sk#32, sr_ticket_number#33, sr_returned_date_sk#34] +Output [3]: [sr_item_sk#27, sr_ticket_number#28, sr_returned_date_sk#29] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct (33) ColumnarToRow [codegen id : 7] -Input [3]: [sr_item_sk#32, sr_ticket_number#33, sr_returned_date_sk#34] +Input [3]: [sr_item_sk#27, sr_ticket_number#28, sr_returned_date_sk#29] (34) Filter [codegen id : 7] -Input [3]: [sr_item_sk#32, sr_ticket_number#33, sr_returned_date_sk#34] -Condition : (isnotnull(sr_ticket_number#33) AND isnotnull(sr_item_sk#32)) +Input [3]: [sr_item_sk#27, sr_ticket_number#28, sr_returned_date_sk#29] +Condition : (isnotnull(sr_ticket_number#28) AND isnotnull(sr_item_sk#27)) (35) Project [codegen id : 7] -Output [2]: [sr_item_sk#32, sr_ticket_number#33] -Input [3]: [sr_item_sk#32, sr_ticket_number#33, sr_returned_date_sk#34] +Output [2]: [sr_item_sk#27, sr_ticket_number#28] +Input [3]: [sr_item_sk#27, sr_ticket_number#28, sr_returned_date_sk#29] (36) Exchange -Input [2]: [sr_item_sk#32, sr_ticket_number#33] -Arguments: hashpartitioning(sr_ticket_number#33, sr_item_sk#32, 5), ENSURE_REQUIREMENTS, [id=#35] +Input [2]: [sr_item_sk#27, sr_ticket_number#28] +Arguments: hashpartitioning(sr_ticket_number#28, sr_item_sk#27, 5), ENSURE_REQUIREMENTS, [plan_id=6] (37) Sort [codegen id : 8] -Input [2]: [sr_item_sk#32, sr_ticket_number#33] -Arguments: [sr_ticket_number#33 ASC NULLS FIRST, sr_item_sk#32 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#27, sr_ticket_number#28] +Arguments: [sr_ticket_number#28 ASC NULLS FIRST, sr_item_sk#27 ASC NULLS FIRST], false, 0 (38) SortMergeJoin [codegen id : 9] -Left keys [2]: [ss_ticket_number#21, ss_item_sk#18] -Right keys [2]: [sr_ticket_number#33, sr_item_sk#32] +Left keys [2]: [ss_ticket_number#18, ss_item_sk#15] +Right keys [2]: [sr_ticket_number#28, sr_item_sk#27] Join condition: None (39) Project [codegen id : 9] -Output [11]: [ss_net_paid#22, s_store_name#2, s_state#4, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29, c_first_name#14, c_last_name#15, ca_state#8] -Input [15]: [s_store_name#2, s_state#4, ca_state#8, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_ticket_number#21, ss_net_paid#22, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29, sr_item_sk#32, sr_ticket_number#33] +Output [11]: [ss_net_paid#19, s_store_name#2, s_state#4, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26, c_first_name#12, c_last_name#13, ca_state#7] +Input [15]: [s_store_name#2, s_state#4, ca_state#7, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_ticket_number#18, ss_net_paid#19, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26, sr_item_sk#27, sr_ticket_number#28] (40) HashAggregate [codegen id : 9] -Input [11]: [ss_net_paid#22, s_store_name#2, s_state#4, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29, c_first_name#14, c_last_name#15, ca_state#8] -Keys [10]: [c_last_name#15, c_first_name#14, s_store_name#2, ca_state#8, s_state#4, i_color#27, i_current_price#25, i_manager_id#29, i_units#28, i_size#26] -Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#22))] -Aggregate Attributes [1]: [sum#36] -Results [11]: [c_last_name#15, c_first_name#14, s_store_name#2, ca_state#8, s_state#4, i_color#27, i_current_price#25, i_manager_id#29, i_units#28, i_size#26, sum#37] +Input [11]: [ss_net_paid#19, s_store_name#2, s_state#4, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26, c_first_name#12, c_last_name#13, ca_state#7] +Keys [10]: [c_last_name#13, c_first_name#12, s_store_name#2, ca_state#7, s_state#4, i_color#24, i_current_price#22, i_manager_id#26, i_units#25, i_size#23] +Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#19))] +Aggregate Attributes [1]: [sum#30] +Results [11]: [c_last_name#13, c_first_name#12, s_store_name#2, ca_state#7, s_state#4, i_color#24, i_current_price#22, i_manager_id#26, i_units#25, i_size#23, sum#31] (41) Exchange -Input [11]: [c_last_name#15, c_first_name#14, s_store_name#2, ca_state#8, s_state#4, i_color#27, i_current_price#25, i_manager_id#29, i_units#28, i_size#26, sum#37] -Arguments: hashpartitioning(c_last_name#15, c_first_name#14, s_store_name#2, ca_state#8, s_state#4, i_color#27, i_current_price#25, i_manager_id#29, i_units#28, i_size#26, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [11]: [c_last_name#13, c_first_name#12, s_store_name#2, ca_state#7, s_state#4, i_color#24, i_current_price#22, i_manager_id#26, i_units#25, i_size#23, sum#31] +Arguments: hashpartitioning(c_last_name#13, c_first_name#12, s_store_name#2, ca_state#7, s_state#4, i_color#24, i_current_price#22, i_manager_id#26, i_units#25, i_size#23, 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) HashAggregate [codegen id : 10] -Input [11]: [c_last_name#15, c_first_name#14, s_store_name#2, ca_state#8, s_state#4, i_color#27, i_current_price#25, i_manager_id#29, i_units#28, i_size#26, sum#37] -Keys [10]: [c_last_name#15, c_first_name#14, s_store_name#2, ca_state#8, s_state#4, i_color#27, i_current_price#25, i_manager_id#29, i_units#28, i_size#26] -Functions [1]: [sum(UnscaledValue(ss_net_paid#22))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#22))#39] -Results [4]: [c_last_name#15, c_first_name#14, s_store_name#2, MakeDecimal(sum(UnscaledValue(ss_net_paid#22))#39,17,2) AS netpaid#40] +Input [11]: [c_last_name#13, c_first_name#12, s_store_name#2, ca_state#7, s_state#4, i_color#24, i_current_price#22, i_manager_id#26, i_units#25, i_size#23, sum#31] +Keys [10]: [c_last_name#13, c_first_name#12, s_store_name#2, ca_state#7, s_state#4, i_color#24, i_current_price#22, i_manager_id#26, i_units#25, i_size#23] +Functions [1]: [sum(UnscaledValue(ss_net_paid#19))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#19))#32] +Results [4]: [c_last_name#13, c_first_name#12, s_store_name#2, MakeDecimal(sum(UnscaledValue(ss_net_paid#19))#32,17,2) AS netpaid#33] (43) HashAggregate [codegen id : 10] -Input [4]: [c_last_name#15, c_first_name#14, s_store_name#2, netpaid#40] -Keys [3]: [c_last_name#15, c_first_name#14, s_store_name#2] -Functions [1]: [partial_sum(netpaid#40)] -Aggregate Attributes [2]: [sum#41, isEmpty#42] -Results [5]: [c_last_name#15, c_first_name#14, s_store_name#2, sum#43, isEmpty#44] +Input [4]: [c_last_name#13, c_first_name#12, s_store_name#2, netpaid#33] +Keys [3]: [c_last_name#13, c_first_name#12, s_store_name#2] +Functions [1]: [partial_sum(netpaid#33)] +Aggregate Attributes [2]: [sum#34, isEmpty#35] +Results [5]: [c_last_name#13, c_first_name#12, s_store_name#2, sum#36, isEmpty#37] (44) Exchange -Input [5]: [c_last_name#15, c_first_name#14, s_store_name#2, sum#43, isEmpty#44] -Arguments: hashpartitioning(c_last_name#15, c_first_name#14, s_store_name#2, 5), ENSURE_REQUIREMENTS, [id=#45] +Input [5]: [c_last_name#13, c_first_name#12, s_store_name#2, sum#36, isEmpty#37] +Arguments: hashpartitioning(c_last_name#13, c_first_name#12, s_store_name#2, 5), ENSURE_REQUIREMENTS, [plan_id=8] (45) HashAggregate [codegen id : 11] -Input [5]: [c_last_name#15, c_first_name#14, s_store_name#2, sum#43, isEmpty#44] -Keys [3]: [c_last_name#15, c_first_name#14, s_store_name#2] -Functions [1]: [sum(netpaid#40)] -Aggregate Attributes [1]: [sum(netpaid#40)#46] -Results [4]: [c_last_name#15, c_first_name#14, s_store_name#2, sum(netpaid#40)#46 AS paid#47] +Input [5]: [c_last_name#13, c_first_name#12, s_store_name#2, sum#36, isEmpty#37] +Keys [3]: [c_last_name#13, c_first_name#12, s_store_name#2] +Functions [1]: [sum(netpaid#33)] +Aggregate Attributes [1]: [sum(netpaid#33)#38] +Results [4]: [c_last_name#13, c_first_name#12, s_store_name#2, sum(netpaid#33)#38 AS paid#39] (46) Filter [codegen id : 11] -Input [4]: [c_last_name#15, c_first_name#14, s_store_name#2, paid#47] -Condition : (isnotnull(paid#47) AND (cast(paid#47 as decimal(33,8)) > cast(Subquery scalar-subquery#48, [id=#49] as decimal(33,8)))) +Input [4]: [c_last_name#13, c_first_name#12, s_store_name#2, paid#39] +Condition : (isnotnull(paid#39) AND (cast(paid#39 as decimal(33,8)) > cast(Subquery scalar-subquery#40, [id=#41] as decimal(33,8)))) (47) Exchange -Input [4]: [c_last_name#15, c_first_name#14, s_store_name#2, paid#47] -Arguments: rangepartitioning(c_last_name#15 ASC NULLS FIRST, c_first_name#14 ASC NULLS FIRST, s_store_name#2 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#50] +Input [4]: [c_last_name#13, c_first_name#12, s_store_name#2, paid#39] +Arguments: rangepartitioning(c_last_name#13 ASC NULLS FIRST, c_first_name#12 ASC NULLS FIRST, s_store_name#2 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=9] (48) Sort [codegen id : 12] -Input [4]: [c_last_name#15, c_first_name#14, s_store_name#2, paid#47] -Arguments: [c_last_name#15 ASC NULLS FIRST, c_first_name#14 ASC NULLS FIRST, s_store_name#2 ASC NULLS FIRST], true, 0 +Input [4]: [c_last_name#13, c_first_name#12, s_store_name#2, paid#39] +Arguments: [c_last_name#13 ASC NULLS FIRST, c_first_name#12 ASC NULLS FIRST, s_store_name#2 ASC NULLS FIRST], true, 0 ===== Subqueries ===== -Subquery:1 Hosting operator id = 46 Hosting Expression = Subquery scalar-subquery#48, [id=#49] +Subquery:1 Hosting operator id = 46 Hosting Expression = Subquery scalar-subquery#40, [id=#41] * HashAggregate (76) +- Exchange (75) +- * HashAggregate (74) @@ -304,132 +304,132 @@ Subquery:1 Hosting operator id = 46 Hosting Expression = Subquery scalar-subquer (49) ReusedExchange [Reuses operator id: 17] -Output [7]: [s_store_sk#1, s_store_name#2, s_state#4, ca_state#8, c_customer_sk#12, c_first_name#14, c_last_name#15] +Output [7]: [s_store_sk#1, s_store_name#2, s_state#4, ca_state#7, c_customer_sk#10, c_first_name#12, c_last_name#13] (50) Scan parquet default.store_sales -Output [6]: [ss_item_sk#18, ss_customer_sk#19, ss_store_sk#20, ss_ticket_number#21, ss_net_paid#22, ss_sold_date_sk#23] +Output [6]: [ss_item_sk#15, ss_customer_sk#16, ss_store_sk#17, ss_ticket_number#18, ss_net_paid#19, ss_sold_date_sk#20] Batched: true Location [not included in comparison]/{warehouse_dir}/store_sales] PushedFilters: [IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk)] ReadSchema: struct (51) ColumnarToRow -Input [6]: [ss_item_sk#18, ss_customer_sk#19, ss_store_sk#20, ss_ticket_number#21, ss_net_paid#22, ss_sold_date_sk#23] +Input [6]: [ss_item_sk#15, ss_customer_sk#16, ss_store_sk#17, ss_ticket_number#18, ss_net_paid#19, ss_sold_date_sk#20] (52) Filter -Input [6]: [ss_item_sk#18, ss_customer_sk#19, ss_store_sk#20, ss_ticket_number#21, ss_net_paid#22, ss_sold_date_sk#23] -Condition : (((isnotnull(ss_ticket_number#21) AND isnotnull(ss_item_sk#18)) AND isnotnull(ss_store_sk#20)) AND isnotnull(ss_customer_sk#19)) +Input [6]: [ss_item_sk#15, ss_customer_sk#16, ss_store_sk#17, ss_ticket_number#18, ss_net_paid#19, ss_sold_date_sk#20] +Condition : (((isnotnull(ss_ticket_number#18) AND isnotnull(ss_item_sk#15)) AND isnotnull(ss_store_sk#17)) AND isnotnull(ss_customer_sk#16)) (53) Project -Output [5]: [ss_item_sk#18, ss_customer_sk#19, ss_store_sk#20, ss_ticket_number#21, ss_net_paid#22] -Input [6]: [ss_item_sk#18, ss_customer_sk#19, ss_store_sk#20, ss_ticket_number#21, ss_net_paid#22, ss_sold_date_sk#23] +Output [5]: [ss_item_sk#15, ss_customer_sk#16, ss_store_sk#17, ss_ticket_number#18, ss_net_paid#19] +Input [6]: [ss_item_sk#15, ss_customer_sk#16, ss_store_sk#17, ss_ticket_number#18, ss_net_paid#19, ss_sold_date_sk#20] (54) BroadcastHashJoin [codegen id : 4] -Left keys [2]: [s_store_sk#1, c_customer_sk#12] -Right keys [2]: [ss_store_sk#20, ss_customer_sk#19] +Left keys [2]: [s_store_sk#1, c_customer_sk#10] +Right keys [2]: [ss_store_sk#17, ss_customer_sk#16] Join condition: None (55) Project [codegen id : 4] -Output [8]: [s_store_name#2, s_state#4, ca_state#8, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_ticket_number#21, ss_net_paid#22] -Input [12]: [s_store_sk#1, s_store_name#2, s_state#4, ca_state#8, c_customer_sk#12, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_customer_sk#19, ss_store_sk#20, ss_ticket_number#21, ss_net_paid#22] +Output [8]: [s_store_name#2, s_state#4, ca_state#7, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_ticket_number#18, ss_net_paid#19] +Input [12]: [s_store_sk#1, s_store_name#2, s_state#4, ca_state#7, c_customer_sk#10, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_customer_sk#16, ss_store_sk#17, ss_ticket_number#18, ss_net_paid#19] (56) Exchange -Input [8]: [s_store_name#2, s_state#4, ca_state#8, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_ticket_number#21, ss_net_paid#22] -Arguments: hashpartitioning(ss_item_sk#18, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [8]: [s_store_name#2, s_state#4, ca_state#7, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_ticket_number#18, ss_net_paid#19] +Arguments: hashpartitioning(ss_item_sk#15, 5), ENSURE_REQUIREMENTS, [plan_id=10] (57) Sort [codegen id : 5] -Input [8]: [s_store_name#2, s_state#4, ca_state#8, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_ticket_number#21, ss_net_paid#22] -Arguments: [ss_item_sk#18 ASC NULLS FIRST], false, 0 +Input [8]: [s_store_name#2, s_state#4, ca_state#7, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_ticket_number#18, ss_net_paid#19] +Arguments: [ss_item_sk#15 ASC NULLS FIRST], false, 0 (58) Scan parquet default.item -Output [6]: [i_item_sk#24, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] +Output [6]: [i_item_sk#21, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (59) ColumnarToRow [codegen id : 6] -Input [6]: [i_item_sk#24, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] +Input [6]: [i_item_sk#21, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] (60) Filter [codegen id : 6] -Input [6]: [i_item_sk#24, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] -Condition : isnotnull(i_item_sk#24) +Input [6]: [i_item_sk#21, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] +Condition : isnotnull(i_item_sk#21) (61) Exchange -Input [6]: [i_item_sk#24, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] -Arguments: hashpartitioning(i_item_sk#24, 5), ENSURE_REQUIREMENTS, [id=#52] +Input [6]: [i_item_sk#21, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] +Arguments: hashpartitioning(i_item_sk#21, 5), ENSURE_REQUIREMENTS, [plan_id=11] (62) Sort [codegen id : 7] -Input [6]: [i_item_sk#24, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] -Arguments: [i_item_sk#24 ASC NULLS FIRST], false, 0 +Input [6]: [i_item_sk#21, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] +Arguments: [i_item_sk#21 ASC NULLS FIRST], false, 0 (63) SortMergeJoin [codegen id : 8] -Left keys [1]: [ss_item_sk#18] -Right keys [1]: [i_item_sk#24] +Left keys [1]: [ss_item_sk#15] +Right keys [1]: [i_item_sk#21] Join condition: None (64) Project [codegen id : 8] -Output [13]: [s_store_name#2, s_state#4, ca_state#8, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_ticket_number#21, ss_net_paid#22, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] -Input [14]: [s_store_name#2, s_state#4, ca_state#8, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_ticket_number#21, ss_net_paid#22, i_item_sk#24, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] +Output [13]: [s_store_name#2, s_state#4, ca_state#7, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_ticket_number#18, ss_net_paid#19, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] +Input [14]: [s_store_name#2, s_state#4, ca_state#7, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_ticket_number#18, ss_net_paid#19, i_item_sk#21, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] (65) Exchange -Input [13]: [s_store_name#2, s_state#4, ca_state#8, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_ticket_number#21, ss_net_paid#22, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] -Arguments: hashpartitioning(ss_ticket_number#21, ss_item_sk#18, 5), ENSURE_REQUIREMENTS, [id=#53] +Input [13]: [s_store_name#2, s_state#4, ca_state#7, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_ticket_number#18, ss_net_paid#19, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] +Arguments: hashpartitioning(ss_ticket_number#18, ss_item_sk#15, 5), ENSURE_REQUIREMENTS, [plan_id=12] (66) Sort [codegen id : 9] -Input [13]: [s_store_name#2, s_state#4, ca_state#8, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_ticket_number#21, ss_net_paid#22, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29] -Arguments: [ss_ticket_number#21 ASC NULLS FIRST, ss_item_sk#18 ASC NULLS FIRST], false, 0 +Input [13]: [s_store_name#2, s_state#4, ca_state#7, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_ticket_number#18, ss_net_paid#19, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26] +Arguments: [ss_ticket_number#18 ASC NULLS FIRST, ss_item_sk#15 ASC NULLS FIRST], false, 0 (67) ReusedExchange [Reuses operator id: 36] -Output [2]: [sr_item_sk#32, sr_ticket_number#33] +Output [2]: [sr_item_sk#27, sr_ticket_number#28] (68) Sort [codegen id : 11] -Input [2]: [sr_item_sk#32, sr_ticket_number#33] -Arguments: [sr_ticket_number#33 ASC NULLS FIRST, sr_item_sk#32 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#27, sr_ticket_number#28] +Arguments: [sr_ticket_number#28 ASC NULLS FIRST, sr_item_sk#27 ASC NULLS FIRST], false, 0 (69) SortMergeJoin [codegen id : 12] -Left keys [2]: [ss_ticket_number#21, ss_item_sk#18] -Right keys [2]: [sr_ticket_number#33, sr_item_sk#32] +Left keys [2]: [ss_ticket_number#18, ss_item_sk#15] +Right keys [2]: [sr_ticket_number#28, sr_item_sk#27] Join condition: None (70) Project [codegen id : 12] -Output [11]: [ss_net_paid#22, s_store_name#2, s_state#4, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29, c_first_name#14, c_last_name#15, ca_state#8] -Input [15]: [s_store_name#2, s_state#4, ca_state#8, c_first_name#14, c_last_name#15, ss_item_sk#18, ss_ticket_number#21, ss_net_paid#22, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29, sr_item_sk#32, sr_ticket_number#33] +Output [11]: [ss_net_paid#19, s_store_name#2, s_state#4, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26, c_first_name#12, c_last_name#13, ca_state#7] +Input [15]: [s_store_name#2, s_state#4, ca_state#7, c_first_name#12, c_last_name#13, ss_item_sk#15, ss_ticket_number#18, ss_net_paid#19, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26, sr_item_sk#27, sr_ticket_number#28] (71) HashAggregate [codegen id : 12] -Input [11]: [ss_net_paid#22, s_store_name#2, s_state#4, i_current_price#25, i_size#26, i_color#27, i_units#28, i_manager_id#29, c_first_name#14, c_last_name#15, ca_state#8] -Keys [10]: [c_last_name#15, c_first_name#14, s_store_name#2, ca_state#8, s_state#4, i_color#27, i_current_price#25, i_manager_id#29, i_units#28, i_size#26] -Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#22))] -Aggregate Attributes [1]: [sum#54] -Results [11]: [c_last_name#15, c_first_name#14, s_store_name#2, ca_state#8, s_state#4, i_color#27, i_current_price#25, i_manager_id#29, i_units#28, i_size#26, sum#55] +Input [11]: [ss_net_paid#19, s_store_name#2, s_state#4, i_current_price#22, i_size#23, i_color#24, i_units#25, i_manager_id#26, c_first_name#12, c_last_name#13, ca_state#7] +Keys [10]: [c_last_name#13, c_first_name#12, s_store_name#2, ca_state#7, s_state#4, i_color#24, i_current_price#22, i_manager_id#26, i_units#25, i_size#23] +Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#19))] +Aggregate Attributes [1]: [sum#42] +Results [11]: [c_last_name#13, c_first_name#12, s_store_name#2, ca_state#7, s_state#4, i_color#24, i_current_price#22, i_manager_id#26, i_units#25, i_size#23, sum#43] (72) Exchange -Input [11]: [c_last_name#15, c_first_name#14, s_store_name#2, ca_state#8, s_state#4, i_color#27, i_current_price#25, i_manager_id#29, i_units#28, i_size#26, sum#55] -Arguments: hashpartitioning(c_last_name#15, c_first_name#14, s_store_name#2, ca_state#8, s_state#4, i_color#27, i_current_price#25, i_manager_id#29, i_units#28, i_size#26, 5), ENSURE_REQUIREMENTS, [id=#56] +Input [11]: [c_last_name#13, c_first_name#12, s_store_name#2, ca_state#7, s_state#4, i_color#24, i_current_price#22, i_manager_id#26, i_units#25, i_size#23, sum#43] +Arguments: hashpartitioning(c_last_name#13, c_first_name#12, s_store_name#2, ca_state#7, s_state#4, i_color#24, i_current_price#22, i_manager_id#26, i_units#25, i_size#23, 5), ENSURE_REQUIREMENTS, [plan_id=13] (73) HashAggregate [codegen id : 13] -Input [11]: [c_last_name#15, c_first_name#14, s_store_name#2, ca_state#8, s_state#4, i_color#27, i_current_price#25, i_manager_id#29, i_units#28, i_size#26, sum#55] -Keys [10]: [c_last_name#15, c_first_name#14, s_store_name#2, ca_state#8, s_state#4, i_color#27, i_current_price#25, i_manager_id#29, i_units#28, i_size#26] -Functions [1]: [sum(UnscaledValue(ss_net_paid#22))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#22))#39] -Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#22))#39,17,2) AS netpaid#40] +Input [11]: [c_last_name#13, c_first_name#12, s_store_name#2, ca_state#7, s_state#4, i_color#24, i_current_price#22, i_manager_id#26, i_units#25, i_size#23, sum#43] +Keys [10]: [c_last_name#13, c_first_name#12, s_store_name#2, ca_state#7, s_state#4, i_color#24, i_current_price#22, i_manager_id#26, i_units#25, i_size#23] +Functions [1]: [sum(UnscaledValue(ss_net_paid#19))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#19))#32] +Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#19))#32,17,2) AS netpaid#33] (74) HashAggregate [codegen id : 13] -Input [1]: [netpaid#40] +Input [1]: [netpaid#33] Keys: [] -Functions [1]: [partial_avg(netpaid#40)] -Aggregate Attributes [2]: [sum#57, count#58] -Results [2]: [sum#59, count#60] +Functions [1]: [partial_avg(netpaid#33)] +Aggregate Attributes [2]: [sum#44, count#45] +Results [2]: [sum#46, count#47] (75) Exchange -Input [2]: [sum#59, count#60] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#61] +Input [2]: [sum#46, count#47] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=14] (76) HashAggregate [codegen id : 14] -Input [2]: [sum#59, count#60] +Input [2]: [sum#46, count#47] Keys: [] -Functions [1]: [avg(netpaid#40)] -Aggregate Attributes [1]: [avg(netpaid#40)#62] -Results [1]: [CheckOverflow((0.050000 * promote_precision(avg(netpaid#40)#62)), DecimalType(24,8)) AS (0.05 * avg(netpaid))#63] +Functions [1]: [avg(netpaid#33)] +Aggregate Attributes [1]: [avg(netpaid#33)#48] +Results [1]: [CheckOverflow((0.050000 * promote_precision(avg(netpaid#33)#48)), DecimalType(24,8)) AS (0.05 * avg(netpaid))#49] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q24/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q24/explain.txt index ea90187cb53ad..ccf92a7955987 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q24/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q24/explain.txt @@ -69,210 +69,210 @@ Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, s (5) Exchange Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5] -Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#7] +Arguments: hashpartitioning(ss_ticket_number#4, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (6) Sort [codegen id : 2] Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5] Arguments: [ss_ticket_number#4 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST], false, 0 (7) Scan parquet default.store_returns -Output [3]: [sr_item_sk#8, sr_ticket_number#9, sr_returned_date_sk#10] +Output [3]: [sr_item_sk#7, sr_ticket_number#8, sr_returned_date_sk#9] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct (8) ColumnarToRow [codegen id : 3] -Input [3]: [sr_item_sk#8, sr_ticket_number#9, sr_returned_date_sk#10] +Input [3]: [sr_item_sk#7, sr_ticket_number#8, sr_returned_date_sk#9] (9) Filter [codegen id : 3] -Input [3]: [sr_item_sk#8, sr_ticket_number#9, sr_returned_date_sk#10] -Condition : (isnotnull(sr_ticket_number#9) AND isnotnull(sr_item_sk#8)) +Input [3]: [sr_item_sk#7, sr_ticket_number#8, sr_returned_date_sk#9] +Condition : (isnotnull(sr_ticket_number#8) AND isnotnull(sr_item_sk#7)) (10) Project [codegen id : 3] -Output [2]: [sr_item_sk#8, sr_ticket_number#9] -Input [3]: [sr_item_sk#8, sr_ticket_number#9, sr_returned_date_sk#10] +Output [2]: [sr_item_sk#7, sr_ticket_number#8] +Input [3]: [sr_item_sk#7, sr_ticket_number#8, sr_returned_date_sk#9] (11) Exchange -Input [2]: [sr_item_sk#8, sr_ticket_number#9] -Arguments: hashpartitioning(sr_ticket_number#9, sr_item_sk#8, 5), ENSURE_REQUIREMENTS, [id=#11] +Input [2]: [sr_item_sk#7, sr_ticket_number#8] +Arguments: hashpartitioning(sr_ticket_number#8, sr_item_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 4] -Input [2]: [sr_item_sk#8, sr_ticket_number#9] -Arguments: [sr_ticket_number#9 ASC NULLS FIRST, sr_item_sk#8 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#7, sr_ticket_number#8] +Arguments: [sr_ticket_number#8 ASC NULLS FIRST, sr_item_sk#7 ASC NULLS FIRST], false, 0 (13) SortMergeJoin [codegen id : 9] Left keys [2]: [ss_ticket_number#4, ss_item_sk#1] -Right keys [2]: [sr_ticket_number#9, sr_item_sk#8] +Right keys [2]: [sr_ticket_number#8, sr_item_sk#7] Join condition: None (14) Project [codegen id : 9] Output [4]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5] -Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, sr_item_sk#8, sr_ticket_number#9] +Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, sr_item_sk#7, sr_ticket_number#8] (15) Scan parquet default.store -Output [5]: [s_store_sk#12, s_store_name#13, s_market_id#14, s_state#15, s_zip#16] +Output [5]: [s_store_sk#10, s_store_name#11, s_market_id#12, s_state#13, s_zip#14] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_market_id), EqualTo(s_market_id,8), IsNotNull(s_store_sk), IsNotNull(s_zip)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [5]: [s_store_sk#12, s_store_name#13, s_market_id#14, s_state#15, s_zip#16] +Input [5]: [s_store_sk#10, s_store_name#11, s_market_id#12, s_state#13, s_zip#14] (17) Filter [codegen id : 5] -Input [5]: [s_store_sk#12, s_store_name#13, s_market_id#14, s_state#15, s_zip#16] -Condition : (((isnotnull(s_market_id#14) AND (s_market_id#14 = 8)) AND isnotnull(s_store_sk#12)) AND isnotnull(s_zip#16)) +Input [5]: [s_store_sk#10, s_store_name#11, s_market_id#12, s_state#13, s_zip#14] +Condition : (((isnotnull(s_market_id#12) AND (s_market_id#12 = 8)) AND isnotnull(s_store_sk#10)) AND isnotnull(s_zip#14)) (18) Project [codegen id : 5] -Output [4]: [s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] -Input [5]: [s_store_sk#12, s_store_name#13, s_market_id#14, s_state#15, s_zip#16] +Output [4]: [s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] +Input [5]: [s_store_sk#10, s_store_name#11, s_market_id#12, s_state#13, s_zip#14] (19) BroadcastExchange -Input [4]: [s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Input [4]: [s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (20) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#12] +Right keys [1]: [s_store_sk#10] Join condition: None (21) Project [codegen id : 9] -Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16] -Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5, s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] +Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14] +Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5, s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] (22) Scan parquet default.item -Output [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Output [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_color), EqualTo(i_color,pale ), IsNotNull(i_item_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 6] -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] (24) Filter [codegen id : 6] -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Condition : ((isnotnull(i_color#21) AND (i_color#21 = pale )) AND isnotnull(i_item_sk#18)) +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Condition : ((isnotnull(i_color#18) AND (i_color#18 = pale )) AND isnotnull(i_item_sk#15)) (25) BroadcastExchange -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#24] +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (26) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#18] +Right keys [1]: [i_item_sk#15] Join condition: None (27) Project [codegen id : 9] -Output [10]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Output [10]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] (28) Scan parquet default.customer -Output [5]: [c_customer_sk#25, c_current_addr_sk#26, c_first_name#27, c_last_name#28, c_birth_country#29] +Output [5]: [c_customer_sk#21, c_current_addr_sk#22, c_first_name#23, c_last_name#24, c_birth_country#25] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk), IsNotNull(c_birth_country)] ReadSchema: struct (29) ColumnarToRow [codegen id : 7] -Input [5]: [c_customer_sk#25, c_current_addr_sk#26, c_first_name#27, c_last_name#28, c_birth_country#29] +Input [5]: [c_customer_sk#21, c_current_addr_sk#22, c_first_name#23, c_last_name#24, c_birth_country#25] (30) Filter [codegen id : 7] -Input [5]: [c_customer_sk#25, c_current_addr_sk#26, c_first_name#27, c_last_name#28, c_birth_country#29] -Condition : ((isnotnull(c_customer_sk#25) AND isnotnull(c_current_addr_sk#26)) AND isnotnull(c_birth_country#29)) +Input [5]: [c_customer_sk#21, c_current_addr_sk#22, c_first_name#23, c_last_name#24, c_birth_country#25] +Condition : ((isnotnull(c_customer_sk#21) AND isnotnull(c_current_addr_sk#22)) AND isnotnull(c_birth_country#25)) (31) BroadcastExchange -Input [5]: [c_customer_sk#25, c_current_addr_sk#26, c_first_name#27, c_last_name#28, c_birth_country#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#30] +Input [5]: [c_customer_sk#21, c_current_addr_sk#22, c_first_name#23, c_last_name#24, c_birth_country#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (32) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#25] +Right keys [1]: [c_customer_sk#21] Join condition: None (33) Project [codegen id : 9] -Output [13]: [ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_current_addr_sk#26, c_first_name#27, c_last_name#28, c_birth_country#29] -Input [15]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_customer_sk#25, c_current_addr_sk#26, c_first_name#27, c_last_name#28, c_birth_country#29] +Output [13]: [ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_current_addr_sk#22, c_first_name#23, c_last_name#24, c_birth_country#25] +Input [15]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_customer_sk#21, c_current_addr_sk#22, c_first_name#23, c_last_name#24, c_birth_country#25] (34) Scan parquet default.customer_address -Output [4]: [ca_address_sk#31, ca_state#32, ca_zip#33, ca_country#34] +Output [4]: [ca_address_sk#26, ca_state#27, ca_zip#28, ca_country#29] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_country), IsNotNull(ca_zip)] ReadSchema: struct (35) ColumnarToRow [codegen id : 8] -Input [4]: [ca_address_sk#31, ca_state#32, ca_zip#33, ca_country#34] +Input [4]: [ca_address_sk#26, ca_state#27, ca_zip#28, ca_country#29] (36) Filter [codegen id : 8] -Input [4]: [ca_address_sk#31, ca_state#32, ca_zip#33, ca_country#34] -Condition : ((isnotnull(ca_address_sk#31) AND isnotnull(ca_country#34)) AND isnotnull(ca_zip#33)) +Input [4]: [ca_address_sk#26, ca_state#27, ca_zip#28, ca_country#29] +Condition : ((isnotnull(ca_address_sk#26) AND isnotnull(ca_country#29)) AND isnotnull(ca_zip#28)) (37) BroadcastExchange -Input [4]: [ca_address_sk#31, ca_state#32, ca_zip#33, ca_country#34] -Arguments: HashedRelationBroadcastMode(List(input[0, int, false], upper(input[3, string, false]), input[2, string, false]),false), [id=#35] +Input [4]: [ca_address_sk#26, ca_state#27, ca_zip#28, ca_country#29] +Arguments: HashedRelationBroadcastMode(List(input[0, int, false], upper(input[3, string, false]), input[2, string, false]),false), [plan_id=6] (38) BroadcastHashJoin [codegen id : 9] -Left keys [3]: [c_current_addr_sk#26, c_birth_country#29, s_zip#16] -Right keys [3]: [ca_address_sk#31, upper(ca_country#34), ca_zip#33] +Left keys [3]: [c_current_addr_sk#22, c_birth_country#25, s_zip#14] +Right keys [3]: [ca_address_sk#26, upper(ca_country#29), ca_zip#28] Join condition: None (39) Project [codegen id : 9] -Output [11]: [ss_net_paid#5, s_store_name#13, s_state#15, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#27, c_last_name#28, ca_state#32] -Input [17]: [ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_current_addr_sk#26, c_first_name#27, c_last_name#28, c_birth_country#29, ca_address_sk#31, ca_state#32, ca_zip#33, ca_country#34] +Output [11]: [ss_net_paid#5, s_store_name#11, s_state#13, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#23, c_last_name#24, ca_state#27] +Input [17]: [ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_current_addr_sk#22, c_first_name#23, c_last_name#24, c_birth_country#25, ca_address_sk#26, ca_state#27, ca_zip#28, ca_country#29] (40) HashAggregate [codegen id : 9] -Input [11]: [ss_net_paid#5, s_store_name#13, s_state#15, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#27, c_last_name#28, ca_state#32] -Keys [10]: [c_last_name#28, c_first_name#27, s_store_name#13, ca_state#32, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20] +Input [11]: [ss_net_paid#5, s_store_name#11, s_state#13, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#23, c_last_name#24, ca_state#27] +Keys [10]: [c_last_name#24, c_first_name#23, s_store_name#11, ca_state#27, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17] Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum#36] -Results [11]: [c_last_name#28, c_first_name#27, s_store_name#13, ca_state#32, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#37] +Aggregate Attributes [1]: [sum#30] +Results [11]: [c_last_name#24, c_first_name#23, s_store_name#11, ca_state#27, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#31] (41) Exchange -Input [11]: [c_last_name#28, c_first_name#27, s_store_name#13, ca_state#32, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#37] -Arguments: hashpartitioning(c_last_name#28, c_first_name#27, s_store_name#13, ca_state#32, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [11]: [c_last_name#24, c_first_name#23, s_store_name#11, ca_state#27, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#31] +Arguments: hashpartitioning(c_last_name#24, c_first_name#23, s_store_name#11, ca_state#27, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) HashAggregate [codegen id : 10] -Input [11]: [c_last_name#28, c_first_name#27, s_store_name#13, ca_state#32, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#37] -Keys [10]: [c_last_name#28, c_first_name#27, s_store_name#13, ca_state#32, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20] +Input [11]: [c_last_name#24, c_first_name#23, s_store_name#11, ca_state#27, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#31] +Keys [10]: [c_last_name#24, c_first_name#23, s_store_name#11, ca_state#27, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17] Functions [1]: [sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#39] -Results [4]: [c_last_name#28, c_first_name#27, s_store_name#13, MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#39,17,2) AS netpaid#40] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#32] +Results [4]: [c_last_name#24, c_first_name#23, s_store_name#11, MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#32,17,2) AS netpaid#33] (43) HashAggregate [codegen id : 10] -Input [4]: [c_last_name#28, c_first_name#27, s_store_name#13, netpaid#40] -Keys [3]: [c_last_name#28, c_first_name#27, s_store_name#13] -Functions [1]: [partial_sum(netpaid#40)] -Aggregate Attributes [2]: [sum#41, isEmpty#42] -Results [5]: [c_last_name#28, c_first_name#27, s_store_name#13, sum#43, isEmpty#44] +Input [4]: [c_last_name#24, c_first_name#23, s_store_name#11, netpaid#33] +Keys [3]: [c_last_name#24, c_first_name#23, s_store_name#11] +Functions [1]: [partial_sum(netpaid#33)] +Aggregate Attributes [2]: [sum#34, isEmpty#35] +Results [5]: [c_last_name#24, c_first_name#23, s_store_name#11, sum#36, isEmpty#37] (44) Exchange -Input [5]: [c_last_name#28, c_first_name#27, s_store_name#13, sum#43, isEmpty#44] -Arguments: hashpartitioning(c_last_name#28, c_first_name#27, s_store_name#13, 5), ENSURE_REQUIREMENTS, [id=#45] +Input [5]: [c_last_name#24, c_first_name#23, s_store_name#11, sum#36, isEmpty#37] +Arguments: hashpartitioning(c_last_name#24, c_first_name#23, s_store_name#11, 5), ENSURE_REQUIREMENTS, [plan_id=8] (45) HashAggregate [codegen id : 11] -Input [5]: [c_last_name#28, c_first_name#27, s_store_name#13, sum#43, isEmpty#44] -Keys [3]: [c_last_name#28, c_first_name#27, s_store_name#13] -Functions [1]: [sum(netpaid#40)] -Aggregate Attributes [1]: [sum(netpaid#40)#46] -Results [4]: [c_last_name#28, c_first_name#27, s_store_name#13, sum(netpaid#40)#46 AS paid#47] +Input [5]: [c_last_name#24, c_first_name#23, s_store_name#11, sum#36, isEmpty#37] +Keys [3]: [c_last_name#24, c_first_name#23, s_store_name#11] +Functions [1]: [sum(netpaid#33)] +Aggregate Attributes [1]: [sum(netpaid#33)#38] +Results [4]: [c_last_name#24, c_first_name#23, s_store_name#11, sum(netpaid#33)#38 AS paid#39] (46) Filter [codegen id : 11] -Input [4]: [c_last_name#28, c_first_name#27, s_store_name#13, paid#47] -Condition : (isnotnull(paid#47) AND (cast(paid#47 as decimal(33,8)) > cast(Subquery scalar-subquery#48, [id=#49] as decimal(33,8)))) +Input [4]: [c_last_name#24, c_first_name#23, s_store_name#11, paid#39] +Condition : (isnotnull(paid#39) AND (cast(paid#39 as decimal(33,8)) > cast(Subquery scalar-subquery#40, [id=#41] as decimal(33,8)))) (47) Exchange -Input [4]: [c_last_name#28, c_first_name#27, s_store_name#13, paid#47] -Arguments: rangepartitioning(c_last_name#28 ASC NULLS FIRST, c_first_name#27 ASC NULLS FIRST, s_store_name#13 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#50] +Input [4]: [c_last_name#24, c_first_name#23, s_store_name#11, paid#39] +Arguments: rangepartitioning(c_last_name#24 ASC NULLS FIRST, c_first_name#23 ASC NULLS FIRST, s_store_name#11 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=9] (48) Sort [codegen id : 12] -Input [4]: [c_last_name#28, c_first_name#27, s_store_name#13, paid#47] -Arguments: [c_last_name#28 ASC NULLS FIRST, c_first_name#27 ASC NULLS FIRST, s_store_name#13 ASC NULLS FIRST], true, 0 +Input [4]: [c_last_name#24, c_first_name#23, s_store_name#11, paid#39] +Arguments: [c_last_name#24 ASC NULLS FIRST, c_first_name#23 ASC NULLS FIRST, s_store_name#11 ASC NULLS FIRST], true, 0 ===== Subqueries ===== -Subquery:1 Hosting operator id = 46 Hosting Expression = Subquery scalar-subquery#48, [id=#49] +Subquery:1 Hosting operator id = 46 Hosting Expression = Subquery scalar-subquery#40, [id=#41] * HashAggregate (75) +- Exchange (74) +- * HashAggregate (73) @@ -310,118 +310,118 @@ Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, s Arguments: [ss_ticket_number#4 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST], false, 0 (51) ReusedExchange [Reuses operator id: 11] -Output [2]: [sr_item_sk#8, sr_ticket_number#9] +Output [2]: [sr_item_sk#7, sr_ticket_number#8] (52) Sort [codegen id : 4] -Input [2]: [sr_item_sk#8, sr_ticket_number#9] -Arguments: [sr_ticket_number#9 ASC NULLS FIRST, sr_item_sk#8 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#7, sr_ticket_number#8] +Arguments: [sr_ticket_number#8 ASC NULLS FIRST, sr_item_sk#7 ASC NULLS FIRST], false, 0 (53) SortMergeJoin [codegen id : 9] Left keys [2]: [ss_ticket_number#4, ss_item_sk#1] -Right keys [2]: [sr_ticket_number#9, sr_item_sk#8] +Right keys [2]: [sr_ticket_number#8, sr_item_sk#7] Join condition: None (54) Project [codegen id : 9] Output [4]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5] -Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, sr_item_sk#8, sr_ticket_number#9] +Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_net_paid#5, sr_item_sk#7, sr_ticket_number#8] (55) ReusedExchange [Reuses operator id: 19] -Output [4]: [s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] +Output [4]: [s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] (56) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#12] +Right keys [1]: [s_store_sk#10] Join condition: None (57) Project [codegen id : 9] -Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16] -Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5, s_store_sk#12, s_store_name#13, s_state#15, s_zip#16] +Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14] +Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_store_sk#3, ss_net_paid#5, s_store_sk#10, s_store_name#11, s_state#13, s_zip#14] (58) Scan parquet default.item -Output [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Output [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (59) ColumnarToRow [codegen id : 6] -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] (60) Filter [codegen id : 6] -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Condition : isnotnull(i_item_sk#18) +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Condition : isnotnull(i_item_sk#15) (61) BroadcastExchange -Input [6]: [i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#51] +Input [6]: [i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=10] (62) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#18] +Right keys [1]: [i_item_sk#15] Join condition: None (63) Project [codegen id : 9] -Output [10]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_item_sk#18, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23] +Output [10]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_item_sk#15, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20] (64) ReusedExchange [Reuses operator id: 31] -Output [5]: [c_customer_sk#25, c_current_addr_sk#26, c_first_name#27, c_last_name#28, c_birth_country#29] +Output [5]: [c_customer_sk#21, c_current_addr_sk#22, c_first_name#23, c_last_name#24, c_birth_country#25] (65) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#25] +Right keys [1]: [c_customer_sk#21] Join condition: None (66) Project [codegen id : 9] -Output [13]: [ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_current_addr_sk#26, c_first_name#27, c_last_name#28, c_birth_country#29] -Input [15]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_customer_sk#25, c_current_addr_sk#26, c_first_name#27, c_last_name#28, c_birth_country#29] +Output [13]: [ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_current_addr_sk#22, c_first_name#23, c_last_name#24, c_birth_country#25] +Input [15]: [ss_customer_sk#2, ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_customer_sk#21, c_current_addr_sk#22, c_first_name#23, c_last_name#24, c_birth_country#25] (67) ReusedExchange [Reuses operator id: 37] -Output [4]: [ca_address_sk#31, ca_state#32, ca_zip#33, ca_country#34] +Output [4]: [ca_address_sk#26, ca_state#27, ca_zip#28, ca_country#29] (68) BroadcastHashJoin [codegen id : 9] -Left keys [3]: [c_current_addr_sk#26, c_birth_country#29, s_zip#16] -Right keys [3]: [ca_address_sk#31, upper(ca_country#34), ca_zip#33] +Left keys [3]: [c_current_addr_sk#22, c_birth_country#25, s_zip#14] +Right keys [3]: [ca_address_sk#26, upper(ca_country#29), ca_zip#28] Join condition: None (69) Project [codegen id : 9] -Output [11]: [ss_net_paid#5, s_store_name#13, s_state#15, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#27, c_last_name#28, ca_state#32] -Input [17]: [ss_net_paid#5, s_store_name#13, s_state#15, s_zip#16, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_current_addr_sk#26, c_first_name#27, c_last_name#28, c_birth_country#29, ca_address_sk#31, ca_state#32, ca_zip#33, ca_country#34] +Output [11]: [ss_net_paid#5, s_store_name#11, s_state#13, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#23, c_last_name#24, ca_state#27] +Input [17]: [ss_net_paid#5, s_store_name#11, s_state#13, s_zip#14, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_current_addr_sk#22, c_first_name#23, c_last_name#24, c_birth_country#25, ca_address_sk#26, ca_state#27, ca_zip#28, ca_country#29] (70) HashAggregate [codegen id : 9] -Input [11]: [ss_net_paid#5, s_store_name#13, s_state#15, i_current_price#19, i_size#20, i_color#21, i_units#22, i_manager_id#23, c_first_name#27, c_last_name#28, ca_state#32] -Keys [10]: [c_last_name#28, c_first_name#27, s_store_name#13, ca_state#32, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20] +Input [11]: [ss_net_paid#5, s_store_name#11, s_state#13, i_current_price#16, i_size#17, i_color#18, i_units#19, i_manager_id#20, c_first_name#23, c_last_name#24, ca_state#27] +Keys [10]: [c_last_name#24, c_first_name#23, s_store_name#11, ca_state#27, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17] Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum#52] -Results [11]: [c_last_name#28, c_first_name#27, s_store_name#13, ca_state#32, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#53] +Aggregate Attributes [1]: [sum#42] +Results [11]: [c_last_name#24, c_first_name#23, s_store_name#11, ca_state#27, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#43] (71) Exchange -Input [11]: [c_last_name#28, c_first_name#27, s_store_name#13, ca_state#32, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#53] -Arguments: hashpartitioning(c_last_name#28, c_first_name#27, s_store_name#13, ca_state#32, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, 5), ENSURE_REQUIREMENTS, [id=#54] +Input [11]: [c_last_name#24, c_first_name#23, s_store_name#11, ca_state#27, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#43] +Arguments: hashpartitioning(c_last_name#24, c_first_name#23, s_store_name#11, ca_state#27, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, 5), ENSURE_REQUIREMENTS, [plan_id=11] (72) HashAggregate [codegen id : 10] -Input [11]: [c_last_name#28, c_first_name#27, s_store_name#13, ca_state#32, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20, sum#53] -Keys [10]: [c_last_name#28, c_first_name#27, s_store_name#13, ca_state#32, s_state#15, i_color#21, i_current_price#19, i_manager_id#23, i_units#22, i_size#20] +Input [11]: [c_last_name#24, c_first_name#23, s_store_name#11, ca_state#27, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17, sum#43] +Keys [10]: [c_last_name#24, c_first_name#23, s_store_name#11, ca_state#27, s_state#13, i_color#18, i_current_price#16, i_manager_id#20, i_units#19, i_size#17] Functions [1]: [sum(UnscaledValue(ss_net_paid#5))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#39] -Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#39,17,2) AS netpaid#40] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#5))#32] +Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_paid#5))#32,17,2) AS netpaid#33] (73) HashAggregate [codegen id : 10] -Input [1]: [netpaid#40] +Input [1]: [netpaid#33] Keys: [] -Functions [1]: [partial_avg(netpaid#40)] -Aggregate Attributes [2]: [sum#55, count#56] -Results [2]: [sum#57, count#58] +Functions [1]: [partial_avg(netpaid#33)] +Aggregate Attributes [2]: [sum#44, count#45] +Results [2]: [sum#46, count#47] (74) Exchange -Input [2]: [sum#57, count#58] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#59] +Input [2]: [sum#46, count#47] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12] (75) HashAggregate [codegen id : 11] -Input [2]: [sum#57, count#58] +Input [2]: [sum#46, count#47] Keys: [] -Functions [1]: [avg(netpaid#40)] -Aggregate Attributes [1]: [avg(netpaid#40)#60] -Results [1]: [CheckOverflow((0.050000 * promote_precision(avg(netpaid#40)#60)), DecimalType(24,8)) AS (0.05 * avg(netpaid))#61] +Functions [1]: [avg(netpaid#33)] +Aggregate Attributes [1]: [avg(netpaid#33)#48] +Results [1]: [CheckOverflow((0.050000 * promote_precision(avg(netpaid#33)#48)), DecimalType(24,8)) AS (0.05 * avg(netpaid))#49] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q27a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q27a.sf100/explain.txt index b55e5641a679a..cc7c668795244 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q27a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q27a.sf100/explain.txt @@ -109,7 +109,7 @@ Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_stat (8) BroadcastExchange Input [1]: [cd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_cdemo_sk#2] @@ -121,88 +121,88 @@ Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10] (11) ReusedExchange [Reuses operator id: 78] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (13) Project [codegen id : 5] Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#14] (14) Scan parquet default.store -Output [2]: [s_store_sk#16, s_state#17] +Output [2]: [s_store_sk#15, s_state#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_state), EqualTo(s_state,TN), IsNotNull(s_store_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [2]: [s_store_sk#16, s_state#17] +Input [2]: [s_store_sk#15, s_state#16] (16) Filter [codegen id : 3] -Input [2]: [s_store_sk#16, s_state#17] -Condition : ((isnotnull(s_state#17) AND (s_state#17 = TN)) AND isnotnull(s_store_sk#16)) +Input [2]: [s_store_sk#15, s_state#16] +Condition : ((isnotnull(s_state#16) AND (s_state#16 = TN)) AND isnotnull(s_store_sk#15)) (17) BroadcastExchange -Input [2]: [s_store_sk#16, s_state#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#18] +Input [2]: [s_store_sk#15, s_state#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#16] +Right keys [1]: [s_store_sk#15] Join condition: None (19) Project [codegen id : 5] -Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#17] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#16, s_state#17] +Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#16] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#15, s_state#16] (20) Scan parquet default.item -Output [2]: [i_item_sk#19, i_item_id#20] +Output [2]: [i_item_sk#17, i_item_id#18] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#19, i_item_id#20] +Input [2]: [i_item_sk#17, i_item_id#18] (22) Filter [codegen id : 4] -Input [2]: [i_item_sk#19, i_item_id#20] -Condition : isnotnull(i_item_sk#19) +Input [2]: [i_item_sk#17, i_item_id#18] +Condition : isnotnull(i_item_sk#17) (23) BroadcastExchange -Input [2]: [i_item_sk#19, i_item_id#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21] +Input [2]: [i_item_sk#17, i_item_id#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#19] +Right keys [1]: [i_item_sk#17] Join condition: None (25) Project [codegen id : 5] -Output [6]: [i_item_id#20, s_state#17, ss_quantity#4 AS agg1#22, ss_list_price#5 AS agg2#23, ss_coupon_amt#7 AS agg3#24, ss_sales_price#6 AS agg4#25] -Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#17, i_item_sk#19, i_item_id#20] +Output [6]: [i_item_id#18, s_state#16, ss_quantity#4 AS agg1#19, ss_list_price#5 AS agg2#20, ss_coupon_amt#7 AS agg3#21, ss_sales_price#6 AS agg4#22] +Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#16, i_item_sk#17, i_item_id#18] (26) HashAggregate [codegen id : 5] -Input [6]: [i_item_id#20, s_state#17, agg1#22, agg2#23, agg3#24, agg4#25] -Keys [2]: [i_item_id#20, s_state#17] -Functions [4]: [partial_avg(agg1#22), partial_avg(UnscaledValue(agg2#23)), partial_avg(UnscaledValue(agg3#24)), partial_avg(UnscaledValue(agg4#25))] -Aggregate Attributes [8]: [sum#26, count#27, sum#28, count#29, sum#30, count#31, sum#32, count#33] -Results [10]: [i_item_id#20, s_state#17, sum#34, count#35, sum#36, count#37, sum#38, count#39, sum#40, count#41] +Input [6]: [i_item_id#18, s_state#16, agg1#19, agg2#20, agg3#21, agg4#22] +Keys [2]: [i_item_id#18, s_state#16] +Functions [4]: [partial_avg(agg1#19), partial_avg(UnscaledValue(agg2#20)), partial_avg(UnscaledValue(agg3#21)), partial_avg(UnscaledValue(agg4#22))] +Aggregate Attributes [8]: [sum#23, count#24, sum#25, count#26, sum#27, count#28, sum#29, count#30] +Results [10]: [i_item_id#18, s_state#16, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] (27) Exchange -Input [10]: [i_item_id#20, s_state#17, sum#34, count#35, sum#36, count#37, sum#38, count#39, sum#40, count#41] -Arguments: hashpartitioning(i_item_id#20, s_state#17, 5), ENSURE_REQUIREMENTS, [id=#42] +Input [10]: [i_item_id#18, s_state#16, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] +Arguments: hashpartitioning(i_item_id#18, s_state#16, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 6] -Input [10]: [i_item_id#20, s_state#17, sum#34, count#35, sum#36, count#37, sum#38, count#39, sum#40, count#41] -Keys [2]: [i_item_id#20, s_state#17] -Functions [4]: [avg(agg1#22), avg(UnscaledValue(agg2#23)), avg(UnscaledValue(agg3#24)), avg(UnscaledValue(agg4#25))] -Aggregate Attributes [4]: [avg(agg1#22)#43, avg(UnscaledValue(agg2#23))#44, avg(UnscaledValue(agg3#24))#45, avg(UnscaledValue(agg4#25))#46] -Results [7]: [i_item_id#20, s_state#17, 0 AS g_state#47, avg(agg1#22)#43 AS agg1#48, cast((avg(UnscaledValue(agg2#23))#44 / 100.0) as decimal(11,6)) AS agg2#49, cast((avg(UnscaledValue(agg3#24))#45 / 100.0) as decimal(11,6)) AS agg3#50, cast((avg(UnscaledValue(agg4#25))#46 / 100.0) as decimal(11,6)) AS agg4#51] +Input [10]: [i_item_id#18, s_state#16, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] +Keys [2]: [i_item_id#18, s_state#16] +Functions [4]: [avg(agg1#19), avg(UnscaledValue(agg2#20)), avg(UnscaledValue(agg3#21)), avg(UnscaledValue(agg4#22))] +Aggregate Attributes [4]: [avg(agg1#19)#39, avg(UnscaledValue(agg2#20))#40, avg(UnscaledValue(agg3#21))#41, avg(UnscaledValue(agg4#22))#42] +Results [7]: [i_item_id#18, s_state#16, 0 AS g_state#43, avg(agg1#19)#39 AS agg1#44, cast((avg(UnscaledValue(agg2#20))#40 / 100.0) as decimal(11,6)) AS agg2#45, cast((avg(UnscaledValue(agg3#21))#41 / 100.0) as decimal(11,6)) AS agg3#46, cast((avg(UnscaledValue(agg4#22))#42 / 100.0) as decimal(11,6)) AS agg4#47] (29) Scan parquet default.store_sales Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8] @@ -232,77 +232,77 @@ Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10] (35) Scan parquet default.store -Output [2]: [s_store_sk#16, s_state#17] +Output [2]: [s_store_sk#15, s_state#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_state), EqualTo(s_state,TN), IsNotNull(s_store_sk)] ReadSchema: struct (36) ColumnarToRow [codegen id : 8] -Input [2]: [s_store_sk#16, s_state#17] +Input [2]: [s_store_sk#15, s_state#16] (37) Filter [codegen id : 8] -Input [2]: [s_store_sk#16, s_state#17] -Condition : ((isnotnull(s_state#17) AND (s_state#17 = TN)) AND isnotnull(s_store_sk#16)) +Input [2]: [s_store_sk#15, s_state#16] +Condition : ((isnotnull(s_state#16) AND (s_state#16 = TN)) AND isnotnull(s_store_sk#15)) (38) Project [codegen id : 8] -Output [1]: [s_store_sk#16] -Input [2]: [s_store_sk#16, s_state#17] +Output [1]: [s_store_sk#15] +Input [2]: [s_store_sk#15, s_state#16] (39) BroadcastExchange -Input [1]: [s_store_sk#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#52] +Input [1]: [s_store_sk#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (40) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#16] +Right keys [1]: [s_store_sk#15] Join condition: None (41) Project [codegen id : 11] Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, s_store_sk#16] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, s_store_sk#15] (42) ReusedExchange [Reuses operator id: 78] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (43) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (44) Project [codegen id : 11] Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15] +Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#14] (45) ReusedExchange [Reuses operator id: 23] -Output [2]: [i_item_sk#19, i_item_id#20] +Output [2]: [i_item_sk#17, i_item_id#18] (46) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#19] +Right keys [1]: [i_item_sk#17] Join condition: None (47) Project [codegen id : 11] -Output [5]: [i_item_id#20, ss_quantity#4 AS agg1#22, ss_list_price#5 AS agg2#23, ss_coupon_amt#7 AS agg3#24, ss_sales_price#6 AS agg4#25] -Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#19, i_item_id#20] +Output [5]: [i_item_id#18, ss_quantity#4 AS agg1#19, ss_list_price#5 AS agg2#20, ss_coupon_amt#7 AS agg3#21, ss_sales_price#6 AS agg4#22] +Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#17, i_item_id#18] (48) HashAggregate [codegen id : 11] -Input [5]: [i_item_id#20, agg1#22, agg2#23, agg3#24, agg4#25] -Keys [1]: [i_item_id#20] -Functions [4]: [partial_avg(agg1#22), partial_avg(UnscaledValue(agg2#23)), partial_avg(UnscaledValue(agg3#24)), partial_avg(UnscaledValue(agg4#25))] -Aggregate Attributes [8]: [sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60] -Results [9]: [i_item_id#20, sum#61, count#62, sum#63, count#64, sum#65, count#66, sum#67, count#68] +Input [5]: [i_item_id#18, agg1#19, agg2#20, agg3#21, agg4#22] +Keys [1]: [i_item_id#18] +Functions [4]: [partial_avg(agg1#19), partial_avg(UnscaledValue(agg2#20)), partial_avg(UnscaledValue(agg3#21)), partial_avg(UnscaledValue(agg4#22))] +Aggregate Attributes [8]: [sum#48, count#49, sum#50, count#51, sum#52, count#53, sum#54, count#55] +Results [9]: [i_item_id#18, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63] (49) Exchange -Input [9]: [i_item_id#20, sum#61, count#62, sum#63, count#64, sum#65, count#66, sum#67, count#68] -Arguments: hashpartitioning(i_item_id#20, 5), ENSURE_REQUIREMENTS, [id=#69] +Input [9]: [i_item_id#18, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63] +Arguments: hashpartitioning(i_item_id#18, 5), ENSURE_REQUIREMENTS, [plan_id=6] (50) HashAggregate [codegen id : 12] -Input [9]: [i_item_id#20, sum#61, count#62, sum#63, count#64, sum#65, count#66, sum#67, count#68] -Keys [1]: [i_item_id#20] -Functions [4]: [avg(agg1#22), avg(UnscaledValue(agg2#23)), avg(UnscaledValue(agg3#24)), avg(UnscaledValue(agg4#25))] -Aggregate Attributes [4]: [avg(agg1#22)#70, avg(UnscaledValue(agg2#23))#71, avg(UnscaledValue(agg3#24))#72, avg(UnscaledValue(agg4#25))#73] -Results [7]: [i_item_id#20, null AS s_state#74, 1 AS g_state#75, avg(agg1#22)#70 AS agg1#76, cast((avg(UnscaledValue(agg2#23))#71 / 100.0) as decimal(11,6)) AS agg2#77, cast((avg(UnscaledValue(agg3#24))#72 / 100.0) as decimal(11,6)) AS agg3#78, cast((avg(UnscaledValue(agg4#25))#73 / 100.0) as decimal(11,6)) AS agg4#79] +Input [9]: [i_item_id#18, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63] +Keys [1]: [i_item_id#18] +Functions [4]: [avg(agg1#19), avg(UnscaledValue(agg2#20)), avg(UnscaledValue(agg3#21)), avg(UnscaledValue(agg4#22))] +Aggregate Attributes [4]: [avg(agg1#19)#64, avg(UnscaledValue(agg2#20))#65, avg(UnscaledValue(agg3#21))#66, avg(UnscaledValue(agg4#22))#67] +Results [7]: [i_item_id#18, null AS s_state#68, 1 AS g_state#69, avg(agg1#19)#64 AS agg1#70, cast((avg(UnscaledValue(agg2#20))#65 / 100.0) as decimal(11,6)) AS agg2#71, cast((avg(UnscaledValue(agg3#21))#66 / 100.0) as decimal(11,6)) AS agg3#72, cast((avg(UnscaledValue(agg4#22))#67 / 100.0) as decimal(11,6)) AS agg4#73] (51) Scan parquet default.store_sales Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8] @@ -332,79 +332,79 @@ Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10] (57) ReusedExchange [Reuses operator id: 39] -Output [1]: [s_store_sk#16] +Output [1]: [s_store_sk#15] (58) BroadcastHashJoin [codegen id : 17] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#16] +Right keys [1]: [s_store_sk#15] Join condition: None (59) Project [codegen id : 17] Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, s_store_sk#16] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, s_store_sk#15] (60) ReusedExchange [Reuses operator id: 78] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (61) BroadcastHashJoin [codegen id : 17] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (62) Project [codegen id : 17] Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15] +Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#14] (63) Scan parquet default.item -Output [1]: [i_item_sk#19] +Output [1]: [i_item_sk#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (64) ColumnarToRow [codegen id : 16] -Input [1]: [i_item_sk#19] +Input [1]: [i_item_sk#17] (65) Filter [codegen id : 16] -Input [1]: [i_item_sk#19] -Condition : isnotnull(i_item_sk#19) +Input [1]: [i_item_sk#17] +Condition : isnotnull(i_item_sk#17) (66) BroadcastExchange -Input [1]: [i_item_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#80] +Input [1]: [i_item_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (67) BroadcastHashJoin [codegen id : 17] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#19] +Right keys [1]: [i_item_sk#17] Join condition: None (68) Project [codegen id : 17] -Output [4]: [ss_quantity#4 AS agg1#22, ss_list_price#5 AS agg2#23, ss_coupon_amt#7 AS agg3#24, ss_sales_price#6 AS agg4#25] -Input [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#19] +Output [4]: [ss_quantity#4 AS agg1#19, ss_list_price#5 AS agg2#20, ss_coupon_amt#7 AS agg3#21, ss_sales_price#6 AS agg4#22] +Input [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#17] (69) HashAggregate [codegen id : 17] -Input [4]: [agg1#22, agg2#23, agg3#24, agg4#25] +Input [4]: [agg1#19, agg2#20, agg3#21, agg4#22] Keys: [] -Functions [4]: [partial_avg(agg1#22), partial_avg(UnscaledValue(agg2#23)), partial_avg(UnscaledValue(agg3#24)), partial_avg(UnscaledValue(agg4#25))] -Aggregate Attributes [8]: [sum#81, count#82, sum#83, count#84, sum#85, count#86, sum#87, count#88] -Results [8]: [sum#89, count#90, sum#91, count#92, sum#93, count#94, sum#95, count#96] +Functions [4]: [partial_avg(agg1#19), partial_avg(UnscaledValue(agg2#20)), partial_avg(UnscaledValue(agg3#21)), partial_avg(UnscaledValue(agg4#22))] +Aggregate Attributes [8]: [sum#74, count#75, sum#76, count#77, sum#78, count#79, sum#80, count#81] +Results [8]: [sum#82, count#83, sum#84, count#85, sum#86, count#87, sum#88, count#89] (70) Exchange -Input [8]: [sum#89, count#90, sum#91, count#92, sum#93, count#94, sum#95, count#96] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#97] +Input [8]: [sum#82, count#83, sum#84, count#85, sum#86, count#87, sum#88, count#89] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8] (71) HashAggregate [codegen id : 18] -Input [8]: [sum#89, count#90, sum#91, count#92, sum#93, count#94, sum#95, count#96] +Input [8]: [sum#82, count#83, sum#84, count#85, sum#86, count#87, sum#88, count#89] Keys: [] -Functions [4]: [avg(agg1#22), avg(UnscaledValue(agg2#23)), avg(UnscaledValue(agg3#24)), avg(UnscaledValue(agg4#25))] -Aggregate Attributes [4]: [avg(agg1#22)#98, avg(UnscaledValue(agg2#23))#99, avg(UnscaledValue(agg3#24))#100, avg(UnscaledValue(agg4#25))#101] -Results [7]: [null AS i_item_id#102, null AS s_state#103, 1 AS g_state#104, avg(agg1#22)#98 AS agg1#105, cast((avg(UnscaledValue(agg2#23))#99 / 100.0) as decimal(11,6)) AS agg2#106, cast((avg(UnscaledValue(agg3#24))#100 / 100.0) as decimal(11,6)) AS agg3#107, cast((avg(UnscaledValue(agg4#25))#101 / 100.0) as decimal(11,6)) AS agg4#108] +Functions [4]: [avg(agg1#19), avg(UnscaledValue(agg2#20)), avg(UnscaledValue(agg3#21)), avg(UnscaledValue(agg4#22))] +Aggregate Attributes [4]: [avg(agg1#19)#90, avg(UnscaledValue(agg2#20))#91, avg(UnscaledValue(agg3#21))#92, avg(UnscaledValue(agg4#22))#93] +Results [7]: [null AS i_item_id#94, null AS s_state#95, 1 AS g_state#96, avg(agg1#19)#90 AS agg1#97, cast((avg(UnscaledValue(agg2#20))#91 / 100.0) as decimal(11,6)) AS agg2#98, cast((avg(UnscaledValue(agg3#21))#92 / 100.0) as decimal(11,6)) AS agg3#99, cast((avg(UnscaledValue(agg4#22))#93 / 100.0) as decimal(11,6)) AS agg4#100] (72) Union (73) TakeOrderedAndProject -Input [7]: [i_item_id#20, s_state#17, g_state#47, agg1#48, agg2#49, agg3#50, agg4#51] -Arguments: 100, [i_item_id#20 ASC NULLS FIRST, s_state#17 ASC NULLS FIRST], [i_item_id#20, s_state#17, g_state#47, agg1#48, agg2#49, agg3#50, agg4#51] +Input [7]: [i_item_id#18, s_state#16, g_state#43, agg1#44, agg2#45, agg3#46, agg4#47] +Arguments: 100, [i_item_id#18 ASC NULLS FIRST, s_state#16 ASC NULLS FIRST], [i_item_id#18, s_state#16, g_state#43, agg1#44, agg2#45, agg3#46, agg4#47] ===== Subqueries ===== @@ -417,26 +417,26 @@ BroadcastExchange (78) (74) Scan parquet default.date_dim -Output [2]: [d_date_sk#15, d_year#109] +Output [2]: [d_date_sk#14, d_year#101] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1998), IsNotNull(d_date_sk)] ReadSchema: struct (75) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#109] +Input [2]: [d_date_sk#14, d_year#101] (76) Filter [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#109] -Condition : ((isnotnull(d_year#109) AND (d_year#109 = 1998)) AND isnotnull(d_date_sk#15)) +Input [2]: [d_date_sk#14, d_year#101] +Condition : ((isnotnull(d_year#101) AND (d_year#101 = 1998)) AND isnotnull(d_date_sk#14)) (77) Project [codegen id : 1] -Output [1]: [d_date_sk#15] -Input [2]: [d_date_sk#15, d_year#109] +Output [1]: [d_date_sk#14] +Input [2]: [d_date_sk#14, d_year#101] (78) BroadcastExchange -Input [1]: [d_date_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#110] +Input [1]: [d_date_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] Subquery:2 Hosting operator id = 29 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q27a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q27a/explain.txt index 60b1498c4e6d0..305636a385e3b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q27a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q27a/explain.txt @@ -109,7 +109,7 @@ Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_stat (8) BroadcastExchange Input [1]: [cd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_cdemo_sk#2] @@ -121,88 +121,88 @@ Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10] (11) ReusedExchange [Reuses operator id: 78] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (13) Project [codegen id : 5] Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#14] (14) Scan parquet default.store -Output [2]: [s_store_sk#16, s_state#17] +Output [2]: [s_store_sk#15, s_state#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_state), EqualTo(s_state,TN), IsNotNull(s_store_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [2]: [s_store_sk#16, s_state#17] +Input [2]: [s_store_sk#15, s_state#16] (16) Filter [codegen id : 3] -Input [2]: [s_store_sk#16, s_state#17] -Condition : ((isnotnull(s_state#17) AND (s_state#17 = TN)) AND isnotnull(s_store_sk#16)) +Input [2]: [s_store_sk#15, s_state#16] +Condition : ((isnotnull(s_state#16) AND (s_state#16 = TN)) AND isnotnull(s_store_sk#15)) (17) BroadcastExchange -Input [2]: [s_store_sk#16, s_state#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#18] +Input [2]: [s_store_sk#15, s_state#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#16] +Right keys [1]: [s_store_sk#15] Join condition: None (19) Project [codegen id : 5] -Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#17] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#16, s_state#17] +Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#16] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#15, s_state#16] (20) Scan parquet default.item -Output [2]: [i_item_sk#19, i_item_id#20] +Output [2]: [i_item_sk#17, i_item_id#18] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [2]: [i_item_sk#19, i_item_id#20] +Input [2]: [i_item_sk#17, i_item_id#18] (22) Filter [codegen id : 4] -Input [2]: [i_item_sk#19, i_item_id#20] -Condition : isnotnull(i_item_sk#19) +Input [2]: [i_item_sk#17, i_item_id#18] +Condition : isnotnull(i_item_sk#17) (23) BroadcastExchange -Input [2]: [i_item_sk#19, i_item_id#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21] +Input [2]: [i_item_sk#17, i_item_id#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#19] +Right keys [1]: [i_item_sk#17] Join condition: None (25) Project [codegen id : 5] -Output [6]: [i_item_id#20, s_state#17, ss_quantity#4 AS agg1#22, ss_list_price#5 AS agg2#23, ss_coupon_amt#7 AS agg3#24, ss_sales_price#6 AS agg4#25] -Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#17, i_item_sk#19, i_item_id#20] +Output [6]: [i_item_id#18, s_state#16, ss_quantity#4 AS agg1#19, ss_list_price#5 AS agg2#20, ss_coupon_amt#7 AS agg3#21, ss_sales_price#6 AS agg4#22] +Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#16, i_item_sk#17, i_item_id#18] (26) HashAggregate [codegen id : 5] -Input [6]: [i_item_id#20, s_state#17, agg1#22, agg2#23, agg3#24, agg4#25] -Keys [2]: [i_item_id#20, s_state#17] -Functions [4]: [partial_avg(agg1#22), partial_avg(UnscaledValue(agg2#23)), partial_avg(UnscaledValue(agg3#24)), partial_avg(UnscaledValue(agg4#25))] -Aggregate Attributes [8]: [sum#26, count#27, sum#28, count#29, sum#30, count#31, sum#32, count#33] -Results [10]: [i_item_id#20, s_state#17, sum#34, count#35, sum#36, count#37, sum#38, count#39, sum#40, count#41] +Input [6]: [i_item_id#18, s_state#16, agg1#19, agg2#20, agg3#21, agg4#22] +Keys [2]: [i_item_id#18, s_state#16] +Functions [4]: [partial_avg(agg1#19), partial_avg(UnscaledValue(agg2#20)), partial_avg(UnscaledValue(agg3#21)), partial_avg(UnscaledValue(agg4#22))] +Aggregate Attributes [8]: [sum#23, count#24, sum#25, count#26, sum#27, count#28, sum#29, count#30] +Results [10]: [i_item_id#18, s_state#16, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] (27) Exchange -Input [10]: [i_item_id#20, s_state#17, sum#34, count#35, sum#36, count#37, sum#38, count#39, sum#40, count#41] -Arguments: hashpartitioning(i_item_id#20, s_state#17, 5), ENSURE_REQUIREMENTS, [id=#42] +Input [10]: [i_item_id#18, s_state#16, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] +Arguments: hashpartitioning(i_item_id#18, s_state#16, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) HashAggregate [codegen id : 6] -Input [10]: [i_item_id#20, s_state#17, sum#34, count#35, sum#36, count#37, sum#38, count#39, sum#40, count#41] -Keys [2]: [i_item_id#20, s_state#17] -Functions [4]: [avg(agg1#22), avg(UnscaledValue(agg2#23)), avg(UnscaledValue(agg3#24)), avg(UnscaledValue(agg4#25))] -Aggregate Attributes [4]: [avg(agg1#22)#43, avg(UnscaledValue(agg2#23))#44, avg(UnscaledValue(agg3#24))#45, avg(UnscaledValue(agg4#25))#46] -Results [7]: [i_item_id#20, s_state#17, 0 AS g_state#47, avg(agg1#22)#43 AS agg1#48, cast((avg(UnscaledValue(agg2#23))#44 / 100.0) as decimal(11,6)) AS agg2#49, cast((avg(UnscaledValue(agg3#24))#45 / 100.0) as decimal(11,6)) AS agg3#50, cast((avg(UnscaledValue(agg4#25))#46 / 100.0) as decimal(11,6)) AS agg4#51] +Input [10]: [i_item_id#18, s_state#16, sum#31, count#32, sum#33, count#34, sum#35, count#36, sum#37, count#38] +Keys [2]: [i_item_id#18, s_state#16] +Functions [4]: [avg(agg1#19), avg(UnscaledValue(agg2#20)), avg(UnscaledValue(agg3#21)), avg(UnscaledValue(agg4#22))] +Aggregate Attributes [4]: [avg(agg1#19)#39, avg(UnscaledValue(agg2#20))#40, avg(UnscaledValue(agg3#21))#41, avg(UnscaledValue(agg4#22))#42] +Results [7]: [i_item_id#18, s_state#16, 0 AS g_state#43, avg(agg1#19)#39 AS agg1#44, cast((avg(UnscaledValue(agg2#20))#40 / 100.0) as decimal(11,6)) AS agg2#45, cast((avg(UnscaledValue(agg3#21))#41 / 100.0) as decimal(11,6)) AS agg3#46, cast((avg(UnscaledValue(agg4#22))#42 / 100.0) as decimal(11,6)) AS agg4#47] (29) Scan parquet default.store_sales Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8] @@ -232,77 +232,77 @@ Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10] (35) ReusedExchange [Reuses operator id: 78] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (36) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (37) Project [codegen id : 11] Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#14] (38) Scan parquet default.store -Output [2]: [s_store_sk#16, s_state#17] +Output [2]: [s_store_sk#15, s_state#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_state), EqualTo(s_state,TN), IsNotNull(s_store_sk)] ReadSchema: struct (39) ColumnarToRow [codegen id : 9] -Input [2]: [s_store_sk#16, s_state#17] +Input [2]: [s_store_sk#15, s_state#16] (40) Filter [codegen id : 9] -Input [2]: [s_store_sk#16, s_state#17] -Condition : ((isnotnull(s_state#17) AND (s_state#17 = TN)) AND isnotnull(s_store_sk#16)) +Input [2]: [s_store_sk#15, s_state#16] +Condition : ((isnotnull(s_state#16) AND (s_state#16 = TN)) AND isnotnull(s_store_sk#15)) (41) Project [codegen id : 9] -Output [1]: [s_store_sk#16] -Input [2]: [s_store_sk#16, s_state#17] +Output [1]: [s_store_sk#15] +Input [2]: [s_store_sk#15, s_state#16] (42) BroadcastExchange -Input [1]: [s_store_sk#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#52] +Input [1]: [s_store_sk#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (43) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#16] +Right keys [1]: [s_store_sk#15] Join condition: None (44) Project [codegen id : 11] Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#16] +Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#15] (45) ReusedExchange [Reuses operator id: 23] -Output [2]: [i_item_sk#19, i_item_id#20] +Output [2]: [i_item_sk#17, i_item_id#18] (46) BroadcastHashJoin [codegen id : 11] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#19] +Right keys [1]: [i_item_sk#17] Join condition: None (47) Project [codegen id : 11] -Output [5]: [i_item_id#20, ss_quantity#4 AS agg1#22, ss_list_price#5 AS agg2#23, ss_coupon_amt#7 AS agg3#24, ss_sales_price#6 AS agg4#25] -Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#19, i_item_id#20] +Output [5]: [i_item_id#18, ss_quantity#4 AS agg1#19, ss_list_price#5 AS agg2#20, ss_coupon_amt#7 AS agg3#21, ss_sales_price#6 AS agg4#22] +Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#17, i_item_id#18] (48) HashAggregate [codegen id : 11] -Input [5]: [i_item_id#20, agg1#22, agg2#23, agg3#24, agg4#25] -Keys [1]: [i_item_id#20] -Functions [4]: [partial_avg(agg1#22), partial_avg(UnscaledValue(agg2#23)), partial_avg(UnscaledValue(agg3#24)), partial_avg(UnscaledValue(agg4#25))] -Aggregate Attributes [8]: [sum#53, count#54, sum#55, count#56, sum#57, count#58, sum#59, count#60] -Results [9]: [i_item_id#20, sum#61, count#62, sum#63, count#64, sum#65, count#66, sum#67, count#68] +Input [5]: [i_item_id#18, agg1#19, agg2#20, agg3#21, agg4#22] +Keys [1]: [i_item_id#18] +Functions [4]: [partial_avg(agg1#19), partial_avg(UnscaledValue(agg2#20)), partial_avg(UnscaledValue(agg3#21)), partial_avg(UnscaledValue(agg4#22))] +Aggregate Attributes [8]: [sum#48, count#49, sum#50, count#51, sum#52, count#53, sum#54, count#55] +Results [9]: [i_item_id#18, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63] (49) Exchange -Input [9]: [i_item_id#20, sum#61, count#62, sum#63, count#64, sum#65, count#66, sum#67, count#68] -Arguments: hashpartitioning(i_item_id#20, 5), ENSURE_REQUIREMENTS, [id=#69] +Input [9]: [i_item_id#18, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63] +Arguments: hashpartitioning(i_item_id#18, 5), ENSURE_REQUIREMENTS, [plan_id=6] (50) HashAggregate [codegen id : 12] -Input [9]: [i_item_id#20, sum#61, count#62, sum#63, count#64, sum#65, count#66, sum#67, count#68] -Keys [1]: [i_item_id#20] -Functions [4]: [avg(agg1#22), avg(UnscaledValue(agg2#23)), avg(UnscaledValue(agg3#24)), avg(UnscaledValue(agg4#25))] -Aggregate Attributes [4]: [avg(agg1#22)#70, avg(UnscaledValue(agg2#23))#71, avg(UnscaledValue(agg3#24))#72, avg(UnscaledValue(agg4#25))#73] -Results [7]: [i_item_id#20, null AS s_state#74, 1 AS g_state#75, avg(agg1#22)#70 AS agg1#76, cast((avg(UnscaledValue(agg2#23))#71 / 100.0) as decimal(11,6)) AS agg2#77, cast((avg(UnscaledValue(agg3#24))#72 / 100.0) as decimal(11,6)) AS agg3#78, cast((avg(UnscaledValue(agg4#25))#73 / 100.0) as decimal(11,6)) AS agg4#79] +Input [9]: [i_item_id#18, sum#56, count#57, sum#58, count#59, sum#60, count#61, sum#62, count#63] +Keys [1]: [i_item_id#18] +Functions [4]: [avg(agg1#19), avg(UnscaledValue(agg2#20)), avg(UnscaledValue(agg3#21)), avg(UnscaledValue(agg4#22))] +Aggregate Attributes [4]: [avg(agg1#19)#64, avg(UnscaledValue(agg2#20))#65, avg(UnscaledValue(agg3#21))#66, avg(UnscaledValue(agg4#22))#67] +Results [7]: [i_item_id#18, null AS s_state#68, 1 AS g_state#69, avg(agg1#19)#64 AS agg1#70, cast((avg(UnscaledValue(agg2#20))#65 / 100.0) as decimal(11,6)) AS agg2#71, cast((avg(UnscaledValue(agg3#21))#66 / 100.0) as decimal(11,6)) AS agg3#72, cast((avg(UnscaledValue(agg4#22))#67 / 100.0) as decimal(11,6)) AS agg4#73] (51) Scan parquet default.store_sales Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8] @@ -332,79 +332,79 @@ Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sal Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10] (57) ReusedExchange [Reuses operator id: 78] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (58) BroadcastHashJoin [codegen id : 17] Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (59) Project [codegen id : 17] Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15] +Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#14] (60) ReusedExchange [Reuses operator id: 42] -Output [1]: [s_store_sk#16] +Output [1]: [s_store_sk#15] (61) BroadcastHashJoin [codegen id : 17] Left keys [1]: [ss_store_sk#3] -Right keys [1]: [s_store_sk#16] +Right keys [1]: [s_store_sk#15] Join condition: None (62) Project [codegen id : 17] Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7] -Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#16] +Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#15] (63) Scan parquet default.item -Output [1]: [i_item_sk#19] +Output [1]: [i_item_sk#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (64) ColumnarToRow [codegen id : 16] -Input [1]: [i_item_sk#19] +Input [1]: [i_item_sk#17] (65) Filter [codegen id : 16] -Input [1]: [i_item_sk#19] -Condition : isnotnull(i_item_sk#19) +Input [1]: [i_item_sk#17] +Condition : isnotnull(i_item_sk#17) (66) BroadcastExchange -Input [1]: [i_item_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#80] +Input [1]: [i_item_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (67) BroadcastHashJoin [codegen id : 17] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#19] +Right keys [1]: [i_item_sk#17] Join condition: None (68) Project [codegen id : 17] -Output [4]: [ss_quantity#4 AS agg1#22, ss_list_price#5 AS agg2#23, ss_coupon_amt#7 AS agg3#24, ss_sales_price#6 AS agg4#25] -Input [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#19] +Output [4]: [ss_quantity#4 AS agg1#19, ss_list_price#5 AS agg2#20, ss_coupon_amt#7 AS agg3#21, ss_sales_price#6 AS agg4#22] +Input [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#17] (69) HashAggregate [codegen id : 17] -Input [4]: [agg1#22, agg2#23, agg3#24, agg4#25] +Input [4]: [agg1#19, agg2#20, agg3#21, agg4#22] Keys: [] -Functions [4]: [partial_avg(agg1#22), partial_avg(UnscaledValue(agg2#23)), partial_avg(UnscaledValue(agg3#24)), partial_avg(UnscaledValue(agg4#25))] -Aggregate Attributes [8]: [sum#81, count#82, sum#83, count#84, sum#85, count#86, sum#87, count#88] -Results [8]: [sum#89, count#90, sum#91, count#92, sum#93, count#94, sum#95, count#96] +Functions [4]: [partial_avg(agg1#19), partial_avg(UnscaledValue(agg2#20)), partial_avg(UnscaledValue(agg3#21)), partial_avg(UnscaledValue(agg4#22))] +Aggregate Attributes [8]: [sum#74, count#75, sum#76, count#77, sum#78, count#79, sum#80, count#81] +Results [8]: [sum#82, count#83, sum#84, count#85, sum#86, count#87, sum#88, count#89] (70) Exchange -Input [8]: [sum#89, count#90, sum#91, count#92, sum#93, count#94, sum#95, count#96] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#97] +Input [8]: [sum#82, count#83, sum#84, count#85, sum#86, count#87, sum#88, count#89] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8] (71) HashAggregate [codegen id : 18] -Input [8]: [sum#89, count#90, sum#91, count#92, sum#93, count#94, sum#95, count#96] +Input [8]: [sum#82, count#83, sum#84, count#85, sum#86, count#87, sum#88, count#89] Keys: [] -Functions [4]: [avg(agg1#22), avg(UnscaledValue(agg2#23)), avg(UnscaledValue(agg3#24)), avg(UnscaledValue(agg4#25))] -Aggregate Attributes [4]: [avg(agg1#22)#98, avg(UnscaledValue(agg2#23))#99, avg(UnscaledValue(agg3#24))#100, avg(UnscaledValue(agg4#25))#101] -Results [7]: [null AS i_item_id#102, null AS s_state#103, 1 AS g_state#104, avg(agg1#22)#98 AS agg1#105, cast((avg(UnscaledValue(agg2#23))#99 / 100.0) as decimal(11,6)) AS agg2#106, cast((avg(UnscaledValue(agg3#24))#100 / 100.0) as decimal(11,6)) AS agg3#107, cast((avg(UnscaledValue(agg4#25))#101 / 100.0) as decimal(11,6)) AS agg4#108] +Functions [4]: [avg(agg1#19), avg(UnscaledValue(agg2#20)), avg(UnscaledValue(agg3#21)), avg(UnscaledValue(agg4#22))] +Aggregate Attributes [4]: [avg(agg1#19)#90, avg(UnscaledValue(agg2#20))#91, avg(UnscaledValue(agg3#21))#92, avg(UnscaledValue(agg4#22))#93] +Results [7]: [null AS i_item_id#94, null AS s_state#95, 1 AS g_state#96, avg(agg1#19)#90 AS agg1#97, cast((avg(UnscaledValue(agg2#20))#91 / 100.0) as decimal(11,6)) AS agg2#98, cast((avg(UnscaledValue(agg3#21))#92 / 100.0) as decimal(11,6)) AS agg3#99, cast((avg(UnscaledValue(agg4#22))#93 / 100.0) as decimal(11,6)) AS agg4#100] (72) Union (73) TakeOrderedAndProject -Input [7]: [i_item_id#20, s_state#17, g_state#47, agg1#48, agg2#49, agg3#50, agg4#51] -Arguments: 100, [i_item_id#20 ASC NULLS FIRST, s_state#17 ASC NULLS FIRST], [i_item_id#20, s_state#17, g_state#47, agg1#48, agg2#49, agg3#50, agg4#51] +Input [7]: [i_item_id#18, s_state#16, g_state#43, agg1#44, agg2#45, agg3#46, agg4#47] +Arguments: 100, [i_item_id#18 ASC NULLS FIRST, s_state#16 ASC NULLS FIRST], [i_item_id#18, s_state#16, g_state#43, agg1#44, agg2#45, agg3#46, agg4#47] ===== Subqueries ===== @@ -417,26 +417,26 @@ BroadcastExchange (78) (74) Scan parquet default.date_dim -Output [2]: [d_date_sk#15, d_year#109] +Output [2]: [d_date_sk#14, d_year#101] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1998), IsNotNull(d_date_sk)] ReadSchema: struct (75) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#109] +Input [2]: [d_date_sk#14, d_year#101] (76) Filter [codegen id : 1] -Input [2]: [d_date_sk#15, d_year#109] -Condition : ((isnotnull(d_year#109) AND (d_year#109 = 1998)) AND isnotnull(d_date_sk#15)) +Input [2]: [d_date_sk#14, d_year#101] +Condition : ((isnotnull(d_year#101) AND (d_year#101 = 1998)) AND isnotnull(d_date_sk#14)) (77) Project [codegen id : 1] -Output [1]: [d_date_sk#15] -Input [2]: [d_date_sk#15, d_year#109] +Output [1]: [d_date_sk#14] +Input [2]: [d_date_sk#14, d_year#101] (78) BroadcastExchange -Input [1]: [d_date_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#110] +Input [1]: [d_date_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] Subquery:2 Hosting operator id = 29 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q34.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q34.sf100/explain.txt index e9ebb885020e2..503bfdb0233cd 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q34.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q34.sf100/explain.txt @@ -83,7 +83,7 @@ Input [2]: [s_store_sk#8, s_county#9] (11) BroadcastExchange Input [1]: [s_store_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#3] @@ -95,104 +95,104 @@ Output [3]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4] Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, s_store_sk#8] (14) Scan parquet default.household_demographics -Output [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_vehicle_count), IsNotNull(hd_dep_count), Or(EqualTo(hd_buy_potential,>10000 ),EqualTo(hd_buy_potential,unknown )), GreaterThan(hd_vehicle_count,0), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (16) Filter [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] -Condition : (((((isnotnull(hd_vehicle_count#14) AND isnotnull(hd_dep_count#13)) AND ((hd_buy_potential#12 = >10000 ) OR (hd_buy_potential#12 = unknown ))) AND (hd_vehicle_count#14 > 0)) AND ((cast(hd_dep_count#13 as double) / cast(hd_vehicle_count#14 as double)) > 1.2)) AND isnotnull(hd_demo_sk#11)) +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] +Condition : (((((isnotnull(hd_vehicle_count#13) AND isnotnull(hd_dep_count#12)) AND ((hd_buy_potential#11 = >10000 ) OR (hd_buy_potential#11 = unknown ))) AND (hd_vehicle_count#13 > 0)) AND ((cast(hd_dep_count#12 as double) / cast(hd_vehicle_count#13 as double)) > 1.2)) AND isnotnull(hd_demo_sk#10)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#11] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [1]: [hd_demo_sk#10] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (18) BroadcastExchange -Input [1]: [hd_demo_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [hd_demo_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#11] +Right keys [1]: [hd_demo_sk#10] Join condition: None (20) Project [codegen id : 4] Output [2]: [ss_customer_sk#1, ss_ticket_number#4] -Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#11] +Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#10] (21) HashAggregate [codegen id : 4] Input [2]: [ss_customer_sk#1, ss_ticket_number#4] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#16] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Aggregate Attributes [1]: [count#14] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] (22) Exchange -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] -Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] +Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 5] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#19] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#19 AS cnt#20] +Aggregate Attributes [1]: [count(1)#16] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#16 AS cnt#17] (24) Filter [codegen id : 5] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] -Condition : ((cnt#20 >= 15) AND (cnt#20 <= 20)) +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] +Condition : ((cnt#17 >= 15) AND (cnt#17 <= 20)) (25) Exchange -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] -Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] +Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=4] (26) Sort [codegen id : 6] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] Arguments: [ss_customer_sk#1 ASC NULLS FIRST], false, 0 (27) Scan parquet default.customer -Output [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] +Output [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 7] -Input [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (29) Filter [codegen id : 7] -Input [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] -Condition : isnotnull(c_customer_sk#22) +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Condition : isnotnull(c_customer_sk#18) (30) Exchange -Input [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] -Arguments: hashpartitioning(c_customer_sk#22, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Arguments: hashpartitioning(c_customer_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=5] (31) Sort [codegen id : 8] -Input [5]: [c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] -Arguments: [c_customer_sk#22 ASC NULLS FIRST], false, 0 +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Arguments: [c_customer_sk#18 ASC NULLS FIRST], false, 0 (32) SortMergeJoin [codegen id : 9] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#22] +Right keys [1]: [c_customer_sk#18] Join condition: None (33) Project [codegen id : 9] -Output [6]: [c_last_name#25, c_first_name#24, c_salutation#23, c_preferred_cust_flag#26, ss_ticket_number#4, cnt#20] -Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20, c_customer_sk#22, c_salutation#23, c_first_name#24, c_last_name#25, c_preferred_cust_flag#26] +Output [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17, c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (34) Exchange -Input [6]: [c_last_name#25, c_first_name#24, c_salutation#23, c_preferred_cust_flag#26, ss_ticket_number#4, cnt#20] -Arguments: rangepartitioning(c_last_name#25 ASC NULLS FIRST, c_first_name#24 ASC NULLS FIRST, c_salutation#23 ASC NULLS FIRST, c_preferred_cust_flag#26 DESC NULLS LAST, ss_ticket_number#4 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: rangepartitioning(c_last_name#21 ASC NULLS FIRST, c_first_name#20 ASC NULLS FIRST, c_salutation#19 ASC NULLS FIRST, c_preferred_cust_flag#22 DESC NULLS LAST, ss_ticket_number#4 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=6] (35) Sort [codegen id : 10] -Input [6]: [c_last_name#25, c_first_name#24, c_salutation#23, c_preferred_cust_flag#26, ss_ticket_number#4, cnt#20] -Arguments: [c_last_name#25 ASC NULLS FIRST, c_first_name#24 ASC NULLS FIRST, c_salutation#23 ASC NULLS FIRST, c_preferred_cust_flag#26 DESC NULLS LAST, ss_ticket_number#4 ASC NULLS FIRST], true, 0 +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: [c_last_name#21 ASC NULLS FIRST, c_first_name#20 ASC NULLS FIRST, c_salutation#19 ASC NULLS FIRST, c_preferred_cust_flag#22 DESC NULLS LAST, ss_ticket_number#4 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -205,25 +205,25 @@ BroadcastExchange (40) (36) Scan parquet default.date_dim -Output [3]: [d_date_sk#7, d_year#29, d_dom#30] +Output [3]: [d_date_sk#7, d_year#23, d_dom#24] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [Or(And(GreaterThanOrEqual(d_dom,1),LessThanOrEqual(d_dom,3)),And(GreaterThanOrEqual(d_dom,25),LessThanOrEqual(d_dom,28))), In(d_year, [1999,2000,2001]), IsNotNull(d_date_sk)] ReadSchema: struct (37) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#29, d_dom#30] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (38) Filter [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#29, d_dom#30] -Condition : (((((d_dom#30 >= 1) AND (d_dom#30 <= 3)) OR ((d_dom#30 >= 25) AND (d_dom#30 <= 28))) AND d_year#29 IN (1999,2000,2001)) AND isnotnull(d_date_sk#7)) +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] +Condition : (((((d_dom#24 >= 1) AND (d_dom#24 <= 3)) OR ((d_dom#24 >= 25) AND (d_dom#24 <= 28))) AND d_year#23 IN (1999,2000,2001)) AND isnotnull(d_date_sk#7)) (39) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [3]: [d_date_sk#7, d_year#29, d_dom#30] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (40) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#31] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q34/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q34/explain.txt index 3020b3ab2e4eb..41141558a807a 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q34/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q34/explain.txt @@ -80,7 +80,7 @@ Input [2]: [s_store_sk#8, s_county#9] (11) BroadcastExchange Input [1]: [s_store_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#3] @@ -92,92 +92,92 @@ Output [3]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4] Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, s_store_sk#8] (14) Scan parquet default.household_demographics -Output [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_vehicle_count), IsNotNull(hd_dep_count), Or(EqualTo(hd_buy_potential,>10000 ),EqualTo(hd_buy_potential,unknown )), GreaterThan(hd_vehicle_count,0), IsNotNull(hd_demo_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (16) Filter [codegen id : 3] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] -Condition : (((((isnotnull(hd_vehicle_count#14) AND isnotnull(hd_dep_count#13)) AND ((hd_buy_potential#12 = >10000 ) OR (hd_buy_potential#12 = unknown ))) AND (hd_vehicle_count#14 > 0)) AND ((cast(hd_dep_count#13 as double) / cast(hd_vehicle_count#14 as double)) > 1.2)) AND isnotnull(hd_demo_sk#11)) +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] +Condition : (((((isnotnull(hd_vehicle_count#13) AND isnotnull(hd_dep_count#12)) AND ((hd_buy_potential#11 = >10000 ) OR (hd_buy_potential#11 = unknown ))) AND (hd_vehicle_count#13 > 0)) AND ((cast(hd_dep_count#12 as double) / cast(hd_vehicle_count#13 as double)) > 1.2)) AND isnotnull(hd_demo_sk#10)) (17) Project [codegen id : 3] -Output [1]: [hd_demo_sk#11] -Input [4]: [hd_demo_sk#11, hd_buy_potential#12, hd_dep_count#13, hd_vehicle_count#14] +Output [1]: [hd_demo_sk#10] +Input [4]: [hd_demo_sk#10, hd_buy_potential#11, hd_dep_count#12, hd_vehicle_count#13] (18) BroadcastExchange -Input [1]: [hd_demo_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [hd_demo_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_hdemo_sk#2] -Right keys [1]: [hd_demo_sk#11] +Right keys [1]: [hd_demo_sk#10] Join condition: None (20) Project [codegen id : 4] Output [2]: [ss_customer_sk#1, ss_ticket_number#4] -Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#11] +Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#10] (21) HashAggregate [codegen id : 4] Input [2]: [ss_customer_sk#1, ss_ticket_number#4] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#16] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Aggregate Attributes [1]: [count#14] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] (22) Exchange -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] -Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] +Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (23) HashAggregate [codegen id : 6] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#17] +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#15] Keys [2]: [ss_ticket_number#4, ss_customer_sk#1] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#19] -Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#19 AS cnt#20] +Aggregate Attributes [1]: [count(1)#16] +Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#16 AS cnt#17] (24) Filter [codegen id : 6] -Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20] -Condition : ((cnt#20 >= 15) AND (cnt#20 <= 20)) +Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17] +Condition : ((cnt#17 >= 15) AND (cnt#17 <= 20)) (25) Scan parquet default.customer -Output [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] +Output [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 5] -Input [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (27) Filter [codegen id : 5] -Input [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] -Condition : isnotnull(c_customer_sk#21) +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Condition : isnotnull(c_customer_sk#18) (28) BroadcastExchange -Input [5]: [c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#26] +Input [5]: [c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (29) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#21] +Right keys [1]: [c_customer_sk#18] Join condition: None (30) Project [codegen id : 6] -Output [6]: [c_last_name#24, c_first_name#23, c_salutation#22, c_preferred_cust_flag#25, ss_ticket_number#4, cnt#20] -Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#20, c_customer_sk#21, c_salutation#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25] +Output [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#17, c_customer_sk#18, c_salutation#19, c_first_name#20, c_last_name#21, c_preferred_cust_flag#22] (31) Exchange -Input [6]: [c_last_name#24, c_first_name#23, c_salutation#22, c_preferred_cust_flag#25, ss_ticket_number#4, cnt#20] -Arguments: rangepartitioning(c_last_name#24 ASC NULLS FIRST, c_first_name#23 ASC NULLS FIRST, c_salutation#22 ASC NULLS FIRST, c_preferred_cust_flag#25 DESC NULLS LAST, ss_ticket_number#4 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: rangepartitioning(c_last_name#21 ASC NULLS FIRST, c_first_name#20 ASC NULLS FIRST, c_salutation#19 ASC NULLS FIRST, c_preferred_cust_flag#22 DESC NULLS LAST, ss_ticket_number#4 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=5] (32) Sort [codegen id : 7] -Input [6]: [c_last_name#24, c_first_name#23, c_salutation#22, c_preferred_cust_flag#25, ss_ticket_number#4, cnt#20] -Arguments: [c_last_name#24 ASC NULLS FIRST, c_first_name#23 ASC NULLS FIRST, c_salutation#22 ASC NULLS FIRST, c_preferred_cust_flag#25 DESC NULLS LAST, ss_ticket_number#4 ASC NULLS FIRST], true, 0 +Input [6]: [c_last_name#21, c_first_name#20, c_salutation#19, c_preferred_cust_flag#22, ss_ticket_number#4, cnt#17] +Arguments: [c_last_name#21 ASC NULLS FIRST, c_first_name#20 ASC NULLS FIRST, c_salutation#19 ASC NULLS FIRST, c_preferred_cust_flag#22 DESC NULLS LAST, ss_ticket_number#4 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -190,25 +190,25 @@ BroadcastExchange (37) (33) Scan parquet default.date_dim -Output [3]: [d_date_sk#7, d_year#28, d_dom#29] +Output [3]: [d_date_sk#7, d_year#23, d_dom#24] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [Or(And(GreaterThanOrEqual(d_dom,1),LessThanOrEqual(d_dom,3)),And(GreaterThanOrEqual(d_dom,25),LessThanOrEqual(d_dom,28))), In(d_year, [1999,2000,2001]), IsNotNull(d_date_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (35) Filter [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] -Condition : (((((d_dom#29 >= 1) AND (d_dom#29 <= 3)) OR ((d_dom#29 >= 25) AND (d_dom#29 <= 28))) AND d_year#28 IN (1999,2000,2001)) AND isnotnull(d_date_sk#7)) +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] +Condition : (((((d_dom#24 >= 1) AND (d_dom#24 <= 3)) OR ((d_dom#24 >= 25) AND (d_dom#24 <= 28))) AND d_year#23 IN (1999,2000,2001)) AND isnotnull(d_date_sk#7)) (36) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [3]: [d_date_sk#7, d_year#28, d_dom#29] +Input [3]: [d_date_sk#7, d_year#23, d_dom#24] (37) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#30] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35.sf100/explain.txt index 33797ca4e7f6e..42d97a4bd3e76 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35.sf100/explain.txt @@ -70,115 +70,115 @@ Condition : (isnotnull(c_current_addr_sk#5) AND isnotnull(c_current_cdemo_sk#4)) (4) Exchange Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] -Arguments: hashpartitioning(c_customer_sk#3, 5), ENSURE_REQUIREMENTS, [id=#6] +Arguments: hashpartitioning(c_customer_sk#3, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [3]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5] Arguments: [c_customer_sk#3 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_sales -Output [2]: [ss_customer_sk#7, ss_sold_date_sk#8] +Output [2]: [ss_customer_sk#6, ss_sold_date_sk#7] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#8), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)] ReadSchema: struct (7) ColumnarToRow [codegen id : 4] -Input [2]: [ss_customer_sk#7, ss_sold_date_sk#8] +Input [2]: [ss_customer_sk#6, ss_sold_date_sk#7] (8) ReusedExchange [Reuses operator id: 58] -Output [1]: [d_date_sk#10] +Output [1]: [d_date_sk#9] (9) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#10] +Left keys [1]: [ss_sold_date_sk#7] +Right keys [1]: [d_date_sk#9] Join condition: None (10) Project [codegen id : 4] -Output [1]: [ss_customer_sk#7] -Input [3]: [ss_customer_sk#7, ss_sold_date_sk#8, d_date_sk#10] +Output [1]: [ss_customer_sk#6] +Input [3]: [ss_customer_sk#6, ss_sold_date_sk#7, d_date_sk#9] (11) Exchange -Input [1]: [ss_customer_sk#7] -Arguments: hashpartitioning(ss_customer_sk#7, 5), ENSURE_REQUIREMENTS, [id=#11] +Input [1]: [ss_customer_sk#6] +Arguments: hashpartitioning(ss_customer_sk#6, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 5] -Input [1]: [ss_customer_sk#7] -Arguments: [ss_customer_sk#7 ASC NULLS FIRST], false, 0 +Input [1]: [ss_customer_sk#6] +Arguments: [ss_customer_sk#6 ASC NULLS FIRST], false, 0 (13) SortMergeJoin [codegen id : 6] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [ss_customer_sk#7] +Right keys [1]: [ss_customer_sk#6] Join condition: None (14) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#12, ws_sold_date_sk#13] +Output [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#13), dynamicpruningexpression(ws_sold_date_sk#13 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(ws_sold_date_sk#11), dynamicpruningexpression(ws_sold_date_sk#11 IN dynamicpruning#8)] ReadSchema: struct (15) ColumnarToRow [codegen id : 8] -Input [2]: [ws_bill_customer_sk#12, ws_sold_date_sk#13] +Input [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] (16) ReusedExchange [Reuses operator id: 58] -Output [1]: [d_date_sk#14] +Output [1]: [d_date_sk#12] (17) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ws_sold_date_sk#13] -Right keys [1]: [d_date_sk#14] +Left keys [1]: [ws_sold_date_sk#11] +Right keys [1]: [d_date_sk#12] Join condition: None (18) Project [codegen id : 8] -Output [1]: [ws_bill_customer_sk#12] -Input [3]: [ws_bill_customer_sk#12, ws_sold_date_sk#13, d_date_sk#14] +Output [1]: [ws_bill_customer_sk#10] +Input [3]: [ws_bill_customer_sk#10, ws_sold_date_sk#11, d_date_sk#12] (19) Exchange -Input [1]: [ws_bill_customer_sk#12] -Arguments: hashpartitioning(ws_bill_customer_sk#12, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [1]: [ws_bill_customer_sk#10] +Arguments: hashpartitioning(ws_bill_customer_sk#10, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) Sort [codegen id : 9] -Input [1]: [ws_bill_customer_sk#12] -Arguments: [ws_bill_customer_sk#12 ASC NULLS FIRST], false, 0 +Input [1]: [ws_bill_customer_sk#10] +Arguments: [ws_bill_customer_sk#10 ASC NULLS FIRST], false, 0 (21) SortMergeJoin [codegen id : 10] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [ws_bill_customer_sk#12] +Right keys [1]: [ws_bill_customer_sk#10] Join condition: None (22) Scan parquet default.catalog_sales -Output [2]: [cs_ship_customer_sk#16, cs_sold_date_sk#17] +Output [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#17), dynamicpruningexpression(cs_sold_date_sk#17 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(cs_sold_date_sk#14), dynamicpruningexpression(cs_sold_date_sk#14 IN dynamicpruning#8)] ReadSchema: struct (23) ColumnarToRow [codegen id : 12] -Input [2]: [cs_ship_customer_sk#16, cs_sold_date_sk#17] +Input [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] (24) ReusedExchange [Reuses operator id: 58] -Output [1]: [d_date_sk#18] +Output [1]: [d_date_sk#15] (25) BroadcastHashJoin [codegen id : 12] -Left keys [1]: [cs_sold_date_sk#17] -Right keys [1]: [d_date_sk#18] +Left keys [1]: [cs_sold_date_sk#14] +Right keys [1]: [d_date_sk#15] Join condition: None (26) Project [codegen id : 12] -Output [1]: [cs_ship_customer_sk#16] -Input [3]: [cs_ship_customer_sk#16, cs_sold_date_sk#17, d_date_sk#18] +Output [1]: [cs_ship_customer_sk#13] +Input [3]: [cs_ship_customer_sk#13, cs_sold_date_sk#14, d_date_sk#15] (27) Exchange -Input [1]: [cs_ship_customer_sk#16] -Arguments: hashpartitioning(cs_ship_customer_sk#16, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [1]: [cs_ship_customer_sk#13] +Arguments: hashpartitioning(cs_ship_customer_sk#13, 5), ENSURE_REQUIREMENTS, [plan_id=4] (28) Sort [codegen id : 13] -Input [1]: [cs_ship_customer_sk#16] -Arguments: [cs_ship_customer_sk#16 ASC NULLS FIRST], false, 0 +Input [1]: [cs_ship_customer_sk#13] +Arguments: [cs_ship_customer_sk#13 ASC NULLS FIRST], false, 0 (29) SortMergeJoin [codegen id : 14] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [cs_ship_customer_sk#16] +Right keys [1]: [cs_ship_customer_sk#13] Join condition: None (30) Filter [codegen id : 14] @@ -191,107 +191,107 @@ Input [5]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5, exists#2 (32) Exchange Input [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5] -Arguments: hashpartitioning(c_current_addr_sk#5, 5), ENSURE_REQUIREMENTS, [id=#20] +Arguments: hashpartitioning(c_current_addr_sk#5, 5), ENSURE_REQUIREMENTS, [plan_id=5] (33) Sort [codegen id : 15] Input [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5] Arguments: [c_current_addr_sk#5 ASC NULLS FIRST], false, 0 (34) Scan parquet default.customer_address -Output [2]: [ca_address_sk#21, ca_state#22] +Output [2]: [ca_address_sk#16, ca_state#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 16] -Input [2]: [ca_address_sk#21, ca_state#22] +Input [2]: [ca_address_sk#16, ca_state#17] (36) Filter [codegen id : 16] -Input [2]: [ca_address_sk#21, ca_state#22] -Condition : isnotnull(ca_address_sk#21) +Input [2]: [ca_address_sk#16, ca_state#17] +Condition : isnotnull(ca_address_sk#16) (37) Exchange -Input [2]: [ca_address_sk#21, ca_state#22] -Arguments: hashpartitioning(ca_address_sk#21, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [2]: [ca_address_sk#16, ca_state#17] +Arguments: hashpartitioning(ca_address_sk#16, 5), ENSURE_REQUIREMENTS, [plan_id=6] (38) Sort [codegen id : 17] -Input [2]: [ca_address_sk#21, ca_state#22] -Arguments: [ca_address_sk#21 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#16, ca_state#17] +Arguments: [ca_address_sk#16 ASC NULLS FIRST], false, 0 (39) SortMergeJoin [codegen id : 18] Left keys [1]: [c_current_addr_sk#5] -Right keys [1]: [ca_address_sk#21] +Right keys [1]: [ca_address_sk#16] Join condition: None (40) Project [codegen id : 18] -Output [2]: [c_current_cdemo_sk#4, ca_state#22] -Input [4]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#21, ca_state#22] +Output [2]: [c_current_cdemo_sk#4, ca_state#17] +Input [4]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#16, ca_state#17] (41) Exchange -Input [2]: [c_current_cdemo_sk#4, ca_state#22] -Arguments: hashpartitioning(c_current_cdemo_sk#4, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [2]: [c_current_cdemo_sk#4, ca_state#17] +Arguments: hashpartitioning(c_current_cdemo_sk#4, 5), ENSURE_REQUIREMENTS, [plan_id=7] (42) Sort [codegen id : 19] -Input [2]: [c_current_cdemo_sk#4, ca_state#22] +Input [2]: [c_current_cdemo_sk#4, ca_state#17] Arguments: [c_current_cdemo_sk#4 ASC NULLS FIRST], false, 0 (43) Scan parquet default.customer_demographics -Output [6]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Output [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 20] -Input [6]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] (45) Filter [codegen id : 20] -Input [6]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Condition : isnotnull(cd_demo_sk#25) +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Condition : isnotnull(cd_demo_sk#18) (46) Exchange -Input [6]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Arguments: hashpartitioning(cd_demo_sk#25, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Arguments: hashpartitioning(cd_demo_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=8] (47) Sort [codegen id : 21] -Input [6]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Arguments: [cd_demo_sk#25 ASC NULLS FIRST], false, 0 +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Arguments: [cd_demo_sk#18 ASC NULLS FIRST], false, 0 (48) SortMergeJoin [codegen id : 22] Left keys [1]: [c_current_cdemo_sk#4] -Right keys [1]: [cd_demo_sk#25] +Right keys [1]: [cd_demo_sk#18] Join condition: None (49) Project [codegen id : 22] -Output [6]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Input [8]: [c_current_cdemo_sk#4, ca_state#22, cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] +Output [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Input [8]: [c_current_cdemo_sk#4, ca_state#17, cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] (50) HashAggregate [codegen id : 22] -Input [6]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Keys [6]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Functions [10]: [partial_count(1), partial_avg(cd_dep_count#28), partial_max(cd_dep_count#28), partial_sum(cd_dep_count#28), partial_avg(cd_dep_employed_count#29), partial_max(cd_dep_employed_count#29), partial_sum(cd_dep_employed_count#29), partial_avg(cd_dep_college_count#30), partial_max(cd_dep_college_count#30), partial_sum(cd_dep_college_count#30)] -Aggregate Attributes [13]: [count#32, sum#33, count#34, max#35, sum#36, sum#37, count#38, max#39, sum#40, sum#41, count#42, max#43, sum#44] -Results [19]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#45, sum#46, count#47, max#48, sum#49, sum#50, count#51, max#52, sum#53, sum#54, count#55, max#56, sum#57] +Input [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Keys [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Functions [10]: [partial_count(1), partial_avg(cd_dep_count#21), partial_max(cd_dep_count#21), partial_sum(cd_dep_count#21), partial_avg(cd_dep_employed_count#22), partial_max(cd_dep_employed_count#22), partial_sum(cd_dep_employed_count#22), partial_avg(cd_dep_college_count#23), partial_max(cd_dep_college_count#23), partial_sum(cd_dep_college_count#23)] +Aggregate Attributes [13]: [count#24, sum#25, count#26, max#27, sum#28, sum#29, count#30, max#31, sum#32, sum#33, count#34, max#35, sum#36] +Results [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, sum#38, count#39, max#40, sum#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49] (51) Exchange -Input [19]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#45, sum#46, count#47, max#48, sum#49, sum#50, count#51, max#52, sum#53, sum#54, count#55, max#56, sum#57] -Arguments: hashpartitioning(ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, 5), ENSURE_REQUIREMENTS, [id=#58] +Input [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, sum#38, count#39, max#40, sum#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49] +Arguments: hashpartitioning(ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, 5), ENSURE_REQUIREMENTS, [plan_id=9] (52) HashAggregate [codegen id : 23] -Input [19]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#45, sum#46, count#47, max#48, sum#49, sum#50, count#51, max#52, sum#53, sum#54, count#55, max#56, sum#57] -Keys [6]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30] -Functions [10]: [count(1), avg(cd_dep_count#28), max(cd_dep_count#28), sum(cd_dep_count#28), avg(cd_dep_employed_count#29), max(cd_dep_employed_count#29), sum(cd_dep_employed_count#29), avg(cd_dep_college_count#30), max(cd_dep_college_count#30), sum(cd_dep_college_count#30)] -Aggregate Attributes [10]: [count(1)#59, avg(cd_dep_count#28)#60, max(cd_dep_count#28)#61, sum(cd_dep_count#28)#62, avg(cd_dep_employed_count#29)#63, max(cd_dep_employed_count#29)#64, sum(cd_dep_employed_count#29)#65, avg(cd_dep_college_count#30)#66, max(cd_dep_college_count#30)#67, sum(cd_dep_college_count#30)#68] -Results [18]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, count(1)#59 AS cnt1#69, avg(cd_dep_count#28)#60 AS avg(cd_dep_count)#70, max(cd_dep_count#28)#61 AS max(cd_dep_count)#71, sum(cd_dep_count#28)#62 AS sum(cd_dep_count)#72, cd_dep_employed_count#29, count(1)#59 AS cnt2#73, avg(cd_dep_employed_count#29)#63 AS avg(cd_dep_employed_count)#74, max(cd_dep_employed_count#29)#64 AS max(cd_dep_employed_count)#75, sum(cd_dep_employed_count#29)#65 AS sum(cd_dep_employed_count)#76, cd_dep_college_count#30, count(1)#59 AS cnt3#77, avg(cd_dep_college_count#30)#66 AS avg(cd_dep_college_count)#78, max(cd_dep_college_count#30)#67 AS max(cd_dep_college_count)#79, sum(cd_dep_college_count#30)#68 AS sum(cd_dep_college_count)#80] +Input [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, sum#38, count#39, max#40, sum#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49] +Keys [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Functions [10]: [count(1), avg(cd_dep_count#21), max(cd_dep_count#21), sum(cd_dep_count#21), avg(cd_dep_employed_count#22), max(cd_dep_employed_count#22), sum(cd_dep_employed_count#22), avg(cd_dep_college_count#23), max(cd_dep_college_count#23), sum(cd_dep_college_count#23)] +Aggregate Attributes [10]: [count(1)#50, avg(cd_dep_count#21)#51, max(cd_dep_count#21)#52, sum(cd_dep_count#21)#53, avg(cd_dep_employed_count#22)#54, max(cd_dep_employed_count#22)#55, sum(cd_dep_employed_count#22)#56, avg(cd_dep_college_count#23)#57, max(cd_dep_college_count#23)#58, sum(cd_dep_college_count#23)#59] +Results [18]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, count(1)#50 AS cnt1#60, avg(cd_dep_count#21)#51 AS avg(cd_dep_count)#61, max(cd_dep_count#21)#52 AS max(cd_dep_count)#62, sum(cd_dep_count#21)#53 AS sum(cd_dep_count)#63, cd_dep_employed_count#22, count(1)#50 AS cnt2#64, avg(cd_dep_employed_count#22)#54 AS avg(cd_dep_employed_count)#65, max(cd_dep_employed_count#22)#55 AS max(cd_dep_employed_count)#66, sum(cd_dep_employed_count#22)#56 AS sum(cd_dep_employed_count)#67, cd_dep_college_count#23, count(1)#50 AS cnt3#68, avg(cd_dep_college_count#23)#57 AS avg(cd_dep_college_count)#69, max(cd_dep_college_count#23)#58 AS max(cd_dep_college_count)#70, sum(cd_dep_college_count#23)#59 AS sum(cd_dep_college_count)#71] (53) TakeOrderedAndProject -Input [18]: [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cnt1#69, avg(cd_dep_count)#70, max(cd_dep_count)#71, sum(cd_dep_count)#72, cd_dep_employed_count#29, cnt2#73, avg(cd_dep_employed_count)#74, max(cd_dep_employed_count)#75, sum(cd_dep_employed_count)#76, cd_dep_college_count#30, cnt3#77, avg(cd_dep_college_count)#78, max(cd_dep_college_count)#79, sum(cd_dep_college_count)#80] -Arguments: 100, [ca_state#22 ASC NULLS FIRST, cd_gender#26 ASC NULLS FIRST, cd_marital_status#27 ASC NULLS FIRST, cd_dep_count#28 ASC NULLS FIRST, cd_dep_employed_count#29 ASC NULLS FIRST, cd_dep_college_count#30 ASC NULLS FIRST], [ca_state#22, cd_gender#26, cd_marital_status#27, cd_dep_count#28, cnt1#69, avg(cd_dep_count)#70, max(cd_dep_count)#71, sum(cd_dep_count)#72, cd_dep_employed_count#29, cnt2#73, avg(cd_dep_employed_count)#74, max(cd_dep_employed_count)#75, sum(cd_dep_employed_count)#76, cd_dep_college_count#30, cnt3#77, avg(cd_dep_college_count)#78, max(cd_dep_college_count)#79, sum(cd_dep_college_count)#80] +Input [18]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cnt1#60, avg(cd_dep_count)#61, max(cd_dep_count)#62, sum(cd_dep_count)#63, cd_dep_employed_count#22, cnt2#64, avg(cd_dep_employed_count)#65, max(cd_dep_employed_count)#66, sum(cd_dep_employed_count)#67, cd_dep_college_count#23, cnt3#68, avg(cd_dep_college_count)#69, max(cd_dep_college_count)#70, sum(cd_dep_college_count)#71] +Arguments: 100, [ca_state#17 ASC NULLS FIRST, cd_gender#19 ASC NULLS FIRST, cd_marital_status#20 ASC NULLS FIRST, cd_dep_count#21 ASC NULLS FIRST, cd_dep_employed_count#22 ASC NULLS FIRST, cd_dep_college_count#23 ASC NULLS FIRST], [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cnt1#60, avg(cd_dep_count)#61, max(cd_dep_count)#62, sum(cd_dep_count)#63, cd_dep_employed_count#22, cnt2#64, avg(cd_dep_employed_count)#65, max(cd_dep_employed_count)#66, sum(cd_dep_employed_count)#67, cd_dep_college_count#23, cnt3#68, avg(cd_dep_college_count)#69, max(cd_dep_college_count)#70, sum(cd_dep_college_count)#71] ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 +Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 BroadcastExchange (58) +- * Project (57) +- * Filter (56) @@ -300,29 +300,29 @@ BroadcastExchange (58) (54) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#81, d_qoy#82] +Output [3]: [d_date_sk#9, d_year#72, d_qoy#73] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_qoy), EqualTo(d_year,2002), LessThan(d_qoy,4), IsNotNull(d_date_sk)] ReadSchema: struct (55) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#81, d_qoy#82] +Input [3]: [d_date_sk#9, d_year#72, d_qoy#73] (56) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#81, d_qoy#82] -Condition : ((((isnotnull(d_year#81) AND isnotnull(d_qoy#82)) AND (d_year#81 = 2002)) AND (d_qoy#82 < 4)) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#9, d_year#72, d_qoy#73] +Condition : ((((isnotnull(d_year#72) AND isnotnull(d_qoy#73)) AND (d_year#72 = 2002)) AND (d_qoy#73 < 4)) AND isnotnull(d_date_sk#9)) (57) Project [codegen id : 1] -Output [1]: [d_date_sk#10] -Input [3]: [d_date_sk#10, d_year#81, d_qoy#82] +Output [1]: [d_date_sk#9] +Input [3]: [d_date_sk#9, d_year#72, d_qoy#73] (58) BroadcastExchange -Input [1]: [d_date_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#83] +Input [1]: [d_date_sk#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] -Subquery:2 Hosting operator id = 14 Hosting Expression = ws_sold_date_sk#13 IN dynamicpruning#9 +Subquery:2 Hosting operator id = 14 Hosting Expression = ws_sold_date_sk#11 IN dynamicpruning#8 -Subquery:3 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#17 IN dynamicpruning#9 +Subquery:3 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#14 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35/explain.txt index a7d47450807a7..4ca278bcffb2f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35/explain.txt @@ -81,7 +81,7 @@ Input [3]: [ss_customer_sk#6, ss_sold_date_sk#7, d_date_sk#9] (9) BroadcastExchange Input [1]: [ss_customer_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#3] @@ -89,65 +89,65 @@ Right keys [1]: [ss_customer_sk#6] Join condition: None (11) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#11, ws_sold_date_sk#12] +Output [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#12), dynamicpruningexpression(ws_sold_date_sk#12 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ws_sold_date_sk#11), dynamicpruningexpression(ws_sold_date_sk#11 IN dynamicpruning#8)] ReadSchema: struct (12) ColumnarToRow [codegen id : 4] -Input [2]: [ws_bill_customer_sk#11, ws_sold_date_sk#12] +Input [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] (13) ReusedExchange [Reuses operator id: 47] -Output [1]: [d_date_sk#13] +Output [1]: [d_date_sk#12] (14) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ws_sold_date_sk#12] -Right keys [1]: [d_date_sk#13] +Left keys [1]: [ws_sold_date_sk#11] +Right keys [1]: [d_date_sk#12] Join condition: None (15) Project [codegen id : 4] -Output [1]: [ws_bill_customer_sk#11] -Input [3]: [ws_bill_customer_sk#11, ws_sold_date_sk#12, d_date_sk#13] +Output [1]: [ws_bill_customer_sk#10] +Input [3]: [ws_bill_customer_sk#10, ws_sold_date_sk#11, d_date_sk#12] (16) BroadcastExchange -Input [1]: [ws_bill_customer_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Input [1]: [ws_bill_customer_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [ws_bill_customer_sk#11] +Right keys [1]: [ws_bill_customer_sk#10] Join condition: None (18) Scan parquet default.catalog_sales -Output [2]: [cs_ship_customer_sk#15, cs_sold_date_sk#16] +Output [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#16), dynamicpruningexpression(cs_sold_date_sk#16 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(cs_sold_date_sk#14), dynamicpruningexpression(cs_sold_date_sk#14 IN dynamicpruning#8)] ReadSchema: struct (19) ColumnarToRow [codegen id : 6] -Input [2]: [cs_ship_customer_sk#15, cs_sold_date_sk#16] +Input [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] (20) ReusedExchange [Reuses operator id: 47] -Output [1]: [d_date_sk#17] +Output [1]: [d_date_sk#15] (21) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [cs_sold_date_sk#16] -Right keys [1]: [d_date_sk#17] +Left keys [1]: [cs_sold_date_sk#14] +Right keys [1]: [d_date_sk#15] Join condition: None (22) Project [codegen id : 6] -Output [1]: [cs_ship_customer_sk#15] -Input [3]: [cs_ship_customer_sk#15, cs_sold_date_sk#16, d_date_sk#17] +Output [1]: [cs_ship_customer_sk#13] +Input [3]: [cs_ship_customer_sk#13, cs_sold_date_sk#14, d_date_sk#15] (23) BroadcastExchange -Input [1]: [cs_ship_customer_sk#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Input [1]: [cs_ship_customer_sk#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [cs_ship_customer_sk#15] +Right keys [1]: [cs_ship_customer_sk#13] Join condition: None (25) Filter [codegen id : 9] @@ -159,80 +159,80 @@ Output [2]: [c_current_cdemo_sk#4, c_current_addr_sk#5] Input [5]: [c_customer_sk#3, c_current_cdemo_sk#4, c_current_addr_sk#5, exists#2, exists#1] (27) Scan parquet default.customer_address -Output [2]: [ca_address_sk#19, ca_state#20] +Output [2]: [ca_address_sk#16, ca_state#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 7] -Input [2]: [ca_address_sk#19, ca_state#20] +Input [2]: [ca_address_sk#16, ca_state#17] (29) Filter [codegen id : 7] -Input [2]: [ca_address_sk#19, ca_state#20] -Condition : isnotnull(ca_address_sk#19) +Input [2]: [ca_address_sk#16, ca_state#17] +Condition : isnotnull(ca_address_sk#16) (30) BroadcastExchange -Input [2]: [ca_address_sk#19, ca_state#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21] +Input [2]: [ca_address_sk#16, ca_state#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (31) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_current_addr_sk#5] -Right keys [1]: [ca_address_sk#19] +Right keys [1]: [ca_address_sk#16] Join condition: None (32) Project [codegen id : 9] -Output [2]: [c_current_cdemo_sk#4, ca_state#20] -Input [4]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#19, ca_state#20] +Output [2]: [c_current_cdemo_sk#4, ca_state#17] +Input [4]: [c_current_cdemo_sk#4, c_current_addr_sk#5, ca_address_sk#16, ca_state#17] (33) Scan parquet default.customer_demographics -Output [6]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] +Output [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (34) ColumnarToRow [codegen id : 8] -Input [6]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] (35) Filter [codegen id : 8] -Input [6]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] -Condition : isnotnull(cd_demo_sk#22) +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Condition : isnotnull(cd_demo_sk#18) (36) BroadcastExchange -Input [6]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#28] +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (37) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_current_cdemo_sk#4] -Right keys [1]: [cd_demo_sk#22] +Right keys [1]: [cd_demo_sk#18] Join condition: None (38) Project [codegen id : 9] -Output [6]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] -Input [8]: [c_current_cdemo_sk#4, ca_state#20, cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] +Output [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Input [8]: [c_current_cdemo_sk#4, ca_state#17, cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] (39) HashAggregate [codegen id : 9] -Input [6]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] -Keys [6]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] -Functions [10]: [partial_count(1), partial_avg(cd_dep_count#25), partial_max(cd_dep_count#25), partial_sum(cd_dep_count#25), partial_avg(cd_dep_employed_count#26), partial_max(cd_dep_employed_count#26), partial_sum(cd_dep_employed_count#26), partial_avg(cd_dep_college_count#27), partial_max(cd_dep_college_count#27), partial_sum(cd_dep_college_count#27)] -Aggregate Attributes [13]: [count#29, sum#30, count#31, max#32, sum#33, sum#34, count#35, max#36, sum#37, sum#38, count#39, max#40, sum#41] -Results [19]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, count#42, sum#43, count#44, max#45, sum#46, sum#47, count#48, max#49, sum#50, sum#51, count#52, max#53, sum#54] +Input [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Keys [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Functions [10]: [partial_count(1), partial_avg(cd_dep_count#21), partial_max(cd_dep_count#21), partial_sum(cd_dep_count#21), partial_avg(cd_dep_employed_count#22), partial_max(cd_dep_employed_count#22), partial_sum(cd_dep_employed_count#22), partial_avg(cd_dep_college_count#23), partial_max(cd_dep_college_count#23), partial_sum(cd_dep_college_count#23)] +Aggregate Attributes [13]: [count#24, sum#25, count#26, max#27, sum#28, sum#29, count#30, max#31, sum#32, sum#33, count#34, max#35, sum#36] +Results [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, sum#38, count#39, max#40, sum#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49] (40) Exchange -Input [19]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, count#42, sum#43, count#44, max#45, sum#46, sum#47, count#48, max#49, sum#50, sum#51, count#52, max#53, sum#54] -Arguments: hashpartitioning(ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, 5), ENSURE_REQUIREMENTS, [id=#55] +Input [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, sum#38, count#39, max#40, sum#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49] +Arguments: hashpartitioning(ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, 5), ENSURE_REQUIREMENTS, [plan_id=6] (41) HashAggregate [codegen id : 10] -Input [19]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27, count#42, sum#43, count#44, max#45, sum#46, sum#47, count#48, max#49, sum#50, sum#51, count#52, max#53, sum#54] -Keys [6]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cd_dep_employed_count#26, cd_dep_college_count#27] -Functions [10]: [count(1), avg(cd_dep_count#25), max(cd_dep_count#25), sum(cd_dep_count#25), avg(cd_dep_employed_count#26), max(cd_dep_employed_count#26), sum(cd_dep_employed_count#26), avg(cd_dep_college_count#27), max(cd_dep_college_count#27), sum(cd_dep_college_count#27)] -Aggregate Attributes [10]: [count(1)#56, avg(cd_dep_count#25)#57, max(cd_dep_count#25)#58, sum(cd_dep_count#25)#59, avg(cd_dep_employed_count#26)#60, max(cd_dep_employed_count#26)#61, sum(cd_dep_employed_count#26)#62, avg(cd_dep_college_count#27)#63, max(cd_dep_college_count#27)#64, sum(cd_dep_college_count#27)#65] -Results [18]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, count(1)#56 AS cnt1#66, avg(cd_dep_count#25)#57 AS avg(cd_dep_count)#67, max(cd_dep_count#25)#58 AS max(cd_dep_count)#68, sum(cd_dep_count#25)#59 AS sum(cd_dep_count)#69, cd_dep_employed_count#26, count(1)#56 AS cnt2#70, avg(cd_dep_employed_count#26)#60 AS avg(cd_dep_employed_count)#71, max(cd_dep_employed_count#26)#61 AS max(cd_dep_employed_count)#72, sum(cd_dep_employed_count#26)#62 AS sum(cd_dep_employed_count)#73, cd_dep_college_count#27, count(1)#56 AS cnt3#74, avg(cd_dep_college_count#27)#63 AS avg(cd_dep_college_count)#75, max(cd_dep_college_count#27)#64 AS max(cd_dep_college_count)#76, sum(cd_dep_college_count#27)#65 AS sum(cd_dep_college_count)#77] +Input [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, sum#38, count#39, max#40, sum#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49] +Keys [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Functions [10]: [count(1), avg(cd_dep_count#21), max(cd_dep_count#21), sum(cd_dep_count#21), avg(cd_dep_employed_count#22), max(cd_dep_employed_count#22), sum(cd_dep_employed_count#22), avg(cd_dep_college_count#23), max(cd_dep_college_count#23), sum(cd_dep_college_count#23)] +Aggregate Attributes [10]: [count(1)#50, avg(cd_dep_count#21)#51, max(cd_dep_count#21)#52, sum(cd_dep_count#21)#53, avg(cd_dep_employed_count#22)#54, max(cd_dep_employed_count#22)#55, sum(cd_dep_employed_count#22)#56, avg(cd_dep_college_count#23)#57, max(cd_dep_college_count#23)#58, sum(cd_dep_college_count#23)#59] +Results [18]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, count(1)#50 AS cnt1#60, avg(cd_dep_count#21)#51 AS avg(cd_dep_count)#61, max(cd_dep_count#21)#52 AS max(cd_dep_count)#62, sum(cd_dep_count#21)#53 AS sum(cd_dep_count)#63, cd_dep_employed_count#22, count(1)#50 AS cnt2#64, avg(cd_dep_employed_count#22)#54 AS avg(cd_dep_employed_count)#65, max(cd_dep_employed_count#22)#55 AS max(cd_dep_employed_count)#66, sum(cd_dep_employed_count#22)#56 AS sum(cd_dep_employed_count)#67, cd_dep_college_count#23, count(1)#50 AS cnt3#68, avg(cd_dep_college_count#23)#57 AS avg(cd_dep_college_count)#69, max(cd_dep_college_count#23)#58 AS max(cd_dep_college_count)#70, sum(cd_dep_college_count#23)#59 AS sum(cd_dep_college_count)#71] (42) TakeOrderedAndProject -Input [18]: [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cnt1#66, avg(cd_dep_count)#67, max(cd_dep_count)#68, sum(cd_dep_count)#69, cd_dep_employed_count#26, cnt2#70, avg(cd_dep_employed_count)#71, max(cd_dep_employed_count)#72, sum(cd_dep_employed_count)#73, cd_dep_college_count#27, cnt3#74, avg(cd_dep_college_count)#75, max(cd_dep_college_count)#76, sum(cd_dep_college_count)#77] -Arguments: 100, [ca_state#20 ASC NULLS FIRST, cd_gender#23 ASC NULLS FIRST, cd_marital_status#24 ASC NULLS FIRST, cd_dep_count#25 ASC NULLS FIRST, cd_dep_employed_count#26 ASC NULLS FIRST, cd_dep_college_count#27 ASC NULLS FIRST], [ca_state#20, cd_gender#23, cd_marital_status#24, cd_dep_count#25, cnt1#66, avg(cd_dep_count)#67, max(cd_dep_count)#68, sum(cd_dep_count)#69, cd_dep_employed_count#26, cnt2#70, avg(cd_dep_employed_count)#71, max(cd_dep_employed_count)#72, sum(cd_dep_employed_count)#73, cd_dep_college_count#27, cnt3#74, avg(cd_dep_college_count)#75, max(cd_dep_college_count)#76, sum(cd_dep_college_count)#77] +Input [18]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cnt1#60, avg(cd_dep_count)#61, max(cd_dep_count)#62, sum(cd_dep_count)#63, cd_dep_employed_count#22, cnt2#64, avg(cd_dep_employed_count)#65, max(cd_dep_employed_count)#66, sum(cd_dep_employed_count)#67, cd_dep_college_count#23, cnt3#68, avg(cd_dep_college_count)#69, max(cd_dep_college_count)#70, sum(cd_dep_college_count)#71] +Arguments: 100, [ca_state#17 ASC NULLS FIRST, cd_gender#19 ASC NULLS FIRST, cd_marital_status#20 ASC NULLS FIRST, cd_dep_count#21 ASC NULLS FIRST, cd_dep_employed_count#22 ASC NULLS FIRST, cd_dep_college_count#23 ASC NULLS FIRST], [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cnt1#60, avg(cd_dep_count)#61, max(cd_dep_count)#62, sum(cd_dep_count)#63, cd_dep_employed_count#22, cnt2#64, avg(cd_dep_employed_count)#65, max(cd_dep_employed_count)#66, sum(cd_dep_employed_count)#67, cd_dep_college_count#23, cnt3#68, avg(cd_dep_college_count)#69, max(cd_dep_college_count)#70, sum(cd_dep_college_count)#71] ===== Subqueries ===== @@ -245,29 +245,29 @@ BroadcastExchange (47) (43) Scan parquet default.date_dim -Output [3]: [d_date_sk#9, d_year#78, d_qoy#79] +Output [3]: [d_date_sk#9, d_year#72, d_qoy#73] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_qoy), EqualTo(d_year,2002), LessThan(d_qoy,4), IsNotNull(d_date_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#9, d_year#78, d_qoy#79] +Input [3]: [d_date_sk#9, d_year#72, d_qoy#73] (45) Filter [codegen id : 1] -Input [3]: [d_date_sk#9, d_year#78, d_qoy#79] -Condition : ((((isnotnull(d_year#78) AND isnotnull(d_qoy#79)) AND (d_year#78 = 2002)) AND (d_qoy#79 < 4)) AND isnotnull(d_date_sk#9)) +Input [3]: [d_date_sk#9, d_year#72, d_qoy#73] +Condition : ((((isnotnull(d_year#72) AND isnotnull(d_qoy#73)) AND (d_year#72 = 2002)) AND (d_qoy#73 < 4)) AND isnotnull(d_date_sk#9)) (46) Project [codegen id : 1] Output [1]: [d_date_sk#9] -Input [3]: [d_date_sk#9, d_year#78, d_qoy#79] +Input [3]: [d_date_sk#9, d_year#72, d_qoy#73] (47) BroadcastExchange Input [1]: [d_date_sk#9] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#80] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:2 Hosting operator id = 11 Hosting Expression = ws_sold_date_sk#12 IN dynamicpruning#8 +Subquery:2 Hosting operator id = 11 Hosting Expression = ws_sold_date_sk#11 IN dynamicpruning#8 -Subquery:3 Hosting operator id = 18 Hosting Expression = cs_sold_date_sk#16 IN dynamicpruning#8 +Subquery:3 Hosting operator id = 18 Hosting Expression = cs_sold_date_sk#14 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a.sf100/explain.txt index f8d8946e2af92..06570d76957fd 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a.sf100/explain.txt @@ -67,104 +67,104 @@ Condition : (isnotnull(c_current_addr_sk#3) AND isnotnull(c_current_cdemo_sk#2)) (4) Exchange Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] -Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#4] +Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: [c_customer_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_sales -Output [2]: [ss_customer_sk#5, ss_sold_date_sk#6] +Output [2]: [ss_customer_sk#4, ss_sold_date_sk#5] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#6), dynamicpruningexpression(ss_sold_date_sk#6 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(ss_sold_date_sk#5), dynamicpruningexpression(ss_sold_date_sk#5 IN dynamicpruning#6)] ReadSchema: struct (7) ColumnarToRow [codegen id : 4] -Input [2]: [ss_customer_sk#5, ss_sold_date_sk#6] +Input [2]: [ss_customer_sk#4, ss_sold_date_sk#5] (8) ReusedExchange [Reuses operator id: 55] -Output [1]: [d_date_sk#8] +Output [1]: [d_date_sk#7] (9) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ss_sold_date_sk#6] -Right keys [1]: [d_date_sk#8] +Left keys [1]: [ss_sold_date_sk#5] +Right keys [1]: [d_date_sk#7] Join condition: None (10) Project [codegen id : 4] -Output [1]: [ss_customer_sk#5] -Input [3]: [ss_customer_sk#5, ss_sold_date_sk#6, d_date_sk#8] +Output [1]: [ss_customer_sk#4] +Input [3]: [ss_customer_sk#4, ss_sold_date_sk#5, d_date_sk#7] (11) Exchange -Input [1]: [ss_customer_sk#5] -Arguments: hashpartitioning(ss_customer_sk#5, 5), ENSURE_REQUIREMENTS, [id=#9] +Input [1]: [ss_customer_sk#4] +Arguments: hashpartitioning(ss_customer_sk#4, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 5] -Input [1]: [ss_customer_sk#5] -Arguments: [ss_customer_sk#5 ASC NULLS FIRST], false, 0 +Input [1]: [ss_customer_sk#4] +Arguments: [ss_customer_sk#4 ASC NULLS FIRST], false, 0 (13) SortMergeJoin [codegen id : 6] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [ss_customer_sk#5] +Right keys [1]: [ss_customer_sk#4] Join condition: None (14) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] +Output [2]: [ws_bill_customer_sk#8, ws_sold_date_sk#9] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#11), dynamicpruningexpression(ws_sold_date_sk#11 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(ws_sold_date_sk#9), dynamicpruningexpression(ws_sold_date_sk#9 IN dynamicpruning#6)] ReadSchema: struct (15) ColumnarToRow [codegen id : 8] -Input [2]: [ws_bill_customer_sk#10, ws_sold_date_sk#11] +Input [2]: [ws_bill_customer_sk#8, ws_sold_date_sk#9] (16) ReusedExchange [Reuses operator id: 55] -Output [1]: [d_date_sk#12] +Output [1]: [d_date_sk#10] (17) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [ws_sold_date_sk#11] -Right keys [1]: [d_date_sk#12] +Left keys [1]: [ws_sold_date_sk#9] +Right keys [1]: [d_date_sk#10] Join condition: None (18) Project [codegen id : 8] -Output [1]: [ws_bill_customer_sk#10 AS customsk#13] -Input [3]: [ws_bill_customer_sk#10, ws_sold_date_sk#11, d_date_sk#12] +Output [1]: [ws_bill_customer_sk#8 AS customsk#11] +Input [3]: [ws_bill_customer_sk#8, ws_sold_date_sk#9, d_date_sk#10] (19) Scan parquet default.catalog_sales -Output [2]: [cs_ship_customer_sk#14, cs_sold_date_sk#15] +Output [2]: [cs_ship_customer_sk#12, cs_sold_date_sk#13] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#15), dynamicpruningexpression(cs_sold_date_sk#15 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(cs_sold_date_sk#13), dynamicpruningexpression(cs_sold_date_sk#13 IN dynamicpruning#6)] ReadSchema: struct (20) ColumnarToRow [codegen id : 10] -Input [2]: [cs_ship_customer_sk#14, cs_sold_date_sk#15] +Input [2]: [cs_ship_customer_sk#12, cs_sold_date_sk#13] (21) ReusedExchange [Reuses operator id: 55] -Output [1]: [d_date_sk#16] +Output [1]: [d_date_sk#14] (22) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cs_sold_date_sk#15] -Right keys [1]: [d_date_sk#16] +Left keys [1]: [cs_sold_date_sk#13] +Right keys [1]: [d_date_sk#14] Join condition: None (23) Project [codegen id : 10] -Output [1]: [cs_ship_customer_sk#14 AS customsk#17] -Input [3]: [cs_ship_customer_sk#14, cs_sold_date_sk#15, d_date_sk#16] +Output [1]: [cs_ship_customer_sk#12 AS customsk#15] +Input [3]: [cs_ship_customer_sk#12, cs_sold_date_sk#13, d_date_sk#14] (24) Union (25) Exchange -Input [1]: [customsk#13] -Arguments: hashpartitioning(customsk#13, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [1]: [customsk#11] +Arguments: hashpartitioning(customsk#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (26) Sort [codegen id : 11] -Input [1]: [customsk#13] -Arguments: [customsk#13 ASC NULLS FIRST], false, 0 +Input [1]: [customsk#11] +Arguments: [customsk#11 ASC NULLS FIRST], false, 0 (27) SortMergeJoin [codegen id : 12] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [customsk#13] +Right keys [1]: [customsk#11] Join condition: None (28) Project [codegen id : 12] @@ -173,107 +173,107 @@ Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] (29) Exchange Input [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] -Arguments: hashpartitioning(c_current_addr_sk#3, 5), ENSURE_REQUIREMENTS, [id=#19] +Arguments: hashpartitioning(c_current_addr_sk#3, 5), ENSURE_REQUIREMENTS, [plan_id=4] (30) Sort [codegen id : 13] Input [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] Arguments: [c_current_addr_sk#3 ASC NULLS FIRST], false, 0 (31) Scan parquet default.customer_address -Output [2]: [ca_address_sk#20, ca_state#21] +Output [2]: [ca_address_sk#16, ca_state#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 14] -Input [2]: [ca_address_sk#20, ca_state#21] +Input [2]: [ca_address_sk#16, ca_state#17] (33) Filter [codegen id : 14] -Input [2]: [ca_address_sk#20, ca_state#21] -Condition : isnotnull(ca_address_sk#20) +Input [2]: [ca_address_sk#16, ca_state#17] +Condition : isnotnull(ca_address_sk#16) (34) Exchange -Input [2]: [ca_address_sk#20, ca_state#21] -Arguments: hashpartitioning(ca_address_sk#20, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [2]: [ca_address_sk#16, ca_state#17] +Arguments: hashpartitioning(ca_address_sk#16, 5), ENSURE_REQUIREMENTS, [plan_id=5] (35) Sort [codegen id : 15] -Input [2]: [ca_address_sk#20, ca_state#21] -Arguments: [ca_address_sk#20 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#16, ca_state#17] +Arguments: [ca_address_sk#16 ASC NULLS FIRST], false, 0 (36) SortMergeJoin [codegen id : 16] Left keys [1]: [c_current_addr_sk#3] -Right keys [1]: [ca_address_sk#20] +Right keys [1]: [ca_address_sk#16] Join condition: None (37) Project [codegen id : 16] -Output [2]: [c_current_cdemo_sk#2, ca_state#21] -Input [4]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#20, ca_state#21] +Output [2]: [c_current_cdemo_sk#2, ca_state#17] +Input [4]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#16, ca_state#17] (38) Exchange -Input [2]: [c_current_cdemo_sk#2, ca_state#21] -Arguments: hashpartitioning(c_current_cdemo_sk#2, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [2]: [c_current_cdemo_sk#2, ca_state#17] +Arguments: hashpartitioning(c_current_cdemo_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=6] (39) Sort [codegen id : 17] -Input [2]: [c_current_cdemo_sk#2, ca_state#21] +Input [2]: [c_current_cdemo_sk#2, ca_state#17] Arguments: [c_current_cdemo_sk#2 ASC NULLS FIRST], false, 0 (40) Scan parquet default.customer_demographics -Output [6]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] +Output [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (41) ColumnarToRow [codegen id : 18] -Input [6]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] (42) Filter [codegen id : 18] -Input [6]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] -Condition : isnotnull(cd_demo_sk#24) +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Condition : isnotnull(cd_demo_sk#18) (43) Exchange -Input [6]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] -Arguments: hashpartitioning(cd_demo_sk#24, 5), ENSURE_REQUIREMENTS, [id=#30] +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Arguments: hashpartitioning(cd_demo_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=7] (44) Sort [codegen id : 19] -Input [6]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] -Arguments: [cd_demo_sk#24 ASC NULLS FIRST], false, 0 +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Arguments: [cd_demo_sk#18 ASC NULLS FIRST], false, 0 (45) SortMergeJoin [codegen id : 20] Left keys [1]: [c_current_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#24] +Right keys [1]: [cd_demo_sk#18] Join condition: None (46) Project [codegen id : 20] -Output [6]: [ca_state#21, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] -Input [8]: [c_current_cdemo_sk#2, ca_state#21, cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] +Output [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Input [8]: [c_current_cdemo_sk#2, ca_state#17, cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] (47) HashAggregate [codegen id : 20] -Input [6]: [ca_state#21, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] -Keys [6]: [ca_state#21, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] -Functions [10]: [partial_count(1), partial_avg(cd_dep_count#27), partial_max(cd_dep_count#27), partial_sum(cd_dep_count#27), partial_avg(cd_dep_employed_count#28), partial_max(cd_dep_employed_count#28), partial_sum(cd_dep_employed_count#28), partial_avg(cd_dep_college_count#29), partial_max(cd_dep_college_count#29), partial_sum(cd_dep_college_count#29)] -Aggregate Attributes [13]: [count#31, sum#32, count#33, max#34, sum#35, sum#36, count#37, max#38, sum#39, sum#40, count#41, max#42, sum#43] -Results [19]: [ca_state#21, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29, count#44, sum#45, count#46, max#47, sum#48, sum#49, count#50, max#51, sum#52, sum#53, count#54, max#55, sum#56] +Input [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Keys [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Functions [10]: [partial_count(1), partial_avg(cd_dep_count#21), partial_max(cd_dep_count#21), partial_sum(cd_dep_count#21), partial_avg(cd_dep_employed_count#22), partial_max(cd_dep_employed_count#22), partial_sum(cd_dep_employed_count#22), partial_avg(cd_dep_college_count#23), partial_max(cd_dep_college_count#23), partial_sum(cd_dep_college_count#23)] +Aggregate Attributes [13]: [count#24, sum#25, count#26, max#27, sum#28, sum#29, count#30, max#31, sum#32, sum#33, count#34, max#35, sum#36] +Results [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, sum#38, count#39, max#40, sum#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49] (48) Exchange -Input [19]: [ca_state#21, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29, count#44, sum#45, count#46, max#47, sum#48, sum#49, count#50, max#51, sum#52, sum#53, count#54, max#55, sum#56] -Arguments: hashpartitioning(ca_state#21, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29, 5), ENSURE_REQUIREMENTS, [id=#57] +Input [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, sum#38, count#39, max#40, sum#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49] +Arguments: hashpartitioning(ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, 5), ENSURE_REQUIREMENTS, [plan_id=8] (49) HashAggregate [codegen id : 21] -Input [19]: [ca_state#21, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29, count#44, sum#45, count#46, max#47, sum#48, sum#49, count#50, max#51, sum#52, sum#53, count#54, max#55, sum#56] -Keys [6]: [ca_state#21, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cd_dep_employed_count#28, cd_dep_college_count#29] -Functions [10]: [count(1), avg(cd_dep_count#27), max(cd_dep_count#27), sum(cd_dep_count#27), avg(cd_dep_employed_count#28), max(cd_dep_employed_count#28), sum(cd_dep_employed_count#28), avg(cd_dep_college_count#29), max(cd_dep_college_count#29), sum(cd_dep_college_count#29)] -Aggregate Attributes [10]: [count(1)#58, avg(cd_dep_count#27)#59, max(cd_dep_count#27)#60, sum(cd_dep_count#27)#61, avg(cd_dep_employed_count#28)#62, max(cd_dep_employed_count#28)#63, sum(cd_dep_employed_count#28)#64, avg(cd_dep_college_count#29)#65, max(cd_dep_college_count#29)#66, sum(cd_dep_college_count#29)#67] -Results [18]: [ca_state#21, cd_gender#25, cd_marital_status#26, cd_dep_count#27, count(1)#58 AS cnt1#68, avg(cd_dep_count#27)#59 AS avg(cd_dep_count)#69, max(cd_dep_count#27)#60 AS max(cd_dep_count)#70, sum(cd_dep_count#27)#61 AS sum(cd_dep_count)#71, cd_dep_employed_count#28, count(1)#58 AS cnt2#72, avg(cd_dep_employed_count#28)#62 AS avg(cd_dep_employed_count)#73, max(cd_dep_employed_count#28)#63 AS max(cd_dep_employed_count)#74, sum(cd_dep_employed_count#28)#64 AS sum(cd_dep_employed_count)#75, cd_dep_college_count#29, count(1)#58 AS cnt3#76, avg(cd_dep_college_count#29)#65 AS avg(cd_dep_college_count)#77, max(cd_dep_college_count#29)#66 AS max(cd_dep_college_count)#78, sum(cd_dep_college_count#29)#67 AS sum(cd_dep_college_count)#79] +Input [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, sum#38, count#39, max#40, sum#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49] +Keys [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Functions [10]: [count(1), avg(cd_dep_count#21), max(cd_dep_count#21), sum(cd_dep_count#21), avg(cd_dep_employed_count#22), max(cd_dep_employed_count#22), sum(cd_dep_employed_count#22), avg(cd_dep_college_count#23), max(cd_dep_college_count#23), sum(cd_dep_college_count#23)] +Aggregate Attributes [10]: [count(1)#50, avg(cd_dep_count#21)#51, max(cd_dep_count#21)#52, sum(cd_dep_count#21)#53, avg(cd_dep_employed_count#22)#54, max(cd_dep_employed_count#22)#55, sum(cd_dep_employed_count#22)#56, avg(cd_dep_college_count#23)#57, max(cd_dep_college_count#23)#58, sum(cd_dep_college_count#23)#59] +Results [18]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, count(1)#50 AS cnt1#60, avg(cd_dep_count#21)#51 AS avg(cd_dep_count)#61, max(cd_dep_count#21)#52 AS max(cd_dep_count)#62, sum(cd_dep_count#21)#53 AS sum(cd_dep_count)#63, cd_dep_employed_count#22, count(1)#50 AS cnt2#64, avg(cd_dep_employed_count#22)#54 AS avg(cd_dep_employed_count)#65, max(cd_dep_employed_count#22)#55 AS max(cd_dep_employed_count)#66, sum(cd_dep_employed_count#22)#56 AS sum(cd_dep_employed_count)#67, cd_dep_college_count#23, count(1)#50 AS cnt3#68, avg(cd_dep_college_count#23)#57 AS avg(cd_dep_college_count)#69, max(cd_dep_college_count#23)#58 AS max(cd_dep_college_count)#70, sum(cd_dep_college_count#23)#59 AS sum(cd_dep_college_count)#71] (50) TakeOrderedAndProject -Input [18]: [ca_state#21, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cnt1#68, avg(cd_dep_count)#69, max(cd_dep_count)#70, sum(cd_dep_count)#71, cd_dep_employed_count#28, cnt2#72, avg(cd_dep_employed_count)#73, max(cd_dep_employed_count)#74, sum(cd_dep_employed_count)#75, cd_dep_college_count#29, cnt3#76, avg(cd_dep_college_count)#77, max(cd_dep_college_count)#78, sum(cd_dep_college_count)#79] -Arguments: 100, [ca_state#21 ASC NULLS FIRST, cd_gender#25 ASC NULLS FIRST, cd_marital_status#26 ASC NULLS FIRST, cd_dep_count#27 ASC NULLS FIRST, cd_dep_employed_count#28 ASC NULLS FIRST, cd_dep_college_count#29 ASC NULLS FIRST], [ca_state#21, cd_gender#25, cd_marital_status#26, cd_dep_count#27, cnt1#68, avg(cd_dep_count)#69, max(cd_dep_count)#70, sum(cd_dep_count)#71, cd_dep_employed_count#28, cnt2#72, avg(cd_dep_employed_count)#73, max(cd_dep_employed_count)#74, sum(cd_dep_employed_count)#75, cd_dep_college_count#29, cnt3#76, avg(cd_dep_college_count)#77, max(cd_dep_college_count)#78, sum(cd_dep_college_count)#79] +Input [18]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cnt1#60, avg(cd_dep_count)#61, max(cd_dep_count)#62, sum(cd_dep_count)#63, cd_dep_employed_count#22, cnt2#64, avg(cd_dep_employed_count)#65, max(cd_dep_employed_count)#66, sum(cd_dep_employed_count)#67, cd_dep_college_count#23, cnt3#68, avg(cd_dep_college_count)#69, max(cd_dep_college_count)#70, sum(cd_dep_college_count)#71] +Arguments: 100, [ca_state#17 ASC NULLS FIRST, cd_gender#19 ASC NULLS FIRST, cd_marital_status#20 ASC NULLS FIRST, cd_dep_count#21 ASC NULLS FIRST, cd_dep_employed_count#22 ASC NULLS FIRST, cd_dep_college_count#23 ASC NULLS FIRST], [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cnt1#60, avg(cd_dep_count)#61, max(cd_dep_count)#62, sum(cd_dep_count)#63, cd_dep_employed_count#22, cnt2#64, avg(cd_dep_employed_count)#65, max(cd_dep_employed_count)#66, sum(cd_dep_employed_count)#67, cd_dep_college_count#23, cnt3#68, avg(cd_dep_college_count)#69, max(cd_dep_college_count)#70, sum(cd_dep_college_count)#71] ===== Subqueries ===== -Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#6 IN dynamicpruning#7 +Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#5 IN dynamicpruning#6 BroadcastExchange (55) +- * Project (54) +- * Filter (53) @@ -282,29 +282,29 @@ BroadcastExchange (55) (51) Scan parquet default.date_dim -Output [3]: [d_date_sk#8, d_year#80, d_qoy#81] +Output [3]: [d_date_sk#7, d_year#72, d_qoy#73] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_qoy), EqualTo(d_year,1999), LessThan(d_qoy,4), IsNotNull(d_date_sk)] ReadSchema: struct (52) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#8, d_year#80, d_qoy#81] +Input [3]: [d_date_sk#7, d_year#72, d_qoy#73] (53) Filter [codegen id : 1] -Input [3]: [d_date_sk#8, d_year#80, d_qoy#81] -Condition : ((((isnotnull(d_year#80) AND isnotnull(d_qoy#81)) AND (d_year#80 = 1999)) AND (d_qoy#81 < 4)) AND isnotnull(d_date_sk#8)) +Input [3]: [d_date_sk#7, d_year#72, d_qoy#73] +Condition : ((((isnotnull(d_year#72) AND isnotnull(d_qoy#73)) AND (d_year#72 = 1999)) AND (d_qoy#73 < 4)) AND isnotnull(d_date_sk#7)) (54) Project [codegen id : 1] -Output [1]: [d_date_sk#8] -Input [3]: [d_date_sk#8, d_year#80, d_qoy#81] +Output [1]: [d_date_sk#7] +Input [3]: [d_date_sk#7, d_year#72, d_qoy#73] (55) BroadcastExchange -Input [1]: [d_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#82] +Input [1]: [d_date_sk#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:2 Hosting operator id = 14 Hosting Expression = ws_sold_date_sk#11 IN dynamicpruning#7 +Subquery:2 Hosting operator id = 14 Hosting Expression = ws_sold_date_sk#9 IN dynamicpruning#6 -Subquery:3 Hosting operator id = 19 Hosting Expression = cs_sold_date_sk#15 IN dynamicpruning#7 +Subquery:3 Hosting operator id = 19 Hosting Expression = cs_sold_date_sk#13 IN dynamicpruning#6 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a/explain.txt index fe6d15a3fb15b..e7bd524f31530 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q35a/explain.txt @@ -79,7 +79,7 @@ Input [3]: [ss_customer_sk#4, ss_sold_date_sk#5, d_date_sk#7] (9) BroadcastExchange Input [1]: [ss_customer_sk#4] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#1] @@ -87,58 +87,58 @@ Right keys [1]: [ss_customer_sk#4] Join condition: None (11) Scan parquet default.web_sales -Output [2]: [ws_bill_customer_sk#9, ws_sold_date_sk#10] +Output [2]: [ws_bill_customer_sk#8, ws_sold_date_sk#9] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#10), dynamicpruningexpression(ws_sold_date_sk#10 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(ws_sold_date_sk#9), dynamicpruningexpression(ws_sold_date_sk#9 IN dynamicpruning#6)] ReadSchema: struct (12) ColumnarToRow [codegen id : 4] -Input [2]: [ws_bill_customer_sk#9, ws_sold_date_sk#10] +Input [2]: [ws_bill_customer_sk#8, ws_sold_date_sk#9] (13) ReusedExchange [Reuses operator id: 45] -Output [1]: [d_date_sk#11] +Output [1]: [d_date_sk#10] (14) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [ws_sold_date_sk#10] -Right keys [1]: [d_date_sk#11] +Left keys [1]: [ws_sold_date_sk#9] +Right keys [1]: [d_date_sk#10] Join condition: None (15) Project [codegen id : 4] -Output [1]: [ws_bill_customer_sk#9 AS customsk#12] -Input [3]: [ws_bill_customer_sk#9, ws_sold_date_sk#10, d_date_sk#11] +Output [1]: [ws_bill_customer_sk#8 AS customsk#11] +Input [3]: [ws_bill_customer_sk#8, ws_sold_date_sk#9, d_date_sk#10] (16) Scan parquet default.catalog_sales -Output [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] +Output [2]: [cs_ship_customer_sk#12, cs_sold_date_sk#13] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#14), dynamicpruningexpression(cs_sold_date_sk#14 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(cs_sold_date_sk#13), dynamicpruningexpression(cs_sold_date_sk#13 IN dynamicpruning#6)] ReadSchema: struct (17) ColumnarToRow [codegen id : 6] -Input [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14] +Input [2]: [cs_ship_customer_sk#12, cs_sold_date_sk#13] (18) ReusedExchange [Reuses operator id: 45] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (19) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [cs_sold_date_sk#14] -Right keys [1]: [d_date_sk#15] +Left keys [1]: [cs_sold_date_sk#13] +Right keys [1]: [d_date_sk#14] Join condition: None (20) Project [codegen id : 6] -Output [1]: [cs_ship_customer_sk#13 AS customsk#16] -Input [3]: [cs_ship_customer_sk#13, cs_sold_date_sk#14, d_date_sk#15] +Output [1]: [cs_ship_customer_sk#12 AS customsk#15] +Input [3]: [cs_ship_customer_sk#12, cs_sold_date_sk#13, d_date_sk#14] (21) Union (22) BroadcastExchange -Input [1]: [customsk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17] +Input [1]: [customsk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (23) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_customer_sk#1] -Right keys [1]: [customsk#12] +Right keys [1]: [customsk#11] Join condition: None (24) Project [codegen id : 9] @@ -146,80 +146,80 @@ Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3] Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3] (25) Scan parquet default.customer_address -Output [2]: [ca_address_sk#18, ca_state#19] +Output [2]: [ca_address_sk#16, ca_state#17] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 7] -Input [2]: [ca_address_sk#18, ca_state#19] +Input [2]: [ca_address_sk#16, ca_state#17] (27) Filter [codegen id : 7] -Input [2]: [ca_address_sk#18, ca_state#19] -Condition : isnotnull(ca_address_sk#18) +Input [2]: [ca_address_sk#16, ca_state#17] +Condition : isnotnull(ca_address_sk#16) (28) BroadcastExchange -Input [2]: [ca_address_sk#18, ca_state#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#20] +Input [2]: [ca_address_sk#16, ca_state#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (29) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_current_addr_sk#3] -Right keys [1]: [ca_address_sk#18] +Right keys [1]: [ca_address_sk#16] Join condition: None (30) Project [codegen id : 9] -Output [2]: [c_current_cdemo_sk#2, ca_state#19] -Input [4]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#18, ca_state#19] +Output [2]: [c_current_cdemo_sk#2, ca_state#17] +Input [4]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#16, ca_state#17] (31) Scan parquet default.customer_demographics -Output [6]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] +Output [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 8] -Input [6]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] (33) Filter [codegen id : 8] -Input [6]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] -Condition : isnotnull(cd_demo_sk#21) +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Condition : isnotnull(cd_demo_sk#18) (34) BroadcastExchange -Input [6]: [cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#27] +Input [6]: [cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (35) BroadcastHashJoin [codegen id : 9] Left keys [1]: [c_current_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#21] +Right keys [1]: [cd_demo_sk#18] Join condition: None (36) Project [codegen id : 9] -Output [6]: [ca_state#19, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] -Input [8]: [c_current_cdemo_sk#2, ca_state#19, cd_demo_sk#21, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] +Output [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Input [8]: [c_current_cdemo_sk#2, ca_state#17, cd_demo_sk#18, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] (37) HashAggregate [codegen id : 9] -Input [6]: [ca_state#19, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] -Keys [6]: [ca_state#19, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] -Functions [10]: [partial_count(1), partial_avg(cd_dep_count#24), partial_max(cd_dep_count#24), partial_sum(cd_dep_count#24), partial_avg(cd_dep_employed_count#25), partial_max(cd_dep_employed_count#25), partial_sum(cd_dep_employed_count#25), partial_avg(cd_dep_college_count#26), partial_max(cd_dep_college_count#26), partial_sum(cd_dep_college_count#26)] -Aggregate Attributes [13]: [count#28, sum#29, count#30, max#31, sum#32, sum#33, count#34, max#35, sum#36, sum#37, count#38, max#39, sum#40] -Results [19]: [ca_state#19, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26, count#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49, sum#50, count#51, max#52, sum#53] +Input [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Keys [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Functions [10]: [partial_count(1), partial_avg(cd_dep_count#21), partial_max(cd_dep_count#21), partial_sum(cd_dep_count#21), partial_avg(cd_dep_employed_count#22), partial_max(cd_dep_employed_count#22), partial_sum(cd_dep_employed_count#22), partial_avg(cd_dep_college_count#23), partial_max(cd_dep_college_count#23), partial_sum(cd_dep_college_count#23)] +Aggregate Attributes [13]: [count#24, sum#25, count#26, max#27, sum#28, sum#29, count#30, max#31, sum#32, sum#33, count#34, max#35, sum#36] +Results [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, sum#38, count#39, max#40, sum#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49] (38) Exchange -Input [19]: [ca_state#19, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26, count#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49, sum#50, count#51, max#52, sum#53] -Arguments: hashpartitioning(ca_state#19, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26, 5), ENSURE_REQUIREMENTS, [id=#54] +Input [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, sum#38, count#39, max#40, sum#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49] +Arguments: hashpartitioning(ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, 5), ENSURE_REQUIREMENTS, [plan_id=5] (39) HashAggregate [codegen id : 10] -Input [19]: [ca_state#19, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26, count#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49, sum#50, count#51, max#52, sum#53] -Keys [6]: [ca_state#19, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cd_dep_employed_count#25, cd_dep_college_count#26] -Functions [10]: [count(1), avg(cd_dep_count#24), max(cd_dep_count#24), sum(cd_dep_count#24), avg(cd_dep_employed_count#25), max(cd_dep_employed_count#25), sum(cd_dep_employed_count#25), avg(cd_dep_college_count#26), max(cd_dep_college_count#26), sum(cd_dep_college_count#26)] -Aggregate Attributes [10]: [count(1)#55, avg(cd_dep_count#24)#56, max(cd_dep_count#24)#57, sum(cd_dep_count#24)#58, avg(cd_dep_employed_count#25)#59, max(cd_dep_employed_count#25)#60, sum(cd_dep_employed_count#25)#61, avg(cd_dep_college_count#26)#62, max(cd_dep_college_count#26)#63, sum(cd_dep_college_count#26)#64] -Results [18]: [ca_state#19, cd_gender#22, cd_marital_status#23, cd_dep_count#24, count(1)#55 AS cnt1#65, avg(cd_dep_count#24)#56 AS avg(cd_dep_count)#66, max(cd_dep_count#24)#57 AS max(cd_dep_count)#67, sum(cd_dep_count#24)#58 AS sum(cd_dep_count)#68, cd_dep_employed_count#25, count(1)#55 AS cnt2#69, avg(cd_dep_employed_count#25)#59 AS avg(cd_dep_employed_count)#70, max(cd_dep_employed_count#25)#60 AS max(cd_dep_employed_count)#71, sum(cd_dep_employed_count#25)#61 AS sum(cd_dep_employed_count)#72, cd_dep_college_count#26, count(1)#55 AS cnt3#73, avg(cd_dep_college_count#26)#62 AS avg(cd_dep_college_count)#74, max(cd_dep_college_count#26)#63 AS max(cd_dep_college_count)#75, sum(cd_dep_college_count#26)#64 AS sum(cd_dep_college_count)#76] +Input [19]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23, count#37, sum#38, count#39, max#40, sum#41, sum#42, count#43, max#44, sum#45, sum#46, count#47, max#48, sum#49] +Keys [6]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cd_dep_employed_count#22, cd_dep_college_count#23] +Functions [10]: [count(1), avg(cd_dep_count#21), max(cd_dep_count#21), sum(cd_dep_count#21), avg(cd_dep_employed_count#22), max(cd_dep_employed_count#22), sum(cd_dep_employed_count#22), avg(cd_dep_college_count#23), max(cd_dep_college_count#23), sum(cd_dep_college_count#23)] +Aggregate Attributes [10]: [count(1)#50, avg(cd_dep_count#21)#51, max(cd_dep_count#21)#52, sum(cd_dep_count#21)#53, avg(cd_dep_employed_count#22)#54, max(cd_dep_employed_count#22)#55, sum(cd_dep_employed_count#22)#56, avg(cd_dep_college_count#23)#57, max(cd_dep_college_count#23)#58, sum(cd_dep_college_count#23)#59] +Results [18]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, count(1)#50 AS cnt1#60, avg(cd_dep_count#21)#51 AS avg(cd_dep_count)#61, max(cd_dep_count#21)#52 AS max(cd_dep_count)#62, sum(cd_dep_count#21)#53 AS sum(cd_dep_count)#63, cd_dep_employed_count#22, count(1)#50 AS cnt2#64, avg(cd_dep_employed_count#22)#54 AS avg(cd_dep_employed_count)#65, max(cd_dep_employed_count#22)#55 AS max(cd_dep_employed_count)#66, sum(cd_dep_employed_count#22)#56 AS sum(cd_dep_employed_count)#67, cd_dep_college_count#23, count(1)#50 AS cnt3#68, avg(cd_dep_college_count#23)#57 AS avg(cd_dep_college_count)#69, max(cd_dep_college_count#23)#58 AS max(cd_dep_college_count)#70, sum(cd_dep_college_count#23)#59 AS sum(cd_dep_college_count)#71] (40) TakeOrderedAndProject -Input [18]: [ca_state#19, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cnt1#65, avg(cd_dep_count)#66, max(cd_dep_count)#67, sum(cd_dep_count)#68, cd_dep_employed_count#25, cnt2#69, avg(cd_dep_employed_count)#70, max(cd_dep_employed_count)#71, sum(cd_dep_employed_count)#72, cd_dep_college_count#26, cnt3#73, avg(cd_dep_college_count)#74, max(cd_dep_college_count)#75, sum(cd_dep_college_count)#76] -Arguments: 100, [ca_state#19 ASC NULLS FIRST, cd_gender#22 ASC NULLS FIRST, cd_marital_status#23 ASC NULLS FIRST, cd_dep_count#24 ASC NULLS FIRST, cd_dep_employed_count#25 ASC NULLS FIRST, cd_dep_college_count#26 ASC NULLS FIRST], [ca_state#19, cd_gender#22, cd_marital_status#23, cd_dep_count#24, cnt1#65, avg(cd_dep_count)#66, max(cd_dep_count)#67, sum(cd_dep_count)#68, cd_dep_employed_count#25, cnt2#69, avg(cd_dep_employed_count)#70, max(cd_dep_employed_count)#71, sum(cd_dep_employed_count)#72, cd_dep_college_count#26, cnt3#73, avg(cd_dep_college_count)#74, max(cd_dep_college_count)#75, sum(cd_dep_college_count)#76] +Input [18]: [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cnt1#60, avg(cd_dep_count)#61, max(cd_dep_count)#62, sum(cd_dep_count)#63, cd_dep_employed_count#22, cnt2#64, avg(cd_dep_employed_count)#65, max(cd_dep_employed_count)#66, sum(cd_dep_employed_count)#67, cd_dep_college_count#23, cnt3#68, avg(cd_dep_college_count)#69, max(cd_dep_college_count)#70, sum(cd_dep_college_count)#71] +Arguments: 100, [ca_state#17 ASC NULLS FIRST, cd_gender#19 ASC NULLS FIRST, cd_marital_status#20 ASC NULLS FIRST, cd_dep_count#21 ASC NULLS FIRST, cd_dep_employed_count#22 ASC NULLS FIRST, cd_dep_college_count#23 ASC NULLS FIRST], [ca_state#17, cd_gender#19, cd_marital_status#20, cd_dep_count#21, cnt1#60, avg(cd_dep_count)#61, max(cd_dep_count)#62, sum(cd_dep_count)#63, cd_dep_employed_count#22, cnt2#64, avg(cd_dep_employed_count)#65, max(cd_dep_employed_count)#66, sum(cd_dep_employed_count)#67, cd_dep_college_count#23, cnt3#68, avg(cd_dep_college_count)#69, max(cd_dep_college_count)#70, sum(cd_dep_college_count)#71] ===== Subqueries ===== @@ -232,29 +232,29 @@ BroadcastExchange (45) (41) Scan parquet default.date_dim -Output [3]: [d_date_sk#7, d_year#77, d_qoy#78] +Output [3]: [d_date_sk#7, d_year#72, d_qoy#73] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_qoy), EqualTo(d_year,1999), LessThan(d_qoy,4), IsNotNull(d_date_sk)] ReadSchema: struct (42) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#77, d_qoy#78] +Input [3]: [d_date_sk#7, d_year#72, d_qoy#73] (43) Filter [codegen id : 1] -Input [3]: [d_date_sk#7, d_year#77, d_qoy#78] -Condition : ((((isnotnull(d_year#77) AND isnotnull(d_qoy#78)) AND (d_year#77 = 1999)) AND (d_qoy#78 < 4)) AND isnotnull(d_date_sk#7)) +Input [3]: [d_date_sk#7, d_year#72, d_qoy#73] +Condition : ((((isnotnull(d_year#72) AND isnotnull(d_qoy#73)) AND (d_year#72 = 1999)) AND (d_qoy#73 < 4)) AND isnotnull(d_date_sk#7)) (44) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [3]: [d_date_sk#7, d_year#77, d_qoy#78] +Input [3]: [d_date_sk#7, d_year#72, d_qoy#73] (45) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#79] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] -Subquery:2 Hosting operator id = 11 Hosting Expression = ws_sold_date_sk#10 IN dynamicpruning#6 +Subquery:2 Hosting operator id = 11 Hosting Expression = ws_sold_date_sk#9 IN dynamicpruning#6 -Subquery:3 Hosting operator id = 16 Hosting Expression = cs_sold_date_sk#14 IN dynamicpruning#6 +Subquery:3 Hosting operator id = 16 Hosting Expression = cs_sold_date_sk#13 IN dynamicpruning#6 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q36a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q36a.sf100/explain.txt index 9224fbda95e47..15815ca9b9453 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q36a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q36a.sf100/explain.txt @@ -89,7 +89,7 @@ Input [2]: [s_store_sk#8, s_state#9] (11) BroadcastExchange Input [1]: [s_store_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#2] @@ -101,145 +101,145 @@ Output [3]: [ss_item_sk#1, ss_ext_sales_price#3, ss_net_profit#4] Input [5]: [ss_item_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4, s_store_sk#8] (14) Scan parquet default.item -Output [3]: [i_item_sk#11, i_class#12, i_category#13] +Output [3]: [i_item_sk#10, i_class#11, i_category#12] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 3] -Input [3]: [i_item_sk#11, i_class#12, i_category#13] +Input [3]: [i_item_sk#10, i_class#11, i_category#12] (16) Filter [codegen id : 3] -Input [3]: [i_item_sk#11, i_class#12, i_category#13] -Condition : isnotnull(i_item_sk#11) +Input [3]: [i_item_sk#10, i_class#11, i_category#12] +Condition : isnotnull(i_item_sk#10) (17) BroadcastExchange -Input [3]: [i_item_sk#11, i_class#12, i_category#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Input [3]: [i_item_sk#10, i_class#11, i_category#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#11] +Right keys [1]: [i_item_sk#10] Join condition: None (19) Project [codegen id : 4] -Output [4]: [ss_ext_sales_price#3, ss_net_profit#4, i_class#12, i_category#13] -Input [6]: [ss_item_sk#1, ss_ext_sales_price#3, ss_net_profit#4, i_item_sk#11, i_class#12, i_category#13] +Output [4]: [ss_ext_sales_price#3, ss_net_profit#4, i_class#11, i_category#12] +Input [6]: [ss_item_sk#1, ss_ext_sales_price#3, ss_net_profit#4, i_item_sk#10, i_class#11, i_category#12] (20) HashAggregate [codegen id : 4] -Input [4]: [ss_ext_sales_price#3, ss_net_profit#4, i_class#12, i_category#13] -Keys [2]: [i_category#13, i_class#12] +Input [4]: [ss_ext_sales_price#3, ss_net_profit#4, i_class#11, i_category#12] +Keys [2]: [i_category#12, i_class#11] Functions [2]: [partial_sum(UnscaledValue(ss_net_profit#4)), partial_sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [2]: [sum#15, sum#16] -Results [4]: [i_category#13, i_class#12, sum#17, sum#18] +Aggregate Attributes [2]: [sum#13, sum#14] +Results [4]: [i_category#12, i_class#11, sum#15, sum#16] (21) Exchange -Input [4]: [i_category#13, i_class#12, sum#17, sum#18] -Arguments: hashpartitioning(i_category#13, i_class#12, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [4]: [i_category#12, i_class#11, sum#15, sum#16] +Arguments: hashpartitioning(i_category#12, i_class#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 5] -Input [4]: [i_category#13, i_class#12, sum#17, sum#18] -Keys [2]: [i_category#13, i_class#12] +Input [4]: [i_category#12, i_class#11, sum#15, sum#16] +Keys [2]: [i_category#12, i_class#11] Functions [2]: [sum(UnscaledValue(ss_net_profit#4)), sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#20, sum(UnscaledValue(ss_ext_sales_price#3))#21] -Results [6]: [cast(CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#20,17,2)) / promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#21,17,2))), DecimalType(37,20)) as decimal(38,20)) AS gross_margin#22, i_category#13, i_class#12, 0 AS t_category#23, 0 AS t_class#24, 0 AS lochierarchy#25] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#17, sum(UnscaledValue(ss_ext_sales_price#3))#18] +Results [6]: [cast(CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#17,17,2)) / promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#18,17,2))), DecimalType(37,20)) as decimal(38,20)) AS gross_margin#19, i_category#12, i_class#11, 0 AS t_category#20, 0 AS t_class#21, 0 AS lochierarchy#22] (23) ReusedExchange [Reuses operator id: 21] -Output [4]: [i_category#13, i_class#12, sum#26, sum#27] +Output [4]: [i_category#12, i_class#11, sum#23, sum#24] (24) HashAggregate [codegen id : 10] -Input [4]: [i_category#13, i_class#12, sum#26, sum#27] -Keys [2]: [i_category#13, i_class#12] +Input [4]: [i_category#12, i_class#11, sum#23, sum#24] +Keys [2]: [i_category#12, i_class#11] Functions [2]: [sum(UnscaledValue(ss_net_profit#4)), sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#28, sum(UnscaledValue(ss_ext_sales_price#3))#29] -Results [3]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#28,17,2) AS ss_net_profit#30, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#29,17,2) AS ss_ext_sales_price#31, i_category#13] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#25, sum(UnscaledValue(ss_ext_sales_price#3))#26] +Results [3]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#25,17,2) AS ss_net_profit#27, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#26,17,2) AS ss_ext_sales_price#28, i_category#12] (25) HashAggregate [codegen id : 10] -Input [3]: [ss_net_profit#30, ss_ext_sales_price#31, i_category#13] -Keys [1]: [i_category#13] -Functions [2]: [partial_sum(ss_net_profit#30), partial_sum(ss_ext_sales_price#31)] -Aggregate Attributes [4]: [sum#32, isEmpty#33, sum#34, isEmpty#35] -Results [5]: [i_category#13, sum#36, isEmpty#37, sum#38, isEmpty#39] +Input [3]: [ss_net_profit#27, ss_ext_sales_price#28, i_category#12] +Keys [1]: [i_category#12] +Functions [2]: [partial_sum(ss_net_profit#27), partial_sum(ss_ext_sales_price#28)] +Aggregate Attributes [4]: [sum#29, isEmpty#30, sum#31, isEmpty#32] +Results [5]: [i_category#12, sum#33, isEmpty#34, sum#35, isEmpty#36] (26) Exchange -Input [5]: [i_category#13, sum#36, isEmpty#37, sum#38, isEmpty#39] -Arguments: hashpartitioning(i_category#13, 5), ENSURE_REQUIREMENTS, [id=#40] +Input [5]: [i_category#12, sum#33, isEmpty#34, sum#35, isEmpty#36] +Arguments: hashpartitioning(i_category#12, 5), ENSURE_REQUIREMENTS, [plan_id=4] (27) HashAggregate [codegen id : 11] -Input [5]: [i_category#13, sum#36, isEmpty#37, sum#38, isEmpty#39] -Keys [1]: [i_category#13] -Functions [2]: [sum(ss_net_profit#30), sum(ss_ext_sales_price#31)] -Aggregate Attributes [2]: [sum(ss_net_profit#30)#41, sum(ss_ext_sales_price#31)#42] -Results [6]: [cast(CheckOverflow((promote_precision(sum(ss_net_profit#30)#41) / promote_precision(sum(ss_ext_sales_price#31)#42)), DecimalType(38,11)) as decimal(38,20)) AS gross_margin#43, i_category#13, null AS i_class#44, 0 AS t_category#45, 1 AS t_class#46, 1 AS lochierarchy#47] +Input [5]: [i_category#12, sum#33, isEmpty#34, sum#35, isEmpty#36] +Keys [1]: [i_category#12] +Functions [2]: [sum(ss_net_profit#27), sum(ss_ext_sales_price#28)] +Aggregate Attributes [2]: [sum(ss_net_profit#27)#37, sum(ss_ext_sales_price#28)#38] +Results [6]: [cast(CheckOverflow((promote_precision(sum(ss_net_profit#27)#37) / promote_precision(sum(ss_ext_sales_price#28)#38)), DecimalType(38,11)) as decimal(38,20)) AS gross_margin#39, i_category#12, null AS i_class#40, 0 AS t_category#41, 1 AS t_class#42, 1 AS lochierarchy#43] (28) ReusedExchange [Reuses operator id: 21] -Output [4]: [i_category#13, i_class#12, sum#48, sum#49] +Output [4]: [i_category#12, i_class#11, sum#44, sum#45] (29) HashAggregate [codegen id : 16] -Input [4]: [i_category#13, i_class#12, sum#48, sum#49] -Keys [2]: [i_category#13, i_class#12] +Input [4]: [i_category#12, i_class#11, sum#44, sum#45] +Keys [2]: [i_category#12, i_class#11] Functions [2]: [sum(UnscaledValue(ss_net_profit#4)), sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#28, sum(UnscaledValue(ss_ext_sales_price#3))#29] -Results [2]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#28,17,2) AS ss_net_profit#30, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#29,17,2) AS ss_ext_sales_price#31] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#25, sum(UnscaledValue(ss_ext_sales_price#3))#26] +Results [2]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#25,17,2) AS ss_net_profit#27, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#26,17,2) AS ss_ext_sales_price#28] (30) HashAggregate [codegen id : 16] -Input [2]: [ss_net_profit#30, ss_ext_sales_price#31] +Input [2]: [ss_net_profit#27, ss_ext_sales_price#28] Keys: [] -Functions [2]: [partial_sum(ss_net_profit#30), partial_sum(ss_ext_sales_price#31)] -Aggregate Attributes [4]: [sum#50, isEmpty#51, sum#52, isEmpty#53] -Results [4]: [sum#54, isEmpty#55, sum#56, isEmpty#57] +Functions [2]: [partial_sum(ss_net_profit#27), partial_sum(ss_ext_sales_price#28)] +Aggregate Attributes [4]: [sum#46, isEmpty#47, sum#48, isEmpty#49] +Results [4]: [sum#50, isEmpty#51, sum#52, isEmpty#53] (31) Exchange -Input [4]: [sum#54, isEmpty#55, sum#56, isEmpty#57] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#58] +Input [4]: [sum#50, isEmpty#51, sum#52, isEmpty#53] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5] (32) HashAggregate [codegen id : 17] -Input [4]: [sum#54, isEmpty#55, sum#56, isEmpty#57] +Input [4]: [sum#50, isEmpty#51, sum#52, isEmpty#53] Keys: [] -Functions [2]: [sum(ss_net_profit#30), sum(ss_ext_sales_price#31)] -Aggregate Attributes [2]: [sum(ss_net_profit#30)#59, sum(ss_ext_sales_price#31)#60] -Results [6]: [cast(CheckOverflow((promote_precision(sum(ss_net_profit#30)#59) / promote_precision(sum(ss_ext_sales_price#31)#60)), DecimalType(38,11)) as decimal(38,20)) AS gross_margin#61, null AS i_category#62, null AS i_class#63, 1 AS t_category#64, 1 AS t_class#65, 2 AS lochierarchy#66] +Functions [2]: [sum(ss_net_profit#27), sum(ss_ext_sales_price#28)] +Aggregate Attributes [2]: [sum(ss_net_profit#27)#54, sum(ss_ext_sales_price#28)#55] +Results [6]: [cast(CheckOverflow((promote_precision(sum(ss_net_profit#27)#54) / promote_precision(sum(ss_ext_sales_price#28)#55)), DecimalType(38,11)) as decimal(38,20)) AS gross_margin#56, null AS i_category#57, null AS i_class#58, 1 AS t_category#59, 1 AS t_class#60, 2 AS lochierarchy#61] (33) Union (34) HashAggregate [codegen id : 18] -Input [6]: [gross_margin#22, i_category#13, i_class#12, t_category#23, t_class#24, lochierarchy#25] -Keys [6]: [gross_margin#22, i_category#13, i_class#12, t_category#23, t_class#24, lochierarchy#25] +Input [6]: [gross_margin#19, i_category#12, i_class#11, t_category#20, t_class#21, lochierarchy#22] +Keys [6]: [gross_margin#19, i_category#12, i_class#11, t_category#20, t_class#21, lochierarchy#22] Functions: [] Aggregate Attributes: [] -Results [6]: [gross_margin#22, i_category#13, i_class#12, t_category#23, t_class#24, lochierarchy#25] +Results [6]: [gross_margin#19, i_category#12, i_class#11, t_category#20, t_class#21, lochierarchy#22] (35) Exchange -Input [6]: [gross_margin#22, i_category#13, i_class#12, t_category#23, t_class#24, lochierarchy#25] -Arguments: hashpartitioning(gross_margin#22, i_category#13, i_class#12, t_category#23, t_class#24, lochierarchy#25, 5), ENSURE_REQUIREMENTS, [id=#67] +Input [6]: [gross_margin#19, i_category#12, i_class#11, t_category#20, t_class#21, lochierarchy#22] +Arguments: hashpartitioning(gross_margin#19, i_category#12, i_class#11, t_category#20, t_class#21, lochierarchy#22, 5), ENSURE_REQUIREMENTS, [plan_id=6] (36) HashAggregate [codegen id : 19] -Input [6]: [gross_margin#22, i_category#13, i_class#12, t_category#23, t_class#24, lochierarchy#25] -Keys [6]: [gross_margin#22, i_category#13, i_class#12, t_category#23, t_class#24, lochierarchy#25] +Input [6]: [gross_margin#19, i_category#12, i_class#11, t_category#20, t_class#21, lochierarchy#22] +Keys [6]: [gross_margin#19, i_category#12, i_class#11, t_category#20, t_class#21, lochierarchy#22] Functions: [] Aggregate Attributes: [] -Results [5]: [gross_margin#22, i_category#13, i_class#12, lochierarchy#25, CASE WHEN (t_class#24 = 0) THEN i_category#13 END AS _w0#68] +Results [5]: [gross_margin#19, i_category#12, i_class#11, lochierarchy#22, CASE WHEN (t_class#21 = 0) THEN i_category#12 END AS _w0#62] (37) Exchange -Input [5]: [gross_margin#22, i_category#13, i_class#12, lochierarchy#25, _w0#68] -Arguments: hashpartitioning(lochierarchy#25, _w0#68, 5), ENSURE_REQUIREMENTS, [id=#69] +Input [5]: [gross_margin#19, i_category#12, i_class#11, lochierarchy#22, _w0#62] +Arguments: hashpartitioning(lochierarchy#22, _w0#62, 5), ENSURE_REQUIREMENTS, [plan_id=7] (38) Sort [codegen id : 20] -Input [5]: [gross_margin#22, i_category#13, i_class#12, lochierarchy#25, _w0#68] -Arguments: [lochierarchy#25 ASC NULLS FIRST, _w0#68 ASC NULLS FIRST, gross_margin#22 ASC NULLS FIRST], false, 0 +Input [5]: [gross_margin#19, i_category#12, i_class#11, lochierarchy#22, _w0#62] +Arguments: [lochierarchy#22 ASC NULLS FIRST, _w0#62 ASC NULLS FIRST, gross_margin#19 ASC NULLS FIRST], false, 0 (39) Window -Input [5]: [gross_margin#22, i_category#13, i_class#12, lochierarchy#25, _w0#68] -Arguments: [rank(gross_margin#22) windowspecdefinition(lochierarchy#25, _w0#68, gross_margin#22 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#70], [lochierarchy#25, _w0#68], [gross_margin#22 ASC NULLS FIRST] +Input [5]: [gross_margin#19, i_category#12, i_class#11, lochierarchy#22, _w0#62] +Arguments: [rank(gross_margin#19) windowspecdefinition(lochierarchy#22, _w0#62, gross_margin#19 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#63], [lochierarchy#22, _w0#62], [gross_margin#19 ASC NULLS FIRST] (40) Project [codegen id : 21] -Output [5]: [gross_margin#22, i_category#13, i_class#12, lochierarchy#25, rank_within_parent#70] -Input [6]: [gross_margin#22, i_category#13, i_class#12, lochierarchy#25, _w0#68, rank_within_parent#70] +Output [5]: [gross_margin#19, i_category#12, i_class#11, lochierarchy#22, rank_within_parent#63] +Input [6]: [gross_margin#19, i_category#12, i_class#11, lochierarchy#22, _w0#62, rank_within_parent#63] (41) TakeOrderedAndProject -Input [5]: [gross_margin#22, i_category#13, i_class#12, lochierarchy#25, rank_within_parent#70] -Arguments: 100, [lochierarchy#25 DESC NULLS LAST, CASE WHEN (lochierarchy#25 = 0) THEN i_category#13 END ASC NULLS FIRST, rank_within_parent#70 ASC NULLS FIRST], [gross_margin#22, i_category#13, i_class#12, lochierarchy#25, rank_within_parent#70] +Input [5]: [gross_margin#19, i_category#12, i_class#11, lochierarchy#22, rank_within_parent#63] +Arguments: 100, [lochierarchy#22 DESC NULLS LAST, CASE WHEN (lochierarchy#22 = 0) THEN i_category#12 END ASC NULLS FIRST, rank_within_parent#63 ASC NULLS FIRST], [gross_margin#19, i_category#12, i_class#11, lochierarchy#22, rank_within_parent#63] ===== Subqueries ===== @@ -252,25 +252,25 @@ BroadcastExchange (46) (42) Scan parquet default.date_dim -Output [2]: [d_date_sk#7, d_year#71] +Output [2]: [d_date_sk#7, d_year#64] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (43) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#7, d_year#71] +Input [2]: [d_date_sk#7, d_year#64] (44) Filter [codegen id : 1] -Input [2]: [d_date_sk#7, d_year#71] -Condition : ((isnotnull(d_year#71) AND (d_year#71 = 2001)) AND isnotnull(d_date_sk#7)) +Input [2]: [d_date_sk#7, d_year#64] +Condition : ((isnotnull(d_year#64) AND (d_year#64 = 2001)) AND isnotnull(d_date_sk#7)) (45) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [2]: [d_date_sk#7, d_year#71] +Input [2]: [d_date_sk#7, d_year#64] (46) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#72] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q36a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q36a/explain.txt index f036e3e8fef42..65df229e9c1e9 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q36a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q36a/explain.txt @@ -85,7 +85,7 @@ Condition : isnotnull(i_item_sk#8) (10) BroadcastExchange Input [3]: [i_item_sk#8, i_class#9, i_category#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_item_sk#1] @@ -97,149 +97,149 @@ Output [5]: [ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4, i_class#9, i_ Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4, i_item_sk#8, i_class#9, i_category#10] (13) Scan parquet default.store -Output [2]: [s_store_sk#12, s_state#13] +Output [2]: [s_store_sk#11, s_state#12] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_state), EqualTo(s_state,TN), IsNotNull(s_store_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [2]: [s_store_sk#12, s_state#13] +Input [2]: [s_store_sk#11, s_state#12] (15) Filter [codegen id : 3] -Input [2]: [s_store_sk#12, s_state#13] -Condition : ((isnotnull(s_state#13) AND (s_state#13 = TN)) AND isnotnull(s_store_sk#12)) +Input [2]: [s_store_sk#11, s_state#12] +Condition : ((isnotnull(s_state#12) AND (s_state#12 = TN)) AND isnotnull(s_store_sk#11)) (16) Project [codegen id : 3] -Output [1]: [s_store_sk#12] -Input [2]: [s_store_sk#12, s_state#13] +Output [1]: [s_store_sk#11] +Input [2]: [s_store_sk#11, s_state#12] (17) BroadcastExchange -Input [1]: [s_store_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14] +Input [1]: [s_store_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#2] -Right keys [1]: [s_store_sk#12] +Right keys [1]: [s_store_sk#11] Join condition: None (19) Project [codegen id : 4] Output [4]: [ss_ext_sales_price#3, ss_net_profit#4, i_class#9, i_category#10] -Input [6]: [ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4, i_class#9, i_category#10, s_store_sk#12] +Input [6]: [ss_store_sk#2, ss_ext_sales_price#3, ss_net_profit#4, i_class#9, i_category#10, s_store_sk#11] (20) HashAggregate [codegen id : 4] Input [4]: [ss_ext_sales_price#3, ss_net_profit#4, i_class#9, i_category#10] Keys [2]: [i_category#10, i_class#9] Functions [2]: [partial_sum(UnscaledValue(ss_net_profit#4)), partial_sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [2]: [sum#15, sum#16] -Results [4]: [i_category#10, i_class#9, sum#17, sum#18] +Aggregate Attributes [2]: [sum#13, sum#14] +Results [4]: [i_category#10, i_class#9, sum#15, sum#16] (21) Exchange -Input [4]: [i_category#10, i_class#9, sum#17, sum#18] -Arguments: hashpartitioning(i_category#10, i_class#9, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [4]: [i_category#10, i_class#9, sum#15, sum#16] +Arguments: hashpartitioning(i_category#10, i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (22) HashAggregate [codegen id : 5] -Input [4]: [i_category#10, i_class#9, sum#17, sum#18] +Input [4]: [i_category#10, i_class#9, sum#15, sum#16] Keys [2]: [i_category#10, i_class#9] Functions [2]: [sum(UnscaledValue(ss_net_profit#4)), sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#20, sum(UnscaledValue(ss_ext_sales_price#3))#21] -Results [6]: [cast(CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#20,17,2)) / promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#21,17,2))), DecimalType(37,20)) as decimal(38,20)) AS gross_margin#22, i_category#10, i_class#9, 0 AS t_category#23, 0 AS t_class#24, 0 AS lochierarchy#25] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#17, sum(UnscaledValue(ss_ext_sales_price#3))#18] +Results [6]: [cast(CheckOverflow((promote_precision(MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#17,17,2)) / promote_precision(MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#18,17,2))), DecimalType(37,20)) as decimal(38,20)) AS gross_margin#19, i_category#10, i_class#9, 0 AS t_category#20, 0 AS t_class#21, 0 AS lochierarchy#22] (23) ReusedExchange [Reuses operator id: 21] -Output [4]: [i_category#10, i_class#9, sum#26, sum#27] +Output [4]: [i_category#10, i_class#9, sum#23, sum#24] (24) HashAggregate [codegen id : 10] -Input [4]: [i_category#10, i_class#9, sum#26, sum#27] +Input [4]: [i_category#10, i_class#9, sum#23, sum#24] Keys [2]: [i_category#10, i_class#9] Functions [2]: [sum(UnscaledValue(ss_net_profit#4)), sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#28, sum(UnscaledValue(ss_ext_sales_price#3))#29] -Results [3]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#28,17,2) AS ss_net_profit#30, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#29,17,2) AS ss_ext_sales_price#31, i_category#10] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#25, sum(UnscaledValue(ss_ext_sales_price#3))#26] +Results [3]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#25,17,2) AS ss_net_profit#27, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#26,17,2) AS ss_ext_sales_price#28, i_category#10] (25) HashAggregate [codegen id : 10] -Input [3]: [ss_net_profit#30, ss_ext_sales_price#31, i_category#10] +Input [3]: [ss_net_profit#27, ss_ext_sales_price#28, i_category#10] Keys [1]: [i_category#10] -Functions [2]: [partial_sum(ss_net_profit#30), partial_sum(ss_ext_sales_price#31)] -Aggregate Attributes [4]: [sum#32, isEmpty#33, sum#34, isEmpty#35] -Results [5]: [i_category#10, sum#36, isEmpty#37, sum#38, isEmpty#39] +Functions [2]: [partial_sum(ss_net_profit#27), partial_sum(ss_ext_sales_price#28)] +Aggregate Attributes [4]: [sum#29, isEmpty#30, sum#31, isEmpty#32] +Results [5]: [i_category#10, sum#33, isEmpty#34, sum#35, isEmpty#36] (26) Exchange -Input [5]: [i_category#10, sum#36, isEmpty#37, sum#38, isEmpty#39] -Arguments: hashpartitioning(i_category#10, 5), ENSURE_REQUIREMENTS, [id=#40] +Input [5]: [i_category#10, sum#33, isEmpty#34, sum#35, isEmpty#36] +Arguments: hashpartitioning(i_category#10, 5), ENSURE_REQUIREMENTS, [plan_id=4] (27) HashAggregate [codegen id : 11] -Input [5]: [i_category#10, sum#36, isEmpty#37, sum#38, isEmpty#39] +Input [5]: [i_category#10, sum#33, isEmpty#34, sum#35, isEmpty#36] Keys [1]: [i_category#10] -Functions [2]: [sum(ss_net_profit#30), sum(ss_ext_sales_price#31)] -Aggregate Attributes [2]: [sum(ss_net_profit#30)#41, sum(ss_ext_sales_price#31)#42] -Results [6]: [cast(CheckOverflow((promote_precision(sum(ss_net_profit#30)#41) / promote_precision(sum(ss_ext_sales_price#31)#42)), DecimalType(38,11)) as decimal(38,20)) AS gross_margin#43, i_category#10, null AS i_class#44, 0 AS t_category#45, 1 AS t_class#46, 1 AS lochierarchy#47] +Functions [2]: [sum(ss_net_profit#27), sum(ss_ext_sales_price#28)] +Aggregate Attributes [2]: [sum(ss_net_profit#27)#37, sum(ss_ext_sales_price#28)#38] +Results [6]: [cast(CheckOverflow((promote_precision(sum(ss_net_profit#27)#37) / promote_precision(sum(ss_ext_sales_price#28)#38)), DecimalType(38,11)) as decimal(38,20)) AS gross_margin#39, i_category#10, null AS i_class#40, 0 AS t_category#41, 1 AS t_class#42, 1 AS lochierarchy#43] (28) ReusedExchange [Reuses operator id: 21] -Output [4]: [i_category#10, i_class#9, sum#48, sum#49] +Output [4]: [i_category#10, i_class#9, sum#44, sum#45] (29) HashAggregate [codegen id : 16] -Input [4]: [i_category#10, i_class#9, sum#48, sum#49] +Input [4]: [i_category#10, i_class#9, sum#44, sum#45] Keys [2]: [i_category#10, i_class#9] Functions [2]: [sum(UnscaledValue(ss_net_profit#4)), sum(UnscaledValue(ss_ext_sales_price#3))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#28, sum(UnscaledValue(ss_ext_sales_price#3))#29] -Results [2]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#28,17,2) AS ss_net_profit#30, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#29,17,2) AS ss_ext_sales_price#31] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_net_profit#4))#25, sum(UnscaledValue(ss_ext_sales_price#3))#26] +Results [2]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#4))#25,17,2) AS ss_net_profit#27, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#26,17,2) AS ss_ext_sales_price#28] (30) HashAggregate [codegen id : 16] -Input [2]: [ss_net_profit#30, ss_ext_sales_price#31] +Input [2]: [ss_net_profit#27, ss_ext_sales_price#28] Keys: [] -Functions [2]: [partial_sum(ss_net_profit#30), partial_sum(ss_ext_sales_price#31)] -Aggregate Attributes [4]: [sum#50, isEmpty#51, sum#52, isEmpty#53] -Results [4]: [sum#54, isEmpty#55, sum#56, isEmpty#57] +Functions [2]: [partial_sum(ss_net_profit#27), partial_sum(ss_ext_sales_price#28)] +Aggregate Attributes [4]: [sum#46, isEmpty#47, sum#48, isEmpty#49] +Results [4]: [sum#50, isEmpty#51, sum#52, isEmpty#53] (31) Exchange -Input [4]: [sum#54, isEmpty#55, sum#56, isEmpty#57] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#58] +Input [4]: [sum#50, isEmpty#51, sum#52, isEmpty#53] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5] (32) HashAggregate [codegen id : 17] -Input [4]: [sum#54, isEmpty#55, sum#56, isEmpty#57] +Input [4]: [sum#50, isEmpty#51, sum#52, isEmpty#53] Keys: [] -Functions [2]: [sum(ss_net_profit#30), sum(ss_ext_sales_price#31)] -Aggregate Attributes [2]: [sum(ss_net_profit#30)#59, sum(ss_ext_sales_price#31)#60] -Results [6]: [cast(CheckOverflow((promote_precision(sum(ss_net_profit#30)#59) / promote_precision(sum(ss_ext_sales_price#31)#60)), DecimalType(38,11)) as decimal(38,20)) AS gross_margin#61, null AS i_category#62, null AS i_class#63, 1 AS t_category#64, 1 AS t_class#65, 2 AS lochierarchy#66] +Functions [2]: [sum(ss_net_profit#27), sum(ss_ext_sales_price#28)] +Aggregate Attributes [2]: [sum(ss_net_profit#27)#54, sum(ss_ext_sales_price#28)#55] +Results [6]: [cast(CheckOverflow((promote_precision(sum(ss_net_profit#27)#54) / promote_precision(sum(ss_ext_sales_price#28)#55)), DecimalType(38,11)) as decimal(38,20)) AS gross_margin#56, null AS i_category#57, null AS i_class#58, 1 AS t_category#59, 1 AS t_class#60, 2 AS lochierarchy#61] (33) Union (34) HashAggregate [codegen id : 18] -Input [6]: [gross_margin#22, i_category#10, i_class#9, t_category#23, t_class#24, lochierarchy#25] -Keys [6]: [gross_margin#22, i_category#10, i_class#9, t_category#23, t_class#24, lochierarchy#25] +Input [6]: [gross_margin#19, i_category#10, i_class#9, t_category#20, t_class#21, lochierarchy#22] +Keys [6]: [gross_margin#19, i_category#10, i_class#9, t_category#20, t_class#21, lochierarchy#22] Functions: [] Aggregate Attributes: [] -Results [6]: [gross_margin#22, i_category#10, i_class#9, t_category#23, t_class#24, lochierarchy#25] +Results [6]: [gross_margin#19, i_category#10, i_class#9, t_category#20, t_class#21, lochierarchy#22] (35) Exchange -Input [6]: [gross_margin#22, i_category#10, i_class#9, t_category#23, t_class#24, lochierarchy#25] -Arguments: hashpartitioning(gross_margin#22, i_category#10, i_class#9, t_category#23, t_class#24, lochierarchy#25, 5), ENSURE_REQUIREMENTS, [id=#67] +Input [6]: [gross_margin#19, i_category#10, i_class#9, t_category#20, t_class#21, lochierarchy#22] +Arguments: hashpartitioning(gross_margin#19, i_category#10, i_class#9, t_category#20, t_class#21, lochierarchy#22, 5), ENSURE_REQUIREMENTS, [plan_id=6] (36) HashAggregate [codegen id : 19] -Input [6]: [gross_margin#22, i_category#10, i_class#9, t_category#23, t_class#24, lochierarchy#25] -Keys [6]: [gross_margin#22, i_category#10, i_class#9, t_category#23, t_class#24, lochierarchy#25] +Input [6]: [gross_margin#19, i_category#10, i_class#9, t_category#20, t_class#21, lochierarchy#22] +Keys [6]: [gross_margin#19, i_category#10, i_class#9, t_category#20, t_class#21, lochierarchy#22] Functions: [] Aggregate Attributes: [] -Results [5]: [gross_margin#22, i_category#10, i_class#9, lochierarchy#25, CASE WHEN (t_class#24 = 0) THEN i_category#10 END AS _w0#68] +Results [5]: [gross_margin#19, i_category#10, i_class#9, lochierarchy#22, CASE WHEN (t_class#21 = 0) THEN i_category#10 END AS _w0#62] (37) Exchange -Input [5]: [gross_margin#22, i_category#10, i_class#9, lochierarchy#25, _w0#68] -Arguments: hashpartitioning(lochierarchy#25, _w0#68, 5), ENSURE_REQUIREMENTS, [id=#69] +Input [5]: [gross_margin#19, i_category#10, i_class#9, lochierarchy#22, _w0#62] +Arguments: hashpartitioning(lochierarchy#22, _w0#62, 5), ENSURE_REQUIREMENTS, [plan_id=7] (38) Sort [codegen id : 20] -Input [5]: [gross_margin#22, i_category#10, i_class#9, lochierarchy#25, _w0#68] -Arguments: [lochierarchy#25 ASC NULLS FIRST, _w0#68 ASC NULLS FIRST, gross_margin#22 ASC NULLS FIRST], false, 0 +Input [5]: [gross_margin#19, i_category#10, i_class#9, lochierarchy#22, _w0#62] +Arguments: [lochierarchy#22 ASC NULLS FIRST, _w0#62 ASC NULLS FIRST, gross_margin#19 ASC NULLS FIRST], false, 0 (39) Window -Input [5]: [gross_margin#22, i_category#10, i_class#9, lochierarchy#25, _w0#68] -Arguments: [rank(gross_margin#22) windowspecdefinition(lochierarchy#25, _w0#68, gross_margin#22 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#70], [lochierarchy#25, _w0#68], [gross_margin#22 ASC NULLS FIRST] +Input [5]: [gross_margin#19, i_category#10, i_class#9, lochierarchy#22, _w0#62] +Arguments: [rank(gross_margin#19) windowspecdefinition(lochierarchy#22, _w0#62, gross_margin#19 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#63], [lochierarchy#22, _w0#62], [gross_margin#19 ASC NULLS FIRST] (40) Project [codegen id : 21] -Output [5]: [gross_margin#22, i_category#10, i_class#9, lochierarchy#25, rank_within_parent#70] -Input [6]: [gross_margin#22, i_category#10, i_class#9, lochierarchy#25, _w0#68, rank_within_parent#70] +Output [5]: [gross_margin#19, i_category#10, i_class#9, lochierarchy#22, rank_within_parent#63] +Input [6]: [gross_margin#19, i_category#10, i_class#9, lochierarchy#22, _w0#62, rank_within_parent#63] (41) TakeOrderedAndProject -Input [5]: [gross_margin#22, i_category#10, i_class#9, lochierarchy#25, rank_within_parent#70] -Arguments: 100, [lochierarchy#25 DESC NULLS LAST, CASE WHEN (lochierarchy#25 = 0) THEN i_category#10 END ASC NULLS FIRST, rank_within_parent#70 ASC NULLS FIRST], [gross_margin#22, i_category#10, i_class#9, lochierarchy#25, rank_within_parent#70] +Input [5]: [gross_margin#19, i_category#10, i_class#9, lochierarchy#22, rank_within_parent#63] +Arguments: 100, [lochierarchy#22 DESC NULLS LAST, CASE WHEN (lochierarchy#22 = 0) THEN i_category#10 END ASC NULLS FIRST, rank_within_parent#63 ASC NULLS FIRST], [gross_margin#19, i_category#10, i_class#9, lochierarchy#22, rank_within_parent#63] ===== Subqueries ===== @@ -252,25 +252,25 @@ BroadcastExchange (46) (42) Scan parquet default.date_dim -Output [2]: [d_date_sk#7, d_year#71] +Output [2]: [d_date_sk#7, d_year#64] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (43) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#7, d_year#71] +Input [2]: [d_date_sk#7, d_year#64] (44) Filter [codegen id : 1] -Input [2]: [d_date_sk#7, d_year#71] -Condition : ((isnotnull(d_year#71) AND (d_year#71 = 2001)) AND isnotnull(d_date_sk#7)) +Input [2]: [d_date_sk#7, d_year#64] +Condition : ((isnotnull(d_year#64) AND (d_year#64 = 2001)) AND isnotnull(d_date_sk#7)) (45) Project [codegen id : 1] Output [1]: [d_date_sk#7] -Input [2]: [d_date_sk#7, d_year#71] +Input [2]: [d_date_sk#7, d_year#64] (46) BroadcastExchange Input [1]: [d_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#72] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q47.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q47.sf100/explain.txt index d2a5ecef9c900..6d94222679ec3 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q47.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q47.sf100/explain.txt @@ -96,7 +96,7 @@ Condition : ((isnotnull(s_store_sk#9) AND isnotnull(s_store_name#10)) AND isnotn (10) BroadcastExchange Input [3]: [s_store_sk#9, s_store_name#10, s_company_name#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_store_sk#2] @@ -109,175 +109,175 @@ Input [8]: [ss_item_sk#1, ss_store_sk#2, ss_sales_price#3, d_year#7, d_moy#8, s_ (13) Exchange Input [6]: [ss_item_sk#1, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#13] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) Sort [codegen id : 4] Input [6]: [ss_item_sk#1, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (15) Scan parquet default.item -Output [3]: [i_item_sk#14, i_brand#15, i_category#16] +Output [3]: [i_item_sk#12, i_brand#13, i_category#14] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_category), IsNotNull(i_brand)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [3]: [i_item_sk#14, i_brand#15, i_category#16] +Input [3]: [i_item_sk#12, i_brand#13, i_category#14] (17) Filter [codegen id : 5] -Input [3]: [i_item_sk#14, i_brand#15, i_category#16] -Condition : ((isnotnull(i_item_sk#14) AND isnotnull(i_category#16)) AND isnotnull(i_brand#15)) +Input [3]: [i_item_sk#12, i_brand#13, i_category#14] +Condition : ((isnotnull(i_item_sk#12) AND isnotnull(i_category#14)) AND isnotnull(i_brand#13)) (18) Exchange -Input [3]: [i_item_sk#14, i_brand#15, i_category#16] -Arguments: hashpartitioning(i_item_sk#14, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [3]: [i_item_sk#12, i_brand#13, i_category#14] +Arguments: hashpartitioning(i_item_sk#12, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 6] -Input [3]: [i_item_sk#14, i_brand#15, i_category#16] -Arguments: [i_item_sk#14 ASC NULLS FIRST], false, 0 +Input [3]: [i_item_sk#12, i_brand#13, i_category#14] +Arguments: [i_item_sk#12 ASC NULLS FIRST], false, 0 (20) SortMergeJoin [codegen id : 7] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#14] +Right keys [1]: [i_item_sk#12] Join condition: None (21) Project [codegen id : 7] -Output [7]: [i_brand#15, i_category#16, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11] -Input [9]: [ss_item_sk#1, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11, i_item_sk#14, i_brand#15, i_category#16] +Output [7]: [i_brand#13, i_category#14, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11] +Input [9]: [ss_item_sk#1, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11, i_item_sk#12, i_brand#13, i_category#14] (22) HashAggregate [codegen id : 7] -Input [7]: [i_brand#15, i_category#16, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11] -Keys [6]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8] +Input [7]: [i_brand#13, i_category#14, ss_sales_price#3, d_year#7, d_moy#8, s_store_name#10, s_company_name#11] +Keys [6]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8] Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#3))] -Aggregate Attributes [1]: [sum#18] -Results [7]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum#19] +Aggregate Attributes [1]: [sum#15] +Results [7]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum#16] (23) Exchange -Input [7]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum#19] -Arguments: hashpartitioning(i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [7]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum#16] +Arguments: hashpartitioning(i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) HashAggregate [codegen id : 8] -Input [7]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum#19] -Keys [6]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8] +Input [7]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum#16] +Keys [6]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8] Functions [1]: [sum(UnscaledValue(ss_sales_price#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#3))#21] -Results [8]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#21,17,2) AS sum_sales#22, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#21,17,2) AS _w0#23] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#3))#17] +Results [8]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#17,17,2) AS sum_sales#18, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#17,17,2) AS _w0#19] (25) Exchange -Input [8]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, _w0#23] -Arguments: hashpartitioning(i_category#16, i_brand#15, s_store_name#10, s_company_name#11, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [8]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, _w0#19] +Arguments: hashpartitioning(i_category#14, i_brand#13, s_store_name#10, s_company_name#11, 5), ENSURE_REQUIREMENTS, [plan_id=5] (26) Sort [codegen id : 9] -Input [8]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, _w0#23] -Arguments: [i_category#16 ASC NULLS FIRST, i_brand#15 ASC NULLS FIRST, s_store_name#10 ASC NULLS FIRST, s_company_name#11 ASC NULLS FIRST, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST], false, 0 +Input [8]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, _w0#19] +Arguments: [i_category#14 ASC NULLS FIRST, i_brand#13 ASC NULLS FIRST, s_store_name#10 ASC NULLS FIRST, s_company_name#11 ASC NULLS FIRST, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST], false, 0 (27) Window -Input [8]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, _w0#23] -Arguments: [rank(d_year#7, d_moy#8) windowspecdefinition(i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#25], [i_category#16, i_brand#15, s_store_name#10, s_company_name#11], [d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST] +Input [8]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, _w0#19] +Arguments: [rank(d_year#7, d_moy#8) windowspecdefinition(i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#20], [i_category#14, i_brand#13, s_store_name#10, s_company_name#11], [d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST] (28) Filter [codegen id : 10] -Input [9]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, _w0#23, rn#25] +Input [9]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, _w0#19, rn#20] Condition : (isnotnull(d_year#7) AND (d_year#7 = 1999)) (29) Window -Input [9]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, _w0#23, rn#25] -Arguments: [avg(_w0#23) windowspecdefinition(i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#26], [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7] +Input [9]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, _w0#19, rn#20] +Arguments: [avg(_w0#19) windowspecdefinition(i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#21], [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7] (30) Filter [codegen id : 11] -Input [10]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, _w0#23, rn#25, avg_monthly_sales#26] -Condition : ((isnotnull(avg_monthly_sales#26) AND (avg_monthly_sales#26 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) +Input [10]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, _w0#19, rn#20, avg_monthly_sales#21] +Condition : ((isnotnull(avg_monthly_sales#21) AND (avg_monthly_sales#21 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#21 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#21 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) (31) Project [codegen id : 11] -Output [9]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#26, rn#25] -Input [10]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, _w0#23, rn#25, avg_monthly_sales#26] +Output [9]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, avg_monthly_sales#21, rn#20] +Input [10]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, _w0#19, rn#20, avg_monthly_sales#21] (32) Exchange -Input [9]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#26, rn#25] -Arguments: hashpartitioning(i_category#16, i_brand#15, s_store_name#10, s_company_name#11, rn#25, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [9]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, avg_monthly_sales#21, rn#20] +Arguments: hashpartitioning(i_category#14, i_brand#13, s_store_name#10, s_company_name#11, rn#20, 5), ENSURE_REQUIREMENTS, [plan_id=6] (33) Sort [codegen id : 12] -Input [9]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#26, rn#25] -Arguments: [i_category#16 ASC NULLS FIRST, i_brand#15 ASC NULLS FIRST, s_store_name#10 ASC NULLS FIRST, s_company_name#11 ASC NULLS FIRST, rn#25 ASC NULLS FIRST], false, 0 +Input [9]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, avg_monthly_sales#21, rn#20] +Arguments: [i_category#14 ASC NULLS FIRST, i_brand#13 ASC NULLS FIRST, s_store_name#10 ASC NULLS FIRST, s_company_name#11 ASC NULLS FIRST, rn#20 ASC NULLS FIRST], false, 0 (34) ReusedExchange [Reuses operator id: 23] -Output [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum#34] +Output [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum#28] (35) HashAggregate [codegen id : 20] -Input [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum#34] -Keys [6]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33] -Functions [1]: [sum(UnscaledValue(ss_sales_price#35))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#35))#21] -Results [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, MakeDecimal(sum(UnscaledValue(ss_sales_price#35))#21,17,2) AS sum_sales#22] +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum#28] +Keys [6]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27] +Functions [1]: [sum(UnscaledValue(ss_sales_price#29))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#29))#17] +Results [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, MakeDecimal(sum(UnscaledValue(ss_sales_price#29))#17,17,2) AS sum_sales#18] (36) Exchange -Input [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum_sales#22] -Arguments: hashpartitioning(i_category#28, i_brand#29, s_store_name#30, s_company_name#31, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18] +Arguments: hashpartitioning(i_category#22, i_brand#23, s_store_name#24, s_company_name#25, 5), ENSURE_REQUIREMENTS, [plan_id=7] (37) Sort [codegen id : 21] -Input [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum_sales#22] -Arguments: [i_category#28 ASC NULLS FIRST, i_brand#29 ASC NULLS FIRST, s_store_name#30 ASC NULLS FIRST, s_company_name#31 ASC NULLS FIRST, d_year#32 ASC NULLS FIRST, d_moy#33 ASC NULLS FIRST], false, 0 +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18] +Arguments: [i_category#22 ASC NULLS FIRST, i_brand#23 ASC NULLS FIRST, s_store_name#24 ASC NULLS FIRST, s_company_name#25 ASC NULLS FIRST, d_year#26 ASC NULLS FIRST, d_moy#27 ASC NULLS FIRST], false, 0 (38) Window -Input [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum_sales#22] -Arguments: [rank(d_year#32, d_moy#33) windowspecdefinition(i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32 ASC NULLS FIRST, d_moy#33 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#37], [i_category#28, i_brand#29, s_store_name#30, s_company_name#31], [d_year#32 ASC NULLS FIRST, d_moy#33 ASC NULLS FIRST] +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18] +Arguments: [rank(d_year#26, d_moy#27) windowspecdefinition(i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26 ASC NULLS FIRST, d_moy#27 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#30], [i_category#22, i_brand#23, s_store_name#24, s_company_name#25], [d_year#26 ASC NULLS FIRST, d_moy#27 ASC NULLS FIRST] (39) Project [codegen id : 22] -Output [6]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, sum_sales#22 AS sum_sales#38, rn#37] -Input [8]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum_sales#22, rn#37] +Output [6]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, sum_sales#18 AS sum_sales#31, rn#30] +Input [8]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18, rn#30] (40) Exchange -Input [6]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, sum_sales#38, rn#37] -Arguments: hashpartitioning(i_category#28, i_brand#29, s_store_name#30, s_company_name#31, (rn#37 + 1), 5), ENSURE_REQUIREMENTS, [id=#39] +Input [6]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, sum_sales#31, rn#30] +Arguments: hashpartitioning(i_category#22, i_brand#23, s_store_name#24, s_company_name#25, (rn#30 + 1), 5), ENSURE_REQUIREMENTS, [plan_id=8] (41) Sort [codegen id : 23] -Input [6]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, sum_sales#38, rn#37] -Arguments: [i_category#28 ASC NULLS FIRST, i_brand#29 ASC NULLS FIRST, s_store_name#30 ASC NULLS FIRST, s_company_name#31 ASC NULLS FIRST, (rn#37 + 1) ASC NULLS FIRST], false, 0 +Input [6]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, sum_sales#31, rn#30] +Arguments: [i_category#22 ASC NULLS FIRST, i_brand#23 ASC NULLS FIRST, s_store_name#24 ASC NULLS FIRST, s_company_name#25 ASC NULLS FIRST, (rn#30 + 1) ASC NULLS FIRST], false, 0 (42) SortMergeJoin [codegen id : 24] -Left keys [5]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, rn#25] -Right keys [5]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, (rn#37 + 1)] +Left keys [5]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, rn#20] +Right keys [5]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, (rn#30 + 1)] Join condition: None (43) Project [codegen id : 24] -Output [10]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#26, rn#25, sum_sales#38] -Input [15]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#26, rn#25, i_category#28, i_brand#29, s_store_name#30, s_company_name#31, sum_sales#38, rn#37] +Output [10]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, avg_monthly_sales#21, rn#20, sum_sales#31] +Input [15]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, avg_monthly_sales#21, rn#20, i_category#22, i_brand#23, s_store_name#24, s_company_name#25, sum_sales#31, rn#30] (44) ReusedExchange [Reuses operator id: 36] -Output [7]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#22] +Output [7]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18] (45) Sort [codegen id : 33] -Input [7]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#22] -Arguments: [i_category#40 ASC NULLS FIRST, i_brand#41 ASC NULLS FIRST, s_store_name#42 ASC NULLS FIRST, s_company_name#43 ASC NULLS FIRST, d_year#44 ASC NULLS FIRST, d_moy#45 ASC NULLS FIRST], false, 0 +Input [7]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18] +Arguments: [i_category#32 ASC NULLS FIRST, i_brand#33 ASC NULLS FIRST, s_store_name#34 ASC NULLS FIRST, s_company_name#35 ASC NULLS FIRST, d_year#36 ASC NULLS FIRST, d_moy#37 ASC NULLS FIRST], false, 0 (46) Window -Input [7]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#22] -Arguments: [rank(d_year#44, d_moy#45) windowspecdefinition(i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44 ASC NULLS FIRST, d_moy#45 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#46], [i_category#40, i_brand#41, s_store_name#42, s_company_name#43], [d_year#44 ASC NULLS FIRST, d_moy#45 ASC NULLS FIRST] +Input [7]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18] +Arguments: [rank(d_year#36, d_moy#37) windowspecdefinition(i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36 ASC NULLS FIRST, d_moy#37 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#38], [i_category#32, i_brand#33, s_store_name#34, s_company_name#35], [d_year#36 ASC NULLS FIRST, d_moy#37 ASC NULLS FIRST] (47) Project [codegen id : 34] -Output [6]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, sum_sales#22 AS sum_sales#47, rn#46] -Input [8]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#22, rn#46] +Output [6]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, sum_sales#18 AS sum_sales#39, rn#38] +Input [8]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18, rn#38] (48) Exchange -Input [6]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, sum_sales#47, rn#46] -Arguments: hashpartitioning(i_category#40, i_brand#41, s_store_name#42, s_company_name#43, (rn#46 - 1), 5), ENSURE_REQUIREMENTS, [id=#48] +Input [6]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, sum_sales#39, rn#38] +Arguments: hashpartitioning(i_category#32, i_brand#33, s_store_name#34, s_company_name#35, (rn#38 - 1), 5), ENSURE_REQUIREMENTS, [plan_id=9] (49) Sort [codegen id : 35] -Input [6]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, sum_sales#47, rn#46] -Arguments: [i_category#40 ASC NULLS FIRST, i_brand#41 ASC NULLS FIRST, s_store_name#42 ASC NULLS FIRST, s_company_name#43 ASC NULLS FIRST, (rn#46 - 1) ASC NULLS FIRST], false, 0 +Input [6]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, sum_sales#39, rn#38] +Arguments: [i_category#32 ASC NULLS FIRST, i_brand#33 ASC NULLS FIRST, s_store_name#34 ASC NULLS FIRST, s_company_name#35 ASC NULLS FIRST, (rn#38 - 1) ASC NULLS FIRST], false, 0 (50) SortMergeJoin [codegen id : 36] -Left keys [5]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, rn#25] -Right keys [5]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, (rn#46 - 1)] +Left keys [5]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, rn#20] +Right keys [5]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, (rn#38 - 1)] Join condition: None (51) Project [codegen id : 36] -Output [7]: [i_category#16, d_year#7, d_moy#8, avg_monthly_sales#26, sum_sales#22, sum_sales#38 AS psum#49, sum_sales#47 AS nsum#50] -Input [16]: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#26, rn#25, sum_sales#38, i_category#40, i_brand#41, s_store_name#42, s_company_name#43, sum_sales#47, rn#46] +Output [7]: [i_category#14, d_year#7, d_moy#8, avg_monthly_sales#21, sum_sales#18, sum_sales#31 AS psum#40, sum_sales#39 AS nsum#41] +Input [16]: [i_category#14, i_brand#13, s_store_name#10, s_company_name#11, d_year#7, d_moy#8, sum_sales#18, avg_monthly_sales#21, rn#20, sum_sales#31, i_category#32, i_brand#33, s_store_name#34, s_company_name#35, sum_sales#39, rn#38] (52) TakeOrderedAndProject -Input [7]: [i_category#16, d_year#7, d_moy#8, avg_monthly_sales#26, sum_sales#22, psum#49, nsum#50] -Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST], [i_category#16, d_year#7, d_moy#8, avg_monthly_sales#26, sum_sales#22, psum#49, nsum#50] +Input [7]: [i_category#14, d_year#7, d_moy#8, avg_monthly_sales#21, sum_sales#18, psum#40, nsum#41] +Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#21 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST], [i_category#14, d_year#7, d_moy#8, avg_monthly_sales#21, sum_sales#18, psum#40, nsum#41] ===== Subqueries ===== @@ -304,6 +304,6 @@ Condition : ((((d_year#7 = 1999) OR ((d_year#7 = 1998) AND (d_moy#8 = 12))) OR ( (56) BroadcastExchange Input [3]: [d_date_sk#6, d_year#7, d_moy#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#51] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=10] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q47/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q47/explain.txt index 8abc8fda35cef..5cd32d2922d3c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q47/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q47/explain.txt @@ -77,7 +77,7 @@ Condition : (isnotnull(ss_item_sk#4) AND isnotnull(ss_store_sk#5)) (7) BroadcastExchange Input [4]: [ss_item_sk#4, ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] @@ -89,160 +89,160 @@ Output [5]: [i_brand#2, i_category#3, ss_store_sk#5, ss_sales_price#6, ss_sold_d Input [7]: [i_item_sk#1, i_brand#2, i_category#3, ss_item_sk#4, ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7] (10) ReusedExchange [Reuses operator id: 49] -Output [3]: [d_date_sk#10, d_year#11, d_moy#12] +Output [3]: [d_date_sk#9, d_year#10, d_moy#11] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_date_sk#7] -Right keys [1]: [d_date_sk#10] +Right keys [1]: [d_date_sk#9] Join condition: None (12) Project [codegen id : 4] -Output [6]: [i_brand#2, i_category#3, ss_store_sk#5, ss_sales_price#6, d_year#11, d_moy#12] -Input [8]: [i_brand#2, i_category#3, ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7, d_date_sk#10, d_year#11, d_moy#12] +Output [6]: [i_brand#2, i_category#3, ss_store_sk#5, ss_sales_price#6, d_year#10, d_moy#11] +Input [8]: [i_brand#2, i_category#3, ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7, d_date_sk#9, d_year#10, d_moy#11] (13) Scan parquet default.store -Output [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] +Output [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_name), IsNotNull(s_company_name)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] (15) Filter [codegen id : 3] -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] -Condition : ((isnotnull(s_store_sk#13) AND isnotnull(s_store_name#14)) AND isnotnull(s_company_name#15)) +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] +Condition : ((isnotnull(s_store_sk#12) AND isnotnull(s_store_name#13)) AND isnotnull(s_company_name#14)) (16) BroadcastExchange -Input [3]: [s_store_sk#13, s_store_name#14, s_company_name#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#16] +Input [3]: [s_store_sk#12, s_store_name#13, s_company_name#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#5] -Right keys [1]: [s_store_sk#13] +Right keys [1]: [s_store_sk#12] Join condition: None (18) Project [codegen id : 4] -Output [7]: [i_brand#2, i_category#3, ss_sales_price#6, d_year#11, d_moy#12, s_store_name#14, s_company_name#15] -Input [9]: [i_brand#2, i_category#3, ss_store_sk#5, ss_sales_price#6, d_year#11, d_moy#12, s_store_sk#13, s_store_name#14, s_company_name#15] +Output [7]: [i_brand#2, i_category#3, ss_sales_price#6, d_year#10, d_moy#11, s_store_name#13, s_company_name#14] +Input [9]: [i_brand#2, i_category#3, ss_store_sk#5, ss_sales_price#6, d_year#10, d_moy#11, s_store_sk#12, s_store_name#13, s_company_name#14] (19) HashAggregate [codegen id : 4] -Input [7]: [i_brand#2, i_category#3, ss_sales_price#6, d_year#11, d_moy#12, s_store_name#14, s_company_name#15] -Keys [6]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12] +Input [7]: [i_brand#2, i_category#3, ss_sales_price#6, d_year#10, d_moy#11, s_store_name#13, s_company_name#14] +Keys [6]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11] Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [1]: [sum#17] -Results [7]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum#18] +Aggregate Attributes [1]: [sum#15] +Results [7]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum#16] (20) Exchange -Input [7]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum#18] -Arguments: hashpartitioning(i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [7]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum#16] +Arguments: hashpartitioning(i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 5] -Input [7]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum#18] -Keys [6]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12] +Input [7]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum#16] +Keys [6]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11] Functions [1]: [sum(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#6))#20] -Results [8]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, MakeDecimal(sum(UnscaledValue(ss_sales_price#6))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#6))#20,17,2) AS _w0#22] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#6))#17] +Results [8]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, MakeDecimal(sum(UnscaledValue(ss_sales_price#6))#17,17,2) AS sum_sales#18, MakeDecimal(sum(UnscaledValue(ss_sales_price#6))#17,17,2) AS _w0#19] (22) Exchange -Input [8]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, _w0#22] -Arguments: hashpartitioning(i_category#3, i_brand#2, s_store_name#14, s_company_name#15, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [8]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, _w0#19] +Arguments: hashpartitioning(i_category#3, i_brand#2, s_store_name#13, s_company_name#14, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) Sort [codegen id : 6] -Input [8]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, _w0#22] -Arguments: [i_category#3 ASC NULLS FIRST, i_brand#2 ASC NULLS FIRST, s_store_name#14 ASC NULLS FIRST, s_company_name#15 ASC NULLS FIRST, d_year#11 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST], false, 0 +Input [8]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, _w0#19] +Arguments: [i_category#3 ASC NULLS FIRST, i_brand#2 ASC NULLS FIRST, s_store_name#13 ASC NULLS FIRST, s_company_name#14 ASC NULLS FIRST, d_year#10 ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST], false, 0 (24) Window -Input [8]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, _w0#22] -Arguments: [rank(d_year#11, d_moy#12) windowspecdefinition(i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#24], [i_category#3, i_brand#2, s_store_name#14, s_company_name#15], [d_year#11 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST] +Input [8]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, _w0#19] +Arguments: [rank(d_year#10, d_moy#11) windowspecdefinition(i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10 ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#20], [i_category#3, i_brand#2, s_store_name#13, s_company_name#14], [d_year#10 ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST] (25) Filter [codegen id : 7] -Input [9]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, _w0#22, rn#24] -Condition : (isnotnull(d_year#11) AND (d_year#11 = 1999)) +Input [9]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, _w0#19, rn#20] +Condition : (isnotnull(d_year#10) AND (d_year#10 = 1999)) (26) Window -Input [9]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, _w0#22, rn#24] -Arguments: [avg(_w0#22) windowspecdefinition(i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#25], [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11] +Input [9]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, _w0#19, rn#20] +Arguments: [avg(_w0#19) windowspecdefinition(i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#21], [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10] (27) Filter [codegen id : 22] -Input [10]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, _w0#22, rn#24, avg_monthly_sales#25] -Condition : ((isnotnull(avg_monthly_sales#25) AND (avg_monthly_sales#25 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) +Input [10]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, _w0#19, rn#20, avg_monthly_sales#21] +Condition : ((isnotnull(avg_monthly_sales#21) AND (avg_monthly_sales#21 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#21 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#21 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) (28) Project [codegen id : 22] -Output [9]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#25, rn#24] -Input [10]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, _w0#22, rn#24, avg_monthly_sales#25] +Output [9]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, avg_monthly_sales#21, rn#20] +Input [10]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, _w0#19, rn#20, avg_monthly_sales#21] (29) ReusedExchange [Reuses operator id: 20] -Output [7]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31, sum#32] +Output [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum#28] (30) HashAggregate [codegen id : 12] -Input [7]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31, sum#32] -Keys [6]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31] -Functions [1]: [sum(UnscaledValue(ss_sales_price#33))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#33))#20] -Results [7]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31, MakeDecimal(sum(UnscaledValue(ss_sales_price#33))#20,17,2) AS sum_sales#21] +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum#28] +Keys [6]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27] +Functions [1]: [sum(UnscaledValue(ss_sales_price#29))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#29))#17] +Results [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, MakeDecimal(sum(UnscaledValue(ss_sales_price#29))#17,17,2) AS sum_sales#18] (31) Exchange -Input [7]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31, sum_sales#21] -Arguments: hashpartitioning(i_category#26, i_brand#27, s_store_name#28, s_company_name#29, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18] +Arguments: hashpartitioning(i_category#22, i_brand#23, s_store_name#24, s_company_name#25, 5), ENSURE_REQUIREMENTS, [plan_id=5] (32) Sort [codegen id : 13] -Input [7]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31, sum_sales#21] -Arguments: [i_category#26 ASC NULLS FIRST, i_brand#27 ASC NULLS FIRST, s_store_name#28 ASC NULLS FIRST, s_company_name#29 ASC NULLS FIRST, d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST], false, 0 +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18] +Arguments: [i_category#22 ASC NULLS FIRST, i_brand#23 ASC NULLS FIRST, s_store_name#24 ASC NULLS FIRST, s_company_name#25 ASC NULLS FIRST, d_year#26 ASC NULLS FIRST, d_moy#27 ASC NULLS FIRST], false, 0 (33) Window -Input [7]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31, sum_sales#21] -Arguments: [rank(d_year#30, d_moy#31) windowspecdefinition(i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#35], [i_category#26, i_brand#27, s_store_name#28, s_company_name#29], [d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST] +Input [7]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18] +Arguments: [rank(d_year#26, d_moy#27) windowspecdefinition(i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26 ASC NULLS FIRST, d_moy#27 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#30], [i_category#22, i_brand#23, s_store_name#24, s_company_name#25], [d_year#26 ASC NULLS FIRST, d_moy#27 ASC NULLS FIRST] (34) Project [codegen id : 14] -Output [6]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, sum_sales#21 AS sum_sales#36, rn#35] -Input [8]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, d_year#30, d_moy#31, sum_sales#21, rn#35] +Output [6]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, sum_sales#18 AS sum_sales#31, rn#30] +Input [8]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, d_year#26, d_moy#27, sum_sales#18, rn#30] (35) BroadcastExchange -Input [6]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, sum_sales#36, rn#35] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, false] + 1)),false), [id=#37] +Input [6]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, sum_sales#31, rn#30] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, false] + 1)),false), [plan_id=6] (36) BroadcastHashJoin [codegen id : 22] -Left keys [5]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, rn#24] -Right keys [5]: [i_category#26, i_brand#27, s_store_name#28, s_company_name#29, (rn#35 + 1)] +Left keys [5]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, rn#20] +Right keys [5]: [i_category#22, i_brand#23, s_store_name#24, s_company_name#25, (rn#30 + 1)] Join condition: None (37) Project [codegen id : 22] -Output [10]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#25, rn#24, sum_sales#36] -Input [15]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#25, rn#24, i_category#26, i_brand#27, s_store_name#28, s_company_name#29, sum_sales#36, rn#35] +Output [10]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, avg_monthly_sales#21, rn#20, sum_sales#31] +Input [15]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, avg_monthly_sales#21, rn#20, i_category#22, i_brand#23, s_store_name#24, s_company_name#25, sum_sales#31, rn#30] (38) ReusedExchange [Reuses operator id: 31] -Output [7]: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, d_year#42, d_moy#43, sum_sales#21] +Output [7]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18] (39) Sort [codegen id : 20] -Input [7]: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, d_year#42, d_moy#43, sum_sales#21] -Arguments: [i_category#38 ASC NULLS FIRST, i_brand#39 ASC NULLS FIRST, s_store_name#40 ASC NULLS FIRST, s_company_name#41 ASC NULLS FIRST, d_year#42 ASC NULLS FIRST, d_moy#43 ASC NULLS FIRST], false, 0 +Input [7]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18] +Arguments: [i_category#32 ASC NULLS FIRST, i_brand#33 ASC NULLS FIRST, s_store_name#34 ASC NULLS FIRST, s_company_name#35 ASC NULLS FIRST, d_year#36 ASC NULLS FIRST, d_moy#37 ASC NULLS FIRST], false, 0 (40) Window -Input [7]: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, d_year#42, d_moy#43, sum_sales#21] -Arguments: [rank(d_year#42, d_moy#43) windowspecdefinition(i_category#38, i_brand#39, s_store_name#40, s_company_name#41, d_year#42 ASC NULLS FIRST, d_moy#43 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#44], [i_category#38, i_brand#39, s_store_name#40, s_company_name#41], [d_year#42 ASC NULLS FIRST, d_moy#43 ASC NULLS FIRST] +Input [7]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18] +Arguments: [rank(d_year#36, d_moy#37) windowspecdefinition(i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36 ASC NULLS FIRST, d_moy#37 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#38], [i_category#32, i_brand#33, s_store_name#34, s_company_name#35], [d_year#36 ASC NULLS FIRST, d_moy#37 ASC NULLS FIRST] (41) Project [codegen id : 21] -Output [6]: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, sum_sales#21 AS sum_sales#45, rn#44] -Input [8]: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, d_year#42, d_moy#43, sum_sales#21, rn#44] +Output [6]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, sum_sales#18 AS sum_sales#39, rn#38] +Input [8]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, d_year#36, d_moy#37, sum_sales#18, rn#38] (42) BroadcastExchange -Input [6]: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, sum_sales#45, rn#44] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, false] - 1)),false), [id=#46] +Input [6]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, sum_sales#39, rn#38] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, false] - 1)),false), [plan_id=7] (43) BroadcastHashJoin [codegen id : 22] -Left keys [5]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, rn#24] -Right keys [5]: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, (rn#44 - 1)] +Left keys [5]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, rn#20] +Right keys [5]: [i_category#32, i_brand#33, s_store_name#34, s_company_name#35, (rn#38 - 1)] Join condition: None (44) Project [codegen id : 22] -Output [7]: [i_category#3, d_year#11, d_moy#12, avg_monthly_sales#25, sum_sales#21, sum_sales#36 AS psum#47, sum_sales#45 AS nsum#48] -Input [16]: [i_category#3, i_brand#2, s_store_name#14, s_company_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#25, rn#24, sum_sales#36, i_category#38, i_brand#39, s_store_name#40, s_company_name#41, sum_sales#45, rn#44] +Output [7]: [i_category#3, d_year#10, d_moy#11, avg_monthly_sales#21, sum_sales#18, sum_sales#31 AS psum#40, sum_sales#39 AS nsum#41] +Input [16]: [i_category#3, i_brand#2, s_store_name#13, s_company_name#14, d_year#10, d_moy#11, sum_sales#18, avg_monthly_sales#21, rn#20, sum_sales#31, i_category#32, i_brand#33, s_store_name#34, s_company_name#35, sum_sales#39, rn#38] (45) TakeOrderedAndProject -Input [7]: [i_category#3, d_year#11, d_moy#12, avg_monthly_sales#25, sum_sales#21, psum#47, nsum#48] -Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST], [i_category#3, d_year#11, d_moy#12, avg_monthly_sales#25, sum_sales#21, psum#47, nsum#48] +Input [7]: [i_category#3, d_year#10, d_moy#11, avg_monthly_sales#21, sum_sales#18, psum#40, nsum#41] +Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#18 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#21 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST], [i_category#3, d_year#10, d_moy#11, avg_monthly_sales#21, sum_sales#18, psum#40, nsum#41] ===== Subqueries ===== @@ -254,21 +254,21 @@ BroadcastExchange (49) (46) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#11, d_moy#12] +Output [3]: [d_date_sk#9, d_year#10, d_moy#11] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [Or(Or(EqualTo(d_year,1999),And(EqualTo(d_year,1998),EqualTo(d_moy,12))),And(EqualTo(d_year,2000),EqualTo(d_moy,1))), IsNotNull(d_date_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#12] +Input [3]: [d_date_sk#9, d_year#10, d_moy#11] (48) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#12] -Condition : ((((d_year#11 = 1999) OR ((d_year#11 = 1998) AND (d_moy#12 = 12))) OR ((d_year#11 = 2000) AND (d_moy#12 = 1))) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#9, d_year#10, d_moy#11] +Condition : ((((d_year#10 = 1999) OR ((d_year#10 = 1998) AND (d_moy#11 = 12))) OR ((d_year#10 = 2000) AND (d_moy#11 = 1))) AND isnotnull(d_date_sk#9)) (49) BroadcastExchange -Input [3]: [d_date_sk#10, d_year#11, d_moy#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#49] +Input [3]: [d_date_sk#9, d_year#10, d_moy#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q49.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q49.sf100/explain.txt index 5efc0bfaed99e..6a546a42ff309 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q49.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q49.sf100/explain.txt @@ -120,356 +120,356 @@ Input [6]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_so (8) Exchange Input [4]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4] -Arguments: hashpartitioning(ws_order_number#2, ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ws_order_number#2, ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (9) Sort [codegen id : 3] Input [4]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4] Arguments: [ws_order_number#2 ASC NULLS FIRST, ws_item_sk#1 ASC NULLS FIRST], false, 0 (10) Scan parquet default.web_returns -Output [5]: [wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13, wr_returned_date_sk#14] +Output [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_return_amt), GreaterThan(wr_return_amt,10000.00), IsNotNull(wr_order_number), IsNotNull(wr_item_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 4] -Input [5]: [wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13, wr_returned_date_sk#14] +Input [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] (12) Filter [codegen id : 4] -Input [5]: [wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13, wr_returned_date_sk#14] -Condition : (((isnotnull(wr_return_amt#13) AND (wr_return_amt#13 > 10000.00)) AND isnotnull(wr_order_number#11)) AND isnotnull(wr_item_sk#10)) +Input [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] +Condition : (((isnotnull(wr_return_amt#12) AND (wr_return_amt#12 > 10000.00)) AND isnotnull(wr_order_number#10)) AND isnotnull(wr_item_sk#9)) (13) Project [codegen id : 4] -Output [4]: [wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13] -Input [5]: [wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13, wr_returned_date_sk#14] +Output [4]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12] +Input [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] (14) Exchange -Input [4]: [wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13] -Arguments: hashpartitioning(wr_order_number#11, wr_item_sk#10, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12] +Arguments: hashpartitioning(wr_order_number#10, wr_item_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) Sort [codegen id : 5] -Input [4]: [wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13] -Arguments: [wr_order_number#11 ASC NULLS FIRST, wr_item_sk#10 ASC NULLS FIRST], false, 0 +Input [4]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12] +Arguments: [wr_order_number#10 ASC NULLS FIRST, wr_item_sk#9 ASC NULLS FIRST], false, 0 (16) SortMergeJoin [codegen id : 6] Left keys [2]: [ws_order_number#2, ws_item_sk#1] -Right keys [2]: [wr_order_number#11, wr_item_sk#10] +Right keys [2]: [wr_order_number#10, wr_item_sk#9] Join condition: None (17) Project [codegen id : 6] -Output [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#12, wr_return_amt#13] -Input [8]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, wr_item_sk#10, wr_order_number#11, wr_return_quantity#12, wr_return_amt#13] +Output [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#11, wr_return_amt#12] +Input [8]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12] (18) HashAggregate [codegen id : 6] -Input [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#12, wr_return_amt#13] +Input [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#11, wr_return_amt#12] Keys [1]: [ws_item_sk#1] -Functions [4]: [partial_sum(coalesce(wr_return_quantity#12, 0)), partial_sum(coalesce(ws_quantity#3, 0)), partial_sum(coalesce(cast(wr_return_amt#13 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] -Aggregate Attributes [6]: [sum#16, sum#17, sum#18, isEmpty#19, sum#20, isEmpty#21] -Results [7]: [ws_item_sk#1, sum#22, sum#23, sum#24, isEmpty#25, sum#26, isEmpty#27] +Functions [4]: [partial_sum(coalesce(wr_return_quantity#11, 0)), partial_sum(coalesce(ws_quantity#3, 0)), partial_sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] +Aggregate Attributes [6]: [sum#14, sum#15, sum#16, isEmpty#17, sum#18, isEmpty#19] +Results [7]: [ws_item_sk#1, sum#20, sum#21, sum#22, isEmpty#23, sum#24, isEmpty#25] (19) Exchange -Input [7]: [ws_item_sk#1, sum#22, sum#23, sum#24, isEmpty#25, sum#26, isEmpty#27] -Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [7]: [ws_item_sk#1, sum#20, sum#21, sum#22, isEmpty#23, sum#24, isEmpty#25] +Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 7] -Input [7]: [ws_item_sk#1, sum#22, sum#23, sum#24, isEmpty#25, sum#26, isEmpty#27] +Input [7]: [ws_item_sk#1, sum#20, sum#21, sum#22, isEmpty#23, sum#24, isEmpty#25] Keys [1]: [ws_item_sk#1] -Functions [4]: [sum(coalesce(wr_return_quantity#12, 0)), sum(coalesce(ws_quantity#3, 0)), sum(coalesce(cast(wr_return_amt#13 as decimal(12,2)), 0.00)), sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] -Aggregate Attributes [4]: [sum(coalesce(wr_return_quantity#12, 0))#29, sum(coalesce(ws_quantity#3, 0))#30, sum(coalesce(cast(wr_return_amt#13 as decimal(12,2)), 0.00))#31, sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#32] -Results [3]: [ws_item_sk#1 AS item#33, CheckOverflow((promote_precision(cast(sum(coalesce(wr_return_quantity#12, 0))#29 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ws_quantity#3, 0))#30 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#34, CheckOverflow((promote_precision(cast(sum(coalesce(cast(wr_return_amt#13 as decimal(12,2)), 0.00))#31 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#32 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#35] +Functions [4]: [sum(coalesce(wr_return_quantity#11, 0)), sum(coalesce(ws_quantity#3, 0)), sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00)), sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] +Aggregate Attributes [4]: [sum(coalesce(wr_return_quantity#11, 0))#26, sum(coalesce(ws_quantity#3, 0))#27, sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00))#28, sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#29] +Results [3]: [ws_item_sk#1 AS item#30, CheckOverflow((promote_precision(cast(sum(coalesce(wr_return_quantity#11, 0))#26 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ws_quantity#3, 0))#27 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#31, CheckOverflow((promote_precision(cast(sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00))#28 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#29 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#32] (21) Exchange -Input [3]: [item#33, return_ratio#34, currency_ratio#35] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#36] +Input [3]: [item#30, return_ratio#31, currency_ratio#32] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (22) Sort [codegen id : 8] -Input [3]: [item#33, return_ratio#34, currency_ratio#35] -Arguments: [return_ratio#34 ASC NULLS FIRST], false, 0 +Input [3]: [item#30, return_ratio#31, currency_ratio#32] +Arguments: [return_ratio#31 ASC NULLS FIRST], false, 0 (23) Window -Input [3]: [item#33, return_ratio#34, currency_ratio#35] -Arguments: [rank(return_ratio#34) windowspecdefinition(return_ratio#34 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#37], [return_ratio#34 ASC NULLS FIRST] +Input [3]: [item#30, return_ratio#31, currency_ratio#32] +Arguments: [rank(return_ratio#31) windowspecdefinition(return_ratio#31 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#33], [return_ratio#31 ASC NULLS FIRST] (24) Sort [codegen id : 9] -Input [4]: [item#33, return_ratio#34, currency_ratio#35, return_rank#37] -Arguments: [currency_ratio#35 ASC NULLS FIRST], false, 0 +Input [4]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33] +Arguments: [currency_ratio#32 ASC NULLS FIRST], false, 0 (25) Window -Input [4]: [item#33, return_ratio#34, currency_ratio#35, return_rank#37] -Arguments: [rank(currency_ratio#35) windowspecdefinition(currency_ratio#35 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#38], [currency_ratio#35 ASC NULLS FIRST] +Input [4]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33] +Arguments: [rank(currency_ratio#32) windowspecdefinition(currency_ratio#32 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#34], [currency_ratio#32 ASC NULLS FIRST] (26) Filter [codegen id : 10] -Input [5]: [item#33, return_ratio#34, currency_ratio#35, return_rank#37, currency_rank#38] -Condition : ((return_rank#37 <= 10) OR (currency_rank#38 <= 10)) +Input [5]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33, currency_rank#34] +Condition : ((return_rank#33 <= 10) OR (currency_rank#34 <= 10)) (27) Project [codegen id : 10] -Output [5]: [web AS channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] -Input [5]: [item#33, return_ratio#34, currency_ratio#35, return_rank#37, currency_rank#38] +Output [5]: [web AS channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Input [5]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33, currency_rank#34] (28) Scan parquet default.catalog_sales -Output [6]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43, cs_net_profit#44, cs_sold_date_sk#45] +Output [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#45), dynamicpruningexpression(cs_sold_date_sk#45 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(cs_sold_date_sk#41), dynamicpruningexpression(cs_sold_date_sk#41 IN dynamicpruning#7)] PushedFilters: [IsNotNull(cs_net_profit), IsNotNull(cs_net_paid), IsNotNull(cs_quantity), GreaterThan(cs_net_profit,1.00), GreaterThan(cs_net_paid,0.00), GreaterThan(cs_quantity,0), IsNotNull(cs_order_number), IsNotNull(cs_item_sk)] ReadSchema: struct (29) ColumnarToRow [codegen id : 12] -Input [6]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43, cs_net_profit#44, cs_sold_date_sk#45] +Input [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] (30) Filter [codegen id : 12] -Input [6]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43, cs_net_profit#44, cs_sold_date_sk#45] -Condition : (((((((isnotnull(cs_net_profit#44) AND isnotnull(cs_net_paid#43)) AND isnotnull(cs_quantity#42)) AND (cs_net_profit#44 > 1.00)) AND (cs_net_paid#43 > 0.00)) AND (cs_quantity#42 > 0)) AND isnotnull(cs_order_number#41)) AND isnotnull(cs_item_sk#40)) +Input [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] +Condition : (((((((isnotnull(cs_net_profit#40) AND isnotnull(cs_net_paid#39)) AND isnotnull(cs_quantity#38)) AND (cs_net_profit#40 > 1.00)) AND (cs_net_paid#39 > 0.00)) AND (cs_quantity#38 > 0)) AND isnotnull(cs_order_number#37)) AND isnotnull(cs_item_sk#36)) (31) Project [codegen id : 12] -Output [5]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43, cs_sold_date_sk#45] -Input [6]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43, cs_net_profit#44, cs_sold_date_sk#45] +Output [5]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_sold_date_sk#41] +Input [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] (32) ReusedExchange [Reuses operator id: 91] -Output [1]: [d_date_sk#46] +Output [1]: [d_date_sk#42] (33) BroadcastHashJoin [codegen id : 12] -Left keys [1]: [cs_sold_date_sk#45] -Right keys [1]: [d_date_sk#46] +Left keys [1]: [cs_sold_date_sk#41] +Right keys [1]: [d_date_sk#42] Join condition: None (34) Project [codegen id : 12] -Output [4]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43] -Input [6]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43, cs_sold_date_sk#45, d_date_sk#46] +Output [4]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39] +Input [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_sold_date_sk#41, d_date_sk#42] (35) Exchange -Input [4]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43] -Arguments: hashpartitioning(cs_order_number#41, cs_item_sk#40, 5), ENSURE_REQUIREMENTS, [id=#47] +Input [4]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39] +Arguments: hashpartitioning(cs_order_number#37, cs_item_sk#36, 5), ENSURE_REQUIREMENTS, [plan_id=5] (36) Sort [codegen id : 13] -Input [4]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43] -Arguments: [cs_order_number#41 ASC NULLS FIRST, cs_item_sk#40 ASC NULLS FIRST], false, 0 +Input [4]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39] +Arguments: [cs_order_number#37 ASC NULLS FIRST, cs_item_sk#36 ASC NULLS FIRST], false, 0 (37) Scan parquet default.catalog_returns -Output [5]: [cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51, cr_returned_date_sk#52] +Output [5]: [cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46, cr_returned_date_sk#47] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_return_amount), GreaterThan(cr_return_amount,10000.00), IsNotNull(cr_order_number), IsNotNull(cr_item_sk)] ReadSchema: struct (38) ColumnarToRow [codegen id : 14] -Input [5]: [cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51, cr_returned_date_sk#52] +Input [5]: [cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46, cr_returned_date_sk#47] (39) Filter [codegen id : 14] -Input [5]: [cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51, cr_returned_date_sk#52] -Condition : (((isnotnull(cr_return_amount#51) AND (cr_return_amount#51 > 10000.00)) AND isnotnull(cr_order_number#49)) AND isnotnull(cr_item_sk#48)) +Input [5]: [cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46, cr_returned_date_sk#47] +Condition : (((isnotnull(cr_return_amount#46) AND (cr_return_amount#46 > 10000.00)) AND isnotnull(cr_order_number#44)) AND isnotnull(cr_item_sk#43)) (40) Project [codegen id : 14] -Output [4]: [cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51] -Input [5]: [cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51, cr_returned_date_sk#52] +Output [4]: [cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46] +Input [5]: [cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46, cr_returned_date_sk#47] (41) Exchange -Input [4]: [cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51] -Arguments: hashpartitioning(cr_order_number#49, cr_item_sk#48, 5), ENSURE_REQUIREMENTS, [id=#53] +Input [4]: [cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46] +Arguments: hashpartitioning(cr_order_number#44, cr_item_sk#43, 5), ENSURE_REQUIREMENTS, [plan_id=6] (42) Sort [codegen id : 15] -Input [4]: [cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51] -Arguments: [cr_order_number#49 ASC NULLS FIRST, cr_item_sk#48 ASC NULLS FIRST], false, 0 +Input [4]: [cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46] +Arguments: [cr_order_number#44 ASC NULLS FIRST, cr_item_sk#43 ASC NULLS FIRST], false, 0 (43) SortMergeJoin [codegen id : 16] -Left keys [2]: [cs_order_number#41, cs_item_sk#40] -Right keys [2]: [cr_order_number#49, cr_item_sk#48] +Left keys [2]: [cs_order_number#37, cs_item_sk#36] +Right keys [2]: [cr_order_number#44, cr_item_sk#43] Join condition: None (44) Project [codegen id : 16] -Output [5]: [cs_item_sk#40, cs_quantity#42, cs_net_paid#43, cr_return_quantity#50, cr_return_amount#51] -Input [8]: [cs_item_sk#40, cs_order_number#41, cs_quantity#42, cs_net_paid#43, cr_item_sk#48, cr_order_number#49, cr_return_quantity#50, cr_return_amount#51] +Output [5]: [cs_item_sk#36, cs_quantity#38, cs_net_paid#39, cr_return_quantity#45, cr_return_amount#46] +Input [8]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cr_item_sk#43, cr_order_number#44, cr_return_quantity#45, cr_return_amount#46] (45) HashAggregate [codegen id : 16] -Input [5]: [cs_item_sk#40, cs_quantity#42, cs_net_paid#43, cr_return_quantity#50, cr_return_amount#51] -Keys [1]: [cs_item_sk#40] -Functions [4]: [partial_sum(coalesce(cr_return_quantity#50, 0)), partial_sum(coalesce(cs_quantity#42, 0)), partial_sum(coalesce(cast(cr_return_amount#51 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(cs_net_paid#43 as decimal(12,2)), 0.00))] -Aggregate Attributes [6]: [sum#54, sum#55, sum#56, isEmpty#57, sum#58, isEmpty#59] -Results [7]: [cs_item_sk#40, sum#60, sum#61, sum#62, isEmpty#63, sum#64, isEmpty#65] +Input [5]: [cs_item_sk#36, cs_quantity#38, cs_net_paid#39, cr_return_quantity#45, cr_return_amount#46] +Keys [1]: [cs_item_sk#36] +Functions [4]: [partial_sum(coalesce(cr_return_quantity#45, 0)), partial_sum(coalesce(cs_quantity#38, 0)), partial_sum(coalesce(cast(cr_return_amount#46 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))] +Aggregate Attributes [6]: [sum#48, sum#49, sum#50, isEmpty#51, sum#52, isEmpty#53] +Results [7]: [cs_item_sk#36, sum#54, sum#55, sum#56, isEmpty#57, sum#58, isEmpty#59] (46) Exchange -Input [7]: [cs_item_sk#40, sum#60, sum#61, sum#62, isEmpty#63, sum#64, isEmpty#65] -Arguments: hashpartitioning(cs_item_sk#40, 5), ENSURE_REQUIREMENTS, [id=#66] +Input [7]: [cs_item_sk#36, sum#54, sum#55, sum#56, isEmpty#57, sum#58, isEmpty#59] +Arguments: hashpartitioning(cs_item_sk#36, 5), ENSURE_REQUIREMENTS, [plan_id=7] (47) HashAggregate [codegen id : 17] -Input [7]: [cs_item_sk#40, sum#60, sum#61, sum#62, isEmpty#63, sum#64, isEmpty#65] -Keys [1]: [cs_item_sk#40] -Functions [4]: [sum(coalesce(cr_return_quantity#50, 0)), sum(coalesce(cs_quantity#42, 0)), sum(coalesce(cast(cr_return_amount#51 as decimal(12,2)), 0.00)), sum(coalesce(cast(cs_net_paid#43 as decimal(12,2)), 0.00))] -Aggregate Attributes [4]: [sum(coalesce(cr_return_quantity#50, 0))#67, sum(coalesce(cs_quantity#42, 0))#68, sum(coalesce(cast(cr_return_amount#51 as decimal(12,2)), 0.00))#69, sum(coalesce(cast(cs_net_paid#43 as decimal(12,2)), 0.00))#70] -Results [3]: [cs_item_sk#40 AS item#71, CheckOverflow((promote_precision(cast(sum(coalesce(cr_return_quantity#50, 0))#67 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cs_quantity#42, 0))#68 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#72, CheckOverflow((promote_precision(cast(sum(coalesce(cast(cr_return_amount#51 as decimal(12,2)), 0.00))#69 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(cs_net_paid#43 as decimal(12,2)), 0.00))#70 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#73] +Input [7]: [cs_item_sk#36, sum#54, sum#55, sum#56, isEmpty#57, sum#58, isEmpty#59] +Keys [1]: [cs_item_sk#36] +Functions [4]: [sum(coalesce(cr_return_quantity#45, 0)), sum(coalesce(cs_quantity#38, 0)), sum(coalesce(cast(cr_return_amount#46 as decimal(12,2)), 0.00)), sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))] +Aggregate Attributes [4]: [sum(coalesce(cr_return_quantity#45, 0))#60, sum(coalesce(cs_quantity#38, 0))#61, sum(coalesce(cast(cr_return_amount#46 as decimal(12,2)), 0.00))#62, sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))#63] +Results [3]: [cs_item_sk#36 AS item#64, CheckOverflow((promote_precision(cast(sum(coalesce(cr_return_quantity#45, 0))#60 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cs_quantity#38, 0))#61 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#65, CheckOverflow((promote_precision(cast(sum(coalesce(cast(cr_return_amount#46 as decimal(12,2)), 0.00))#62 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))#63 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#66] (48) Exchange -Input [3]: [item#71, return_ratio#72, currency_ratio#73] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#74] +Input [3]: [item#64, return_ratio#65, currency_ratio#66] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8] (49) Sort [codegen id : 18] -Input [3]: [item#71, return_ratio#72, currency_ratio#73] -Arguments: [return_ratio#72 ASC NULLS FIRST], false, 0 +Input [3]: [item#64, return_ratio#65, currency_ratio#66] +Arguments: [return_ratio#65 ASC NULLS FIRST], false, 0 (50) Window -Input [3]: [item#71, return_ratio#72, currency_ratio#73] -Arguments: [rank(return_ratio#72) windowspecdefinition(return_ratio#72 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#75], [return_ratio#72 ASC NULLS FIRST] +Input [3]: [item#64, return_ratio#65, currency_ratio#66] +Arguments: [rank(return_ratio#65) windowspecdefinition(return_ratio#65 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#67], [return_ratio#65 ASC NULLS FIRST] (51) Sort [codegen id : 19] -Input [4]: [item#71, return_ratio#72, currency_ratio#73, return_rank#75] -Arguments: [currency_ratio#73 ASC NULLS FIRST], false, 0 +Input [4]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67] +Arguments: [currency_ratio#66 ASC NULLS FIRST], false, 0 (52) Window -Input [4]: [item#71, return_ratio#72, currency_ratio#73, return_rank#75] -Arguments: [rank(currency_ratio#73) windowspecdefinition(currency_ratio#73 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#76], [currency_ratio#73 ASC NULLS FIRST] +Input [4]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67] +Arguments: [rank(currency_ratio#66) windowspecdefinition(currency_ratio#66 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#68], [currency_ratio#66 ASC NULLS FIRST] (53) Filter [codegen id : 20] -Input [5]: [item#71, return_ratio#72, currency_ratio#73, return_rank#75, currency_rank#76] -Condition : ((return_rank#75 <= 10) OR (currency_rank#76 <= 10)) +Input [5]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67, currency_rank#68] +Condition : ((return_rank#67 <= 10) OR (currency_rank#68 <= 10)) (54) Project [codegen id : 20] -Output [5]: [catalog AS channel#77, item#71, return_ratio#72, return_rank#75, currency_rank#76] -Input [5]: [item#71, return_ratio#72, currency_ratio#73, return_rank#75, currency_rank#76] +Output [5]: [catalog AS channel#69, item#64, return_ratio#65, return_rank#67, currency_rank#68] +Input [5]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67, currency_rank#68] (55) Scan parquet default.store_sales -Output [6]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81, ss_net_profit#82, ss_sold_date_sk#83] +Output [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#83), dynamicpruningexpression(ss_sold_date_sk#83 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(ss_sold_date_sk#75), dynamicpruningexpression(ss_sold_date_sk#75 IN dynamicpruning#7)] PushedFilters: [IsNotNull(ss_net_profit), IsNotNull(ss_net_paid), IsNotNull(ss_quantity), GreaterThan(ss_net_profit,1.00), GreaterThan(ss_net_paid,0.00), GreaterThan(ss_quantity,0), IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk)] ReadSchema: struct (56) ColumnarToRow [codegen id : 22] -Input [6]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81, ss_net_profit#82, ss_sold_date_sk#83] +Input [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] (57) Filter [codegen id : 22] -Input [6]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81, ss_net_profit#82, ss_sold_date_sk#83] -Condition : (((((((isnotnull(ss_net_profit#82) AND isnotnull(ss_net_paid#81)) AND isnotnull(ss_quantity#80)) AND (ss_net_profit#82 > 1.00)) AND (ss_net_paid#81 > 0.00)) AND (ss_quantity#80 > 0)) AND isnotnull(ss_ticket_number#79)) AND isnotnull(ss_item_sk#78)) +Input [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] +Condition : (((((((isnotnull(ss_net_profit#74) AND isnotnull(ss_net_paid#73)) AND isnotnull(ss_quantity#72)) AND (ss_net_profit#74 > 1.00)) AND (ss_net_paid#73 > 0.00)) AND (ss_quantity#72 > 0)) AND isnotnull(ss_ticket_number#71)) AND isnotnull(ss_item_sk#70)) (58) Project [codegen id : 22] -Output [5]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81, ss_sold_date_sk#83] -Input [6]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81, ss_net_profit#82, ss_sold_date_sk#83] +Output [5]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_sold_date_sk#75] +Input [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] (59) ReusedExchange [Reuses operator id: 91] -Output [1]: [d_date_sk#84] +Output [1]: [d_date_sk#76] (60) BroadcastHashJoin [codegen id : 22] -Left keys [1]: [ss_sold_date_sk#83] -Right keys [1]: [d_date_sk#84] +Left keys [1]: [ss_sold_date_sk#75] +Right keys [1]: [d_date_sk#76] Join condition: None (61) Project [codegen id : 22] -Output [4]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81] -Input [6]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81, ss_sold_date_sk#83, d_date_sk#84] +Output [4]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73] +Input [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_sold_date_sk#75, d_date_sk#76] (62) Exchange -Input [4]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81] -Arguments: hashpartitioning(ss_ticket_number#79, ss_item_sk#78, 5), ENSURE_REQUIREMENTS, [id=#85] +Input [4]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73] +Arguments: hashpartitioning(ss_ticket_number#71, ss_item_sk#70, 5), ENSURE_REQUIREMENTS, [plan_id=9] (63) Sort [codegen id : 23] -Input [4]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81] -Arguments: [ss_ticket_number#79 ASC NULLS FIRST, ss_item_sk#78 ASC NULLS FIRST], false, 0 +Input [4]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73] +Arguments: [ss_ticket_number#71 ASC NULLS FIRST, ss_item_sk#70 ASC NULLS FIRST], false, 0 (64) Scan parquet default.store_returns -Output [5]: [sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89, sr_returned_date_sk#90] +Output [5]: [sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80, sr_returned_date_sk#81] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_return_amt), GreaterThan(sr_return_amt,10000.00), IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct (65) ColumnarToRow [codegen id : 24] -Input [5]: [sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89, sr_returned_date_sk#90] +Input [5]: [sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80, sr_returned_date_sk#81] (66) Filter [codegen id : 24] -Input [5]: [sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89, sr_returned_date_sk#90] -Condition : (((isnotnull(sr_return_amt#89) AND (sr_return_amt#89 > 10000.00)) AND isnotnull(sr_ticket_number#87)) AND isnotnull(sr_item_sk#86)) +Input [5]: [sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80, sr_returned_date_sk#81] +Condition : (((isnotnull(sr_return_amt#80) AND (sr_return_amt#80 > 10000.00)) AND isnotnull(sr_ticket_number#78)) AND isnotnull(sr_item_sk#77)) (67) Project [codegen id : 24] -Output [4]: [sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89] -Input [5]: [sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89, sr_returned_date_sk#90] +Output [4]: [sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80] +Input [5]: [sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80, sr_returned_date_sk#81] (68) Exchange -Input [4]: [sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89] -Arguments: hashpartitioning(sr_ticket_number#87, sr_item_sk#86, 5), ENSURE_REQUIREMENTS, [id=#91] +Input [4]: [sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80] +Arguments: hashpartitioning(sr_ticket_number#78, sr_item_sk#77, 5), ENSURE_REQUIREMENTS, [plan_id=10] (69) Sort [codegen id : 25] -Input [4]: [sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89] -Arguments: [sr_ticket_number#87 ASC NULLS FIRST, sr_item_sk#86 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80] +Arguments: [sr_ticket_number#78 ASC NULLS FIRST, sr_item_sk#77 ASC NULLS FIRST], false, 0 (70) SortMergeJoin [codegen id : 26] -Left keys [2]: [ss_ticket_number#79, ss_item_sk#78] -Right keys [2]: [sr_ticket_number#87, sr_item_sk#86] +Left keys [2]: [ss_ticket_number#71, ss_item_sk#70] +Right keys [2]: [sr_ticket_number#78, sr_item_sk#77] Join condition: None (71) Project [codegen id : 26] -Output [5]: [ss_item_sk#78, ss_quantity#80, ss_net_paid#81, sr_return_quantity#88, sr_return_amt#89] -Input [8]: [ss_item_sk#78, ss_ticket_number#79, ss_quantity#80, ss_net_paid#81, sr_item_sk#86, sr_ticket_number#87, sr_return_quantity#88, sr_return_amt#89] +Output [5]: [ss_item_sk#70, ss_quantity#72, ss_net_paid#73, sr_return_quantity#79, sr_return_amt#80] +Input [8]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, sr_item_sk#77, sr_ticket_number#78, sr_return_quantity#79, sr_return_amt#80] (72) HashAggregate [codegen id : 26] -Input [5]: [ss_item_sk#78, ss_quantity#80, ss_net_paid#81, sr_return_quantity#88, sr_return_amt#89] -Keys [1]: [ss_item_sk#78] -Functions [4]: [partial_sum(coalesce(sr_return_quantity#88, 0)), partial_sum(coalesce(ss_quantity#80, 0)), partial_sum(coalesce(cast(sr_return_amt#89 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ss_net_paid#81 as decimal(12,2)), 0.00))] -Aggregate Attributes [6]: [sum#92, sum#93, sum#94, isEmpty#95, sum#96, isEmpty#97] -Results [7]: [ss_item_sk#78, sum#98, sum#99, sum#100, isEmpty#101, sum#102, isEmpty#103] +Input [5]: [ss_item_sk#70, ss_quantity#72, ss_net_paid#73, sr_return_quantity#79, sr_return_amt#80] +Keys [1]: [ss_item_sk#70] +Functions [4]: [partial_sum(coalesce(sr_return_quantity#79, 0)), partial_sum(coalesce(ss_quantity#72, 0)), partial_sum(coalesce(cast(sr_return_amt#80 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))] +Aggregate Attributes [6]: [sum#82, sum#83, sum#84, isEmpty#85, sum#86, isEmpty#87] +Results [7]: [ss_item_sk#70, sum#88, sum#89, sum#90, isEmpty#91, sum#92, isEmpty#93] (73) Exchange -Input [7]: [ss_item_sk#78, sum#98, sum#99, sum#100, isEmpty#101, sum#102, isEmpty#103] -Arguments: hashpartitioning(ss_item_sk#78, 5), ENSURE_REQUIREMENTS, [id=#104] +Input [7]: [ss_item_sk#70, sum#88, sum#89, sum#90, isEmpty#91, sum#92, isEmpty#93] +Arguments: hashpartitioning(ss_item_sk#70, 5), ENSURE_REQUIREMENTS, [plan_id=11] (74) HashAggregate [codegen id : 27] -Input [7]: [ss_item_sk#78, sum#98, sum#99, sum#100, isEmpty#101, sum#102, isEmpty#103] -Keys [1]: [ss_item_sk#78] -Functions [4]: [sum(coalesce(sr_return_quantity#88, 0)), sum(coalesce(ss_quantity#80, 0)), sum(coalesce(cast(sr_return_amt#89 as decimal(12,2)), 0.00)), sum(coalesce(cast(ss_net_paid#81 as decimal(12,2)), 0.00))] -Aggregate Attributes [4]: [sum(coalesce(sr_return_quantity#88, 0))#105, sum(coalesce(ss_quantity#80, 0))#106, sum(coalesce(cast(sr_return_amt#89 as decimal(12,2)), 0.00))#107, sum(coalesce(cast(ss_net_paid#81 as decimal(12,2)), 0.00))#108] -Results [3]: [ss_item_sk#78 AS item#109, CheckOverflow((promote_precision(cast(sum(coalesce(sr_return_quantity#88, 0))#105 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ss_quantity#80, 0))#106 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#110, CheckOverflow((promote_precision(cast(sum(coalesce(cast(sr_return_amt#89 as decimal(12,2)), 0.00))#107 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ss_net_paid#81 as decimal(12,2)), 0.00))#108 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#111] +Input [7]: [ss_item_sk#70, sum#88, sum#89, sum#90, isEmpty#91, sum#92, isEmpty#93] +Keys [1]: [ss_item_sk#70] +Functions [4]: [sum(coalesce(sr_return_quantity#79, 0)), sum(coalesce(ss_quantity#72, 0)), sum(coalesce(cast(sr_return_amt#80 as decimal(12,2)), 0.00)), sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))] +Aggregate Attributes [4]: [sum(coalesce(sr_return_quantity#79, 0))#94, sum(coalesce(ss_quantity#72, 0))#95, sum(coalesce(cast(sr_return_amt#80 as decimal(12,2)), 0.00))#96, sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))#97] +Results [3]: [ss_item_sk#70 AS item#98, CheckOverflow((promote_precision(cast(sum(coalesce(sr_return_quantity#79, 0))#94 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ss_quantity#72, 0))#95 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#99, CheckOverflow((promote_precision(cast(sum(coalesce(cast(sr_return_amt#80 as decimal(12,2)), 0.00))#96 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))#97 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#100] (75) Exchange -Input [3]: [item#109, return_ratio#110, currency_ratio#111] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#112] +Input [3]: [item#98, return_ratio#99, currency_ratio#100] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12] (76) Sort [codegen id : 28] -Input [3]: [item#109, return_ratio#110, currency_ratio#111] -Arguments: [return_ratio#110 ASC NULLS FIRST], false, 0 +Input [3]: [item#98, return_ratio#99, currency_ratio#100] +Arguments: [return_ratio#99 ASC NULLS FIRST], false, 0 (77) Window -Input [3]: [item#109, return_ratio#110, currency_ratio#111] -Arguments: [rank(return_ratio#110) windowspecdefinition(return_ratio#110 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#113], [return_ratio#110 ASC NULLS FIRST] +Input [3]: [item#98, return_ratio#99, currency_ratio#100] +Arguments: [rank(return_ratio#99) windowspecdefinition(return_ratio#99 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#101], [return_ratio#99 ASC NULLS FIRST] (78) Sort [codegen id : 29] -Input [4]: [item#109, return_ratio#110, currency_ratio#111, return_rank#113] -Arguments: [currency_ratio#111 ASC NULLS FIRST], false, 0 +Input [4]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101] +Arguments: [currency_ratio#100 ASC NULLS FIRST], false, 0 (79) Window -Input [4]: [item#109, return_ratio#110, currency_ratio#111, return_rank#113] -Arguments: [rank(currency_ratio#111) windowspecdefinition(currency_ratio#111 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#114], [currency_ratio#111 ASC NULLS FIRST] +Input [4]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101] +Arguments: [rank(currency_ratio#100) windowspecdefinition(currency_ratio#100 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#102], [currency_ratio#100 ASC NULLS FIRST] (80) Filter [codegen id : 30] -Input [5]: [item#109, return_ratio#110, currency_ratio#111, return_rank#113, currency_rank#114] -Condition : ((return_rank#113 <= 10) OR (currency_rank#114 <= 10)) +Input [5]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101, currency_rank#102] +Condition : ((return_rank#101 <= 10) OR (currency_rank#102 <= 10)) (81) Project [codegen id : 30] -Output [5]: [store AS channel#115, item#109, return_ratio#110, return_rank#113, currency_rank#114] -Input [5]: [item#109, return_ratio#110, currency_ratio#111, return_rank#113, currency_rank#114] +Output [5]: [store AS channel#103, item#98, return_ratio#99, return_rank#101, currency_rank#102] +Input [5]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101, currency_rank#102] (82) Union (83) HashAggregate [codegen id : 31] -Input [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] -Keys [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Keys [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] +Results [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] (84) Exchange -Input [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] -Arguments: hashpartitioning(channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38, 5), ENSURE_REQUIREMENTS, [id=#116] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Arguments: hashpartitioning(channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34, 5), ENSURE_REQUIREMENTS, [plan_id=13] (85) HashAggregate [codegen id : 32] -Input [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] -Keys [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Keys [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] +Results [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] (86) TakeOrderedAndProject -Input [5]: [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] -Arguments: 100, [channel#39 ASC NULLS FIRST, return_rank#37 ASC NULLS FIRST, currency_rank#38 ASC NULLS FIRST, item#33 ASC NULLS FIRST], [channel#39, item#33, return_ratio#34, return_rank#37, currency_rank#38] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Arguments: 100, [channel#35 ASC NULLS FIRST, return_rank#33 ASC NULLS FIRST, currency_rank#34 ASC NULLS FIRST, item#30 ASC NULLS FIRST], [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] ===== Subqueries ===== @@ -482,29 +482,29 @@ BroadcastExchange (91) (87) Scan parquet default.date_dim -Output [3]: [d_date_sk#8, d_year#117, d_moy#118] +Output [3]: [d_date_sk#8, d_year#104, d_moy#105] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,12), IsNotNull(d_date_sk)] ReadSchema: struct (88) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#8, d_year#117, d_moy#118] +Input [3]: [d_date_sk#8, d_year#104, d_moy#105] (89) Filter [codegen id : 1] -Input [3]: [d_date_sk#8, d_year#117, d_moy#118] -Condition : ((((isnotnull(d_year#117) AND isnotnull(d_moy#118)) AND (d_year#117 = 2001)) AND (d_moy#118 = 12)) AND isnotnull(d_date_sk#8)) +Input [3]: [d_date_sk#8, d_year#104, d_moy#105] +Condition : ((((isnotnull(d_year#104) AND isnotnull(d_moy#105)) AND (d_year#104 = 2001)) AND (d_moy#105 = 12)) AND isnotnull(d_date_sk#8)) (90) Project [codegen id : 1] Output [1]: [d_date_sk#8] -Input [3]: [d_date_sk#8, d_year#117, d_moy#118] +Input [3]: [d_date_sk#8, d_year#104, d_moy#105] (91) BroadcastExchange Input [1]: [d_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#119] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=14] -Subquery:2 Hosting operator id = 28 Hosting Expression = cs_sold_date_sk#45 IN dynamicpruning#7 +Subquery:2 Hosting operator id = 28 Hosting Expression = cs_sold_date_sk#41 IN dynamicpruning#7 -Subquery:3 Hosting operator id = 55 Hosting Expression = ss_sold_date_sk#83 IN dynamicpruning#7 +Subquery:3 Hosting operator id = 55 Hosting Expression = ss_sold_date_sk#75 IN dynamicpruning#7 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q49/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q49/explain.txt index 657a1a1f358c6..b6cfd8a096c8c 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q49/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q49/explain.txt @@ -99,332 +99,332 @@ Input [6]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_ne (5) BroadcastExchange Input [5]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [plan_id=1] (6) Scan parquet default.web_returns -Output [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] +Output [5]: [wr_item_sk#8, wr_order_number#9, wr_return_quantity#10, wr_return_amt#11, wr_returned_date_sk#12] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_return_amt), GreaterThan(wr_return_amt,10000.00), IsNotNull(wr_order_number), IsNotNull(wr_item_sk)] ReadSchema: struct (7) ColumnarToRow -Input [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] +Input [5]: [wr_item_sk#8, wr_order_number#9, wr_return_quantity#10, wr_return_amt#11, wr_returned_date_sk#12] (8) Filter -Input [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] -Condition : (((isnotnull(wr_return_amt#12) AND (wr_return_amt#12 > 10000.00)) AND isnotnull(wr_order_number#10)) AND isnotnull(wr_item_sk#9)) +Input [5]: [wr_item_sk#8, wr_order_number#9, wr_return_quantity#10, wr_return_amt#11, wr_returned_date_sk#12] +Condition : (((isnotnull(wr_return_amt#11) AND (wr_return_amt#11 > 10000.00)) AND isnotnull(wr_order_number#9)) AND isnotnull(wr_item_sk#8)) (9) Project -Output [4]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12] -Input [5]: [wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12, wr_returned_date_sk#13] +Output [4]: [wr_item_sk#8, wr_order_number#9, wr_return_quantity#10, wr_return_amt#11] +Input [5]: [wr_item_sk#8, wr_order_number#9, wr_return_quantity#10, wr_return_amt#11, wr_returned_date_sk#12] (10) BroadcastHashJoin [codegen id : 3] Left keys [2]: [ws_order_number#2, ws_item_sk#1] -Right keys [2]: [wr_order_number#10, wr_item_sk#9] +Right keys [2]: [wr_order_number#9, wr_item_sk#8] Join condition: None (11) Project [codegen id : 3] -Output [6]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_return_quantity#11, wr_return_amt#12] -Input [9]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_item_sk#9, wr_order_number#10, wr_return_quantity#11, wr_return_amt#12] +Output [6]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_return_quantity#10, wr_return_amt#11] +Input [9]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_item_sk#8, wr_order_number#9, wr_return_quantity#10, wr_return_amt#11] (12) ReusedExchange [Reuses operator id: 82] -Output [1]: [d_date_sk#14] +Output [1]: [d_date_sk#13] (13) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ws_sold_date_sk#6] -Right keys [1]: [d_date_sk#14] +Right keys [1]: [d_date_sk#13] Join condition: None (14) Project [codegen id : 3] -Output [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#11, wr_return_amt#12] -Input [7]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_return_quantity#11, wr_return_amt#12, d_date_sk#14] +Output [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#10, wr_return_amt#11] +Input [7]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_return_quantity#10, wr_return_amt#11, d_date_sk#13] (15) HashAggregate [codegen id : 3] -Input [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#11, wr_return_amt#12] +Input [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#10, wr_return_amt#11] Keys [1]: [ws_item_sk#1] -Functions [4]: [partial_sum(coalesce(wr_return_quantity#11, 0)), partial_sum(coalesce(ws_quantity#3, 0)), partial_sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] -Aggregate Attributes [6]: [sum#15, sum#16, sum#17, isEmpty#18, sum#19, isEmpty#20] -Results [7]: [ws_item_sk#1, sum#21, sum#22, sum#23, isEmpty#24, sum#25, isEmpty#26] +Functions [4]: [partial_sum(coalesce(wr_return_quantity#10, 0)), partial_sum(coalesce(ws_quantity#3, 0)), partial_sum(coalesce(cast(wr_return_amt#11 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] +Aggregate Attributes [6]: [sum#14, sum#15, sum#16, isEmpty#17, sum#18, isEmpty#19] +Results [7]: [ws_item_sk#1, sum#20, sum#21, sum#22, isEmpty#23, sum#24, isEmpty#25] (16) Exchange -Input [7]: [ws_item_sk#1, sum#21, sum#22, sum#23, isEmpty#24, sum#25, isEmpty#26] -Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [7]: [ws_item_sk#1, sum#20, sum#21, sum#22, isEmpty#23, sum#24, isEmpty#25] +Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (17) HashAggregate [codegen id : 4] -Input [7]: [ws_item_sk#1, sum#21, sum#22, sum#23, isEmpty#24, sum#25, isEmpty#26] +Input [7]: [ws_item_sk#1, sum#20, sum#21, sum#22, isEmpty#23, sum#24, isEmpty#25] Keys [1]: [ws_item_sk#1] -Functions [4]: [sum(coalesce(wr_return_quantity#11, 0)), sum(coalesce(ws_quantity#3, 0)), sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00)), sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] -Aggregate Attributes [4]: [sum(coalesce(wr_return_quantity#11, 0))#28, sum(coalesce(ws_quantity#3, 0))#29, sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00))#30, sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#31] -Results [3]: [ws_item_sk#1 AS item#32, CheckOverflow((promote_precision(cast(sum(coalesce(wr_return_quantity#11, 0))#28 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ws_quantity#3, 0))#29 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#33, CheckOverflow((promote_precision(cast(sum(coalesce(cast(wr_return_amt#12 as decimal(12,2)), 0.00))#30 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#31 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#34] +Functions [4]: [sum(coalesce(wr_return_quantity#10, 0)), sum(coalesce(ws_quantity#3, 0)), sum(coalesce(cast(wr_return_amt#11 as decimal(12,2)), 0.00)), sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))] +Aggregate Attributes [4]: [sum(coalesce(wr_return_quantity#10, 0))#26, sum(coalesce(ws_quantity#3, 0))#27, sum(coalesce(cast(wr_return_amt#11 as decimal(12,2)), 0.00))#28, sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#29] +Results [3]: [ws_item_sk#1 AS item#30, CheckOverflow((promote_precision(cast(sum(coalesce(wr_return_quantity#10, 0))#26 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ws_quantity#3, 0))#27 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#31, CheckOverflow((promote_precision(cast(sum(coalesce(cast(wr_return_amt#11 as decimal(12,2)), 0.00))#28 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))#29 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#32] (18) Exchange -Input [3]: [item#32, return_ratio#33, currency_ratio#34] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#35] +Input [3]: [item#30, return_ratio#31, currency_ratio#32] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 5] -Input [3]: [item#32, return_ratio#33, currency_ratio#34] -Arguments: [return_ratio#33 ASC NULLS FIRST], false, 0 +Input [3]: [item#30, return_ratio#31, currency_ratio#32] +Arguments: [return_ratio#31 ASC NULLS FIRST], false, 0 (20) Window -Input [3]: [item#32, return_ratio#33, currency_ratio#34] -Arguments: [rank(return_ratio#33) windowspecdefinition(return_ratio#33 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#36], [return_ratio#33 ASC NULLS FIRST] +Input [3]: [item#30, return_ratio#31, currency_ratio#32] +Arguments: [rank(return_ratio#31) windowspecdefinition(return_ratio#31 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#33], [return_ratio#31 ASC NULLS FIRST] (21) Sort [codegen id : 6] -Input [4]: [item#32, return_ratio#33, currency_ratio#34, return_rank#36] -Arguments: [currency_ratio#34 ASC NULLS FIRST], false, 0 +Input [4]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33] +Arguments: [currency_ratio#32 ASC NULLS FIRST], false, 0 (22) Window -Input [4]: [item#32, return_ratio#33, currency_ratio#34, return_rank#36] -Arguments: [rank(currency_ratio#34) windowspecdefinition(currency_ratio#34 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#37], [currency_ratio#34 ASC NULLS FIRST] +Input [4]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33] +Arguments: [rank(currency_ratio#32) windowspecdefinition(currency_ratio#32 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#34], [currency_ratio#32 ASC NULLS FIRST] (23) Filter [codegen id : 7] -Input [5]: [item#32, return_ratio#33, currency_ratio#34, return_rank#36, currency_rank#37] -Condition : ((return_rank#36 <= 10) OR (currency_rank#37 <= 10)) +Input [5]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33, currency_rank#34] +Condition : ((return_rank#33 <= 10) OR (currency_rank#34 <= 10)) (24) Project [codegen id : 7] -Output [5]: [web AS channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] -Input [5]: [item#32, return_ratio#33, currency_ratio#34, return_rank#36, currency_rank#37] +Output [5]: [web AS channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Input [5]: [item#30, return_ratio#31, currency_ratio#32, return_rank#33, currency_rank#34] (25) Scan parquet default.catalog_sales -Output [6]: [cs_item_sk#39, cs_order_number#40, cs_quantity#41, cs_net_paid#42, cs_net_profit#43, cs_sold_date_sk#44] +Output [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#44), dynamicpruningexpression(cs_sold_date_sk#44 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(cs_sold_date_sk#41), dynamicpruningexpression(cs_sold_date_sk#41 IN dynamicpruning#7)] PushedFilters: [IsNotNull(cs_net_profit), IsNotNull(cs_net_paid), IsNotNull(cs_quantity), GreaterThan(cs_net_profit,1.00), GreaterThan(cs_net_paid,0.00), GreaterThan(cs_quantity,0), IsNotNull(cs_order_number), IsNotNull(cs_item_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 8] -Input [6]: [cs_item_sk#39, cs_order_number#40, cs_quantity#41, cs_net_paid#42, cs_net_profit#43, cs_sold_date_sk#44] +Input [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] (27) Filter [codegen id : 8] -Input [6]: [cs_item_sk#39, cs_order_number#40, cs_quantity#41, cs_net_paid#42, cs_net_profit#43, cs_sold_date_sk#44] -Condition : (((((((isnotnull(cs_net_profit#43) AND isnotnull(cs_net_paid#42)) AND isnotnull(cs_quantity#41)) AND (cs_net_profit#43 > 1.00)) AND (cs_net_paid#42 > 0.00)) AND (cs_quantity#41 > 0)) AND isnotnull(cs_order_number#40)) AND isnotnull(cs_item_sk#39)) +Input [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] +Condition : (((((((isnotnull(cs_net_profit#40) AND isnotnull(cs_net_paid#39)) AND isnotnull(cs_quantity#38)) AND (cs_net_profit#40 > 1.00)) AND (cs_net_paid#39 > 0.00)) AND (cs_quantity#38 > 0)) AND isnotnull(cs_order_number#37)) AND isnotnull(cs_item_sk#36)) (28) Project [codegen id : 8] -Output [5]: [cs_item_sk#39, cs_order_number#40, cs_quantity#41, cs_net_paid#42, cs_sold_date_sk#44] -Input [6]: [cs_item_sk#39, cs_order_number#40, cs_quantity#41, cs_net_paid#42, cs_net_profit#43, cs_sold_date_sk#44] +Output [5]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_sold_date_sk#41] +Input [6]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_net_profit#40, cs_sold_date_sk#41] (29) BroadcastExchange -Input [5]: [cs_item_sk#39, cs_order_number#40, cs_quantity#41, cs_net_paid#42, cs_sold_date_sk#44] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [id=#45] +Input [5]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_sold_date_sk#41] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [plan_id=4] (30) Scan parquet default.catalog_returns -Output [5]: [cr_item_sk#46, cr_order_number#47, cr_return_quantity#48, cr_return_amount#49, cr_returned_date_sk#50] +Output [5]: [cr_item_sk#42, cr_order_number#43, cr_return_quantity#44, cr_return_amount#45, cr_returned_date_sk#46] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_return_amount), GreaterThan(cr_return_amount,10000.00), IsNotNull(cr_order_number), IsNotNull(cr_item_sk)] ReadSchema: struct (31) ColumnarToRow -Input [5]: [cr_item_sk#46, cr_order_number#47, cr_return_quantity#48, cr_return_amount#49, cr_returned_date_sk#50] +Input [5]: [cr_item_sk#42, cr_order_number#43, cr_return_quantity#44, cr_return_amount#45, cr_returned_date_sk#46] (32) Filter -Input [5]: [cr_item_sk#46, cr_order_number#47, cr_return_quantity#48, cr_return_amount#49, cr_returned_date_sk#50] -Condition : (((isnotnull(cr_return_amount#49) AND (cr_return_amount#49 > 10000.00)) AND isnotnull(cr_order_number#47)) AND isnotnull(cr_item_sk#46)) +Input [5]: [cr_item_sk#42, cr_order_number#43, cr_return_quantity#44, cr_return_amount#45, cr_returned_date_sk#46] +Condition : (((isnotnull(cr_return_amount#45) AND (cr_return_amount#45 > 10000.00)) AND isnotnull(cr_order_number#43)) AND isnotnull(cr_item_sk#42)) (33) Project -Output [4]: [cr_item_sk#46, cr_order_number#47, cr_return_quantity#48, cr_return_amount#49] -Input [5]: [cr_item_sk#46, cr_order_number#47, cr_return_quantity#48, cr_return_amount#49, cr_returned_date_sk#50] +Output [4]: [cr_item_sk#42, cr_order_number#43, cr_return_quantity#44, cr_return_amount#45] +Input [5]: [cr_item_sk#42, cr_order_number#43, cr_return_quantity#44, cr_return_amount#45, cr_returned_date_sk#46] (34) BroadcastHashJoin [codegen id : 10] -Left keys [2]: [cs_order_number#40, cs_item_sk#39] -Right keys [2]: [cr_order_number#47, cr_item_sk#46] +Left keys [2]: [cs_order_number#37, cs_item_sk#36] +Right keys [2]: [cr_order_number#43, cr_item_sk#42] Join condition: None (35) Project [codegen id : 10] -Output [6]: [cs_item_sk#39, cs_quantity#41, cs_net_paid#42, cs_sold_date_sk#44, cr_return_quantity#48, cr_return_amount#49] -Input [9]: [cs_item_sk#39, cs_order_number#40, cs_quantity#41, cs_net_paid#42, cs_sold_date_sk#44, cr_item_sk#46, cr_order_number#47, cr_return_quantity#48, cr_return_amount#49] +Output [6]: [cs_item_sk#36, cs_quantity#38, cs_net_paid#39, cs_sold_date_sk#41, cr_return_quantity#44, cr_return_amount#45] +Input [9]: [cs_item_sk#36, cs_order_number#37, cs_quantity#38, cs_net_paid#39, cs_sold_date_sk#41, cr_item_sk#42, cr_order_number#43, cr_return_quantity#44, cr_return_amount#45] (36) ReusedExchange [Reuses operator id: 82] -Output [1]: [d_date_sk#51] +Output [1]: [d_date_sk#47] (37) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cs_sold_date_sk#44] -Right keys [1]: [d_date_sk#51] +Left keys [1]: [cs_sold_date_sk#41] +Right keys [1]: [d_date_sk#47] Join condition: None (38) Project [codegen id : 10] -Output [5]: [cs_item_sk#39, cs_quantity#41, cs_net_paid#42, cr_return_quantity#48, cr_return_amount#49] -Input [7]: [cs_item_sk#39, cs_quantity#41, cs_net_paid#42, cs_sold_date_sk#44, cr_return_quantity#48, cr_return_amount#49, d_date_sk#51] +Output [5]: [cs_item_sk#36, cs_quantity#38, cs_net_paid#39, cr_return_quantity#44, cr_return_amount#45] +Input [7]: [cs_item_sk#36, cs_quantity#38, cs_net_paid#39, cs_sold_date_sk#41, cr_return_quantity#44, cr_return_amount#45, d_date_sk#47] (39) HashAggregate [codegen id : 10] -Input [5]: [cs_item_sk#39, cs_quantity#41, cs_net_paid#42, cr_return_quantity#48, cr_return_amount#49] -Keys [1]: [cs_item_sk#39] -Functions [4]: [partial_sum(coalesce(cr_return_quantity#48, 0)), partial_sum(coalesce(cs_quantity#41, 0)), partial_sum(coalesce(cast(cr_return_amount#49 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(cs_net_paid#42 as decimal(12,2)), 0.00))] -Aggregate Attributes [6]: [sum#52, sum#53, sum#54, isEmpty#55, sum#56, isEmpty#57] -Results [7]: [cs_item_sk#39, sum#58, sum#59, sum#60, isEmpty#61, sum#62, isEmpty#63] +Input [5]: [cs_item_sk#36, cs_quantity#38, cs_net_paid#39, cr_return_quantity#44, cr_return_amount#45] +Keys [1]: [cs_item_sk#36] +Functions [4]: [partial_sum(coalesce(cr_return_quantity#44, 0)), partial_sum(coalesce(cs_quantity#38, 0)), partial_sum(coalesce(cast(cr_return_amount#45 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))] +Aggregate Attributes [6]: [sum#48, sum#49, sum#50, isEmpty#51, sum#52, isEmpty#53] +Results [7]: [cs_item_sk#36, sum#54, sum#55, sum#56, isEmpty#57, sum#58, isEmpty#59] (40) Exchange -Input [7]: [cs_item_sk#39, sum#58, sum#59, sum#60, isEmpty#61, sum#62, isEmpty#63] -Arguments: hashpartitioning(cs_item_sk#39, 5), ENSURE_REQUIREMENTS, [id=#64] +Input [7]: [cs_item_sk#36, sum#54, sum#55, sum#56, isEmpty#57, sum#58, isEmpty#59] +Arguments: hashpartitioning(cs_item_sk#36, 5), ENSURE_REQUIREMENTS, [plan_id=5] (41) HashAggregate [codegen id : 11] -Input [7]: [cs_item_sk#39, sum#58, sum#59, sum#60, isEmpty#61, sum#62, isEmpty#63] -Keys [1]: [cs_item_sk#39] -Functions [4]: [sum(coalesce(cr_return_quantity#48, 0)), sum(coalesce(cs_quantity#41, 0)), sum(coalesce(cast(cr_return_amount#49 as decimal(12,2)), 0.00)), sum(coalesce(cast(cs_net_paid#42 as decimal(12,2)), 0.00))] -Aggregate Attributes [4]: [sum(coalesce(cr_return_quantity#48, 0))#65, sum(coalesce(cs_quantity#41, 0))#66, sum(coalesce(cast(cr_return_amount#49 as decimal(12,2)), 0.00))#67, sum(coalesce(cast(cs_net_paid#42 as decimal(12,2)), 0.00))#68] -Results [3]: [cs_item_sk#39 AS item#69, CheckOverflow((promote_precision(cast(sum(coalesce(cr_return_quantity#48, 0))#65 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cs_quantity#41, 0))#66 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#70, CheckOverflow((promote_precision(cast(sum(coalesce(cast(cr_return_amount#49 as decimal(12,2)), 0.00))#67 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(cs_net_paid#42 as decimal(12,2)), 0.00))#68 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#71] +Input [7]: [cs_item_sk#36, sum#54, sum#55, sum#56, isEmpty#57, sum#58, isEmpty#59] +Keys [1]: [cs_item_sk#36] +Functions [4]: [sum(coalesce(cr_return_quantity#44, 0)), sum(coalesce(cs_quantity#38, 0)), sum(coalesce(cast(cr_return_amount#45 as decimal(12,2)), 0.00)), sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))] +Aggregate Attributes [4]: [sum(coalesce(cr_return_quantity#44, 0))#60, sum(coalesce(cs_quantity#38, 0))#61, sum(coalesce(cast(cr_return_amount#45 as decimal(12,2)), 0.00))#62, sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))#63] +Results [3]: [cs_item_sk#36 AS item#64, CheckOverflow((promote_precision(cast(sum(coalesce(cr_return_quantity#44, 0))#60 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cs_quantity#38, 0))#61 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#65, CheckOverflow((promote_precision(cast(sum(coalesce(cast(cr_return_amount#45 as decimal(12,2)), 0.00))#62 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(cs_net_paid#39 as decimal(12,2)), 0.00))#63 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#66] (42) Exchange -Input [3]: [item#69, return_ratio#70, currency_ratio#71] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#72] +Input [3]: [item#64, return_ratio#65, currency_ratio#66] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6] (43) Sort [codegen id : 12] -Input [3]: [item#69, return_ratio#70, currency_ratio#71] -Arguments: [return_ratio#70 ASC NULLS FIRST], false, 0 +Input [3]: [item#64, return_ratio#65, currency_ratio#66] +Arguments: [return_ratio#65 ASC NULLS FIRST], false, 0 (44) Window -Input [3]: [item#69, return_ratio#70, currency_ratio#71] -Arguments: [rank(return_ratio#70) windowspecdefinition(return_ratio#70 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#73], [return_ratio#70 ASC NULLS FIRST] +Input [3]: [item#64, return_ratio#65, currency_ratio#66] +Arguments: [rank(return_ratio#65) windowspecdefinition(return_ratio#65 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#67], [return_ratio#65 ASC NULLS FIRST] (45) Sort [codegen id : 13] -Input [4]: [item#69, return_ratio#70, currency_ratio#71, return_rank#73] -Arguments: [currency_ratio#71 ASC NULLS FIRST], false, 0 +Input [4]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67] +Arguments: [currency_ratio#66 ASC NULLS FIRST], false, 0 (46) Window -Input [4]: [item#69, return_ratio#70, currency_ratio#71, return_rank#73] -Arguments: [rank(currency_ratio#71) windowspecdefinition(currency_ratio#71 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#74], [currency_ratio#71 ASC NULLS FIRST] +Input [4]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67] +Arguments: [rank(currency_ratio#66) windowspecdefinition(currency_ratio#66 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#68], [currency_ratio#66 ASC NULLS FIRST] (47) Filter [codegen id : 14] -Input [5]: [item#69, return_ratio#70, currency_ratio#71, return_rank#73, currency_rank#74] -Condition : ((return_rank#73 <= 10) OR (currency_rank#74 <= 10)) +Input [5]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67, currency_rank#68] +Condition : ((return_rank#67 <= 10) OR (currency_rank#68 <= 10)) (48) Project [codegen id : 14] -Output [5]: [catalog AS channel#75, item#69, return_ratio#70, return_rank#73, currency_rank#74] -Input [5]: [item#69, return_ratio#70, currency_ratio#71, return_rank#73, currency_rank#74] +Output [5]: [catalog AS channel#69, item#64, return_ratio#65, return_rank#67, currency_rank#68] +Input [5]: [item#64, return_ratio#65, currency_ratio#66, return_rank#67, currency_rank#68] (49) Scan parquet default.store_sales -Output [6]: [ss_item_sk#76, ss_ticket_number#77, ss_quantity#78, ss_net_paid#79, ss_net_profit#80, ss_sold_date_sk#81] +Output [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#81), dynamicpruningexpression(ss_sold_date_sk#81 IN dynamicpruning#7)] +PartitionFilters: [isnotnull(ss_sold_date_sk#75), dynamicpruningexpression(ss_sold_date_sk#75 IN dynamicpruning#7)] PushedFilters: [IsNotNull(ss_net_profit), IsNotNull(ss_net_paid), IsNotNull(ss_quantity), GreaterThan(ss_net_profit,1.00), GreaterThan(ss_net_paid,0.00), GreaterThan(ss_quantity,0), IsNotNull(ss_ticket_number), IsNotNull(ss_item_sk)] ReadSchema: struct (50) ColumnarToRow [codegen id : 15] -Input [6]: [ss_item_sk#76, ss_ticket_number#77, ss_quantity#78, ss_net_paid#79, ss_net_profit#80, ss_sold_date_sk#81] +Input [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] (51) Filter [codegen id : 15] -Input [6]: [ss_item_sk#76, ss_ticket_number#77, ss_quantity#78, ss_net_paid#79, ss_net_profit#80, ss_sold_date_sk#81] -Condition : (((((((isnotnull(ss_net_profit#80) AND isnotnull(ss_net_paid#79)) AND isnotnull(ss_quantity#78)) AND (ss_net_profit#80 > 1.00)) AND (ss_net_paid#79 > 0.00)) AND (ss_quantity#78 > 0)) AND isnotnull(ss_ticket_number#77)) AND isnotnull(ss_item_sk#76)) +Input [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] +Condition : (((((((isnotnull(ss_net_profit#74) AND isnotnull(ss_net_paid#73)) AND isnotnull(ss_quantity#72)) AND (ss_net_profit#74 > 1.00)) AND (ss_net_paid#73 > 0.00)) AND (ss_quantity#72 > 0)) AND isnotnull(ss_ticket_number#71)) AND isnotnull(ss_item_sk#70)) (52) Project [codegen id : 15] -Output [5]: [ss_item_sk#76, ss_ticket_number#77, ss_quantity#78, ss_net_paid#79, ss_sold_date_sk#81] -Input [6]: [ss_item_sk#76, ss_ticket_number#77, ss_quantity#78, ss_net_paid#79, ss_net_profit#80, ss_sold_date_sk#81] +Output [5]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_sold_date_sk#75] +Input [6]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_net_profit#74, ss_sold_date_sk#75] (53) BroadcastExchange -Input [5]: [ss_item_sk#76, ss_ticket_number#77, ss_quantity#78, ss_net_paid#79, ss_sold_date_sk#81] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [id=#82] +Input [5]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_sold_date_sk#75] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, true] as bigint), 32) | (cast(input[0, int, true] as bigint) & 4294967295))),false), [plan_id=7] (54) Scan parquet default.store_returns -Output [5]: [sr_item_sk#83, sr_ticket_number#84, sr_return_quantity#85, sr_return_amt#86, sr_returned_date_sk#87] +Output [5]: [sr_item_sk#76, sr_ticket_number#77, sr_return_quantity#78, sr_return_amt#79, sr_returned_date_sk#80] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_return_amt), GreaterThan(sr_return_amt,10000.00), IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct (55) ColumnarToRow -Input [5]: [sr_item_sk#83, sr_ticket_number#84, sr_return_quantity#85, sr_return_amt#86, sr_returned_date_sk#87] +Input [5]: [sr_item_sk#76, sr_ticket_number#77, sr_return_quantity#78, sr_return_amt#79, sr_returned_date_sk#80] (56) Filter -Input [5]: [sr_item_sk#83, sr_ticket_number#84, sr_return_quantity#85, sr_return_amt#86, sr_returned_date_sk#87] -Condition : (((isnotnull(sr_return_amt#86) AND (sr_return_amt#86 > 10000.00)) AND isnotnull(sr_ticket_number#84)) AND isnotnull(sr_item_sk#83)) +Input [5]: [sr_item_sk#76, sr_ticket_number#77, sr_return_quantity#78, sr_return_amt#79, sr_returned_date_sk#80] +Condition : (((isnotnull(sr_return_amt#79) AND (sr_return_amt#79 > 10000.00)) AND isnotnull(sr_ticket_number#77)) AND isnotnull(sr_item_sk#76)) (57) Project -Output [4]: [sr_item_sk#83, sr_ticket_number#84, sr_return_quantity#85, sr_return_amt#86] -Input [5]: [sr_item_sk#83, sr_ticket_number#84, sr_return_quantity#85, sr_return_amt#86, sr_returned_date_sk#87] +Output [4]: [sr_item_sk#76, sr_ticket_number#77, sr_return_quantity#78, sr_return_amt#79] +Input [5]: [sr_item_sk#76, sr_ticket_number#77, sr_return_quantity#78, sr_return_amt#79, sr_returned_date_sk#80] (58) BroadcastHashJoin [codegen id : 17] -Left keys [2]: [ss_ticket_number#77, ss_item_sk#76] -Right keys [2]: [sr_ticket_number#84, sr_item_sk#83] +Left keys [2]: [ss_ticket_number#71, ss_item_sk#70] +Right keys [2]: [sr_ticket_number#77, sr_item_sk#76] Join condition: None (59) Project [codegen id : 17] -Output [6]: [ss_item_sk#76, ss_quantity#78, ss_net_paid#79, ss_sold_date_sk#81, sr_return_quantity#85, sr_return_amt#86] -Input [9]: [ss_item_sk#76, ss_ticket_number#77, ss_quantity#78, ss_net_paid#79, ss_sold_date_sk#81, sr_item_sk#83, sr_ticket_number#84, sr_return_quantity#85, sr_return_amt#86] +Output [6]: [ss_item_sk#70, ss_quantity#72, ss_net_paid#73, ss_sold_date_sk#75, sr_return_quantity#78, sr_return_amt#79] +Input [9]: [ss_item_sk#70, ss_ticket_number#71, ss_quantity#72, ss_net_paid#73, ss_sold_date_sk#75, sr_item_sk#76, sr_ticket_number#77, sr_return_quantity#78, sr_return_amt#79] (60) ReusedExchange [Reuses operator id: 82] -Output [1]: [d_date_sk#88] +Output [1]: [d_date_sk#81] (61) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ss_sold_date_sk#81] -Right keys [1]: [d_date_sk#88] +Left keys [1]: [ss_sold_date_sk#75] +Right keys [1]: [d_date_sk#81] Join condition: None (62) Project [codegen id : 17] -Output [5]: [ss_item_sk#76, ss_quantity#78, ss_net_paid#79, sr_return_quantity#85, sr_return_amt#86] -Input [7]: [ss_item_sk#76, ss_quantity#78, ss_net_paid#79, ss_sold_date_sk#81, sr_return_quantity#85, sr_return_amt#86, d_date_sk#88] +Output [5]: [ss_item_sk#70, ss_quantity#72, ss_net_paid#73, sr_return_quantity#78, sr_return_amt#79] +Input [7]: [ss_item_sk#70, ss_quantity#72, ss_net_paid#73, ss_sold_date_sk#75, sr_return_quantity#78, sr_return_amt#79, d_date_sk#81] (63) HashAggregate [codegen id : 17] -Input [5]: [ss_item_sk#76, ss_quantity#78, ss_net_paid#79, sr_return_quantity#85, sr_return_amt#86] -Keys [1]: [ss_item_sk#76] -Functions [4]: [partial_sum(coalesce(sr_return_quantity#85, 0)), partial_sum(coalesce(ss_quantity#78, 0)), partial_sum(coalesce(cast(sr_return_amt#86 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ss_net_paid#79 as decimal(12,2)), 0.00))] -Aggregate Attributes [6]: [sum#89, sum#90, sum#91, isEmpty#92, sum#93, isEmpty#94] -Results [7]: [ss_item_sk#76, sum#95, sum#96, sum#97, isEmpty#98, sum#99, isEmpty#100] +Input [5]: [ss_item_sk#70, ss_quantity#72, ss_net_paid#73, sr_return_quantity#78, sr_return_amt#79] +Keys [1]: [ss_item_sk#70] +Functions [4]: [partial_sum(coalesce(sr_return_quantity#78, 0)), partial_sum(coalesce(ss_quantity#72, 0)), partial_sum(coalesce(cast(sr_return_amt#79 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))] +Aggregate Attributes [6]: [sum#82, sum#83, sum#84, isEmpty#85, sum#86, isEmpty#87] +Results [7]: [ss_item_sk#70, sum#88, sum#89, sum#90, isEmpty#91, sum#92, isEmpty#93] (64) Exchange -Input [7]: [ss_item_sk#76, sum#95, sum#96, sum#97, isEmpty#98, sum#99, isEmpty#100] -Arguments: hashpartitioning(ss_item_sk#76, 5), ENSURE_REQUIREMENTS, [id=#101] +Input [7]: [ss_item_sk#70, sum#88, sum#89, sum#90, isEmpty#91, sum#92, isEmpty#93] +Arguments: hashpartitioning(ss_item_sk#70, 5), ENSURE_REQUIREMENTS, [plan_id=8] (65) HashAggregate [codegen id : 18] -Input [7]: [ss_item_sk#76, sum#95, sum#96, sum#97, isEmpty#98, sum#99, isEmpty#100] -Keys [1]: [ss_item_sk#76] -Functions [4]: [sum(coalesce(sr_return_quantity#85, 0)), sum(coalesce(ss_quantity#78, 0)), sum(coalesce(cast(sr_return_amt#86 as decimal(12,2)), 0.00)), sum(coalesce(cast(ss_net_paid#79 as decimal(12,2)), 0.00))] -Aggregate Attributes [4]: [sum(coalesce(sr_return_quantity#85, 0))#102, sum(coalesce(ss_quantity#78, 0))#103, sum(coalesce(cast(sr_return_amt#86 as decimal(12,2)), 0.00))#104, sum(coalesce(cast(ss_net_paid#79 as decimal(12,2)), 0.00))#105] -Results [3]: [ss_item_sk#76 AS item#106, CheckOverflow((promote_precision(cast(sum(coalesce(sr_return_quantity#85, 0))#102 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ss_quantity#78, 0))#103 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#107, CheckOverflow((promote_precision(cast(sum(coalesce(cast(sr_return_amt#86 as decimal(12,2)), 0.00))#104 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ss_net_paid#79 as decimal(12,2)), 0.00))#105 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#108] +Input [7]: [ss_item_sk#70, sum#88, sum#89, sum#90, isEmpty#91, sum#92, isEmpty#93] +Keys [1]: [ss_item_sk#70] +Functions [4]: [sum(coalesce(sr_return_quantity#78, 0)), sum(coalesce(ss_quantity#72, 0)), sum(coalesce(cast(sr_return_amt#79 as decimal(12,2)), 0.00)), sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))] +Aggregate Attributes [4]: [sum(coalesce(sr_return_quantity#78, 0))#94, sum(coalesce(ss_quantity#72, 0))#95, sum(coalesce(cast(sr_return_amt#79 as decimal(12,2)), 0.00))#96, sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))#97] +Results [3]: [ss_item_sk#70 AS item#98, CheckOverflow((promote_precision(cast(sum(coalesce(sr_return_quantity#78, 0))#94 as decimal(15,4))) / promote_precision(cast(sum(coalesce(ss_quantity#72, 0))#95 as decimal(15,4)))), DecimalType(35,20)) AS return_ratio#99, CheckOverflow((promote_precision(cast(sum(coalesce(cast(sr_return_amt#79 as decimal(12,2)), 0.00))#96 as decimal(15,4))) / promote_precision(cast(sum(coalesce(cast(ss_net_paid#73 as decimal(12,2)), 0.00))#97 as decimal(15,4)))), DecimalType(35,20)) AS currency_ratio#100] (66) Exchange -Input [3]: [item#106, return_ratio#107, currency_ratio#108] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#109] +Input [3]: [item#98, return_ratio#99, currency_ratio#100] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=9] (67) Sort [codegen id : 19] -Input [3]: [item#106, return_ratio#107, currency_ratio#108] -Arguments: [return_ratio#107 ASC NULLS FIRST], false, 0 +Input [3]: [item#98, return_ratio#99, currency_ratio#100] +Arguments: [return_ratio#99 ASC NULLS FIRST], false, 0 (68) Window -Input [3]: [item#106, return_ratio#107, currency_ratio#108] -Arguments: [rank(return_ratio#107) windowspecdefinition(return_ratio#107 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#110], [return_ratio#107 ASC NULLS FIRST] +Input [3]: [item#98, return_ratio#99, currency_ratio#100] +Arguments: [rank(return_ratio#99) windowspecdefinition(return_ratio#99 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#101], [return_ratio#99 ASC NULLS FIRST] (69) Sort [codegen id : 20] -Input [4]: [item#106, return_ratio#107, currency_ratio#108, return_rank#110] -Arguments: [currency_ratio#108 ASC NULLS FIRST], false, 0 +Input [4]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101] +Arguments: [currency_ratio#100 ASC NULLS FIRST], false, 0 (70) Window -Input [4]: [item#106, return_ratio#107, currency_ratio#108, return_rank#110] -Arguments: [rank(currency_ratio#108) windowspecdefinition(currency_ratio#108 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#111], [currency_ratio#108 ASC NULLS FIRST] +Input [4]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101] +Arguments: [rank(currency_ratio#100) windowspecdefinition(currency_ratio#100 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#102], [currency_ratio#100 ASC NULLS FIRST] (71) Filter [codegen id : 21] -Input [5]: [item#106, return_ratio#107, currency_ratio#108, return_rank#110, currency_rank#111] -Condition : ((return_rank#110 <= 10) OR (currency_rank#111 <= 10)) +Input [5]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101, currency_rank#102] +Condition : ((return_rank#101 <= 10) OR (currency_rank#102 <= 10)) (72) Project [codegen id : 21] -Output [5]: [store AS channel#112, item#106, return_ratio#107, return_rank#110, currency_rank#111] -Input [5]: [item#106, return_ratio#107, currency_ratio#108, return_rank#110, currency_rank#111] +Output [5]: [store AS channel#103, item#98, return_ratio#99, return_rank#101, currency_rank#102] +Input [5]: [item#98, return_ratio#99, currency_ratio#100, return_rank#101, currency_rank#102] (73) Union (74) HashAggregate [codegen id : 22] -Input [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] -Keys [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Keys [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] +Results [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] (75) Exchange -Input [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] -Arguments: hashpartitioning(channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37, 5), ENSURE_REQUIREMENTS, [id=#113] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Arguments: hashpartitioning(channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34, 5), ENSURE_REQUIREMENTS, [plan_id=10] (76) HashAggregate [codegen id : 23] -Input [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] -Keys [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Keys [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] +Results [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] (77) TakeOrderedAndProject -Input [5]: [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] -Arguments: 100, [channel#38 ASC NULLS FIRST, return_rank#36 ASC NULLS FIRST, currency_rank#37 ASC NULLS FIRST, item#32 ASC NULLS FIRST], [channel#38, item#32, return_ratio#33, return_rank#36, currency_rank#37] +Input [5]: [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] +Arguments: 100, [channel#35 ASC NULLS FIRST, return_rank#33 ASC NULLS FIRST, currency_rank#34 ASC NULLS FIRST, item#30 ASC NULLS FIRST], [channel#35, item#30, return_ratio#31, return_rank#33, currency_rank#34] ===== Subqueries ===== @@ -437,29 +437,29 @@ BroadcastExchange (82) (78) Scan parquet default.date_dim -Output [3]: [d_date_sk#14, d_year#114, d_moy#115] +Output [3]: [d_date_sk#13, d_year#104, d_moy#105] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,12), IsNotNull(d_date_sk)] ReadSchema: struct (79) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#14, d_year#114, d_moy#115] +Input [3]: [d_date_sk#13, d_year#104, d_moy#105] (80) Filter [codegen id : 1] -Input [3]: [d_date_sk#14, d_year#114, d_moy#115] -Condition : ((((isnotnull(d_year#114) AND isnotnull(d_moy#115)) AND (d_year#114 = 2001)) AND (d_moy#115 = 12)) AND isnotnull(d_date_sk#14)) +Input [3]: [d_date_sk#13, d_year#104, d_moy#105] +Condition : ((((isnotnull(d_year#104) AND isnotnull(d_moy#105)) AND (d_year#104 = 2001)) AND (d_moy#105 = 12)) AND isnotnull(d_date_sk#13)) (81) Project [codegen id : 1] -Output [1]: [d_date_sk#14] -Input [3]: [d_date_sk#14, d_year#114, d_moy#115] +Output [1]: [d_date_sk#13] +Input [3]: [d_date_sk#13, d_year#104, d_moy#105] (82) BroadcastExchange -Input [1]: [d_date_sk#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#116] +Input [1]: [d_date_sk#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11] -Subquery:2 Hosting operator id = 25 Hosting Expression = cs_sold_date_sk#44 IN dynamicpruning#7 +Subquery:2 Hosting operator id = 25 Hosting Expression = cs_sold_date_sk#41 IN dynamicpruning#7 -Subquery:3 Hosting operator id = 49 Hosting Expression = ss_sold_date_sk#81 IN dynamicpruning#7 +Subquery:3 Hosting operator id = 49 Hosting Expression = ss_sold_date_sk#75 IN dynamicpruning#7 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q51a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q51a.sf100/explain.txt index 64111eef627d2..89749badaad68 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q51a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q51a.sf100/explain.txt @@ -107,286 +107,286 @@ Results [3]: [ws_item_sk#1, d_date#6, sum#8] (8) Exchange Input [3]: [ws_item_sk#1, d_date#6, sum#8] -Arguments: hashpartitioning(ws_item_sk#1, d_date#6, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ws_item_sk#1, d_date#6, 5), ENSURE_REQUIREMENTS, [plan_id=1] (9) HashAggregate [codegen id : 3] Input [3]: [ws_item_sk#1, d_date#6, sum#8] Keys [2]: [ws_item_sk#1, d_date#6] Functions [1]: [sum(UnscaledValue(ws_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_sales_price#2))#10] -Results [4]: [ws_item_sk#1 AS item_sk#11, d_date#6, MakeDecimal(sum(UnscaledValue(ws_sales_price#2))#10,17,2) AS sumws#12, ws_item_sk#1] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_sales_price#2))#9] +Results [4]: [ws_item_sk#1 AS item_sk#10, d_date#6, MakeDecimal(sum(UnscaledValue(ws_sales_price#2))#9,17,2) AS sumws#11, ws_item_sk#1] (10) Exchange -Input [4]: [item_sk#11, d_date#6, sumws#12, ws_item_sk#1] -Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [4]: [item_sk#10, d_date#6, sumws#11, ws_item_sk#1] +Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [4]: [item_sk#11, d_date#6, sumws#12, ws_item_sk#1] +Input [4]: [item_sk#10, d_date#6, sumws#11, ws_item_sk#1] Arguments: [ws_item_sk#1 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0 (12) Window -Input [4]: [item_sk#11, d_date#6, sumws#12, ws_item_sk#1] -Arguments: [row_number() windowspecdefinition(ws_item_sk#1, d_date#6 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#14], [ws_item_sk#1], [d_date#6 ASC NULLS FIRST] +Input [4]: [item_sk#10, d_date#6, sumws#11, ws_item_sk#1] +Arguments: [row_number() windowspecdefinition(ws_item_sk#1, d_date#6 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#12], [ws_item_sk#1], [d_date#6 ASC NULLS FIRST] (13) Project [codegen id : 5] -Output [4]: [item_sk#11, d_date#6, sumws#12, rk#14] -Input [5]: [item_sk#11, d_date#6, sumws#12, ws_item_sk#1, rk#14] +Output [4]: [item_sk#10, d_date#6, sumws#11, rk#12] +Input [5]: [item_sk#10, d_date#6, sumws#11, ws_item_sk#1, rk#12] (14) Exchange -Input [4]: [item_sk#11, d_date#6, sumws#12, rk#14] -Arguments: hashpartitioning(item_sk#11, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [item_sk#10, d_date#6, sumws#11, rk#12] +Arguments: hashpartitioning(item_sk#10, 5), ENSURE_REQUIREMENTS, [plan_id=3] (15) Sort [codegen id : 6] -Input [4]: [item_sk#11, d_date#6, sumws#12, rk#14] -Arguments: [item_sk#11 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#10, d_date#6, sumws#11, rk#12] +Arguments: [item_sk#10 ASC NULLS FIRST], false, 0 (16) ReusedExchange [Reuses operator id: 10] -Output [4]: [item_sk#11, d_date#16, sumws#12, ws_item_sk#17] +Output [4]: [item_sk#10, d_date#13, sumws#11, ws_item_sk#14] (17) Sort [codegen id : 10] -Input [4]: [item_sk#11, d_date#16, sumws#12, ws_item_sk#17] -Arguments: [ws_item_sk#17 ASC NULLS FIRST, d_date#16 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#10, d_date#13, sumws#11, ws_item_sk#14] +Arguments: [ws_item_sk#14 ASC NULLS FIRST, d_date#13 ASC NULLS FIRST], false, 0 (18) Window -Input [4]: [item_sk#11, d_date#16, sumws#12, ws_item_sk#17] -Arguments: [row_number() windowspecdefinition(ws_item_sk#17, d_date#16 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#18], [ws_item_sk#17], [d_date#16 ASC NULLS FIRST] +Input [4]: [item_sk#10, d_date#13, sumws#11, ws_item_sk#14] +Arguments: [row_number() windowspecdefinition(ws_item_sk#14, d_date#13 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#15], [ws_item_sk#14], [d_date#13 ASC NULLS FIRST] (19) Project [codegen id : 11] -Output [3]: [item_sk#11 AS item_sk#19, sumws#12 AS sumws#20, rk#18] -Input [5]: [item_sk#11, d_date#16, sumws#12, ws_item_sk#17, rk#18] +Output [3]: [item_sk#10 AS item_sk#16, sumws#11 AS sumws#17, rk#15] +Input [5]: [item_sk#10, d_date#13, sumws#11, ws_item_sk#14, rk#15] (20) Exchange -Input [3]: [item_sk#19, sumws#20, rk#18] -Arguments: hashpartitioning(item_sk#19, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [3]: [item_sk#16, sumws#17, rk#15] +Arguments: hashpartitioning(item_sk#16, 5), ENSURE_REQUIREMENTS, [plan_id=4] (21) Sort [codegen id : 12] -Input [3]: [item_sk#19, sumws#20, rk#18] -Arguments: [item_sk#19 ASC NULLS FIRST], false, 0 +Input [3]: [item_sk#16, sumws#17, rk#15] +Arguments: [item_sk#16 ASC NULLS FIRST], false, 0 (22) SortMergeJoin [codegen id : 13] -Left keys [1]: [item_sk#11] -Right keys [1]: [item_sk#19] -Join condition: (rk#14 >= rk#18) +Left keys [1]: [item_sk#10] +Right keys [1]: [item_sk#16] +Join condition: (rk#12 >= rk#15) (23) Project [codegen id : 13] -Output [4]: [item_sk#11, d_date#6, sumws#12, sumws#20] -Input [7]: [item_sk#11, d_date#6, sumws#12, rk#14, item_sk#19, sumws#20, rk#18] +Output [4]: [item_sk#10, d_date#6, sumws#11, sumws#17] +Input [7]: [item_sk#10, d_date#6, sumws#11, rk#12, item_sk#16, sumws#17, rk#15] (24) HashAggregate [codegen id : 13] -Input [4]: [item_sk#11, d_date#6, sumws#12, sumws#20] -Keys [3]: [item_sk#11, d_date#6, sumws#12] -Functions [1]: [partial_sum(sumws#20)] -Aggregate Attributes [2]: [sum#22, isEmpty#23] -Results [5]: [item_sk#11, d_date#6, sumws#12, sum#24, isEmpty#25] +Input [4]: [item_sk#10, d_date#6, sumws#11, sumws#17] +Keys [3]: [item_sk#10, d_date#6, sumws#11] +Functions [1]: [partial_sum(sumws#17)] +Aggregate Attributes [2]: [sum#18, isEmpty#19] +Results [5]: [item_sk#10, d_date#6, sumws#11, sum#20, isEmpty#21] (25) HashAggregate [codegen id : 13] -Input [5]: [item_sk#11, d_date#6, sumws#12, sum#24, isEmpty#25] -Keys [3]: [item_sk#11, d_date#6, sumws#12] -Functions [1]: [sum(sumws#20)] -Aggregate Attributes [1]: [sum(sumws#20)#26] -Results [3]: [item_sk#11, d_date#6, sum(sumws#20)#26 AS cume_sales#27] +Input [5]: [item_sk#10, d_date#6, sumws#11, sum#20, isEmpty#21] +Keys [3]: [item_sk#10, d_date#6, sumws#11] +Functions [1]: [sum(sumws#17)] +Aggregate Attributes [1]: [sum(sumws#17)#22] +Results [3]: [item_sk#10, d_date#6, sum(sumws#17)#22 AS cume_sales#23] (26) Exchange -Input [3]: [item_sk#11, d_date#6, cume_sales#27] -Arguments: hashpartitioning(item_sk#11, d_date#6, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [3]: [item_sk#10, d_date#6, cume_sales#23] +Arguments: hashpartitioning(item_sk#10, d_date#6, 5), ENSURE_REQUIREMENTS, [plan_id=5] (27) Sort [codegen id : 14] -Input [3]: [item_sk#11, d_date#6, cume_sales#27] -Arguments: [item_sk#11 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0 +Input [3]: [item_sk#10, d_date#6, cume_sales#23] +Arguments: [item_sk#10 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0 (28) Scan parquet default.store_sales -Output [3]: [ss_item_sk#29, ss_sales_price#30, ss_sold_date_sk#31] +Output [3]: [ss_item_sk#24, ss_sales_price#25, ss_sold_date_sk#26] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#31), dynamicpruningexpression(ss_sold_date_sk#31 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(ss_sold_date_sk#26), dynamicpruningexpression(ss_sold_date_sk#26 IN dynamicpruning#4)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (29) ColumnarToRow [codegen id : 16] -Input [3]: [ss_item_sk#29, ss_sales_price#30, ss_sold_date_sk#31] +Input [3]: [ss_item_sk#24, ss_sales_price#25, ss_sold_date_sk#26] (30) Filter [codegen id : 16] -Input [3]: [ss_item_sk#29, ss_sales_price#30, ss_sold_date_sk#31] -Condition : isnotnull(ss_item_sk#29) +Input [3]: [ss_item_sk#24, ss_sales_price#25, ss_sold_date_sk#26] +Condition : isnotnull(ss_item_sk#24) (31) ReusedExchange [Reuses operator id: 75] -Output [2]: [d_date_sk#32, d_date#33] +Output [2]: [d_date_sk#27, d_date#28] (32) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [ss_sold_date_sk#31] -Right keys [1]: [d_date_sk#32] +Left keys [1]: [ss_sold_date_sk#26] +Right keys [1]: [d_date_sk#27] Join condition: None (33) Project [codegen id : 16] -Output [3]: [ss_item_sk#29, ss_sales_price#30, d_date#33] -Input [5]: [ss_item_sk#29, ss_sales_price#30, ss_sold_date_sk#31, d_date_sk#32, d_date#33] +Output [3]: [ss_item_sk#24, ss_sales_price#25, d_date#28] +Input [5]: [ss_item_sk#24, ss_sales_price#25, ss_sold_date_sk#26, d_date_sk#27, d_date#28] (34) HashAggregate [codegen id : 16] -Input [3]: [ss_item_sk#29, ss_sales_price#30, d_date#33] -Keys [2]: [ss_item_sk#29, d_date#33] -Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#30))] -Aggregate Attributes [1]: [sum#34] -Results [3]: [ss_item_sk#29, d_date#33, sum#35] +Input [3]: [ss_item_sk#24, ss_sales_price#25, d_date#28] +Keys [2]: [ss_item_sk#24, d_date#28] +Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#25))] +Aggregate Attributes [1]: [sum#29] +Results [3]: [ss_item_sk#24, d_date#28, sum#30] (35) Exchange -Input [3]: [ss_item_sk#29, d_date#33, sum#35] -Arguments: hashpartitioning(ss_item_sk#29, d_date#33, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [3]: [ss_item_sk#24, d_date#28, sum#30] +Arguments: hashpartitioning(ss_item_sk#24, d_date#28, 5), ENSURE_REQUIREMENTS, [plan_id=6] (36) HashAggregate [codegen id : 17] -Input [3]: [ss_item_sk#29, d_date#33, sum#35] -Keys [2]: [ss_item_sk#29, d_date#33] -Functions [1]: [sum(UnscaledValue(ss_sales_price#30))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#30))#37] -Results [4]: [ss_item_sk#29 AS item_sk#38, d_date#33, MakeDecimal(sum(UnscaledValue(ss_sales_price#30))#37,17,2) AS sumss#39, ss_item_sk#29] +Input [3]: [ss_item_sk#24, d_date#28, sum#30] +Keys [2]: [ss_item_sk#24, d_date#28] +Functions [1]: [sum(UnscaledValue(ss_sales_price#25))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#25))#31] +Results [4]: [ss_item_sk#24 AS item_sk#32, d_date#28, MakeDecimal(sum(UnscaledValue(ss_sales_price#25))#31,17,2) AS sumss#33, ss_item_sk#24] (37) Exchange -Input [4]: [item_sk#38, d_date#33, sumss#39, ss_item_sk#29] -Arguments: hashpartitioning(ss_item_sk#29, 5), ENSURE_REQUIREMENTS, [id=#40] +Input [4]: [item_sk#32, d_date#28, sumss#33, ss_item_sk#24] +Arguments: hashpartitioning(ss_item_sk#24, 5), ENSURE_REQUIREMENTS, [plan_id=7] (38) Sort [codegen id : 18] -Input [4]: [item_sk#38, d_date#33, sumss#39, ss_item_sk#29] -Arguments: [ss_item_sk#29 ASC NULLS FIRST, d_date#33 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#32, d_date#28, sumss#33, ss_item_sk#24] +Arguments: [ss_item_sk#24 ASC NULLS FIRST, d_date#28 ASC NULLS FIRST], false, 0 (39) Window -Input [4]: [item_sk#38, d_date#33, sumss#39, ss_item_sk#29] -Arguments: [row_number() windowspecdefinition(ss_item_sk#29, d_date#33 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#41], [ss_item_sk#29], [d_date#33 ASC NULLS FIRST] +Input [4]: [item_sk#32, d_date#28, sumss#33, ss_item_sk#24] +Arguments: [row_number() windowspecdefinition(ss_item_sk#24, d_date#28 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#34], [ss_item_sk#24], [d_date#28 ASC NULLS FIRST] (40) Project [codegen id : 19] -Output [4]: [item_sk#38, d_date#33, sumss#39, rk#41] -Input [5]: [item_sk#38, d_date#33, sumss#39, ss_item_sk#29, rk#41] +Output [4]: [item_sk#32, d_date#28, sumss#33, rk#34] +Input [5]: [item_sk#32, d_date#28, sumss#33, ss_item_sk#24, rk#34] (41) Exchange -Input [4]: [item_sk#38, d_date#33, sumss#39, rk#41] -Arguments: hashpartitioning(item_sk#38, 5), ENSURE_REQUIREMENTS, [id=#42] +Input [4]: [item_sk#32, d_date#28, sumss#33, rk#34] +Arguments: hashpartitioning(item_sk#32, 5), ENSURE_REQUIREMENTS, [plan_id=8] (42) Sort [codegen id : 20] -Input [4]: [item_sk#38, d_date#33, sumss#39, rk#41] -Arguments: [item_sk#38 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#32, d_date#28, sumss#33, rk#34] +Arguments: [item_sk#32 ASC NULLS FIRST], false, 0 (43) ReusedExchange [Reuses operator id: 37] -Output [4]: [item_sk#38, d_date#43, sumss#39, ss_item_sk#44] +Output [4]: [item_sk#32, d_date#35, sumss#33, ss_item_sk#36] (44) Sort [codegen id : 24] -Input [4]: [item_sk#38, d_date#43, sumss#39, ss_item_sk#44] -Arguments: [ss_item_sk#44 ASC NULLS FIRST, d_date#43 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#32, d_date#35, sumss#33, ss_item_sk#36] +Arguments: [ss_item_sk#36 ASC NULLS FIRST, d_date#35 ASC NULLS FIRST], false, 0 (45) Window -Input [4]: [item_sk#38, d_date#43, sumss#39, ss_item_sk#44] -Arguments: [row_number() windowspecdefinition(ss_item_sk#44, d_date#43 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#45], [ss_item_sk#44], [d_date#43 ASC NULLS FIRST] +Input [4]: [item_sk#32, d_date#35, sumss#33, ss_item_sk#36] +Arguments: [row_number() windowspecdefinition(ss_item_sk#36, d_date#35 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#37], [ss_item_sk#36], [d_date#35 ASC NULLS FIRST] (46) Project [codegen id : 25] -Output [3]: [item_sk#38 AS item_sk#46, sumss#39 AS sumss#47, rk#45] -Input [5]: [item_sk#38, d_date#43, sumss#39, ss_item_sk#44, rk#45] +Output [3]: [item_sk#32 AS item_sk#38, sumss#33 AS sumss#39, rk#37] +Input [5]: [item_sk#32, d_date#35, sumss#33, ss_item_sk#36, rk#37] (47) Exchange -Input [3]: [item_sk#46, sumss#47, rk#45] -Arguments: hashpartitioning(item_sk#46, 5), ENSURE_REQUIREMENTS, [id=#48] +Input [3]: [item_sk#38, sumss#39, rk#37] +Arguments: hashpartitioning(item_sk#38, 5), ENSURE_REQUIREMENTS, [plan_id=9] (48) Sort [codegen id : 26] -Input [3]: [item_sk#46, sumss#47, rk#45] -Arguments: [item_sk#46 ASC NULLS FIRST], false, 0 +Input [3]: [item_sk#38, sumss#39, rk#37] +Arguments: [item_sk#38 ASC NULLS FIRST], false, 0 (49) SortMergeJoin [codegen id : 27] -Left keys [1]: [item_sk#38] -Right keys [1]: [item_sk#46] -Join condition: (rk#41 >= rk#45) +Left keys [1]: [item_sk#32] +Right keys [1]: [item_sk#38] +Join condition: (rk#34 >= rk#37) (50) Project [codegen id : 27] -Output [4]: [item_sk#38, d_date#33, sumss#39, sumss#47] -Input [7]: [item_sk#38, d_date#33, sumss#39, rk#41, item_sk#46, sumss#47, rk#45] +Output [4]: [item_sk#32, d_date#28, sumss#33, sumss#39] +Input [7]: [item_sk#32, d_date#28, sumss#33, rk#34, item_sk#38, sumss#39, rk#37] (51) HashAggregate [codegen id : 27] -Input [4]: [item_sk#38, d_date#33, sumss#39, sumss#47] -Keys [3]: [item_sk#38, d_date#33, sumss#39] -Functions [1]: [partial_sum(sumss#47)] -Aggregate Attributes [2]: [sum#49, isEmpty#50] -Results [5]: [item_sk#38, d_date#33, sumss#39, sum#51, isEmpty#52] +Input [4]: [item_sk#32, d_date#28, sumss#33, sumss#39] +Keys [3]: [item_sk#32, d_date#28, sumss#33] +Functions [1]: [partial_sum(sumss#39)] +Aggregate Attributes [2]: [sum#40, isEmpty#41] +Results [5]: [item_sk#32, d_date#28, sumss#33, sum#42, isEmpty#43] (52) HashAggregate [codegen id : 27] -Input [5]: [item_sk#38, d_date#33, sumss#39, sum#51, isEmpty#52] -Keys [3]: [item_sk#38, d_date#33, sumss#39] -Functions [1]: [sum(sumss#47)] -Aggregate Attributes [1]: [sum(sumss#47)#53] -Results [3]: [item_sk#38, d_date#33, sum(sumss#47)#53 AS cume_sales#54] +Input [5]: [item_sk#32, d_date#28, sumss#33, sum#42, isEmpty#43] +Keys [3]: [item_sk#32, d_date#28, sumss#33] +Functions [1]: [sum(sumss#39)] +Aggregate Attributes [1]: [sum(sumss#39)#44] +Results [3]: [item_sk#32, d_date#28, sum(sumss#39)#44 AS cume_sales#45] (53) Exchange -Input [3]: [item_sk#38, d_date#33, cume_sales#54] -Arguments: hashpartitioning(item_sk#38, d_date#33, 5), ENSURE_REQUIREMENTS, [id=#55] +Input [3]: [item_sk#32, d_date#28, cume_sales#45] +Arguments: hashpartitioning(item_sk#32, d_date#28, 5), ENSURE_REQUIREMENTS, [plan_id=10] (54) Sort [codegen id : 28] -Input [3]: [item_sk#38, d_date#33, cume_sales#54] -Arguments: [item_sk#38 ASC NULLS FIRST, d_date#33 ASC NULLS FIRST], false, 0 +Input [3]: [item_sk#32, d_date#28, cume_sales#45] +Arguments: [item_sk#32 ASC NULLS FIRST, d_date#28 ASC NULLS FIRST], false, 0 (55) SortMergeJoin [codegen id : 29] -Left keys [2]: [item_sk#11, d_date#6] -Right keys [2]: [item_sk#38, d_date#33] +Left keys [2]: [item_sk#10, d_date#6] +Right keys [2]: [item_sk#32, d_date#28] Join condition: None (56) Filter [codegen id : 29] -Input [6]: [item_sk#11, d_date#6, cume_sales#27, item_sk#38, d_date#33, cume_sales#54] -Condition : isnotnull(CASE WHEN isnotnull(item_sk#11) THEN item_sk#11 ELSE item_sk#38 END) +Input [6]: [item_sk#10, d_date#6, cume_sales#23, item_sk#32, d_date#28, cume_sales#45] +Condition : isnotnull(CASE WHEN isnotnull(item_sk#10) THEN item_sk#10 ELSE item_sk#32 END) (57) Project [codegen id : 29] -Output [4]: [CASE WHEN isnotnull(item_sk#11) THEN item_sk#11 ELSE item_sk#38 END AS item_sk#56, CASE WHEN isnotnull(d_date#6) THEN d_date#6 ELSE d_date#33 END AS d_date#57, cume_sales#27 AS web_sales#58, cume_sales#54 AS store_sales#59] -Input [6]: [item_sk#11, d_date#6, cume_sales#27, item_sk#38, d_date#33, cume_sales#54] +Output [4]: [CASE WHEN isnotnull(item_sk#10) THEN item_sk#10 ELSE item_sk#32 END AS item_sk#46, CASE WHEN isnotnull(d_date#6) THEN d_date#6 ELSE d_date#28 END AS d_date#47, cume_sales#23 AS web_sales#48, cume_sales#45 AS store_sales#49] +Input [6]: [item_sk#10, d_date#6, cume_sales#23, item_sk#32, d_date#28, cume_sales#45] (58) Exchange -Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] -Arguments: hashpartitioning(item_sk#56, 5), ENSURE_REQUIREMENTS, [id=#60] +Input [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] +Arguments: hashpartitioning(item_sk#46, 5), ENSURE_REQUIREMENTS, [plan_id=11] (59) Sort [codegen id : 30] -Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] -Arguments: [item_sk#56 ASC NULLS FIRST, d_date#57 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] +Arguments: [item_sk#46 ASC NULLS FIRST, d_date#47 ASC NULLS FIRST], false, 0 (60) Window -Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] -Arguments: [row_number() windowspecdefinition(item_sk#56, d_date#57 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#61], [item_sk#56], [d_date#57 ASC NULLS FIRST] +Input [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] +Arguments: [row_number() windowspecdefinition(item_sk#46, d_date#47 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#50], [item_sk#46], [d_date#47 ASC NULLS FIRST] (61) ReusedExchange [Reuses operator id: 58] -Output [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] +Output [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] (62) Sort [codegen id : 60] -Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] -Arguments: [item_sk#56 ASC NULLS FIRST, d_date#57 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] +Arguments: [item_sk#46 ASC NULLS FIRST, d_date#47 ASC NULLS FIRST], false, 0 (63) Window -Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] -Arguments: [row_number() windowspecdefinition(item_sk#56, d_date#57 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#62], [item_sk#56], [d_date#57 ASC NULLS FIRST] +Input [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] +Arguments: [row_number() windowspecdefinition(item_sk#46, d_date#47 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#51], [item_sk#46], [d_date#47 ASC NULLS FIRST] (64) Project [codegen id : 61] -Output [4]: [item_sk#56 AS item_sk#63, web_sales#58 AS web_sales#64, store_sales#59 AS store_sales#65, rk#62] -Input [5]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, rk#62] +Output [4]: [item_sk#46 AS item_sk#52, web_sales#48 AS web_sales#53, store_sales#49 AS store_sales#54, rk#51] +Input [5]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, rk#51] (65) SortMergeJoin [codegen id : 62] -Left keys [1]: [item_sk#56] -Right keys [1]: [item_sk#63] -Join condition: (rk#61 >= rk#62) +Left keys [1]: [item_sk#46] +Right keys [1]: [item_sk#52] +Join condition: (rk#50 >= rk#51) (66) Project [codegen id : 62] -Output [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_sales#64, store_sales#65] -Input [9]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, rk#61, item_sk#63, web_sales#64, store_sales#65, rk#62] +Output [6]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, web_sales#53, store_sales#54] +Input [9]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, rk#50, item_sk#52, web_sales#53, store_sales#54, rk#51] (67) HashAggregate [codegen id : 62] -Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_sales#64, store_sales#65] -Keys [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] -Functions [2]: [partial_max(web_sales#64), partial_max(store_sales#65)] -Aggregate Attributes [2]: [max#66, max#67] -Results [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, max#68, max#69] +Input [6]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, web_sales#53, store_sales#54] +Keys [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] +Functions [2]: [partial_max(web_sales#53), partial_max(store_sales#54)] +Aggregate Attributes [2]: [max#55, max#56] +Results [6]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, max#57, max#58] (68) HashAggregate [codegen id : 62] -Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, max#68, max#69] -Keys [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] -Functions [2]: [max(web_sales#64), max(store_sales#65)] -Aggregate Attributes [2]: [max(web_sales#64)#70, max(store_sales#65)#71] -Results [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, max(web_sales#64)#70 AS web_cumulative#72, max(store_sales#65)#71 AS store_cumulative#73] +Input [6]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, max#57, max#58] +Keys [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] +Functions [2]: [max(web_sales#53), max(store_sales#54)] +Aggregate Attributes [2]: [max(web_sales#53)#59, max(store_sales#54)#60] +Results [6]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, max(web_sales#53)#59 AS web_cumulative#61, max(store_sales#54)#60 AS store_cumulative#62] (69) Filter [codegen id : 62] -Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_cumulative#72, store_cumulative#73] -Condition : ((isnotnull(web_cumulative#72) AND isnotnull(store_cumulative#73)) AND (web_cumulative#72 > store_cumulative#73)) +Input [6]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, web_cumulative#61, store_cumulative#62] +Condition : ((isnotnull(web_cumulative#61) AND isnotnull(store_cumulative#62)) AND (web_cumulative#61 > store_cumulative#62)) (70) TakeOrderedAndProject -Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_cumulative#72, store_cumulative#73] -Arguments: 100, [item_sk#56 ASC NULLS FIRST, d_date#57 ASC NULLS FIRST], [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_cumulative#72, store_cumulative#73] +Input [6]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, web_cumulative#61, store_cumulative#62] +Arguments: 100, [item_sk#46 ASC NULLS FIRST, d_date#47 ASC NULLS FIRST], [item_sk#46, d_date#47, web_sales#48, store_sales#49, web_cumulative#61, store_cumulative#62] ===== Subqueries ===== @@ -399,27 +399,27 @@ BroadcastExchange (75) (71) Scan parquet default.date_dim -Output [3]: [d_date_sk#5, d_date#6, d_month_seq#74] +Output [3]: [d_date_sk#5, d_date#6, d_month_seq#63] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_date_sk)] ReadSchema: struct (72) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#5, d_date#6, d_month_seq#74] +Input [3]: [d_date_sk#5, d_date#6, d_month_seq#63] (73) Filter [codegen id : 1] -Input [3]: [d_date_sk#5, d_date#6, d_month_seq#74] -Condition : (((isnotnull(d_month_seq#74) AND (d_month_seq#74 >= 1212)) AND (d_month_seq#74 <= 1223)) AND isnotnull(d_date_sk#5)) +Input [3]: [d_date_sk#5, d_date#6, d_month_seq#63] +Condition : (((isnotnull(d_month_seq#63) AND (d_month_seq#63 >= 1212)) AND (d_month_seq#63 <= 1223)) AND isnotnull(d_date_sk#5)) (74) Project [codegen id : 1] Output [2]: [d_date_sk#5, d_date#6] -Input [3]: [d_date_sk#5, d_date#6, d_month_seq#74] +Input [3]: [d_date_sk#5, d_date#6, d_month_seq#63] (75) BroadcastExchange Input [2]: [d_date_sk#5, d_date#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#75] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] -Subquery:2 Hosting operator id = 28 Hosting Expression = ss_sold_date_sk#31 IN dynamicpruning#4 +Subquery:2 Hosting operator id = 28 Hosting Expression = ss_sold_date_sk#26 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q51a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q51a/explain.txt index 9edb377b305c5..6b821b68cbac9 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q51a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q51a/explain.txt @@ -104,274 +104,274 @@ Results [3]: [ws_item_sk#1, d_date#6, sum#8] (8) Exchange Input [3]: [ws_item_sk#1, d_date#6, sum#8] -Arguments: hashpartitioning(ws_item_sk#1, d_date#6, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ws_item_sk#1, d_date#6, 5), ENSURE_REQUIREMENTS, [plan_id=1] (9) HashAggregate [codegen id : 3] Input [3]: [ws_item_sk#1, d_date#6, sum#8] Keys [2]: [ws_item_sk#1, d_date#6] Functions [1]: [sum(UnscaledValue(ws_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_sales_price#2))#10] -Results [4]: [ws_item_sk#1 AS item_sk#11, d_date#6, MakeDecimal(sum(UnscaledValue(ws_sales_price#2))#10,17,2) AS sumws#12, ws_item_sk#1] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_sales_price#2))#9] +Results [4]: [ws_item_sk#1 AS item_sk#10, d_date#6, MakeDecimal(sum(UnscaledValue(ws_sales_price#2))#9,17,2) AS sumws#11, ws_item_sk#1] (10) Exchange -Input [4]: [item_sk#11, d_date#6, sumws#12, ws_item_sk#1] -Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [4]: [item_sk#10, d_date#6, sumws#11, ws_item_sk#1] +Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [4]: [item_sk#11, d_date#6, sumws#12, ws_item_sk#1] +Input [4]: [item_sk#10, d_date#6, sumws#11, ws_item_sk#1] Arguments: [ws_item_sk#1 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0 (12) Window -Input [4]: [item_sk#11, d_date#6, sumws#12, ws_item_sk#1] -Arguments: [row_number() windowspecdefinition(ws_item_sk#1, d_date#6 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#14], [ws_item_sk#1], [d_date#6 ASC NULLS FIRST] +Input [4]: [item_sk#10, d_date#6, sumws#11, ws_item_sk#1] +Arguments: [row_number() windowspecdefinition(ws_item_sk#1, d_date#6 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#12], [ws_item_sk#1], [d_date#6 ASC NULLS FIRST] (13) Project [codegen id : 10] -Output [4]: [item_sk#11, d_date#6, sumws#12, rk#14] -Input [5]: [item_sk#11, d_date#6, sumws#12, ws_item_sk#1, rk#14] +Output [4]: [item_sk#10, d_date#6, sumws#11, rk#12] +Input [5]: [item_sk#10, d_date#6, sumws#11, ws_item_sk#1, rk#12] (14) ReusedExchange [Reuses operator id: 10] -Output [4]: [item_sk#11, d_date#15, sumws#12, ws_item_sk#16] +Output [4]: [item_sk#10, d_date#13, sumws#11, ws_item_sk#14] (15) Sort [codegen id : 8] -Input [4]: [item_sk#11, d_date#15, sumws#12, ws_item_sk#16] -Arguments: [ws_item_sk#16 ASC NULLS FIRST, d_date#15 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#10, d_date#13, sumws#11, ws_item_sk#14] +Arguments: [ws_item_sk#14 ASC NULLS FIRST, d_date#13 ASC NULLS FIRST], false, 0 (16) Window -Input [4]: [item_sk#11, d_date#15, sumws#12, ws_item_sk#16] -Arguments: [row_number() windowspecdefinition(ws_item_sk#16, d_date#15 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#17], [ws_item_sk#16], [d_date#15 ASC NULLS FIRST] +Input [4]: [item_sk#10, d_date#13, sumws#11, ws_item_sk#14] +Arguments: [row_number() windowspecdefinition(ws_item_sk#14, d_date#13 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#15], [ws_item_sk#14], [d_date#13 ASC NULLS FIRST] (17) Project [codegen id : 9] -Output [3]: [item_sk#11 AS item_sk#18, sumws#12 AS sumws#19, rk#17] -Input [5]: [item_sk#11, d_date#15, sumws#12, ws_item_sk#16, rk#17] +Output [3]: [item_sk#10 AS item_sk#16, sumws#11 AS sumws#17, rk#15] +Input [5]: [item_sk#10, d_date#13, sumws#11, ws_item_sk#14, rk#15] (18) BroadcastExchange -Input [3]: [item_sk#18, sumws#19, rk#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20] +Input [3]: [item_sk#16, sumws#17, rk#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (19) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [item_sk#11] -Right keys [1]: [item_sk#18] -Join condition: (rk#14 >= rk#17) +Left keys [1]: [item_sk#10] +Right keys [1]: [item_sk#16] +Join condition: (rk#12 >= rk#15) (20) Project [codegen id : 10] -Output [4]: [item_sk#11, d_date#6, sumws#12, sumws#19] -Input [7]: [item_sk#11, d_date#6, sumws#12, rk#14, item_sk#18, sumws#19, rk#17] +Output [4]: [item_sk#10, d_date#6, sumws#11, sumws#17] +Input [7]: [item_sk#10, d_date#6, sumws#11, rk#12, item_sk#16, sumws#17, rk#15] (21) HashAggregate [codegen id : 10] -Input [4]: [item_sk#11, d_date#6, sumws#12, sumws#19] -Keys [3]: [item_sk#11, d_date#6, sumws#12] -Functions [1]: [partial_sum(sumws#19)] -Aggregate Attributes [2]: [sum#21, isEmpty#22] -Results [5]: [item_sk#11, d_date#6, sumws#12, sum#23, isEmpty#24] +Input [4]: [item_sk#10, d_date#6, sumws#11, sumws#17] +Keys [3]: [item_sk#10, d_date#6, sumws#11] +Functions [1]: [partial_sum(sumws#17)] +Aggregate Attributes [2]: [sum#18, isEmpty#19] +Results [5]: [item_sk#10, d_date#6, sumws#11, sum#20, isEmpty#21] (22) Exchange -Input [5]: [item_sk#11, d_date#6, sumws#12, sum#23, isEmpty#24] -Arguments: hashpartitioning(item_sk#11, d_date#6, sumws#12, 5), ENSURE_REQUIREMENTS, [id=#25] +Input [5]: [item_sk#10, d_date#6, sumws#11, sum#20, isEmpty#21] +Arguments: hashpartitioning(item_sk#10, d_date#6, sumws#11, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) HashAggregate [codegen id : 11] -Input [5]: [item_sk#11, d_date#6, sumws#12, sum#23, isEmpty#24] -Keys [3]: [item_sk#11, d_date#6, sumws#12] -Functions [1]: [sum(sumws#19)] -Aggregate Attributes [1]: [sum(sumws#19)#26] -Results [3]: [item_sk#11, d_date#6, sum(sumws#19)#26 AS cume_sales#27] +Input [5]: [item_sk#10, d_date#6, sumws#11, sum#20, isEmpty#21] +Keys [3]: [item_sk#10, d_date#6, sumws#11] +Functions [1]: [sum(sumws#17)] +Aggregate Attributes [1]: [sum(sumws#17)#22] +Results [3]: [item_sk#10, d_date#6, sum(sumws#17)#22 AS cume_sales#23] (24) Exchange -Input [3]: [item_sk#11, d_date#6, cume_sales#27] -Arguments: hashpartitioning(item_sk#11, d_date#6, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [3]: [item_sk#10, d_date#6, cume_sales#23] +Arguments: hashpartitioning(item_sk#10, d_date#6, 5), ENSURE_REQUIREMENTS, [plan_id=5] (25) Sort [codegen id : 12] -Input [3]: [item_sk#11, d_date#6, cume_sales#27] -Arguments: [item_sk#11 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0 +Input [3]: [item_sk#10, d_date#6, cume_sales#23] +Arguments: [item_sk#10 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0 (26) Scan parquet default.store_sales -Output [3]: [ss_item_sk#29, ss_sales_price#30, ss_sold_date_sk#31] +Output [3]: [ss_item_sk#24, ss_sales_price#25, ss_sold_date_sk#26] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#31), dynamicpruningexpression(ss_sold_date_sk#31 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(ss_sold_date_sk#26), dynamicpruningexpression(ss_sold_date_sk#26 IN dynamicpruning#4)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 14] -Input [3]: [ss_item_sk#29, ss_sales_price#30, ss_sold_date_sk#31] +Input [3]: [ss_item_sk#24, ss_sales_price#25, ss_sold_date_sk#26] (28) Filter [codegen id : 14] -Input [3]: [ss_item_sk#29, ss_sales_price#30, ss_sold_date_sk#31] -Condition : isnotnull(ss_item_sk#29) +Input [3]: [ss_item_sk#24, ss_sales_price#25, ss_sold_date_sk#26] +Condition : isnotnull(ss_item_sk#24) (29) ReusedExchange [Reuses operator id: 72] -Output [2]: [d_date_sk#32, d_date#33] +Output [2]: [d_date_sk#27, d_date#28] (30) BroadcastHashJoin [codegen id : 14] -Left keys [1]: [ss_sold_date_sk#31] -Right keys [1]: [d_date_sk#32] +Left keys [1]: [ss_sold_date_sk#26] +Right keys [1]: [d_date_sk#27] Join condition: None (31) Project [codegen id : 14] -Output [3]: [ss_item_sk#29, ss_sales_price#30, d_date#33] -Input [5]: [ss_item_sk#29, ss_sales_price#30, ss_sold_date_sk#31, d_date_sk#32, d_date#33] +Output [3]: [ss_item_sk#24, ss_sales_price#25, d_date#28] +Input [5]: [ss_item_sk#24, ss_sales_price#25, ss_sold_date_sk#26, d_date_sk#27, d_date#28] (32) HashAggregate [codegen id : 14] -Input [3]: [ss_item_sk#29, ss_sales_price#30, d_date#33] -Keys [2]: [ss_item_sk#29, d_date#33] -Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#30))] -Aggregate Attributes [1]: [sum#34] -Results [3]: [ss_item_sk#29, d_date#33, sum#35] +Input [3]: [ss_item_sk#24, ss_sales_price#25, d_date#28] +Keys [2]: [ss_item_sk#24, d_date#28] +Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#25))] +Aggregate Attributes [1]: [sum#29] +Results [3]: [ss_item_sk#24, d_date#28, sum#30] (33) Exchange -Input [3]: [ss_item_sk#29, d_date#33, sum#35] -Arguments: hashpartitioning(ss_item_sk#29, d_date#33, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [3]: [ss_item_sk#24, d_date#28, sum#30] +Arguments: hashpartitioning(ss_item_sk#24, d_date#28, 5), ENSURE_REQUIREMENTS, [plan_id=6] (34) HashAggregate [codegen id : 15] -Input [3]: [ss_item_sk#29, d_date#33, sum#35] -Keys [2]: [ss_item_sk#29, d_date#33] -Functions [1]: [sum(UnscaledValue(ss_sales_price#30))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#30))#37] -Results [4]: [ss_item_sk#29 AS item_sk#38, d_date#33, MakeDecimal(sum(UnscaledValue(ss_sales_price#30))#37,17,2) AS sumss#39, ss_item_sk#29] +Input [3]: [ss_item_sk#24, d_date#28, sum#30] +Keys [2]: [ss_item_sk#24, d_date#28] +Functions [1]: [sum(UnscaledValue(ss_sales_price#25))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#25))#31] +Results [4]: [ss_item_sk#24 AS item_sk#32, d_date#28, MakeDecimal(sum(UnscaledValue(ss_sales_price#25))#31,17,2) AS sumss#33, ss_item_sk#24] (35) Exchange -Input [4]: [item_sk#38, d_date#33, sumss#39, ss_item_sk#29] -Arguments: hashpartitioning(ss_item_sk#29, 5), ENSURE_REQUIREMENTS, [id=#40] +Input [4]: [item_sk#32, d_date#28, sumss#33, ss_item_sk#24] +Arguments: hashpartitioning(ss_item_sk#24, 5), ENSURE_REQUIREMENTS, [plan_id=7] (36) Sort [codegen id : 16] -Input [4]: [item_sk#38, d_date#33, sumss#39, ss_item_sk#29] -Arguments: [ss_item_sk#29 ASC NULLS FIRST, d_date#33 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#32, d_date#28, sumss#33, ss_item_sk#24] +Arguments: [ss_item_sk#24 ASC NULLS FIRST, d_date#28 ASC NULLS FIRST], false, 0 (37) Window -Input [4]: [item_sk#38, d_date#33, sumss#39, ss_item_sk#29] -Arguments: [row_number() windowspecdefinition(ss_item_sk#29, d_date#33 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#41], [ss_item_sk#29], [d_date#33 ASC NULLS FIRST] +Input [4]: [item_sk#32, d_date#28, sumss#33, ss_item_sk#24] +Arguments: [row_number() windowspecdefinition(ss_item_sk#24, d_date#28 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#34], [ss_item_sk#24], [d_date#28 ASC NULLS FIRST] (38) Project [codegen id : 22] -Output [4]: [item_sk#38, d_date#33, sumss#39, rk#41] -Input [5]: [item_sk#38, d_date#33, sumss#39, ss_item_sk#29, rk#41] +Output [4]: [item_sk#32, d_date#28, sumss#33, rk#34] +Input [5]: [item_sk#32, d_date#28, sumss#33, ss_item_sk#24, rk#34] (39) ReusedExchange [Reuses operator id: 35] -Output [4]: [item_sk#38, d_date#42, sumss#39, ss_item_sk#43] +Output [4]: [item_sk#32, d_date#35, sumss#33, ss_item_sk#36] (40) Sort [codegen id : 20] -Input [4]: [item_sk#38, d_date#42, sumss#39, ss_item_sk#43] -Arguments: [ss_item_sk#43 ASC NULLS FIRST, d_date#42 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#32, d_date#35, sumss#33, ss_item_sk#36] +Arguments: [ss_item_sk#36 ASC NULLS FIRST, d_date#35 ASC NULLS FIRST], false, 0 (41) Window -Input [4]: [item_sk#38, d_date#42, sumss#39, ss_item_sk#43] -Arguments: [row_number() windowspecdefinition(ss_item_sk#43, d_date#42 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#44], [ss_item_sk#43], [d_date#42 ASC NULLS FIRST] +Input [4]: [item_sk#32, d_date#35, sumss#33, ss_item_sk#36] +Arguments: [row_number() windowspecdefinition(ss_item_sk#36, d_date#35 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#37], [ss_item_sk#36], [d_date#35 ASC NULLS FIRST] (42) Project [codegen id : 21] -Output [3]: [item_sk#38 AS item_sk#45, sumss#39 AS sumss#46, rk#44] -Input [5]: [item_sk#38, d_date#42, sumss#39, ss_item_sk#43, rk#44] +Output [3]: [item_sk#32 AS item_sk#38, sumss#33 AS sumss#39, rk#37] +Input [5]: [item_sk#32, d_date#35, sumss#33, ss_item_sk#36, rk#37] (43) BroadcastExchange -Input [3]: [item_sk#45, sumss#46, rk#44] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#47] +Input [3]: [item_sk#38, sumss#39, rk#37] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8] (44) BroadcastHashJoin [codegen id : 22] -Left keys [1]: [item_sk#38] -Right keys [1]: [item_sk#45] -Join condition: (rk#41 >= rk#44) +Left keys [1]: [item_sk#32] +Right keys [1]: [item_sk#38] +Join condition: (rk#34 >= rk#37) (45) Project [codegen id : 22] -Output [4]: [item_sk#38, d_date#33, sumss#39, sumss#46] -Input [7]: [item_sk#38, d_date#33, sumss#39, rk#41, item_sk#45, sumss#46, rk#44] +Output [4]: [item_sk#32, d_date#28, sumss#33, sumss#39] +Input [7]: [item_sk#32, d_date#28, sumss#33, rk#34, item_sk#38, sumss#39, rk#37] (46) HashAggregate [codegen id : 22] -Input [4]: [item_sk#38, d_date#33, sumss#39, sumss#46] -Keys [3]: [item_sk#38, d_date#33, sumss#39] -Functions [1]: [partial_sum(sumss#46)] -Aggregate Attributes [2]: [sum#48, isEmpty#49] -Results [5]: [item_sk#38, d_date#33, sumss#39, sum#50, isEmpty#51] +Input [4]: [item_sk#32, d_date#28, sumss#33, sumss#39] +Keys [3]: [item_sk#32, d_date#28, sumss#33] +Functions [1]: [partial_sum(sumss#39)] +Aggregate Attributes [2]: [sum#40, isEmpty#41] +Results [5]: [item_sk#32, d_date#28, sumss#33, sum#42, isEmpty#43] (47) Exchange -Input [5]: [item_sk#38, d_date#33, sumss#39, sum#50, isEmpty#51] -Arguments: hashpartitioning(item_sk#38, d_date#33, sumss#39, 5), ENSURE_REQUIREMENTS, [id=#52] +Input [5]: [item_sk#32, d_date#28, sumss#33, sum#42, isEmpty#43] +Arguments: hashpartitioning(item_sk#32, d_date#28, sumss#33, 5), ENSURE_REQUIREMENTS, [plan_id=9] (48) HashAggregate [codegen id : 23] -Input [5]: [item_sk#38, d_date#33, sumss#39, sum#50, isEmpty#51] -Keys [3]: [item_sk#38, d_date#33, sumss#39] -Functions [1]: [sum(sumss#46)] -Aggregate Attributes [1]: [sum(sumss#46)#53] -Results [3]: [item_sk#38, d_date#33, sum(sumss#46)#53 AS cume_sales#54] +Input [5]: [item_sk#32, d_date#28, sumss#33, sum#42, isEmpty#43] +Keys [3]: [item_sk#32, d_date#28, sumss#33] +Functions [1]: [sum(sumss#39)] +Aggregate Attributes [1]: [sum(sumss#39)#44] +Results [3]: [item_sk#32, d_date#28, sum(sumss#39)#44 AS cume_sales#45] (49) Exchange -Input [3]: [item_sk#38, d_date#33, cume_sales#54] -Arguments: hashpartitioning(item_sk#38, d_date#33, 5), ENSURE_REQUIREMENTS, [id=#55] +Input [3]: [item_sk#32, d_date#28, cume_sales#45] +Arguments: hashpartitioning(item_sk#32, d_date#28, 5), ENSURE_REQUIREMENTS, [plan_id=10] (50) Sort [codegen id : 24] -Input [3]: [item_sk#38, d_date#33, cume_sales#54] -Arguments: [item_sk#38 ASC NULLS FIRST, d_date#33 ASC NULLS FIRST], false, 0 +Input [3]: [item_sk#32, d_date#28, cume_sales#45] +Arguments: [item_sk#32 ASC NULLS FIRST, d_date#28 ASC NULLS FIRST], false, 0 (51) SortMergeJoin [codegen id : 25] -Left keys [2]: [item_sk#11, d_date#6] -Right keys [2]: [item_sk#38, d_date#33] +Left keys [2]: [item_sk#10, d_date#6] +Right keys [2]: [item_sk#32, d_date#28] Join condition: None (52) Filter [codegen id : 25] -Input [6]: [item_sk#11, d_date#6, cume_sales#27, item_sk#38, d_date#33, cume_sales#54] -Condition : isnotnull(CASE WHEN isnotnull(item_sk#11) THEN item_sk#11 ELSE item_sk#38 END) +Input [6]: [item_sk#10, d_date#6, cume_sales#23, item_sk#32, d_date#28, cume_sales#45] +Condition : isnotnull(CASE WHEN isnotnull(item_sk#10) THEN item_sk#10 ELSE item_sk#32 END) (53) Project [codegen id : 25] -Output [4]: [CASE WHEN isnotnull(item_sk#11) THEN item_sk#11 ELSE item_sk#38 END AS item_sk#56, CASE WHEN isnotnull(d_date#6) THEN d_date#6 ELSE d_date#33 END AS d_date#57, cume_sales#27 AS web_sales#58, cume_sales#54 AS store_sales#59] -Input [6]: [item_sk#11, d_date#6, cume_sales#27, item_sk#38, d_date#33, cume_sales#54] +Output [4]: [CASE WHEN isnotnull(item_sk#10) THEN item_sk#10 ELSE item_sk#32 END AS item_sk#46, CASE WHEN isnotnull(d_date#6) THEN d_date#6 ELSE d_date#28 END AS d_date#47, cume_sales#23 AS web_sales#48, cume_sales#45 AS store_sales#49] +Input [6]: [item_sk#10, d_date#6, cume_sales#23, item_sk#32, d_date#28, cume_sales#45] (54) Exchange -Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] -Arguments: hashpartitioning(item_sk#56, 5), ENSURE_REQUIREMENTS, [id=#60] +Input [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] +Arguments: hashpartitioning(item_sk#46, 5), ENSURE_REQUIREMENTS, [plan_id=11] (55) Sort [codegen id : 26] -Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] -Arguments: [item_sk#56 ASC NULLS FIRST, d_date#57 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] +Arguments: [item_sk#46 ASC NULLS FIRST, d_date#47 ASC NULLS FIRST], false, 0 (56) Window -Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] -Arguments: [row_number() windowspecdefinition(item_sk#56, d_date#57 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#61], [item_sk#56], [d_date#57 ASC NULLS FIRST] +Input [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] +Arguments: [row_number() windowspecdefinition(item_sk#46, d_date#47 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#50], [item_sk#46], [d_date#47 ASC NULLS FIRST] (57) ReusedExchange [Reuses operator id: 54] -Output [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] +Output [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] (58) Sort [codegen id : 52] -Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] -Arguments: [item_sk#56 ASC NULLS FIRST, d_date#57 ASC NULLS FIRST], false, 0 +Input [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] +Arguments: [item_sk#46 ASC NULLS FIRST, d_date#47 ASC NULLS FIRST], false, 0 (59) Window -Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] -Arguments: [row_number() windowspecdefinition(item_sk#56, d_date#57 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#62], [item_sk#56], [d_date#57 ASC NULLS FIRST] +Input [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] +Arguments: [row_number() windowspecdefinition(item_sk#46, d_date#47 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#51], [item_sk#46], [d_date#47 ASC NULLS FIRST] (60) Project [codegen id : 53] -Output [4]: [item_sk#56 AS item_sk#63, web_sales#58 AS web_sales#64, store_sales#59 AS store_sales#65, rk#62] -Input [5]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, rk#62] +Output [4]: [item_sk#46 AS item_sk#52, web_sales#48 AS web_sales#53, store_sales#49 AS store_sales#54, rk#51] +Input [5]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, rk#51] (61) BroadcastExchange -Input [4]: [item_sk#63, web_sales#64, store_sales#65, rk#62] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#66] +Input [4]: [item_sk#52, web_sales#53, store_sales#54, rk#51] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] (62) BroadcastHashJoin [codegen id : 54] -Left keys [1]: [item_sk#56] -Right keys [1]: [item_sk#63] -Join condition: (rk#61 >= rk#62) +Left keys [1]: [item_sk#46] +Right keys [1]: [item_sk#52] +Join condition: (rk#50 >= rk#51) (63) Project [codegen id : 54] -Output [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_sales#64, store_sales#65] -Input [9]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, rk#61, item_sk#63, web_sales#64, store_sales#65, rk#62] +Output [6]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, web_sales#53, store_sales#54] +Input [9]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, rk#50, item_sk#52, web_sales#53, store_sales#54, rk#51] (64) HashAggregate [codegen id : 54] -Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_sales#64, store_sales#65] -Keys [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] -Functions [2]: [partial_max(web_sales#64), partial_max(store_sales#65)] -Aggregate Attributes [2]: [max#67, max#68] -Results [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, max#69, max#70] +Input [6]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, web_sales#53, store_sales#54] +Keys [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] +Functions [2]: [partial_max(web_sales#53), partial_max(store_sales#54)] +Aggregate Attributes [2]: [max#55, max#56] +Results [6]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, max#57, max#58] (65) HashAggregate [codegen id : 54] -Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, max#69, max#70] -Keys [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59] -Functions [2]: [max(web_sales#64), max(store_sales#65)] -Aggregate Attributes [2]: [max(web_sales#64)#71, max(store_sales#65)#72] -Results [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, max(web_sales#64)#71 AS web_cumulative#73, max(store_sales#65)#72 AS store_cumulative#74] +Input [6]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, max#57, max#58] +Keys [4]: [item_sk#46, d_date#47, web_sales#48, store_sales#49] +Functions [2]: [max(web_sales#53), max(store_sales#54)] +Aggregate Attributes [2]: [max(web_sales#53)#59, max(store_sales#54)#60] +Results [6]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, max(web_sales#53)#59 AS web_cumulative#61, max(store_sales#54)#60 AS store_cumulative#62] (66) Filter [codegen id : 54] -Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_cumulative#73, store_cumulative#74] -Condition : ((isnotnull(web_cumulative#73) AND isnotnull(store_cumulative#74)) AND (web_cumulative#73 > store_cumulative#74)) +Input [6]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, web_cumulative#61, store_cumulative#62] +Condition : ((isnotnull(web_cumulative#61) AND isnotnull(store_cumulative#62)) AND (web_cumulative#61 > store_cumulative#62)) (67) TakeOrderedAndProject -Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_cumulative#73, store_cumulative#74] -Arguments: 100, [item_sk#56 ASC NULLS FIRST, d_date#57 ASC NULLS FIRST], [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_cumulative#73, store_cumulative#74] +Input [6]: [item_sk#46, d_date#47, web_sales#48, store_sales#49, web_cumulative#61, store_cumulative#62] +Arguments: 100, [item_sk#46 ASC NULLS FIRST, d_date#47 ASC NULLS FIRST], [item_sk#46, d_date#47, web_sales#48, store_sales#49, web_cumulative#61, store_cumulative#62] ===== Subqueries ===== @@ -384,27 +384,27 @@ BroadcastExchange (72) (68) Scan parquet default.date_dim -Output [3]: [d_date_sk#5, d_date#6, d_month_seq#75] +Output [3]: [d_date_sk#5, d_date#6, d_month_seq#63] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_date_sk)] ReadSchema: struct (69) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#5, d_date#6, d_month_seq#75] +Input [3]: [d_date_sk#5, d_date#6, d_month_seq#63] (70) Filter [codegen id : 1] -Input [3]: [d_date_sk#5, d_date#6, d_month_seq#75] -Condition : (((isnotnull(d_month_seq#75) AND (d_month_seq#75 >= 1212)) AND (d_month_seq#75 <= 1223)) AND isnotnull(d_date_sk#5)) +Input [3]: [d_date_sk#5, d_date#6, d_month_seq#63] +Condition : (((isnotnull(d_month_seq#63) AND (d_month_seq#63 >= 1212)) AND (d_month_seq#63 <= 1223)) AND isnotnull(d_date_sk#5)) (71) Project [codegen id : 1] Output [2]: [d_date_sk#5, d_date#6] -Input [3]: [d_date_sk#5, d_date#6, d_month_seq#75] +Input [3]: [d_date_sk#5, d_date#6, d_month_seq#63] (72) BroadcastExchange Input [2]: [d_date_sk#5, d_date#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#76] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=13] -Subquery:2 Hosting operator id = 26 Hosting Expression = ss_sold_date_sk#31 IN dynamicpruning#4 +Subquery:2 Hosting operator id = 26 Hosting Expression = ss_sold_date_sk#26 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q57.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q57.sf100/explain.txt index d46c1d8c7e336..857e754bf67d7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q57.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q57.sf100/explain.txt @@ -96,7 +96,7 @@ Condition : (isnotnull(cc_call_center_sk#9) AND isnotnull(cc_name#10)) (10) BroadcastExchange Input [2]: [cc_call_center_sk#9, cc_name#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_call_center_sk#1] @@ -109,175 +109,175 @@ Input [7]: [cs_call_center_sk#1, cs_item_sk#2, cs_sales_price#3, d_year#7, d_moy (13) Exchange Input [5]: [cs_item_sk#2, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10] -Arguments: hashpartitioning(cs_item_sk#2, 5), ENSURE_REQUIREMENTS, [id=#12] +Arguments: hashpartitioning(cs_item_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) Sort [codegen id : 4] Input [5]: [cs_item_sk#2, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10] Arguments: [cs_item_sk#2 ASC NULLS FIRST], false, 0 (15) Scan parquet default.item -Output [3]: [i_item_sk#13, i_brand#14, i_category#15] +Output [3]: [i_item_sk#11, i_brand#12, i_category#13] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_category), IsNotNull(i_brand)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [3]: [i_item_sk#13, i_brand#14, i_category#15] +Input [3]: [i_item_sk#11, i_brand#12, i_category#13] (17) Filter [codegen id : 5] -Input [3]: [i_item_sk#13, i_brand#14, i_category#15] -Condition : ((isnotnull(i_item_sk#13) AND isnotnull(i_category#15)) AND isnotnull(i_brand#14)) +Input [3]: [i_item_sk#11, i_brand#12, i_category#13] +Condition : ((isnotnull(i_item_sk#11) AND isnotnull(i_category#13)) AND isnotnull(i_brand#12)) (18) Exchange -Input [3]: [i_item_sk#13, i_brand#14, i_category#15] -Arguments: hashpartitioning(i_item_sk#13, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [3]: [i_item_sk#11, i_brand#12, i_category#13] +Arguments: hashpartitioning(i_item_sk#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 6] -Input [3]: [i_item_sk#13, i_brand#14, i_category#15] -Arguments: [i_item_sk#13 ASC NULLS FIRST], false, 0 +Input [3]: [i_item_sk#11, i_brand#12, i_category#13] +Arguments: [i_item_sk#11 ASC NULLS FIRST], false, 0 (20) SortMergeJoin [codegen id : 7] Left keys [1]: [cs_item_sk#2] -Right keys [1]: [i_item_sk#13] +Right keys [1]: [i_item_sk#11] Join condition: None (21) Project [codegen id : 7] -Output [6]: [i_brand#14, i_category#15, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10] -Input [8]: [cs_item_sk#2, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10, i_item_sk#13, i_brand#14, i_category#15] +Output [6]: [i_brand#12, i_category#13, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10] +Input [8]: [cs_item_sk#2, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10, i_item_sk#11, i_brand#12, i_category#13] (22) HashAggregate [codegen id : 7] -Input [6]: [i_brand#14, i_category#15, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10] -Keys [5]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8] +Input [6]: [i_brand#12, i_category#13, cs_sales_price#3, d_year#7, d_moy#8, cc_name#10] +Keys [5]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8] Functions [1]: [partial_sum(UnscaledValue(cs_sales_price#3))] -Aggregate Attributes [1]: [sum#17] -Results [6]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum#18] +Aggregate Attributes [1]: [sum#14] +Results [6]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum#15] (23) Exchange -Input [6]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum#18] -Arguments: hashpartitioning(i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [6]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum#15] +Arguments: hashpartitioning(i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) HashAggregate [codegen id : 8] -Input [6]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum#18] -Keys [5]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8] +Input [6]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum#15] +Keys [5]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8] Functions [1]: [sum(UnscaledValue(cs_sales_price#3))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#3))#20] -Results [7]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, MakeDecimal(sum(UnscaledValue(cs_sales_price#3))#20,17,2) AS sum_sales#21, MakeDecimal(sum(UnscaledValue(cs_sales_price#3))#20,17,2) AS _w0#22] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#3))#16] +Results [7]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, MakeDecimal(sum(UnscaledValue(cs_sales_price#3))#16,17,2) AS sum_sales#17, MakeDecimal(sum(UnscaledValue(cs_sales_price#3))#16,17,2) AS _w0#18] (25) Exchange -Input [7]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, _w0#22] -Arguments: hashpartitioning(i_category#15, i_brand#14, cc_name#10, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [7]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, _w0#18] +Arguments: hashpartitioning(i_category#13, i_brand#12, cc_name#10, 5), ENSURE_REQUIREMENTS, [plan_id=5] (26) Sort [codegen id : 9] -Input [7]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, _w0#22] -Arguments: [i_category#15 ASC NULLS FIRST, i_brand#14 ASC NULLS FIRST, cc_name#10 ASC NULLS FIRST, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST], false, 0 +Input [7]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, _w0#18] +Arguments: [i_category#13 ASC NULLS FIRST, i_brand#12 ASC NULLS FIRST, cc_name#10 ASC NULLS FIRST, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST], false, 0 (27) Window -Input [7]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, _w0#22] -Arguments: [rank(d_year#7, d_moy#8) windowspecdefinition(i_category#15, i_brand#14, cc_name#10, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#24], [i_category#15, i_brand#14, cc_name#10], [d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST] +Input [7]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, _w0#18] +Arguments: [rank(d_year#7, d_moy#8) windowspecdefinition(i_category#13, i_brand#12, cc_name#10, d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#19], [i_category#13, i_brand#12, cc_name#10], [d_year#7 ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST] (28) Filter [codegen id : 10] -Input [8]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, _w0#22, rn#24] +Input [8]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, _w0#18, rn#19] Condition : (isnotnull(d_year#7) AND (d_year#7 = 1999)) (29) Window -Input [8]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, _w0#22, rn#24] -Arguments: [avg(_w0#22) windowspecdefinition(i_category#15, i_brand#14, cc_name#10, d_year#7, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#25], [i_category#15, i_brand#14, cc_name#10, d_year#7] +Input [8]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, _w0#18, rn#19] +Arguments: [avg(_w0#18) windowspecdefinition(i_category#13, i_brand#12, cc_name#10, d_year#7, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#20], [i_category#13, i_brand#12, cc_name#10, d_year#7] (30) Filter [codegen id : 11] -Input [9]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, _w0#22, rn#24, avg_monthly_sales#25] -Condition : ((isnotnull(avg_monthly_sales#25) AND (avg_monthly_sales#25 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) +Input [9]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, _w0#18, rn#19, avg_monthly_sales#20] +Condition : ((isnotnull(avg_monthly_sales#20) AND (avg_monthly_sales#20 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#17 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) (31) Project [codegen id : 11] -Output [8]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, avg_monthly_sales#25, rn#24] -Input [9]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, _w0#22, rn#24, avg_monthly_sales#25] +Output [8]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, avg_monthly_sales#20, rn#19] +Input [9]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, _w0#18, rn#19, avg_monthly_sales#20] (32) Exchange -Input [8]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, avg_monthly_sales#25, rn#24] -Arguments: hashpartitioning(i_category#15, i_brand#14, cc_name#10, rn#24, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [8]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, avg_monthly_sales#20, rn#19] +Arguments: hashpartitioning(i_category#13, i_brand#12, cc_name#10, rn#19, 5), ENSURE_REQUIREMENTS, [plan_id=6] (33) Sort [codegen id : 12] -Input [8]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, avg_monthly_sales#25, rn#24] -Arguments: [i_category#15 ASC NULLS FIRST, i_brand#14 ASC NULLS FIRST, cc_name#10 ASC NULLS FIRST, rn#24 ASC NULLS FIRST], false, 0 +Input [8]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, avg_monthly_sales#20, rn#19] +Arguments: [i_category#13 ASC NULLS FIRST, i_brand#12 ASC NULLS FIRST, cc_name#10 ASC NULLS FIRST, rn#19 ASC NULLS FIRST], false, 0 (34) ReusedExchange [Reuses operator id: 23] -Output [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum#32] +Output [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum#26] (35) HashAggregate [codegen id : 20] -Input [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum#32] -Keys [5]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31] -Functions [1]: [sum(UnscaledValue(cs_sales_price#33))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#33))#20] -Results [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, MakeDecimal(sum(UnscaledValue(cs_sales_price#33))#20,17,2) AS sum_sales#21] +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum#26] +Keys [5]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25] +Functions [1]: [sum(UnscaledValue(cs_sales_price#27))] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#27))#16] +Results [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, MakeDecimal(sum(UnscaledValue(cs_sales_price#27))#16,17,2) AS sum_sales#17] (36) Exchange -Input [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum_sales#21] -Arguments: hashpartitioning(i_category#27, i_brand#28, cc_name#29, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17] +Arguments: hashpartitioning(i_category#21, i_brand#22, cc_name#23, 5), ENSURE_REQUIREMENTS, [plan_id=7] (37) Sort [codegen id : 21] -Input [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum_sales#21] -Arguments: [i_category#27 ASC NULLS FIRST, i_brand#28 ASC NULLS FIRST, cc_name#29 ASC NULLS FIRST, d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST], false, 0 +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17] +Arguments: [i_category#21 ASC NULLS FIRST, i_brand#22 ASC NULLS FIRST, cc_name#23 ASC NULLS FIRST, d_year#24 ASC NULLS FIRST, d_moy#25 ASC NULLS FIRST], false, 0 (38) Window -Input [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum_sales#21] -Arguments: [rank(d_year#30, d_moy#31) windowspecdefinition(i_category#27, i_brand#28, cc_name#29, d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#35], [i_category#27, i_brand#28, cc_name#29], [d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST] +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17] +Arguments: [rank(d_year#24, d_moy#25) windowspecdefinition(i_category#21, i_brand#22, cc_name#23, d_year#24 ASC NULLS FIRST, d_moy#25 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#28], [i_category#21, i_brand#22, cc_name#23], [d_year#24 ASC NULLS FIRST, d_moy#25 ASC NULLS FIRST] (39) Project [codegen id : 22] -Output [5]: [i_category#27, i_brand#28, cc_name#29, sum_sales#21 AS sum_sales#36, rn#35] -Input [7]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum_sales#21, rn#35] +Output [5]: [i_category#21, i_brand#22, cc_name#23, sum_sales#17 AS sum_sales#29, rn#28] +Input [7]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17, rn#28] (40) Exchange -Input [5]: [i_category#27, i_brand#28, cc_name#29, sum_sales#36, rn#35] -Arguments: hashpartitioning(i_category#27, i_brand#28, cc_name#29, (rn#35 + 1), 5), ENSURE_REQUIREMENTS, [id=#37] +Input [5]: [i_category#21, i_brand#22, cc_name#23, sum_sales#29, rn#28] +Arguments: hashpartitioning(i_category#21, i_brand#22, cc_name#23, (rn#28 + 1), 5), ENSURE_REQUIREMENTS, [plan_id=8] (41) Sort [codegen id : 23] -Input [5]: [i_category#27, i_brand#28, cc_name#29, sum_sales#36, rn#35] -Arguments: [i_category#27 ASC NULLS FIRST, i_brand#28 ASC NULLS FIRST, cc_name#29 ASC NULLS FIRST, (rn#35 + 1) ASC NULLS FIRST], false, 0 +Input [5]: [i_category#21, i_brand#22, cc_name#23, sum_sales#29, rn#28] +Arguments: [i_category#21 ASC NULLS FIRST, i_brand#22 ASC NULLS FIRST, cc_name#23 ASC NULLS FIRST, (rn#28 + 1) ASC NULLS FIRST], false, 0 (42) SortMergeJoin [codegen id : 24] -Left keys [4]: [i_category#15, i_brand#14, cc_name#10, rn#24] -Right keys [4]: [i_category#27, i_brand#28, cc_name#29, (rn#35 + 1)] +Left keys [4]: [i_category#13, i_brand#12, cc_name#10, rn#19] +Right keys [4]: [i_category#21, i_brand#22, cc_name#23, (rn#28 + 1)] Join condition: None (43) Project [codegen id : 24] -Output [9]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, avg_monthly_sales#25, rn#24, sum_sales#36] -Input [13]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, avg_monthly_sales#25, rn#24, i_category#27, i_brand#28, cc_name#29, sum_sales#36, rn#35] +Output [9]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, avg_monthly_sales#20, rn#19, sum_sales#29] +Input [13]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, avg_monthly_sales#20, rn#19, i_category#21, i_brand#22, cc_name#23, sum_sales#29, rn#28] (44) ReusedExchange [Reuses operator id: 36] -Output [6]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#21] +Output [6]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17] (45) Sort [codegen id : 33] -Input [6]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#21] -Arguments: [i_category#38 ASC NULLS FIRST, i_brand#39 ASC NULLS FIRST, cc_name#40 ASC NULLS FIRST, d_year#41 ASC NULLS FIRST, d_moy#42 ASC NULLS FIRST], false, 0 +Input [6]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17] +Arguments: [i_category#30 ASC NULLS FIRST, i_brand#31 ASC NULLS FIRST, cc_name#32 ASC NULLS FIRST, d_year#33 ASC NULLS FIRST, d_moy#34 ASC NULLS FIRST], false, 0 (46) Window -Input [6]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#21] -Arguments: [rank(d_year#41, d_moy#42) windowspecdefinition(i_category#38, i_brand#39, cc_name#40, d_year#41 ASC NULLS FIRST, d_moy#42 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#43], [i_category#38, i_brand#39, cc_name#40], [d_year#41 ASC NULLS FIRST, d_moy#42 ASC NULLS FIRST] +Input [6]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17] +Arguments: [rank(d_year#33, d_moy#34) windowspecdefinition(i_category#30, i_brand#31, cc_name#32, d_year#33 ASC NULLS FIRST, d_moy#34 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#35], [i_category#30, i_brand#31, cc_name#32], [d_year#33 ASC NULLS FIRST, d_moy#34 ASC NULLS FIRST] (47) Project [codegen id : 34] -Output [5]: [i_category#38, i_brand#39, cc_name#40, sum_sales#21 AS sum_sales#44, rn#43] -Input [7]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#21, rn#43] +Output [5]: [i_category#30, i_brand#31, cc_name#32, sum_sales#17 AS sum_sales#36, rn#35] +Input [7]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17, rn#35] (48) Exchange -Input [5]: [i_category#38, i_brand#39, cc_name#40, sum_sales#44, rn#43] -Arguments: hashpartitioning(i_category#38, i_brand#39, cc_name#40, (rn#43 - 1), 5), ENSURE_REQUIREMENTS, [id=#45] +Input [5]: [i_category#30, i_brand#31, cc_name#32, sum_sales#36, rn#35] +Arguments: hashpartitioning(i_category#30, i_brand#31, cc_name#32, (rn#35 - 1), 5), ENSURE_REQUIREMENTS, [plan_id=9] (49) Sort [codegen id : 35] -Input [5]: [i_category#38, i_brand#39, cc_name#40, sum_sales#44, rn#43] -Arguments: [i_category#38 ASC NULLS FIRST, i_brand#39 ASC NULLS FIRST, cc_name#40 ASC NULLS FIRST, (rn#43 - 1) ASC NULLS FIRST], false, 0 +Input [5]: [i_category#30, i_brand#31, cc_name#32, sum_sales#36, rn#35] +Arguments: [i_category#30 ASC NULLS FIRST, i_brand#31 ASC NULLS FIRST, cc_name#32 ASC NULLS FIRST, (rn#35 - 1) ASC NULLS FIRST], false, 0 (50) SortMergeJoin [codegen id : 36] -Left keys [4]: [i_category#15, i_brand#14, cc_name#10, rn#24] -Right keys [4]: [i_category#38, i_brand#39, cc_name#40, (rn#43 - 1)] +Left keys [4]: [i_category#13, i_brand#12, cc_name#10, rn#19] +Right keys [4]: [i_category#30, i_brand#31, cc_name#32, (rn#35 - 1)] Join condition: None (51) Project [codegen id : 36] -Output [8]: [i_category#15, i_brand#14, d_year#7, d_moy#8, avg_monthly_sales#25, sum_sales#21, sum_sales#36 AS psum#46, sum_sales#44 AS nsum#47] -Input [14]: [i_category#15, i_brand#14, cc_name#10, d_year#7, d_moy#8, sum_sales#21, avg_monthly_sales#25, rn#24, sum_sales#36, i_category#38, i_brand#39, cc_name#40, sum_sales#44, rn#43] +Output [8]: [i_category#13, i_brand#12, d_year#7, d_moy#8, avg_monthly_sales#20, sum_sales#17, sum_sales#29 AS psum#37, sum_sales#36 AS nsum#38] +Input [14]: [i_category#13, i_brand#12, cc_name#10, d_year#7, d_moy#8, sum_sales#17, avg_monthly_sales#20, rn#19, sum_sales#29, i_category#30, i_brand#31, cc_name#32, sum_sales#36, rn#35] (52) TakeOrderedAndProject -Input [8]: [i_category#15, i_brand#14, d_year#7, d_moy#8, avg_monthly_sales#25, sum_sales#21, psum#46, nsum#47] -Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, d_year#7 ASC NULLS FIRST], [i_category#15, i_brand#14, d_year#7, d_moy#8, avg_monthly_sales#25, sum_sales#21, psum#46, nsum#47] +Input [8]: [i_category#13, i_brand#12, d_year#7, d_moy#8, avg_monthly_sales#20, sum_sales#17, psum#37, nsum#38] +Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#17 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, d_year#7 ASC NULLS FIRST], [i_category#13, i_brand#12, d_year#7, d_moy#8, avg_monthly_sales#20, sum_sales#17, psum#37, nsum#38] ===== Subqueries ===== @@ -304,6 +304,6 @@ Condition : ((((d_year#7 = 1999) OR ((d_year#7 = 1998) AND (d_moy#8 = 12))) OR ( (56) BroadcastExchange Input [3]: [d_date_sk#6, d_year#7, d_moy#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#48] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=10] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q57/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q57/explain.txt index 675acedcd9cad..0fa6debb223ab 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q57/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q57/explain.txt @@ -77,7 +77,7 @@ Condition : (isnotnull(cs_item_sk#5) AND isnotnull(cs_call_center_sk#4)) (7) BroadcastExchange Input [4]: [cs_call_center_sk#4, cs_item_sk#5, cs_sales_price#6, cs_sold_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 4] Left keys [1]: [i_item_sk#1] @@ -89,160 +89,160 @@ Output [5]: [i_brand#2, i_category#3, cs_call_center_sk#4, cs_sales_price#6, cs_ Input [7]: [i_item_sk#1, i_brand#2, i_category#3, cs_call_center_sk#4, cs_item_sk#5, cs_sales_price#6, cs_sold_date_sk#7] (10) ReusedExchange [Reuses operator id: 49] -Output [3]: [d_date_sk#10, d_year#11, d_moy#12] +Output [3]: [d_date_sk#9, d_year#10, d_moy#11] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_sold_date_sk#7] -Right keys [1]: [d_date_sk#10] +Right keys [1]: [d_date_sk#9] Join condition: None (12) Project [codegen id : 4] -Output [6]: [i_brand#2, i_category#3, cs_call_center_sk#4, cs_sales_price#6, d_year#11, d_moy#12] -Input [8]: [i_brand#2, i_category#3, cs_call_center_sk#4, cs_sales_price#6, cs_sold_date_sk#7, d_date_sk#10, d_year#11, d_moy#12] +Output [6]: [i_brand#2, i_category#3, cs_call_center_sk#4, cs_sales_price#6, d_year#10, d_moy#11] +Input [8]: [i_brand#2, i_category#3, cs_call_center_sk#4, cs_sales_price#6, cs_sold_date_sk#7, d_date_sk#9, d_year#10, d_moy#11] (13) Scan parquet default.call_center -Output [2]: [cc_call_center_sk#13, cc_name#14] +Output [2]: [cc_call_center_sk#12, cc_name#13] Batched: true Location [not included in comparison]/{warehouse_dir}/call_center] PushedFilters: [IsNotNull(cc_call_center_sk), IsNotNull(cc_name)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [2]: [cc_call_center_sk#13, cc_name#14] +Input [2]: [cc_call_center_sk#12, cc_name#13] (15) Filter [codegen id : 3] -Input [2]: [cc_call_center_sk#13, cc_name#14] -Condition : (isnotnull(cc_call_center_sk#13) AND isnotnull(cc_name#14)) +Input [2]: [cc_call_center_sk#12, cc_name#13] +Condition : (isnotnull(cc_call_center_sk#12) AND isnotnull(cc_name#13)) (16) BroadcastExchange -Input [2]: [cc_call_center_sk#13, cc_name#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Input [2]: [cc_call_center_sk#12, cc_name#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_call_center_sk#4] -Right keys [1]: [cc_call_center_sk#13] +Right keys [1]: [cc_call_center_sk#12] Join condition: None (18) Project [codegen id : 4] -Output [6]: [i_brand#2, i_category#3, cs_sales_price#6, d_year#11, d_moy#12, cc_name#14] -Input [8]: [i_brand#2, i_category#3, cs_call_center_sk#4, cs_sales_price#6, d_year#11, d_moy#12, cc_call_center_sk#13, cc_name#14] +Output [6]: [i_brand#2, i_category#3, cs_sales_price#6, d_year#10, d_moy#11, cc_name#13] +Input [8]: [i_brand#2, i_category#3, cs_call_center_sk#4, cs_sales_price#6, d_year#10, d_moy#11, cc_call_center_sk#12, cc_name#13] (19) HashAggregate [codegen id : 4] -Input [6]: [i_brand#2, i_category#3, cs_sales_price#6, d_year#11, d_moy#12, cc_name#14] -Keys [5]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12] +Input [6]: [i_brand#2, i_category#3, cs_sales_price#6, d_year#10, d_moy#11, cc_name#13] +Keys [5]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11] Functions [1]: [partial_sum(UnscaledValue(cs_sales_price#6))] -Aggregate Attributes [1]: [sum#16] -Results [6]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum#17] +Aggregate Attributes [1]: [sum#14] +Results [6]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum#15] (20) Exchange -Input [6]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum#17] -Arguments: hashpartitioning(i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [6]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum#15] +Arguments: hashpartitioning(i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 5] -Input [6]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum#17] -Keys [5]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12] +Input [6]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum#15] +Keys [5]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11] Functions [1]: [sum(UnscaledValue(cs_sales_price#6))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#6))#19] -Results [7]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, MakeDecimal(sum(UnscaledValue(cs_sales_price#6))#19,17,2) AS sum_sales#20, MakeDecimal(sum(UnscaledValue(cs_sales_price#6))#19,17,2) AS _w0#21] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#6))#16] +Results [7]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, MakeDecimal(sum(UnscaledValue(cs_sales_price#6))#16,17,2) AS sum_sales#17, MakeDecimal(sum(UnscaledValue(cs_sales_price#6))#16,17,2) AS _w0#18] (22) Exchange -Input [7]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, _w0#21] -Arguments: hashpartitioning(i_category#3, i_brand#2, cc_name#14, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [7]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, _w0#18] +Arguments: hashpartitioning(i_category#3, i_brand#2, cc_name#13, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) Sort [codegen id : 6] -Input [7]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, _w0#21] -Arguments: [i_category#3 ASC NULLS FIRST, i_brand#2 ASC NULLS FIRST, cc_name#14 ASC NULLS FIRST, d_year#11 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST], false, 0 +Input [7]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, _w0#18] +Arguments: [i_category#3 ASC NULLS FIRST, i_brand#2 ASC NULLS FIRST, cc_name#13 ASC NULLS FIRST, d_year#10 ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST], false, 0 (24) Window -Input [7]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, _w0#21] -Arguments: [rank(d_year#11, d_moy#12) windowspecdefinition(i_category#3, i_brand#2, cc_name#14, d_year#11 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#23], [i_category#3, i_brand#2, cc_name#14], [d_year#11 ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST] +Input [7]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, _w0#18] +Arguments: [rank(d_year#10, d_moy#11) windowspecdefinition(i_category#3, i_brand#2, cc_name#13, d_year#10 ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#19], [i_category#3, i_brand#2, cc_name#13], [d_year#10 ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST] (25) Filter [codegen id : 7] -Input [8]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, _w0#21, rn#23] -Condition : (isnotnull(d_year#11) AND (d_year#11 = 1999)) +Input [8]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, _w0#18, rn#19] +Condition : (isnotnull(d_year#10) AND (d_year#10 = 1999)) (26) Window -Input [8]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, _w0#21, rn#23] -Arguments: [avg(_w0#21) windowspecdefinition(i_category#3, i_brand#2, cc_name#14, d_year#11, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#24], [i_category#3, i_brand#2, cc_name#14, d_year#11] +Input [8]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, _w0#18, rn#19] +Arguments: [avg(_w0#18) windowspecdefinition(i_category#3, i_brand#2, cc_name#13, d_year#10, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#20], [i_category#3, i_brand#2, cc_name#13, d_year#10] (27) Filter [codegen id : 22] -Input [9]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, _w0#21, rn#23, avg_monthly_sales#24] -Condition : ((isnotnull(avg_monthly_sales#24) AND (avg_monthly_sales#24 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#20 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) +Input [9]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, _w0#18, rn#19, avg_monthly_sales#20] +Condition : ((isnotnull(avg_monthly_sales#20) AND (avg_monthly_sales#20 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#17 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)))) / promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(38,16)) > 0.1000000000000000)) (28) Project [codegen id : 22] -Output [8]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, avg_monthly_sales#24, rn#23] -Input [9]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, _w0#21, rn#23, avg_monthly_sales#24] +Output [8]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, avg_monthly_sales#20, rn#19] +Input [9]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, _w0#18, rn#19, avg_monthly_sales#20] (29) ReusedExchange [Reuses operator id: 20] -Output [6]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29, sum#30] +Output [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum#26] (30) HashAggregate [codegen id : 12] -Input [6]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29, sum#30] -Keys [5]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29] -Functions [1]: [sum(UnscaledValue(cs_sales_price#31))] -Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#31))#19] -Results [6]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29, MakeDecimal(sum(UnscaledValue(cs_sales_price#31))#19,17,2) AS sum_sales#20] +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum#26] +Keys [5]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25] +Functions [1]: [sum(UnscaledValue(cs_sales_price#27))] +Aggregate Attributes [1]: [sum(UnscaledValue(cs_sales_price#27))#16] +Results [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, MakeDecimal(sum(UnscaledValue(cs_sales_price#27))#16,17,2) AS sum_sales#17] (31) Exchange -Input [6]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29, sum_sales#20] -Arguments: hashpartitioning(i_category#25, i_brand#26, cc_name#27, 5), ENSURE_REQUIREMENTS, [id=#32] +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17] +Arguments: hashpartitioning(i_category#21, i_brand#22, cc_name#23, 5), ENSURE_REQUIREMENTS, [plan_id=5] (32) Sort [codegen id : 13] -Input [6]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29, sum_sales#20] -Arguments: [i_category#25 ASC NULLS FIRST, i_brand#26 ASC NULLS FIRST, cc_name#27 ASC NULLS FIRST, d_year#28 ASC NULLS FIRST, d_moy#29 ASC NULLS FIRST], false, 0 +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17] +Arguments: [i_category#21 ASC NULLS FIRST, i_brand#22 ASC NULLS FIRST, cc_name#23 ASC NULLS FIRST, d_year#24 ASC NULLS FIRST, d_moy#25 ASC NULLS FIRST], false, 0 (33) Window -Input [6]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29, sum_sales#20] -Arguments: [rank(d_year#28, d_moy#29) windowspecdefinition(i_category#25, i_brand#26, cc_name#27, d_year#28 ASC NULLS FIRST, d_moy#29 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#33], [i_category#25, i_brand#26, cc_name#27], [d_year#28 ASC NULLS FIRST, d_moy#29 ASC NULLS FIRST] +Input [6]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17] +Arguments: [rank(d_year#24, d_moy#25) windowspecdefinition(i_category#21, i_brand#22, cc_name#23, d_year#24 ASC NULLS FIRST, d_moy#25 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#28], [i_category#21, i_brand#22, cc_name#23], [d_year#24 ASC NULLS FIRST, d_moy#25 ASC NULLS FIRST] (34) Project [codegen id : 14] -Output [5]: [i_category#25, i_brand#26, cc_name#27, sum_sales#20 AS sum_sales#34, rn#33] -Input [7]: [i_category#25, i_brand#26, cc_name#27, d_year#28, d_moy#29, sum_sales#20, rn#33] +Output [5]: [i_category#21, i_brand#22, cc_name#23, sum_sales#17 AS sum_sales#29, rn#28] +Input [7]: [i_category#21, i_brand#22, cc_name#23, d_year#24, d_moy#25, sum_sales#17, rn#28] (35) BroadcastExchange -Input [5]: [i_category#25, i_brand#26, cc_name#27, sum_sales#34, rn#33] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, false] + 1)),false), [id=#35] +Input [5]: [i_category#21, i_brand#22, cc_name#23, sum_sales#29, rn#28] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, false] + 1)),false), [plan_id=6] (36) BroadcastHashJoin [codegen id : 22] -Left keys [4]: [i_category#3, i_brand#2, cc_name#14, rn#23] -Right keys [4]: [i_category#25, i_brand#26, cc_name#27, (rn#33 + 1)] +Left keys [4]: [i_category#3, i_brand#2, cc_name#13, rn#19] +Right keys [4]: [i_category#21, i_brand#22, cc_name#23, (rn#28 + 1)] Join condition: None (37) Project [codegen id : 22] -Output [9]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, avg_monthly_sales#24, rn#23, sum_sales#34] -Input [13]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, avg_monthly_sales#24, rn#23, i_category#25, i_brand#26, cc_name#27, sum_sales#34, rn#33] +Output [9]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, avg_monthly_sales#20, rn#19, sum_sales#29] +Input [13]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, avg_monthly_sales#20, rn#19, i_category#21, i_brand#22, cc_name#23, sum_sales#29, rn#28] (38) ReusedExchange [Reuses operator id: 31] -Output [6]: [i_category#36, i_brand#37, cc_name#38, d_year#39, d_moy#40, sum_sales#20] +Output [6]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17] (39) Sort [codegen id : 20] -Input [6]: [i_category#36, i_brand#37, cc_name#38, d_year#39, d_moy#40, sum_sales#20] -Arguments: [i_category#36 ASC NULLS FIRST, i_brand#37 ASC NULLS FIRST, cc_name#38 ASC NULLS FIRST, d_year#39 ASC NULLS FIRST, d_moy#40 ASC NULLS FIRST], false, 0 +Input [6]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17] +Arguments: [i_category#30 ASC NULLS FIRST, i_brand#31 ASC NULLS FIRST, cc_name#32 ASC NULLS FIRST, d_year#33 ASC NULLS FIRST, d_moy#34 ASC NULLS FIRST], false, 0 (40) Window -Input [6]: [i_category#36, i_brand#37, cc_name#38, d_year#39, d_moy#40, sum_sales#20] -Arguments: [rank(d_year#39, d_moy#40) windowspecdefinition(i_category#36, i_brand#37, cc_name#38, d_year#39 ASC NULLS FIRST, d_moy#40 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#41], [i_category#36, i_brand#37, cc_name#38], [d_year#39 ASC NULLS FIRST, d_moy#40 ASC NULLS FIRST] +Input [6]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17] +Arguments: [rank(d_year#33, d_moy#34) windowspecdefinition(i_category#30, i_brand#31, cc_name#32, d_year#33 ASC NULLS FIRST, d_moy#34 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#35], [i_category#30, i_brand#31, cc_name#32], [d_year#33 ASC NULLS FIRST, d_moy#34 ASC NULLS FIRST] (41) Project [codegen id : 21] -Output [5]: [i_category#36, i_brand#37, cc_name#38, sum_sales#20 AS sum_sales#42, rn#41] -Input [7]: [i_category#36, i_brand#37, cc_name#38, d_year#39, d_moy#40, sum_sales#20, rn#41] +Output [5]: [i_category#30, i_brand#31, cc_name#32, sum_sales#17 AS sum_sales#36, rn#35] +Input [7]: [i_category#30, i_brand#31, cc_name#32, d_year#33, d_moy#34, sum_sales#17, rn#35] (42) BroadcastExchange -Input [5]: [i_category#36, i_brand#37, cc_name#38, sum_sales#42, rn#41] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, false] - 1)),false), [id=#43] +Input [5]: [i_category#30, i_brand#31, cc_name#32, sum_sales#36, rn#35] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, false] - 1)),false), [plan_id=7] (43) BroadcastHashJoin [codegen id : 22] -Left keys [4]: [i_category#3, i_brand#2, cc_name#14, rn#23] -Right keys [4]: [i_category#36, i_brand#37, cc_name#38, (rn#41 - 1)] +Left keys [4]: [i_category#3, i_brand#2, cc_name#13, rn#19] +Right keys [4]: [i_category#30, i_brand#31, cc_name#32, (rn#35 - 1)] Join condition: None (44) Project [codegen id : 22] -Output [8]: [i_category#3, i_brand#2, d_year#11, d_moy#12, avg_monthly_sales#24, sum_sales#20, sum_sales#34 AS psum#44, sum_sales#42 AS nsum#45] -Input [14]: [i_category#3, i_brand#2, cc_name#14, d_year#11, d_moy#12, sum_sales#20, avg_monthly_sales#24, rn#23, sum_sales#34, i_category#36, i_brand#37, cc_name#38, sum_sales#42, rn#41] +Output [8]: [i_category#3, i_brand#2, d_year#10, d_moy#11, avg_monthly_sales#20, sum_sales#17, sum_sales#29 AS psum#37, sum_sales#36 AS nsum#38] +Input [14]: [i_category#3, i_brand#2, cc_name#13, d_year#10, d_moy#11, sum_sales#17, avg_monthly_sales#20, rn#19, sum_sales#29, i_category#30, i_brand#31, cc_name#32, sum_sales#36, rn#35] (45) TakeOrderedAndProject -Input [8]: [i_category#3, i_brand#2, d_year#11, d_moy#12, avg_monthly_sales#24, sum_sales#20, psum#44, nsum#45] -Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#20 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, d_year#11 ASC NULLS FIRST], [i_category#3, i_brand#2, d_year#11, d_moy#12, avg_monthly_sales#24, sum_sales#20, psum#44, nsum#45] +Input [8]: [i_category#3, i_brand#2, d_year#10, d_moy#11, avg_monthly_sales#20, sum_sales#17, psum#37, nsum#38] +Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#17 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#20 as decimal(22,6)))), DecimalType(22,6)) ASC NULLS FIRST, d_year#10 ASC NULLS FIRST], [i_category#3, i_brand#2, d_year#10, d_moy#11, avg_monthly_sales#20, sum_sales#17, psum#37, nsum#38] ===== Subqueries ===== @@ -254,21 +254,21 @@ BroadcastExchange (49) (46) Scan parquet default.date_dim -Output [3]: [d_date_sk#10, d_year#11, d_moy#12] +Output [3]: [d_date_sk#9, d_year#10, d_moy#11] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [Or(Or(EqualTo(d_year,1999),And(EqualTo(d_year,1998),EqualTo(d_moy,12))),And(EqualTo(d_year,2000),EqualTo(d_moy,1))), IsNotNull(d_date_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#12] +Input [3]: [d_date_sk#9, d_year#10, d_moy#11] (48) Filter [codegen id : 1] -Input [3]: [d_date_sk#10, d_year#11, d_moy#12] -Condition : ((((d_year#11 = 1999) OR ((d_year#11 = 1998) AND (d_moy#12 = 12))) OR ((d_year#11 = 2000) AND (d_moy#12 = 1))) AND isnotnull(d_date_sk#10)) +Input [3]: [d_date_sk#9, d_year#10, d_moy#11] +Condition : ((((d_year#10 = 1999) OR ((d_year#10 = 1998) AND (d_moy#11 = 12))) OR ((d_year#10 = 2000) AND (d_moy#11 = 1))) AND isnotnull(d_date_sk#9)) (49) BroadcastExchange -Input [3]: [d_date_sk#10, d_year#11, d_moy#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#46] +Input [3]: [d_date_sk#9, d_year#10, d_moy#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a.sf100/explain.txt index 88d3ec5d20f2b..05c7834b2abcb 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a.sf100/explain.txt @@ -147,7 +147,7 @@ Condition : isnotnull(s_store_sk#22) (13) BroadcastExchange Input [2]: [s_store_sk#22, s_store_id#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (14) BroadcastHashJoin [codegen id : 5] Left keys [1]: [store_sk#6] @@ -159,362 +159,362 @@ Output [6]: [date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11, s_s Input [8]: [store_sk#6, date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_sk#22, s_store_id#23] (16) ReusedExchange [Reuses operator id: 95] -Output [1]: [d_date_sk#25] +Output [1]: [d_date_sk#24] (17) BroadcastHashJoin [codegen id : 5] Left keys [1]: [date_sk#7] -Right keys [1]: [d_date_sk#25] +Right keys [1]: [d_date_sk#24] Join condition: None (18) Project [codegen id : 5] Output [5]: [sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#23] -Input [7]: [date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#23, d_date_sk#25] +Input [7]: [date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#23, d_date_sk#24] (19) HashAggregate [codegen id : 5] Input [5]: [sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#23] Keys [1]: [s_store_id#23] Functions [4]: [partial_sum(UnscaledValue(sales_price#8)), partial_sum(UnscaledValue(return_amt#10)), partial_sum(UnscaledValue(profit#9)), partial_sum(UnscaledValue(net_loss#11))] -Aggregate Attributes [4]: [sum#26, sum#27, sum#28, sum#29] -Results [5]: [s_store_id#23, sum#30, sum#31, sum#32, sum#33] +Aggregate Attributes [4]: [sum#25, sum#26, sum#27, sum#28] +Results [5]: [s_store_id#23, sum#29, sum#30, sum#31, sum#32] (20) Exchange -Input [5]: [s_store_id#23, sum#30, sum#31, sum#32, sum#33] -Arguments: hashpartitioning(s_store_id#23, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [5]: [s_store_id#23, sum#29, sum#30, sum#31, sum#32] +Arguments: hashpartitioning(s_store_id#23, 5), ENSURE_REQUIREMENTS, [plan_id=2] (21) HashAggregate [codegen id : 6] -Input [5]: [s_store_id#23, sum#30, sum#31, sum#32, sum#33] +Input [5]: [s_store_id#23, sum#29, sum#30, sum#31, sum#32] Keys [1]: [s_store_id#23] Functions [4]: [sum(UnscaledValue(sales_price#8)), sum(UnscaledValue(return_amt#10)), sum(UnscaledValue(profit#9)), sum(UnscaledValue(net_loss#11))] -Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#8))#35, sum(UnscaledValue(return_amt#10))#36, sum(UnscaledValue(profit#9))#37, sum(UnscaledValue(net_loss#11))#38] -Results [5]: [store channel AS channel#39, concat(store, s_store_id#23) AS id#40, MakeDecimal(sum(UnscaledValue(sales_price#8))#35,17,2) AS sales#41, MakeDecimal(sum(UnscaledValue(return_amt#10))#36,17,2) AS returns#42, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#9))#37,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#11))#38,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#43] +Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#8))#33, sum(UnscaledValue(return_amt#10))#34, sum(UnscaledValue(profit#9))#35, sum(UnscaledValue(net_loss#11))#36] +Results [5]: [store channel AS channel#37, concat(store, s_store_id#23) AS id#38, MakeDecimal(sum(UnscaledValue(sales_price#8))#33,17,2) AS sales#39, MakeDecimal(sum(UnscaledValue(return_amt#10))#34,17,2) AS returns#40, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#9))#35,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#11))#36,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#41] (22) Scan parquet default.catalog_sales -Output [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] +Output [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#47), dynamicpruningexpression(cs_sold_date_sk#47 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#45), dynamicpruningexpression(cs_sold_date_sk#45 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cs_catalog_page_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 7] -Input [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] +Input [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] (24) Filter [codegen id : 7] -Input [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] -Condition : isnotnull(cs_catalog_page_sk#44) +Input [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] +Condition : isnotnull(cs_catalog_page_sk#42) (25) Project [codegen id : 7] -Output [6]: [cs_catalog_page_sk#44 AS page_sk#48, cs_sold_date_sk#47 AS date_sk#49, cs_ext_sales_price#45 AS sales_price#50, cs_net_profit#46 AS profit#51, 0.00 AS return_amt#52, 0.00 AS net_loss#53] -Input [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] +Output [6]: [cs_catalog_page_sk#42 AS page_sk#46, cs_sold_date_sk#45 AS date_sk#47, cs_ext_sales_price#43 AS sales_price#48, cs_net_profit#44 AS profit#49, 0.00 AS return_amt#50, 0.00 AS net_loss#51] +Input [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] (26) Scan parquet default.catalog_returns -Output [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Output [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cr_returned_date_sk#57), dynamicpruningexpression(cr_returned_date_sk#57 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cr_returned_date_sk#55), dynamicpruningexpression(cr_returned_date_sk#55 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cr_catalog_page_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 8] -Input [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Input [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] (28) Filter [codegen id : 8] -Input [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] -Condition : isnotnull(cr_catalog_page_sk#54) +Input [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] +Condition : isnotnull(cr_catalog_page_sk#52) (29) Project [codegen id : 8] -Output [6]: [cr_catalog_page_sk#54 AS page_sk#58, cr_returned_date_sk#57 AS date_sk#59, 0.00 AS sales_price#60, 0.00 AS profit#61, cr_return_amount#55 AS return_amt#62, cr_net_loss#56 AS net_loss#63] -Input [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Output [6]: [cr_catalog_page_sk#52 AS page_sk#56, cr_returned_date_sk#55 AS date_sk#57, 0.00 AS sales_price#58, 0.00 AS profit#59, cr_return_amount#53 AS return_amt#60, cr_net_loss#54 AS net_loss#61] +Input [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] (30) Union (31) Scan parquet default.catalog_page -Output [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] +Output [2]: [cp_catalog_page_sk#62, cp_catalog_page_id#63] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_page] PushedFilters: [IsNotNull(cp_catalog_page_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 9] -Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] +Input [2]: [cp_catalog_page_sk#62, cp_catalog_page_id#63] (33) Filter [codegen id : 9] -Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] -Condition : isnotnull(cp_catalog_page_sk#64) +Input [2]: [cp_catalog_page_sk#62, cp_catalog_page_id#63] +Condition : isnotnull(cp_catalog_page_sk#62) (34) BroadcastExchange -Input [2]: [cp_catalog_page_sk#64, cp_catalog_page_id#65] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#66] +Input [2]: [cp_catalog_page_sk#62, cp_catalog_page_id#63] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (35) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [page_sk#48] -Right keys [1]: [cp_catalog_page_sk#64] +Left keys [1]: [page_sk#46] +Right keys [1]: [cp_catalog_page_sk#62] Join condition: None (36) Project [codegen id : 11] -Output [6]: [date_sk#49, sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_id#65] -Input [8]: [page_sk#48, date_sk#49, sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_sk#64, cp_catalog_page_id#65] +Output [6]: [date_sk#47, sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_id#63] +Input [8]: [page_sk#46, date_sk#47, sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_sk#62, cp_catalog_page_id#63] (37) ReusedExchange [Reuses operator id: 95] -Output [1]: [d_date_sk#67] +Output [1]: [d_date_sk#64] (38) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [date_sk#49] -Right keys [1]: [d_date_sk#67] +Left keys [1]: [date_sk#47] +Right keys [1]: [d_date_sk#64] Join condition: None (39) Project [codegen id : 11] -Output [5]: [sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_id#65] -Input [7]: [date_sk#49, sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_id#65, d_date_sk#67] +Output [5]: [sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_id#63] +Input [7]: [date_sk#47, sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_id#63, d_date_sk#64] (40) HashAggregate [codegen id : 11] -Input [5]: [sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_id#65] -Keys [1]: [cp_catalog_page_id#65] -Functions [4]: [partial_sum(UnscaledValue(sales_price#50)), partial_sum(UnscaledValue(return_amt#52)), partial_sum(UnscaledValue(profit#51)), partial_sum(UnscaledValue(net_loss#53))] -Aggregate Attributes [4]: [sum#68, sum#69, sum#70, sum#71] -Results [5]: [cp_catalog_page_id#65, sum#72, sum#73, sum#74, sum#75] +Input [5]: [sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_id#63] +Keys [1]: [cp_catalog_page_id#63] +Functions [4]: [partial_sum(UnscaledValue(sales_price#48)), partial_sum(UnscaledValue(return_amt#50)), partial_sum(UnscaledValue(profit#49)), partial_sum(UnscaledValue(net_loss#51))] +Aggregate Attributes [4]: [sum#65, sum#66, sum#67, sum#68] +Results [5]: [cp_catalog_page_id#63, sum#69, sum#70, sum#71, sum#72] (41) Exchange -Input [5]: [cp_catalog_page_id#65, sum#72, sum#73, sum#74, sum#75] -Arguments: hashpartitioning(cp_catalog_page_id#65, 5), ENSURE_REQUIREMENTS, [id=#76] +Input [5]: [cp_catalog_page_id#63, sum#69, sum#70, sum#71, sum#72] +Arguments: hashpartitioning(cp_catalog_page_id#63, 5), ENSURE_REQUIREMENTS, [plan_id=4] (42) HashAggregate [codegen id : 12] -Input [5]: [cp_catalog_page_id#65, sum#72, sum#73, sum#74, sum#75] -Keys [1]: [cp_catalog_page_id#65] -Functions [4]: [sum(UnscaledValue(sales_price#50)), sum(UnscaledValue(return_amt#52)), sum(UnscaledValue(profit#51)), sum(UnscaledValue(net_loss#53))] -Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#50))#77, sum(UnscaledValue(return_amt#52))#78, sum(UnscaledValue(profit#51))#79, sum(UnscaledValue(net_loss#53))#80] -Results [5]: [catalog channel AS channel#81, concat(catalog_page, cp_catalog_page_id#65) AS id#82, MakeDecimal(sum(UnscaledValue(sales_price#50))#77,17,2) AS sales#83, MakeDecimal(sum(UnscaledValue(return_amt#52))#78,17,2) AS returns#84, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#51))#79,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#53))#80,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#85] +Input [5]: [cp_catalog_page_id#63, sum#69, sum#70, sum#71, sum#72] +Keys [1]: [cp_catalog_page_id#63] +Functions [4]: [sum(UnscaledValue(sales_price#48)), sum(UnscaledValue(return_amt#50)), sum(UnscaledValue(profit#49)), sum(UnscaledValue(net_loss#51))] +Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#48))#73, sum(UnscaledValue(return_amt#50))#74, sum(UnscaledValue(profit#49))#75, sum(UnscaledValue(net_loss#51))#76] +Results [5]: [catalog channel AS channel#77, concat(catalog_page, cp_catalog_page_id#63) AS id#78, MakeDecimal(sum(UnscaledValue(sales_price#48))#73,17,2) AS sales#79, MakeDecimal(sum(UnscaledValue(return_amt#50))#74,17,2) AS returns#80, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#49))#75,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#51))#76,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#81] (43) Scan parquet default.web_sales -Output [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] +Output [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#89), dynamicpruningexpression(ws_sold_date_sk#89 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#85), dynamicpruningexpression(ws_sold_date_sk#85 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_web_site_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 13] -Input [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] +Input [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] (45) Filter [codegen id : 13] -Input [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] -Condition : isnotnull(ws_web_site_sk#86) +Input [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] +Condition : isnotnull(ws_web_site_sk#82) (46) Project [codegen id : 13] -Output [6]: [ws_web_site_sk#86 AS wsr_web_site_sk#90, ws_sold_date_sk#89 AS date_sk#91, ws_ext_sales_price#87 AS sales_price#92, ws_net_profit#88 AS profit#93, 0.00 AS return_amt#94, 0.00 AS net_loss#95] -Input [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] +Output [6]: [ws_web_site_sk#82 AS wsr_web_site_sk#86, ws_sold_date_sk#85 AS date_sk#87, ws_ext_sales_price#83 AS sales_price#88, ws_net_profit#84 AS profit#89, 0.00 AS return_amt#90, 0.00 AS net_loss#91] +Input [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] (47) Scan parquet default.web_returns -Output [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] +Output [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(wr_returned_date_sk#100), dynamicpruningexpression(wr_returned_date_sk#100 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(wr_returned_date_sk#96), dynamicpruningexpression(wr_returned_date_sk#96 IN dynamicpruning#5)] ReadSchema: struct (48) ColumnarToRow [codegen id : 14] -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] +Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] (49) Exchange -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] -Arguments: hashpartitioning(wr_item_sk#96, wr_order_number#97, 5), ENSURE_REQUIREMENTS, [id=#101] +Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] +Arguments: hashpartitioning(wr_item_sk#92, wr_order_number#93, 5), ENSURE_REQUIREMENTS, [plan_id=5] (50) Sort [codegen id : 15] -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] -Arguments: [wr_item_sk#96 ASC NULLS FIRST, wr_order_number#97 ASC NULLS FIRST], false, 0 +Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] +Arguments: [wr_item_sk#92 ASC NULLS FIRST, wr_order_number#93 ASC NULLS FIRST], false, 0 (51) Scan parquet default.web_sales -Output [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] +Output [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_order_number), IsNotNull(ws_web_site_sk)] ReadSchema: struct (52) ColumnarToRow [codegen id : 16] -Input [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] +Input [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] (53) Filter [codegen id : 16] -Input [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] -Condition : ((isnotnull(ws_item_sk#102) AND isnotnull(ws_order_number#104)) AND isnotnull(ws_web_site_sk#103)) +Input [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] +Condition : ((isnotnull(ws_item_sk#97) AND isnotnull(ws_order_number#99)) AND isnotnull(ws_web_site_sk#98)) (54) Project [codegen id : 16] -Output [3]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104] -Input [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] +Output [3]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99] +Input [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] (55) Exchange -Input [3]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104] -Arguments: hashpartitioning(ws_item_sk#102, ws_order_number#104, 5), ENSURE_REQUIREMENTS, [id=#106] +Input [3]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99] +Arguments: hashpartitioning(ws_item_sk#97, ws_order_number#99, 5), ENSURE_REQUIREMENTS, [plan_id=6] (56) Sort [codegen id : 17] -Input [3]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104] -Arguments: [ws_item_sk#102 ASC NULLS FIRST, ws_order_number#104 ASC NULLS FIRST], false, 0 +Input [3]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99] +Arguments: [ws_item_sk#97 ASC NULLS FIRST, ws_order_number#99 ASC NULLS FIRST], false, 0 (57) SortMergeJoin [codegen id : 18] -Left keys [2]: [wr_item_sk#96, wr_order_number#97] -Right keys [2]: [ws_item_sk#102, ws_order_number#104] +Left keys [2]: [wr_item_sk#92, wr_order_number#93] +Right keys [2]: [ws_item_sk#97, ws_order_number#99] Join condition: None (58) Project [codegen id : 18] -Output [6]: [ws_web_site_sk#103 AS wsr_web_site_sk#107, wr_returned_date_sk#100 AS date_sk#108, 0.00 AS sales_price#109, 0.00 AS profit#110, wr_return_amt#98 AS return_amt#111, wr_net_loss#99 AS net_loss#112] -Input [8]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100, ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104] +Output [6]: [ws_web_site_sk#98 AS wsr_web_site_sk#101, wr_returned_date_sk#96 AS date_sk#102, 0.00 AS sales_price#103, 0.00 AS profit#104, wr_return_amt#94 AS return_amt#105, wr_net_loss#95 AS net_loss#106] +Input [8]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96, ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99] (59) Union (60) Scan parquet default.web_site -Output [2]: [web_site_sk#113, web_site_id#114] +Output [2]: [web_site_sk#107, web_site_id#108] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_site_sk)] ReadSchema: struct (61) ColumnarToRow [codegen id : 19] -Input [2]: [web_site_sk#113, web_site_id#114] +Input [2]: [web_site_sk#107, web_site_id#108] (62) Filter [codegen id : 19] -Input [2]: [web_site_sk#113, web_site_id#114] -Condition : isnotnull(web_site_sk#113) +Input [2]: [web_site_sk#107, web_site_id#108] +Condition : isnotnull(web_site_sk#107) (63) BroadcastExchange -Input [2]: [web_site_sk#113, web_site_id#114] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#115] +Input [2]: [web_site_sk#107, web_site_id#108] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (64) BroadcastHashJoin [codegen id : 21] -Left keys [1]: [wsr_web_site_sk#90] -Right keys [1]: [web_site_sk#113] +Left keys [1]: [wsr_web_site_sk#86] +Right keys [1]: [web_site_sk#107] Join condition: None (65) Project [codegen id : 21] -Output [6]: [date_sk#91, sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_id#114] -Input [8]: [wsr_web_site_sk#90, date_sk#91, sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_sk#113, web_site_id#114] +Output [6]: [date_sk#87, sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_id#108] +Input [8]: [wsr_web_site_sk#86, date_sk#87, sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_sk#107, web_site_id#108] (66) ReusedExchange [Reuses operator id: 95] -Output [1]: [d_date_sk#116] +Output [1]: [d_date_sk#109] (67) BroadcastHashJoin [codegen id : 21] -Left keys [1]: [date_sk#91] -Right keys [1]: [d_date_sk#116] +Left keys [1]: [date_sk#87] +Right keys [1]: [d_date_sk#109] Join condition: None (68) Project [codegen id : 21] -Output [5]: [sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_id#114] -Input [7]: [date_sk#91, sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_id#114, d_date_sk#116] +Output [5]: [sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_id#108] +Input [7]: [date_sk#87, sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_id#108, d_date_sk#109] (69) HashAggregate [codegen id : 21] -Input [5]: [sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_id#114] -Keys [1]: [web_site_id#114] -Functions [4]: [partial_sum(UnscaledValue(sales_price#92)), partial_sum(UnscaledValue(return_amt#94)), partial_sum(UnscaledValue(profit#93)), partial_sum(UnscaledValue(net_loss#95))] -Aggregate Attributes [4]: [sum#117, sum#118, sum#119, sum#120] -Results [5]: [web_site_id#114, sum#121, sum#122, sum#123, sum#124] +Input [5]: [sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_id#108] +Keys [1]: [web_site_id#108] +Functions [4]: [partial_sum(UnscaledValue(sales_price#88)), partial_sum(UnscaledValue(return_amt#90)), partial_sum(UnscaledValue(profit#89)), partial_sum(UnscaledValue(net_loss#91))] +Aggregate Attributes [4]: [sum#110, sum#111, sum#112, sum#113] +Results [5]: [web_site_id#108, sum#114, sum#115, sum#116, sum#117] (70) Exchange -Input [5]: [web_site_id#114, sum#121, sum#122, sum#123, sum#124] -Arguments: hashpartitioning(web_site_id#114, 5), ENSURE_REQUIREMENTS, [id=#125] +Input [5]: [web_site_id#108, sum#114, sum#115, sum#116, sum#117] +Arguments: hashpartitioning(web_site_id#108, 5), ENSURE_REQUIREMENTS, [plan_id=8] (71) HashAggregate [codegen id : 22] -Input [5]: [web_site_id#114, sum#121, sum#122, sum#123, sum#124] -Keys [1]: [web_site_id#114] -Functions [4]: [sum(UnscaledValue(sales_price#92)), sum(UnscaledValue(return_amt#94)), sum(UnscaledValue(profit#93)), sum(UnscaledValue(net_loss#95))] -Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#92))#126, sum(UnscaledValue(return_amt#94))#127, sum(UnscaledValue(profit#93))#128, sum(UnscaledValue(net_loss#95))#129] -Results [5]: [web channel AS channel#130, concat(web_site, web_site_id#114) AS id#131, MakeDecimal(sum(UnscaledValue(sales_price#92))#126,17,2) AS sales#132, MakeDecimal(sum(UnscaledValue(return_amt#94))#127,17,2) AS returns#133, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#93))#128,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#95))#129,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#134] +Input [5]: [web_site_id#108, sum#114, sum#115, sum#116, sum#117] +Keys [1]: [web_site_id#108] +Functions [4]: [sum(UnscaledValue(sales_price#88)), sum(UnscaledValue(return_amt#90)), sum(UnscaledValue(profit#89)), sum(UnscaledValue(net_loss#91))] +Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#88))#118, sum(UnscaledValue(return_amt#90))#119, sum(UnscaledValue(profit#89))#120, sum(UnscaledValue(net_loss#91))#121] +Results [5]: [web channel AS channel#122, concat(web_site, web_site_id#108) AS id#123, MakeDecimal(sum(UnscaledValue(sales_price#88))#118,17,2) AS sales#124, MakeDecimal(sum(UnscaledValue(return_amt#90))#119,17,2) AS returns#125, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#89))#120,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#91))#121,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#126] (72) Union (73) HashAggregate [codegen id : 23] -Input [5]: [channel#39, id#40, sales#41, returns#42, profit#43] -Keys [2]: [channel#39, id#40] -Functions [3]: [partial_sum(sales#41), partial_sum(returns#42), partial_sum(profit#43)] -Aggregate Attributes [6]: [sum#135, isEmpty#136, sum#137, isEmpty#138, sum#139, isEmpty#140] -Results [8]: [channel#39, id#40, sum#141, isEmpty#142, sum#143, isEmpty#144, sum#145, isEmpty#146] +Input [5]: [channel#37, id#38, sales#39, returns#40, profit#41] +Keys [2]: [channel#37, id#38] +Functions [3]: [partial_sum(sales#39), partial_sum(returns#40), partial_sum(profit#41)] +Aggregate Attributes [6]: [sum#127, isEmpty#128, sum#129, isEmpty#130, sum#131, isEmpty#132] +Results [8]: [channel#37, id#38, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] (74) Exchange -Input [8]: [channel#39, id#40, sum#141, isEmpty#142, sum#143, isEmpty#144, sum#145, isEmpty#146] -Arguments: hashpartitioning(channel#39, id#40, 5), ENSURE_REQUIREMENTS, [id=#147] +Input [8]: [channel#37, id#38, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] +Arguments: hashpartitioning(channel#37, id#38, 5), ENSURE_REQUIREMENTS, [plan_id=9] (75) HashAggregate [codegen id : 24] -Input [8]: [channel#39, id#40, sum#141, isEmpty#142, sum#143, isEmpty#144, sum#145, isEmpty#146] -Keys [2]: [channel#39, id#40] -Functions [3]: [sum(sales#41), sum(returns#42), sum(profit#43)] -Aggregate Attributes [3]: [sum(sales#41)#148, sum(returns#42)#149, sum(profit#43)#150] -Results [5]: [channel#39, id#40, cast(sum(sales#41)#148 as decimal(37,2)) AS sales#151, cast(sum(returns#42)#149 as decimal(37,2)) AS returns#152, cast(sum(profit#43)#150 as decimal(38,2)) AS profit#153] +Input [8]: [channel#37, id#38, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] +Keys [2]: [channel#37, id#38] +Functions [3]: [sum(sales#39), sum(returns#40), sum(profit#41)] +Aggregate Attributes [3]: [sum(sales#39)#139, sum(returns#40)#140, sum(profit#41)#141] +Results [5]: [channel#37, id#38, cast(sum(sales#39)#139 as decimal(37,2)) AS sales#142, cast(sum(returns#40)#140 as decimal(37,2)) AS returns#143, cast(sum(profit#41)#141 as decimal(38,2)) AS profit#144] (76) ReusedExchange [Reuses operator id: 74] -Output [8]: [channel#39, id#40, sum#141, isEmpty#142, sum#143, isEmpty#144, sum#145, isEmpty#146] +Output [8]: [channel#37, id#38, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] (77) HashAggregate [codegen id : 48] -Input [8]: [channel#39, id#40, sum#141, isEmpty#142, sum#143, isEmpty#144, sum#145, isEmpty#146] -Keys [2]: [channel#39, id#40] -Functions [3]: [sum(sales#41), sum(returns#42), sum(profit#43)] -Aggregate Attributes [3]: [sum(sales#41)#148, sum(returns#42)#149, sum(profit#43)#150] -Results [4]: [channel#39, sum(sales#41)#148 AS sales#154, sum(returns#42)#149 AS returns#155, sum(profit#43)#150 AS profit#156] +Input [8]: [channel#37, id#38, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] +Keys [2]: [channel#37, id#38] +Functions [3]: [sum(sales#39), sum(returns#40), sum(profit#41)] +Aggregate Attributes [3]: [sum(sales#39)#139, sum(returns#40)#140, sum(profit#41)#141] +Results [4]: [channel#37, sum(sales#39)#139 AS sales#145, sum(returns#40)#140 AS returns#146, sum(profit#41)#141 AS profit#147] (78) HashAggregate [codegen id : 48] -Input [4]: [channel#39, sales#154, returns#155, profit#156] -Keys [1]: [channel#39] -Functions [3]: [partial_sum(sales#154), partial_sum(returns#155), partial_sum(profit#156)] -Aggregate Attributes [6]: [sum#157, isEmpty#158, sum#159, isEmpty#160, sum#161, isEmpty#162] -Results [7]: [channel#39, sum#163, isEmpty#164, sum#165, isEmpty#166, sum#167, isEmpty#168] +Input [4]: [channel#37, sales#145, returns#146, profit#147] +Keys [1]: [channel#37] +Functions [3]: [partial_sum(sales#145), partial_sum(returns#146), partial_sum(profit#147)] +Aggregate Attributes [6]: [sum#148, isEmpty#149, sum#150, isEmpty#151, sum#152, isEmpty#153] +Results [7]: [channel#37, sum#154, isEmpty#155, sum#156, isEmpty#157, sum#158, isEmpty#159] (79) Exchange -Input [7]: [channel#39, sum#163, isEmpty#164, sum#165, isEmpty#166, sum#167, isEmpty#168] -Arguments: hashpartitioning(channel#39, 5), ENSURE_REQUIREMENTS, [id=#169] +Input [7]: [channel#37, sum#154, isEmpty#155, sum#156, isEmpty#157, sum#158, isEmpty#159] +Arguments: hashpartitioning(channel#37, 5), ENSURE_REQUIREMENTS, [plan_id=10] (80) HashAggregate [codegen id : 49] -Input [7]: [channel#39, sum#163, isEmpty#164, sum#165, isEmpty#166, sum#167, isEmpty#168] -Keys [1]: [channel#39] -Functions [3]: [sum(sales#154), sum(returns#155), sum(profit#156)] -Aggregate Attributes [3]: [sum(sales#154)#170, sum(returns#155)#171, sum(profit#156)#172] -Results [5]: [channel#39, null AS id#173, sum(sales#154)#170 AS sum(sales)#174, sum(returns#155)#171 AS sum(returns)#175, sum(profit#156)#172 AS sum(profit)#176] +Input [7]: [channel#37, sum#154, isEmpty#155, sum#156, isEmpty#157, sum#158, isEmpty#159] +Keys [1]: [channel#37] +Functions [3]: [sum(sales#145), sum(returns#146), sum(profit#147)] +Aggregate Attributes [3]: [sum(sales#145)#160, sum(returns#146)#161, sum(profit#147)#162] +Results [5]: [channel#37, null AS id#163, sum(sales#145)#160 AS sum(sales)#164, sum(returns#146)#161 AS sum(returns)#165, sum(profit#147)#162 AS sum(profit)#166] (81) ReusedExchange [Reuses operator id: 74] -Output [8]: [channel#39, id#40, sum#141, isEmpty#142, sum#143, isEmpty#144, sum#145, isEmpty#146] +Output [8]: [channel#37, id#38, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] (82) HashAggregate [codegen id : 73] -Input [8]: [channel#39, id#40, sum#141, isEmpty#142, sum#143, isEmpty#144, sum#145, isEmpty#146] -Keys [2]: [channel#39, id#40] -Functions [3]: [sum(sales#41), sum(returns#42), sum(profit#43)] -Aggregate Attributes [3]: [sum(sales#41)#148, sum(returns#42)#149, sum(profit#43)#150] -Results [3]: [sum(sales#41)#148 AS sales#154, sum(returns#42)#149 AS returns#155, sum(profit#43)#150 AS profit#156] +Input [8]: [channel#37, id#38, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] +Keys [2]: [channel#37, id#38] +Functions [3]: [sum(sales#39), sum(returns#40), sum(profit#41)] +Aggregate Attributes [3]: [sum(sales#39)#139, sum(returns#40)#140, sum(profit#41)#141] +Results [3]: [sum(sales#39)#139 AS sales#145, sum(returns#40)#140 AS returns#146, sum(profit#41)#141 AS profit#147] (83) HashAggregate [codegen id : 73] -Input [3]: [sales#154, returns#155, profit#156] +Input [3]: [sales#145, returns#146, profit#147] Keys: [] -Functions [3]: [partial_sum(sales#154), partial_sum(returns#155), partial_sum(profit#156)] -Aggregate Attributes [6]: [sum#177, isEmpty#178, sum#179, isEmpty#180, sum#181, isEmpty#182] -Results [6]: [sum#183, isEmpty#184, sum#185, isEmpty#186, sum#187, isEmpty#188] +Functions [3]: [partial_sum(sales#145), partial_sum(returns#146), partial_sum(profit#147)] +Aggregate Attributes [6]: [sum#167, isEmpty#168, sum#169, isEmpty#170, sum#171, isEmpty#172] +Results [6]: [sum#173, isEmpty#174, sum#175, isEmpty#176, sum#177, isEmpty#178] (84) Exchange -Input [6]: [sum#183, isEmpty#184, sum#185, isEmpty#186, sum#187, isEmpty#188] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#189] +Input [6]: [sum#173, isEmpty#174, sum#175, isEmpty#176, sum#177, isEmpty#178] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11] (85) HashAggregate [codegen id : 74] -Input [6]: [sum#183, isEmpty#184, sum#185, isEmpty#186, sum#187, isEmpty#188] +Input [6]: [sum#173, isEmpty#174, sum#175, isEmpty#176, sum#177, isEmpty#178] Keys: [] -Functions [3]: [sum(sales#154), sum(returns#155), sum(profit#156)] -Aggregate Attributes [3]: [sum(sales#154)#190, sum(returns#155)#191, sum(profit#156)#192] -Results [5]: [null AS channel#193, null AS id#194, sum(sales#154)#190 AS sum(sales)#195, sum(returns#155)#191 AS sum(returns)#196, sum(profit#156)#192 AS sum(profit)#197] +Functions [3]: [sum(sales#145), sum(returns#146), sum(profit#147)] +Aggregate Attributes [3]: [sum(sales#145)#179, sum(returns#146)#180, sum(profit#147)#181] +Results [5]: [null AS channel#182, null AS id#183, sum(sales#145)#179 AS sum(sales)#184, sum(returns#146)#180 AS sum(returns)#185, sum(profit#147)#181 AS sum(profit)#186] (86) Union (87) HashAggregate [codegen id : 75] -Input [5]: [channel#39, id#40, sales#151, returns#152, profit#153] -Keys [5]: [channel#39, id#40, sales#151, returns#152, profit#153] +Input [5]: [channel#37, id#38, sales#142, returns#143, profit#144] +Keys [5]: [channel#37, id#38, sales#142, returns#143, profit#144] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#39, id#40, sales#151, returns#152, profit#153] +Results [5]: [channel#37, id#38, sales#142, returns#143, profit#144] (88) Exchange -Input [5]: [channel#39, id#40, sales#151, returns#152, profit#153] -Arguments: hashpartitioning(channel#39, id#40, sales#151, returns#152, profit#153, 5), ENSURE_REQUIREMENTS, [id=#198] +Input [5]: [channel#37, id#38, sales#142, returns#143, profit#144] +Arguments: hashpartitioning(channel#37, id#38, sales#142, returns#143, profit#144, 5), ENSURE_REQUIREMENTS, [plan_id=12] (89) HashAggregate [codegen id : 76] -Input [5]: [channel#39, id#40, sales#151, returns#152, profit#153] -Keys [5]: [channel#39, id#40, sales#151, returns#152, profit#153] +Input [5]: [channel#37, id#38, sales#142, returns#143, profit#144] +Keys [5]: [channel#37, id#38, sales#142, returns#143, profit#144] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#39, id#40, sales#151, returns#152, profit#153] +Results [5]: [channel#37, id#38, sales#142, returns#143, profit#144] (90) TakeOrderedAndProject -Input [5]: [channel#39, id#40, sales#151, returns#152, profit#153] -Arguments: 100, [channel#39 ASC NULLS FIRST, id#40 ASC NULLS FIRST], [channel#39, id#40, sales#151, returns#152, profit#153] +Input [5]: [channel#37, id#38, sales#142, returns#143, profit#144] +Arguments: 100, [channel#37 ASC NULLS FIRST, id#38 ASC NULLS FIRST], [channel#37, id#38, sales#142, returns#143, profit#144] ===== Subqueries ===== @@ -527,35 +527,35 @@ BroadcastExchange (95) (91) Scan parquet default.date_dim -Output [2]: [d_date_sk#25, d_date#199] +Output [2]: [d_date_sk#24, d_date#187] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1998-08-04), LessThanOrEqual(d_date,1998-08-18), IsNotNull(d_date_sk)] ReadSchema: struct (92) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#25, d_date#199] +Input [2]: [d_date_sk#24, d_date#187] (93) Filter [codegen id : 1] -Input [2]: [d_date_sk#25, d_date#199] -Condition : (((isnotnull(d_date#199) AND (d_date#199 >= 1998-08-04)) AND (d_date#199 <= 1998-08-18)) AND isnotnull(d_date_sk#25)) +Input [2]: [d_date_sk#24, d_date#187] +Condition : (((isnotnull(d_date#187) AND (d_date#187 >= 1998-08-04)) AND (d_date#187 <= 1998-08-18)) AND isnotnull(d_date_sk#24)) (94) Project [codegen id : 1] -Output [1]: [d_date_sk#25] -Input [2]: [d_date_sk#25, d_date#199] +Output [1]: [d_date_sk#24] +Input [2]: [d_date_sk#24, d_date#187] (95) BroadcastExchange -Input [1]: [d_date_sk#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#200] +Input [1]: [d_date_sk#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=13] Subquery:2 Hosting operator id = 5 Hosting Expression = sr_returned_date_sk#15 IN dynamicpruning#5 -Subquery:3 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#47 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#45 IN dynamicpruning#5 -Subquery:4 Hosting operator id = 26 Hosting Expression = cr_returned_date_sk#57 IN dynamicpruning#5 +Subquery:4 Hosting operator id = 26 Hosting Expression = cr_returned_date_sk#55 IN dynamicpruning#5 -Subquery:5 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#89 IN dynamicpruning#5 +Subquery:5 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#85 IN dynamicpruning#5 -Subquery:6 Hosting operator id = 47 Hosting Expression = wr_returned_date_sk#100 IN dynamicpruning#5 +Subquery:6 Hosting operator id = 47 Hosting Expression = wr_returned_date_sk#96 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a/explain.txt index cadbb12000ba3..225f1d26b0eab 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q5a/explain.txt @@ -156,7 +156,7 @@ Condition : isnotnull(s_store_sk#23) (16) BroadcastExchange Input [2]: [s_store_sk#23, s_store_id#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (17) BroadcastHashJoin [codegen id : 5] Left keys [1]: [store_sk#6] @@ -171,335 +171,335 @@ Input [7]: [store_sk#6, sales_price#8, profit#9, return_amt#10, net_loss#11, s_s Input [5]: [sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#24] Keys [1]: [s_store_id#24] Functions [4]: [partial_sum(UnscaledValue(sales_price#8)), partial_sum(UnscaledValue(return_amt#10)), partial_sum(UnscaledValue(profit#9)), partial_sum(UnscaledValue(net_loss#11))] -Aggregate Attributes [4]: [sum#26, sum#27, sum#28, sum#29] -Results [5]: [s_store_id#24, sum#30, sum#31, sum#32, sum#33] +Aggregate Attributes [4]: [sum#25, sum#26, sum#27, sum#28] +Results [5]: [s_store_id#24, sum#29, sum#30, sum#31, sum#32] (20) Exchange -Input [5]: [s_store_id#24, sum#30, sum#31, sum#32, sum#33] -Arguments: hashpartitioning(s_store_id#24, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [5]: [s_store_id#24, sum#29, sum#30, sum#31, sum#32] +Arguments: hashpartitioning(s_store_id#24, 5), ENSURE_REQUIREMENTS, [plan_id=2] (21) HashAggregate [codegen id : 6] -Input [5]: [s_store_id#24, sum#30, sum#31, sum#32, sum#33] +Input [5]: [s_store_id#24, sum#29, sum#30, sum#31, sum#32] Keys [1]: [s_store_id#24] Functions [4]: [sum(UnscaledValue(sales_price#8)), sum(UnscaledValue(return_amt#10)), sum(UnscaledValue(profit#9)), sum(UnscaledValue(net_loss#11))] -Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#8))#35, sum(UnscaledValue(return_amt#10))#36, sum(UnscaledValue(profit#9))#37, sum(UnscaledValue(net_loss#11))#38] -Results [5]: [store channel AS channel#39, concat(store, s_store_id#24) AS id#40, MakeDecimal(sum(UnscaledValue(sales_price#8))#35,17,2) AS sales#41, MakeDecimal(sum(UnscaledValue(return_amt#10))#36,17,2) AS returns#42, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#9))#37,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#11))#38,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#43] +Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#8))#33, sum(UnscaledValue(return_amt#10))#34, sum(UnscaledValue(profit#9))#35, sum(UnscaledValue(net_loss#11))#36] +Results [5]: [store channel AS channel#37, concat(store, s_store_id#24) AS id#38, MakeDecimal(sum(UnscaledValue(sales_price#8))#33,17,2) AS sales#39, MakeDecimal(sum(UnscaledValue(return_amt#10))#34,17,2) AS returns#40, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#9))#35,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#11))#36,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#41] (22) Scan parquet default.catalog_sales -Output [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] +Output [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#47), dynamicpruningexpression(cs_sold_date_sk#47 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#45), dynamicpruningexpression(cs_sold_date_sk#45 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cs_catalog_page_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 7] -Input [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] +Input [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] (24) Filter [codegen id : 7] -Input [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] -Condition : isnotnull(cs_catalog_page_sk#44) +Input [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] +Condition : isnotnull(cs_catalog_page_sk#42) (25) Project [codegen id : 7] -Output [6]: [cs_catalog_page_sk#44 AS page_sk#48, cs_sold_date_sk#47 AS date_sk#49, cs_ext_sales_price#45 AS sales_price#50, cs_net_profit#46 AS profit#51, 0.00 AS return_amt#52, 0.00 AS net_loss#53] -Input [4]: [cs_catalog_page_sk#44, cs_ext_sales_price#45, cs_net_profit#46, cs_sold_date_sk#47] +Output [6]: [cs_catalog_page_sk#42 AS page_sk#46, cs_sold_date_sk#45 AS date_sk#47, cs_ext_sales_price#43 AS sales_price#48, cs_net_profit#44 AS profit#49, 0.00 AS return_amt#50, 0.00 AS net_loss#51] +Input [4]: [cs_catalog_page_sk#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] (26) Scan parquet default.catalog_returns -Output [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Output [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cr_returned_date_sk#57), dynamicpruningexpression(cr_returned_date_sk#57 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cr_returned_date_sk#55), dynamicpruningexpression(cr_returned_date_sk#55 IN dynamicpruning#5)] PushedFilters: [IsNotNull(cr_catalog_page_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 8] -Input [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Input [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] (28) Filter [codegen id : 8] -Input [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] -Condition : isnotnull(cr_catalog_page_sk#54) +Input [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] +Condition : isnotnull(cr_catalog_page_sk#52) (29) Project [codegen id : 8] -Output [6]: [cr_catalog_page_sk#54 AS page_sk#58, cr_returned_date_sk#57 AS date_sk#59, 0.00 AS sales_price#60, 0.00 AS profit#61, cr_return_amount#55 AS return_amt#62, cr_net_loss#56 AS net_loss#63] -Input [4]: [cr_catalog_page_sk#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Output [6]: [cr_catalog_page_sk#52 AS page_sk#56, cr_returned_date_sk#55 AS date_sk#57, 0.00 AS sales_price#58, 0.00 AS profit#59, cr_return_amount#53 AS return_amt#60, cr_net_loss#54 AS net_loss#61] +Input [4]: [cr_catalog_page_sk#52, cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] (30) Union (31) ReusedExchange [Reuses operator id: 92] -Output [1]: [d_date_sk#64] +Output [1]: [d_date_sk#62] (32) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [date_sk#49] -Right keys [1]: [d_date_sk#64] +Left keys [1]: [date_sk#47] +Right keys [1]: [d_date_sk#62] Join condition: None (33) Project [codegen id : 11] -Output [5]: [page_sk#48, sales_price#50, profit#51, return_amt#52, net_loss#53] -Input [7]: [page_sk#48, date_sk#49, sales_price#50, profit#51, return_amt#52, net_loss#53, d_date_sk#64] +Output [5]: [page_sk#46, sales_price#48, profit#49, return_amt#50, net_loss#51] +Input [7]: [page_sk#46, date_sk#47, sales_price#48, profit#49, return_amt#50, net_loss#51, d_date_sk#62] (34) Scan parquet default.catalog_page -Output [2]: [cp_catalog_page_sk#65, cp_catalog_page_id#66] +Output [2]: [cp_catalog_page_sk#63, cp_catalog_page_id#64] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_page] PushedFilters: [IsNotNull(cp_catalog_page_sk)] ReadSchema: struct (35) ColumnarToRow [codegen id : 10] -Input [2]: [cp_catalog_page_sk#65, cp_catalog_page_id#66] +Input [2]: [cp_catalog_page_sk#63, cp_catalog_page_id#64] (36) Filter [codegen id : 10] -Input [2]: [cp_catalog_page_sk#65, cp_catalog_page_id#66] -Condition : isnotnull(cp_catalog_page_sk#65) +Input [2]: [cp_catalog_page_sk#63, cp_catalog_page_id#64] +Condition : isnotnull(cp_catalog_page_sk#63) (37) BroadcastExchange -Input [2]: [cp_catalog_page_sk#65, cp_catalog_page_id#66] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#67] +Input [2]: [cp_catalog_page_sk#63, cp_catalog_page_id#64] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (38) BroadcastHashJoin [codegen id : 11] -Left keys [1]: [page_sk#48] -Right keys [1]: [cp_catalog_page_sk#65] +Left keys [1]: [page_sk#46] +Right keys [1]: [cp_catalog_page_sk#63] Join condition: None (39) Project [codegen id : 11] -Output [5]: [sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_id#66] -Input [7]: [page_sk#48, sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_sk#65, cp_catalog_page_id#66] +Output [5]: [sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_id#64] +Input [7]: [page_sk#46, sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_sk#63, cp_catalog_page_id#64] (40) HashAggregate [codegen id : 11] -Input [5]: [sales_price#50, profit#51, return_amt#52, net_loss#53, cp_catalog_page_id#66] -Keys [1]: [cp_catalog_page_id#66] -Functions [4]: [partial_sum(UnscaledValue(sales_price#50)), partial_sum(UnscaledValue(return_amt#52)), partial_sum(UnscaledValue(profit#51)), partial_sum(UnscaledValue(net_loss#53))] -Aggregate Attributes [4]: [sum#68, sum#69, sum#70, sum#71] -Results [5]: [cp_catalog_page_id#66, sum#72, sum#73, sum#74, sum#75] +Input [5]: [sales_price#48, profit#49, return_amt#50, net_loss#51, cp_catalog_page_id#64] +Keys [1]: [cp_catalog_page_id#64] +Functions [4]: [partial_sum(UnscaledValue(sales_price#48)), partial_sum(UnscaledValue(return_amt#50)), partial_sum(UnscaledValue(profit#49)), partial_sum(UnscaledValue(net_loss#51))] +Aggregate Attributes [4]: [sum#65, sum#66, sum#67, sum#68] +Results [5]: [cp_catalog_page_id#64, sum#69, sum#70, sum#71, sum#72] (41) Exchange -Input [5]: [cp_catalog_page_id#66, sum#72, sum#73, sum#74, sum#75] -Arguments: hashpartitioning(cp_catalog_page_id#66, 5), ENSURE_REQUIREMENTS, [id=#76] +Input [5]: [cp_catalog_page_id#64, sum#69, sum#70, sum#71, sum#72] +Arguments: hashpartitioning(cp_catalog_page_id#64, 5), ENSURE_REQUIREMENTS, [plan_id=4] (42) HashAggregate [codegen id : 12] -Input [5]: [cp_catalog_page_id#66, sum#72, sum#73, sum#74, sum#75] -Keys [1]: [cp_catalog_page_id#66] -Functions [4]: [sum(UnscaledValue(sales_price#50)), sum(UnscaledValue(return_amt#52)), sum(UnscaledValue(profit#51)), sum(UnscaledValue(net_loss#53))] -Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#50))#77, sum(UnscaledValue(return_amt#52))#78, sum(UnscaledValue(profit#51))#79, sum(UnscaledValue(net_loss#53))#80] -Results [5]: [catalog channel AS channel#81, concat(catalog_page, cp_catalog_page_id#66) AS id#82, MakeDecimal(sum(UnscaledValue(sales_price#50))#77,17,2) AS sales#83, MakeDecimal(sum(UnscaledValue(return_amt#52))#78,17,2) AS returns#84, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#51))#79,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#53))#80,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#85] +Input [5]: [cp_catalog_page_id#64, sum#69, sum#70, sum#71, sum#72] +Keys [1]: [cp_catalog_page_id#64] +Functions [4]: [sum(UnscaledValue(sales_price#48)), sum(UnscaledValue(return_amt#50)), sum(UnscaledValue(profit#49)), sum(UnscaledValue(net_loss#51))] +Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#48))#73, sum(UnscaledValue(return_amt#50))#74, sum(UnscaledValue(profit#49))#75, sum(UnscaledValue(net_loss#51))#76] +Results [5]: [catalog channel AS channel#77, concat(catalog_page, cp_catalog_page_id#64) AS id#78, MakeDecimal(sum(UnscaledValue(sales_price#48))#73,17,2) AS sales#79, MakeDecimal(sum(UnscaledValue(return_amt#50))#74,17,2) AS returns#80, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#49))#75,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#51))#76,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#81] (43) Scan parquet default.web_sales -Output [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] +Output [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#89), dynamicpruningexpression(ws_sold_date_sk#89 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#85), dynamicpruningexpression(ws_sold_date_sk#85 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_web_site_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 13] -Input [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] +Input [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] (45) Filter [codegen id : 13] -Input [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] -Condition : isnotnull(ws_web_site_sk#86) +Input [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] +Condition : isnotnull(ws_web_site_sk#82) (46) Project [codegen id : 13] -Output [6]: [ws_web_site_sk#86 AS wsr_web_site_sk#90, ws_sold_date_sk#89 AS date_sk#91, ws_ext_sales_price#87 AS sales_price#92, ws_net_profit#88 AS profit#93, 0.00 AS return_amt#94, 0.00 AS net_loss#95] -Input [4]: [ws_web_site_sk#86, ws_ext_sales_price#87, ws_net_profit#88, ws_sold_date_sk#89] +Output [6]: [ws_web_site_sk#82 AS wsr_web_site_sk#86, ws_sold_date_sk#85 AS date_sk#87, ws_ext_sales_price#83 AS sales_price#88, ws_net_profit#84 AS profit#89, 0.00 AS return_amt#90, 0.00 AS net_loss#91] +Input [4]: [ws_web_site_sk#82, ws_ext_sales_price#83, ws_net_profit#84, ws_sold_date_sk#85] (47) Scan parquet default.web_returns -Output [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] +Output [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(wr_returned_date_sk#100), dynamicpruningexpression(wr_returned_date_sk#100 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(wr_returned_date_sk#96), dynamicpruningexpression(wr_returned_date_sk#96 IN dynamicpruning#5)] ReadSchema: struct (48) ColumnarToRow [codegen id : 14] -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] +Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] (49) BroadcastExchange -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, true] as bigint), 32) | (cast(input[1, int, true] as bigint) & 4294967295))),false), [id=#101] +Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, true] as bigint), 32) | (cast(input[1, int, true] as bigint) & 4294967295))),false), [plan_id=5] (50) Scan parquet default.web_sales -Output [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] +Output [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] Batched: true Location [not included in comparison]/{warehouse_dir}/web_sales] PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_order_number), IsNotNull(ws_web_site_sk)] ReadSchema: struct (51) ColumnarToRow -Input [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] +Input [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] (52) Filter -Input [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] -Condition : ((isnotnull(ws_item_sk#102) AND isnotnull(ws_order_number#104)) AND isnotnull(ws_web_site_sk#103)) +Input [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] +Condition : ((isnotnull(ws_item_sk#97) AND isnotnull(ws_order_number#99)) AND isnotnull(ws_web_site_sk#98)) (53) Project -Output [3]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104] -Input [4]: [ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104, ws_sold_date_sk#105] +Output [3]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99] +Input [4]: [ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99, ws_sold_date_sk#100] (54) BroadcastHashJoin [codegen id : 15] -Left keys [2]: [wr_item_sk#96, wr_order_number#97] -Right keys [2]: [ws_item_sk#102, ws_order_number#104] +Left keys [2]: [wr_item_sk#92, wr_order_number#93] +Right keys [2]: [ws_item_sk#97, ws_order_number#99] Join condition: None (55) Project [codegen id : 15] -Output [6]: [ws_web_site_sk#103 AS wsr_web_site_sk#106, wr_returned_date_sk#100 AS date_sk#107, 0.00 AS sales_price#108, 0.00 AS profit#109, wr_return_amt#98 AS return_amt#110, wr_net_loss#99 AS net_loss#111] -Input [8]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100, ws_item_sk#102, ws_web_site_sk#103, ws_order_number#104] +Output [6]: [ws_web_site_sk#98 AS wsr_web_site_sk#101, wr_returned_date_sk#96 AS date_sk#102, 0.00 AS sales_price#103, 0.00 AS profit#104, wr_return_amt#94 AS return_amt#105, wr_net_loss#95 AS net_loss#106] +Input [8]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96, ws_item_sk#97, ws_web_site_sk#98, ws_order_number#99] (56) Union (57) ReusedExchange [Reuses operator id: 92] -Output [1]: [d_date_sk#112] +Output [1]: [d_date_sk#107] (58) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [date_sk#91] -Right keys [1]: [d_date_sk#112] +Left keys [1]: [date_sk#87] +Right keys [1]: [d_date_sk#107] Join condition: None (59) Project [codegen id : 18] -Output [5]: [wsr_web_site_sk#90, sales_price#92, profit#93, return_amt#94, net_loss#95] -Input [7]: [wsr_web_site_sk#90, date_sk#91, sales_price#92, profit#93, return_amt#94, net_loss#95, d_date_sk#112] +Output [5]: [wsr_web_site_sk#86, sales_price#88, profit#89, return_amt#90, net_loss#91] +Input [7]: [wsr_web_site_sk#86, date_sk#87, sales_price#88, profit#89, return_amt#90, net_loss#91, d_date_sk#107] (60) Scan parquet default.web_site -Output [2]: [web_site_sk#113, web_site_id#114] +Output [2]: [web_site_sk#108, web_site_id#109] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_site_sk)] ReadSchema: struct (61) ColumnarToRow [codegen id : 17] -Input [2]: [web_site_sk#113, web_site_id#114] +Input [2]: [web_site_sk#108, web_site_id#109] (62) Filter [codegen id : 17] -Input [2]: [web_site_sk#113, web_site_id#114] -Condition : isnotnull(web_site_sk#113) +Input [2]: [web_site_sk#108, web_site_id#109] +Condition : isnotnull(web_site_sk#108) (63) BroadcastExchange -Input [2]: [web_site_sk#113, web_site_id#114] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#115] +Input [2]: [web_site_sk#108, web_site_id#109] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] (64) BroadcastHashJoin [codegen id : 18] -Left keys [1]: [wsr_web_site_sk#90] -Right keys [1]: [web_site_sk#113] +Left keys [1]: [wsr_web_site_sk#86] +Right keys [1]: [web_site_sk#108] Join condition: None (65) Project [codegen id : 18] -Output [5]: [sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_id#114] -Input [7]: [wsr_web_site_sk#90, sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_sk#113, web_site_id#114] +Output [5]: [sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_id#109] +Input [7]: [wsr_web_site_sk#86, sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_sk#108, web_site_id#109] (66) HashAggregate [codegen id : 18] -Input [5]: [sales_price#92, profit#93, return_amt#94, net_loss#95, web_site_id#114] -Keys [1]: [web_site_id#114] -Functions [4]: [partial_sum(UnscaledValue(sales_price#92)), partial_sum(UnscaledValue(return_amt#94)), partial_sum(UnscaledValue(profit#93)), partial_sum(UnscaledValue(net_loss#95))] -Aggregate Attributes [4]: [sum#116, sum#117, sum#118, sum#119] -Results [5]: [web_site_id#114, sum#120, sum#121, sum#122, sum#123] +Input [5]: [sales_price#88, profit#89, return_amt#90, net_loss#91, web_site_id#109] +Keys [1]: [web_site_id#109] +Functions [4]: [partial_sum(UnscaledValue(sales_price#88)), partial_sum(UnscaledValue(return_amt#90)), partial_sum(UnscaledValue(profit#89)), partial_sum(UnscaledValue(net_loss#91))] +Aggregate Attributes [4]: [sum#110, sum#111, sum#112, sum#113] +Results [5]: [web_site_id#109, sum#114, sum#115, sum#116, sum#117] (67) Exchange -Input [5]: [web_site_id#114, sum#120, sum#121, sum#122, sum#123] -Arguments: hashpartitioning(web_site_id#114, 5), ENSURE_REQUIREMENTS, [id=#124] +Input [5]: [web_site_id#109, sum#114, sum#115, sum#116, sum#117] +Arguments: hashpartitioning(web_site_id#109, 5), ENSURE_REQUIREMENTS, [plan_id=7] (68) HashAggregate [codegen id : 19] -Input [5]: [web_site_id#114, sum#120, sum#121, sum#122, sum#123] -Keys [1]: [web_site_id#114] -Functions [4]: [sum(UnscaledValue(sales_price#92)), sum(UnscaledValue(return_amt#94)), sum(UnscaledValue(profit#93)), sum(UnscaledValue(net_loss#95))] -Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#92))#125, sum(UnscaledValue(return_amt#94))#126, sum(UnscaledValue(profit#93))#127, sum(UnscaledValue(net_loss#95))#128] -Results [5]: [web channel AS channel#129, concat(web_site, web_site_id#114) AS id#130, MakeDecimal(sum(UnscaledValue(sales_price#92))#125,17,2) AS sales#131, MakeDecimal(sum(UnscaledValue(return_amt#94))#126,17,2) AS returns#132, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#93))#127,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#95))#128,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#133] +Input [5]: [web_site_id#109, sum#114, sum#115, sum#116, sum#117] +Keys [1]: [web_site_id#109] +Functions [4]: [sum(UnscaledValue(sales_price#88)), sum(UnscaledValue(return_amt#90)), sum(UnscaledValue(profit#89)), sum(UnscaledValue(net_loss#91))] +Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#88))#118, sum(UnscaledValue(return_amt#90))#119, sum(UnscaledValue(profit#89))#120, sum(UnscaledValue(net_loss#91))#121] +Results [5]: [web channel AS channel#122, concat(web_site, web_site_id#109) AS id#123, MakeDecimal(sum(UnscaledValue(sales_price#88))#118,17,2) AS sales#124, MakeDecimal(sum(UnscaledValue(return_amt#90))#119,17,2) AS returns#125, CheckOverflow((promote_precision(cast(MakeDecimal(sum(UnscaledValue(profit#89))#120,17,2) as decimal(18,2))) - promote_precision(cast(MakeDecimal(sum(UnscaledValue(net_loss#91))#121,17,2) as decimal(18,2)))), DecimalType(18,2)) AS profit#126] (69) Union (70) HashAggregate [codegen id : 20] -Input [5]: [channel#39, id#40, sales#41, returns#42, profit#43] -Keys [2]: [channel#39, id#40] -Functions [3]: [partial_sum(sales#41), partial_sum(returns#42), partial_sum(profit#43)] -Aggregate Attributes [6]: [sum#134, isEmpty#135, sum#136, isEmpty#137, sum#138, isEmpty#139] -Results [8]: [channel#39, id#40, sum#140, isEmpty#141, sum#142, isEmpty#143, sum#144, isEmpty#145] +Input [5]: [channel#37, id#38, sales#39, returns#40, profit#41] +Keys [2]: [channel#37, id#38] +Functions [3]: [partial_sum(sales#39), partial_sum(returns#40), partial_sum(profit#41)] +Aggregate Attributes [6]: [sum#127, isEmpty#128, sum#129, isEmpty#130, sum#131, isEmpty#132] +Results [8]: [channel#37, id#38, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] (71) Exchange -Input [8]: [channel#39, id#40, sum#140, isEmpty#141, sum#142, isEmpty#143, sum#144, isEmpty#145] -Arguments: hashpartitioning(channel#39, id#40, 5), ENSURE_REQUIREMENTS, [id=#146] +Input [8]: [channel#37, id#38, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] +Arguments: hashpartitioning(channel#37, id#38, 5), ENSURE_REQUIREMENTS, [plan_id=8] (72) HashAggregate [codegen id : 21] -Input [8]: [channel#39, id#40, sum#140, isEmpty#141, sum#142, isEmpty#143, sum#144, isEmpty#145] -Keys [2]: [channel#39, id#40] -Functions [3]: [sum(sales#41), sum(returns#42), sum(profit#43)] -Aggregate Attributes [3]: [sum(sales#41)#147, sum(returns#42)#148, sum(profit#43)#149] -Results [5]: [channel#39, id#40, cast(sum(sales#41)#147 as decimal(37,2)) AS sales#150, cast(sum(returns#42)#148 as decimal(37,2)) AS returns#151, cast(sum(profit#43)#149 as decimal(38,2)) AS profit#152] +Input [8]: [channel#37, id#38, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] +Keys [2]: [channel#37, id#38] +Functions [3]: [sum(sales#39), sum(returns#40), sum(profit#41)] +Aggregate Attributes [3]: [sum(sales#39)#139, sum(returns#40)#140, sum(profit#41)#141] +Results [5]: [channel#37, id#38, cast(sum(sales#39)#139 as decimal(37,2)) AS sales#142, cast(sum(returns#40)#140 as decimal(37,2)) AS returns#143, cast(sum(profit#41)#141 as decimal(38,2)) AS profit#144] (73) ReusedExchange [Reuses operator id: 71] -Output [8]: [channel#39, id#40, sum#140, isEmpty#141, sum#142, isEmpty#143, sum#144, isEmpty#145] +Output [8]: [channel#37, id#38, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] (74) HashAggregate [codegen id : 42] -Input [8]: [channel#39, id#40, sum#140, isEmpty#141, sum#142, isEmpty#143, sum#144, isEmpty#145] -Keys [2]: [channel#39, id#40] -Functions [3]: [sum(sales#41), sum(returns#42), sum(profit#43)] -Aggregate Attributes [3]: [sum(sales#41)#147, sum(returns#42)#148, sum(profit#43)#149] -Results [4]: [channel#39, sum(sales#41)#147 AS sales#153, sum(returns#42)#148 AS returns#154, sum(profit#43)#149 AS profit#155] +Input [8]: [channel#37, id#38, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] +Keys [2]: [channel#37, id#38] +Functions [3]: [sum(sales#39), sum(returns#40), sum(profit#41)] +Aggregate Attributes [3]: [sum(sales#39)#139, sum(returns#40)#140, sum(profit#41)#141] +Results [4]: [channel#37, sum(sales#39)#139 AS sales#145, sum(returns#40)#140 AS returns#146, sum(profit#41)#141 AS profit#147] (75) HashAggregate [codegen id : 42] -Input [4]: [channel#39, sales#153, returns#154, profit#155] -Keys [1]: [channel#39] -Functions [3]: [partial_sum(sales#153), partial_sum(returns#154), partial_sum(profit#155)] -Aggregate Attributes [6]: [sum#156, isEmpty#157, sum#158, isEmpty#159, sum#160, isEmpty#161] -Results [7]: [channel#39, sum#162, isEmpty#163, sum#164, isEmpty#165, sum#166, isEmpty#167] +Input [4]: [channel#37, sales#145, returns#146, profit#147] +Keys [1]: [channel#37] +Functions [3]: [partial_sum(sales#145), partial_sum(returns#146), partial_sum(profit#147)] +Aggregate Attributes [6]: [sum#148, isEmpty#149, sum#150, isEmpty#151, sum#152, isEmpty#153] +Results [7]: [channel#37, sum#154, isEmpty#155, sum#156, isEmpty#157, sum#158, isEmpty#159] (76) Exchange -Input [7]: [channel#39, sum#162, isEmpty#163, sum#164, isEmpty#165, sum#166, isEmpty#167] -Arguments: hashpartitioning(channel#39, 5), ENSURE_REQUIREMENTS, [id=#168] +Input [7]: [channel#37, sum#154, isEmpty#155, sum#156, isEmpty#157, sum#158, isEmpty#159] +Arguments: hashpartitioning(channel#37, 5), ENSURE_REQUIREMENTS, [plan_id=9] (77) HashAggregate [codegen id : 43] -Input [7]: [channel#39, sum#162, isEmpty#163, sum#164, isEmpty#165, sum#166, isEmpty#167] -Keys [1]: [channel#39] -Functions [3]: [sum(sales#153), sum(returns#154), sum(profit#155)] -Aggregate Attributes [3]: [sum(sales#153)#169, sum(returns#154)#170, sum(profit#155)#171] -Results [5]: [channel#39, null AS id#172, sum(sales#153)#169 AS sum(sales)#173, sum(returns#154)#170 AS sum(returns)#174, sum(profit#155)#171 AS sum(profit)#175] +Input [7]: [channel#37, sum#154, isEmpty#155, sum#156, isEmpty#157, sum#158, isEmpty#159] +Keys [1]: [channel#37] +Functions [3]: [sum(sales#145), sum(returns#146), sum(profit#147)] +Aggregate Attributes [3]: [sum(sales#145)#160, sum(returns#146)#161, sum(profit#147)#162] +Results [5]: [channel#37, null AS id#163, sum(sales#145)#160 AS sum(sales)#164, sum(returns#146)#161 AS sum(returns)#165, sum(profit#147)#162 AS sum(profit)#166] (78) ReusedExchange [Reuses operator id: 71] -Output [8]: [channel#39, id#40, sum#140, isEmpty#141, sum#142, isEmpty#143, sum#144, isEmpty#145] +Output [8]: [channel#37, id#38, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] (79) HashAggregate [codegen id : 64] -Input [8]: [channel#39, id#40, sum#140, isEmpty#141, sum#142, isEmpty#143, sum#144, isEmpty#145] -Keys [2]: [channel#39, id#40] -Functions [3]: [sum(sales#41), sum(returns#42), sum(profit#43)] -Aggregate Attributes [3]: [sum(sales#41)#147, sum(returns#42)#148, sum(profit#43)#149] -Results [3]: [sum(sales#41)#147 AS sales#153, sum(returns#42)#148 AS returns#154, sum(profit#43)#149 AS profit#155] +Input [8]: [channel#37, id#38, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] +Keys [2]: [channel#37, id#38] +Functions [3]: [sum(sales#39), sum(returns#40), sum(profit#41)] +Aggregate Attributes [3]: [sum(sales#39)#139, sum(returns#40)#140, sum(profit#41)#141] +Results [3]: [sum(sales#39)#139 AS sales#145, sum(returns#40)#140 AS returns#146, sum(profit#41)#141 AS profit#147] (80) HashAggregate [codegen id : 64] -Input [3]: [sales#153, returns#154, profit#155] +Input [3]: [sales#145, returns#146, profit#147] Keys: [] -Functions [3]: [partial_sum(sales#153), partial_sum(returns#154), partial_sum(profit#155)] -Aggregate Attributes [6]: [sum#176, isEmpty#177, sum#178, isEmpty#179, sum#180, isEmpty#181] -Results [6]: [sum#182, isEmpty#183, sum#184, isEmpty#185, sum#186, isEmpty#187] +Functions [3]: [partial_sum(sales#145), partial_sum(returns#146), partial_sum(profit#147)] +Aggregate Attributes [6]: [sum#167, isEmpty#168, sum#169, isEmpty#170, sum#171, isEmpty#172] +Results [6]: [sum#173, isEmpty#174, sum#175, isEmpty#176, sum#177, isEmpty#178] (81) Exchange -Input [6]: [sum#182, isEmpty#183, sum#184, isEmpty#185, sum#186, isEmpty#187] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#188] +Input [6]: [sum#173, isEmpty#174, sum#175, isEmpty#176, sum#177, isEmpty#178] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10] (82) HashAggregate [codegen id : 65] -Input [6]: [sum#182, isEmpty#183, sum#184, isEmpty#185, sum#186, isEmpty#187] +Input [6]: [sum#173, isEmpty#174, sum#175, isEmpty#176, sum#177, isEmpty#178] Keys: [] -Functions [3]: [sum(sales#153), sum(returns#154), sum(profit#155)] -Aggregate Attributes [3]: [sum(sales#153)#189, sum(returns#154)#190, sum(profit#155)#191] -Results [5]: [null AS channel#192, null AS id#193, sum(sales#153)#189 AS sum(sales)#194, sum(returns#154)#190 AS sum(returns)#195, sum(profit#155)#191 AS sum(profit)#196] +Functions [3]: [sum(sales#145), sum(returns#146), sum(profit#147)] +Aggregate Attributes [3]: [sum(sales#145)#179, sum(returns#146)#180, sum(profit#147)#181] +Results [5]: [null AS channel#182, null AS id#183, sum(sales#145)#179 AS sum(sales)#184, sum(returns#146)#180 AS sum(returns)#185, sum(profit#147)#181 AS sum(profit)#186] (83) Union (84) HashAggregate [codegen id : 66] -Input [5]: [channel#39, id#40, sales#150, returns#151, profit#152] -Keys [5]: [channel#39, id#40, sales#150, returns#151, profit#152] +Input [5]: [channel#37, id#38, sales#142, returns#143, profit#144] +Keys [5]: [channel#37, id#38, sales#142, returns#143, profit#144] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#39, id#40, sales#150, returns#151, profit#152] +Results [5]: [channel#37, id#38, sales#142, returns#143, profit#144] (85) Exchange -Input [5]: [channel#39, id#40, sales#150, returns#151, profit#152] -Arguments: hashpartitioning(channel#39, id#40, sales#150, returns#151, profit#152, 5), ENSURE_REQUIREMENTS, [id=#197] +Input [5]: [channel#37, id#38, sales#142, returns#143, profit#144] +Arguments: hashpartitioning(channel#37, id#38, sales#142, returns#143, profit#144, 5), ENSURE_REQUIREMENTS, [plan_id=11] (86) HashAggregate [codegen id : 67] -Input [5]: [channel#39, id#40, sales#150, returns#151, profit#152] -Keys [5]: [channel#39, id#40, sales#150, returns#151, profit#152] +Input [5]: [channel#37, id#38, sales#142, returns#143, profit#144] +Keys [5]: [channel#37, id#38, sales#142, returns#143, profit#144] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#39, id#40, sales#150, returns#151, profit#152] +Results [5]: [channel#37, id#38, sales#142, returns#143, profit#144] (87) TakeOrderedAndProject -Input [5]: [channel#39, id#40, sales#150, returns#151, profit#152] -Arguments: 100, [channel#39 ASC NULLS FIRST, id#40 ASC NULLS FIRST], [channel#39, id#40, sales#150, returns#151, profit#152] +Input [5]: [channel#37, id#38, sales#142, returns#143, profit#144] +Arguments: 100, [channel#37 ASC NULLS FIRST, id#38 ASC NULLS FIRST], [channel#37, id#38, sales#142, returns#143, profit#144] ===== Subqueries ===== @@ -512,35 +512,35 @@ BroadcastExchange (92) (88) Scan parquet default.date_dim -Output [2]: [d_date_sk#22, d_date#198] +Output [2]: [d_date_sk#22, d_date#187] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1998-08-04), LessThanOrEqual(d_date,1998-08-18), IsNotNull(d_date_sk)] ReadSchema: struct (89) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#22, d_date#198] +Input [2]: [d_date_sk#22, d_date#187] (90) Filter [codegen id : 1] -Input [2]: [d_date_sk#22, d_date#198] -Condition : (((isnotnull(d_date#198) AND (d_date#198 >= 1998-08-04)) AND (d_date#198 <= 1998-08-18)) AND isnotnull(d_date_sk#22)) +Input [2]: [d_date_sk#22, d_date#187] +Condition : (((isnotnull(d_date#187) AND (d_date#187 >= 1998-08-04)) AND (d_date#187 <= 1998-08-18)) AND isnotnull(d_date_sk#22)) (91) Project [codegen id : 1] Output [1]: [d_date_sk#22] -Input [2]: [d_date_sk#22, d_date#198] +Input [2]: [d_date_sk#22, d_date#187] (92) BroadcastExchange Input [1]: [d_date_sk#22] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#199] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] Subquery:2 Hosting operator id = 5 Hosting Expression = sr_returned_date_sk#15 IN dynamicpruning#5 -Subquery:3 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#47 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 22 Hosting Expression = cs_sold_date_sk#45 IN dynamicpruning#5 -Subquery:4 Hosting operator id = 26 Hosting Expression = cr_returned_date_sk#57 IN dynamicpruning#5 +Subquery:4 Hosting operator id = 26 Hosting Expression = cr_returned_date_sk#55 IN dynamicpruning#5 -Subquery:5 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#89 IN dynamicpruning#5 +Subquery:5 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#85 IN dynamicpruning#5 -Subquery:6 Hosting operator id = 47 Hosting Expression = wr_returned_date_sk#100 IN dynamicpruning#5 +Subquery:6 Hosting operator id = 47 Hosting Expression = wr_returned_date_sk#96 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q6.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q6.sf100/explain.txt index 1992b08c26b23..2e353046dae8f 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q6.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q6.sf100/explain.txt @@ -98,18 +98,18 @@ Results [3]: [i_category#9, sum#12, count#13] (11) Exchange Input [3]: [i_category#9, sum#12, count#13] -Arguments: hashpartitioning(i_category#9, 5), ENSURE_REQUIREMENTS, [id=#14] +Arguments: hashpartitioning(i_category#9, 5), ENSURE_REQUIREMENTS, [plan_id=1] (12) HashAggregate [codegen id : 2] Input [3]: [i_category#9, sum#12, count#13] Keys [1]: [i_category#9] Functions [1]: [avg(UnscaledValue(i_current_price#8))] -Aggregate Attributes [1]: [avg(UnscaledValue(i_current_price#8))#15] -Results [2]: [cast((avg(UnscaledValue(i_current_price#8))#15 / 100.0) as decimal(11,6)) AS avg(i_current_price)#16, i_category#9] +Aggregate Attributes [1]: [avg(UnscaledValue(i_current_price#8))#14] +Results [2]: [cast((avg(UnscaledValue(i_current_price#8))#14 / 100.0) as decimal(11,6)) AS avg(i_current_price)#15, i_category#9] (13) BroadcastExchange -Input [2]: [avg(i_current_price)#16, i_category#9] -Arguments: HashedRelationBroadcastMode(List(input[1, string, true]),false), [id=#17] +Input [2]: [avg(i_current_price)#15, i_category#9] +Arguments: HashedRelationBroadcastMode(List(input[1, string, true]),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 3] Left keys [1]: [i_category#7] @@ -117,16 +117,16 @@ Right keys [1]: [i_category#9] Join condition: None (15) Filter [codegen id : 3] -Input [5]: [i_item_sk#5, i_current_price#6, i_category#7, avg(i_current_price)#16, i_category#9] -Condition : (cast(i_current_price#6 as decimal(14,7)) > CheckOverflow((1.200000 * promote_precision(avg(i_current_price)#16)), DecimalType(14,7))) +Input [5]: [i_item_sk#5, i_current_price#6, i_category#7, avg(i_current_price)#15, i_category#9] +Condition : (cast(i_current_price#6 as decimal(14,7)) > CheckOverflow((1.200000 * promote_precision(avg(i_current_price)#15)), DecimalType(14,7))) (16) Project [codegen id : 3] Output [1]: [i_item_sk#5] -Input [5]: [i_item_sk#5, i_current_price#6, i_category#7, avg(i_current_price)#16, i_category#9] +Input [5]: [i_item_sk#5, i_current_price#6, i_category#7, avg(i_current_price)#15, i_category#9] (17) BroadcastExchange Input [1]: [i_item_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (18) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_item_sk#1] @@ -138,120 +138,120 @@ Output [2]: [ss_customer_sk#2, ss_sold_date_sk#3] Input [4]: [ss_item_sk#1, ss_customer_sk#2, ss_sold_date_sk#3, i_item_sk#5] (20) ReusedExchange [Reuses operator id: 50] -Output [1]: [d_date_sk#19] +Output [1]: [d_date_sk#16] (21) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ss_sold_date_sk#3] -Right keys [1]: [d_date_sk#19] +Right keys [1]: [d_date_sk#16] Join condition: None (22) Project [codegen id : 5] Output [1]: [ss_customer_sk#2] -Input [3]: [ss_customer_sk#2, ss_sold_date_sk#3, d_date_sk#19] +Input [3]: [ss_customer_sk#2, ss_sold_date_sk#3, d_date_sk#16] (23) Exchange Input [1]: [ss_customer_sk#2] -Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#20] +Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 6] Input [1]: [ss_customer_sk#2] Arguments: [ss_customer_sk#2 ASC NULLS FIRST], false, 0 (25) Scan parquet default.customer_address -Output [2]: [ca_address_sk#21, ca_state#22] +Output [2]: [ca_address_sk#17, ca_state#18] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 7] -Input [2]: [ca_address_sk#21, ca_state#22] +Input [2]: [ca_address_sk#17, ca_state#18] (27) Filter [codegen id : 7] -Input [2]: [ca_address_sk#21, ca_state#22] -Condition : isnotnull(ca_address_sk#21) +Input [2]: [ca_address_sk#17, ca_state#18] +Condition : isnotnull(ca_address_sk#17) (28) Exchange -Input [2]: [ca_address_sk#21, ca_state#22] -Arguments: hashpartitioning(ca_address_sk#21, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [2]: [ca_address_sk#17, ca_state#18] +Arguments: hashpartitioning(ca_address_sk#17, 5), ENSURE_REQUIREMENTS, [plan_id=5] (29) Sort [codegen id : 8] -Input [2]: [ca_address_sk#21, ca_state#22] -Arguments: [ca_address_sk#21 ASC NULLS FIRST], false, 0 +Input [2]: [ca_address_sk#17, ca_state#18] +Arguments: [ca_address_sk#17 ASC NULLS FIRST], false, 0 (30) Scan parquet default.customer -Output [2]: [c_customer_sk#24, c_current_addr_sk#25] +Output [2]: [c_customer_sk#19, c_current_addr_sk#20] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_customer_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 9] -Input [2]: [c_customer_sk#24, c_current_addr_sk#25] +Input [2]: [c_customer_sk#19, c_current_addr_sk#20] (32) Filter [codegen id : 9] -Input [2]: [c_customer_sk#24, c_current_addr_sk#25] -Condition : (isnotnull(c_current_addr_sk#25) AND isnotnull(c_customer_sk#24)) +Input [2]: [c_customer_sk#19, c_current_addr_sk#20] +Condition : (isnotnull(c_current_addr_sk#20) AND isnotnull(c_customer_sk#19)) (33) Exchange -Input [2]: [c_customer_sk#24, c_current_addr_sk#25] -Arguments: hashpartitioning(c_current_addr_sk#25, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [2]: [c_customer_sk#19, c_current_addr_sk#20] +Arguments: hashpartitioning(c_current_addr_sk#20, 5), ENSURE_REQUIREMENTS, [plan_id=6] (34) Sort [codegen id : 10] -Input [2]: [c_customer_sk#24, c_current_addr_sk#25] -Arguments: [c_current_addr_sk#25 ASC NULLS FIRST], false, 0 +Input [2]: [c_customer_sk#19, c_current_addr_sk#20] +Arguments: [c_current_addr_sk#20 ASC NULLS FIRST], false, 0 (35) SortMergeJoin [codegen id : 11] -Left keys [1]: [ca_address_sk#21] -Right keys [1]: [c_current_addr_sk#25] +Left keys [1]: [ca_address_sk#17] +Right keys [1]: [c_current_addr_sk#20] Join condition: None (36) Project [codegen id : 11] -Output [2]: [ca_state#22, c_customer_sk#24] -Input [4]: [ca_address_sk#21, ca_state#22, c_customer_sk#24, c_current_addr_sk#25] +Output [2]: [ca_state#18, c_customer_sk#19] +Input [4]: [ca_address_sk#17, ca_state#18, c_customer_sk#19, c_current_addr_sk#20] (37) Exchange -Input [2]: [ca_state#22, c_customer_sk#24] -Arguments: hashpartitioning(c_customer_sk#24, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [2]: [ca_state#18, c_customer_sk#19] +Arguments: hashpartitioning(c_customer_sk#19, 5), ENSURE_REQUIREMENTS, [plan_id=7] (38) Sort [codegen id : 12] -Input [2]: [ca_state#22, c_customer_sk#24] -Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0 +Input [2]: [ca_state#18, c_customer_sk#19] +Arguments: [c_customer_sk#19 ASC NULLS FIRST], false, 0 (39) SortMergeJoin [codegen id : 13] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#24] +Right keys [1]: [c_customer_sk#19] Join condition: None (40) Project [codegen id : 13] -Output [1]: [ca_state#22] -Input [3]: [ss_customer_sk#2, ca_state#22, c_customer_sk#24] +Output [1]: [ca_state#18] +Input [3]: [ss_customer_sk#2, ca_state#18, c_customer_sk#19] (41) HashAggregate [codegen id : 13] -Input [1]: [ca_state#22] -Keys [1]: [ca_state#22] +Input [1]: [ca_state#18] +Keys [1]: [ca_state#18] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#28] -Results [2]: [ca_state#22, count#29] +Aggregate Attributes [1]: [count#21] +Results [2]: [ca_state#18, count#22] (42) Exchange -Input [2]: [ca_state#22, count#29] -Arguments: hashpartitioning(ca_state#22, 5), ENSURE_REQUIREMENTS, [id=#30] +Input [2]: [ca_state#18, count#22] +Arguments: hashpartitioning(ca_state#18, 5), ENSURE_REQUIREMENTS, [plan_id=8] (43) HashAggregate [codegen id : 14] -Input [2]: [ca_state#22, count#29] -Keys [1]: [ca_state#22] +Input [2]: [ca_state#18, count#22] +Keys [1]: [ca_state#18] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#31] -Results [3]: [ca_state#22 AS state#32, count(1)#31 AS cnt#33, ca_state#22] +Aggregate Attributes [1]: [count(1)#23] +Results [3]: [ca_state#18 AS state#24, count(1)#23 AS cnt#25, ca_state#18] (44) Filter [codegen id : 14] -Input [3]: [state#32, cnt#33, ca_state#22] -Condition : (cnt#33 >= 10) +Input [3]: [state#24, cnt#25, ca_state#18] +Condition : (cnt#25 >= 10) (45) TakeOrderedAndProject -Input [3]: [state#32, cnt#33, ca_state#22] -Arguments: 100, [cnt#33 ASC NULLS FIRST, ca_state#22 ASC NULLS FIRST], [state#32, cnt#33] +Input [3]: [state#24, cnt#25, ca_state#18] +Arguments: 100, [cnt#25 ASC NULLS FIRST, ca_state#18 ASC NULLS FIRST], [state#24, cnt#25] ===== Subqueries ===== @@ -264,28 +264,28 @@ BroadcastExchange (50) (46) Scan parquet default.date_dim -Output [2]: [d_date_sk#19, d_month_seq#34] +Output [2]: [d_date_sk#16, d_month_seq#26] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), IsNotNull(d_date_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#19, d_month_seq#34] +Input [2]: [d_date_sk#16, d_month_seq#26] (48) Filter [codegen id : 1] -Input [2]: [d_date_sk#19, d_month_seq#34] -Condition : ((isnotnull(d_month_seq#34) AND (d_month_seq#34 = Subquery scalar-subquery#35, [id=#36])) AND isnotnull(d_date_sk#19)) +Input [2]: [d_date_sk#16, d_month_seq#26] +Condition : ((isnotnull(d_month_seq#26) AND (d_month_seq#26 = Subquery scalar-subquery#27, [id=#28])) AND isnotnull(d_date_sk#16)) (49) Project [codegen id : 1] -Output [1]: [d_date_sk#19] -Input [2]: [d_date_sk#19, d_month_seq#34] +Output [1]: [d_date_sk#16] +Input [2]: [d_date_sk#16, d_month_seq#26] (50) BroadcastExchange -Input [1]: [d_date_sk#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#37] +Input [1]: [d_date_sk#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9] -Subquery:2 Hosting operator id = 48 Hosting Expression = Subquery scalar-subquery#35, [id=#36] +Subquery:2 Hosting operator id = 48 Hosting Expression = Subquery scalar-subquery#27, [id=#28] * HashAggregate (57) +- Exchange (56) +- * HashAggregate (55) @@ -296,39 +296,39 @@ Subquery:2 Hosting operator id = 48 Hosting Expression = Subquery scalar-subquer (51) Scan parquet default.date_dim -Output [3]: [d_month_seq#38, d_year#39, d_moy#40] +Output [3]: [d_month_seq#29, d_year#30, d_moy#31] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2000), EqualTo(d_moy,1)] ReadSchema: struct (52) ColumnarToRow [codegen id : 1] -Input [3]: [d_month_seq#38, d_year#39, d_moy#40] +Input [3]: [d_month_seq#29, d_year#30, d_moy#31] (53) Filter [codegen id : 1] -Input [3]: [d_month_seq#38, d_year#39, d_moy#40] -Condition : (((isnotnull(d_year#39) AND isnotnull(d_moy#40)) AND (d_year#39 = 2000)) AND (d_moy#40 = 1)) +Input [3]: [d_month_seq#29, d_year#30, d_moy#31] +Condition : (((isnotnull(d_year#30) AND isnotnull(d_moy#31)) AND (d_year#30 = 2000)) AND (d_moy#31 = 1)) (54) Project [codegen id : 1] -Output [1]: [d_month_seq#38] -Input [3]: [d_month_seq#38, d_year#39, d_moy#40] +Output [1]: [d_month_seq#29] +Input [3]: [d_month_seq#29, d_year#30, d_moy#31] (55) HashAggregate [codegen id : 1] -Input [1]: [d_month_seq#38] -Keys [1]: [d_month_seq#38] +Input [1]: [d_month_seq#29] +Keys [1]: [d_month_seq#29] Functions: [] Aggregate Attributes: [] -Results [1]: [d_month_seq#38] +Results [1]: [d_month_seq#29] (56) Exchange -Input [1]: [d_month_seq#38] -Arguments: hashpartitioning(d_month_seq#38, 5), ENSURE_REQUIREMENTS, [id=#41] +Input [1]: [d_month_seq#29] +Arguments: hashpartitioning(d_month_seq#29, 5), ENSURE_REQUIREMENTS, [plan_id=10] (57) HashAggregate [codegen id : 2] -Input [1]: [d_month_seq#38] -Keys [1]: [d_month_seq#38] +Input [1]: [d_month_seq#29] +Keys [1]: [d_month_seq#29] Functions: [] Aggregate Attributes: [] -Results [1]: [d_month_seq#38] +Results [1]: [d_month_seq#29] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q6/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q6/explain.txt index 918c6c375a9ea..c415966f85bad 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q6/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q6/explain.txt @@ -70,7 +70,7 @@ Condition : (isnotnull(c_current_addr_sk#4) AND isnotnull(c_customer_sk#3)) (7) BroadcastExchange Input [2]: [c_customer_sk#3, c_current_addr_sk#4] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [id=#5] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 7] Left keys [1]: [ca_address_sk#1] @@ -82,150 +82,150 @@ Output [2]: [ca_state#2, c_customer_sk#3] Input [4]: [ca_address_sk#1, ca_state#2, c_customer_sk#3, c_current_addr_sk#4] (10) Scan parquet default.store_sales -Output [3]: [ss_item_sk#6, ss_customer_sk#7, ss_sold_date_sk#8] +Output [3]: [ss_item_sk#5, ss_customer_sk#6, ss_sold_date_sk#7] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#8), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)] +PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)] PushedFilters: [IsNotNull(ss_customer_sk), IsNotNull(ss_item_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [3]: [ss_item_sk#6, ss_customer_sk#7, ss_sold_date_sk#8] +Input [3]: [ss_item_sk#5, ss_customer_sk#6, ss_sold_date_sk#7] (12) Filter [codegen id : 2] -Input [3]: [ss_item_sk#6, ss_customer_sk#7, ss_sold_date_sk#8] -Condition : (isnotnull(ss_customer_sk#7) AND isnotnull(ss_item_sk#6)) +Input [3]: [ss_item_sk#5, ss_customer_sk#6, ss_sold_date_sk#7] +Condition : (isnotnull(ss_customer_sk#6) AND isnotnull(ss_item_sk#5)) (13) BroadcastExchange -Input [3]: [ss_item_sk#6, ss_customer_sk#7, ss_sold_date_sk#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [id=#10] +Input [3]: [ss_item_sk#5, ss_customer_sk#6, ss_sold_date_sk#7] +Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 7] Left keys [1]: [c_customer_sk#3] -Right keys [1]: [ss_customer_sk#7] +Right keys [1]: [ss_customer_sk#6] Join condition: None (15) Project [codegen id : 7] -Output [3]: [ca_state#2, ss_item_sk#6, ss_sold_date_sk#8] -Input [5]: [ca_state#2, c_customer_sk#3, ss_item_sk#6, ss_customer_sk#7, ss_sold_date_sk#8] +Output [3]: [ca_state#2, ss_item_sk#5, ss_sold_date_sk#7] +Input [5]: [ca_state#2, c_customer_sk#3, ss_item_sk#5, ss_customer_sk#6, ss_sold_date_sk#7] (16) ReusedExchange [Reuses operator id: 44] -Output [1]: [d_date_sk#11] +Output [1]: [d_date_sk#9] (17) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [ss_sold_date_sk#8] -Right keys [1]: [d_date_sk#11] +Left keys [1]: [ss_sold_date_sk#7] +Right keys [1]: [d_date_sk#9] Join condition: None (18) Project [codegen id : 7] -Output [2]: [ca_state#2, ss_item_sk#6] -Input [4]: [ca_state#2, ss_item_sk#6, ss_sold_date_sk#8, d_date_sk#11] +Output [2]: [ca_state#2, ss_item_sk#5] +Input [4]: [ca_state#2, ss_item_sk#5, ss_sold_date_sk#7, d_date_sk#9] (19) Scan parquet default.item -Output [3]: [i_item_sk#12, i_current_price#13, i_category#14] +Output [3]: [i_item_sk#10, i_current_price#11, i_category#12] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), IsNotNull(i_item_sk)] ReadSchema: struct (20) ColumnarToRow [codegen id : 6] -Input [3]: [i_item_sk#12, i_current_price#13, i_category#14] +Input [3]: [i_item_sk#10, i_current_price#11, i_category#12] (21) Filter [codegen id : 6] -Input [3]: [i_item_sk#12, i_current_price#13, i_category#14] -Condition : (isnotnull(i_current_price#13) AND isnotnull(i_item_sk#12)) +Input [3]: [i_item_sk#10, i_current_price#11, i_category#12] +Condition : (isnotnull(i_current_price#11) AND isnotnull(i_item_sk#10)) (22) Scan parquet default.item -Output [2]: [i_current_price#15, i_category#16] +Output [2]: [i_current_price#13, i_category#14] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_category)] ReadSchema: struct (23) ColumnarToRow [codegen id : 4] -Input [2]: [i_current_price#15, i_category#16] +Input [2]: [i_current_price#13, i_category#14] (24) Filter [codegen id : 4] -Input [2]: [i_current_price#15, i_category#16] -Condition : isnotnull(i_category#16) +Input [2]: [i_current_price#13, i_category#14] +Condition : isnotnull(i_category#14) (25) HashAggregate [codegen id : 4] -Input [2]: [i_current_price#15, i_category#16] -Keys [1]: [i_category#16] -Functions [1]: [partial_avg(UnscaledValue(i_current_price#15))] -Aggregate Attributes [2]: [sum#17, count#18] -Results [3]: [i_category#16, sum#19, count#20] +Input [2]: [i_current_price#13, i_category#14] +Keys [1]: [i_category#14] +Functions [1]: [partial_avg(UnscaledValue(i_current_price#13))] +Aggregate Attributes [2]: [sum#15, count#16] +Results [3]: [i_category#14, sum#17, count#18] (26) Exchange -Input [3]: [i_category#16, sum#19, count#20] -Arguments: hashpartitioning(i_category#16, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [3]: [i_category#14, sum#17, count#18] +Arguments: hashpartitioning(i_category#14, 5), ENSURE_REQUIREMENTS, [plan_id=3] (27) HashAggregate [codegen id : 5] -Input [3]: [i_category#16, sum#19, count#20] -Keys [1]: [i_category#16] -Functions [1]: [avg(UnscaledValue(i_current_price#15))] -Aggregate Attributes [1]: [avg(UnscaledValue(i_current_price#15))#22] -Results [2]: [cast((avg(UnscaledValue(i_current_price#15))#22 / 100.0) as decimal(11,6)) AS avg(i_current_price)#23, i_category#16] +Input [3]: [i_category#14, sum#17, count#18] +Keys [1]: [i_category#14] +Functions [1]: [avg(UnscaledValue(i_current_price#13))] +Aggregate Attributes [1]: [avg(UnscaledValue(i_current_price#13))#19] +Results [2]: [cast((avg(UnscaledValue(i_current_price#13))#19 / 100.0) as decimal(11,6)) AS avg(i_current_price)#20, i_category#14] (28) BroadcastExchange -Input [2]: [avg(i_current_price)#23, i_category#16] -Arguments: HashedRelationBroadcastMode(List(input[1, string, true]),false), [id=#24] +Input [2]: [avg(i_current_price)#20, i_category#14] +Arguments: HashedRelationBroadcastMode(List(input[1, string, true]),false), [plan_id=4] (29) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [i_category#14] -Right keys [1]: [i_category#16] +Left keys [1]: [i_category#12] +Right keys [1]: [i_category#14] Join condition: None (30) Filter [codegen id : 6] -Input [5]: [i_item_sk#12, i_current_price#13, i_category#14, avg(i_current_price)#23, i_category#16] -Condition : (cast(i_current_price#13 as decimal(14,7)) > CheckOverflow((1.200000 * promote_precision(avg(i_current_price)#23)), DecimalType(14,7))) +Input [5]: [i_item_sk#10, i_current_price#11, i_category#12, avg(i_current_price)#20, i_category#14] +Condition : (cast(i_current_price#11 as decimal(14,7)) > CheckOverflow((1.200000 * promote_precision(avg(i_current_price)#20)), DecimalType(14,7))) (31) Project [codegen id : 6] -Output [1]: [i_item_sk#12] -Input [5]: [i_item_sk#12, i_current_price#13, i_category#14, avg(i_current_price)#23, i_category#16] +Output [1]: [i_item_sk#10] +Input [5]: [i_item_sk#10, i_current_price#11, i_category#12, avg(i_current_price)#20, i_category#14] (32) BroadcastExchange -Input [1]: [i_item_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [i_item_sk#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (33) BroadcastHashJoin [codegen id : 7] -Left keys [1]: [ss_item_sk#6] -Right keys [1]: [i_item_sk#12] +Left keys [1]: [ss_item_sk#5] +Right keys [1]: [i_item_sk#10] Join condition: None (34) Project [codegen id : 7] Output [1]: [ca_state#2] -Input [3]: [ca_state#2, ss_item_sk#6, i_item_sk#12] +Input [3]: [ca_state#2, ss_item_sk#5, i_item_sk#10] (35) HashAggregate [codegen id : 7] Input [1]: [ca_state#2] Keys [1]: [ca_state#2] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#26] -Results [2]: [ca_state#2, count#27] +Aggregate Attributes [1]: [count#21] +Results [2]: [ca_state#2, count#22] (36) Exchange -Input [2]: [ca_state#2, count#27] -Arguments: hashpartitioning(ca_state#2, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [2]: [ca_state#2, count#22] +Arguments: hashpartitioning(ca_state#2, 5), ENSURE_REQUIREMENTS, [plan_id=6] (37) HashAggregate [codegen id : 8] -Input [2]: [ca_state#2, count#27] +Input [2]: [ca_state#2, count#22] Keys [1]: [ca_state#2] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#29] -Results [3]: [ca_state#2 AS state#30, count(1)#29 AS cnt#31, ca_state#2] +Aggregate Attributes [1]: [count(1)#23] +Results [3]: [ca_state#2 AS state#24, count(1)#23 AS cnt#25, ca_state#2] (38) Filter [codegen id : 8] -Input [3]: [state#30, cnt#31, ca_state#2] -Condition : (cnt#31 >= 10) +Input [3]: [state#24, cnt#25, ca_state#2] +Condition : (cnt#25 >= 10) (39) TakeOrderedAndProject -Input [3]: [state#30, cnt#31, ca_state#2] -Arguments: 100, [cnt#31 ASC NULLS FIRST, ca_state#2 ASC NULLS FIRST], [state#30, cnt#31] +Input [3]: [state#24, cnt#25, ca_state#2] +Arguments: 100, [cnt#25 ASC NULLS FIRST, ca_state#2 ASC NULLS FIRST], [state#24, cnt#25] ===== Subqueries ===== -Subquery:1 Hosting operator id = 10 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9 +Subquery:1 Hosting operator id = 10 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 BroadcastExchange (44) +- * Project (43) +- * Filter (42) @@ -234,28 +234,28 @@ BroadcastExchange (44) (40) Scan parquet default.date_dim -Output [2]: [d_date_sk#11, d_month_seq#32] +Output [2]: [d_date_sk#9, d_month_seq#26] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), IsNotNull(d_date_sk)] ReadSchema: struct (41) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#11, d_month_seq#32] +Input [2]: [d_date_sk#9, d_month_seq#26] (42) Filter [codegen id : 1] -Input [2]: [d_date_sk#11, d_month_seq#32] -Condition : ((isnotnull(d_month_seq#32) AND (d_month_seq#32 = Subquery scalar-subquery#33, [id=#34])) AND isnotnull(d_date_sk#11)) +Input [2]: [d_date_sk#9, d_month_seq#26] +Condition : ((isnotnull(d_month_seq#26) AND (d_month_seq#26 = Subquery scalar-subquery#27, [id=#28])) AND isnotnull(d_date_sk#9)) (43) Project [codegen id : 1] -Output [1]: [d_date_sk#11] -Input [2]: [d_date_sk#11, d_month_seq#32] +Output [1]: [d_date_sk#9] +Input [2]: [d_date_sk#9, d_month_seq#26] (44) BroadcastExchange -Input [1]: [d_date_sk#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#35] +Input [1]: [d_date_sk#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] -Subquery:2 Hosting operator id = 42 Hosting Expression = Subquery scalar-subquery#33, [id=#34] +Subquery:2 Hosting operator id = 42 Hosting Expression = Subquery scalar-subquery#27, [id=#28] * HashAggregate (51) +- Exchange (50) +- * HashAggregate (49) @@ -266,39 +266,39 @@ Subquery:2 Hosting operator id = 42 Hosting Expression = Subquery scalar-subquer (45) Scan parquet default.date_dim -Output [3]: [d_month_seq#36, d_year#37, d_moy#38] +Output [3]: [d_month_seq#29, d_year#30, d_moy#31] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2000), EqualTo(d_moy,1)] ReadSchema: struct (46) ColumnarToRow [codegen id : 1] -Input [3]: [d_month_seq#36, d_year#37, d_moy#38] +Input [3]: [d_month_seq#29, d_year#30, d_moy#31] (47) Filter [codegen id : 1] -Input [3]: [d_month_seq#36, d_year#37, d_moy#38] -Condition : (((isnotnull(d_year#37) AND isnotnull(d_moy#38)) AND (d_year#37 = 2000)) AND (d_moy#38 = 1)) +Input [3]: [d_month_seq#29, d_year#30, d_moy#31] +Condition : (((isnotnull(d_year#30) AND isnotnull(d_moy#31)) AND (d_year#30 = 2000)) AND (d_moy#31 = 1)) (48) Project [codegen id : 1] -Output [1]: [d_month_seq#36] -Input [3]: [d_month_seq#36, d_year#37, d_moy#38] +Output [1]: [d_month_seq#29] +Input [3]: [d_month_seq#29, d_year#30, d_moy#31] (49) HashAggregate [codegen id : 1] -Input [1]: [d_month_seq#36] -Keys [1]: [d_month_seq#36] +Input [1]: [d_month_seq#29] +Keys [1]: [d_month_seq#29] Functions: [] Aggregate Attributes: [] -Results [1]: [d_month_seq#36] +Results [1]: [d_month_seq#29] (50) Exchange -Input [1]: [d_month_seq#36] -Arguments: hashpartitioning(d_month_seq#36, 5), ENSURE_REQUIREMENTS, [id=#39] +Input [1]: [d_month_seq#29] +Arguments: hashpartitioning(d_month_seq#29, 5), ENSURE_REQUIREMENTS, [plan_id=8] (51) HashAggregate [codegen id : 2] -Input [1]: [d_month_seq#36] -Keys [1]: [d_month_seq#36] +Input [1]: [d_month_seq#29] +Keys [1]: [d_month_seq#29] Functions: [] Aggregate Attributes: [] -Results [1]: [d_month_seq#36] +Results [1]: [d_month_seq#29] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q64.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q64.sf100/explain.txt index 2608f05dff0ee..4dbc69ad5d97a 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q64.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q64.sf100/explain.txt @@ -227,885 +227,885 @@ Condition : ((((((((isnotnull(ss_item_sk#1) AND isnotnull(ss_ticket_number#8)) A (4) Exchange Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#8, 5), ENSURE_REQUIREMENTS, [id=#16] +Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#8, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Arguments: [ss_item_sk#1 ASC NULLS FIRST, ss_ticket_number#8 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_returns -Output [3]: [sr_item_sk#17, sr_ticket_number#18, sr_returned_date_sk#19] +Output [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [3]: [sr_item_sk#17, sr_ticket_number#18, sr_returned_date_sk#19] +Input [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] (8) Filter [codegen id : 3] -Input [3]: [sr_item_sk#17, sr_ticket_number#18, sr_returned_date_sk#19] -Condition : (isnotnull(sr_item_sk#17) AND isnotnull(sr_ticket_number#18)) +Input [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] +Condition : (isnotnull(sr_item_sk#16) AND isnotnull(sr_ticket_number#17)) (9) Project [codegen id : 3] -Output [2]: [sr_item_sk#17, sr_ticket_number#18] -Input [3]: [sr_item_sk#17, sr_ticket_number#18, sr_returned_date_sk#19] +Output [2]: [sr_item_sk#16, sr_ticket_number#17] +Input [3]: [sr_item_sk#16, sr_ticket_number#17, sr_returned_date_sk#18] (10) Exchange -Input [2]: [sr_item_sk#17, sr_ticket_number#18] -Arguments: hashpartitioning(sr_item_sk#17, sr_ticket_number#18, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [2]: [sr_item_sk#16, sr_ticket_number#17] +Arguments: hashpartitioning(sr_item_sk#16, sr_ticket_number#17, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [2]: [sr_item_sk#17, sr_ticket_number#18] -Arguments: [sr_item_sk#17 ASC NULLS FIRST, sr_ticket_number#18 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#16, sr_ticket_number#17] +Arguments: [sr_item_sk#16 ASC NULLS FIRST, sr_ticket_number#17 ASC NULLS FIRST], false, 0 (12) SortMergeJoin [codegen id : 13] Left keys [2]: [ss_item_sk#1, ss_ticket_number#8] -Right keys [2]: [sr_item_sk#17, sr_ticket_number#18] +Right keys [2]: [sr_item_sk#16, sr_ticket_number#17] Join condition: None (13) Project [codegen id : 13] Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, sr_item_sk#17, sr_ticket_number#18] +Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, sr_item_sk#16, sr_ticket_number#17] (14) Scan parquet default.catalog_sales -Output [4]: [cs_item_sk#21, cs_order_number#22, cs_ext_list_price#23, cs_sold_date_sk#24] +Output [4]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cs_sold_date_sk#22] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_order_number)] ReadSchema: struct (15) ColumnarToRow [codegen id : 5] -Input [4]: [cs_item_sk#21, cs_order_number#22, cs_ext_list_price#23, cs_sold_date_sk#24] +Input [4]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cs_sold_date_sk#22] (16) Filter [codegen id : 5] -Input [4]: [cs_item_sk#21, cs_order_number#22, cs_ext_list_price#23, cs_sold_date_sk#24] -Condition : (isnotnull(cs_item_sk#21) AND isnotnull(cs_order_number#22)) +Input [4]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cs_sold_date_sk#22] +Condition : (isnotnull(cs_item_sk#19) AND isnotnull(cs_order_number#20)) (17) Project [codegen id : 5] -Output [3]: [cs_item_sk#21, cs_order_number#22, cs_ext_list_price#23] -Input [4]: [cs_item_sk#21, cs_order_number#22, cs_ext_list_price#23, cs_sold_date_sk#24] +Output [3]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21] +Input [4]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cs_sold_date_sk#22] (18) Exchange -Input [3]: [cs_item_sk#21, cs_order_number#22, cs_ext_list_price#23] -Arguments: hashpartitioning(cs_item_sk#21, cs_order_number#22, 5), ENSURE_REQUIREMENTS, [id=#25] +Input [3]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21] +Arguments: hashpartitioning(cs_item_sk#19, cs_order_number#20, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 6] -Input [3]: [cs_item_sk#21, cs_order_number#22, cs_ext_list_price#23] -Arguments: [cs_item_sk#21 ASC NULLS FIRST, cs_order_number#22 ASC NULLS FIRST], false, 0 +Input [3]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21] +Arguments: [cs_item_sk#19 ASC NULLS FIRST, cs_order_number#20 ASC NULLS FIRST], false, 0 (20) Scan parquet default.catalog_returns -Output [6]: [cr_item_sk#26, cr_order_number#27, cr_refunded_cash#28, cr_reversed_charge#29, cr_store_credit#30, cr_returned_date_sk#31] +Output [6]: [cr_item_sk#23, cr_order_number#24, cr_refunded_cash#25, cr_reversed_charge#26, cr_store_credit#27, cr_returned_date_sk#28] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct (21) ColumnarToRow [codegen id : 7] -Input [6]: [cr_item_sk#26, cr_order_number#27, cr_refunded_cash#28, cr_reversed_charge#29, cr_store_credit#30, cr_returned_date_sk#31] +Input [6]: [cr_item_sk#23, cr_order_number#24, cr_refunded_cash#25, cr_reversed_charge#26, cr_store_credit#27, cr_returned_date_sk#28] (22) Filter [codegen id : 7] -Input [6]: [cr_item_sk#26, cr_order_number#27, cr_refunded_cash#28, cr_reversed_charge#29, cr_store_credit#30, cr_returned_date_sk#31] -Condition : (isnotnull(cr_item_sk#26) AND isnotnull(cr_order_number#27)) +Input [6]: [cr_item_sk#23, cr_order_number#24, cr_refunded_cash#25, cr_reversed_charge#26, cr_store_credit#27, cr_returned_date_sk#28] +Condition : (isnotnull(cr_item_sk#23) AND isnotnull(cr_order_number#24)) (23) Project [codegen id : 7] -Output [5]: [cr_item_sk#26, cr_order_number#27, cr_refunded_cash#28, cr_reversed_charge#29, cr_store_credit#30] -Input [6]: [cr_item_sk#26, cr_order_number#27, cr_refunded_cash#28, cr_reversed_charge#29, cr_store_credit#30, cr_returned_date_sk#31] +Output [5]: [cr_item_sk#23, cr_order_number#24, cr_refunded_cash#25, cr_reversed_charge#26, cr_store_credit#27] +Input [6]: [cr_item_sk#23, cr_order_number#24, cr_refunded_cash#25, cr_reversed_charge#26, cr_store_credit#27, cr_returned_date_sk#28] (24) Exchange -Input [5]: [cr_item_sk#26, cr_order_number#27, cr_refunded_cash#28, cr_reversed_charge#29, cr_store_credit#30] -Arguments: hashpartitioning(cr_item_sk#26, cr_order_number#27, 5), ENSURE_REQUIREMENTS, [id=#32] +Input [5]: [cr_item_sk#23, cr_order_number#24, cr_refunded_cash#25, cr_reversed_charge#26, cr_store_credit#27] +Arguments: hashpartitioning(cr_item_sk#23, cr_order_number#24, 5), ENSURE_REQUIREMENTS, [plan_id=4] (25) Sort [codegen id : 8] -Input [5]: [cr_item_sk#26, cr_order_number#27, cr_refunded_cash#28, cr_reversed_charge#29, cr_store_credit#30] -Arguments: [cr_item_sk#26 ASC NULLS FIRST, cr_order_number#27 ASC NULLS FIRST], false, 0 +Input [5]: [cr_item_sk#23, cr_order_number#24, cr_refunded_cash#25, cr_reversed_charge#26, cr_store_credit#27] +Arguments: [cr_item_sk#23 ASC NULLS FIRST, cr_order_number#24 ASC NULLS FIRST], false, 0 (26) SortMergeJoin [codegen id : 9] -Left keys [2]: [cs_item_sk#21, cs_order_number#22] -Right keys [2]: [cr_item_sk#26, cr_order_number#27] +Left keys [2]: [cs_item_sk#19, cs_order_number#20] +Right keys [2]: [cr_item_sk#23, cr_order_number#24] Join condition: None (27) Project [codegen id : 9] -Output [5]: [cs_item_sk#21, cs_ext_list_price#23, cr_refunded_cash#28, cr_reversed_charge#29, cr_store_credit#30] -Input [8]: [cs_item_sk#21, cs_order_number#22, cs_ext_list_price#23, cr_item_sk#26, cr_order_number#27, cr_refunded_cash#28, cr_reversed_charge#29, cr_store_credit#30] +Output [5]: [cs_item_sk#19, cs_ext_list_price#21, cr_refunded_cash#25, cr_reversed_charge#26, cr_store_credit#27] +Input [8]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cr_item_sk#23, cr_order_number#24, cr_refunded_cash#25, cr_reversed_charge#26, cr_store_credit#27] (28) HashAggregate [codegen id : 9] -Input [5]: [cs_item_sk#21, cs_ext_list_price#23, cr_refunded_cash#28, cr_reversed_charge#29, cr_store_credit#30] -Keys [1]: [cs_item_sk#21] -Functions [2]: [partial_sum(UnscaledValue(cs_ext_list_price#23)), partial_sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#28 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#29 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#30 as decimal(9,2)))), DecimalType(9,2)))] -Aggregate Attributes [3]: [sum#33, sum#34, isEmpty#35] -Results [4]: [cs_item_sk#21, sum#36, sum#37, isEmpty#38] +Input [5]: [cs_item_sk#19, cs_ext_list_price#21, cr_refunded_cash#25, cr_reversed_charge#26, cr_store_credit#27] +Keys [1]: [cs_item_sk#19] +Functions [2]: [partial_sum(UnscaledValue(cs_ext_list_price#21)), partial_sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#25 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#26 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#27 as decimal(9,2)))), DecimalType(9,2)))] +Aggregate Attributes [3]: [sum#29, sum#30, isEmpty#31] +Results [4]: [cs_item_sk#19, sum#32, sum#33, isEmpty#34] (29) Exchange -Input [4]: [cs_item_sk#21, sum#36, sum#37, isEmpty#38] -Arguments: hashpartitioning(cs_item_sk#21, 5), ENSURE_REQUIREMENTS, [id=#39] +Input [4]: [cs_item_sk#19, sum#32, sum#33, isEmpty#34] +Arguments: hashpartitioning(cs_item_sk#19, 5), ENSURE_REQUIREMENTS, [plan_id=5] (30) HashAggregate [codegen id : 10] -Input [4]: [cs_item_sk#21, sum#36, sum#37, isEmpty#38] -Keys [1]: [cs_item_sk#21] -Functions [2]: [sum(UnscaledValue(cs_ext_list_price#23)), sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#28 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#29 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#30 as decimal(9,2)))), DecimalType(9,2)))] -Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#23))#40, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#28 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#29 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#30 as decimal(9,2)))), DecimalType(9,2)))#41] -Results [3]: [cs_item_sk#21, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#23))#40,17,2) AS sale#42, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#28 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#29 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#30 as decimal(9,2)))), DecimalType(9,2)))#41 AS refund#43] +Input [4]: [cs_item_sk#19, sum#32, sum#33, isEmpty#34] +Keys [1]: [cs_item_sk#19] +Functions [2]: [sum(UnscaledValue(cs_ext_list_price#21)), sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#25 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#26 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#27 as decimal(9,2)))), DecimalType(9,2)))] +Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#21))#35, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#25 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#26 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#27 as decimal(9,2)))), DecimalType(9,2)))#36] +Results [3]: [cs_item_sk#19, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#21))#35,17,2) AS sale#37, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#25 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#26 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#27 as decimal(9,2)))), DecimalType(9,2)))#36 AS refund#38] (31) Filter [codegen id : 10] -Input [3]: [cs_item_sk#21, sale#42, refund#43] -Condition : (isnotnull(sale#42) AND (cast(sale#42 as decimal(21,2)) > CheckOverflow((2.00 * promote_precision(refund#43)), DecimalType(21,2)))) +Input [3]: [cs_item_sk#19, sale#37, refund#38] +Condition : (isnotnull(sale#37) AND (cast(sale#37 as decimal(21,2)) > CheckOverflow((2.00 * promote_precision(refund#38)), DecimalType(21,2)))) (32) Project [codegen id : 10] -Output [1]: [cs_item_sk#21] -Input [3]: [cs_item_sk#21, sale#42, refund#43] +Output [1]: [cs_item_sk#19] +Input [3]: [cs_item_sk#19, sale#37, refund#38] (33) BroadcastExchange -Input [1]: [cs_item_sk#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#44] +Input [1]: [cs_item_sk#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] (34) BroadcastHashJoin [codegen id : 13] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [cs_item_sk#21] +Right keys [1]: [cs_item_sk#19] Join condition: None (35) Project [codegen id : 13] Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, cs_item_sk#21] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, cs_item_sk#19] (36) ReusedExchange [Reuses operator id: 220] -Output [2]: [d_date_sk#45, d_year#46] +Output [2]: [d_date_sk#39, d_year#40] (37) BroadcastHashJoin [codegen id : 13] Left keys [1]: [ss_sold_date_sk#12] -Right keys [1]: [d_date_sk#45] +Right keys [1]: [d_date_sk#39] Join condition: None (38) Project [codegen id : 13] -Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46] -Input [13]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, d_date_sk#45, d_year#46] +Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40] +Input [13]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, d_date_sk#39, d_year#40] (39) Scan parquet default.store -Output [3]: [s_store_sk#47, s_store_name#48, s_zip#49] +Output [3]: [s_store_sk#41, s_store_name#42, s_zip#43] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_name), IsNotNull(s_zip)] ReadSchema: struct (40) ColumnarToRow [codegen id : 12] -Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] +Input [3]: [s_store_sk#41, s_store_name#42, s_zip#43] (41) Filter [codegen id : 12] -Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] -Condition : ((isnotnull(s_store_sk#47) AND isnotnull(s_store_name#48)) AND isnotnull(s_zip#49)) +Input [3]: [s_store_sk#41, s_store_name#42, s_zip#43] +Condition : ((isnotnull(s_store_sk#41) AND isnotnull(s_store_name#42)) AND isnotnull(s_zip#43)) (42) BroadcastExchange -Input [3]: [s_store_sk#47, s_store_name#48, s_zip#49] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#50] +Input [3]: [s_store_sk#41, s_store_name#42, s_zip#43] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (43) BroadcastHashJoin [codegen id : 13] Left keys [1]: [ss_store_sk#6] -Right keys [1]: [s_store_sk#47] +Right keys [1]: [s_store_sk#41] Join condition: None (44) Project [codegen id : 13] -Output [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] -Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_sk#47, s_store_name#48, s_zip#49] +Output [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43] +Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_sk#41, s_store_name#42, s_zip#43] (45) Exchange -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] -Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43] +Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=8] (46) Sort [codegen id : 14] -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43] Arguments: [ss_customer_sk#2 ASC NULLS FIRST], false, 0 (47) Scan parquet default.customer -Output [6]: [c_customer_sk#52, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, c_first_shipto_date_sk#56, c_first_sales_date_sk#57] +Output [6]: [c_customer_sk#44, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, c_first_shipto_date_sk#48, c_first_sales_date_sk#49] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_first_sales_date_sk), IsNotNull(c_first_shipto_date_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_hdemo_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (48) ColumnarToRow [codegen id : 15] -Input [6]: [c_customer_sk#52, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, c_first_shipto_date_sk#56, c_first_sales_date_sk#57] +Input [6]: [c_customer_sk#44, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, c_first_shipto_date_sk#48, c_first_sales_date_sk#49] (49) Filter [codegen id : 15] -Input [6]: [c_customer_sk#52, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, c_first_shipto_date_sk#56, c_first_sales_date_sk#57] -Condition : (((((isnotnull(c_customer_sk#52) AND isnotnull(c_first_sales_date_sk#57)) AND isnotnull(c_first_shipto_date_sk#56)) AND isnotnull(c_current_cdemo_sk#53)) AND isnotnull(c_current_hdemo_sk#54)) AND isnotnull(c_current_addr_sk#55)) +Input [6]: [c_customer_sk#44, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, c_first_shipto_date_sk#48, c_first_sales_date_sk#49] +Condition : (((((isnotnull(c_customer_sk#44) AND isnotnull(c_first_sales_date_sk#49)) AND isnotnull(c_first_shipto_date_sk#48)) AND isnotnull(c_current_cdemo_sk#45)) AND isnotnull(c_current_hdemo_sk#46)) AND isnotnull(c_current_addr_sk#47)) (50) Exchange -Input [6]: [c_customer_sk#52, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, c_first_shipto_date_sk#56, c_first_sales_date_sk#57] -Arguments: hashpartitioning(c_customer_sk#52, 5), ENSURE_REQUIREMENTS, [id=#58] +Input [6]: [c_customer_sk#44, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, c_first_shipto_date_sk#48, c_first_sales_date_sk#49] +Arguments: hashpartitioning(c_customer_sk#44, 5), ENSURE_REQUIREMENTS, [plan_id=9] (51) Sort [codegen id : 16] -Input [6]: [c_customer_sk#52, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, c_first_shipto_date_sk#56, c_first_sales_date_sk#57] -Arguments: [c_customer_sk#52 ASC NULLS FIRST], false, 0 +Input [6]: [c_customer_sk#44, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, c_first_shipto_date_sk#48, c_first_sales_date_sk#49] +Arguments: [c_customer_sk#44 ASC NULLS FIRST], false, 0 (52) SortMergeJoin [codegen id : 19] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#52] +Right keys [1]: [c_customer_sk#44] Join condition: None (53) Project [codegen id : 19] -Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, c_first_shipto_date_sk#56, c_first_sales_date_sk#57] -Input [18]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_customer_sk#52, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, c_first_shipto_date_sk#56, c_first_sales_date_sk#57] +Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, c_first_shipto_date_sk#48, c_first_sales_date_sk#49] +Input [18]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_customer_sk#44, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, c_first_shipto_date_sk#48, c_first_sales_date_sk#49] (54) Scan parquet default.date_dim -Output [2]: [d_date_sk#59, d_year#60] +Output [2]: [d_date_sk#50, d_year#51] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk)] ReadSchema: struct (55) ColumnarToRow [codegen id : 17] -Input [2]: [d_date_sk#59, d_year#60] +Input [2]: [d_date_sk#50, d_year#51] (56) Filter [codegen id : 17] -Input [2]: [d_date_sk#59, d_year#60] -Condition : isnotnull(d_date_sk#59) +Input [2]: [d_date_sk#50, d_year#51] +Condition : isnotnull(d_date_sk#50) (57) BroadcastExchange -Input [2]: [d_date_sk#59, d_year#60] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#61] +Input [2]: [d_date_sk#50, d_year#51] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=10] (58) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [c_first_sales_date_sk#57] -Right keys [1]: [d_date_sk#59] +Left keys [1]: [c_first_sales_date_sk#49] +Right keys [1]: [d_date_sk#50] Join condition: None (59) Project [codegen id : 19] -Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, c_first_shipto_date_sk#56, d_year#60] -Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, c_first_shipto_date_sk#56, c_first_sales_date_sk#57, d_date_sk#59, d_year#60] +Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, c_first_shipto_date_sk#48, d_year#51] +Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, c_first_shipto_date_sk#48, c_first_sales_date_sk#49, d_date_sk#50, d_year#51] (60) ReusedExchange [Reuses operator id: 57] -Output [2]: [d_date_sk#62, d_year#63] +Output [2]: [d_date_sk#52, d_year#53] (61) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [c_first_shipto_date_sk#56] -Right keys [1]: [d_date_sk#62] +Left keys [1]: [c_first_shipto_date_sk#48] +Right keys [1]: [d_date_sk#52] Join condition: None (62) Project [codegen id : 19] -Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, d_year#60, d_year#63] -Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, c_first_shipto_date_sk#56, d_year#60, d_date_sk#62, d_year#63] +Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, d_year#51, d_year#53] +Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, c_first_shipto_date_sk#48, d_year#51, d_date_sk#52, d_year#53] (63) Exchange -Input [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, d_year#60, d_year#63] -Arguments: hashpartitioning(ss_cdemo_sk#3, 5), ENSURE_REQUIREMENTS, [id=#64] +Input [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, d_year#51, d_year#53] +Arguments: hashpartitioning(ss_cdemo_sk#3, 5), ENSURE_REQUIREMENTS, [plan_id=11] (64) Sort [codegen id : 20] -Input [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, d_year#60, d_year#63] +Input [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, d_year#51, d_year#53] Arguments: [ss_cdemo_sk#3 ASC NULLS FIRST], false, 0 (65) Scan parquet default.customer_demographics -Output [2]: [cd_demo_sk#65, cd_marital_status#66] +Output [2]: [cd_demo_sk#54, cd_marital_status#55] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status)] ReadSchema: struct (66) ColumnarToRow [codegen id : 21] -Input [2]: [cd_demo_sk#65, cd_marital_status#66] +Input [2]: [cd_demo_sk#54, cd_marital_status#55] (67) Filter [codegen id : 21] -Input [2]: [cd_demo_sk#65, cd_marital_status#66] -Condition : (isnotnull(cd_demo_sk#65) AND isnotnull(cd_marital_status#66)) +Input [2]: [cd_demo_sk#54, cd_marital_status#55] +Condition : (isnotnull(cd_demo_sk#54) AND isnotnull(cd_marital_status#55)) (68) Exchange -Input [2]: [cd_demo_sk#65, cd_marital_status#66] -Arguments: hashpartitioning(cd_demo_sk#65, 5), ENSURE_REQUIREMENTS, [id=#67] +Input [2]: [cd_demo_sk#54, cd_marital_status#55] +Arguments: hashpartitioning(cd_demo_sk#54, 5), ENSURE_REQUIREMENTS, [plan_id=12] (69) Sort [codegen id : 22] -Input [2]: [cd_demo_sk#65, cd_marital_status#66] -Arguments: [cd_demo_sk#65 ASC NULLS FIRST], false, 0 +Input [2]: [cd_demo_sk#54, cd_marital_status#55] +Arguments: [cd_demo_sk#54 ASC NULLS FIRST], false, 0 (70) SortMergeJoin [codegen id : 23] Left keys [1]: [ss_cdemo_sk#3] -Right keys [1]: [cd_demo_sk#65] +Right keys [1]: [cd_demo_sk#54] Join condition: None (71) Project [codegen id : 23] -Output [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, d_year#60, d_year#63, cd_marital_status#66] -Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, d_year#60, d_year#63, cd_demo_sk#65, cd_marital_status#66] +Output [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, d_year#51, d_year#53, cd_marital_status#55] +Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, d_year#51, d_year#53, cd_demo_sk#54, cd_marital_status#55] (72) Exchange -Input [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, d_year#60, d_year#63, cd_marital_status#66] -Arguments: hashpartitioning(c_current_cdemo_sk#53, 5), ENSURE_REQUIREMENTS, [id=#68] +Input [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, d_year#51, d_year#53, cd_marital_status#55] +Arguments: hashpartitioning(c_current_cdemo_sk#45, 5), ENSURE_REQUIREMENTS, [plan_id=13] (73) Sort [codegen id : 24] -Input [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, d_year#60, d_year#63, cd_marital_status#66] -Arguments: [c_current_cdemo_sk#53 ASC NULLS FIRST], false, 0 +Input [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, d_year#51, d_year#53, cd_marital_status#55] +Arguments: [c_current_cdemo_sk#45 ASC NULLS FIRST], false, 0 (74) ReusedExchange [Reuses operator id: 68] -Output [2]: [cd_demo_sk#69, cd_marital_status#70] +Output [2]: [cd_demo_sk#56, cd_marital_status#57] (75) Sort [codegen id : 26] -Input [2]: [cd_demo_sk#69, cd_marital_status#70] -Arguments: [cd_demo_sk#69 ASC NULLS FIRST], false, 0 +Input [2]: [cd_demo_sk#56, cd_marital_status#57] +Arguments: [cd_demo_sk#56 ASC NULLS FIRST], false, 0 (76) SortMergeJoin [codegen id : 30] -Left keys [1]: [c_current_cdemo_sk#53] -Right keys [1]: [cd_demo_sk#69] -Join condition: NOT (cd_marital_status#66 = cd_marital_status#70) +Left keys [1]: [c_current_cdemo_sk#45] +Right keys [1]: [cd_demo_sk#56] +Join condition: NOT (cd_marital_status#55 = cd_marital_status#57) (77) Project [codegen id : 30] -Output [14]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#54, c_current_addr_sk#55, d_year#60, d_year#63] -Input [18]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_cdemo_sk#53, c_current_hdemo_sk#54, c_current_addr_sk#55, d_year#60, d_year#63, cd_marital_status#66, cd_demo_sk#69, cd_marital_status#70] +Output [14]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_hdemo_sk#46, c_current_addr_sk#47, d_year#51, d_year#53] +Input [18]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_cdemo_sk#45, c_current_hdemo_sk#46, c_current_addr_sk#47, d_year#51, d_year#53, cd_marital_status#55, cd_demo_sk#56, cd_marital_status#57] (78) Scan parquet default.promotion -Output [1]: [p_promo_sk#71] +Output [1]: [p_promo_sk#58] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_promo_sk)] ReadSchema: struct (79) ColumnarToRow [codegen id : 27] -Input [1]: [p_promo_sk#71] +Input [1]: [p_promo_sk#58] (80) Filter [codegen id : 27] -Input [1]: [p_promo_sk#71] -Condition : isnotnull(p_promo_sk#71) +Input [1]: [p_promo_sk#58] +Condition : isnotnull(p_promo_sk#58) (81) BroadcastExchange -Input [1]: [p_promo_sk#71] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#72] +Input [1]: [p_promo_sk#58] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=14] (82) BroadcastHashJoin [codegen id : 30] Left keys [1]: [ss_promo_sk#7] -Right keys [1]: [p_promo_sk#71] +Right keys [1]: [p_promo_sk#58] Join condition: None (83) Project [codegen id : 30] -Output [13]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#54, c_current_addr_sk#55, d_year#60, d_year#63] -Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#54, c_current_addr_sk#55, d_year#60, d_year#63, p_promo_sk#71] +Output [13]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_hdemo_sk#46, c_current_addr_sk#47, d_year#51, d_year#53] +Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_hdemo_sk#46, c_current_addr_sk#47, d_year#51, d_year#53, p_promo_sk#58] (84) Scan parquet default.household_demographics -Output [2]: [hd_demo_sk#73, hd_income_band_sk#74] +Output [2]: [hd_demo_sk#59, hd_income_band_sk#60] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_demo_sk), IsNotNull(hd_income_band_sk)] ReadSchema: struct (85) ColumnarToRow [codegen id : 28] -Input [2]: [hd_demo_sk#73, hd_income_band_sk#74] +Input [2]: [hd_demo_sk#59, hd_income_band_sk#60] (86) Filter [codegen id : 28] -Input [2]: [hd_demo_sk#73, hd_income_band_sk#74] -Condition : (isnotnull(hd_demo_sk#73) AND isnotnull(hd_income_band_sk#74)) +Input [2]: [hd_demo_sk#59, hd_income_band_sk#60] +Condition : (isnotnull(hd_demo_sk#59) AND isnotnull(hd_income_band_sk#60)) (87) BroadcastExchange -Input [2]: [hd_demo_sk#73, hd_income_band_sk#74] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#75] +Input [2]: [hd_demo_sk#59, hd_income_band_sk#60] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15] (88) BroadcastHashJoin [codegen id : 30] Left keys [1]: [ss_hdemo_sk#4] -Right keys [1]: [hd_demo_sk#73] +Right keys [1]: [hd_demo_sk#59] Join condition: None (89) Project [codegen id : 30] -Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#54, c_current_addr_sk#55, d_year#60, d_year#63, hd_income_band_sk#74] -Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#54, c_current_addr_sk#55, d_year#60, d_year#63, hd_demo_sk#73, hd_income_band_sk#74] +Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_hdemo_sk#46, c_current_addr_sk#47, d_year#51, d_year#53, hd_income_band_sk#60] +Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_hdemo_sk#46, c_current_addr_sk#47, d_year#51, d_year#53, hd_demo_sk#59, hd_income_band_sk#60] (90) ReusedExchange [Reuses operator id: 87] -Output [2]: [hd_demo_sk#76, hd_income_band_sk#77] +Output [2]: [hd_demo_sk#61, hd_income_band_sk#62] (91) BroadcastHashJoin [codegen id : 30] -Left keys [1]: [c_current_hdemo_sk#54] -Right keys [1]: [hd_demo_sk#76] +Left keys [1]: [c_current_hdemo_sk#46] +Right keys [1]: [hd_demo_sk#61] Join condition: None (92) Project [codegen id : 30] -Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#55, d_year#60, d_year#63, hd_income_band_sk#74, hd_income_band_sk#77] -Input [15]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_hdemo_sk#54, c_current_addr_sk#55, d_year#60, d_year#63, hd_income_band_sk#74, hd_demo_sk#76, hd_income_band_sk#77] +Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_addr_sk#47, d_year#51, d_year#53, hd_income_band_sk#60, hd_income_band_sk#62] +Input [15]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_hdemo_sk#46, c_current_addr_sk#47, d_year#51, d_year#53, hd_income_band_sk#60, hd_demo_sk#61, hd_income_band_sk#62] (93) Exchange -Input [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#55, d_year#60, d_year#63, hd_income_band_sk#74, hd_income_band_sk#77] -Arguments: hashpartitioning(ss_addr_sk#5, 5), ENSURE_REQUIREMENTS, [id=#78] +Input [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_addr_sk#47, d_year#51, d_year#53, hd_income_band_sk#60, hd_income_band_sk#62] +Arguments: hashpartitioning(ss_addr_sk#5, 5), ENSURE_REQUIREMENTS, [plan_id=16] (94) Sort [codegen id : 31] -Input [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#55, d_year#60, d_year#63, hd_income_band_sk#74, hd_income_band_sk#77] +Input [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_addr_sk#47, d_year#51, d_year#53, hd_income_band_sk#60, hd_income_band_sk#62] Arguments: [ss_addr_sk#5 ASC NULLS FIRST], false, 0 (95) Scan parquet default.customer_address -Output [5]: [ca_address_sk#79, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83] +Output [5]: [ca_address_sk#63, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (96) ColumnarToRow [codegen id : 32] -Input [5]: [ca_address_sk#79, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83] +Input [5]: [ca_address_sk#63, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67] (97) Filter [codegen id : 32] -Input [5]: [ca_address_sk#79, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83] -Condition : isnotnull(ca_address_sk#79) +Input [5]: [ca_address_sk#63, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67] +Condition : isnotnull(ca_address_sk#63) (98) Exchange -Input [5]: [ca_address_sk#79, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83] -Arguments: hashpartitioning(ca_address_sk#79, 5), ENSURE_REQUIREMENTS, [id=#84] +Input [5]: [ca_address_sk#63, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67] +Arguments: hashpartitioning(ca_address_sk#63, 5), ENSURE_REQUIREMENTS, [plan_id=17] (99) Sort [codegen id : 33] -Input [5]: [ca_address_sk#79, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83] -Arguments: [ca_address_sk#79 ASC NULLS FIRST], false, 0 +Input [5]: [ca_address_sk#63, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67] +Arguments: [ca_address_sk#63 ASC NULLS FIRST], false, 0 (100) SortMergeJoin [codegen id : 34] Left keys [1]: [ss_addr_sk#5] -Right keys [1]: [ca_address_sk#79] +Right keys [1]: [ca_address_sk#63] Join condition: None (101) Project [codegen id : 34] -Output [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#55, d_year#60, d_year#63, hd_income_band_sk#74, hd_income_band_sk#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83] -Input [18]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#55, d_year#60, d_year#63, hd_income_band_sk#74, hd_income_band_sk#77, ca_address_sk#79, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83] +Output [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_addr_sk#47, d_year#51, d_year#53, hd_income_band_sk#60, hd_income_band_sk#62, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67] +Input [18]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_addr_sk#47, d_year#51, d_year#53, hd_income_band_sk#60, hd_income_band_sk#62, ca_address_sk#63, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67] (102) Exchange -Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#55, d_year#60, d_year#63, hd_income_band_sk#74, hd_income_band_sk#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83] -Arguments: hashpartitioning(c_current_addr_sk#55, 5), ENSURE_REQUIREMENTS, [id=#85] +Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_addr_sk#47, d_year#51, d_year#53, hd_income_band_sk#60, hd_income_band_sk#62, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67] +Arguments: hashpartitioning(c_current_addr_sk#47, 5), ENSURE_REQUIREMENTS, [plan_id=18] (103) Sort [codegen id : 35] -Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#55, d_year#60, d_year#63, hd_income_band_sk#74, hd_income_band_sk#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83] -Arguments: [c_current_addr_sk#55 ASC NULLS FIRST], false, 0 +Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_addr_sk#47, d_year#51, d_year#53, hd_income_band_sk#60, hd_income_band_sk#62, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67] +Arguments: [c_current_addr_sk#47 ASC NULLS FIRST], false, 0 (104) ReusedExchange [Reuses operator id: 98] -Output [5]: [ca_address_sk#86, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90] +Output [5]: [ca_address_sk#68, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72] (105) Sort [codegen id : 37] -Input [5]: [ca_address_sk#86, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90] -Arguments: [ca_address_sk#86 ASC NULLS FIRST], false, 0 +Input [5]: [ca_address_sk#68, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72] +Arguments: [ca_address_sk#68 ASC NULLS FIRST], false, 0 (106) SortMergeJoin [codegen id : 41] -Left keys [1]: [c_current_addr_sk#55] -Right keys [1]: [ca_address_sk#86] +Left keys [1]: [c_current_addr_sk#47] +Right keys [1]: [ca_address_sk#68] Join condition: None (107) Project [codegen id : 41] -Output [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#60, d_year#63, hd_income_band_sk#74, hd_income_band_sk#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90] -Input [21]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, c_current_addr_sk#55, d_year#60, d_year#63, hd_income_band_sk#74, hd_income_band_sk#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_address_sk#86, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90] +Output [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, d_year#51, d_year#53, hd_income_band_sk#60, hd_income_band_sk#62, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72] +Input [21]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, c_current_addr_sk#47, d_year#51, d_year#53, hd_income_band_sk#60, hd_income_band_sk#62, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_address_sk#68, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72] (108) Scan parquet default.income_band -Output [1]: [ib_income_band_sk#91] +Output [1]: [ib_income_band_sk#73] Batched: true Location [not included in comparison]/{warehouse_dir}/income_band] PushedFilters: [IsNotNull(ib_income_band_sk)] ReadSchema: struct (109) ColumnarToRow [codegen id : 38] -Input [1]: [ib_income_band_sk#91] +Input [1]: [ib_income_band_sk#73] (110) Filter [codegen id : 38] -Input [1]: [ib_income_band_sk#91] -Condition : isnotnull(ib_income_band_sk#91) +Input [1]: [ib_income_band_sk#73] +Condition : isnotnull(ib_income_band_sk#73) (111) BroadcastExchange -Input [1]: [ib_income_band_sk#91] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#92] +Input [1]: [ib_income_band_sk#73] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=19] (112) BroadcastHashJoin [codegen id : 41] -Left keys [1]: [hd_income_band_sk#74] -Right keys [1]: [ib_income_band_sk#91] +Left keys [1]: [hd_income_band_sk#60] +Right keys [1]: [ib_income_band_sk#73] Join condition: None (113) Project [codegen id : 41] -Output [18]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#60, d_year#63, hd_income_band_sk#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90] -Input [20]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#60, d_year#63, hd_income_band_sk#74, hd_income_band_sk#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90, ib_income_band_sk#91] +Output [18]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, d_year#51, d_year#53, hd_income_band_sk#62, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72] +Input [20]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, d_year#51, d_year#53, hd_income_band_sk#60, hd_income_band_sk#62, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72, ib_income_band_sk#73] (114) ReusedExchange [Reuses operator id: 111] -Output [1]: [ib_income_band_sk#93] +Output [1]: [ib_income_band_sk#74] (115) BroadcastHashJoin [codegen id : 41] -Left keys [1]: [hd_income_band_sk#77] -Right keys [1]: [ib_income_band_sk#93] +Left keys [1]: [hd_income_band_sk#62] +Right keys [1]: [ib_income_band_sk#74] Join condition: None (116) Project [codegen id : 41] -Output [17]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#60, d_year#63, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90] -Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#60, d_year#63, hd_income_band_sk#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90, ib_income_band_sk#93] +Output [17]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, d_year#51, d_year#53, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72] +Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, d_year#51, d_year#53, hd_income_band_sk#62, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72, ib_income_band_sk#74] (117) Scan parquet default.item -Output [4]: [i_item_sk#94, i_current_price#95, i_color#96, i_product_name#97] +Output [4]: [i_item_sk#75, i_current_price#76, i_color#77, i_product_name#78] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), In(i_color, [burlywood ,floral ,indian ,medium ,purple ,spring ]), GreaterThanOrEqual(i_current_price,64.00), LessThanOrEqual(i_current_price,74.00), GreaterThanOrEqual(i_current_price,65.00), LessThanOrEqual(i_current_price,79.00), IsNotNull(i_item_sk)] ReadSchema: struct (118) ColumnarToRow [codegen id : 40] -Input [4]: [i_item_sk#94, i_current_price#95, i_color#96, i_product_name#97] +Input [4]: [i_item_sk#75, i_current_price#76, i_color#77, i_product_name#78] (119) Filter [codegen id : 40] -Input [4]: [i_item_sk#94, i_current_price#95, i_color#96, i_product_name#97] -Condition : ((((((isnotnull(i_current_price#95) AND i_color#96 IN (purple ,burlywood ,indian ,spring ,floral ,medium )) AND (i_current_price#95 >= 64.00)) AND (i_current_price#95 <= 74.00)) AND (i_current_price#95 >= 65.00)) AND (i_current_price#95 <= 79.00)) AND isnotnull(i_item_sk#94)) +Input [4]: [i_item_sk#75, i_current_price#76, i_color#77, i_product_name#78] +Condition : ((((((isnotnull(i_current_price#76) AND i_color#77 IN (purple ,burlywood ,indian ,spring ,floral ,medium )) AND (i_current_price#76 >= 64.00)) AND (i_current_price#76 <= 74.00)) AND (i_current_price#76 >= 65.00)) AND (i_current_price#76 <= 79.00)) AND isnotnull(i_item_sk#75)) (120) Project [codegen id : 40] -Output [2]: [i_item_sk#94, i_product_name#97] -Input [4]: [i_item_sk#94, i_current_price#95, i_color#96, i_product_name#97] +Output [2]: [i_item_sk#75, i_product_name#78] +Input [4]: [i_item_sk#75, i_current_price#76, i_color#77, i_product_name#78] (121) BroadcastExchange -Input [2]: [i_item_sk#94, i_product_name#97] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#98] +Input [2]: [i_item_sk#75, i_product_name#78] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=20] (122) BroadcastHashJoin [codegen id : 41] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#94] +Right keys [1]: [i_item_sk#75] Join condition: None (123) Project [codegen id : 41] -Output [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, d_year#60, d_year#63, s_store_name#48, s_zip#49, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90, i_item_sk#94, i_product_name#97] -Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, s_store_name#48, s_zip#49, d_year#60, d_year#63, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90, i_item_sk#94, i_product_name#97] +Output [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, d_year#51, d_year#53, s_store_name#42, s_zip#43, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72, i_item_sk#75, i_product_name#78] +Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, s_store_name#42, s_zip#43, d_year#51, d_year#53, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72, i_item_sk#75, i_product_name#78] (124) HashAggregate [codegen id : 41] -Input [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#46, d_year#60, d_year#63, s_store_name#48, s_zip#49, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90, i_item_sk#94, i_product_name#97] -Keys [15]: [i_product_name#97, i_item_sk#94, s_store_name#48, s_zip#49, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90, d_year#46, d_year#60, d_year#63] +Input [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#40, d_year#51, d_year#53, s_store_name#42, s_zip#43, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72, i_item_sk#75, i_product_name#78] +Keys [15]: [i_product_name#78, i_item_sk#75, s_store_name#42, s_zip#43, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72, d_year#40, d_year#51, d_year#53] Functions [4]: [partial_count(1), partial_sum(UnscaledValue(ss_wholesale_cost#9)), partial_sum(UnscaledValue(ss_list_price#10)), partial_sum(UnscaledValue(ss_coupon_amt#11))] -Aggregate Attributes [4]: [count#99, sum#100, sum#101, sum#102] -Results [19]: [i_product_name#97, i_item_sk#94, s_store_name#48, s_zip#49, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90, d_year#46, d_year#60, d_year#63, count#103, sum#104, sum#105, sum#106] +Aggregate Attributes [4]: [count#79, sum#80, sum#81, sum#82] +Results [19]: [i_product_name#78, i_item_sk#75, s_store_name#42, s_zip#43, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72, d_year#40, d_year#51, d_year#53, count#83, sum#84, sum#85, sum#86] (125) Exchange -Input [19]: [i_product_name#97, i_item_sk#94, s_store_name#48, s_zip#49, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90, d_year#46, d_year#60, d_year#63, count#103, sum#104, sum#105, sum#106] -Arguments: hashpartitioning(i_product_name#97, i_item_sk#94, s_store_name#48, s_zip#49, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90, d_year#46, d_year#60, d_year#63, 5), ENSURE_REQUIREMENTS, [id=#107] +Input [19]: [i_product_name#78, i_item_sk#75, s_store_name#42, s_zip#43, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72, d_year#40, d_year#51, d_year#53, count#83, sum#84, sum#85, sum#86] +Arguments: hashpartitioning(i_product_name#78, i_item_sk#75, s_store_name#42, s_zip#43, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72, d_year#40, d_year#51, d_year#53, 5), ENSURE_REQUIREMENTS, [plan_id=21] (126) HashAggregate [codegen id : 42] -Input [19]: [i_product_name#97, i_item_sk#94, s_store_name#48, s_zip#49, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90, d_year#46, d_year#60, d_year#63, count#103, sum#104, sum#105, sum#106] -Keys [15]: [i_product_name#97, i_item_sk#94, s_store_name#48, s_zip#49, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ca_street_number#87, ca_street_name#88, ca_city#89, ca_zip#90, d_year#46, d_year#60, d_year#63] +Input [19]: [i_product_name#78, i_item_sk#75, s_store_name#42, s_zip#43, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72, d_year#40, d_year#51, d_year#53, count#83, sum#84, sum#85, sum#86] +Keys [15]: [i_product_name#78, i_item_sk#75, s_store_name#42, s_zip#43, ca_street_number#64, ca_street_name#65, ca_city#66, ca_zip#67, ca_street_number#69, ca_street_name#70, ca_city#71, ca_zip#72, d_year#40, d_year#51, d_year#53] Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#9)), sum(UnscaledValue(ss_list_price#10)), sum(UnscaledValue(ss_coupon_amt#11))] -Aggregate Attributes [4]: [count(1)#108, sum(UnscaledValue(ss_wholesale_cost#9))#109, sum(UnscaledValue(ss_list_price#10))#110, sum(UnscaledValue(ss_coupon_amt#11))#111] -Results [17]: [i_product_name#97 AS product_name#112, i_item_sk#94 AS item_sk#113, s_store_name#48 AS store_name#114, s_zip#49 AS store_zip#115, ca_street_number#80 AS b_street_number#116, ca_street_name#81 AS b_streen_name#117, ca_city#82 AS b_city#118, ca_zip#83 AS b_zip#119, ca_street_number#87 AS c_street_number#120, ca_street_name#88 AS c_street_name#121, ca_city#89 AS c_city#122, ca_zip#90 AS c_zip#123, d_year#46 AS syear#124, count(1)#108 AS cnt#125, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#9))#109,17,2) AS s1#126, MakeDecimal(sum(UnscaledValue(ss_list_price#10))#110,17,2) AS s2#127, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#11))#111,17,2) AS s3#128] +Aggregate Attributes [4]: [count(1)#87, sum(UnscaledValue(ss_wholesale_cost#9))#88, sum(UnscaledValue(ss_list_price#10))#89, sum(UnscaledValue(ss_coupon_amt#11))#90] +Results [17]: [i_product_name#78 AS product_name#91, i_item_sk#75 AS item_sk#92, s_store_name#42 AS store_name#93, s_zip#43 AS store_zip#94, ca_street_number#64 AS b_street_number#95, ca_street_name#65 AS b_streen_name#96, ca_city#66 AS b_city#97, ca_zip#67 AS b_zip#98, ca_street_number#69 AS c_street_number#99, ca_street_name#70 AS c_street_name#100, ca_city#71 AS c_city#101, ca_zip#72 AS c_zip#102, d_year#40 AS syear#103, count(1)#87 AS cnt#104, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#9))#88,17,2) AS s1#105, MakeDecimal(sum(UnscaledValue(ss_list_price#10))#89,17,2) AS s2#106, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#11))#90,17,2) AS s3#107] (127) Exchange -Input [17]: [product_name#112, item_sk#113, store_name#114, store_zip#115, b_street_number#116, b_streen_name#117, b_city#118, b_zip#119, c_street_number#120, c_street_name#121, c_city#122, c_zip#123, syear#124, cnt#125, s1#126, s2#127, s3#128] -Arguments: hashpartitioning(item_sk#113, store_name#114, store_zip#115, 5), ENSURE_REQUIREMENTS, [id=#129] +Input [17]: [product_name#91, item_sk#92, store_name#93, store_zip#94, b_street_number#95, b_streen_name#96, b_city#97, b_zip#98, c_street_number#99, c_street_name#100, c_city#101, c_zip#102, syear#103, cnt#104, s1#105, s2#106, s3#107] +Arguments: hashpartitioning(item_sk#92, store_name#93, store_zip#94, 5), ENSURE_REQUIREMENTS, [plan_id=22] (128) Sort [codegen id : 43] -Input [17]: [product_name#112, item_sk#113, store_name#114, store_zip#115, b_street_number#116, b_streen_name#117, b_city#118, b_zip#119, c_street_number#120, c_street_name#121, c_city#122, c_zip#123, syear#124, cnt#125, s1#126, s2#127, s3#128] -Arguments: [item_sk#113 ASC NULLS FIRST, store_name#114 ASC NULLS FIRST, store_zip#115 ASC NULLS FIRST], false, 0 +Input [17]: [product_name#91, item_sk#92, store_name#93, store_zip#94, b_street_number#95, b_streen_name#96, b_city#97, b_zip#98, c_street_number#99, c_street_name#100, c_city#101, c_zip#102, syear#103, cnt#104, s1#105, s2#106, s3#107] +Arguments: [item_sk#92 ASC NULLS FIRST, store_name#93 ASC NULLS FIRST, store_zip#94 ASC NULLS FIRST], false, 0 (129) Scan parquet default.store_sales -Output [12]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_store_sk#135, ss_promo_sk#136, ss_ticket_number#137, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, ss_sold_date_sk#141] +Output [12]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_store_sk#113, ss_promo_sk#114, ss_ticket_number#115, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, ss_sold_date_sk#119] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#141), dynamicpruningexpression(ss_sold_date_sk#141 IN dynamicpruning#142)] +PartitionFilters: [isnotnull(ss_sold_date_sk#119), dynamicpruningexpression(ss_sold_date_sk#119 IN dynamicpruning#120)] PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_ticket_number), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_cdemo_sk), IsNotNull(ss_promo_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk)] ReadSchema: struct (130) ColumnarToRow [codegen id : 44] -Input [12]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_store_sk#135, ss_promo_sk#136, ss_ticket_number#137, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, ss_sold_date_sk#141] +Input [12]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_store_sk#113, ss_promo_sk#114, ss_ticket_number#115, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, ss_sold_date_sk#119] (131) Filter [codegen id : 44] -Input [12]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_store_sk#135, ss_promo_sk#136, ss_ticket_number#137, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, ss_sold_date_sk#141] -Condition : ((((((((isnotnull(ss_item_sk#130) AND isnotnull(ss_ticket_number#137)) AND isnotnull(ss_store_sk#135)) AND isnotnull(ss_customer_sk#131)) AND isnotnull(ss_cdemo_sk#132)) AND isnotnull(ss_promo_sk#136)) AND isnotnull(ss_hdemo_sk#133)) AND isnotnull(ss_addr_sk#134)) AND might_contain(ReusedSubquery Subquery scalar-subquery#14, [id=#15], xxhash64(ss_item_sk#130, 42))) +Input [12]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_store_sk#113, ss_promo_sk#114, ss_ticket_number#115, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, ss_sold_date_sk#119] +Condition : ((((((((isnotnull(ss_item_sk#108) AND isnotnull(ss_ticket_number#115)) AND isnotnull(ss_store_sk#113)) AND isnotnull(ss_customer_sk#109)) AND isnotnull(ss_cdemo_sk#110)) AND isnotnull(ss_promo_sk#114)) AND isnotnull(ss_hdemo_sk#111)) AND isnotnull(ss_addr_sk#112)) AND might_contain(ReusedSubquery Subquery scalar-subquery#14, [id=#15], xxhash64(ss_item_sk#108, 42))) (132) Exchange -Input [12]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_store_sk#135, ss_promo_sk#136, ss_ticket_number#137, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, ss_sold_date_sk#141] -Arguments: hashpartitioning(ss_item_sk#130, ss_ticket_number#137, 5), ENSURE_REQUIREMENTS, [id=#143] +Input [12]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_store_sk#113, ss_promo_sk#114, ss_ticket_number#115, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, ss_sold_date_sk#119] +Arguments: hashpartitioning(ss_item_sk#108, ss_ticket_number#115, 5), ENSURE_REQUIREMENTS, [plan_id=23] (133) Sort [codegen id : 45] -Input [12]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_store_sk#135, ss_promo_sk#136, ss_ticket_number#137, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, ss_sold_date_sk#141] -Arguments: [ss_item_sk#130 ASC NULLS FIRST, ss_ticket_number#137 ASC NULLS FIRST], false, 0 +Input [12]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_store_sk#113, ss_promo_sk#114, ss_ticket_number#115, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, ss_sold_date_sk#119] +Arguments: [ss_item_sk#108 ASC NULLS FIRST, ss_ticket_number#115 ASC NULLS FIRST], false, 0 (134) ReusedExchange [Reuses operator id: 10] -Output [2]: [sr_item_sk#144, sr_ticket_number#145] +Output [2]: [sr_item_sk#121, sr_ticket_number#122] (135) Sort [codegen id : 47] -Input [2]: [sr_item_sk#144, sr_ticket_number#145] -Arguments: [sr_item_sk#144 ASC NULLS FIRST, sr_ticket_number#145 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#121, sr_ticket_number#122] +Arguments: [sr_item_sk#121 ASC NULLS FIRST, sr_ticket_number#122 ASC NULLS FIRST], false, 0 (136) SortMergeJoin [codegen id : 56] -Left keys [2]: [ss_item_sk#130, ss_ticket_number#137] -Right keys [2]: [sr_item_sk#144, sr_ticket_number#145] +Left keys [2]: [ss_item_sk#108, ss_ticket_number#115] +Right keys [2]: [sr_item_sk#121, sr_ticket_number#122] Join condition: None (137) Project [codegen id : 56] -Output [11]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_store_sk#135, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, ss_sold_date_sk#141] -Input [14]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_store_sk#135, ss_promo_sk#136, ss_ticket_number#137, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, ss_sold_date_sk#141, sr_item_sk#144, sr_ticket_number#145] +Output [11]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_store_sk#113, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, ss_sold_date_sk#119] +Input [14]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_store_sk#113, ss_promo_sk#114, ss_ticket_number#115, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, ss_sold_date_sk#119, sr_item_sk#121, sr_ticket_number#122] (138) ReusedExchange [Reuses operator id: 33] -Output [1]: [cs_item_sk#146] +Output [1]: [cs_item_sk#123] (139) BroadcastHashJoin [codegen id : 56] -Left keys [1]: [ss_item_sk#130] -Right keys [1]: [cs_item_sk#146] +Left keys [1]: [ss_item_sk#108] +Right keys [1]: [cs_item_sk#123] Join condition: None (140) Project [codegen id : 56] -Output [11]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_store_sk#135, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, ss_sold_date_sk#141] -Input [12]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_store_sk#135, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, ss_sold_date_sk#141, cs_item_sk#146] +Output [11]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_store_sk#113, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, ss_sold_date_sk#119] +Input [12]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_store_sk#113, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, ss_sold_date_sk#119, cs_item_sk#123] (141) ReusedExchange [Reuses operator id: 224] -Output [2]: [d_date_sk#147, d_year#148] +Output [2]: [d_date_sk#124, d_year#125] (142) BroadcastHashJoin [codegen id : 56] -Left keys [1]: [ss_sold_date_sk#141] -Right keys [1]: [d_date_sk#147] +Left keys [1]: [ss_sold_date_sk#119] +Right keys [1]: [d_date_sk#124] Join condition: None (143) Project [codegen id : 56] -Output [11]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_store_sk#135, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148] -Input [13]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_store_sk#135, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, ss_sold_date_sk#141, d_date_sk#147, d_year#148] +Output [11]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_store_sk#113, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125] +Input [13]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_store_sk#113, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, ss_sold_date_sk#119, d_date_sk#124, d_year#125] (144) ReusedExchange [Reuses operator id: 42] -Output [3]: [s_store_sk#149, s_store_name#150, s_zip#151] +Output [3]: [s_store_sk#126, s_store_name#127, s_zip#128] (145) BroadcastHashJoin [codegen id : 56] -Left keys [1]: [ss_store_sk#135] -Right keys [1]: [s_store_sk#149] +Left keys [1]: [ss_store_sk#113] +Right keys [1]: [s_store_sk#126] Join condition: None (146) Project [codegen id : 56] -Output [12]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151] -Input [14]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_store_sk#135, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_sk#149, s_store_name#150, s_zip#151] +Output [12]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128] +Input [14]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_store_sk#113, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_sk#126, s_store_name#127, s_zip#128] (147) Exchange -Input [12]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151] -Arguments: hashpartitioning(ss_customer_sk#131, 5), ENSURE_REQUIREMENTS, [id=#152] +Input [12]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128] +Arguments: hashpartitioning(ss_customer_sk#109, 5), ENSURE_REQUIREMENTS, [plan_id=24] (148) Sort [codegen id : 57] -Input [12]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151] -Arguments: [ss_customer_sk#131 ASC NULLS FIRST], false, 0 +Input [12]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128] +Arguments: [ss_customer_sk#109 ASC NULLS FIRST], false, 0 (149) ReusedExchange [Reuses operator id: 50] -Output [6]: [c_customer_sk#153, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, c_first_shipto_date_sk#157, c_first_sales_date_sk#158] +Output [6]: [c_customer_sk#129, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, c_first_shipto_date_sk#133, c_first_sales_date_sk#134] (150) Sort [codegen id : 59] -Input [6]: [c_customer_sk#153, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, c_first_shipto_date_sk#157, c_first_sales_date_sk#158] -Arguments: [c_customer_sk#153 ASC NULLS FIRST], false, 0 +Input [6]: [c_customer_sk#129, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, c_first_shipto_date_sk#133, c_first_sales_date_sk#134] +Arguments: [c_customer_sk#129 ASC NULLS FIRST], false, 0 (151) SortMergeJoin [codegen id : 62] -Left keys [1]: [ss_customer_sk#131] -Right keys [1]: [c_customer_sk#153] +Left keys [1]: [ss_customer_sk#109] +Right keys [1]: [c_customer_sk#129] Join condition: None (152) Project [codegen id : 62] -Output [16]: [ss_item_sk#130, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, c_first_shipto_date_sk#157, c_first_sales_date_sk#158] -Input [18]: [ss_item_sk#130, ss_customer_sk#131, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_customer_sk#153, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, c_first_shipto_date_sk#157, c_first_sales_date_sk#158] +Output [16]: [ss_item_sk#108, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, c_first_shipto_date_sk#133, c_first_sales_date_sk#134] +Input [18]: [ss_item_sk#108, ss_customer_sk#109, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_customer_sk#129, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, c_first_shipto_date_sk#133, c_first_sales_date_sk#134] (153) ReusedExchange [Reuses operator id: 57] -Output [2]: [d_date_sk#159, d_year#160] +Output [2]: [d_date_sk#135, d_year#136] (154) BroadcastHashJoin [codegen id : 62] -Left keys [1]: [c_first_sales_date_sk#158] -Right keys [1]: [d_date_sk#159] +Left keys [1]: [c_first_sales_date_sk#134] +Right keys [1]: [d_date_sk#135] Join condition: None (155) Project [codegen id : 62] -Output [16]: [ss_item_sk#130, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, c_first_shipto_date_sk#157, d_year#160] -Input [18]: [ss_item_sk#130, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, c_first_shipto_date_sk#157, c_first_sales_date_sk#158, d_date_sk#159, d_year#160] +Output [16]: [ss_item_sk#108, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, c_first_shipto_date_sk#133, d_year#136] +Input [18]: [ss_item_sk#108, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, c_first_shipto_date_sk#133, c_first_sales_date_sk#134, d_date_sk#135, d_year#136] (156) ReusedExchange [Reuses operator id: 57] -Output [2]: [d_date_sk#161, d_year#162] +Output [2]: [d_date_sk#137, d_year#138] (157) BroadcastHashJoin [codegen id : 62] -Left keys [1]: [c_first_shipto_date_sk#157] -Right keys [1]: [d_date_sk#161] +Left keys [1]: [c_first_shipto_date_sk#133] +Right keys [1]: [d_date_sk#137] Join condition: None (158) Project [codegen id : 62] -Output [16]: [ss_item_sk#130, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162] -Input [18]: [ss_item_sk#130, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, c_first_shipto_date_sk#157, d_year#160, d_date_sk#161, d_year#162] +Output [16]: [ss_item_sk#108, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, d_year#136, d_year#138] +Input [18]: [ss_item_sk#108, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, c_first_shipto_date_sk#133, d_year#136, d_date_sk#137, d_year#138] (159) Exchange -Input [16]: [ss_item_sk#130, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162] -Arguments: hashpartitioning(ss_cdemo_sk#132, 5), ENSURE_REQUIREMENTS, [id=#163] +Input [16]: [ss_item_sk#108, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, d_year#136, d_year#138] +Arguments: hashpartitioning(ss_cdemo_sk#110, 5), ENSURE_REQUIREMENTS, [plan_id=25] (160) Sort [codegen id : 63] -Input [16]: [ss_item_sk#130, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162] -Arguments: [ss_cdemo_sk#132 ASC NULLS FIRST], false, 0 +Input [16]: [ss_item_sk#108, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, d_year#136, d_year#138] +Arguments: [ss_cdemo_sk#110 ASC NULLS FIRST], false, 0 (161) ReusedExchange [Reuses operator id: 68] -Output [2]: [cd_demo_sk#164, cd_marital_status#165] +Output [2]: [cd_demo_sk#139, cd_marital_status#140] (162) Sort [codegen id : 65] -Input [2]: [cd_demo_sk#164, cd_marital_status#165] -Arguments: [cd_demo_sk#164 ASC NULLS FIRST], false, 0 +Input [2]: [cd_demo_sk#139, cd_marital_status#140] +Arguments: [cd_demo_sk#139 ASC NULLS FIRST], false, 0 (163) SortMergeJoin [codegen id : 66] -Left keys [1]: [ss_cdemo_sk#132] -Right keys [1]: [cd_demo_sk#164] +Left keys [1]: [ss_cdemo_sk#110] +Right keys [1]: [cd_demo_sk#139] Join condition: None (164) Project [codegen id : 66] -Output [16]: [ss_item_sk#130, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, cd_marital_status#165] -Input [18]: [ss_item_sk#130, ss_cdemo_sk#132, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, cd_demo_sk#164, cd_marital_status#165] +Output [16]: [ss_item_sk#108, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, d_year#136, d_year#138, cd_marital_status#140] +Input [18]: [ss_item_sk#108, ss_cdemo_sk#110, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, d_year#136, d_year#138, cd_demo_sk#139, cd_marital_status#140] (165) Exchange -Input [16]: [ss_item_sk#130, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, cd_marital_status#165] -Arguments: hashpartitioning(c_current_cdemo_sk#154, 5), ENSURE_REQUIREMENTS, [id=#166] +Input [16]: [ss_item_sk#108, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, d_year#136, d_year#138, cd_marital_status#140] +Arguments: hashpartitioning(c_current_cdemo_sk#130, 5), ENSURE_REQUIREMENTS, [plan_id=26] (166) Sort [codegen id : 67] -Input [16]: [ss_item_sk#130, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, cd_marital_status#165] -Arguments: [c_current_cdemo_sk#154 ASC NULLS FIRST], false, 0 +Input [16]: [ss_item_sk#108, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, d_year#136, d_year#138, cd_marital_status#140] +Arguments: [c_current_cdemo_sk#130 ASC NULLS FIRST], false, 0 (167) ReusedExchange [Reuses operator id: 68] -Output [2]: [cd_demo_sk#167, cd_marital_status#168] +Output [2]: [cd_demo_sk#141, cd_marital_status#142] (168) Sort [codegen id : 69] -Input [2]: [cd_demo_sk#167, cd_marital_status#168] -Arguments: [cd_demo_sk#167 ASC NULLS FIRST], false, 0 +Input [2]: [cd_demo_sk#141, cd_marital_status#142] +Arguments: [cd_demo_sk#141 ASC NULLS FIRST], false, 0 (169) SortMergeJoin [codegen id : 73] -Left keys [1]: [c_current_cdemo_sk#154] -Right keys [1]: [cd_demo_sk#167] -Join condition: NOT (cd_marital_status#165 = cd_marital_status#168) +Left keys [1]: [c_current_cdemo_sk#130] +Right keys [1]: [cd_demo_sk#141] +Join condition: NOT (cd_marital_status#140 = cd_marital_status#142) (170) Project [codegen id : 73] -Output [14]: [ss_item_sk#130, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162] -Input [18]: [ss_item_sk#130, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, cd_marital_status#165, cd_demo_sk#167, cd_marital_status#168] +Output [14]: [ss_item_sk#108, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_hdemo_sk#131, c_current_addr_sk#132, d_year#136, d_year#138] +Input [18]: [ss_item_sk#108, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_cdemo_sk#130, c_current_hdemo_sk#131, c_current_addr_sk#132, d_year#136, d_year#138, cd_marital_status#140, cd_demo_sk#141, cd_marital_status#142] (171) ReusedExchange [Reuses operator id: 81] -Output [1]: [p_promo_sk#169] +Output [1]: [p_promo_sk#143] (172) BroadcastHashJoin [codegen id : 73] -Left keys [1]: [ss_promo_sk#136] -Right keys [1]: [p_promo_sk#169] +Left keys [1]: [ss_promo_sk#114] +Right keys [1]: [p_promo_sk#143] Join condition: None (173) Project [codegen id : 73] -Output [13]: [ss_item_sk#130, ss_hdemo_sk#133, ss_addr_sk#134, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162] -Input [15]: [ss_item_sk#130, ss_hdemo_sk#133, ss_addr_sk#134, ss_promo_sk#136, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, p_promo_sk#169] +Output [13]: [ss_item_sk#108, ss_hdemo_sk#111, ss_addr_sk#112, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_hdemo_sk#131, c_current_addr_sk#132, d_year#136, d_year#138] +Input [15]: [ss_item_sk#108, ss_hdemo_sk#111, ss_addr_sk#112, ss_promo_sk#114, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_hdemo_sk#131, c_current_addr_sk#132, d_year#136, d_year#138, p_promo_sk#143] (174) ReusedExchange [Reuses operator id: 87] -Output [2]: [hd_demo_sk#170, hd_income_band_sk#171] +Output [2]: [hd_demo_sk#144, hd_income_band_sk#145] (175) BroadcastHashJoin [codegen id : 73] -Left keys [1]: [ss_hdemo_sk#133] -Right keys [1]: [hd_demo_sk#170] +Left keys [1]: [ss_hdemo_sk#111] +Right keys [1]: [hd_demo_sk#144] Join condition: None (176) Project [codegen id : 73] -Output [13]: [ss_item_sk#130, ss_addr_sk#134, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171] -Input [15]: [ss_item_sk#130, ss_hdemo_sk#133, ss_addr_sk#134, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, hd_demo_sk#170, hd_income_band_sk#171] +Output [13]: [ss_item_sk#108, ss_addr_sk#112, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_hdemo_sk#131, c_current_addr_sk#132, d_year#136, d_year#138, hd_income_band_sk#145] +Input [15]: [ss_item_sk#108, ss_hdemo_sk#111, ss_addr_sk#112, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_hdemo_sk#131, c_current_addr_sk#132, d_year#136, d_year#138, hd_demo_sk#144, hd_income_band_sk#145] (177) ReusedExchange [Reuses operator id: 87] -Output [2]: [hd_demo_sk#172, hd_income_band_sk#173] +Output [2]: [hd_demo_sk#146, hd_income_band_sk#147] (178) BroadcastHashJoin [codegen id : 73] -Left keys [1]: [c_current_hdemo_sk#155] -Right keys [1]: [hd_demo_sk#172] +Left keys [1]: [c_current_hdemo_sk#131] +Right keys [1]: [hd_demo_sk#146] Join condition: None (179) Project [codegen id : 73] -Output [13]: [ss_item_sk#130, ss_addr_sk#134, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173] -Input [15]: [ss_item_sk#130, ss_addr_sk#134, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_demo_sk#172, hd_income_band_sk#173] +Output [13]: [ss_item_sk#108, ss_addr_sk#112, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_addr_sk#132, d_year#136, d_year#138, hd_income_band_sk#145, hd_income_band_sk#147] +Input [15]: [ss_item_sk#108, ss_addr_sk#112, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_hdemo_sk#131, c_current_addr_sk#132, d_year#136, d_year#138, hd_income_band_sk#145, hd_demo_sk#146, hd_income_band_sk#147] (180) Exchange -Input [13]: [ss_item_sk#130, ss_addr_sk#134, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173] -Arguments: hashpartitioning(ss_addr_sk#134, 5), ENSURE_REQUIREMENTS, [id=#174] +Input [13]: [ss_item_sk#108, ss_addr_sk#112, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_addr_sk#132, d_year#136, d_year#138, hd_income_band_sk#145, hd_income_band_sk#147] +Arguments: hashpartitioning(ss_addr_sk#112, 5), ENSURE_REQUIREMENTS, [plan_id=27] (181) Sort [codegen id : 74] -Input [13]: [ss_item_sk#130, ss_addr_sk#134, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173] -Arguments: [ss_addr_sk#134 ASC NULLS FIRST], false, 0 +Input [13]: [ss_item_sk#108, ss_addr_sk#112, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_addr_sk#132, d_year#136, d_year#138, hd_income_band_sk#145, hd_income_band_sk#147] +Arguments: [ss_addr_sk#112 ASC NULLS FIRST], false, 0 (182) ReusedExchange [Reuses operator id: 98] -Output [5]: [ca_address_sk#175, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179] +Output [5]: [ca_address_sk#148, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152] (183) Sort [codegen id : 76] -Input [5]: [ca_address_sk#175, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179] -Arguments: [ca_address_sk#175 ASC NULLS FIRST], false, 0 +Input [5]: [ca_address_sk#148, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152] +Arguments: [ca_address_sk#148 ASC NULLS FIRST], false, 0 (184) SortMergeJoin [codegen id : 77] -Left keys [1]: [ss_addr_sk#134] -Right keys [1]: [ca_address_sk#175] +Left keys [1]: [ss_addr_sk#112] +Right keys [1]: [ca_address_sk#148] Join condition: None (185) Project [codegen id : 77] -Output [16]: [ss_item_sk#130, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179] -Input [18]: [ss_item_sk#130, ss_addr_sk#134, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173, ca_address_sk#175, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179] +Output [16]: [ss_item_sk#108, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_addr_sk#132, d_year#136, d_year#138, hd_income_band_sk#145, hd_income_band_sk#147, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152] +Input [18]: [ss_item_sk#108, ss_addr_sk#112, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_addr_sk#132, d_year#136, d_year#138, hd_income_band_sk#145, hd_income_band_sk#147, ca_address_sk#148, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152] (186) Exchange -Input [16]: [ss_item_sk#130, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179] -Arguments: hashpartitioning(c_current_addr_sk#156, 5), ENSURE_REQUIREMENTS, [id=#180] +Input [16]: [ss_item_sk#108, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_addr_sk#132, d_year#136, d_year#138, hd_income_band_sk#145, hd_income_band_sk#147, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152] +Arguments: hashpartitioning(c_current_addr_sk#132, 5), ENSURE_REQUIREMENTS, [plan_id=28] (187) Sort [codegen id : 78] -Input [16]: [ss_item_sk#130, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179] -Arguments: [c_current_addr_sk#156 ASC NULLS FIRST], false, 0 +Input [16]: [ss_item_sk#108, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_addr_sk#132, d_year#136, d_year#138, hd_income_band_sk#145, hd_income_band_sk#147, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152] +Arguments: [c_current_addr_sk#132 ASC NULLS FIRST], false, 0 (188) ReusedExchange [Reuses operator id: 98] -Output [5]: [ca_address_sk#181, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185] +Output [5]: [ca_address_sk#153, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157] (189) Sort [codegen id : 80] -Input [5]: [ca_address_sk#181, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185] -Arguments: [ca_address_sk#181 ASC NULLS FIRST], false, 0 +Input [5]: [ca_address_sk#153, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157] +Arguments: [ca_address_sk#153 ASC NULLS FIRST], false, 0 (190) SortMergeJoin [codegen id : 84] -Left keys [1]: [c_current_addr_sk#156] -Right keys [1]: [ca_address_sk#181] +Left keys [1]: [c_current_addr_sk#132] +Right keys [1]: [ca_address_sk#153] Join condition: None (191) Project [codegen id : 84] -Output [19]: [ss_item_sk#130, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185] -Input [21]: [ss_item_sk#130, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_address_sk#181, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185] +Output [19]: [ss_item_sk#108, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, d_year#136, d_year#138, hd_income_band_sk#145, hd_income_band_sk#147, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157] +Input [21]: [ss_item_sk#108, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, c_current_addr_sk#132, d_year#136, d_year#138, hd_income_band_sk#145, hd_income_band_sk#147, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_address_sk#153, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157] (192) ReusedExchange [Reuses operator id: 111] -Output [1]: [ib_income_band_sk#186] +Output [1]: [ib_income_band_sk#158] (193) BroadcastHashJoin [codegen id : 84] -Left keys [1]: [hd_income_band_sk#171] -Right keys [1]: [ib_income_band_sk#186] +Left keys [1]: [hd_income_band_sk#145] +Right keys [1]: [ib_income_band_sk#158] Join condition: None (194) Project [codegen id : 84] -Output [18]: [ss_item_sk#130, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, d_year#160, d_year#162, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185] -Input [20]: [ss_item_sk#130, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, ib_income_band_sk#186] +Output [18]: [ss_item_sk#108, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, d_year#136, d_year#138, hd_income_band_sk#147, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157] +Input [20]: [ss_item_sk#108, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, d_year#136, d_year#138, hd_income_band_sk#145, hd_income_band_sk#147, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157, ib_income_band_sk#158] (195) ReusedExchange [Reuses operator id: 111] -Output [1]: [ib_income_band_sk#187] +Output [1]: [ib_income_band_sk#159] (196) BroadcastHashJoin [codegen id : 84] -Left keys [1]: [hd_income_band_sk#173] -Right keys [1]: [ib_income_band_sk#187] +Left keys [1]: [hd_income_band_sk#147] +Right keys [1]: [ib_income_band_sk#159] Join condition: None (197) Project [codegen id : 84] -Output [17]: [ss_item_sk#130, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, d_year#160, d_year#162, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185] -Input [19]: [ss_item_sk#130, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, d_year#160, d_year#162, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, ib_income_band_sk#187] +Output [17]: [ss_item_sk#108, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, d_year#136, d_year#138, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157] +Input [19]: [ss_item_sk#108, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, d_year#136, d_year#138, hd_income_band_sk#147, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157, ib_income_band_sk#159] (198) ReusedExchange [Reuses operator id: 121] -Output [2]: [i_item_sk#188, i_product_name#189] +Output [2]: [i_item_sk#160, i_product_name#161] (199) BroadcastHashJoin [codegen id : 84] -Left keys [1]: [ss_item_sk#130] -Right keys [1]: [i_item_sk#188] +Left keys [1]: [ss_item_sk#108] +Right keys [1]: [i_item_sk#160] Join condition: None (200) Project [codegen id : 84] -Output [18]: [ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, d_year#160, d_year#162, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, i_item_sk#188, i_product_name#189] -Input [19]: [ss_item_sk#130, ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, s_store_name#150, s_zip#151, d_year#160, d_year#162, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, i_item_sk#188, i_product_name#189] +Output [18]: [ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, d_year#136, d_year#138, s_store_name#127, s_zip#128, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157, i_item_sk#160, i_product_name#161] +Input [19]: [ss_item_sk#108, ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, s_store_name#127, s_zip#128, d_year#136, d_year#138, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157, i_item_sk#160, i_product_name#161] (201) HashAggregate [codegen id : 84] -Input [18]: [ss_wholesale_cost#138, ss_list_price#139, ss_coupon_amt#140, d_year#148, d_year#160, d_year#162, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, i_item_sk#188, i_product_name#189] -Keys [15]: [i_product_name#189, i_item_sk#188, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, d_year#148, d_year#160, d_year#162] -Functions [4]: [partial_count(1), partial_sum(UnscaledValue(ss_wholesale_cost#138)), partial_sum(UnscaledValue(ss_list_price#139)), partial_sum(UnscaledValue(ss_coupon_amt#140))] -Aggregate Attributes [4]: [count#99, sum#190, sum#191, sum#192] -Results [19]: [i_product_name#189, i_item_sk#188, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, d_year#148, d_year#160, d_year#162, count#103, sum#193, sum#194, sum#195] +Input [18]: [ss_wholesale_cost#116, ss_list_price#117, ss_coupon_amt#118, d_year#125, d_year#136, d_year#138, s_store_name#127, s_zip#128, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157, i_item_sk#160, i_product_name#161] +Keys [15]: [i_product_name#161, i_item_sk#160, s_store_name#127, s_zip#128, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157, d_year#125, d_year#136, d_year#138] +Functions [4]: [partial_count(1), partial_sum(UnscaledValue(ss_wholesale_cost#116)), partial_sum(UnscaledValue(ss_list_price#117)), partial_sum(UnscaledValue(ss_coupon_amt#118))] +Aggregate Attributes [4]: [count#79, sum#162, sum#163, sum#164] +Results [19]: [i_product_name#161, i_item_sk#160, s_store_name#127, s_zip#128, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157, d_year#125, d_year#136, d_year#138, count#83, sum#165, sum#166, sum#167] (202) Exchange -Input [19]: [i_product_name#189, i_item_sk#188, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, d_year#148, d_year#160, d_year#162, count#103, sum#193, sum#194, sum#195] -Arguments: hashpartitioning(i_product_name#189, i_item_sk#188, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, d_year#148, d_year#160, d_year#162, 5), ENSURE_REQUIREMENTS, [id=#196] +Input [19]: [i_product_name#161, i_item_sk#160, s_store_name#127, s_zip#128, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157, d_year#125, d_year#136, d_year#138, count#83, sum#165, sum#166, sum#167] +Arguments: hashpartitioning(i_product_name#161, i_item_sk#160, s_store_name#127, s_zip#128, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157, d_year#125, d_year#136, d_year#138, 5), ENSURE_REQUIREMENTS, [plan_id=29] (203) HashAggregate [codegen id : 85] -Input [19]: [i_product_name#189, i_item_sk#188, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, d_year#148, d_year#160, d_year#162, count#103, sum#193, sum#194, sum#195] -Keys [15]: [i_product_name#189, i_item_sk#188, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, d_year#148, d_year#160, d_year#162] -Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#138)), sum(UnscaledValue(ss_list_price#139)), sum(UnscaledValue(ss_coupon_amt#140))] -Aggregate Attributes [4]: [count(1)#108, sum(UnscaledValue(ss_wholesale_cost#138))#109, sum(UnscaledValue(ss_list_price#139))#110, sum(UnscaledValue(ss_coupon_amt#140))#111] -Results [8]: [i_item_sk#188 AS item_sk#197, s_store_name#150 AS store_name#198, s_zip#151 AS store_zip#199, d_year#148 AS syear#200, count(1)#108 AS cnt#201, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#138))#109,17,2) AS s1#202, MakeDecimal(sum(UnscaledValue(ss_list_price#139))#110,17,2) AS s2#203, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#140))#111,17,2) AS s3#204] +Input [19]: [i_product_name#161, i_item_sk#160, s_store_name#127, s_zip#128, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157, d_year#125, d_year#136, d_year#138, count#83, sum#165, sum#166, sum#167] +Keys [15]: [i_product_name#161, i_item_sk#160, s_store_name#127, s_zip#128, ca_street_number#149, ca_street_name#150, ca_city#151, ca_zip#152, ca_street_number#154, ca_street_name#155, ca_city#156, ca_zip#157, d_year#125, d_year#136, d_year#138] +Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#116)), sum(UnscaledValue(ss_list_price#117)), sum(UnscaledValue(ss_coupon_amt#118))] +Aggregate Attributes [4]: [count(1)#87, sum(UnscaledValue(ss_wholesale_cost#116))#88, sum(UnscaledValue(ss_list_price#117))#89, sum(UnscaledValue(ss_coupon_amt#118))#90] +Results [8]: [i_item_sk#160 AS item_sk#168, s_store_name#127 AS store_name#169, s_zip#128 AS store_zip#170, d_year#125 AS syear#171, count(1)#87 AS cnt#172, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#116))#88,17,2) AS s1#173, MakeDecimal(sum(UnscaledValue(ss_list_price#117))#89,17,2) AS s2#174, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#118))#90,17,2) AS s3#175] (204) Exchange -Input [8]: [item_sk#197, store_name#198, store_zip#199, syear#200, cnt#201, s1#202, s2#203, s3#204] -Arguments: hashpartitioning(item_sk#197, store_name#198, store_zip#199, 5), ENSURE_REQUIREMENTS, [id=#205] +Input [8]: [item_sk#168, store_name#169, store_zip#170, syear#171, cnt#172, s1#173, s2#174, s3#175] +Arguments: hashpartitioning(item_sk#168, store_name#169, store_zip#170, 5), ENSURE_REQUIREMENTS, [plan_id=30] (205) Sort [codegen id : 86] -Input [8]: [item_sk#197, store_name#198, store_zip#199, syear#200, cnt#201, s1#202, s2#203, s3#204] -Arguments: [item_sk#197 ASC NULLS FIRST, store_name#198 ASC NULLS FIRST, store_zip#199 ASC NULLS FIRST], false, 0 +Input [8]: [item_sk#168, store_name#169, store_zip#170, syear#171, cnt#172, s1#173, s2#174, s3#175] +Arguments: [item_sk#168 ASC NULLS FIRST, store_name#169 ASC NULLS FIRST, store_zip#170 ASC NULLS FIRST], false, 0 (206) SortMergeJoin [codegen id : 87] -Left keys [3]: [item_sk#113, store_name#114, store_zip#115] -Right keys [3]: [item_sk#197, store_name#198, store_zip#199] -Join condition: (cnt#201 <= cnt#125) +Left keys [3]: [item_sk#92, store_name#93, store_zip#94] +Right keys [3]: [item_sk#168, store_name#169, store_zip#170] +Join condition: (cnt#172 <= cnt#104) (207) Project [codegen id : 87] -Output [21]: [product_name#112, store_name#114, store_zip#115, b_street_number#116, b_streen_name#117, b_city#118, b_zip#119, c_street_number#120, c_street_name#121, c_city#122, c_zip#123, syear#124, cnt#125, s1#126, s2#127, s3#128, s1#202, s2#203, s3#204, syear#200, cnt#201] -Input [25]: [product_name#112, item_sk#113, store_name#114, store_zip#115, b_street_number#116, b_streen_name#117, b_city#118, b_zip#119, c_street_number#120, c_street_name#121, c_city#122, c_zip#123, syear#124, cnt#125, s1#126, s2#127, s3#128, item_sk#197, store_name#198, store_zip#199, syear#200, cnt#201, s1#202, s2#203, s3#204] +Output [21]: [product_name#91, store_name#93, store_zip#94, b_street_number#95, b_streen_name#96, b_city#97, b_zip#98, c_street_number#99, c_street_name#100, c_city#101, c_zip#102, syear#103, cnt#104, s1#105, s2#106, s3#107, s1#173, s2#174, s3#175, syear#171, cnt#172] +Input [25]: [product_name#91, item_sk#92, store_name#93, store_zip#94, b_street_number#95, b_streen_name#96, b_city#97, b_zip#98, c_street_number#99, c_street_name#100, c_city#101, c_zip#102, syear#103, cnt#104, s1#105, s2#106, s3#107, item_sk#168, store_name#169, store_zip#170, syear#171, cnt#172, s1#173, s2#174, s3#175] (208) Exchange -Input [21]: [product_name#112, store_name#114, store_zip#115, b_street_number#116, b_streen_name#117, b_city#118, b_zip#119, c_street_number#120, c_street_name#121, c_city#122, c_zip#123, syear#124, cnt#125, s1#126, s2#127, s3#128, s1#202, s2#203, s3#204, syear#200, cnt#201] -Arguments: rangepartitioning(product_name#112 ASC NULLS FIRST, store_name#114 ASC NULLS FIRST, cnt#201 ASC NULLS FIRST, s1#126 ASC NULLS FIRST, s1#202 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#206] +Input [21]: [product_name#91, store_name#93, store_zip#94, b_street_number#95, b_streen_name#96, b_city#97, b_zip#98, c_street_number#99, c_street_name#100, c_city#101, c_zip#102, syear#103, cnt#104, s1#105, s2#106, s3#107, s1#173, s2#174, s3#175, syear#171, cnt#172] +Arguments: rangepartitioning(product_name#91 ASC NULLS FIRST, store_name#93 ASC NULLS FIRST, cnt#172 ASC NULLS FIRST, s1#105 ASC NULLS FIRST, s1#173 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=31] (209) Sort [codegen id : 88] -Input [21]: [product_name#112, store_name#114, store_zip#115, b_street_number#116, b_streen_name#117, b_city#118, b_zip#119, c_street_number#120, c_street_name#121, c_city#122, c_zip#123, syear#124, cnt#125, s1#126, s2#127, s3#128, s1#202, s2#203, s3#204, syear#200, cnt#201] -Arguments: [product_name#112 ASC NULLS FIRST, store_name#114 ASC NULLS FIRST, cnt#201 ASC NULLS FIRST, s1#126 ASC NULLS FIRST, s1#202 ASC NULLS FIRST], true, 0 +Input [21]: [product_name#91, store_name#93, store_zip#94, b_street_number#95, b_streen_name#96, b_city#97, b_zip#98, c_street_number#99, c_street_name#100, c_city#101, c_zip#102, syear#103, cnt#104, s1#105, s2#106, s3#107, s1#173, s2#174, s3#175, syear#171, cnt#172] +Arguments: [product_name#91 ASC NULLS FIRST, store_name#93 ASC NULLS FIRST, cnt#172 ASC NULLS FIRST, s1#105 ASC NULLS FIRST, s1#173 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -1120,40 +1120,40 @@ ObjectHashAggregate (216) (210) Scan parquet default.item -Output [3]: [i_item_sk#94, i_current_price#95, i_color#96] +Output [3]: [i_item_sk#75, i_current_price#76, i_color#77] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), In(i_color, [burlywood ,floral ,indian ,medium ,purple ,spring ]), GreaterThanOrEqual(i_current_price,64.00), LessThanOrEqual(i_current_price,74.00), GreaterThanOrEqual(i_current_price,65.00), LessThanOrEqual(i_current_price,79.00), IsNotNull(i_item_sk)] ReadSchema: struct (211) ColumnarToRow [codegen id : 1] -Input [3]: [i_item_sk#94, i_current_price#95, i_color#96] +Input [3]: [i_item_sk#75, i_current_price#76, i_color#77] (212) Filter [codegen id : 1] -Input [3]: [i_item_sk#94, i_current_price#95, i_color#96] -Condition : ((((((isnotnull(i_current_price#95) AND i_color#96 IN (purple ,burlywood ,indian ,spring ,floral ,medium )) AND (i_current_price#95 >= 64.00)) AND (i_current_price#95 <= 74.00)) AND (i_current_price#95 >= 65.00)) AND (i_current_price#95 <= 79.00)) AND isnotnull(i_item_sk#94)) +Input [3]: [i_item_sk#75, i_current_price#76, i_color#77] +Condition : ((((((isnotnull(i_current_price#76) AND i_color#77 IN (purple ,burlywood ,indian ,spring ,floral ,medium )) AND (i_current_price#76 >= 64.00)) AND (i_current_price#76 <= 74.00)) AND (i_current_price#76 >= 65.00)) AND (i_current_price#76 <= 79.00)) AND isnotnull(i_item_sk#75)) (213) Project [codegen id : 1] -Output [1]: [i_item_sk#94] -Input [3]: [i_item_sk#94, i_current_price#95, i_color#96] +Output [1]: [i_item_sk#75] +Input [3]: [i_item_sk#75, i_current_price#76, i_color#77] (214) ObjectHashAggregate -Input [1]: [i_item_sk#94] +Input [1]: [i_item_sk#75] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#94, 42), 1250, 10000, 0, 0)] -Aggregate Attributes [1]: [buf#207] -Results [1]: [buf#208] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#75, 42), 1250, 10000, 0, 0)] +Aggregate Attributes [1]: [buf#176] +Results [1]: [buf#177] (215) Exchange -Input [1]: [buf#208] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#209] +Input [1]: [buf#177] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=32] (216) ObjectHashAggregate -Input [1]: [buf#208] +Input [1]: [buf#177] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#94, 42), 1250, 10000, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#94, 42), 1250, 10000, 0, 0)#210] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#94, 42), 1250, 10000, 0, 0)#210 AS bloomFilter#211] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#75, 42), 1250, 10000, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#75, 42), 1250, 10000, 0, 0)#178] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#75, 42), 1250, 10000, 0, 0)#178 AS bloomFilter#179] Subquery:2 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#12 IN dynamicpruning#13 BroadcastExchange (220) @@ -1163,26 +1163,26 @@ BroadcastExchange (220) (217) Scan parquet default.date_dim -Output [2]: [d_date_sk#45, d_year#46] +Output [2]: [d_date_sk#39, d_year#40] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct (218) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#45, d_year#46] +Input [2]: [d_date_sk#39, d_year#40] (219) Filter [codegen id : 1] -Input [2]: [d_date_sk#45, d_year#46] -Condition : ((isnotnull(d_year#46) AND (d_year#46 = 1999)) AND isnotnull(d_date_sk#45)) +Input [2]: [d_date_sk#39, d_year#40] +Condition : ((isnotnull(d_year#40) AND (d_year#40 = 1999)) AND isnotnull(d_date_sk#39)) (220) BroadcastExchange -Input [2]: [d_date_sk#45, d_year#46] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#212] +Input [2]: [d_date_sk#39, d_year#40] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=33] Subquery:3 Hosting operator id = 131 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#15] -Subquery:4 Hosting operator id = 129 Hosting Expression = ss_sold_date_sk#141 IN dynamicpruning#142 +Subquery:4 Hosting operator id = 129 Hosting Expression = ss_sold_date_sk#119 IN dynamicpruning#120 BroadcastExchange (224) +- * Filter (223) +- * ColumnarToRow (222) @@ -1190,21 +1190,21 @@ BroadcastExchange (224) (221) Scan parquet default.date_dim -Output [2]: [d_date_sk#147, d_year#148] +Output [2]: [d_date_sk#124, d_year#125] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (222) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#147, d_year#148] +Input [2]: [d_date_sk#124, d_year#125] (223) Filter [codegen id : 1] -Input [2]: [d_date_sk#147, d_year#148] -Condition : ((isnotnull(d_year#148) AND (d_year#148 = 2000)) AND isnotnull(d_date_sk#147)) +Input [2]: [d_date_sk#124, d_year#125] +Condition : ((isnotnull(d_year#125) AND (d_year#125 = 2000)) AND isnotnull(d_date_sk#124)) (224) BroadcastExchange -Input [2]: [d_date_sk#147, d_year#148] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#213] +Input [2]: [d_date_sk#124, d_year#125] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=34] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q64/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q64/explain.txt index 426b408190662..28affb7b36a28 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q64/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q64/explain.txt @@ -201,787 +201,787 @@ Condition : (((((((isnotnull(ss_item_sk#1) AND isnotnull(ss_ticket_number#8)) AN (4) BroadcastExchange Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, false] as bigint), 32) | (cast(input[7, int, false] as bigint) & 4294967295))),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, false] as bigint), 32) | (cast(input[7, int, false] as bigint) & 4294967295))),false), [plan_id=1] (5) Scan parquet default.store_returns -Output [3]: [sr_item_sk#15, sr_ticket_number#16, sr_returned_date_sk#17] +Output [3]: [sr_item_sk#14, sr_ticket_number#15, sr_returned_date_sk#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct (6) ColumnarToRow -Input [3]: [sr_item_sk#15, sr_ticket_number#16, sr_returned_date_sk#17] +Input [3]: [sr_item_sk#14, sr_ticket_number#15, sr_returned_date_sk#16] (7) Filter -Input [3]: [sr_item_sk#15, sr_ticket_number#16, sr_returned_date_sk#17] -Condition : (isnotnull(sr_item_sk#15) AND isnotnull(sr_ticket_number#16)) +Input [3]: [sr_item_sk#14, sr_ticket_number#15, sr_returned_date_sk#16] +Condition : (isnotnull(sr_item_sk#14) AND isnotnull(sr_ticket_number#15)) (8) Project -Output [2]: [sr_item_sk#15, sr_ticket_number#16] -Input [3]: [sr_item_sk#15, sr_ticket_number#16, sr_returned_date_sk#17] +Output [2]: [sr_item_sk#14, sr_ticket_number#15] +Input [3]: [sr_item_sk#14, sr_ticket_number#15, sr_returned_date_sk#16] (9) BroadcastHashJoin [codegen id : 2] Left keys [2]: [ss_item_sk#1, ss_ticket_number#8] -Right keys [2]: [sr_item_sk#15, sr_ticket_number#16] +Right keys [2]: [sr_item_sk#14, sr_ticket_number#15] Join condition: None (10) Project [codegen id : 2] Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, sr_item_sk#15, sr_ticket_number#16] +Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, sr_item_sk#14, sr_ticket_number#15] (11) Exchange Input [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#18] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) Sort [codegen id : 3] Input [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (13) Scan parquet default.catalog_sales -Output [4]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cs_sold_date_sk#22] +Output [4]: [cs_item_sk#17, cs_order_number#18, cs_ext_list_price#19, cs_sold_date_sk#20] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_sales] PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_order_number)] ReadSchema: struct (14) ColumnarToRow [codegen id : 4] -Input [4]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cs_sold_date_sk#22] +Input [4]: [cs_item_sk#17, cs_order_number#18, cs_ext_list_price#19, cs_sold_date_sk#20] (15) Filter [codegen id : 4] -Input [4]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cs_sold_date_sk#22] -Condition : (isnotnull(cs_item_sk#19) AND isnotnull(cs_order_number#20)) +Input [4]: [cs_item_sk#17, cs_order_number#18, cs_ext_list_price#19, cs_sold_date_sk#20] +Condition : (isnotnull(cs_item_sk#17) AND isnotnull(cs_order_number#18)) (16) Project [codegen id : 4] -Output [3]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21] -Input [4]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cs_sold_date_sk#22] +Output [3]: [cs_item_sk#17, cs_order_number#18, cs_ext_list_price#19] +Input [4]: [cs_item_sk#17, cs_order_number#18, cs_ext_list_price#19, cs_sold_date_sk#20] (17) Exchange -Input [3]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21] -Arguments: hashpartitioning(cs_item_sk#19, cs_order_number#20, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [3]: [cs_item_sk#17, cs_order_number#18, cs_ext_list_price#19] +Arguments: hashpartitioning(cs_item_sk#17, cs_order_number#18, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) Sort [codegen id : 5] -Input [3]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21] -Arguments: [cs_item_sk#19 ASC NULLS FIRST, cs_order_number#20 ASC NULLS FIRST], false, 0 +Input [3]: [cs_item_sk#17, cs_order_number#18, cs_ext_list_price#19] +Arguments: [cs_item_sk#17 ASC NULLS FIRST, cs_order_number#18 ASC NULLS FIRST], false, 0 (19) Scan parquet default.catalog_returns -Output [6]: [cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28, cr_returned_date_sk#29] +Output [6]: [cr_item_sk#21, cr_order_number#22, cr_refunded_cash#23, cr_reversed_charge#24, cr_store_credit#25, cr_returned_date_sk#26] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct (20) ColumnarToRow [codegen id : 6] -Input [6]: [cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28, cr_returned_date_sk#29] +Input [6]: [cr_item_sk#21, cr_order_number#22, cr_refunded_cash#23, cr_reversed_charge#24, cr_store_credit#25, cr_returned_date_sk#26] (21) Filter [codegen id : 6] -Input [6]: [cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28, cr_returned_date_sk#29] -Condition : (isnotnull(cr_item_sk#24) AND isnotnull(cr_order_number#25)) +Input [6]: [cr_item_sk#21, cr_order_number#22, cr_refunded_cash#23, cr_reversed_charge#24, cr_store_credit#25, cr_returned_date_sk#26] +Condition : (isnotnull(cr_item_sk#21) AND isnotnull(cr_order_number#22)) (22) Project [codegen id : 6] -Output [5]: [cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28] -Input [6]: [cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28, cr_returned_date_sk#29] +Output [5]: [cr_item_sk#21, cr_order_number#22, cr_refunded_cash#23, cr_reversed_charge#24, cr_store_credit#25] +Input [6]: [cr_item_sk#21, cr_order_number#22, cr_refunded_cash#23, cr_reversed_charge#24, cr_store_credit#25, cr_returned_date_sk#26] (23) Exchange -Input [5]: [cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28] -Arguments: hashpartitioning(cr_item_sk#24, cr_order_number#25, 5), ENSURE_REQUIREMENTS, [id=#30] +Input [5]: [cr_item_sk#21, cr_order_number#22, cr_refunded_cash#23, cr_reversed_charge#24, cr_store_credit#25] +Arguments: hashpartitioning(cr_item_sk#21, cr_order_number#22, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) Sort [codegen id : 7] -Input [5]: [cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28] -Arguments: [cr_item_sk#24 ASC NULLS FIRST, cr_order_number#25 ASC NULLS FIRST], false, 0 +Input [5]: [cr_item_sk#21, cr_order_number#22, cr_refunded_cash#23, cr_reversed_charge#24, cr_store_credit#25] +Arguments: [cr_item_sk#21 ASC NULLS FIRST, cr_order_number#22 ASC NULLS FIRST], false, 0 (25) SortMergeJoin [codegen id : 8] -Left keys [2]: [cs_item_sk#19, cs_order_number#20] -Right keys [2]: [cr_item_sk#24, cr_order_number#25] +Left keys [2]: [cs_item_sk#17, cs_order_number#18] +Right keys [2]: [cr_item_sk#21, cr_order_number#22] Join condition: None (26) Project [codegen id : 8] -Output [5]: [cs_item_sk#19, cs_ext_list_price#21, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28] -Input [8]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28] +Output [5]: [cs_item_sk#17, cs_ext_list_price#19, cr_refunded_cash#23, cr_reversed_charge#24, cr_store_credit#25] +Input [8]: [cs_item_sk#17, cs_order_number#18, cs_ext_list_price#19, cr_item_sk#21, cr_order_number#22, cr_refunded_cash#23, cr_reversed_charge#24, cr_store_credit#25] (27) HashAggregate [codegen id : 8] -Input [5]: [cs_item_sk#19, cs_ext_list_price#21, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28] -Keys [1]: [cs_item_sk#19] -Functions [2]: [partial_sum(UnscaledValue(cs_ext_list_price#21)), partial_sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#26 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#27 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2)))] -Aggregate Attributes [3]: [sum#31, sum#32, isEmpty#33] -Results [4]: [cs_item_sk#19, sum#34, sum#35, isEmpty#36] +Input [5]: [cs_item_sk#17, cs_ext_list_price#19, cr_refunded_cash#23, cr_reversed_charge#24, cr_store_credit#25] +Keys [1]: [cs_item_sk#17] +Functions [2]: [partial_sum(UnscaledValue(cs_ext_list_price#19)), partial_sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#23 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#24 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#25 as decimal(9,2)))), DecimalType(9,2)))] +Aggregate Attributes [3]: [sum#27, sum#28, isEmpty#29] +Results [4]: [cs_item_sk#17, sum#30, sum#31, isEmpty#32] (28) Exchange -Input [4]: [cs_item_sk#19, sum#34, sum#35, isEmpty#36] -Arguments: hashpartitioning(cs_item_sk#19, 5), ENSURE_REQUIREMENTS, [id=#37] +Input [4]: [cs_item_sk#17, sum#30, sum#31, isEmpty#32] +Arguments: hashpartitioning(cs_item_sk#17, 5), ENSURE_REQUIREMENTS, [plan_id=5] (29) HashAggregate [codegen id : 9] -Input [4]: [cs_item_sk#19, sum#34, sum#35, isEmpty#36] -Keys [1]: [cs_item_sk#19] -Functions [2]: [sum(UnscaledValue(cs_ext_list_price#21)), sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#26 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#27 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2)))] -Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#21))#38, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#26 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#27 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2)))#39] -Results [3]: [cs_item_sk#19, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#21))#38,17,2) AS sale#40, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#26 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#27 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2)))#39 AS refund#41] +Input [4]: [cs_item_sk#17, sum#30, sum#31, isEmpty#32] +Keys [1]: [cs_item_sk#17] +Functions [2]: [sum(UnscaledValue(cs_ext_list_price#19)), sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#23 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#24 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#25 as decimal(9,2)))), DecimalType(9,2)))] +Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#19))#33, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#23 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#24 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#25 as decimal(9,2)))), DecimalType(9,2)))#34] +Results [3]: [cs_item_sk#17, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#19))#33,17,2) AS sale#35, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#23 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#24 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#25 as decimal(9,2)))), DecimalType(9,2)))#34 AS refund#36] (30) Filter [codegen id : 9] -Input [3]: [cs_item_sk#19, sale#40, refund#41] -Condition : (isnotnull(sale#40) AND (cast(sale#40 as decimal(21,2)) > CheckOverflow((2.00 * promote_precision(refund#41)), DecimalType(21,2)))) +Input [3]: [cs_item_sk#17, sale#35, refund#36] +Condition : (isnotnull(sale#35) AND (cast(sale#35 as decimal(21,2)) > CheckOverflow((2.00 * promote_precision(refund#36)), DecimalType(21,2)))) (31) Project [codegen id : 9] -Output [1]: [cs_item_sk#19] -Input [3]: [cs_item_sk#19, sale#40, refund#41] +Output [1]: [cs_item_sk#17] +Input [3]: [cs_item_sk#17, sale#35, refund#36] (32) Sort [codegen id : 9] -Input [1]: [cs_item_sk#19] -Arguments: [cs_item_sk#19 ASC NULLS FIRST], false, 0 +Input [1]: [cs_item_sk#17] +Arguments: [cs_item_sk#17 ASC NULLS FIRST], false, 0 (33) SortMergeJoin [codegen id : 25] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [cs_item_sk#19] +Right keys [1]: [cs_item_sk#17] Join condition: None (34) Project [codegen id : 25] Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12] -Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, cs_item_sk#19] +Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, cs_item_sk#17] (35) ReusedExchange [Reuses operator id: 187] -Output [2]: [d_date_sk#42, d_year#43] +Output [2]: [d_date_sk#37, d_year#38] (36) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_sold_date_sk#12] -Right keys [1]: [d_date_sk#42] +Right keys [1]: [d_date_sk#37] Join condition: None (37) Project [codegen id : 25] -Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43] -Input [13]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, d_date_sk#42, d_year#43] +Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38] +Input [13]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, d_date_sk#37, d_year#38] (38) Scan parquet default.store -Output [3]: [s_store_sk#44, s_store_name#45, s_zip#46] +Output [3]: [s_store_sk#39, s_store_name#40, s_zip#41] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_name), IsNotNull(s_zip)] ReadSchema: struct (39) ColumnarToRow [codegen id : 11] -Input [3]: [s_store_sk#44, s_store_name#45, s_zip#46] +Input [3]: [s_store_sk#39, s_store_name#40, s_zip#41] (40) Filter [codegen id : 11] -Input [3]: [s_store_sk#44, s_store_name#45, s_zip#46] -Condition : ((isnotnull(s_store_sk#44) AND isnotnull(s_store_name#45)) AND isnotnull(s_zip#46)) +Input [3]: [s_store_sk#39, s_store_name#40, s_zip#41] +Condition : ((isnotnull(s_store_sk#39) AND isnotnull(s_store_name#40)) AND isnotnull(s_zip#41)) (41) BroadcastExchange -Input [3]: [s_store_sk#44, s_store_name#45, s_zip#46] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#47] +Input [3]: [s_store_sk#39, s_store_name#40, s_zip#41] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] (42) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_store_sk#6] -Right keys [1]: [s_store_sk#44] +Right keys [1]: [s_store_sk#39] Join condition: None (43) Project [codegen id : 25] -Output [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46] -Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_sk#44, s_store_name#45, s_zip#46] +Output [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41] +Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_sk#39, s_store_name#40, s_zip#41] (44) Scan parquet default.customer -Output [6]: [c_customer_sk#48, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, c_first_sales_date_sk#53] +Output [6]: [c_customer_sk#42, c_current_cdemo_sk#43, c_current_hdemo_sk#44, c_current_addr_sk#45, c_first_shipto_date_sk#46, c_first_sales_date_sk#47] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_first_sales_date_sk), IsNotNull(c_first_shipto_date_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_hdemo_sk), IsNotNull(c_current_addr_sk)] ReadSchema: struct (45) ColumnarToRow [codegen id : 12] -Input [6]: [c_customer_sk#48, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, c_first_sales_date_sk#53] +Input [6]: [c_customer_sk#42, c_current_cdemo_sk#43, c_current_hdemo_sk#44, c_current_addr_sk#45, c_first_shipto_date_sk#46, c_first_sales_date_sk#47] (46) Filter [codegen id : 12] -Input [6]: [c_customer_sk#48, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, c_first_sales_date_sk#53] -Condition : (((((isnotnull(c_customer_sk#48) AND isnotnull(c_first_sales_date_sk#53)) AND isnotnull(c_first_shipto_date_sk#52)) AND isnotnull(c_current_cdemo_sk#49)) AND isnotnull(c_current_hdemo_sk#50)) AND isnotnull(c_current_addr_sk#51)) +Input [6]: [c_customer_sk#42, c_current_cdemo_sk#43, c_current_hdemo_sk#44, c_current_addr_sk#45, c_first_shipto_date_sk#46, c_first_sales_date_sk#47] +Condition : (((((isnotnull(c_customer_sk#42) AND isnotnull(c_first_sales_date_sk#47)) AND isnotnull(c_first_shipto_date_sk#46)) AND isnotnull(c_current_cdemo_sk#43)) AND isnotnull(c_current_hdemo_sk#44)) AND isnotnull(c_current_addr_sk#45)) (47) BroadcastExchange -Input [6]: [c_customer_sk#48, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, c_first_sales_date_sk#53] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#54] +Input [6]: [c_customer_sk#42, c_current_cdemo_sk#43, c_current_hdemo_sk#44, c_current_addr_sk#45, c_first_shipto_date_sk#46, c_first_sales_date_sk#47] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (48) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_customer_sk#2] -Right keys [1]: [c_customer_sk#48] +Right keys [1]: [c_customer_sk#42] Join condition: None (49) Project [codegen id : 25] -Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, c_first_sales_date_sk#53] -Input [18]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_customer_sk#48, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, c_first_sales_date_sk#53] +Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_cdemo_sk#43, c_current_hdemo_sk#44, c_current_addr_sk#45, c_first_shipto_date_sk#46, c_first_sales_date_sk#47] +Input [18]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_customer_sk#42, c_current_cdemo_sk#43, c_current_hdemo_sk#44, c_current_addr_sk#45, c_first_shipto_date_sk#46, c_first_sales_date_sk#47] (50) Scan parquet default.date_dim -Output [2]: [d_date_sk#55, d_year#56] +Output [2]: [d_date_sk#48, d_year#49] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 13] -Input [2]: [d_date_sk#55, d_year#56] +Input [2]: [d_date_sk#48, d_year#49] (52) Filter [codegen id : 13] -Input [2]: [d_date_sk#55, d_year#56] -Condition : isnotnull(d_date_sk#55) +Input [2]: [d_date_sk#48, d_year#49] +Condition : isnotnull(d_date_sk#48) (53) BroadcastExchange -Input [2]: [d_date_sk#55, d_year#56] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#57] +Input [2]: [d_date_sk#48, d_year#49] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] (54) BroadcastHashJoin [codegen id : 25] -Left keys [1]: [c_first_sales_date_sk#53] -Right keys [1]: [d_date_sk#55] +Left keys [1]: [c_first_sales_date_sk#47] +Right keys [1]: [d_date_sk#48] Join condition: None (55) Project [codegen id : 25] -Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, d_year#56] -Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, c_first_sales_date_sk#53, d_date_sk#55, d_year#56] +Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_cdemo_sk#43, c_current_hdemo_sk#44, c_current_addr_sk#45, c_first_shipto_date_sk#46, d_year#49] +Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_cdemo_sk#43, c_current_hdemo_sk#44, c_current_addr_sk#45, c_first_shipto_date_sk#46, c_first_sales_date_sk#47, d_date_sk#48, d_year#49] (56) ReusedExchange [Reuses operator id: 53] -Output [2]: [d_date_sk#58, d_year#59] +Output [2]: [d_date_sk#50, d_year#51] (57) BroadcastHashJoin [codegen id : 25] -Left keys [1]: [c_first_shipto_date_sk#52] -Right keys [1]: [d_date_sk#58] +Left keys [1]: [c_first_shipto_date_sk#46] +Right keys [1]: [d_date_sk#50] Join condition: None (58) Project [codegen id : 25] -Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59] -Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, d_year#56, d_date_sk#58, d_year#59] +Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_cdemo_sk#43, c_current_hdemo_sk#44, c_current_addr_sk#45, d_year#49, d_year#51] +Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_cdemo_sk#43, c_current_hdemo_sk#44, c_current_addr_sk#45, c_first_shipto_date_sk#46, d_year#49, d_date_sk#50, d_year#51] (59) Scan parquet default.customer_demographics -Output [2]: [cd_demo_sk#60, cd_marital_status#61] +Output [2]: [cd_demo_sk#52, cd_marital_status#53] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status)] ReadSchema: struct (60) ColumnarToRow [codegen id : 15] -Input [2]: [cd_demo_sk#60, cd_marital_status#61] +Input [2]: [cd_demo_sk#52, cd_marital_status#53] (61) Filter [codegen id : 15] -Input [2]: [cd_demo_sk#60, cd_marital_status#61] -Condition : (isnotnull(cd_demo_sk#60) AND isnotnull(cd_marital_status#61)) +Input [2]: [cd_demo_sk#52, cd_marital_status#53] +Condition : (isnotnull(cd_demo_sk#52) AND isnotnull(cd_marital_status#53)) (62) BroadcastExchange -Input [2]: [cd_demo_sk#60, cd_marital_status#61] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#62] +Input [2]: [cd_demo_sk#52, cd_marital_status#53] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] (63) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_cdemo_sk#3] -Right keys [1]: [cd_demo_sk#60] +Right keys [1]: [cd_demo_sk#52] Join condition: None (64) Project [codegen id : 25] -Output [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59, cd_marital_status#61] -Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59, cd_demo_sk#60, cd_marital_status#61] +Output [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_cdemo_sk#43, c_current_hdemo_sk#44, c_current_addr_sk#45, d_year#49, d_year#51, cd_marital_status#53] +Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_cdemo_sk#43, c_current_hdemo_sk#44, c_current_addr_sk#45, d_year#49, d_year#51, cd_demo_sk#52, cd_marital_status#53] (65) ReusedExchange [Reuses operator id: 62] -Output [2]: [cd_demo_sk#63, cd_marital_status#64] +Output [2]: [cd_demo_sk#54, cd_marital_status#55] (66) BroadcastHashJoin [codegen id : 25] -Left keys [1]: [c_current_cdemo_sk#49] -Right keys [1]: [cd_demo_sk#63] -Join condition: NOT (cd_marital_status#61 = cd_marital_status#64) +Left keys [1]: [c_current_cdemo_sk#43] +Right keys [1]: [cd_demo_sk#54] +Join condition: NOT (cd_marital_status#53 = cd_marital_status#55) (67) Project [codegen id : 25] -Output [14]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59] -Input [18]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59, cd_marital_status#61, cd_demo_sk#63, cd_marital_status#64] +Output [14]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_hdemo_sk#44, c_current_addr_sk#45, d_year#49, d_year#51] +Input [18]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_cdemo_sk#43, c_current_hdemo_sk#44, c_current_addr_sk#45, d_year#49, d_year#51, cd_marital_status#53, cd_demo_sk#54, cd_marital_status#55] (68) Scan parquet default.promotion -Output [1]: [p_promo_sk#65] +Output [1]: [p_promo_sk#56] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_promo_sk)] ReadSchema: struct (69) ColumnarToRow [codegen id : 17] -Input [1]: [p_promo_sk#65] +Input [1]: [p_promo_sk#56] (70) Filter [codegen id : 17] -Input [1]: [p_promo_sk#65] -Condition : isnotnull(p_promo_sk#65) +Input [1]: [p_promo_sk#56] +Condition : isnotnull(p_promo_sk#56) (71) BroadcastExchange -Input [1]: [p_promo_sk#65] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#66] +Input [1]: [p_promo_sk#56] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=10] (72) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_promo_sk#7] -Right keys [1]: [p_promo_sk#65] +Right keys [1]: [p_promo_sk#56] Join condition: None (73) Project [codegen id : 25] -Output [13]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59] -Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59, p_promo_sk#65] +Output [13]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_hdemo_sk#44, c_current_addr_sk#45, d_year#49, d_year#51] +Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_hdemo_sk#44, c_current_addr_sk#45, d_year#49, d_year#51, p_promo_sk#56] (74) Scan parquet default.household_demographics -Output [2]: [hd_demo_sk#67, hd_income_band_sk#68] +Output [2]: [hd_demo_sk#57, hd_income_band_sk#58] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_demo_sk), IsNotNull(hd_income_band_sk)] ReadSchema: struct (75) ColumnarToRow [codegen id : 18] -Input [2]: [hd_demo_sk#67, hd_income_band_sk#68] +Input [2]: [hd_demo_sk#57, hd_income_band_sk#58] (76) Filter [codegen id : 18] -Input [2]: [hd_demo_sk#67, hd_income_band_sk#68] -Condition : (isnotnull(hd_demo_sk#67) AND isnotnull(hd_income_band_sk#68)) +Input [2]: [hd_demo_sk#57, hd_income_band_sk#58] +Condition : (isnotnull(hd_demo_sk#57) AND isnotnull(hd_income_band_sk#58)) (77) BroadcastExchange -Input [2]: [hd_demo_sk#67, hd_income_band_sk#68] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#69] +Input [2]: [hd_demo_sk#57, hd_income_band_sk#58] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=11] (78) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_hdemo_sk#4] -Right keys [1]: [hd_demo_sk#67] +Right keys [1]: [hd_demo_sk#57] Join condition: None (79) Project [codegen id : 25] -Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59, hd_income_band_sk#68] -Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59, hd_demo_sk#67, hd_income_band_sk#68] +Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_hdemo_sk#44, c_current_addr_sk#45, d_year#49, d_year#51, hd_income_band_sk#58] +Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_hdemo_sk#44, c_current_addr_sk#45, d_year#49, d_year#51, hd_demo_sk#57, hd_income_band_sk#58] (80) ReusedExchange [Reuses operator id: 77] -Output [2]: [hd_demo_sk#70, hd_income_band_sk#71] +Output [2]: [hd_demo_sk#59, hd_income_band_sk#60] (81) BroadcastHashJoin [codegen id : 25] -Left keys [1]: [c_current_hdemo_sk#50] -Right keys [1]: [hd_demo_sk#70] +Left keys [1]: [c_current_hdemo_sk#44] +Right keys [1]: [hd_demo_sk#59] Join condition: None (82) Project [codegen id : 25] -Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_addr_sk#51, d_year#56, d_year#59, hd_income_band_sk#68, hd_income_band_sk#71] -Input [15]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59, hd_income_band_sk#68, hd_demo_sk#70, hd_income_band_sk#71] +Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_addr_sk#45, d_year#49, d_year#51, hd_income_band_sk#58, hd_income_band_sk#60] +Input [15]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_hdemo_sk#44, c_current_addr_sk#45, d_year#49, d_year#51, hd_income_band_sk#58, hd_demo_sk#59, hd_income_band_sk#60] (83) Scan parquet default.customer_address -Output [5]: [ca_address_sk#72, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76] +Output [5]: [ca_address_sk#61, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_address] PushedFilters: [IsNotNull(ca_address_sk)] ReadSchema: struct (84) ColumnarToRow [codegen id : 20] -Input [5]: [ca_address_sk#72, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76] +Input [5]: [ca_address_sk#61, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65] (85) Filter [codegen id : 20] -Input [5]: [ca_address_sk#72, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76] -Condition : isnotnull(ca_address_sk#72) +Input [5]: [ca_address_sk#61, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65] +Condition : isnotnull(ca_address_sk#61) (86) BroadcastExchange -Input [5]: [ca_address_sk#72, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#77] +Input [5]: [ca_address_sk#61, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=12] (87) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_addr_sk#5] -Right keys [1]: [ca_address_sk#72] +Right keys [1]: [ca_address_sk#61] Join condition: None (88) Project [codegen id : 25] -Output [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_addr_sk#51, d_year#56, d_year#59, hd_income_band_sk#68, hd_income_band_sk#71, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76] -Input [18]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_addr_sk#51, d_year#56, d_year#59, hd_income_band_sk#68, hd_income_band_sk#71, ca_address_sk#72, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76] +Output [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_addr_sk#45, d_year#49, d_year#51, hd_income_band_sk#58, hd_income_band_sk#60, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65] +Input [18]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_addr_sk#45, d_year#49, d_year#51, hd_income_band_sk#58, hd_income_band_sk#60, ca_address_sk#61, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65] (89) ReusedExchange [Reuses operator id: 86] -Output [5]: [ca_address_sk#78, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82] +Output [5]: [ca_address_sk#66, ca_street_number#67, ca_street_name#68, ca_city#69, ca_zip#70] (90) BroadcastHashJoin [codegen id : 25] -Left keys [1]: [c_current_addr_sk#51] -Right keys [1]: [ca_address_sk#78] +Left keys [1]: [c_current_addr_sk#45] +Right keys [1]: [ca_address_sk#66] Join condition: None (91) Project [codegen id : 25] -Output [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, d_year#56, d_year#59, hd_income_band_sk#68, hd_income_band_sk#71, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82] -Input [21]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_addr_sk#51, d_year#56, d_year#59, hd_income_band_sk#68, hd_income_band_sk#71, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_address_sk#78, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82] +Output [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, d_year#49, d_year#51, hd_income_band_sk#58, hd_income_band_sk#60, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65, ca_street_number#67, ca_street_name#68, ca_city#69, ca_zip#70] +Input [21]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, c_current_addr_sk#45, d_year#49, d_year#51, hd_income_band_sk#58, hd_income_band_sk#60, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65, ca_address_sk#66, ca_street_number#67, ca_street_name#68, ca_city#69, ca_zip#70] (92) Scan parquet default.income_band -Output [1]: [ib_income_band_sk#83] +Output [1]: [ib_income_band_sk#71] Batched: true Location [not included in comparison]/{warehouse_dir}/income_band] PushedFilters: [IsNotNull(ib_income_band_sk)] ReadSchema: struct (93) ColumnarToRow [codegen id : 22] -Input [1]: [ib_income_band_sk#83] +Input [1]: [ib_income_band_sk#71] (94) Filter [codegen id : 22] -Input [1]: [ib_income_band_sk#83] -Condition : isnotnull(ib_income_band_sk#83) +Input [1]: [ib_income_band_sk#71] +Condition : isnotnull(ib_income_band_sk#71) (95) BroadcastExchange -Input [1]: [ib_income_band_sk#83] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#84] +Input [1]: [ib_income_band_sk#71] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=13] (96) BroadcastHashJoin [codegen id : 25] -Left keys [1]: [hd_income_band_sk#68] -Right keys [1]: [ib_income_band_sk#83] +Left keys [1]: [hd_income_band_sk#58] +Right keys [1]: [ib_income_band_sk#71] Join condition: None (97) Project [codegen id : 25] -Output [18]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, d_year#56, d_year#59, hd_income_band_sk#71, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82] -Input [20]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, d_year#56, d_year#59, hd_income_band_sk#68, hd_income_band_sk#71, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ib_income_band_sk#83] +Output [18]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, d_year#49, d_year#51, hd_income_band_sk#60, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65, ca_street_number#67, ca_street_name#68, ca_city#69, ca_zip#70] +Input [20]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, d_year#49, d_year#51, hd_income_band_sk#58, hd_income_band_sk#60, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65, ca_street_number#67, ca_street_name#68, ca_city#69, ca_zip#70, ib_income_band_sk#71] (98) ReusedExchange [Reuses operator id: 95] -Output [1]: [ib_income_band_sk#85] +Output [1]: [ib_income_band_sk#72] (99) BroadcastHashJoin [codegen id : 25] -Left keys [1]: [hd_income_band_sk#71] -Right keys [1]: [ib_income_band_sk#85] +Left keys [1]: [hd_income_band_sk#60] +Right keys [1]: [ib_income_band_sk#72] Join condition: None (100) Project [codegen id : 25] -Output [17]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, d_year#56, d_year#59, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82] -Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, d_year#56, d_year#59, hd_income_band_sk#71, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ib_income_band_sk#85] +Output [17]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, d_year#49, d_year#51, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65, ca_street_number#67, ca_street_name#68, ca_city#69, ca_zip#70] +Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, d_year#49, d_year#51, hd_income_band_sk#60, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65, ca_street_number#67, ca_street_name#68, ca_city#69, ca_zip#70, ib_income_band_sk#72] (101) Scan parquet default.item -Output [4]: [i_item_sk#86, i_current_price#87, i_color#88, i_product_name#89] +Output [4]: [i_item_sk#73, i_current_price#74, i_color#75, i_product_name#76] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), In(i_color, [burlywood ,floral ,indian ,medium ,purple ,spring ]), GreaterThanOrEqual(i_current_price,64.00), LessThanOrEqual(i_current_price,74.00), GreaterThanOrEqual(i_current_price,65.00), LessThanOrEqual(i_current_price,79.00), IsNotNull(i_item_sk)] ReadSchema: struct (102) ColumnarToRow [codegen id : 24] -Input [4]: [i_item_sk#86, i_current_price#87, i_color#88, i_product_name#89] +Input [4]: [i_item_sk#73, i_current_price#74, i_color#75, i_product_name#76] (103) Filter [codegen id : 24] -Input [4]: [i_item_sk#86, i_current_price#87, i_color#88, i_product_name#89] -Condition : ((((((isnotnull(i_current_price#87) AND i_color#88 IN (purple ,burlywood ,indian ,spring ,floral ,medium )) AND (i_current_price#87 >= 64.00)) AND (i_current_price#87 <= 74.00)) AND (i_current_price#87 >= 65.00)) AND (i_current_price#87 <= 79.00)) AND isnotnull(i_item_sk#86)) +Input [4]: [i_item_sk#73, i_current_price#74, i_color#75, i_product_name#76] +Condition : ((((((isnotnull(i_current_price#74) AND i_color#75 IN (purple ,burlywood ,indian ,spring ,floral ,medium )) AND (i_current_price#74 >= 64.00)) AND (i_current_price#74 <= 74.00)) AND (i_current_price#74 >= 65.00)) AND (i_current_price#74 <= 79.00)) AND isnotnull(i_item_sk#73)) (104) Project [codegen id : 24] -Output [2]: [i_item_sk#86, i_product_name#89] -Input [4]: [i_item_sk#86, i_current_price#87, i_color#88, i_product_name#89] +Output [2]: [i_item_sk#73, i_product_name#76] +Input [4]: [i_item_sk#73, i_current_price#74, i_color#75, i_product_name#76] (105) BroadcastExchange -Input [2]: [i_item_sk#86, i_product_name#89] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#90] +Input [2]: [i_item_sk#73, i_product_name#76] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=14] (106) BroadcastHashJoin [codegen id : 25] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#86] +Right keys [1]: [i_item_sk#73] Join condition: None (107) Project [codegen id : 25] -Output [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, d_year#56, d_year#59, s_store_name#45, s_zip#46, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, i_item_sk#86, i_product_name#89] -Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, d_year#56, d_year#59, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, i_item_sk#86, i_product_name#89] +Output [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, d_year#49, d_year#51, s_store_name#40, s_zip#41, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65, ca_street_number#67, ca_street_name#68, ca_city#69, ca_zip#70, i_item_sk#73, i_product_name#76] +Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, s_store_name#40, s_zip#41, d_year#49, d_year#51, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65, ca_street_number#67, ca_street_name#68, ca_city#69, ca_zip#70, i_item_sk#73, i_product_name#76] (108) HashAggregate [codegen id : 25] -Input [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, d_year#56, d_year#59, s_store_name#45, s_zip#46, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, i_item_sk#86, i_product_name#89] -Keys [15]: [i_product_name#89, i_item_sk#86, s_store_name#45, s_zip#46, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, d_year#43, d_year#56, d_year#59] +Input [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#38, d_year#49, d_year#51, s_store_name#40, s_zip#41, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65, ca_street_number#67, ca_street_name#68, ca_city#69, ca_zip#70, i_item_sk#73, i_product_name#76] +Keys [15]: [i_product_name#76, i_item_sk#73, s_store_name#40, s_zip#41, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65, ca_street_number#67, ca_street_name#68, ca_city#69, ca_zip#70, d_year#38, d_year#49, d_year#51] Functions [4]: [partial_count(1), partial_sum(UnscaledValue(ss_wholesale_cost#9)), partial_sum(UnscaledValue(ss_list_price#10)), partial_sum(UnscaledValue(ss_coupon_amt#11))] -Aggregate Attributes [4]: [count#91, sum#92, sum#93, sum#94] -Results [19]: [i_product_name#89, i_item_sk#86, s_store_name#45, s_zip#46, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, d_year#43, d_year#56, d_year#59, count#95, sum#96, sum#97, sum#98] +Aggregate Attributes [4]: [count#77, sum#78, sum#79, sum#80] +Results [19]: [i_product_name#76, i_item_sk#73, s_store_name#40, s_zip#41, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65, ca_street_number#67, ca_street_name#68, ca_city#69, ca_zip#70, d_year#38, d_year#49, d_year#51, count#81, sum#82, sum#83, sum#84] (109) HashAggregate [codegen id : 25] -Input [19]: [i_product_name#89, i_item_sk#86, s_store_name#45, s_zip#46, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, d_year#43, d_year#56, d_year#59, count#95, sum#96, sum#97, sum#98] -Keys [15]: [i_product_name#89, i_item_sk#86, s_store_name#45, s_zip#46, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, d_year#43, d_year#56, d_year#59] +Input [19]: [i_product_name#76, i_item_sk#73, s_store_name#40, s_zip#41, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65, ca_street_number#67, ca_street_name#68, ca_city#69, ca_zip#70, d_year#38, d_year#49, d_year#51, count#81, sum#82, sum#83, sum#84] +Keys [15]: [i_product_name#76, i_item_sk#73, s_store_name#40, s_zip#41, ca_street_number#62, ca_street_name#63, ca_city#64, ca_zip#65, ca_street_number#67, ca_street_name#68, ca_city#69, ca_zip#70, d_year#38, d_year#49, d_year#51] Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#9)), sum(UnscaledValue(ss_list_price#10)), sum(UnscaledValue(ss_coupon_amt#11))] -Aggregate Attributes [4]: [count(1)#99, sum(UnscaledValue(ss_wholesale_cost#9))#100, sum(UnscaledValue(ss_list_price#10))#101, sum(UnscaledValue(ss_coupon_amt#11))#102] -Results [17]: [i_product_name#89 AS product_name#103, i_item_sk#86 AS item_sk#104, s_store_name#45 AS store_name#105, s_zip#46 AS store_zip#106, ca_street_number#73 AS b_street_number#107, ca_street_name#74 AS b_streen_name#108, ca_city#75 AS b_city#109, ca_zip#76 AS b_zip#110, ca_street_number#79 AS c_street_number#111, ca_street_name#80 AS c_street_name#112, ca_city#81 AS c_city#113, ca_zip#82 AS c_zip#114, d_year#43 AS syear#115, count(1)#99 AS cnt#116, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#9))#100,17,2) AS s1#117, MakeDecimal(sum(UnscaledValue(ss_list_price#10))#101,17,2) AS s2#118, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#11))#102,17,2) AS s3#119] +Aggregate Attributes [4]: [count(1)#85, sum(UnscaledValue(ss_wholesale_cost#9))#86, sum(UnscaledValue(ss_list_price#10))#87, sum(UnscaledValue(ss_coupon_amt#11))#88] +Results [17]: [i_product_name#76 AS product_name#89, i_item_sk#73 AS item_sk#90, s_store_name#40 AS store_name#91, s_zip#41 AS store_zip#92, ca_street_number#62 AS b_street_number#93, ca_street_name#63 AS b_streen_name#94, ca_city#64 AS b_city#95, ca_zip#65 AS b_zip#96, ca_street_number#67 AS c_street_number#97, ca_street_name#68 AS c_street_name#98, ca_city#69 AS c_city#99, ca_zip#70 AS c_zip#100, d_year#38 AS syear#101, count(1)#85 AS cnt#102, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#9))#86,17,2) AS s1#103, MakeDecimal(sum(UnscaledValue(ss_list_price#10))#87,17,2) AS s2#104, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#11))#88,17,2) AS s3#105] (110) Exchange -Input [17]: [product_name#103, item_sk#104, store_name#105, store_zip#106, b_street_number#107, b_streen_name#108, b_city#109, b_zip#110, c_street_number#111, c_street_name#112, c_city#113, c_zip#114, syear#115, cnt#116, s1#117, s2#118, s3#119] -Arguments: hashpartitioning(item_sk#104, store_name#105, store_zip#106, 5), ENSURE_REQUIREMENTS, [id=#120] +Input [17]: [product_name#89, item_sk#90, store_name#91, store_zip#92, b_street_number#93, b_streen_name#94, b_city#95, b_zip#96, c_street_number#97, c_street_name#98, c_city#99, c_zip#100, syear#101, cnt#102, s1#103, s2#104, s3#105] +Arguments: hashpartitioning(item_sk#90, store_name#91, store_zip#92, 5), ENSURE_REQUIREMENTS, [plan_id=15] (111) Sort [codegen id : 26] -Input [17]: [product_name#103, item_sk#104, store_name#105, store_zip#106, b_street_number#107, b_streen_name#108, b_city#109, b_zip#110, c_street_number#111, c_street_name#112, c_city#113, c_zip#114, syear#115, cnt#116, s1#117, s2#118, s3#119] -Arguments: [item_sk#104 ASC NULLS FIRST, store_name#105 ASC NULLS FIRST, store_zip#106 ASC NULLS FIRST], false, 0 +Input [17]: [product_name#89, item_sk#90, store_name#91, store_zip#92, b_street_number#93, b_streen_name#94, b_city#95, b_zip#96, c_street_number#97, c_street_name#98, c_city#99, c_zip#100, syear#101, cnt#102, s1#103, s2#104, s3#105] +Arguments: [item_sk#90 ASC NULLS FIRST, store_name#91 ASC NULLS FIRST, store_zip#92 ASC NULLS FIRST], false, 0 (112) Scan parquet default.store_sales -Output [12]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_store_sk#126, ss_promo_sk#127, ss_ticket_number#128, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, ss_sold_date_sk#132] +Output [12]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_store_sk#111, ss_promo_sk#112, ss_ticket_number#113, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, ss_sold_date_sk#117] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#132), dynamicpruningexpression(ss_sold_date_sk#132 IN dynamicpruning#133)] +PartitionFilters: [isnotnull(ss_sold_date_sk#117), dynamicpruningexpression(ss_sold_date_sk#117 IN dynamicpruning#118)] PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_ticket_number), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_cdemo_sk), IsNotNull(ss_promo_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk)] ReadSchema: struct (113) ColumnarToRow [codegen id : 27] -Input [12]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_store_sk#126, ss_promo_sk#127, ss_ticket_number#128, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, ss_sold_date_sk#132] +Input [12]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_store_sk#111, ss_promo_sk#112, ss_ticket_number#113, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, ss_sold_date_sk#117] (114) Filter [codegen id : 27] -Input [12]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_store_sk#126, ss_promo_sk#127, ss_ticket_number#128, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, ss_sold_date_sk#132] -Condition : (((((((isnotnull(ss_item_sk#121) AND isnotnull(ss_ticket_number#128)) AND isnotnull(ss_store_sk#126)) AND isnotnull(ss_customer_sk#122)) AND isnotnull(ss_cdemo_sk#123)) AND isnotnull(ss_promo_sk#127)) AND isnotnull(ss_hdemo_sk#124)) AND isnotnull(ss_addr_sk#125)) +Input [12]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_store_sk#111, ss_promo_sk#112, ss_ticket_number#113, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, ss_sold_date_sk#117] +Condition : (((((((isnotnull(ss_item_sk#106) AND isnotnull(ss_ticket_number#113)) AND isnotnull(ss_store_sk#111)) AND isnotnull(ss_customer_sk#107)) AND isnotnull(ss_cdemo_sk#108)) AND isnotnull(ss_promo_sk#112)) AND isnotnull(ss_hdemo_sk#109)) AND isnotnull(ss_addr_sk#110)) (115) BroadcastExchange -Input [12]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_store_sk#126, ss_promo_sk#127, ss_ticket_number#128, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, ss_sold_date_sk#132] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, false] as bigint), 32) | (cast(input[7, int, false] as bigint) & 4294967295))),false), [id=#134] +Input [12]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_store_sk#111, ss_promo_sk#112, ss_ticket_number#113, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, ss_sold_date_sk#117] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, false] as bigint), 32) | (cast(input[7, int, false] as bigint) & 4294967295))),false), [plan_id=16] (116) Scan parquet default.store_returns -Output [3]: [sr_item_sk#135, sr_ticket_number#136, sr_returned_date_sk#137] +Output [3]: [sr_item_sk#119, sr_ticket_number#120, sr_returned_date_sk#121] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct (117) ColumnarToRow -Input [3]: [sr_item_sk#135, sr_ticket_number#136, sr_returned_date_sk#137] +Input [3]: [sr_item_sk#119, sr_ticket_number#120, sr_returned_date_sk#121] (118) Filter -Input [3]: [sr_item_sk#135, sr_ticket_number#136, sr_returned_date_sk#137] -Condition : (isnotnull(sr_item_sk#135) AND isnotnull(sr_ticket_number#136)) +Input [3]: [sr_item_sk#119, sr_ticket_number#120, sr_returned_date_sk#121] +Condition : (isnotnull(sr_item_sk#119) AND isnotnull(sr_ticket_number#120)) (119) Project -Output [2]: [sr_item_sk#135, sr_ticket_number#136] -Input [3]: [sr_item_sk#135, sr_ticket_number#136, sr_returned_date_sk#137] +Output [2]: [sr_item_sk#119, sr_ticket_number#120] +Input [3]: [sr_item_sk#119, sr_ticket_number#120, sr_returned_date_sk#121] (120) BroadcastHashJoin [codegen id : 28] -Left keys [2]: [ss_item_sk#121, ss_ticket_number#128] -Right keys [2]: [sr_item_sk#135, sr_ticket_number#136] +Left keys [2]: [ss_item_sk#106, ss_ticket_number#113] +Right keys [2]: [sr_item_sk#119, sr_ticket_number#120] Join condition: None (121) Project [codegen id : 28] -Output [11]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_store_sk#126, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, ss_sold_date_sk#132] -Input [14]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_store_sk#126, ss_promo_sk#127, ss_ticket_number#128, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, ss_sold_date_sk#132, sr_item_sk#135, sr_ticket_number#136] +Output [11]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_store_sk#111, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, ss_sold_date_sk#117] +Input [14]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_store_sk#111, ss_promo_sk#112, ss_ticket_number#113, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, ss_sold_date_sk#117, sr_item_sk#119, sr_ticket_number#120] (122) Exchange -Input [11]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_store_sk#126, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, ss_sold_date_sk#132] -Arguments: hashpartitioning(ss_item_sk#121, 5), ENSURE_REQUIREMENTS, [id=#138] +Input [11]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_store_sk#111, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, ss_sold_date_sk#117] +Arguments: hashpartitioning(ss_item_sk#106, 5), ENSURE_REQUIREMENTS, [plan_id=17] (123) Sort [codegen id : 29] -Input [11]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_store_sk#126, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, ss_sold_date_sk#132] -Arguments: [ss_item_sk#121 ASC NULLS FIRST], false, 0 +Input [11]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_store_sk#111, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, ss_sold_date_sk#117] +Arguments: [ss_item_sk#106 ASC NULLS FIRST], false, 0 (124) ReusedExchange [Reuses operator id: 28] -Output [4]: [cs_item_sk#139, sum#140, sum#141, isEmpty#142] +Output [4]: [cs_item_sk#122, sum#123, sum#124, isEmpty#125] (125) HashAggregate [codegen id : 35] -Input [4]: [cs_item_sk#139, sum#140, sum#141, isEmpty#142] -Keys [1]: [cs_item_sk#139] -Functions [2]: [sum(UnscaledValue(cs_ext_list_price#143)), sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#144 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#145 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#146 as decimal(9,2)))), DecimalType(9,2)))] -Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#143))#38, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#144 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#145 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#146 as decimal(9,2)))), DecimalType(9,2)))#39] -Results [3]: [cs_item_sk#139, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#143))#38,17,2) AS sale#40, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#144 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#145 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#146 as decimal(9,2)))), DecimalType(9,2)))#39 AS refund#41] +Input [4]: [cs_item_sk#122, sum#123, sum#124, isEmpty#125] +Keys [1]: [cs_item_sk#122] +Functions [2]: [sum(UnscaledValue(cs_ext_list_price#126)), sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#127 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#128 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#129 as decimal(9,2)))), DecimalType(9,2)))] +Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#126))#33, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#127 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#128 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#129 as decimal(9,2)))), DecimalType(9,2)))#34] +Results [3]: [cs_item_sk#122, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#126))#33,17,2) AS sale#35, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#127 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#128 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#129 as decimal(9,2)))), DecimalType(9,2)))#34 AS refund#36] (126) Filter [codegen id : 35] -Input [3]: [cs_item_sk#139, sale#40, refund#41] -Condition : (isnotnull(sale#40) AND (cast(sale#40 as decimal(21,2)) > CheckOverflow((2.00 * promote_precision(refund#41)), DecimalType(21,2)))) +Input [3]: [cs_item_sk#122, sale#35, refund#36] +Condition : (isnotnull(sale#35) AND (cast(sale#35 as decimal(21,2)) > CheckOverflow((2.00 * promote_precision(refund#36)), DecimalType(21,2)))) (127) Project [codegen id : 35] -Output [1]: [cs_item_sk#139] -Input [3]: [cs_item_sk#139, sale#40, refund#41] +Output [1]: [cs_item_sk#122] +Input [3]: [cs_item_sk#122, sale#35, refund#36] (128) Sort [codegen id : 35] -Input [1]: [cs_item_sk#139] -Arguments: [cs_item_sk#139 ASC NULLS FIRST], false, 0 +Input [1]: [cs_item_sk#122] +Arguments: [cs_item_sk#122 ASC NULLS FIRST], false, 0 (129) SortMergeJoin [codegen id : 51] -Left keys [1]: [ss_item_sk#121] -Right keys [1]: [cs_item_sk#139] +Left keys [1]: [ss_item_sk#106] +Right keys [1]: [cs_item_sk#122] Join condition: None (130) Project [codegen id : 51] -Output [11]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_store_sk#126, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, ss_sold_date_sk#132] -Input [12]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_store_sk#126, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, ss_sold_date_sk#132, cs_item_sk#139] +Output [11]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_store_sk#111, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, ss_sold_date_sk#117] +Input [12]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_store_sk#111, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, ss_sold_date_sk#117, cs_item_sk#122] (131) ReusedExchange [Reuses operator id: 191] -Output [2]: [d_date_sk#147, d_year#148] +Output [2]: [d_date_sk#130, d_year#131] (132) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [ss_sold_date_sk#132] -Right keys [1]: [d_date_sk#147] +Left keys [1]: [ss_sold_date_sk#117] +Right keys [1]: [d_date_sk#130] Join condition: None (133) Project [codegen id : 51] -Output [11]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_store_sk#126, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148] -Input [13]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_store_sk#126, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, ss_sold_date_sk#132, d_date_sk#147, d_year#148] +Output [11]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_store_sk#111, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131] +Input [13]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_store_sk#111, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, ss_sold_date_sk#117, d_date_sk#130, d_year#131] (134) ReusedExchange [Reuses operator id: 41] -Output [3]: [s_store_sk#149, s_store_name#150, s_zip#151] +Output [3]: [s_store_sk#132, s_store_name#133, s_zip#134] (135) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [ss_store_sk#126] -Right keys [1]: [s_store_sk#149] +Left keys [1]: [ss_store_sk#111] +Right keys [1]: [s_store_sk#132] Join condition: None (136) Project [codegen id : 51] -Output [12]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151] -Input [14]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_store_sk#126, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_sk#149, s_store_name#150, s_zip#151] +Output [12]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134] +Input [14]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_store_sk#111, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_sk#132, s_store_name#133, s_zip#134] (137) ReusedExchange [Reuses operator id: 47] -Output [6]: [c_customer_sk#152, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, c_first_shipto_date_sk#156, c_first_sales_date_sk#157] +Output [6]: [c_customer_sk#135, c_current_cdemo_sk#136, c_current_hdemo_sk#137, c_current_addr_sk#138, c_first_shipto_date_sk#139, c_first_sales_date_sk#140] (138) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [ss_customer_sk#122] -Right keys [1]: [c_customer_sk#152] +Left keys [1]: [ss_customer_sk#107] +Right keys [1]: [c_customer_sk#135] Join condition: None (139) Project [codegen id : 51] -Output [16]: [ss_item_sk#121, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, c_first_shipto_date_sk#156, c_first_sales_date_sk#157] -Input [18]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_customer_sk#152, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, c_first_shipto_date_sk#156, c_first_sales_date_sk#157] +Output [16]: [ss_item_sk#106, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_cdemo_sk#136, c_current_hdemo_sk#137, c_current_addr_sk#138, c_first_shipto_date_sk#139, c_first_sales_date_sk#140] +Input [18]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_customer_sk#135, c_current_cdemo_sk#136, c_current_hdemo_sk#137, c_current_addr_sk#138, c_first_shipto_date_sk#139, c_first_sales_date_sk#140] (140) ReusedExchange [Reuses operator id: 53] -Output [2]: [d_date_sk#158, d_year#159] +Output [2]: [d_date_sk#141, d_year#142] (141) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [c_first_sales_date_sk#157] -Right keys [1]: [d_date_sk#158] +Left keys [1]: [c_first_sales_date_sk#140] +Right keys [1]: [d_date_sk#141] Join condition: None (142) Project [codegen id : 51] -Output [16]: [ss_item_sk#121, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, c_first_shipto_date_sk#156, d_year#159] -Input [18]: [ss_item_sk#121, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, c_first_shipto_date_sk#156, c_first_sales_date_sk#157, d_date_sk#158, d_year#159] +Output [16]: [ss_item_sk#106, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_cdemo_sk#136, c_current_hdemo_sk#137, c_current_addr_sk#138, c_first_shipto_date_sk#139, d_year#142] +Input [18]: [ss_item_sk#106, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_cdemo_sk#136, c_current_hdemo_sk#137, c_current_addr_sk#138, c_first_shipto_date_sk#139, c_first_sales_date_sk#140, d_date_sk#141, d_year#142] (143) ReusedExchange [Reuses operator id: 53] -Output [2]: [d_date_sk#160, d_year#161] +Output [2]: [d_date_sk#143, d_year#144] (144) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [c_first_shipto_date_sk#156] -Right keys [1]: [d_date_sk#160] +Left keys [1]: [c_first_shipto_date_sk#139] +Right keys [1]: [d_date_sk#143] Join condition: None (145) Project [codegen id : 51] -Output [16]: [ss_item_sk#121, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161] -Input [18]: [ss_item_sk#121, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, c_first_shipto_date_sk#156, d_year#159, d_date_sk#160, d_year#161] +Output [16]: [ss_item_sk#106, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_cdemo_sk#136, c_current_hdemo_sk#137, c_current_addr_sk#138, d_year#142, d_year#144] +Input [18]: [ss_item_sk#106, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_cdemo_sk#136, c_current_hdemo_sk#137, c_current_addr_sk#138, c_first_shipto_date_sk#139, d_year#142, d_date_sk#143, d_year#144] (146) ReusedExchange [Reuses operator id: 62] -Output [2]: [cd_demo_sk#162, cd_marital_status#163] +Output [2]: [cd_demo_sk#145, cd_marital_status#146] (147) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [ss_cdemo_sk#123] -Right keys [1]: [cd_demo_sk#162] +Left keys [1]: [ss_cdemo_sk#108] +Right keys [1]: [cd_demo_sk#145] Join condition: None (148) Project [codegen id : 51] -Output [16]: [ss_item_sk#121, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161, cd_marital_status#163] -Input [18]: [ss_item_sk#121, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161, cd_demo_sk#162, cd_marital_status#163] +Output [16]: [ss_item_sk#106, ss_hdemo_sk#109, ss_addr_sk#110, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_cdemo_sk#136, c_current_hdemo_sk#137, c_current_addr_sk#138, d_year#142, d_year#144, cd_marital_status#146] +Input [18]: [ss_item_sk#106, ss_cdemo_sk#108, ss_hdemo_sk#109, ss_addr_sk#110, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_cdemo_sk#136, c_current_hdemo_sk#137, c_current_addr_sk#138, d_year#142, d_year#144, cd_demo_sk#145, cd_marital_status#146] (149) ReusedExchange [Reuses operator id: 62] -Output [2]: [cd_demo_sk#164, cd_marital_status#165] +Output [2]: [cd_demo_sk#147, cd_marital_status#148] (150) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [c_current_cdemo_sk#153] -Right keys [1]: [cd_demo_sk#164] -Join condition: NOT (cd_marital_status#163 = cd_marital_status#165) +Left keys [1]: [c_current_cdemo_sk#136] +Right keys [1]: [cd_demo_sk#147] +Join condition: NOT (cd_marital_status#146 = cd_marital_status#148) (151) Project [codegen id : 51] -Output [14]: [ss_item_sk#121, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161] -Input [18]: [ss_item_sk#121, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161, cd_marital_status#163, cd_demo_sk#164, cd_marital_status#165] +Output [14]: [ss_item_sk#106, ss_hdemo_sk#109, ss_addr_sk#110, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_hdemo_sk#137, c_current_addr_sk#138, d_year#142, d_year#144] +Input [18]: [ss_item_sk#106, ss_hdemo_sk#109, ss_addr_sk#110, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_cdemo_sk#136, c_current_hdemo_sk#137, c_current_addr_sk#138, d_year#142, d_year#144, cd_marital_status#146, cd_demo_sk#147, cd_marital_status#148] (152) ReusedExchange [Reuses operator id: 71] -Output [1]: [p_promo_sk#166] +Output [1]: [p_promo_sk#149] (153) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [ss_promo_sk#127] -Right keys [1]: [p_promo_sk#166] +Left keys [1]: [ss_promo_sk#112] +Right keys [1]: [p_promo_sk#149] Join condition: None (154) Project [codegen id : 51] -Output [13]: [ss_item_sk#121, ss_hdemo_sk#124, ss_addr_sk#125, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161] -Input [15]: [ss_item_sk#121, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161, p_promo_sk#166] +Output [13]: [ss_item_sk#106, ss_hdemo_sk#109, ss_addr_sk#110, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_hdemo_sk#137, c_current_addr_sk#138, d_year#142, d_year#144] +Input [15]: [ss_item_sk#106, ss_hdemo_sk#109, ss_addr_sk#110, ss_promo_sk#112, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_hdemo_sk#137, c_current_addr_sk#138, d_year#142, d_year#144, p_promo_sk#149] (155) ReusedExchange [Reuses operator id: 77] -Output [2]: [hd_demo_sk#167, hd_income_band_sk#168] +Output [2]: [hd_demo_sk#150, hd_income_band_sk#151] (156) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [ss_hdemo_sk#124] -Right keys [1]: [hd_demo_sk#167] +Left keys [1]: [ss_hdemo_sk#109] +Right keys [1]: [hd_demo_sk#150] Join condition: None (157) Project [codegen id : 51] -Output [13]: [ss_item_sk#121, ss_addr_sk#125, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161, hd_income_band_sk#168] -Input [15]: [ss_item_sk#121, ss_hdemo_sk#124, ss_addr_sk#125, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161, hd_demo_sk#167, hd_income_band_sk#168] +Output [13]: [ss_item_sk#106, ss_addr_sk#110, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_hdemo_sk#137, c_current_addr_sk#138, d_year#142, d_year#144, hd_income_band_sk#151] +Input [15]: [ss_item_sk#106, ss_hdemo_sk#109, ss_addr_sk#110, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_hdemo_sk#137, c_current_addr_sk#138, d_year#142, d_year#144, hd_demo_sk#150, hd_income_band_sk#151] (158) ReusedExchange [Reuses operator id: 77] -Output [2]: [hd_demo_sk#169, hd_income_band_sk#170] +Output [2]: [hd_demo_sk#152, hd_income_band_sk#153] (159) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [c_current_hdemo_sk#154] -Right keys [1]: [hd_demo_sk#169] +Left keys [1]: [c_current_hdemo_sk#137] +Right keys [1]: [hd_demo_sk#152] Join condition: None (160) Project [codegen id : 51] -Output [13]: [ss_item_sk#121, ss_addr_sk#125, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#155, d_year#159, d_year#161, hd_income_band_sk#168, hd_income_band_sk#170] -Input [15]: [ss_item_sk#121, ss_addr_sk#125, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161, hd_income_band_sk#168, hd_demo_sk#169, hd_income_band_sk#170] +Output [13]: [ss_item_sk#106, ss_addr_sk#110, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_addr_sk#138, d_year#142, d_year#144, hd_income_band_sk#151, hd_income_band_sk#153] +Input [15]: [ss_item_sk#106, ss_addr_sk#110, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_hdemo_sk#137, c_current_addr_sk#138, d_year#142, d_year#144, hd_income_band_sk#151, hd_demo_sk#152, hd_income_band_sk#153] (161) ReusedExchange [Reuses operator id: 86] -Output [5]: [ca_address_sk#171, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175] +Output [5]: [ca_address_sk#154, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158] (162) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [ss_addr_sk#125] -Right keys [1]: [ca_address_sk#171] +Left keys [1]: [ss_addr_sk#110] +Right keys [1]: [ca_address_sk#154] Join condition: None (163) Project [codegen id : 51] -Output [16]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#155, d_year#159, d_year#161, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175] -Input [18]: [ss_item_sk#121, ss_addr_sk#125, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#155, d_year#159, d_year#161, hd_income_band_sk#168, hd_income_band_sk#170, ca_address_sk#171, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175] +Output [16]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_addr_sk#138, d_year#142, d_year#144, hd_income_band_sk#151, hd_income_band_sk#153, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158] +Input [18]: [ss_item_sk#106, ss_addr_sk#110, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_addr_sk#138, d_year#142, d_year#144, hd_income_band_sk#151, hd_income_band_sk#153, ca_address_sk#154, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158] (164) ReusedExchange [Reuses operator id: 86] -Output [5]: [ca_address_sk#176, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180] +Output [5]: [ca_address_sk#159, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163] (165) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [c_current_addr_sk#155] -Right keys [1]: [ca_address_sk#176] +Left keys [1]: [c_current_addr_sk#138] +Right keys [1]: [ca_address_sk#159] Join condition: None (166) Project [codegen id : 51] -Output [19]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, d_year#159, d_year#161, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180] -Input [21]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#155, d_year#159, d_year#161, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_address_sk#176, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180] +Output [19]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, d_year#142, d_year#144, hd_income_band_sk#151, hd_income_band_sk#153, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163] +Input [21]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, c_current_addr_sk#138, d_year#142, d_year#144, hd_income_band_sk#151, hd_income_band_sk#153, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158, ca_address_sk#159, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163] (167) ReusedExchange [Reuses operator id: 95] -Output [1]: [ib_income_band_sk#181] +Output [1]: [ib_income_band_sk#164] (168) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [hd_income_band_sk#168] -Right keys [1]: [ib_income_band_sk#181] +Left keys [1]: [hd_income_band_sk#151] +Right keys [1]: [ib_income_band_sk#164] Join condition: None (169) Project [codegen id : 51] -Output [18]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, d_year#159, d_year#161, hd_income_band_sk#170, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180] -Input [20]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, d_year#159, d_year#161, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, ib_income_band_sk#181] +Output [18]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, d_year#142, d_year#144, hd_income_band_sk#153, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163] +Input [20]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, d_year#142, d_year#144, hd_income_band_sk#151, hd_income_band_sk#153, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163, ib_income_band_sk#164] (170) ReusedExchange [Reuses operator id: 95] -Output [1]: [ib_income_band_sk#182] +Output [1]: [ib_income_band_sk#165] (171) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [hd_income_band_sk#170] -Right keys [1]: [ib_income_band_sk#182] +Left keys [1]: [hd_income_band_sk#153] +Right keys [1]: [ib_income_band_sk#165] Join condition: None (172) Project [codegen id : 51] -Output [17]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, d_year#159, d_year#161, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180] -Input [19]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, d_year#159, d_year#161, hd_income_band_sk#170, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, ib_income_band_sk#182] +Output [17]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, d_year#142, d_year#144, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163] +Input [19]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, d_year#142, d_year#144, hd_income_band_sk#153, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163, ib_income_band_sk#165] (173) ReusedExchange [Reuses operator id: 105] -Output [2]: [i_item_sk#183, i_product_name#184] +Output [2]: [i_item_sk#166, i_product_name#167] (174) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [ss_item_sk#121] -Right keys [1]: [i_item_sk#183] +Left keys [1]: [ss_item_sk#106] +Right keys [1]: [i_item_sk#166] Join condition: None (175) Project [codegen id : 51] -Output [18]: [ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, d_year#159, d_year#161, s_store_name#150, s_zip#151, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, i_item_sk#183, i_product_name#184] -Input [19]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, d_year#159, d_year#161, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, i_item_sk#183, i_product_name#184] +Output [18]: [ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, d_year#142, d_year#144, s_store_name#133, s_zip#134, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163, i_item_sk#166, i_product_name#167] +Input [19]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, s_store_name#133, s_zip#134, d_year#142, d_year#144, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163, i_item_sk#166, i_product_name#167] (176) HashAggregate [codegen id : 51] -Input [18]: [ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, d_year#159, d_year#161, s_store_name#150, s_zip#151, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, i_item_sk#183, i_product_name#184] -Keys [15]: [i_product_name#184, i_item_sk#183, s_store_name#150, s_zip#151, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, d_year#148, d_year#159, d_year#161] -Functions [4]: [partial_count(1), partial_sum(UnscaledValue(ss_wholesale_cost#129)), partial_sum(UnscaledValue(ss_list_price#130)), partial_sum(UnscaledValue(ss_coupon_amt#131))] -Aggregate Attributes [4]: [count#91, sum#185, sum#186, sum#187] -Results [19]: [i_product_name#184, i_item_sk#183, s_store_name#150, s_zip#151, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, d_year#148, d_year#159, d_year#161, count#95, sum#188, sum#189, sum#190] +Input [18]: [ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#131, d_year#142, d_year#144, s_store_name#133, s_zip#134, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163, i_item_sk#166, i_product_name#167] +Keys [15]: [i_product_name#167, i_item_sk#166, s_store_name#133, s_zip#134, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163, d_year#131, d_year#142, d_year#144] +Functions [4]: [partial_count(1), partial_sum(UnscaledValue(ss_wholesale_cost#114)), partial_sum(UnscaledValue(ss_list_price#115)), partial_sum(UnscaledValue(ss_coupon_amt#116))] +Aggregate Attributes [4]: [count#77, sum#168, sum#169, sum#170] +Results [19]: [i_product_name#167, i_item_sk#166, s_store_name#133, s_zip#134, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163, d_year#131, d_year#142, d_year#144, count#81, sum#171, sum#172, sum#173] (177) HashAggregate [codegen id : 51] -Input [19]: [i_product_name#184, i_item_sk#183, s_store_name#150, s_zip#151, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, d_year#148, d_year#159, d_year#161, count#95, sum#188, sum#189, sum#190] -Keys [15]: [i_product_name#184, i_item_sk#183, s_store_name#150, s_zip#151, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, d_year#148, d_year#159, d_year#161] -Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#129)), sum(UnscaledValue(ss_list_price#130)), sum(UnscaledValue(ss_coupon_amt#131))] -Aggregate Attributes [4]: [count(1)#99, sum(UnscaledValue(ss_wholesale_cost#129))#100, sum(UnscaledValue(ss_list_price#130))#101, sum(UnscaledValue(ss_coupon_amt#131))#102] -Results [8]: [i_item_sk#183 AS item_sk#191, s_store_name#150 AS store_name#192, s_zip#151 AS store_zip#193, d_year#148 AS syear#194, count(1)#99 AS cnt#195, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#129))#100,17,2) AS s1#196, MakeDecimal(sum(UnscaledValue(ss_list_price#130))#101,17,2) AS s2#197, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#131))#102,17,2) AS s3#198] +Input [19]: [i_product_name#167, i_item_sk#166, s_store_name#133, s_zip#134, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163, d_year#131, d_year#142, d_year#144, count#81, sum#171, sum#172, sum#173] +Keys [15]: [i_product_name#167, i_item_sk#166, s_store_name#133, s_zip#134, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163, d_year#131, d_year#142, d_year#144] +Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#114)), sum(UnscaledValue(ss_list_price#115)), sum(UnscaledValue(ss_coupon_amt#116))] +Aggregate Attributes [4]: [count(1)#85, sum(UnscaledValue(ss_wholesale_cost#114))#86, sum(UnscaledValue(ss_list_price#115))#87, sum(UnscaledValue(ss_coupon_amt#116))#88] +Results [8]: [i_item_sk#166 AS item_sk#174, s_store_name#133 AS store_name#175, s_zip#134 AS store_zip#176, d_year#131 AS syear#177, count(1)#85 AS cnt#178, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#114))#86,17,2) AS s1#179, MakeDecimal(sum(UnscaledValue(ss_list_price#115))#87,17,2) AS s2#180, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#116))#88,17,2) AS s3#181] (178) Exchange -Input [8]: [item_sk#191, store_name#192, store_zip#193, syear#194, cnt#195, s1#196, s2#197, s3#198] -Arguments: hashpartitioning(item_sk#191, store_name#192, store_zip#193, 5), ENSURE_REQUIREMENTS, [id=#199] +Input [8]: [item_sk#174, store_name#175, store_zip#176, syear#177, cnt#178, s1#179, s2#180, s3#181] +Arguments: hashpartitioning(item_sk#174, store_name#175, store_zip#176, 5), ENSURE_REQUIREMENTS, [plan_id=18] (179) Sort [codegen id : 52] -Input [8]: [item_sk#191, store_name#192, store_zip#193, syear#194, cnt#195, s1#196, s2#197, s3#198] -Arguments: [item_sk#191 ASC NULLS FIRST, store_name#192 ASC NULLS FIRST, store_zip#193 ASC NULLS FIRST], false, 0 +Input [8]: [item_sk#174, store_name#175, store_zip#176, syear#177, cnt#178, s1#179, s2#180, s3#181] +Arguments: [item_sk#174 ASC NULLS FIRST, store_name#175 ASC NULLS FIRST, store_zip#176 ASC NULLS FIRST], false, 0 (180) SortMergeJoin [codegen id : 53] -Left keys [3]: [item_sk#104, store_name#105, store_zip#106] -Right keys [3]: [item_sk#191, store_name#192, store_zip#193] -Join condition: (cnt#195 <= cnt#116) +Left keys [3]: [item_sk#90, store_name#91, store_zip#92] +Right keys [3]: [item_sk#174, store_name#175, store_zip#176] +Join condition: (cnt#178 <= cnt#102) (181) Project [codegen id : 53] -Output [21]: [product_name#103, store_name#105, store_zip#106, b_street_number#107, b_streen_name#108, b_city#109, b_zip#110, c_street_number#111, c_street_name#112, c_city#113, c_zip#114, syear#115, cnt#116, s1#117, s2#118, s3#119, s1#196, s2#197, s3#198, syear#194, cnt#195] -Input [25]: [product_name#103, item_sk#104, store_name#105, store_zip#106, b_street_number#107, b_streen_name#108, b_city#109, b_zip#110, c_street_number#111, c_street_name#112, c_city#113, c_zip#114, syear#115, cnt#116, s1#117, s2#118, s3#119, item_sk#191, store_name#192, store_zip#193, syear#194, cnt#195, s1#196, s2#197, s3#198] +Output [21]: [product_name#89, store_name#91, store_zip#92, b_street_number#93, b_streen_name#94, b_city#95, b_zip#96, c_street_number#97, c_street_name#98, c_city#99, c_zip#100, syear#101, cnt#102, s1#103, s2#104, s3#105, s1#179, s2#180, s3#181, syear#177, cnt#178] +Input [25]: [product_name#89, item_sk#90, store_name#91, store_zip#92, b_street_number#93, b_streen_name#94, b_city#95, b_zip#96, c_street_number#97, c_street_name#98, c_city#99, c_zip#100, syear#101, cnt#102, s1#103, s2#104, s3#105, item_sk#174, store_name#175, store_zip#176, syear#177, cnt#178, s1#179, s2#180, s3#181] (182) Exchange -Input [21]: [product_name#103, store_name#105, store_zip#106, b_street_number#107, b_streen_name#108, b_city#109, b_zip#110, c_street_number#111, c_street_name#112, c_city#113, c_zip#114, syear#115, cnt#116, s1#117, s2#118, s3#119, s1#196, s2#197, s3#198, syear#194, cnt#195] -Arguments: rangepartitioning(product_name#103 ASC NULLS FIRST, store_name#105 ASC NULLS FIRST, cnt#195 ASC NULLS FIRST, s1#117 ASC NULLS FIRST, s1#196 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#200] +Input [21]: [product_name#89, store_name#91, store_zip#92, b_street_number#93, b_streen_name#94, b_city#95, b_zip#96, c_street_number#97, c_street_name#98, c_city#99, c_zip#100, syear#101, cnt#102, s1#103, s2#104, s3#105, s1#179, s2#180, s3#181, syear#177, cnt#178] +Arguments: rangepartitioning(product_name#89 ASC NULLS FIRST, store_name#91 ASC NULLS FIRST, cnt#178 ASC NULLS FIRST, s1#103 ASC NULLS FIRST, s1#179 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=19] (183) Sort [codegen id : 54] -Input [21]: [product_name#103, store_name#105, store_zip#106, b_street_number#107, b_streen_name#108, b_city#109, b_zip#110, c_street_number#111, c_street_name#112, c_city#113, c_zip#114, syear#115, cnt#116, s1#117, s2#118, s3#119, s1#196, s2#197, s3#198, syear#194, cnt#195] -Arguments: [product_name#103 ASC NULLS FIRST, store_name#105 ASC NULLS FIRST, cnt#195 ASC NULLS FIRST, s1#117 ASC NULLS FIRST, s1#196 ASC NULLS FIRST], true, 0 +Input [21]: [product_name#89, store_name#91, store_zip#92, b_street_number#93, b_streen_name#94, b_city#95, b_zip#96, c_street_number#97, c_street_name#98, c_city#99, c_zip#100, syear#101, cnt#102, s1#103, s2#104, s3#105, s1#179, s2#180, s3#181, syear#177, cnt#178] +Arguments: [product_name#89 ASC NULLS FIRST, store_name#91 ASC NULLS FIRST, cnt#178 ASC NULLS FIRST, s1#103 ASC NULLS FIRST, s1#179 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -993,24 +993,24 @@ BroadcastExchange (187) (184) Scan parquet default.date_dim -Output [2]: [d_date_sk#42, d_year#43] +Output [2]: [d_date_sk#37, d_year#38] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1999), IsNotNull(d_date_sk)] ReadSchema: struct (185) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#42, d_year#43] +Input [2]: [d_date_sk#37, d_year#38] (186) Filter [codegen id : 1] -Input [2]: [d_date_sk#42, d_year#43] -Condition : ((isnotnull(d_year#43) AND (d_year#43 = 1999)) AND isnotnull(d_date_sk#42)) +Input [2]: [d_date_sk#37, d_year#38] +Condition : ((isnotnull(d_year#38) AND (d_year#38 = 1999)) AND isnotnull(d_date_sk#37)) (187) BroadcastExchange -Input [2]: [d_date_sk#42, d_year#43] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#201] +Input [2]: [d_date_sk#37, d_year#38] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=20] -Subquery:2 Hosting operator id = 112 Hosting Expression = ss_sold_date_sk#132 IN dynamicpruning#133 +Subquery:2 Hosting operator id = 112 Hosting Expression = ss_sold_date_sk#117 IN dynamicpruning#118 BroadcastExchange (191) +- * Filter (190) +- * ColumnarToRow (189) @@ -1018,21 +1018,21 @@ BroadcastExchange (191) (188) Scan parquet default.date_dim -Output [2]: [d_date_sk#147, d_year#148] +Output [2]: [d_date_sk#130, d_year#131] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (189) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#147, d_year#148] +Input [2]: [d_date_sk#130, d_year#131] (190) Filter [codegen id : 1] -Input [2]: [d_date_sk#147, d_year#148] -Condition : ((isnotnull(d_year#148) AND (d_year#148 = 2000)) AND isnotnull(d_date_sk#147)) +Input [2]: [d_date_sk#130, d_year#131] +Condition : ((isnotnull(d_year#131) AND (d_year#131 = 2000)) AND isnotnull(d_date_sk#130)) (191) BroadcastExchange -Input [2]: [d_date_sk#147, d_year#148] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#202] +Input [2]: [d_date_sk#130, d_year#131] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=21] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q67a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q67a.sf100/explain.txt index 00d9676dc2ec9..537414941ac60 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q67a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q67a.sf100/explain.txt @@ -114,7 +114,7 @@ Condition : isnotnull(s_store_sk#11) (10) BroadcastExchange Input [2]: [s_store_sk#11, s_store_id#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_store_sk#2] @@ -127,306 +127,306 @@ Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_quantity#3, ss_sales_price#4, d_year (13) Exchange Input [7]: [ss_item_sk#1, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#14] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) Sort [codegen id : 4] Input [7]: [ss_item_sk#1, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (15) Scan parquet default.item -Output [5]: [i_item_sk#15, i_brand#16, i_class#17, i_category#18, i_product_name#19] +Output [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (16) ColumnarToRow [codegen id : 5] -Input [5]: [i_item_sk#15, i_brand#16, i_class#17, i_category#18, i_product_name#19] +Input [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] (17) Filter [codegen id : 5] -Input [5]: [i_item_sk#15, i_brand#16, i_class#17, i_category#18, i_product_name#19] -Condition : isnotnull(i_item_sk#15) +Input [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] +Condition : isnotnull(i_item_sk#13) (18) Exchange -Input [5]: [i_item_sk#15, i_brand#16, i_class#17, i_category#18, i_product_name#19] -Arguments: hashpartitioning(i_item_sk#15, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] +Arguments: hashpartitioning(i_item_sk#13, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) Sort [codegen id : 6] -Input [5]: [i_item_sk#15, i_brand#16, i_class#17, i_category#18, i_product_name#19] -Arguments: [i_item_sk#15 ASC NULLS FIRST], false, 0 +Input [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] +Arguments: [i_item_sk#13 ASC NULLS FIRST], false, 0 (20) SortMergeJoin [codegen id : 7] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#15] +Right keys [1]: [i_item_sk#13] Join condition: None (21) Project [codegen id : 7] -Output [10]: [ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_brand#16, i_class#17, i_category#18, i_product_name#19] -Input [12]: [ss_item_sk#1, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_item_sk#15, i_brand#16, i_class#17, i_category#18, i_product_name#19] +Output [10]: [ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_brand#14, i_class#15, i_category#16, i_product_name#17] +Input [12]: [ss_item_sk#1, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] (22) HashAggregate [codegen id : 7] -Input [10]: [ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_brand#16, i_class#17, i_category#18, i_product_name#19] -Keys [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_brand#14, i_class#15, i_category#16, i_product_name#17] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [partial_sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [2]: [sum#21, isEmpty#22] -Results [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#23, isEmpty#24] +Aggregate Attributes [2]: [sum#18, isEmpty#19] +Results [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#20, isEmpty#21] (23) Exchange -Input [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#23, isEmpty#24] -Arguments: hashpartitioning(i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, 5), ENSURE_REQUIREMENTS, [id=#25] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#20, isEmpty#21] +Arguments: hashpartitioning(i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, 5), ENSURE_REQUIREMENTS, [plan_id=4] (24) HashAggregate [codegen id : 8] -Input [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#23, isEmpty#24] -Keys [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#20, isEmpty#21] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26] -Results [9]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, cast(sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26 as decimal(38,2)) AS sumsales#27] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, cast(sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 as decimal(38,2)) AS sumsales#23] (25) ReusedExchange [Reuses operator id: 23] -Output [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#28, isEmpty#29] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#24, isEmpty#25] (26) HashAggregate [codegen id : 16] -Input [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#28, isEmpty#29] -Keys [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#24, isEmpty#25] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26] -Results [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26 AS sumsales#30] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (27) HashAggregate [codegen id : 16] -Input [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, sumsales#30] -Keys [7]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9] -Functions [1]: [partial_sum(sumsales#30)] -Aggregate Attributes [2]: [sum#31, isEmpty#32] -Results [9]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, sum#33, isEmpty#34] +Input [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, sumsales#26] +Keys [7]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#27, isEmpty#28] +Results [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, sum#29, isEmpty#30] (28) Exchange -Input [9]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, sum#33, isEmpty#34] -Arguments: hashpartitioning(i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, 5), ENSURE_REQUIREMENTS, [id=#35] +Input [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, sum#29, isEmpty#30] +Arguments: hashpartitioning(i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, 5), ENSURE_REQUIREMENTS, [plan_id=5] (29) HashAggregate [codegen id : 17] -Input [9]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, sum#33, isEmpty#34] -Keys [7]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9] -Functions [1]: [sum(sumsales#30)] -Aggregate Attributes [1]: [sum(sumsales#30)#36] -Results [9]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, null AS s_store_id#37, sum(sumsales#30)#36 AS sumsales#38] +Input [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, sum#29, isEmpty#30] +Keys [7]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#31] +Results [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, null AS s_store_id#32, sum(sumsales#26)#31 AS sumsales#33] (30) ReusedExchange [Reuses operator id: 23] -Output [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#39, isEmpty#40] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#34, isEmpty#35] (31) HashAggregate [codegen id : 25] -Input [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#39, isEmpty#40] -Keys [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#34, isEmpty#35] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26] -Results [7]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26 AS sumsales#30] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [7]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (32) HashAggregate [codegen id : 25] -Input [7]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, sumsales#30] -Keys [6]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10] -Functions [1]: [partial_sum(sumsales#30)] -Aggregate Attributes [2]: [sum#41, isEmpty#42] -Results [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, sum#43, isEmpty#44] +Input [7]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, sumsales#26] +Keys [6]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#36, isEmpty#37] +Results [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, sum#38, isEmpty#39] (33) Exchange -Input [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, sum#43, isEmpty#44] -Arguments: hashpartitioning(i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, 5), ENSURE_REQUIREMENTS, [id=#45] +Input [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, sum#38, isEmpty#39] +Arguments: hashpartitioning(i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, 5), ENSURE_REQUIREMENTS, [plan_id=6] (34) HashAggregate [codegen id : 26] -Input [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, sum#43, isEmpty#44] -Keys [6]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10] -Functions [1]: [sum(sumsales#30)] -Aggregate Attributes [1]: [sum(sumsales#30)#46] -Results [9]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, null AS d_moy#47, null AS s_store_id#48, sum(sumsales#30)#46 AS sumsales#49] +Input [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, sum#38, isEmpty#39] +Keys [6]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#40] +Results [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, null AS d_moy#41, null AS s_store_id#42, sum(sumsales#26)#40 AS sumsales#43] (35) ReusedExchange [Reuses operator id: 23] -Output [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#50, isEmpty#51] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#44, isEmpty#45] (36) HashAggregate [codegen id : 34] -Input [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#50, isEmpty#51] -Keys [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#44, isEmpty#45] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26] -Results [6]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26 AS sumsales#30] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [6]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (37) HashAggregate [codegen id : 34] -Input [6]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, sumsales#30] -Keys [5]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8] -Functions [1]: [partial_sum(sumsales#30)] -Aggregate Attributes [2]: [sum#52, isEmpty#53] -Results [7]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, sum#54, isEmpty#55] +Input [6]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, sumsales#26] +Keys [5]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#46, isEmpty#47] +Results [7]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, sum#48, isEmpty#49] (38) Exchange -Input [7]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, sum#54, isEmpty#55] -Arguments: hashpartitioning(i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, 5), ENSURE_REQUIREMENTS, [id=#56] +Input [7]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, sum#48, isEmpty#49] +Arguments: hashpartitioning(i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, 5), ENSURE_REQUIREMENTS, [plan_id=7] (39) HashAggregate [codegen id : 35] -Input [7]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, sum#54, isEmpty#55] -Keys [5]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8] -Functions [1]: [sum(sumsales#30)] -Aggregate Attributes [1]: [sum(sumsales#30)#57] -Results [9]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, null AS d_qoy#58, null AS d_moy#59, null AS s_store_id#60, sum(sumsales#30)#57 AS sumsales#61] +Input [7]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, sum#48, isEmpty#49] +Keys [5]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#50] +Results [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, null AS d_qoy#51, null AS d_moy#52, null AS s_store_id#53, sum(sumsales#26)#50 AS sumsales#54] (40) ReusedExchange [Reuses operator id: 23] -Output [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#62, isEmpty#63] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#55, isEmpty#56] (41) HashAggregate [codegen id : 43] -Input [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#62, isEmpty#63] -Keys [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#55, isEmpty#56] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26] -Results [5]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26 AS sumsales#30] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [5]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (42) HashAggregate [codegen id : 43] -Input [5]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, sumsales#30] -Keys [4]: [i_category#18, i_class#17, i_brand#16, i_product_name#19] -Functions [1]: [partial_sum(sumsales#30)] -Aggregate Attributes [2]: [sum#64, isEmpty#65] -Results [6]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, sum#66, isEmpty#67] +Input [5]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, sumsales#26] +Keys [4]: [i_category#16, i_class#15, i_brand#14, i_product_name#17] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#57, isEmpty#58] +Results [6]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, sum#59, isEmpty#60] (43) Exchange -Input [6]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, sum#66, isEmpty#67] -Arguments: hashpartitioning(i_category#18, i_class#17, i_brand#16, i_product_name#19, 5), ENSURE_REQUIREMENTS, [id=#68] +Input [6]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, sum#59, isEmpty#60] +Arguments: hashpartitioning(i_category#16, i_class#15, i_brand#14, i_product_name#17, 5), ENSURE_REQUIREMENTS, [plan_id=8] (44) HashAggregate [codegen id : 44] -Input [6]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, sum#66, isEmpty#67] -Keys [4]: [i_category#18, i_class#17, i_brand#16, i_product_name#19] -Functions [1]: [sum(sumsales#30)] -Aggregate Attributes [1]: [sum(sumsales#30)#69] -Results [9]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, null AS d_year#70, null AS d_qoy#71, null AS d_moy#72, null AS s_store_id#73, sum(sumsales#30)#69 AS sumsales#74] +Input [6]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, sum#59, isEmpty#60] +Keys [4]: [i_category#16, i_class#15, i_brand#14, i_product_name#17] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#61] +Results [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, null AS d_year#62, null AS d_qoy#63, null AS d_moy#64, null AS s_store_id#65, sum(sumsales#26)#61 AS sumsales#66] (45) ReusedExchange [Reuses operator id: 23] -Output [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#75, isEmpty#76] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#67, isEmpty#68] (46) HashAggregate [codegen id : 52] -Input [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#75, isEmpty#76] -Keys [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#67, isEmpty#68] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26] -Results [4]: [i_category#18, i_class#17, i_brand#16, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26 AS sumsales#30] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [4]: [i_category#16, i_class#15, i_brand#14, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (47) HashAggregate [codegen id : 52] -Input [4]: [i_category#18, i_class#17, i_brand#16, sumsales#30] -Keys [3]: [i_category#18, i_class#17, i_brand#16] -Functions [1]: [partial_sum(sumsales#30)] -Aggregate Attributes [2]: [sum#77, isEmpty#78] -Results [5]: [i_category#18, i_class#17, i_brand#16, sum#79, isEmpty#80] +Input [4]: [i_category#16, i_class#15, i_brand#14, sumsales#26] +Keys [3]: [i_category#16, i_class#15, i_brand#14] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#69, isEmpty#70] +Results [5]: [i_category#16, i_class#15, i_brand#14, sum#71, isEmpty#72] (48) Exchange -Input [5]: [i_category#18, i_class#17, i_brand#16, sum#79, isEmpty#80] -Arguments: hashpartitioning(i_category#18, i_class#17, i_brand#16, 5), ENSURE_REQUIREMENTS, [id=#81] +Input [5]: [i_category#16, i_class#15, i_brand#14, sum#71, isEmpty#72] +Arguments: hashpartitioning(i_category#16, i_class#15, i_brand#14, 5), ENSURE_REQUIREMENTS, [plan_id=9] (49) HashAggregate [codegen id : 53] -Input [5]: [i_category#18, i_class#17, i_brand#16, sum#79, isEmpty#80] -Keys [3]: [i_category#18, i_class#17, i_brand#16] -Functions [1]: [sum(sumsales#30)] -Aggregate Attributes [1]: [sum(sumsales#30)#82] -Results [9]: [i_category#18, i_class#17, i_brand#16, null AS i_product_name#83, null AS d_year#84, null AS d_qoy#85, null AS d_moy#86, null AS s_store_id#87, sum(sumsales#30)#82 AS sumsales#88] +Input [5]: [i_category#16, i_class#15, i_brand#14, sum#71, isEmpty#72] +Keys [3]: [i_category#16, i_class#15, i_brand#14] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#73] +Results [9]: [i_category#16, i_class#15, i_brand#14, null AS i_product_name#74, null AS d_year#75, null AS d_qoy#76, null AS d_moy#77, null AS s_store_id#78, sum(sumsales#26)#73 AS sumsales#79] (50) ReusedExchange [Reuses operator id: 23] -Output [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#89, isEmpty#90] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#80, isEmpty#81] (51) HashAggregate [codegen id : 61] -Input [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#89, isEmpty#90] -Keys [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#80, isEmpty#81] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26] -Results [3]: [i_category#18, i_class#17, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26 AS sumsales#30] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [3]: [i_category#16, i_class#15, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (52) HashAggregate [codegen id : 61] -Input [3]: [i_category#18, i_class#17, sumsales#30] -Keys [2]: [i_category#18, i_class#17] -Functions [1]: [partial_sum(sumsales#30)] -Aggregate Attributes [2]: [sum#91, isEmpty#92] -Results [4]: [i_category#18, i_class#17, sum#93, isEmpty#94] +Input [3]: [i_category#16, i_class#15, sumsales#26] +Keys [2]: [i_category#16, i_class#15] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#82, isEmpty#83] +Results [4]: [i_category#16, i_class#15, sum#84, isEmpty#85] (53) Exchange -Input [4]: [i_category#18, i_class#17, sum#93, isEmpty#94] -Arguments: hashpartitioning(i_category#18, i_class#17, 5), ENSURE_REQUIREMENTS, [id=#95] +Input [4]: [i_category#16, i_class#15, sum#84, isEmpty#85] +Arguments: hashpartitioning(i_category#16, i_class#15, 5), ENSURE_REQUIREMENTS, [plan_id=10] (54) HashAggregate [codegen id : 62] -Input [4]: [i_category#18, i_class#17, sum#93, isEmpty#94] -Keys [2]: [i_category#18, i_class#17] -Functions [1]: [sum(sumsales#30)] -Aggregate Attributes [1]: [sum(sumsales#30)#96] -Results [9]: [i_category#18, i_class#17, null AS i_brand#97, null AS i_product_name#98, null AS d_year#99, null AS d_qoy#100, null AS d_moy#101, null AS s_store_id#102, sum(sumsales#30)#96 AS sumsales#103] +Input [4]: [i_category#16, i_class#15, sum#84, isEmpty#85] +Keys [2]: [i_category#16, i_class#15] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#86] +Results [9]: [i_category#16, i_class#15, null AS i_brand#87, null AS i_product_name#88, null AS d_year#89, null AS d_qoy#90, null AS d_moy#91, null AS s_store_id#92, sum(sumsales#26)#86 AS sumsales#93] (55) ReusedExchange [Reuses operator id: 23] -Output [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#104, isEmpty#105] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#94, isEmpty#95] (56) HashAggregate [codegen id : 70] -Input [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#104, isEmpty#105] -Keys [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#94, isEmpty#95] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26] -Results [2]: [i_category#18, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26 AS sumsales#30] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [2]: [i_category#16, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (57) HashAggregate [codegen id : 70] -Input [2]: [i_category#18, sumsales#30] -Keys [1]: [i_category#18] -Functions [1]: [partial_sum(sumsales#30)] -Aggregate Attributes [2]: [sum#106, isEmpty#107] -Results [3]: [i_category#18, sum#108, isEmpty#109] +Input [2]: [i_category#16, sumsales#26] +Keys [1]: [i_category#16] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#96, isEmpty#97] +Results [3]: [i_category#16, sum#98, isEmpty#99] (58) Exchange -Input [3]: [i_category#18, sum#108, isEmpty#109] -Arguments: hashpartitioning(i_category#18, 5), ENSURE_REQUIREMENTS, [id=#110] +Input [3]: [i_category#16, sum#98, isEmpty#99] +Arguments: hashpartitioning(i_category#16, 5), ENSURE_REQUIREMENTS, [plan_id=11] (59) HashAggregate [codegen id : 71] -Input [3]: [i_category#18, sum#108, isEmpty#109] -Keys [1]: [i_category#18] -Functions [1]: [sum(sumsales#30)] -Aggregate Attributes [1]: [sum(sumsales#30)#111] -Results [9]: [i_category#18, null AS i_class#112, null AS i_brand#113, null AS i_product_name#114, null AS d_year#115, null AS d_qoy#116, null AS d_moy#117, null AS s_store_id#118, sum(sumsales#30)#111 AS sumsales#119] +Input [3]: [i_category#16, sum#98, isEmpty#99] +Keys [1]: [i_category#16] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#100] +Results [9]: [i_category#16, null AS i_class#101, null AS i_brand#102, null AS i_product_name#103, null AS d_year#104, null AS d_qoy#105, null AS d_moy#106, null AS s_store_id#107, sum(sumsales#26)#100 AS sumsales#108] (60) ReusedExchange [Reuses operator id: 23] -Output [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#120, isEmpty#121] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#109, isEmpty#110] (61) HashAggregate [codegen id : 79] -Input [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#120, isEmpty#121] -Keys [8]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#109, isEmpty#110] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26] -Results [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#26 AS sumsales#30] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (62) HashAggregate [codegen id : 79] -Input [1]: [sumsales#30] +Input [1]: [sumsales#26] Keys: [] -Functions [1]: [partial_sum(sumsales#30)] -Aggregate Attributes [2]: [sum#122, isEmpty#123] -Results [2]: [sum#124, isEmpty#125] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#111, isEmpty#112] +Results [2]: [sum#113, isEmpty#114] (63) Exchange -Input [2]: [sum#124, isEmpty#125] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#126] +Input [2]: [sum#113, isEmpty#114] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12] (64) HashAggregate [codegen id : 80] -Input [2]: [sum#124, isEmpty#125] +Input [2]: [sum#113, isEmpty#114] Keys: [] -Functions [1]: [sum(sumsales#30)] -Aggregate Attributes [1]: [sum(sumsales#30)#127] -Results [9]: [null AS i_category#128, null AS i_class#129, null AS i_brand#130, null AS i_product_name#131, null AS d_year#132, null AS d_qoy#133, null AS d_moy#134, null AS s_store_id#135, sum(sumsales#30)#127 AS sumsales#136] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#115] +Results [9]: [null AS i_category#116, null AS i_class#117, null AS i_brand#118, null AS i_product_name#119, null AS d_year#120, null AS d_qoy#121, null AS d_moy#122, null AS s_store_id#123, sum(sumsales#26)#115 AS sumsales#124] (65) Union (66) Exchange -Input [9]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#27] -Arguments: hashpartitioning(i_category#18, 5), ENSURE_REQUIREMENTS, [id=#137] +Input [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#23] +Arguments: hashpartitioning(i_category#16, 5), ENSURE_REQUIREMENTS, [plan_id=13] (67) Sort [codegen id : 81] -Input [9]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#27] -Arguments: [i_category#18 ASC NULLS FIRST, sumsales#27 DESC NULLS LAST], false, 0 +Input [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#23] +Arguments: [i_category#16 ASC NULLS FIRST, sumsales#23 DESC NULLS LAST], false, 0 (68) Window -Input [9]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#27] -Arguments: [rank(sumsales#27) windowspecdefinition(i_category#18, sumsales#27 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#138], [i_category#18], [sumsales#27 DESC NULLS LAST] +Input [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#23] +Arguments: [rank(sumsales#23) windowspecdefinition(i_category#16, sumsales#23 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#125], [i_category#16], [sumsales#23 DESC NULLS LAST] (69) Filter [codegen id : 82] -Input [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#27, rk#138] -Condition : (rk#138 <= 100) +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#23, rk#125] +Condition : (rk#125 <= 100) (70) TakeOrderedAndProject -Input [10]: [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#27, rk#138] -Arguments: 100, [i_category#18 ASC NULLS FIRST, i_class#17 ASC NULLS FIRST, i_brand#16 ASC NULLS FIRST, i_product_name#19 ASC NULLS FIRST, d_year#8 ASC NULLS FIRST, d_qoy#10 ASC NULLS FIRST, d_moy#9 ASC NULLS FIRST, s_store_id#12 ASC NULLS FIRST, sumsales#27 ASC NULLS FIRST, rk#138 ASC NULLS FIRST], [i_category#18, i_class#17, i_brand#16, i_product_name#19, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#27, rk#138] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#23, rk#125] +Arguments: 100, [i_category#16 ASC NULLS FIRST, i_class#15 ASC NULLS FIRST, i_brand#14 ASC NULLS FIRST, i_product_name#17 ASC NULLS FIRST, d_year#8 ASC NULLS FIRST, d_qoy#10 ASC NULLS FIRST, d_moy#9 ASC NULLS FIRST, s_store_id#12 ASC NULLS FIRST, sumsales#23 ASC NULLS FIRST, rk#125 ASC NULLS FIRST], [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#23, rk#125] ===== Subqueries ===== @@ -439,25 +439,25 @@ BroadcastExchange (75) (71) Scan parquet default.date_dim -Output [5]: [d_date_sk#7, d_month_seq#139, d_year#8, d_moy#9, d_qoy#10] +Output [5]: [d_date_sk#7, d_month_seq#126, d_year#8, d_moy#9, d_qoy#10] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_date_sk)] ReadSchema: struct (72) ColumnarToRow [codegen id : 1] -Input [5]: [d_date_sk#7, d_month_seq#139, d_year#8, d_moy#9, d_qoy#10] +Input [5]: [d_date_sk#7, d_month_seq#126, d_year#8, d_moy#9, d_qoy#10] (73) Filter [codegen id : 1] -Input [5]: [d_date_sk#7, d_month_seq#139, d_year#8, d_moy#9, d_qoy#10] -Condition : (((isnotnull(d_month_seq#139) AND (d_month_seq#139 >= 1212)) AND (d_month_seq#139 <= 1223)) AND isnotnull(d_date_sk#7)) +Input [5]: [d_date_sk#7, d_month_seq#126, d_year#8, d_moy#9, d_qoy#10] +Condition : (((isnotnull(d_month_seq#126) AND (d_month_seq#126 >= 1212)) AND (d_month_seq#126 <= 1223)) AND isnotnull(d_date_sk#7)) (74) Project [codegen id : 1] Output [4]: [d_date_sk#7, d_year#8, d_moy#9, d_qoy#10] -Input [5]: [d_date_sk#7, d_month_seq#139, d_year#8, d_moy#9, d_qoy#10] +Input [5]: [d_date_sk#7, d_month_seq#126, d_year#8, d_moy#9, d_qoy#10] (75) BroadcastExchange Input [4]: [d_date_sk#7, d_year#8, d_moy#9, d_qoy#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#140] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=14] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q67a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q67a/explain.txt index d0208d6e24e2f..a8506c6577ba7 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q67a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q67a/explain.txt @@ -111,7 +111,7 @@ Condition : isnotnull(s_store_sk#11) (10) BroadcastExchange Input [2]: [s_store_sk#11, s_store_id#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#2] @@ -123,295 +123,295 @@ Output [7]: [ss_item_sk#1, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_sk#11, s_store_id#12] (13) Scan parquet default.item -Output [5]: [i_item_sk#14, i_brand#15, i_class#16, i_category#17, i_product_name#18] +Output [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [5]: [i_item_sk#14, i_brand#15, i_class#16, i_category#17, i_product_name#18] +Input [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] (15) Filter [codegen id : 3] -Input [5]: [i_item_sk#14, i_brand#15, i_class#16, i_category#17, i_product_name#18] -Condition : isnotnull(i_item_sk#14) +Input [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] +Condition : isnotnull(i_item_sk#13) (16) BroadcastExchange -Input [5]: [i_item_sk#14, i_brand#15, i_class#16, i_category#17, i_product_name#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19] +Input [5]: [i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#14] +Right keys [1]: [i_item_sk#13] Join condition: None (18) Project [codegen id : 4] -Output [10]: [ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_brand#15, i_class#16, i_category#17, i_product_name#18] -Input [12]: [ss_item_sk#1, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_item_sk#14, i_brand#15, i_class#16, i_category#17, i_product_name#18] +Output [10]: [ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_brand#14, i_class#15, i_category#16, i_product_name#17] +Input [12]: [ss_item_sk#1, ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_item_sk#13, i_brand#14, i_class#15, i_category#16, i_product_name#17] (19) HashAggregate [codegen id : 4] -Input [10]: [ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_brand#15, i_class#16, i_category#17, i_product_name#18] -Keys [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [ss_quantity#3, ss_sales_price#4, d_year#8, d_moy#9, d_qoy#10, s_store_id#12, i_brand#14, i_class#15, i_category#16, i_product_name#17] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [partial_sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [2]: [sum#20, isEmpty#21] -Results [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#22, isEmpty#23] +Aggregate Attributes [2]: [sum#18, isEmpty#19] +Results [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#20, isEmpty#21] (20) Exchange -Input [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#22, isEmpty#23] -Arguments: hashpartitioning(i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#20, isEmpty#21] +Arguments: hashpartitioning(i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) HashAggregate [codegen id : 5] -Input [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#22, isEmpty#23] -Keys [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#20, isEmpty#21] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25] -Results [9]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, cast(sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25 as decimal(38,2)) AS sumsales#26] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, cast(sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 as decimal(38,2)) AS sumsales#23] (22) ReusedExchange [Reuses operator id: 20] -Output [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#27, isEmpty#28] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#24, isEmpty#25] (23) HashAggregate [codegen id : 10] -Input [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#27, isEmpty#28] -Keys [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#24, isEmpty#25] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25] -Results [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25 AS sumsales#29] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (24) HashAggregate [codegen id : 10] -Input [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, sumsales#29] -Keys [7]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9] -Functions [1]: [partial_sum(sumsales#29)] -Aggregate Attributes [2]: [sum#30, isEmpty#31] -Results [9]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, sum#32, isEmpty#33] +Input [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, sumsales#26] +Keys [7]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#27, isEmpty#28] +Results [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, sum#29, isEmpty#30] (25) Exchange -Input [9]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, sum#32, isEmpty#33] -Arguments: hashpartitioning(i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, 5), ENSURE_REQUIREMENTS, [id=#34] +Input [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, sum#29, isEmpty#30] +Arguments: hashpartitioning(i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, 5), ENSURE_REQUIREMENTS, [plan_id=4] (26) HashAggregate [codegen id : 11] -Input [9]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, sum#32, isEmpty#33] -Keys [7]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9] -Functions [1]: [sum(sumsales#29)] -Aggregate Attributes [1]: [sum(sumsales#29)#35] -Results [9]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, null AS s_store_id#36, sum(sumsales#29)#35 AS sumsales#37] +Input [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, sum#29, isEmpty#30] +Keys [7]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#31] +Results [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, null AS s_store_id#32, sum(sumsales#26)#31 AS sumsales#33] (27) ReusedExchange [Reuses operator id: 20] -Output [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#38, isEmpty#39] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#34, isEmpty#35] (28) HashAggregate [codegen id : 16] -Input [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#38, isEmpty#39] -Keys [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#34, isEmpty#35] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25] -Results [7]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25 AS sumsales#29] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [7]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (29) HashAggregate [codegen id : 16] -Input [7]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, sumsales#29] -Keys [6]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10] -Functions [1]: [partial_sum(sumsales#29)] -Aggregate Attributes [2]: [sum#40, isEmpty#41] -Results [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, sum#42, isEmpty#43] +Input [7]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, sumsales#26] +Keys [6]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#36, isEmpty#37] +Results [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, sum#38, isEmpty#39] (30) Exchange -Input [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, sum#42, isEmpty#43] -Arguments: hashpartitioning(i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, sum#38, isEmpty#39] +Arguments: hashpartitioning(i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, 5), ENSURE_REQUIREMENTS, [plan_id=5] (31) HashAggregate [codegen id : 17] -Input [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, sum#42, isEmpty#43] -Keys [6]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10] -Functions [1]: [sum(sumsales#29)] -Aggregate Attributes [1]: [sum(sumsales#29)#45] -Results [9]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, null AS d_moy#46, null AS s_store_id#47, sum(sumsales#29)#45 AS sumsales#48] +Input [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, sum#38, isEmpty#39] +Keys [6]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#40] +Results [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, null AS d_moy#41, null AS s_store_id#42, sum(sumsales#26)#40 AS sumsales#43] (32) ReusedExchange [Reuses operator id: 20] -Output [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#49, isEmpty#50] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#44, isEmpty#45] (33) HashAggregate [codegen id : 22] -Input [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#49, isEmpty#50] -Keys [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#44, isEmpty#45] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25] -Results [6]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25 AS sumsales#29] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [6]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (34) HashAggregate [codegen id : 22] -Input [6]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, sumsales#29] -Keys [5]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8] -Functions [1]: [partial_sum(sumsales#29)] -Aggregate Attributes [2]: [sum#51, isEmpty#52] -Results [7]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, sum#53, isEmpty#54] +Input [6]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, sumsales#26] +Keys [5]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#46, isEmpty#47] +Results [7]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, sum#48, isEmpty#49] (35) Exchange -Input [7]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, sum#53, isEmpty#54] -Arguments: hashpartitioning(i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, 5), ENSURE_REQUIREMENTS, [id=#55] +Input [7]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, sum#48, isEmpty#49] +Arguments: hashpartitioning(i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, 5), ENSURE_REQUIREMENTS, [plan_id=6] (36) HashAggregate [codegen id : 23] -Input [7]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, sum#53, isEmpty#54] -Keys [5]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8] -Functions [1]: [sum(sumsales#29)] -Aggregate Attributes [1]: [sum(sumsales#29)#56] -Results [9]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, null AS d_qoy#57, null AS d_moy#58, null AS s_store_id#59, sum(sumsales#29)#56 AS sumsales#60] +Input [7]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, sum#48, isEmpty#49] +Keys [5]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#50] +Results [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, null AS d_qoy#51, null AS d_moy#52, null AS s_store_id#53, sum(sumsales#26)#50 AS sumsales#54] (37) ReusedExchange [Reuses operator id: 20] -Output [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#61, isEmpty#62] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#55, isEmpty#56] (38) HashAggregate [codegen id : 28] -Input [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#61, isEmpty#62] -Keys [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#55, isEmpty#56] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25] -Results [5]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25 AS sumsales#29] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [5]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (39) HashAggregate [codegen id : 28] -Input [5]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, sumsales#29] -Keys [4]: [i_category#17, i_class#16, i_brand#15, i_product_name#18] -Functions [1]: [partial_sum(sumsales#29)] -Aggregate Attributes [2]: [sum#63, isEmpty#64] -Results [6]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, sum#65, isEmpty#66] +Input [5]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, sumsales#26] +Keys [4]: [i_category#16, i_class#15, i_brand#14, i_product_name#17] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#57, isEmpty#58] +Results [6]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, sum#59, isEmpty#60] (40) Exchange -Input [6]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, sum#65, isEmpty#66] -Arguments: hashpartitioning(i_category#17, i_class#16, i_brand#15, i_product_name#18, 5), ENSURE_REQUIREMENTS, [id=#67] +Input [6]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, sum#59, isEmpty#60] +Arguments: hashpartitioning(i_category#16, i_class#15, i_brand#14, i_product_name#17, 5), ENSURE_REQUIREMENTS, [plan_id=7] (41) HashAggregate [codegen id : 29] -Input [6]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, sum#65, isEmpty#66] -Keys [4]: [i_category#17, i_class#16, i_brand#15, i_product_name#18] -Functions [1]: [sum(sumsales#29)] -Aggregate Attributes [1]: [sum(sumsales#29)#68] -Results [9]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, null AS d_year#69, null AS d_qoy#70, null AS d_moy#71, null AS s_store_id#72, sum(sumsales#29)#68 AS sumsales#73] +Input [6]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, sum#59, isEmpty#60] +Keys [4]: [i_category#16, i_class#15, i_brand#14, i_product_name#17] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#61] +Results [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, null AS d_year#62, null AS d_qoy#63, null AS d_moy#64, null AS s_store_id#65, sum(sumsales#26)#61 AS sumsales#66] (42) ReusedExchange [Reuses operator id: 20] -Output [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#74, isEmpty#75] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#67, isEmpty#68] (43) HashAggregate [codegen id : 34] -Input [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#74, isEmpty#75] -Keys [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#67, isEmpty#68] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25] -Results [4]: [i_category#17, i_class#16, i_brand#15, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25 AS sumsales#29] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [4]: [i_category#16, i_class#15, i_brand#14, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (44) HashAggregate [codegen id : 34] -Input [4]: [i_category#17, i_class#16, i_brand#15, sumsales#29] -Keys [3]: [i_category#17, i_class#16, i_brand#15] -Functions [1]: [partial_sum(sumsales#29)] -Aggregate Attributes [2]: [sum#76, isEmpty#77] -Results [5]: [i_category#17, i_class#16, i_brand#15, sum#78, isEmpty#79] +Input [4]: [i_category#16, i_class#15, i_brand#14, sumsales#26] +Keys [3]: [i_category#16, i_class#15, i_brand#14] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#69, isEmpty#70] +Results [5]: [i_category#16, i_class#15, i_brand#14, sum#71, isEmpty#72] (45) Exchange -Input [5]: [i_category#17, i_class#16, i_brand#15, sum#78, isEmpty#79] -Arguments: hashpartitioning(i_category#17, i_class#16, i_brand#15, 5), ENSURE_REQUIREMENTS, [id=#80] +Input [5]: [i_category#16, i_class#15, i_brand#14, sum#71, isEmpty#72] +Arguments: hashpartitioning(i_category#16, i_class#15, i_brand#14, 5), ENSURE_REQUIREMENTS, [plan_id=8] (46) HashAggregate [codegen id : 35] -Input [5]: [i_category#17, i_class#16, i_brand#15, sum#78, isEmpty#79] -Keys [3]: [i_category#17, i_class#16, i_brand#15] -Functions [1]: [sum(sumsales#29)] -Aggregate Attributes [1]: [sum(sumsales#29)#81] -Results [9]: [i_category#17, i_class#16, i_brand#15, null AS i_product_name#82, null AS d_year#83, null AS d_qoy#84, null AS d_moy#85, null AS s_store_id#86, sum(sumsales#29)#81 AS sumsales#87] +Input [5]: [i_category#16, i_class#15, i_brand#14, sum#71, isEmpty#72] +Keys [3]: [i_category#16, i_class#15, i_brand#14] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#73] +Results [9]: [i_category#16, i_class#15, i_brand#14, null AS i_product_name#74, null AS d_year#75, null AS d_qoy#76, null AS d_moy#77, null AS s_store_id#78, sum(sumsales#26)#73 AS sumsales#79] (47) ReusedExchange [Reuses operator id: 20] -Output [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#88, isEmpty#89] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#80, isEmpty#81] (48) HashAggregate [codegen id : 40] -Input [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#88, isEmpty#89] -Keys [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#80, isEmpty#81] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25] -Results [3]: [i_category#17, i_class#16, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25 AS sumsales#29] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [3]: [i_category#16, i_class#15, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (49) HashAggregate [codegen id : 40] -Input [3]: [i_category#17, i_class#16, sumsales#29] -Keys [2]: [i_category#17, i_class#16] -Functions [1]: [partial_sum(sumsales#29)] -Aggregate Attributes [2]: [sum#90, isEmpty#91] -Results [4]: [i_category#17, i_class#16, sum#92, isEmpty#93] +Input [3]: [i_category#16, i_class#15, sumsales#26] +Keys [2]: [i_category#16, i_class#15] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#82, isEmpty#83] +Results [4]: [i_category#16, i_class#15, sum#84, isEmpty#85] (50) Exchange -Input [4]: [i_category#17, i_class#16, sum#92, isEmpty#93] -Arguments: hashpartitioning(i_category#17, i_class#16, 5), ENSURE_REQUIREMENTS, [id=#94] +Input [4]: [i_category#16, i_class#15, sum#84, isEmpty#85] +Arguments: hashpartitioning(i_category#16, i_class#15, 5), ENSURE_REQUIREMENTS, [plan_id=9] (51) HashAggregate [codegen id : 41] -Input [4]: [i_category#17, i_class#16, sum#92, isEmpty#93] -Keys [2]: [i_category#17, i_class#16] -Functions [1]: [sum(sumsales#29)] -Aggregate Attributes [1]: [sum(sumsales#29)#95] -Results [9]: [i_category#17, i_class#16, null AS i_brand#96, null AS i_product_name#97, null AS d_year#98, null AS d_qoy#99, null AS d_moy#100, null AS s_store_id#101, sum(sumsales#29)#95 AS sumsales#102] +Input [4]: [i_category#16, i_class#15, sum#84, isEmpty#85] +Keys [2]: [i_category#16, i_class#15] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#86] +Results [9]: [i_category#16, i_class#15, null AS i_brand#87, null AS i_product_name#88, null AS d_year#89, null AS d_qoy#90, null AS d_moy#91, null AS s_store_id#92, sum(sumsales#26)#86 AS sumsales#93] (52) ReusedExchange [Reuses operator id: 20] -Output [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#103, isEmpty#104] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#94, isEmpty#95] (53) HashAggregate [codegen id : 46] -Input [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#103, isEmpty#104] -Keys [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#94, isEmpty#95] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25] -Results [2]: [i_category#17, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25 AS sumsales#29] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [2]: [i_category#16, sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (54) HashAggregate [codegen id : 46] -Input [2]: [i_category#17, sumsales#29] -Keys [1]: [i_category#17] -Functions [1]: [partial_sum(sumsales#29)] -Aggregate Attributes [2]: [sum#105, isEmpty#106] -Results [3]: [i_category#17, sum#107, isEmpty#108] +Input [2]: [i_category#16, sumsales#26] +Keys [1]: [i_category#16] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#96, isEmpty#97] +Results [3]: [i_category#16, sum#98, isEmpty#99] (55) Exchange -Input [3]: [i_category#17, sum#107, isEmpty#108] -Arguments: hashpartitioning(i_category#17, 5), ENSURE_REQUIREMENTS, [id=#109] +Input [3]: [i_category#16, sum#98, isEmpty#99] +Arguments: hashpartitioning(i_category#16, 5), ENSURE_REQUIREMENTS, [plan_id=10] (56) HashAggregate [codegen id : 47] -Input [3]: [i_category#17, sum#107, isEmpty#108] -Keys [1]: [i_category#17] -Functions [1]: [sum(sumsales#29)] -Aggregate Attributes [1]: [sum(sumsales#29)#110] -Results [9]: [i_category#17, null AS i_class#111, null AS i_brand#112, null AS i_product_name#113, null AS d_year#114, null AS d_qoy#115, null AS d_moy#116, null AS s_store_id#117, sum(sumsales#29)#110 AS sumsales#118] +Input [3]: [i_category#16, sum#98, isEmpty#99] +Keys [1]: [i_category#16] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#100] +Results [9]: [i_category#16, null AS i_class#101, null AS i_brand#102, null AS i_product_name#103, null AS d_year#104, null AS d_qoy#105, null AS d_moy#106, null AS s_store_id#107, sum(sumsales#26)#100 AS sumsales#108] (57) ReusedExchange [Reuses operator id: 20] -Output [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#119, isEmpty#120] +Output [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#109, isEmpty#110] (58) HashAggregate [codegen id : 52] -Input [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#119, isEmpty#120] -Keys [8]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sum#109, isEmpty#110] +Keys [8]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12] Functions [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))] -Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25] -Results [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#25 AS sumsales#29] +Aggregate Attributes [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22] +Results [1]: [sum(coalesce(CheckOverflow((promote_precision(cast(ss_sales_price#4 as decimal(12,2))) * promote_precision(cast(ss_quantity#3 as decimal(12,2)))), DecimalType(18,2)), 0.00))#22 AS sumsales#26] (59) HashAggregate [codegen id : 52] -Input [1]: [sumsales#29] +Input [1]: [sumsales#26] Keys: [] -Functions [1]: [partial_sum(sumsales#29)] -Aggregate Attributes [2]: [sum#121, isEmpty#122] -Results [2]: [sum#123, isEmpty#124] +Functions [1]: [partial_sum(sumsales#26)] +Aggregate Attributes [2]: [sum#111, isEmpty#112] +Results [2]: [sum#113, isEmpty#114] (60) Exchange -Input [2]: [sum#123, isEmpty#124] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#125] +Input [2]: [sum#113, isEmpty#114] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11] (61) HashAggregate [codegen id : 53] -Input [2]: [sum#123, isEmpty#124] +Input [2]: [sum#113, isEmpty#114] Keys: [] -Functions [1]: [sum(sumsales#29)] -Aggregate Attributes [1]: [sum(sumsales#29)#126] -Results [9]: [null AS i_category#127, null AS i_class#128, null AS i_brand#129, null AS i_product_name#130, null AS d_year#131, null AS d_qoy#132, null AS d_moy#133, null AS s_store_id#134, sum(sumsales#29)#126 AS sumsales#135] +Functions [1]: [sum(sumsales#26)] +Aggregate Attributes [1]: [sum(sumsales#26)#115] +Results [9]: [null AS i_category#116, null AS i_class#117, null AS i_brand#118, null AS i_product_name#119, null AS d_year#120, null AS d_qoy#121, null AS d_moy#122, null AS s_store_id#123, sum(sumsales#26)#115 AS sumsales#124] (62) Union (63) Exchange -Input [9]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#26] -Arguments: hashpartitioning(i_category#17, 5), ENSURE_REQUIREMENTS, [id=#136] +Input [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#23] +Arguments: hashpartitioning(i_category#16, 5), ENSURE_REQUIREMENTS, [plan_id=12] (64) Sort [codegen id : 54] -Input [9]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#26] -Arguments: [i_category#17 ASC NULLS FIRST, sumsales#26 DESC NULLS LAST], false, 0 +Input [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#23] +Arguments: [i_category#16 ASC NULLS FIRST, sumsales#23 DESC NULLS LAST], false, 0 (65) Window -Input [9]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#26] -Arguments: [rank(sumsales#26) windowspecdefinition(i_category#17, sumsales#26 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#137], [i_category#17], [sumsales#26 DESC NULLS LAST] +Input [9]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#23] +Arguments: [rank(sumsales#23) windowspecdefinition(i_category#16, sumsales#23 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#125], [i_category#16], [sumsales#23 DESC NULLS LAST] (66) Filter [codegen id : 55] -Input [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#26, rk#137] -Condition : (rk#137 <= 100) +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#23, rk#125] +Condition : (rk#125 <= 100) (67) TakeOrderedAndProject -Input [10]: [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#26, rk#137] -Arguments: 100, [i_category#17 ASC NULLS FIRST, i_class#16 ASC NULLS FIRST, i_brand#15 ASC NULLS FIRST, i_product_name#18 ASC NULLS FIRST, d_year#8 ASC NULLS FIRST, d_qoy#10 ASC NULLS FIRST, d_moy#9 ASC NULLS FIRST, s_store_id#12 ASC NULLS FIRST, sumsales#26 ASC NULLS FIRST, rk#137 ASC NULLS FIRST], [i_category#17, i_class#16, i_brand#15, i_product_name#18, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#26, rk#137] +Input [10]: [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#23, rk#125] +Arguments: 100, [i_category#16 ASC NULLS FIRST, i_class#15 ASC NULLS FIRST, i_brand#14 ASC NULLS FIRST, i_product_name#17 ASC NULLS FIRST, d_year#8 ASC NULLS FIRST, d_qoy#10 ASC NULLS FIRST, d_moy#9 ASC NULLS FIRST, s_store_id#12 ASC NULLS FIRST, sumsales#23 ASC NULLS FIRST, rk#125 ASC NULLS FIRST], [i_category#16, i_class#15, i_brand#14, i_product_name#17, d_year#8, d_qoy#10, d_moy#9, s_store_id#12, sumsales#23, rk#125] ===== Subqueries ===== @@ -424,25 +424,25 @@ BroadcastExchange (72) (68) Scan parquet default.date_dim -Output [5]: [d_date_sk#7, d_month_seq#138, d_year#8, d_moy#9, d_qoy#10] +Output [5]: [d_date_sk#7, d_month_seq#126, d_year#8, d_moy#9, d_qoy#10] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_date_sk)] ReadSchema: struct (69) ColumnarToRow [codegen id : 1] -Input [5]: [d_date_sk#7, d_month_seq#138, d_year#8, d_moy#9, d_qoy#10] +Input [5]: [d_date_sk#7, d_month_seq#126, d_year#8, d_moy#9, d_qoy#10] (70) Filter [codegen id : 1] -Input [5]: [d_date_sk#7, d_month_seq#138, d_year#8, d_moy#9, d_qoy#10] -Condition : (((isnotnull(d_month_seq#138) AND (d_month_seq#138 >= 1212)) AND (d_month_seq#138 <= 1223)) AND isnotnull(d_date_sk#7)) +Input [5]: [d_date_sk#7, d_month_seq#126, d_year#8, d_moy#9, d_qoy#10] +Condition : (((isnotnull(d_month_seq#126) AND (d_month_seq#126 >= 1212)) AND (d_month_seq#126 <= 1223)) AND isnotnull(d_date_sk#7)) (71) Project [codegen id : 1] Output [4]: [d_date_sk#7, d_year#8, d_moy#9, d_qoy#10] -Input [5]: [d_date_sk#7, d_month_seq#138, d_year#8, d_moy#9, d_qoy#10] +Input [5]: [d_date_sk#7, d_month_seq#126, d_year#8, d_moy#9, d_qoy#10] (72) BroadcastExchange Input [4]: [d_date_sk#7, d_year#8, d_moy#9, d_qoy#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#139] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=13] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a.sf100/explain.txt index bd893d09165e1..1fae29d564ae6 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a.sf100/explain.txt @@ -140,7 +140,7 @@ Condition : isnotnull(s_store_sk#13) (19) BroadcastExchange Input [2]: [s_store_sk#13, s_state#14] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (20) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#9] @@ -155,39 +155,39 @@ Input [4]: [ss_store_sk#9, ss_net_profit#10, s_store_sk#13, s_state#14] Input [2]: [ss_net_profit#10, s_state#14] Keys [1]: [s_state#14] Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#10))] -Aggregate Attributes [1]: [sum#16] -Results [2]: [s_state#14, sum#17] +Aggregate Attributes [1]: [sum#15] +Results [2]: [s_state#14, sum#16] (23) Exchange -Input [2]: [s_state#14, sum#17] -Arguments: hashpartitioning(s_state#14, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [2]: [s_state#14, sum#16] +Arguments: hashpartitioning(s_state#14, 5), ENSURE_REQUIREMENTS, [plan_id=2] (24) HashAggregate [codegen id : 5] -Input [2]: [s_state#14, sum#17] +Input [2]: [s_state#14, sum#16] Keys [1]: [s_state#14] Functions [1]: [sum(UnscaledValue(ss_net_profit#10))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#10))#19] -Results [3]: [s_state#14, s_state#14, MakeDecimal(sum(UnscaledValue(ss_net_profit#10))#19,17,2) AS _w2#20] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#10))#17] +Results [3]: [s_state#14, s_state#14, MakeDecimal(sum(UnscaledValue(ss_net_profit#10))#17,17,2) AS _w2#18] (25) Sort [codegen id : 5] -Input [3]: [s_state#14, s_state#14, _w2#20] -Arguments: [s_state#14 ASC NULLS FIRST, _w2#20 DESC NULLS LAST], false, 0 +Input [3]: [s_state#14, s_state#14, _w2#18] +Arguments: [s_state#14 ASC NULLS FIRST, _w2#18 DESC NULLS LAST], false, 0 (26) Window -Input [3]: [s_state#14, s_state#14, _w2#20] -Arguments: [rank(_w2#20) windowspecdefinition(s_state#14, _w2#20 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS ranking#21], [s_state#14], [_w2#20 DESC NULLS LAST] +Input [3]: [s_state#14, s_state#14, _w2#18] +Arguments: [rank(_w2#18) windowspecdefinition(s_state#14, _w2#18 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS ranking#19], [s_state#14], [_w2#18 DESC NULLS LAST] (27) Filter [codegen id : 6] -Input [4]: [s_state#14, s_state#14, _w2#20, ranking#21] -Condition : (ranking#21 <= 5) +Input [4]: [s_state#14, s_state#14, _w2#18, ranking#19] +Condition : (ranking#19 <= 5) (28) Project [codegen id : 6] Output [1]: [s_state#14] -Input [4]: [s_state#14, s_state#14, _w2#20, ranking#21] +Input [4]: [s_state#14, s_state#14, _w2#18, ranking#19] (29) BroadcastExchange Input [1]: [s_state#14] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#22] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=3] (30) BroadcastHashJoin [codegen id : 7] Left keys [1]: [s_state#8] @@ -196,7 +196,7 @@ Join condition: None (31) BroadcastExchange Input [3]: [s_store_sk#6, s_county#7, s_state#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (32) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_store_sk#1] @@ -211,115 +211,115 @@ Input [5]: [ss_store_sk#1, ss_net_profit#2, s_store_sk#6, s_county#7, s_state#8] Input [3]: [ss_net_profit#2, s_county#7, s_state#8] Keys [2]: [s_state#8, s_county#7] Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum#24] -Results [3]: [s_state#8, s_county#7, sum#25] +Aggregate Attributes [1]: [sum#20] +Results [3]: [s_state#8, s_county#7, sum#21] (35) Exchange -Input [3]: [s_state#8, s_county#7, sum#25] -Arguments: hashpartitioning(s_state#8, s_county#7, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [3]: [s_state#8, s_county#7, sum#21] +Arguments: hashpartitioning(s_state#8, s_county#7, 5), ENSURE_REQUIREMENTS, [plan_id=5] (36) HashAggregate [codegen id : 9] -Input [3]: [s_state#8, s_county#7, sum#25] +Input [3]: [s_state#8, s_county#7, sum#21] Keys [2]: [s_state#8, s_county#7] Functions [1]: [sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#27] -Results [6]: [cast(MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#27,17,2) as decimal(27,2)) AS total_sum#28, s_state#8, s_county#7, 0 AS g_state#29, 0 AS g_county#30, 0 AS lochierarchy#31] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#22] +Results [6]: [cast(MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#22,17,2) as decimal(27,2)) AS total_sum#23, s_state#8, s_county#7, 0 AS g_state#24, 0 AS g_county#25, 0 AS lochierarchy#26] (37) ReusedExchange [Reuses operator id: 35] -Output [3]: [s_state#8, s_county#7, sum#32] +Output [3]: [s_state#8, s_county#7, sum#27] (38) HashAggregate [codegen id : 18] -Input [3]: [s_state#8, s_county#7, sum#32] +Input [3]: [s_state#8, s_county#7, sum#27] Keys [2]: [s_state#8, s_county#7] Functions [1]: [sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#27] -Results [2]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#27,17,2) AS total_sum#33, s_state#8] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#22] +Results [2]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#22,17,2) AS total_sum#28, s_state#8] (39) HashAggregate [codegen id : 18] -Input [2]: [total_sum#33, s_state#8] +Input [2]: [total_sum#28, s_state#8] Keys [1]: [s_state#8] -Functions [1]: [partial_sum(total_sum#33)] -Aggregate Attributes [2]: [sum#34, isEmpty#35] -Results [3]: [s_state#8, sum#36, isEmpty#37] +Functions [1]: [partial_sum(total_sum#28)] +Aggregate Attributes [2]: [sum#29, isEmpty#30] +Results [3]: [s_state#8, sum#31, isEmpty#32] (40) Exchange -Input [3]: [s_state#8, sum#36, isEmpty#37] -Arguments: hashpartitioning(s_state#8, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [3]: [s_state#8, sum#31, isEmpty#32] +Arguments: hashpartitioning(s_state#8, 5), ENSURE_REQUIREMENTS, [plan_id=6] (41) HashAggregate [codegen id : 19] -Input [3]: [s_state#8, sum#36, isEmpty#37] +Input [3]: [s_state#8, sum#31, isEmpty#32] Keys [1]: [s_state#8] -Functions [1]: [sum(total_sum#33)] -Aggregate Attributes [1]: [sum(total_sum#33)#39] -Results [6]: [sum(total_sum#33)#39 AS total_sum#40, s_state#8, null AS s_county#41, 0 AS g_state#42, 1 AS g_county#43, 1 AS lochierarchy#44] +Functions [1]: [sum(total_sum#28)] +Aggregate Attributes [1]: [sum(total_sum#28)#33] +Results [6]: [sum(total_sum#28)#33 AS total_sum#34, s_state#8, null AS s_county#35, 0 AS g_state#36, 1 AS g_county#37, 1 AS lochierarchy#38] (42) ReusedExchange [Reuses operator id: 35] -Output [3]: [s_state#8, s_county#7, sum#45] +Output [3]: [s_state#8, s_county#7, sum#39] (43) HashAggregate [codegen id : 28] -Input [3]: [s_state#8, s_county#7, sum#45] +Input [3]: [s_state#8, s_county#7, sum#39] Keys [2]: [s_state#8, s_county#7] Functions [1]: [sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#27] -Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#27,17,2) AS total_sum#33] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#22] +Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#22,17,2) AS total_sum#28] (44) HashAggregate [codegen id : 28] -Input [1]: [total_sum#33] +Input [1]: [total_sum#28] Keys: [] -Functions [1]: [partial_sum(total_sum#33)] -Aggregate Attributes [2]: [sum#46, isEmpty#47] -Results [2]: [sum#48, isEmpty#49] +Functions [1]: [partial_sum(total_sum#28)] +Aggregate Attributes [2]: [sum#40, isEmpty#41] +Results [2]: [sum#42, isEmpty#43] (45) Exchange -Input [2]: [sum#48, isEmpty#49] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#50] +Input [2]: [sum#42, isEmpty#43] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (46) HashAggregate [codegen id : 29] -Input [2]: [sum#48, isEmpty#49] +Input [2]: [sum#42, isEmpty#43] Keys: [] -Functions [1]: [sum(total_sum#33)] -Aggregate Attributes [1]: [sum(total_sum#33)#51] -Results [6]: [sum(total_sum#33)#51 AS total_sum#52, null AS s_state#53, null AS s_county#54, 1 AS g_state#55, 1 AS g_county#56, 2 AS lochierarchy#57] +Functions [1]: [sum(total_sum#28)] +Aggregate Attributes [1]: [sum(total_sum#28)#44] +Results [6]: [sum(total_sum#28)#44 AS total_sum#45, null AS s_state#46, null AS s_county#47, 1 AS g_state#48, 1 AS g_county#49, 2 AS lochierarchy#50] (47) Union (48) HashAggregate [codegen id : 30] -Input [6]: [total_sum#28, s_state#8, s_county#7, g_state#29, g_county#30, lochierarchy#31] -Keys [6]: [total_sum#28, s_state#8, s_county#7, g_state#29, g_county#30, lochierarchy#31] +Input [6]: [total_sum#23, s_state#8, s_county#7, g_state#24, g_county#25, lochierarchy#26] +Keys [6]: [total_sum#23, s_state#8, s_county#7, g_state#24, g_county#25, lochierarchy#26] Functions: [] Aggregate Attributes: [] -Results [6]: [total_sum#28, s_state#8, s_county#7, g_state#29, g_county#30, lochierarchy#31] +Results [6]: [total_sum#23, s_state#8, s_county#7, g_state#24, g_county#25, lochierarchy#26] (49) Exchange -Input [6]: [total_sum#28, s_state#8, s_county#7, g_state#29, g_county#30, lochierarchy#31] -Arguments: hashpartitioning(total_sum#28, s_state#8, s_county#7, g_state#29, g_county#30, lochierarchy#31, 5), ENSURE_REQUIREMENTS, [id=#58] +Input [6]: [total_sum#23, s_state#8, s_county#7, g_state#24, g_county#25, lochierarchy#26] +Arguments: hashpartitioning(total_sum#23, s_state#8, s_county#7, g_state#24, g_county#25, lochierarchy#26, 5), ENSURE_REQUIREMENTS, [plan_id=8] (50) HashAggregate [codegen id : 31] -Input [6]: [total_sum#28, s_state#8, s_county#7, g_state#29, g_county#30, lochierarchy#31] -Keys [6]: [total_sum#28, s_state#8, s_county#7, g_state#29, g_county#30, lochierarchy#31] +Input [6]: [total_sum#23, s_state#8, s_county#7, g_state#24, g_county#25, lochierarchy#26] +Keys [6]: [total_sum#23, s_state#8, s_county#7, g_state#24, g_county#25, lochierarchy#26] Functions: [] Aggregate Attributes: [] -Results [5]: [total_sum#28, s_state#8, s_county#7, lochierarchy#31, CASE WHEN (g_county#30 = 0) THEN s_state#8 END AS _w0#59] +Results [5]: [total_sum#23, s_state#8, s_county#7, lochierarchy#26, CASE WHEN (g_county#25 = 0) THEN s_state#8 END AS _w0#51] (51) Exchange -Input [5]: [total_sum#28, s_state#8, s_county#7, lochierarchy#31, _w0#59] -Arguments: hashpartitioning(lochierarchy#31, _w0#59, 5), ENSURE_REQUIREMENTS, [id=#60] +Input [5]: [total_sum#23, s_state#8, s_county#7, lochierarchy#26, _w0#51] +Arguments: hashpartitioning(lochierarchy#26, _w0#51, 5), ENSURE_REQUIREMENTS, [plan_id=9] (52) Sort [codegen id : 32] -Input [5]: [total_sum#28, s_state#8, s_county#7, lochierarchy#31, _w0#59] -Arguments: [lochierarchy#31 ASC NULLS FIRST, _w0#59 ASC NULLS FIRST, total_sum#28 DESC NULLS LAST], false, 0 +Input [5]: [total_sum#23, s_state#8, s_county#7, lochierarchy#26, _w0#51] +Arguments: [lochierarchy#26 ASC NULLS FIRST, _w0#51 ASC NULLS FIRST, total_sum#23 DESC NULLS LAST], false, 0 (53) Window -Input [5]: [total_sum#28, s_state#8, s_county#7, lochierarchy#31, _w0#59] -Arguments: [rank(total_sum#28) windowspecdefinition(lochierarchy#31, _w0#59, total_sum#28 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#61], [lochierarchy#31, _w0#59], [total_sum#28 DESC NULLS LAST] +Input [5]: [total_sum#23, s_state#8, s_county#7, lochierarchy#26, _w0#51] +Arguments: [rank(total_sum#23) windowspecdefinition(lochierarchy#26, _w0#51, total_sum#23 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#52], [lochierarchy#26, _w0#51], [total_sum#23 DESC NULLS LAST] (54) Project [codegen id : 33] -Output [5]: [total_sum#28, s_state#8, s_county#7, lochierarchy#31, rank_within_parent#61] -Input [6]: [total_sum#28, s_state#8, s_county#7, lochierarchy#31, _w0#59, rank_within_parent#61] +Output [5]: [total_sum#23, s_state#8, s_county#7, lochierarchy#26, rank_within_parent#52] +Input [6]: [total_sum#23, s_state#8, s_county#7, lochierarchy#26, _w0#51, rank_within_parent#52] (55) TakeOrderedAndProject -Input [5]: [total_sum#28, s_state#8, s_county#7, lochierarchy#31, rank_within_parent#61] -Arguments: 100, [lochierarchy#31 DESC NULLS LAST, CASE WHEN (lochierarchy#31 = 0) THEN s_state#8 END ASC NULLS FIRST, rank_within_parent#61 ASC NULLS FIRST], [total_sum#28, s_state#8, s_county#7, lochierarchy#31, rank_within_parent#61] +Input [5]: [total_sum#23, s_state#8, s_county#7, lochierarchy#26, rank_within_parent#52] +Arguments: 100, [lochierarchy#26 DESC NULLS LAST, CASE WHEN (lochierarchy#26 = 0) THEN s_state#8 END ASC NULLS FIRST, rank_within_parent#52 ASC NULLS FIRST], [total_sum#23, s_state#8, s_county#7, lochierarchy#26, rank_within_parent#52] ===== Subqueries ===== @@ -332,26 +332,26 @@ BroadcastExchange (60) (56) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_month_seq#62] +Output [2]: [d_date_sk#5, d_month_seq#53] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_date_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#62] +Input [2]: [d_date_sk#5, d_month_seq#53] (58) Filter [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#62] -Condition : (((isnotnull(d_month_seq#62) AND (d_month_seq#62 >= 1212)) AND (d_month_seq#62 <= 1223)) AND isnotnull(d_date_sk#5)) +Input [2]: [d_date_sk#5, d_month_seq#53] +Condition : (((isnotnull(d_month_seq#53) AND (d_month_seq#53 >= 1212)) AND (d_month_seq#53 <= 1223)) AND isnotnull(d_date_sk#5)) (59) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_month_seq#62] +Input [2]: [d_date_sk#5, d_month_seq#53] (60) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#63] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] Subquery:2 Hosting operator id = 10 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a/explain.txt index 2bfa05e382559..e497c7d198b5b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q70a/explain.txt @@ -128,7 +128,7 @@ Condition : isnotnull(s_store_sk#12) (16) BroadcastExchange Input [2]: [s_store_sk#12, s_state#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (17) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_store_sk#9] @@ -140,54 +140,54 @@ Output [3]: [ss_net_profit#10, ss_sold_date_sk#11, s_state#13] Input [5]: [ss_store_sk#9, ss_net_profit#10, ss_sold_date_sk#11, s_store_sk#12, s_state#13] (19) ReusedExchange [Reuses operator id: 60] -Output [1]: [d_date_sk#15] +Output [1]: [d_date_sk#14] (20) BroadcastHashJoin [codegen id : 4] Left keys [1]: [ss_sold_date_sk#11] -Right keys [1]: [d_date_sk#15] +Right keys [1]: [d_date_sk#14] Join condition: None (21) Project [codegen id : 4] Output [2]: [ss_net_profit#10, s_state#13] -Input [4]: [ss_net_profit#10, ss_sold_date_sk#11, s_state#13, d_date_sk#15] +Input [4]: [ss_net_profit#10, ss_sold_date_sk#11, s_state#13, d_date_sk#14] (22) HashAggregate [codegen id : 4] Input [2]: [ss_net_profit#10, s_state#13] Keys [1]: [s_state#13] Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#10))] -Aggregate Attributes [1]: [sum#16] -Results [2]: [s_state#13, sum#17] +Aggregate Attributes [1]: [sum#15] +Results [2]: [s_state#13, sum#16] (23) Exchange -Input [2]: [s_state#13, sum#17] -Arguments: hashpartitioning(s_state#13, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [2]: [s_state#13, sum#16] +Arguments: hashpartitioning(s_state#13, 5), ENSURE_REQUIREMENTS, [plan_id=2] (24) HashAggregate [codegen id : 5] -Input [2]: [s_state#13, sum#17] +Input [2]: [s_state#13, sum#16] Keys [1]: [s_state#13] Functions [1]: [sum(UnscaledValue(ss_net_profit#10))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#10))#19] -Results [3]: [s_state#13, s_state#13, MakeDecimal(sum(UnscaledValue(ss_net_profit#10))#19,17,2) AS _w2#20] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#10))#17] +Results [3]: [s_state#13, s_state#13, MakeDecimal(sum(UnscaledValue(ss_net_profit#10))#17,17,2) AS _w2#18] (25) Sort [codegen id : 5] -Input [3]: [s_state#13, s_state#13, _w2#20] -Arguments: [s_state#13 ASC NULLS FIRST, _w2#20 DESC NULLS LAST], false, 0 +Input [3]: [s_state#13, s_state#13, _w2#18] +Arguments: [s_state#13 ASC NULLS FIRST, _w2#18 DESC NULLS LAST], false, 0 (26) Window -Input [3]: [s_state#13, s_state#13, _w2#20] -Arguments: [rank(_w2#20) windowspecdefinition(s_state#13, _w2#20 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS ranking#21], [s_state#13], [_w2#20 DESC NULLS LAST] +Input [3]: [s_state#13, s_state#13, _w2#18] +Arguments: [rank(_w2#18) windowspecdefinition(s_state#13, _w2#18 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS ranking#19], [s_state#13], [_w2#18 DESC NULLS LAST] (27) Filter [codegen id : 6] -Input [4]: [s_state#13, s_state#13, _w2#20, ranking#21] -Condition : (ranking#21 <= 5) +Input [4]: [s_state#13, s_state#13, _w2#18, ranking#19] +Condition : (ranking#19 <= 5) (28) Project [codegen id : 6] Output [1]: [s_state#13] -Input [4]: [s_state#13, s_state#13, _w2#20, ranking#21] +Input [4]: [s_state#13, s_state#13, _w2#18, ranking#19] (29) BroadcastExchange Input [1]: [s_state#13] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#22] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=3] (30) BroadcastHashJoin [codegen id : 7] Left keys [1]: [s_state#8] @@ -196,7 +196,7 @@ Join condition: None (31) BroadcastExchange Input [3]: [s_store_sk#6, s_county#7, s_state#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4] (32) BroadcastHashJoin [codegen id : 8] Left keys [1]: [ss_store_sk#1] @@ -211,115 +211,115 @@ Input [5]: [ss_store_sk#1, ss_net_profit#2, s_store_sk#6, s_county#7, s_state#8] Input [3]: [ss_net_profit#2, s_county#7, s_state#8] Keys [2]: [s_state#8, s_county#7] Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum#24] -Results [3]: [s_state#8, s_county#7, sum#25] +Aggregate Attributes [1]: [sum#20] +Results [3]: [s_state#8, s_county#7, sum#21] (35) Exchange -Input [3]: [s_state#8, s_county#7, sum#25] -Arguments: hashpartitioning(s_state#8, s_county#7, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [3]: [s_state#8, s_county#7, sum#21] +Arguments: hashpartitioning(s_state#8, s_county#7, 5), ENSURE_REQUIREMENTS, [plan_id=5] (36) HashAggregate [codegen id : 9] -Input [3]: [s_state#8, s_county#7, sum#25] +Input [3]: [s_state#8, s_county#7, sum#21] Keys [2]: [s_state#8, s_county#7] Functions [1]: [sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#27] -Results [6]: [cast(MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#27,17,2) as decimal(27,2)) AS total_sum#28, s_state#8, s_county#7, 0 AS g_state#29, 0 AS g_county#30, 0 AS lochierarchy#31] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#22] +Results [6]: [cast(MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#22,17,2) as decimal(27,2)) AS total_sum#23, s_state#8, s_county#7, 0 AS g_state#24, 0 AS g_county#25, 0 AS lochierarchy#26] (37) ReusedExchange [Reuses operator id: 35] -Output [3]: [s_state#8, s_county#7, sum#32] +Output [3]: [s_state#8, s_county#7, sum#27] (38) HashAggregate [codegen id : 18] -Input [3]: [s_state#8, s_county#7, sum#32] +Input [3]: [s_state#8, s_county#7, sum#27] Keys [2]: [s_state#8, s_county#7] Functions [1]: [sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#27] -Results [2]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#27,17,2) AS total_sum#33, s_state#8] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#22] +Results [2]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#22,17,2) AS total_sum#28, s_state#8] (39) HashAggregate [codegen id : 18] -Input [2]: [total_sum#33, s_state#8] +Input [2]: [total_sum#28, s_state#8] Keys [1]: [s_state#8] -Functions [1]: [partial_sum(total_sum#33)] -Aggregate Attributes [2]: [sum#34, isEmpty#35] -Results [3]: [s_state#8, sum#36, isEmpty#37] +Functions [1]: [partial_sum(total_sum#28)] +Aggregate Attributes [2]: [sum#29, isEmpty#30] +Results [3]: [s_state#8, sum#31, isEmpty#32] (40) Exchange -Input [3]: [s_state#8, sum#36, isEmpty#37] -Arguments: hashpartitioning(s_state#8, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [3]: [s_state#8, sum#31, isEmpty#32] +Arguments: hashpartitioning(s_state#8, 5), ENSURE_REQUIREMENTS, [plan_id=6] (41) HashAggregate [codegen id : 19] -Input [3]: [s_state#8, sum#36, isEmpty#37] +Input [3]: [s_state#8, sum#31, isEmpty#32] Keys [1]: [s_state#8] -Functions [1]: [sum(total_sum#33)] -Aggregate Attributes [1]: [sum(total_sum#33)#39] -Results [6]: [sum(total_sum#33)#39 AS total_sum#40, s_state#8, null AS s_county#41, 0 AS g_state#42, 1 AS g_county#43, 1 AS lochierarchy#44] +Functions [1]: [sum(total_sum#28)] +Aggregate Attributes [1]: [sum(total_sum#28)#33] +Results [6]: [sum(total_sum#28)#33 AS total_sum#34, s_state#8, null AS s_county#35, 0 AS g_state#36, 1 AS g_county#37, 1 AS lochierarchy#38] (42) ReusedExchange [Reuses operator id: 35] -Output [3]: [s_state#8, s_county#7, sum#45] +Output [3]: [s_state#8, s_county#7, sum#39] (43) HashAggregate [codegen id : 28] -Input [3]: [s_state#8, s_county#7, sum#45] +Input [3]: [s_state#8, s_county#7, sum#39] Keys [2]: [s_state#8, s_county#7] Functions [1]: [sum(UnscaledValue(ss_net_profit#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#27] -Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#27,17,2) AS total_sum#33] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#22] +Results [1]: [MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#22,17,2) AS total_sum#28] (44) HashAggregate [codegen id : 28] -Input [1]: [total_sum#33] +Input [1]: [total_sum#28] Keys: [] -Functions [1]: [partial_sum(total_sum#33)] -Aggregate Attributes [2]: [sum#46, isEmpty#47] -Results [2]: [sum#48, isEmpty#49] +Functions [1]: [partial_sum(total_sum#28)] +Aggregate Attributes [2]: [sum#40, isEmpty#41] +Results [2]: [sum#42, isEmpty#43] (45) Exchange -Input [2]: [sum#48, isEmpty#49] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#50] +Input [2]: [sum#42, isEmpty#43] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (46) HashAggregate [codegen id : 29] -Input [2]: [sum#48, isEmpty#49] +Input [2]: [sum#42, isEmpty#43] Keys: [] -Functions [1]: [sum(total_sum#33)] -Aggregate Attributes [1]: [sum(total_sum#33)#51] -Results [6]: [sum(total_sum#33)#51 AS total_sum#52, null AS s_state#53, null AS s_county#54, 1 AS g_state#55, 1 AS g_county#56, 2 AS lochierarchy#57] +Functions [1]: [sum(total_sum#28)] +Aggregate Attributes [1]: [sum(total_sum#28)#44] +Results [6]: [sum(total_sum#28)#44 AS total_sum#45, null AS s_state#46, null AS s_county#47, 1 AS g_state#48, 1 AS g_county#49, 2 AS lochierarchy#50] (47) Union (48) HashAggregate [codegen id : 30] -Input [6]: [total_sum#28, s_state#8, s_county#7, g_state#29, g_county#30, lochierarchy#31] -Keys [6]: [total_sum#28, s_state#8, s_county#7, g_state#29, g_county#30, lochierarchy#31] +Input [6]: [total_sum#23, s_state#8, s_county#7, g_state#24, g_county#25, lochierarchy#26] +Keys [6]: [total_sum#23, s_state#8, s_county#7, g_state#24, g_county#25, lochierarchy#26] Functions: [] Aggregate Attributes: [] -Results [6]: [total_sum#28, s_state#8, s_county#7, g_state#29, g_county#30, lochierarchy#31] +Results [6]: [total_sum#23, s_state#8, s_county#7, g_state#24, g_county#25, lochierarchy#26] (49) Exchange -Input [6]: [total_sum#28, s_state#8, s_county#7, g_state#29, g_county#30, lochierarchy#31] -Arguments: hashpartitioning(total_sum#28, s_state#8, s_county#7, g_state#29, g_county#30, lochierarchy#31, 5), ENSURE_REQUIREMENTS, [id=#58] +Input [6]: [total_sum#23, s_state#8, s_county#7, g_state#24, g_county#25, lochierarchy#26] +Arguments: hashpartitioning(total_sum#23, s_state#8, s_county#7, g_state#24, g_county#25, lochierarchy#26, 5), ENSURE_REQUIREMENTS, [plan_id=8] (50) HashAggregate [codegen id : 31] -Input [6]: [total_sum#28, s_state#8, s_county#7, g_state#29, g_county#30, lochierarchy#31] -Keys [6]: [total_sum#28, s_state#8, s_county#7, g_state#29, g_county#30, lochierarchy#31] +Input [6]: [total_sum#23, s_state#8, s_county#7, g_state#24, g_county#25, lochierarchy#26] +Keys [6]: [total_sum#23, s_state#8, s_county#7, g_state#24, g_county#25, lochierarchy#26] Functions: [] Aggregate Attributes: [] -Results [5]: [total_sum#28, s_state#8, s_county#7, lochierarchy#31, CASE WHEN (g_county#30 = 0) THEN s_state#8 END AS _w0#59] +Results [5]: [total_sum#23, s_state#8, s_county#7, lochierarchy#26, CASE WHEN (g_county#25 = 0) THEN s_state#8 END AS _w0#51] (51) Exchange -Input [5]: [total_sum#28, s_state#8, s_county#7, lochierarchy#31, _w0#59] -Arguments: hashpartitioning(lochierarchy#31, _w0#59, 5), ENSURE_REQUIREMENTS, [id=#60] +Input [5]: [total_sum#23, s_state#8, s_county#7, lochierarchy#26, _w0#51] +Arguments: hashpartitioning(lochierarchy#26, _w0#51, 5), ENSURE_REQUIREMENTS, [plan_id=9] (52) Sort [codegen id : 32] -Input [5]: [total_sum#28, s_state#8, s_county#7, lochierarchy#31, _w0#59] -Arguments: [lochierarchy#31 ASC NULLS FIRST, _w0#59 ASC NULLS FIRST, total_sum#28 DESC NULLS LAST], false, 0 +Input [5]: [total_sum#23, s_state#8, s_county#7, lochierarchy#26, _w0#51] +Arguments: [lochierarchy#26 ASC NULLS FIRST, _w0#51 ASC NULLS FIRST, total_sum#23 DESC NULLS LAST], false, 0 (53) Window -Input [5]: [total_sum#28, s_state#8, s_county#7, lochierarchy#31, _w0#59] -Arguments: [rank(total_sum#28) windowspecdefinition(lochierarchy#31, _w0#59, total_sum#28 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#61], [lochierarchy#31, _w0#59], [total_sum#28 DESC NULLS LAST] +Input [5]: [total_sum#23, s_state#8, s_county#7, lochierarchy#26, _w0#51] +Arguments: [rank(total_sum#23) windowspecdefinition(lochierarchy#26, _w0#51, total_sum#23 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#52], [lochierarchy#26, _w0#51], [total_sum#23 DESC NULLS LAST] (54) Project [codegen id : 33] -Output [5]: [total_sum#28, s_state#8, s_county#7, lochierarchy#31, rank_within_parent#61] -Input [6]: [total_sum#28, s_state#8, s_county#7, lochierarchy#31, _w0#59, rank_within_parent#61] +Output [5]: [total_sum#23, s_state#8, s_county#7, lochierarchy#26, rank_within_parent#52] +Input [6]: [total_sum#23, s_state#8, s_county#7, lochierarchy#26, _w0#51, rank_within_parent#52] (55) TakeOrderedAndProject -Input [5]: [total_sum#28, s_state#8, s_county#7, lochierarchy#31, rank_within_parent#61] -Arguments: 100, [lochierarchy#31 DESC NULLS LAST, CASE WHEN (lochierarchy#31 = 0) THEN s_state#8 END ASC NULLS FIRST, rank_within_parent#61 ASC NULLS FIRST], [total_sum#28, s_state#8, s_county#7, lochierarchy#31, rank_within_parent#61] +Input [5]: [total_sum#23, s_state#8, s_county#7, lochierarchy#26, rank_within_parent#52] +Arguments: 100, [lochierarchy#26 DESC NULLS LAST, CASE WHEN (lochierarchy#26 = 0) THEN s_state#8 END ASC NULLS FIRST, rank_within_parent#52 ASC NULLS FIRST], [total_sum#23, s_state#8, s_county#7, lochierarchy#26, rank_within_parent#52] ===== Subqueries ===== @@ -332,26 +332,26 @@ BroadcastExchange (60) (56) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_month_seq#62] +Output [2]: [d_date_sk#5, d_month_seq#53] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_date_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#62] +Input [2]: [d_date_sk#5, d_month_seq#53] (58) Filter [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#62] -Condition : (((isnotnull(d_month_seq#62) AND (d_month_seq#62 >= 1212)) AND (d_month_seq#62 <= 1223)) AND isnotnull(d_date_sk#5)) +Input [2]: [d_date_sk#5, d_month_seq#53] +Condition : (((isnotnull(d_month_seq#53) AND (d_month_seq#53 >= 1212)) AND (d_month_seq#53 <= 1223)) AND isnotnull(d_date_sk#5)) (59) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_month_seq#62] +Input [2]: [d_date_sk#5, d_month_seq#53] (60) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#63] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=10] Subquery:2 Hosting operator id = 10 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#4 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q72.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q72.sf100/explain.txt index e5e42f2be1366..72274b888a6a2 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q72.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q72.sf100/explain.txt @@ -106,7 +106,7 @@ Input [2]: [hd_demo_sk#10, hd_buy_potential#11] (8) BroadcastExchange Input [1]: [hd_demo_sk#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_bill_hdemo_sk#3] @@ -118,272 +118,272 @@ Output [7]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#4, cs_promo_sk#5, Input [9]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, hd_demo_sk#10] (11) Scan parquet default.customer_demographics -Output [2]: [cd_demo_sk#13, cd_marital_status#14] +Output [2]: [cd_demo_sk#12, cd_marital_status#13] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_marital_status), EqualTo(cd_marital_status,M), IsNotNull(cd_demo_sk)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [2]: [cd_demo_sk#13, cd_marital_status#14] +Input [2]: [cd_demo_sk#12, cd_marital_status#13] (13) Filter [codegen id : 2] -Input [2]: [cd_demo_sk#13, cd_marital_status#14] -Condition : ((isnotnull(cd_marital_status#14) AND (cd_marital_status#14 = M)) AND isnotnull(cd_demo_sk#13)) +Input [2]: [cd_demo_sk#12, cd_marital_status#13] +Condition : ((isnotnull(cd_marital_status#13) AND (cd_marital_status#13 = M)) AND isnotnull(cd_demo_sk#12)) (14) Project [codegen id : 2] -Output [1]: [cd_demo_sk#13] -Input [2]: [cd_demo_sk#13, cd_marital_status#14] +Output [1]: [cd_demo_sk#12] +Input [2]: [cd_demo_sk#12, cd_marital_status#13] (15) BroadcastExchange -Input [1]: [cd_demo_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15] +Input [1]: [cd_demo_sk#12] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_bill_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#13] +Right keys [1]: [cd_demo_sk#12] Join condition: None (17) Project [codegen id : 4] Output [6]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8] -Input [8]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, cd_demo_sk#13] +Input [8]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, cd_demo_sk#12] (18) Scan parquet default.date_dim -Output [2]: [d_date_sk#16, d_date#17] +Output [2]: [d_date_sk#14, d_date#15] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), IsNotNull(d_date_sk)] ReadSchema: struct (19) ColumnarToRow [codegen id : 3] -Input [2]: [d_date_sk#16, d_date#17] +Input [2]: [d_date_sk#14, d_date#15] (20) Filter [codegen id : 3] -Input [2]: [d_date_sk#16, d_date#17] -Condition : (isnotnull(d_date#17) AND isnotnull(d_date_sk#16)) +Input [2]: [d_date_sk#14, d_date#15] +Condition : (isnotnull(d_date#15) AND isnotnull(d_date_sk#14)) (21) BroadcastExchange -Input [2]: [d_date_sk#16, d_date#17] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#18] +Input [2]: [d_date_sk#14, d_date#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (22) BroadcastHashJoin [codegen id : 4] Left keys [1]: [cs_ship_date_sk#1] -Right keys [1]: [d_date_sk#16] +Right keys [1]: [d_date_sk#14] Join condition: None (23) Project [codegen id : 4] -Output [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#17] -Input [8]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date_sk#16, d_date#17] +Output [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#15] +Input [8]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date_sk#14, d_date#15] (24) Exchange -Input [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#17] -Arguments: hashpartitioning(cs_item_sk#4, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#15] +Arguments: hashpartitioning(cs_item_sk#4, 5), ENSURE_REQUIREMENTS, [plan_id=4] (25) Sort [codegen id : 5] -Input [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#17] +Input [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#15] Arguments: [cs_item_sk#4 ASC NULLS FIRST], false, 0 (26) Scan parquet default.item -Output [2]: [i_item_sk#20, i_item_desc#21] +Output [2]: [i_item_sk#16, i_item_desc#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (27) ColumnarToRow [codegen id : 6] -Input [2]: [i_item_sk#20, i_item_desc#21] +Input [2]: [i_item_sk#16, i_item_desc#17] (28) Filter [codegen id : 6] -Input [2]: [i_item_sk#20, i_item_desc#21] -Condition : isnotnull(i_item_sk#20) +Input [2]: [i_item_sk#16, i_item_desc#17] +Condition : isnotnull(i_item_sk#16) (29) Exchange -Input [2]: [i_item_sk#20, i_item_desc#21] -Arguments: hashpartitioning(i_item_sk#20, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [2]: [i_item_sk#16, i_item_desc#17] +Arguments: hashpartitioning(i_item_sk#16, 5), ENSURE_REQUIREMENTS, [plan_id=5] (30) Sort [codegen id : 7] -Input [2]: [i_item_sk#20, i_item_desc#21] -Arguments: [i_item_sk#20 ASC NULLS FIRST], false, 0 +Input [2]: [i_item_sk#16, i_item_desc#17] +Arguments: [i_item_sk#16 ASC NULLS FIRST], false, 0 (31) SortMergeJoin [codegen id : 10] Left keys [1]: [cs_item_sk#4] -Right keys [1]: [i_item_sk#20] +Right keys [1]: [i_item_sk#16] Join condition: None (32) Project [codegen id : 10] -Output [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#17, i_item_desc#21] -Input [8]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#17, i_item_sk#20, i_item_desc#21] +Output [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#15, i_item_desc#17] +Input [8]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#15, i_item_sk#16, i_item_desc#17] (33) ReusedExchange [Reuses operator id: 81] -Output [4]: [d_date_sk#23, d_date#24, d_week_seq#25, d_date_sk#26] +Output [4]: [d_date_sk#18, d_date#19, d_week_seq#20, d_date_sk#21] (34) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_sold_date_sk#8] -Right keys [1]: [d_date_sk#23] -Join condition: (d_date#17 > date_add(d_date#24, 5)) +Right keys [1]: [d_date_sk#18] +Join condition: (d_date#15 > date_add(d_date#19, 5)) (35) Project [codegen id : 10] -Output [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#21, d_week_seq#25, d_date_sk#26] -Input [11]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#17, i_item_desc#21, d_date_sk#23, d_date#24, d_week_seq#25, d_date_sk#26] +Output [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#17, d_week_seq#20, d_date_sk#21] +Input [11]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, d_date#15, i_item_desc#17, d_date_sk#18, d_date#19, d_week_seq#20, d_date_sk#21] (36) Exchange -Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#21, d_week_seq#25, d_date_sk#26] -Arguments: hashpartitioning(cs_item_sk#4, d_date_sk#26, 5), ENSURE_REQUIREMENTS, [id=#27] +Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#17, d_week_seq#20, d_date_sk#21] +Arguments: hashpartitioning(cs_item_sk#4, d_date_sk#21, 5), ENSURE_REQUIREMENTS, [plan_id=6] (37) Sort [codegen id : 11] -Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#21, d_week_seq#25, d_date_sk#26] -Arguments: [cs_item_sk#4 ASC NULLS FIRST, d_date_sk#26 ASC NULLS FIRST], false, 0 +Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#17, d_week_seq#20, d_date_sk#21] +Arguments: [cs_item_sk#4 ASC NULLS FIRST, d_date_sk#21 ASC NULLS FIRST], false, 0 (38) Scan parquet default.inventory -Output [4]: [inv_item_sk#28, inv_warehouse_sk#29, inv_quantity_on_hand#30, inv_date_sk#31] +Output [4]: [inv_item_sk#22, inv_warehouse_sk#23, inv_quantity_on_hand#24, inv_date_sk#25] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(inv_date_sk#31), dynamicpruningexpression(true)] +PartitionFilters: [isnotnull(inv_date_sk#25), dynamicpruningexpression(true)] PushedFilters: [IsNotNull(inv_quantity_on_hand), IsNotNull(inv_item_sk), IsNotNull(inv_warehouse_sk)] ReadSchema: struct (39) ColumnarToRow [codegen id : 13] -Input [4]: [inv_item_sk#28, inv_warehouse_sk#29, inv_quantity_on_hand#30, inv_date_sk#31] +Input [4]: [inv_item_sk#22, inv_warehouse_sk#23, inv_quantity_on_hand#24, inv_date_sk#25] (40) Filter [codegen id : 13] -Input [4]: [inv_item_sk#28, inv_warehouse_sk#29, inv_quantity_on_hand#30, inv_date_sk#31] -Condition : ((isnotnull(inv_quantity_on_hand#30) AND isnotnull(inv_item_sk#28)) AND isnotnull(inv_warehouse_sk#29)) +Input [4]: [inv_item_sk#22, inv_warehouse_sk#23, inv_quantity_on_hand#24, inv_date_sk#25] +Condition : ((isnotnull(inv_quantity_on_hand#24) AND isnotnull(inv_item_sk#22)) AND isnotnull(inv_warehouse_sk#23)) (41) Scan parquet default.warehouse -Output [2]: [w_warehouse_sk#32, w_warehouse_name#33] +Output [2]: [w_warehouse_sk#26, w_warehouse_name#27] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (42) ColumnarToRow [codegen id : 12] -Input [2]: [w_warehouse_sk#32, w_warehouse_name#33] +Input [2]: [w_warehouse_sk#26, w_warehouse_name#27] (43) Filter [codegen id : 12] -Input [2]: [w_warehouse_sk#32, w_warehouse_name#33] -Condition : isnotnull(w_warehouse_sk#32) +Input [2]: [w_warehouse_sk#26, w_warehouse_name#27] +Condition : isnotnull(w_warehouse_sk#26) (44) BroadcastExchange -Input [2]: [w_warehouse_sk#32, w_warehouse_name#33] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#34] +Input [2]: [w_warehouse_sk#26, w_warehouse_name#27] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (45) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [inv_warehouse_sk#29] -Right keys [1]: [w_warehouse_sk#32] +Left keys [1]: [inv_warehouse_sk#23] +Right keys [1]: [w_warehouse_sk#26] Join condition: None (46) Project [codegen id : 13] -Output [4]: [inv_item_sk#28, inv_quantity_on_hand#30, inv_date_sk#31, w_warehouse_name#33] -Input [6]: [inv_item_sk#28, inv_warehouse_sk#29, inv_quantity_on_hand#30, inv_date_sk#31, w_warehouse_sk#32, w_warehouse_name#33] +Output [4]: [inv_item_sk#22, inv_quantity_on_hand#24, inv_date_sk#25, w_warehouse_name#27] +Input [6]: [inv_item_sk#22, inv_warehouse_sk#23, inv_quantity_on_hand#24, inv_date_sk#25, w_warehouse_sk#26, w_warehouse_name#27] (47) Exchange -Input [4]: [inv_item_sk#28, inv_quantity_on_hand#30, inv_date_sk#31, w_warehouse_name#33] -Arguments: hashpartitioning(inv_item_sk#28, inv_date_sk#31, 5), ENSURE_REQUIREMENTS, [id=#35] +Input [4]: [inv_item_sk#22, inv_quantity_on_hand#24, inv_date_sk#25, w_warehouse_name#27] +Arguments: hashpartitioning(inv_item_sk#22, inv_date_sk#25, 5), ENSURE_REQUIREMENTS, [plan_id=8] (48) Sort [codegen id : 14] -Input [4]: [inv_item_sk#28, inv_quantity_on_hand#30, inv_date_sk#31, w_warehouse_name#33] -Arguments: [inv_item_sk#28 ASC NULLS FIRST, inv_date_sk#31 ASC NULLS FIRST], false, 0 +Input [4]: [inv_item_sk#22, inv_quantity_on_hand#24, inv_date_sk#25, w_warehouse_name#27] +Arguments: [inv_item_sk#22 ASC NULLS FIRST, inv_date_sk#25 ASC NULLS FIRST], false, 0 (49) SortMergeJoin [codegen id : 16] -Left keys [2]: [cs_item_sk#4, d_date_sk#26] -Right keys [2]: [inv_item_sk#28, inv_date_sk#31] -Join condition: (inv_quantity_on_hand#30 < cs_quantity#7) +Left keys [2]: [cs_item_sk#4, d_date_sk#21] +Right keys [2]: [inv_item_sk#22, inv_date_sk#25] +Join condition: (inv_quantity_on_hand#24 < cs_quantity#7) (50) Project [codegen id : 16] -Output [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#33, i_item_desc#21, d_week_seq#25] -Input [11]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#21, d_week_seq#25, d_date_sk#26, inv_item_sk#28, inv_quantity_on_hand#30, inv_date_sk#31, w_warehouse_name#33] +Output [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#27, i_item_desc#17, d_week_seq#20] +Input [11]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, i_item_desc#17, d_week_seq#20, d_date_sk#21, inv_item_sk#22, inv_quantity_on_hand#24, inv_date_sk#25, w_warehouse_name#27] (51) Scan parquet default.promotion -Output [1]: [p_promo_sk#36] +Output [1]: [p_promo_sk#28] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_promo_sk)] ReadSchema: struct (52) ColumnarToRow [codegen id : 15] -Input [1]: [p_promo_sk#36] +Input [1]: [p_promo_sk#28] (53) Filter [codegen id : 15] -Input [1]: [p_promo_sk#36] -Condition : isnotnull(p_promo_sk#36) +Input [1]: [p_promo_sk#28] +Condition : isnotnull(p_promo_sk#28) (54) BroadcastExchange -Input [1]: [p_promo_sk#36] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#37] +Input [1]: [p_promo_sk#28] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] (55) BroadcastHashJoin [codegen id : 16] Left keys [1]: [cs_promo_sk#5] -Right keys [1]: [p_promo_sk#36] +Right keys [1]: [p_promo_sk#28] Join condition: None (56) Project [codegen id : 16] -Output [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#33, i_item_desc#21, d_week_seq#25] -Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#33, i_item_desc#21, d_week_seq#25, p_promo_sk#36] +Output [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#27, i_item_desc#17, d_week_seq#20] +Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#27, i_item_desc#17, d_week_seq#20, p_promo_sk#28] (57) Exchange -Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#33, i_item_desc#21, d_week_seq#25] -Arguments: hashpartitioning(cs_item_sk#4, cs_order_number#6, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#27, i_item_desc#17, d_week_seq#20] +Arguments: hashpartitioning(cs_item_sk#4, cs_order_number#6, 5), ENSURE_REQUIREMENTS, [plan_id=10] (58) Sort [codegen id : 17] -Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#33, i_item_desc#21, d_week_seq#25] +Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#27, i_item_desc#17, d_week_seq#20] Arguments: [cs_item_sk#4 ASC NULLS FIRST, cs_order_number#6 ASC NULLS FIRST], false, 0 (59) Scan parquet default.catalog_returns -Output [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] +Output [3]: [cr_item_sk#29, cr_order_number#30, cr_returned_date_sk#31] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct (60) ColumnarToRow [codegen id : 18] -Input [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] +Input [3]: [cr_item_sk#29, cr_order_number#30, cr_returned_date_sk#31] (61) Filter [codegen id : 18] -Input [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] -Condition : (isnotnull(cr_item_sk#39) AND isnotnull(cr_order_number#40)) +Input [3]: [cr_item_sk#29, cr_order_number#30, cr_returned_date_sk#31] +Condition : (isnotnull(cr_item_sk#29) AND isnotnull(cr_order_number#30)) (62) Project [codegen id : 18] -Output [2]: [cr_item_sk#39, cr_order_number#40] -Input [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] +Output [2]: [cr_item_sk#29, cr_order_number#30] +Input [3]: [cr_item_sk#29, cr_order_number#30, cr_returned_date_sk#31] (63) Exchange -Input [2]: [cr_item_sk#39, cr_order_number#40] -Arguments: hashpartitioning(cr_item_sk#39, cr_order_number#40, 5), ENSURE_REQUIREMENTS, [id=#42] +Input [2]: [cr_item_sk#29, cr_order_number#30] +Arguments: hashpartitioning(cr_item_sk#29, cr_order_number#30, 5), ENSURE_REQUIREMENTS, [plan_id=11] (64) Sort [codegen id : 19] -Input [2]: [cr_item_sk#39, cr_order_number#40] -Arguments: [cr_item_sk#39 ASC NULLS FIRST, cr_order_number#40 ASC NULLS FIRST], false, 0 +Input [2]: [cr_item_sk#29, cr_order_number#30] +Arguments: [cr_item_sk#29 ASC NULLS FIRST, cr_order_number#30 ASC NULLS FIRST], false, 0 (65) SortMergeJoin [codegen id : 20] Left keys [2]: [cs_item_sk#4, cs_order_number#6] -Right keys [2]: [cr_item_sk#39, cr_order_number#40] +Right keys [2]: [cr_item_sk#29, cr_order_number#30] Join condition: None (66) Project [codegen id : 20] -Output [3]: [w_warehouse_name#33, i_item_desc#21, d_week_seq#25] -Input [7]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#33, i_item_desc#21, d_week_seq#25, cr_item_sk#39, cr_order_number#40] +Output [3]: [w_warehouse_name#27, i_item_desc#17, d_week_seq#20] +Input [7]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#27, i_item_desc#17, d_week_seq#20, cr_item_sk#29, cr_order_number#30] (67) HashAggregate [codegen id : 20] -Input [3]: [w_warehouse_name#33, i_item_desc#21, d_week_seq#25] -Keys [3]: [i_item_desc#21, w_warehouse_name#33, d_week_seq#25] +Input [3]: [w_warehouse_name#27, i_item_desc#17, d_week_seq#20] +Keys [3]: [i_item_desc#17, w_warehouse_name#27, d_week_seq#20] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#43] -Results [4]: [i_item_desc#21, w_warehouse_name#33, d_week_seq#25, count#44] +Aggregate Attributes [1]: [count#32] +Results [4]: [i_item_desc#17, w_warehouse_name#27, d_week_seq#20, count#33] (68) Exchange -Input [4]: [i_item_desc#21, w_warehouse_name#33, d_week_seq#25, count#44] -Arguments: hashpartitioning(i_item_desc#21, w_warehouse_name#33, d_week_seq#25, 5), ENSURE_REQUIREMENTS, [id=#45] +Input [4]: [i_item_desc#17, w_warehouse_name#27, d_week_seq#20, count#33] +Arguments: hashpartitioning(i_item_desc#17, w_warehouse_name#27, d_week_seq#20, 5), ENSURE_REQUIREMENTS, [plan_id=12] (69) HashAggregate [codegen id : 21] -Input [4]: [i_item_desc#21, w_warehouse_name#33, d_week_seq#25, count#44] -Keys [3]: [i_item_desc#21, w_warehouse_name#33, d_week_seq#25] +Input [4]: [i_item_desc#17, w_warehouse_name#27, d_week_seq#20, count#33] +Keys [3]: [i_item_desc#17, w_warehouse_name#27, d_week_seq#20] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#46] -Results [6]: [i_item_desc#21, w_warehouse_name#33, d_week_seq#25, count(1)#46 AS no_promo#47, count(1)#46 AS promo#48, count(1)#46 AS total_cnt#49] +Aggregate Attributes [1]: [count(1)#34] +Results [6]: [i_item_desc#17, w_warehouse_name#27, d_week_seq#20, count(1)#34 AS no_promo#35, count(1)#34 AS promo#36, count(1)#34 AS total_cnt#37] (70) TakeOrderedAndProject -Input [6]: [i_item_desc#21, w_warehouse_name#33, d_week_seq#25, no_promo#47, promo#48, total_cnt#49] -Arguments: 100, [total_cnt#49 DESC NULLS LAST, i_item_desc#21 ASC NULLS FIRST, w_warehouse_name#33 ASC NULLS FIRST, d_week_seq#25 ASC NULLS FIRST], [i_item_desc#21, w_warehouse_name#33, d_week_seq#25, no_promo#47, promo#48, total_cnt#49] +Input [6]: [i_item_desc#17, w_warehouse_name#27, d_week_seq#20, no_promo#35, promo#36, total_cnt#37] +Arguments: 100, [total_cnt#37 DESC NULLS LAST, i_item_desc#17 ASC NULLS FIRST, w_warehouse_name#27 ASC NULLS FIRST, d_week_seq#20 ASC NULLS FIRST], [i_item_desc#17, w_warehouse_name#27, d_week_seq#20, no_promo#35, promo#36, total_cnt#37] ===== Subqueries ===== @@ -402,52 +402,52 @@ BroadcastExchange (81) (71) Scan parquet default.date_dim -Output [4]: [d_date_sk#23, d_date#24, d_week_seq#25, d_year#50] +Output [4]: [d_date_sk#18, d_date#19, d_week_seq#20, d_year#38] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk), IsNotNull(d_week_seq), IsNotNull(d_date)] ReadSchema: struct (72) ColumnarToRow [codegen id : 1] -Input [4]: [d_date_sk#23, d_date#24, d_week_seq#25, d_year#50] +Input [4]: [d_date_sk#18, d_date#19, d_week_seq#20, d_year#38] (73) Filter [codegen id : 1] -Input [4]: [d_date_sk#23, d_date#24, d_week_seq#25, d_year#50] -Condition : ((((isnotnull(d_year#50) AND (d_year#50 = 2001)) AND isnotnull(d_date_sk#23)) AND isnotnull(d_week_seq#25)) AND isnotnull(d_date#24)) +Input [4]: [d_date_sk#18, d_date#19, d_week_seq#20, d_year#38] +Condition : ((((isnotnull(d_year#38) AND (d_year#38 = 2001)) AND isnotnull(d_date_sk#18)) AND isnotnull(d_week_seq#20)) AND isnotnull(d_date#19)) (74) Project [codegen id : 1] -Output [3]: [d_date_sk#23, d_date#24, d_week_seq#25] -Input [4]: [d_date_sk#23, d_date#24, d_week_seq#25, d_year#50] +Output [3]: [d_date_sk#18, d_date#19, d_week_seq#20] +Input [4]: [d_date_sk#18, d_date#19, d_week_seq#20, d_year#38] (75) BroadcastExchange -Input [3]: [d_date_sk#23, d_date#24, d_week_seq#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#51] +Input [3]: [d_date_sk#18, d_date#19, d_week_seq#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [plan_id=13] (76) Scan parquet default.date_dim -Output [2]: [d_date_sk#26, d_week_seq#52] +Output [2]: [d_date_sk#21, d_week_seq#39] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date_sk)] ReadSchema: struct (77) ColumnarToRow -Input [2]: [d_date_sk#26, d_week_seq#52] +Input [2]: [d_date_sk#21, d_week_seq#39] (78) Filter -Input [2]: [d_date_sk#26, d_week_seq#52] -Condition : (isnotnull(d_week_seq#52) AND isnotnull(d_date_sk#26)) +Input [2]: [d_date_sk#21, d_week_seq#39] +Condition : (isnotnull(d_week_seq#39) AND isnotnull(d_date_sk#21)) (79) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [d_week_seq#25] -Right keys [1]: [d_week_seq#52] +Left keys [1]: [d_week_seq#20] +Right keys [1]: [d_week_seq#39] Join condition: None (80) Project [codegen id : 2] -Output [4]: [d_date_sk#23, d_date#24, d_week_seq#25, d_date_sk#26] -Input [5]: [d_date_sk#23, d_date#24, d_week_seq#25, d_date_sk#26, d_week_seq#52] +Output [4]: [d_date_sk#18, d_date#19, d_week_seq#20, d_date_sk#21] +Input [5]: [d_date_sk#18, d_date#19, d_week_seq#20, d_date_sk#21, d_week_seq#39] (81) BroadcastExchange -Input [4]: [d_date_sk#23, d_date#24, d_week_seq#25, d_date_sk#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#53] +Input [4]: [d_date_sk#18, d_date#19, d_week_seq#20, d_date_sk#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=14] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q72/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q72/explain.txt index 33ef0ab30ebc9..d2ed2bf03f1d5 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q72/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q72/explain.txt @@ -103,7 +103,7 @@ Condition : ((isnotnull(inv_quantity_on_hand#12) AND isnotnull(inv_item_sk#10)) (7) BroadcastExchange Input [4]: [inv_item_sk#10, inv_warehouse_sk#11, inv_quantity_on_hand#12, inv_date_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_item_sk#4] @@ -115,278 +115,278 @@ Output [9]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_ Input [12]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_quantity#7, cs_sold_date_sk#8, inv_item_sk#10, inv_warehouse_sk#11, inv_quantity_on_hand#12, inv_date_sk#13] (10) Scan parquet default.warehouse -Output [2]: [w_warehouse_sk#15, w_warehouse_name#16] +Output [2]: [w_warehouse_sk#14, w_warehouse_name#15] Batched: true Location [not included in comparison]/{warehouse_dir}/warehouse] PushedFilters: [IsNotNull(w_warehouse_sk)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [2]: [w_warehouse_sk#15, w_warehouse_name#16] +Input [2]: [w_warehouse_sk#14, w_warehouse_name#15] (12) Filter [codegen id : 2] -Input [2]: [w_warehouse_sk#15, w_warehouse_name#16] -Condition : isnotnull(w_warehouse_sk#15) +Input [2]: [w_warehouse_sk#14, w_warehouse_name#15] +Condition : isnotnull(w_warehouse_sk#14) (13) BroadcastExchange -Input [2]: [w_warehouse_sk#15, w_warehouse_name#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#17] +Input [2]: [w_warehouse_sk#14, w_warehouse_name#15] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 10] Left keys [1]: [inv_warehouse_sk#11] -Right keys [1]: [w_warehouse_sk#15] +Right keys [1]: [w_warehouse_sk#14] Join condition: None (15) Project [codegen id : 10] -Output [9]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16] -Input [11]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_warehouse_sk#11, inv_date_sk#13, w_warehouse_sk#15, w_warehouse_name#16] +Output [9]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15] +Input [11]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_warehouse_sk#11, inv_date_sk#13, w_warehouse_sk#14, w_warehouse_name#15] (16) Scan parquet default.item -Output [2]: [i_item_sk#18, i_item_desc#19] +Output [2]: [i_item_sk#16, i_item_desc#17] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_item_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 3] -Input [2]: [i_item_sk#18, i_item_desc#19] +Input [2]: [i_item_sk#16, i_item_desc#17] (18) Filter [codegen id : 3] -Input [2]: [i_item_sk#18, i_item_desc#19] -Condition : isnotnull(i_item_sk#18) +Input [2]: [i_item_sk#16, i_item_desc#17] +Condition : isnotnull(i_item_sk#16) (19) BroadcastExchange -Input [2]: [i_item_sk#18, i_item_desc#19] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#20] +Input [2]: [i_item_sk#16, i_item_desc#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (20) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_item_sk#4] -Right keys [1]: [i_item_sk#18] +Right keys [1]: [i_item_sk#16] Join condition: None (21) Project [codegen id : 10] -Output [10]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19] -Input [11]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16, i_item_sk#18, i_item_desc#19] +Output [10]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17] +Input [11]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15, i_item_sk#16, i_item_desc#17] (22) Scan parquet default.customer_demographics -Output [2]: [cd_demo_sk#21, cd_marital_status#22] +Output [2]: [cd_demo_sk#18, cd_marital_status#19] Batched: true Location [not included in comparison]/{warehouse_dir}/customer_demographics] PushedFilters: [IsNotNull(cd_marital_status), EqualTo(cd_marital_status,M), IsNotNull(cd_demo_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 4] -Input [2]: [cd_demo_sk#21, cd_marital_status#22] +Input [2]: [cd_demo_sk#18, cd_marital_status#19] (24) Filter [codegen id : 4] -Input [2]: [cd_demo_sk#21, cd_marital_status#22] -Condition : ((isnotnull(cd_marital_status#22) AND (cd_marital_status#22 = M)) AND isnotnull(cd_demo_sk#21)) +Input [2]: [cd_demo_sk#18, cd_marital_status#19] +Condition : ((isnotnull(cd_marital_status#19) AND (cd_marital_status#19 = M)) AND isnotnull(cd_demo_sk#18)) (25) Project [codegen id : 4] -Output [1]: [cd_demo_sk#21] -Input [2]: [cd_demo_sk#21, cd_marital_status#22] +Output [1]: [cd_demo_sk#18] +Input [2]: [cd_demo_sk#18, cd_marital_status#19] (26) BroadcastExchange -Input [1]: [cd_demo_sk#21] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#23] +Input [1]: [cd_demo_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (27) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_bill_cdemo_sk#2] -Right keys [1]: [cd_demo_sk#21] +Right keys [1]: [cd_demo_sk#18] Join condition: None (28) Project [codegen id : 10] -Output [9]: [cs_ship_date_sk#1, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19] -Input [11]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19, cd_demo_sk#21] +Output [9]: [cs_ship_date_sk#1, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17] +Input [11]: [cs_ship_date_sk#1, cs_bill_cdemo_sk#2, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17, cd_demo_sk#18] (29) Scan parquet default.household_demographics -Output [2]: [hd_demo_sk#24, hd_buy_potential#25] +Output [2]: [hd_demo_sk#20, hd_buy_potential#21] Batched: true Location [not included in comparison]/{warehouse_dir}/household_demographics] PushedFilters: [IsNotNull(hd_buy_potential), EqualTo(hd_buy_potential,1001-5000 ), IsNotNull(hd_demo_sk)] ReadSchema: struct (30) ColumnarToRow [codegen id : 5] -Input [2]: [hd_demo_sk#24, hd_buy_potential#25] +Input [2]: [hd_demo_sk#20, hd_buy_potential#21] (31) Filter [codegen id : 5] -Input [2]: [hd_demo_sk#24, hd_buy_potential#25] -Condition : ((isnotnull(hd_buy_potential#25) AND (hd_buy_potential#25 = 1001-5000 )) AND isnotnull(hd_demo_sk#24)) +Input [2]: [hd_demo_sk#20, hd_buy_potential#21] +Condition : ((isnotnull(hd_buy_potential#21) AND (hd_buy_potential#21 = 1001-5000 )) AND isnotnull(hd_demo_sk#20)) (32) Project [codegen id : 5] -Output [1]: [hd_demo_sk#24] -Input [2]: [hd_demo_sk#24, hd_buy_potential#25] +Output [1]: [hd_demo_sk#20] +Input [2]: [hd_demo_sk#20, hd_buy_potential#21] (33) BroadcastExchange -Input [1]: [hd_demo_sk#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [1]: [hd_demo_sk#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_bill_hdemo_sk#3] -Right keys [1]: [hd_demo_sk#24] +Right keys [1]: [hd_demo_sk#20] Join condition: None (35) Project [codegen id : 10] -Output [8]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19] -Input [10]: [cs_ship_date_sk#1, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19, hd_demo_sk#24] +Output [8]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17] +Input [10]: [cs_ship_date_sk#1, cs_bill_hdemo_sk#3, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17, hd_demo_sk#20] (36) ReusedExchange [Reuses operator id: 75] -Output [3]: [d_date_sk#27, d_date#28, d_week_seq#29] +Output [3]: [d_date_sk#22, d_date#23, d_week_seq#24] (37) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_sold_date_sk#8] -Right keys [1]: [d_date_sk#27] +Right keys [1]: [d_date_sk#22] Join condition: None (38) Project [codegen id : 10] -Output [9]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19, d_date#28, d_week_seq#29] -Input [11]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19, d_date_sk#27, d_date#28, d_week_seq#29] +Output [9]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17, d_date#23, d_week_seq#24] +Input [11]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, cs_sold_date_sk#8, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17, d_date_sk#22, d_date#23, d_week_seq#24] (39) Scan parquet default.date_dim -Output [2]: [d_date_sk#30, d_week_seq#31] +Output [2]: [d_date_sk#25, d_week_seq#26] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_week_seq), IsNotNull(d_date_sk)] ReadSchema: struct (40) ColumnarToRow [codegen id : 7] -Input [2]: [d_date_sk#30, d_week_seq#31] +Input [2]: [d_date_sk#25, d_week_seq#26] (41) Filter [codegen id : 7] -Input [2]: [d_date_sk#30, d_week_seq#31] -Condition : (isnotnull(d_week_seq#31) AND isnotnull(d_date_sk#30)) +Input [2]: [d_date_sk#25, d_week_seq#26] +Condition : (isnotnull(d_week_seq#26) AND isnotnull(d_date_sk#25)) (42) BroadcastExchange -Input [2]: [d_date_sk#30, d_week_seq#31] -Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, false] as bigint), 32) | (cast(input[0, int, false] as bigint) & 4294967295))),false), [id=#32] +Input [2]: [d_date_sk#25, d_week_seq#26] +Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[1, int, false] as bigint), 32) | (cast(input[0, int, false] as bigint) & 4294967295))),false), [plan_id=6] (43) BroadcastHashJoin [codegen id : 10] -Left keys [2]: [d_week_seq#29, inv_date_sk#13] -Right keys [2]: [d_week_seq#31, d_date_sk#30] +Left keys [2]: [d_week_seq#24, inv_date_sk#13] +Right keys [2]: [d_week_seq#26, d_date_sk#25] Join condition: None (44) Project [codegen id : 10] -Output [8]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_date#28, d_week_seq#29] -Input [11]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, inv_date_sk#13, w_warehouse_name#16, i_item_desc#19, d_date#28, d_week_seq#29, d_date_sk#30, d_week_seq#31] +Output [8]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_date#23, d_week_seq#24] +Input [11]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, inv_date_sk#13, w_warehouse_name#15, i_item_desc#17, d_date#23, d_week_seq#24, d_date_sk#25, d_week_seq#26] (45) Scan parquet default.date_dim -Output [2]: [d_date_sk#33, d_date#34] +Output [2]: [d_date_sk#27, d_date#28] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), IsNotNull(d_date_sk)] ReadSchema: struct (46) ColumnarToRow [codegen id : 8] -Input [2]: [d_date_sk#33, d_date#34] +Input [2]: [d_date_sk#27, d_date#28] (47) Filter [codegen id : 8] -Input [2]: [d_date_sk#33, d_date#34] -Condition : (isnotnull(d_date#34) AND isnotnull(d_date_sk#33)) +Input [2]: [d_date_sk#27, d_date#28] +Condition : (isnotnull(d_date#28) AND isnotnull(d_date_sk#27)) (48) BroadcastExchange -Input [2]: [d_date_sk#33, d_date#34] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#35] +Input [2]: [d_date_sk#27, d_date#28] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7] (49) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_ship_date_sk#1] -Right keys [1]: [d_date_sk#33] -Join condition: (d_date#34 > date_add(d_date#28, 5)) +Right keys [1]: [d_date_sk#27] +Join condition: (d_date#28 > date_add(d_date#23, 5)) (50) Project [codegen id : 10] -Output [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_week_seq#29] -Input [10]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_date#28, d_week_seq#29, d_date_sk#33, d_date#34] +Output [6]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_week_seq#24] +Input [10]: [cs_ship_date_sk#1, cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_date#23, d_week_seq#24, d_date_sk#27, d_date#28] (51) Scan parquet default.promotion -Output [1]: [p_promo_sk#36] +Output [1]: [p_promo_sk#29] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_promo_sk)] ReadSchema: struct (52) ColumnarToRow [codegen id : 9] -Input [1]: [p_promo_sk#36] +Input [1]: [p_promo_sk#29] (53) Filter [codegen id : 9] -Input [1]: [p_promo_sk#36] -Condition : isnotnull(p_promo_sk#36) +Input [1]: [p_promo_sk#29] +Condition : isnotnull(p_promo_sk#29) (54) BroadcastExchange -Input [1]: [p_promo_sk#36] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#37] +Input [1]: [p_promo_sk#29] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] (55) BroadcastHashJoin [codegen id : 10] Left keys [1]: [cs_promo_sk#5] -Right keys [1]: [p_promo_sk#36] +Right keys [1]: [p_promo_sk#29] Join condition: None (56) Project [codegen id : 10] -Output [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_week_seq#29] -Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_week_seq#29, p_promo_sk#36] +Output [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_week_seq#24] +Input [7]: [cs_item_sk#4, cs_promo_sk#5, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_week_seq#24, p_promo_sk#29] (57) Exchange -Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_week_seq#29] -Arguments: hashpartitioning(cs_item_sk#4, cs_order_number#6, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_week_seq#24] +Arguments: hashpartitioning(cs_item_sk#4, cs_order_number#6, 5), ENSURE_REQUIREMENTS, [plan_id=9] (58) Sort [codegen id : 11] -Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_week_seq#29] +Input [5]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_week_seq#24] Arguments: [cs_item_sk#4 ASC NULLS FIRST, cs_order_number#6 ASC NULLS FIRST], false, 0 (59) Scan parquet default.catalog_returns -Output [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] +Output [3]: [cr_item_sk#30, cr_order_number#31, cr_returned_date_sk#32] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct (60) ColumnarToRow [codegen id : 12] -Input [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] +Input [3]: [cr_item_sk#30, cr_order_number#31, cr_returned_date_sk#32] (61) Filter [codegen id : 12] -Input [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] -Condition : (isnotnull(cr_item_sk#39) AND isnotnull(cr_order_number#40)) +Input [3]: [cr_item_sk#30, cr_order_number#31, cr_returned_date_sk#32] +Condition : (isnotnull(cr_item_sk#30) AND isnotnull(cr_order_number#31)) (62) Project [codegen id : 12] -Output [2]: [cr_item_sk#39, cr_order_number#40] -Input [3]: [cr_item_sk#39, cr_order_number#40, cr_returned_date_sk#41] +Output [2]: [cr_item_sk#30, cr_order_number#31] +Input [3]: [cr_item_sk#30, cr_order_number#31, cr_returned_date_sk#32] (63) Exchange -Input [2]: [cr_item_sk#39, cr_order_number#40] -Arguments: hashpartitioning(cr_item_sk#39, cr_order_number#40, 5), ENSURE_REQUIREMENTS, [id=#42] +Input [2]: [cr_item_sk#30, cr_order_number#31] +Arguments: hashpartitioning(cr_item_sk#30, cr_order_number#31, 5), ENSURE_REQUIREMENTS, [plan_id=10] (64) Sort [codegen id : 13] -Input [2]: [cr_item_sk#39, cr_order_number#40] -Arguments: [cr_item_sk#39 ASC NULLS FIRST, cr_order_number#40 ASC NULLS FIRST], false, 0 +Input [2]: [cr_item_sk#30, cr_order_number#31] +Arguments: [cr_item_sk#30 ASC NULLS FIRST, cr_order_number#31 ASC NULLS FIRST], false, 0 (65) SortMergeJoin [codegen id : 14] Left keys [2]: [cs_item_sk#4, cs_order_number#6] -Right keys [2]: [cr_item_sk#39, cr_order_number#40] +Right keys [2]: [cr_item_sk#30, cr_order_number#31] Join condition: None (66) Project [codegen id : 14] -Output [3]: [w_warehouse_name#16, i_item_desc#19, d_week_seq#29] -Input [7]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#16, i_item_desc#19, d_week_seq#29, cr_item_sk#39, cr_order_number#40] +Output [3]: [w_warehouse_name#15, i_item_desc#17, d_week_seq#24] +Input [7]: [cs_item_sk#4, cs_order_number#6, w_warehouse_name#15, i_item_desc#17, d_week_seq#24, cr_item_sk#30, cr_order_number#31] (67) HashAggregate [codegen id : 14] -Input [3]: [w_warehouse_name#16, i_item_desc#19, d_week_seq#29] -Keys [3]: [i_item_desc#19, w_warehouse_name#16, d_week_seq#29] +Input [3]: [w_warehouse_name#15, i_item_desc#17, d_week_seq#24] +Keys [3]: [i_item_desc#17, w_warehouse_name#15, d_week_seq#24] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#43] -Results [4]: [i_item_desc#19, w_warehouse_name#16, d_week_seq#29, count#44] +Aggregate Attributes [1]: [count#33] +Results [4]: [i_item_desc#17, w_warehouse_name#15, d_week_seq#24, count#34] (68) Exchange -Input [4]: [i_item_desc#19, w_warehouse_name#16, d_week_seq#29, count#44] -Arguments: hashpartitioning(i_item_desc#19, w_warehouse_name#16, d_week_seq#29, 5), ENSURE_REQUIREMENTS, [id=#45] +Input [4]: [i_item_desc#17, w_warehouse_name#15, d_week_seq#24, count#34] +Arguments: hashpartitioning(i_item_desc#17, w_warehouse_name#15, d_week_seq#24, 5), ENSURE_REQUIREMENTS, [plan_id=11] (69) HashAggregate [codegen id : 15] -Input [4]: [i_item_desc#19, w_warehouse_name#16, d_week_seq#29, count#44] -Keys [3]: [i_item_desc#19, w_warehouse_name#16, d_week_seq#29] +Input [4]: [i_item_desc#17, w_warehouse_name#15, d_week_seq#24, count#34] +Keys [3]: [i_item_desc#17, w_warehouse_name#15, d_week_seq#24] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#46] -Results [6]: [i_item_desc#19, w_warehouse_name#16, d_week_seq#29, count(1)#46 AS no_promo#47, count(1)#46 AS promo#48, count(1)#46 AS total_cnt#49] +Aggregate Attributes [1]: [count(1)#35] +Results [6]: [i_item_desc#17, w_warehouse_name#15, d_week_seq#24, count(1)#35 AS no_promo#36, count(1)#35 AS promo#37, count(1)#35 AS total_cnt#38] (70) TakeOrderedAndProject -Input [6]: [i_item_desc#19, w_warehouse_name#16, d_week_seq#29, no_promo#47, promo#48, total_cnt#49] -Arguments: 100, [total_cnt#49 DESC NULLS LAST, i_item_desc#19 ASC NULLS FIRST, w_warehouse_name#16 ASC NULLS FIRST, d_week_seq#29 ASC NULLS FIRST], [i_item_desc#19, w_warehouse_name#16, d_week_seq#29, no_promo#47, promo#48, total_cnt#49] +Input [6]: [i_item_desc#17, w_warehouse_name#15, d_week_seq#24, no_promo#36, promo#37, total_cnt#38] +Arguments: 100, [total_cnt#38 DESC NULLS LAST, i_item_desc#17 ASC NULLS FIRST, w_warehouse_name#15 ASC NULLS FIRST, d_week_seq#24 ASC NULLS FIRST], [i_item_desc#17, w_warehouse_name#15, d_week_seq#24, no_promo#36, promo#37, total_cnt#38] ===== Subqueries ===== @@ -399,25 +399,25 @@ BroadcastExchange (75) (71) Scan parquet default.date_dim -Output [4]: [d_date_sk#27, d_date#28, d_week_seq#29, d_year#50] +Output [4]: [d_date_sk#22, d_date#23, d_week_seq#24, d_year#39] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk), IsNotNull(d_week_seq), IsNotNull(d_date)] ReadSchema: struct (72) ColumnarToRow [codegen id : 1] -Input [4]: [d_date_sk#27, d_date#28, d_week_seq#29, d_year#50] +Input [4]: [d_date_sk#22, d_date#23, d_week_seq#24, d_year#39] (73) Filter [codegen id : 1] -Input [4]: [d_date_sk#27, d_date#28, d_week_seq#29, d_year#50] -Condition : ((((isnotnull(d_year#50) AND (d_year#50 = 2001)) AND isnotnull(d_date_sk#27)) AND isnotnull(d_week_seq#29)) AND isnotnull(d_date#28)) +Input [4]: [d_date_sk#22, d_date#23, d_week_seq#24, d_year#39] +Condition : ((((isnotnull(d_year#39) AND (d_year#39 = 2001)) AND isnotnull(d_date_sk#22)) AND isnotnull(d_week_seq#24)) AND isnotnull(d_date#23)) (74) Project [codegen id : 1] -Output [3]: [d_date_sk#27, d_date#28, d_week_seq#29] -Input [4]: [d_date_sk#27, d_date#28, d_week_seq#29, d_year#50] +Output [3]: [d_date_sk#22, d_date#23, d_week_seq#24] +Input [4]: [d_date_sk#22, d_date#23, d_week_seq#24, d_year#39] (75) BroadcastExchange -Input [3]: [d_date_sk#27, d_date#28, d_week_seq#29] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#51] +Input [3]: [d_date_sk#22, d_date#23, d_week_seq#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=12] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q74.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q74.sf100/explain.txt index 7ee6ada91dfea..8e9e50cc2f0a2 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q74.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q74.sf100/explain.txt @@ -109,334 +109,334 @@ Input [5]: [ss_customer_sk#1, ss_net_paid#2, ss_sold_date_sk#3, d_date_sk#5, d_y (7) Exchange Input [3]: [ss_customer_sk#1, ss_net_paid#2, d_year#6] -Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#7] +Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (8) Sort [codegen id : 3] Input [3]: [ss_customer_sk#1, ss_net_paid#2, d_year#6] Arguments: [ss_customer_sk#1 ASC NULLS FIRST], false, 0 (9) Scan parquet default.customer -Output [4]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11] +Output [4]: [c_customer_sk#7, c_customer_id#8, c_first_name#9, c_last_name#10] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (10) ColumnarToRow [codegen id : 4] -Input [4]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11] +Input [4]: [c_customer_sk#7, c_customer_id#8, c_first_name#9, c_last_name#10] (11) Filter [codegen id : 4] -Input [4]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11] -Condition : (isnotnull(c_customer_sk#8) AND isnotnull(c_customer_id#9)) +Input [4]: [c_customer_sk#7, c_customer_id#8, c_first_name#9, c_last_name#10] +Condition : (isnotnull(c_customer_sk#7) AND isnotnull(c_customer_id#8)) (12) Exchange -Input [4]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11] -Arguments: hashpartitioning(c_customer_sk#8, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [4]: [c_customer_sk#7, c_customer_id#8, c_first_name#9, c_last_name#10] +Arguments: hashpartitioning(c_customer_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (13) Sort [codegen id : 5] -Input [4]: [c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11] -Arguments: [c_customer_sk#8 ASC NULLS FIRST], false, 0 +Input [4]: [c_customer_sk#7, c_customer_id#8, c_first_name#9, c_last_name#10] +Arguments: [c_customer_sk#7 ASC NULLS FIRST], false, 0 (14) SortMergeJoin [codegen id : 6] Left keys [1]: [ss_customer_sk#1] -Right keys [1]: [c_customer_sk#8] +Right keys [1]: [c_customer_sk#7] Join condition: None (15) Project [codegen id : 6] -Output [5]: [c_customer_id#9, c_first_name#10, c_last_name#11, ss_net_paid#2, d_year#6] -Input [7]: [ss_customer_sk#1, ss_net_paid#2, d_year#6, c_customer_sk#8, c_customer_id#9, c_first_name#10, c_last_name#11] +Output [5]: [c_customer_id#8, c_first_name#9, c_last_name#10, ss_net_paid#2, d_year#6] +Input [7]: [ss_customer_sk#1, ss_net_paid#2, d_year#6, c_customer_sk#7, c_customer_id#8, c_first_name#9, c_last_name#10] (16) HashAggregate [codegen id : 6] -Input [5]: [c_customer_id#9, c_first_name#10, c_last_name#11, ss_net_paid#2, d_year#6] -Keys [4]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#6] +Input [5]: [c_customer_id#8, c_first_name#9, c_last_name#10, ss_net_paid#2, d_year#6] +Keys [4]: [c_customer_id#8, c_first_name#9, c_last_name#10, d_year#6] Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#2))] -Aggregate Attributes [1]: [sum#13] -Results [5]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#6, sum#14] +Aggregate Attributes [1]: [sum#11] +Results [5]: [c_customer_id#8, c_first_name#9, c_last_name#10, d_year#6, sum#12] (17) Exchange -Input [5]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#6, sum#14] -Arguments: hashpartitioning(c_customer_id#9, c_first_name#10, c_last_name#11, d_year#6, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [5]: [c_customer_id#8, c_first_name#9, c_last_name#10, d_year#6, sum#12] +Arguments: hashpartitioning(c_customer_id#8, c_first_name#9, c_last_name#10, d_year#6, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 7] -Input [5]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#6, sum#14] -Keys [4]: [c_customer_id#9, c_first_name#10, c_last_name#11, d_year#6] +Input [5]: [c_customer_id#8, c_first_name#9, c_last_name#10, d_year#6, sum#12] +Keys [4]: [c_customer_id#8, c_first_name#9, c_last_name#10, d_year#6] Functions [1]: [sum(UnscaledValue(ss_net_paid#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#2))#16] -Results [2]: [c_customer_id#9 AS customer_id#17, MakeDecimal(sum(UnscaledValue(ss_net_paid#2))#16,17,2) AS year_total#18] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#2))#13] +Results [2]: [c_customer_id#8 AS customer_id#14, MakeDecimal(sum(UnscaledValue(ss_net_paid#2))#13,17,2) AS year_total#15] (19) Filter [codegen id : 7] -Input [2]: [customer_id#17, year_total#18] -Condition : (isnotnull(year_total#18) AND (year_total#18 > 0.00)) +Input [2]: [customer_id#14, year_total#15] +Condition : (isnotnull(year_total#15) AND (year_total#15 > 0.00)) (20) Exchange -Input [2]: [customer_id#17, year_total#18] -Arguments: hashpartitioning(customer_id#17, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [2]: [customer_id#14, year_total#15] +Arguments: hashpartitioning(customer_id#14, 5), ENSURE_REQUIREMENTS, [plan_id=4] (21) Sort [codegen id : 8] -Input [2]: [customer_id#17, year_total#18] -Arguments: [customer_id#17 ASC NULLS FIRST], false, 0 +Input [2]: [customer_id#14, year_total#15] +Arguments: [customer_id#14 ASC NULLS FIRST], false, 0 (22) Scan parquet default.store_sales -Output [3]: [ss_customer_sk#20, ss_net_paid#21, ss_sold_date_sk#22] +Output [3]: [ss_customer_sk#16, ss_net_paid#17, ss_sold_date_sk#18] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#22), dynamicpruningexpression(ss_sold_date_sk#22 IN dynamicpruning#23)] +PartitionFilters: [isnotnull(ss_sold_date_sk#18), dynamicpruningexpression(ss_sold_date_sk#18 IN dynamicpruning#19)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 10] -Input [3]: [ss_customer_sk#20, ss_net_paid#21, ss_sold_date_sk#22] +Input [3]: [ss_customer_sk#16, ss_net_paid#17, ss_sold_date_sk#18] (24) Filter [codegen id : 10] -Input [3]: [ss_customer_sk#20, ss_net_paid#21, ss_sold_date_sk#22] -Condition : isnotnull(ss_customer_sk#20) +Input [3]: [ss_customer_sk#16, ss_net_paid#17, ss_sold_date_sk#18] +Condition : isnotnull(ss_customer_sk#16) (25) ReusedExchange [Reuses operator id: 87] -Output [2]: [d_date_sk#24, d_year#25] +Output [2]: [d_date_sk#20, d_year#21] (26) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_sold_date_sk#22] -Right keys [1]: [d_date_sk#24] +Left keys [1]: [ss_sold_date_sk#18] +Right keys [1]: [d_date_sk#20] Join condition: None (27) Project [codegen id : 10] -Output [3]: [ss_customer_sk#20, ss_net_paid#21, d_year#25] -Input [5]: [ss_customer_sk#20, ss_net_paid#21, ss_sold_date_sk#22, d_date_sk#24, d_year#25] +Output [3]: [ss_customer_sk#16, ss_net_paid#17, d_year#21] +Input [5]: [ss_customer_sk#16, ss_net_paid#17, ss_sold_date_sk#18, d_date_sk#20, d_year#21] (28) Exchange -Input [3]: [ss_customer_sk#20, ss_net_paid#21, d_year#25] -Arguments: hashpartitioning(ss_customer_sk#20, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [3]: [ss_customer_sk#16, ss_net_paid#17, d_year#21] +Arguments: hashpartitioning(ss_customer_sk#16, 5), ENSURE_REQUIREMENTS, [plan_id=5] (29) Sort [codegen id : 11] -Input [3]: [ss_customer_sk#20, ss_net_paid#21, d_year#25] -Arguments: [ss_customer_sk#20 ASC NULLS FIRST], false, 0 +Input [3]: [ss_customer_sk#16, ss_net_paid#17, d_year#21] +Arguments: [ss_customer_sk#16 ASC NULLS FIRST], false, 0 (30) ReusedExchange [Reuses operator id: 12] -Output [4]: [c_customer_sk#27, c_customer_id#28, c_first_name#29, c_last_name#30] +Output [4]: [c_customer_sk#22, c_customer_id#23, c_first_name#24, c_last_name#25] (31) Sort [codegen id : 13] -Input [4]: [c_customer_sk#27, c_customer_id#28, c_first_name#29, c_last_name#30] -Arguments: [c_customer_sk#27 ASC NULLS FIRST], false, 0 +Input [4]: [c_customer_sk#22, c_customer_id#23, c_first_name#24, c_last_name#25] +Arguments: [c_customer_sk#22 ASC NULLS FIRST], false, 0 (32) SortMergeJoin [codegen id : 14] -Left keys [1]: [ss_customer_sk#20] -Right keys [1]: [c_customer_sk#27] +Left keys [1]: [ss_customer_sk#16] +Right keys [1]: [c_customer_sk#22] Join condition: None (33) Project [codegen id : 14] -Output [5]: [c_customer_id#28, c_first_name#29, c_last_name#30, ss_net_paid#21, d_year#25] -Input [7]: [ss_customer_sk#20, ss_net_paid#21, d_year#25, c_customer_sk#27, c_customer_id#28, c_first_name#29, c_last_name#30] +Output [5]: [c_customer_id#23, c_first_name#24, c_last_name#25, ss_net_paid#17, d_year#21] +Input [7]: [ss_customer_sk#16, ss_net_paid#17, d_year#21, c_customer_sk#22, c_customer_id#23, c_first_name#24, c_last_name#25] (34) HashAggregate [codegen id : 14] -Input [5]: [c_customer_id#28, c_first_name#29, c_last_name#30, ss_net_paid#21, d_year#25] -Keys [4]: [c_customer_id#28, c_first_name#29, c_last_name#30, d_year#25] -Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#21))] -Aggregate Attributes [1]: [sum#31] -Results [5]: [c_customer_id#28, c_first_name#29, c_last_name#30, d_year#25, sum#32] +Input [5]: [c_customer_id#23, c_first_name#24, c_last_name#25, ss_net_paid#17, d_year#21] +Keys [4]: [c_customer_id#23, c_first_name#24, c_last_name#25, d_year#21] +Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#17))] +Aggregate Attributes [1]: [sum#26] +Results [5]: [c_customer_id#23, c_first_name#24, c_last_name#25, d_year#21, sum#27] (35) Exchange -Input [5]: [c_customer_id#28, c_first_name#29, c_last_name#30, d_year#25, sum#32] -Arguments: hashpartitioning(c_customer_id#28, c_first_name#29, c_last_name#30, d_year#25, 5), ENSURE_REQUIREMENTS, [id=#33] +Input [5]: [c_customer_id#23, c_first_name#24, c_last_name#25, d_year#21, sum#27] +Arguments: hashpartitioning(c_customer_id#23, c_first_name#24, c_last_name#25, d_year#21, 5), ENSURE_REQUIREMENTS, [plan_id=6] (36) HashAggregate [codegen id : 15] -Input [5]: [c_customer_id#28, c_first_name#29, c_last_name#30, d_year#25, sum#32] -Keys [4]: [c_customer_id#28, c_first_name#29, c_last_name#30, d_year#25] -Functions [1]: [sum(UnscaledValue(ss_net_paid#21))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#21))#16] -Results [4]: [c_customer_id#28 AS customer_id#34, c_first_name#29 AS customer_first_name#35, c_last_name#30 AS customer_last_name#36, MakeDecimal(sum(UnscaledValue(ss_net_paid#21))#16,17,2) AS year_total#37] +Input [5]: [c_customer_id#23, c_first_name#24, c_last_name#25, d_year#21, sum#27] +Keys [4]: [c_customer_id#23, c_first_name#24, c_last_name#25, d_year#21] +Functions [1]: [sum(UnscaledValue(ss_net_paid#17))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#17))#13] +Results [4]: [c_customer_id#23 AS customer_id#28, c_first_name#24 AS customer_first_name#29, c_last_name#25 AS customer_last_name#30, MakeDecimal(sum(UnscaledValue(ss_net_paid#17))#13,17,2) AS year_total#31] (37) Exchange -Input [4]: [customer_id#34, customer_first_name#35, customer_last_name#36, year_total#37] -Arguments: hashpartitioning(customer_id#34, 5), ENSURE_REQUIREMENTS, [id=#38] +Input [4]: [customer_id#28, customer_first_name#29, customer_last_name#30, year_total#31] +Arguments: hashpartitioning(customer_id#28, 5), ENSURE_REQUIREMENTS, [plan_id=7] (38) Sort [codegen id : 16] -Input [4]: [customer_id#34, customer_first_name#35, customer_last_name#36, year_total#37] -Arguments: [customer_id#34 ASC NULLS FIRST], false, 0 +Input [4]: [customer_id#28, customer_first_name#29, customer_last_name#30, year_total#31] +Arguments: [customer_id#28 ASC NULLS FIRST], false, 0 (39) SortMergeJoin [codegen id : 17] -Left keys [1]: [customer_id#17] -Right keys [1]: [customer_id#34] +Left keys [1]: [customer_id#14] +Right keys [1]: [customer_id#28] Join condition: None (40) Scan parquet default.web_sales -Output [3]: [ws_bill_customer_sk#39, ws_net_paid#40, ws_sold_date_sk#41] +Output [3]: [ws_bill_customer_sk#32, ws_net_paid#33, ws_sold_date_sk#34] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#41), dynamicpruningexpression(ws_sold_date_sk#41 IN dynamicpruning#4)] +PartitionFilters: [isnotnull(ws_sold_date_sk#34), dynamicpruningexpression(ws_sold_date_sk#34 IN dynamicpruning#4)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (41) ColumnarToRow [codegen id : 19] -Input [3]: [ws_bill_customer_sk#39, ws_net_paid#40, ws_sold_date_sk#41] +Input [3]: [ws_bill_customer_sk#32, ws_net_paid#33, ws_sold_date_sk#34] (42) Filter [codegen id : 19] -Input [3]: [ws_bill_customer_sk#39, ws_net_paid#40, ws_sold_date_sk#41] -Condition : isnotnull(ws_bill_customer_sk#39) +Input [3]: [ws_bill_customer_sk#32, ws_net_paid#33, ws_sold_date_sk#34] +Condition : isnotnull(ws_bill_customer_sk#32) (43) ReusedExchange [Reuses operator id: 83] -Output [2]: [d_date_sk#42, d_year#43] +Output [2]: [d_date_sk#35, d_year#36] (44) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [ws_sold_date_sk#41] -Right keys [1]: [d_date_sk#42] +Left keys [1]: [ws_sold_date_sk#34] +Right keys [1]: [d_date_sk#35] Join condition: None (45) Project [codegen id : 19] -Output [3]: [ws_bill_customer_sk#39, ws_net_paid#40, d_year#43] -Input [5]: [ws_bill_customer_sk#39, ws_net_paid#40, ws_sold_date_sk#41, d_date_sk#42, d_year#43] +Output [3]: [ws_bill_customer_sk#32, ws_net_paid#33, d_year#36] +Input [5]: [ws_bill_customer_sk#32, ws_net_paid#33, ws_sold_date_sk#34, d_date_sk#35, d_year#36] (46) Exchange -Input [3]: [ws_bill_customer_sk#39, ws_net_paid#40, d_year#43] -Arguments: hashpartitioning(ws_bill_customer_sk#39, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [3]: [ws_bill_customer_sk#32, ws_net_paid#33, d_year#36] +Arguments: hashpartitioning(ws_bill_customer_sk#32, 5), ENSURE_REQUIREMENTS, [plan_id=8] (47) Sort [codegen id : 20] -Input [3]: [ws_bill_customer_sk#39, ws_net_paid#40, d_year#43] -Arguments: [ws_bill_customer_sk#39 ASC NULLS FIRST], false, 0 +Input [3]: [ws_bill_customer_sk#32, ws_net_paid#33, d_year#36] +Arguments: [ws_bill_customer_sk#32 ASC NULLS FIRST], false, 0 (48) ReusedExchange [Reuses operator id: 12] -Output [4]: [c_customer_sk#45, c_customer_id#46, c_first_name#47, c_last_name#48] +Output [4]: [c_customer_sk#37, c_customer_id#38, c_first_name#39, c_last_name#40] (49) Sort [codegen id : 22] -Input [4]: [c_customer_sk#45, c_customer_id#46, c_first_name#47, c_last_name#48] -Arguments: [c_customer_sk#45 ASC NULLS FIRST], false, 0 +Input [4]: [c_customer_sk#37, c_customer_id#38, c_first_name#39, c_last_name#40] +Arguments: [c_customer_sk#37 ASC NULLS FIRST], false, 0 (50) SortMergeJoin [codegen id : 23] -Left keys [1]: [ws_bill_customer_sk#39] -Right keys [1]: [c_customer_sk#45] +Left keys [1]: [ws_bill_customer_sk#32] +Right keys [1]: [c_customer_sk#37] Join condition: None (51) Project [codegen id : 23] -Output [5]: [c_customer_id#46, c_first_name#47, c_last_name#48, ws_net_paid#40, d_year#43] -Input [7]: [ws_bill_customer_sk#39, ws_net_paid#40, d_year#43, c_customer_sk#45, c_customer_id#46, c_first_name#47, c_last_name#48] +Output [5]: [c_customer_id#38, c_first_name#39, c_last_name#40, ws_net_paid#33, d_year#36] +Input [7]: [ws_bill_customer_sk#32, ws_net_paid#33, d_year#36, c_customer_sk#37, c_customer_id#38, c_first_name#39, c_last_name#40] (52) HashAggregate [codegen id : 23] -Input [5]: [c_customer_id#46, c_first_name#47, c_last_name#48, ws_net_paid#40, d_year#43] -Keys [4]: [c_customer_id#46, c_first_name#47, c_last_name#48, d_year#43] -Functions [1]: [partial_sum(UnscaledValue(ws_net_paid#40))] -Aggregate Attributes [1]: [sum#49] -Results [5]: [c_customer_id#46, c_first_name#47, c_last_name#48, d_year#43, sum#50] +Input [5]: [c_customer_id#38, c_first_name#39, c_last_name#40, ws_net_paid#33, d_year#36] +Keys [4]: [c_customer_id#38, c_first_name#39, c_last_name#40, d_year#36] +Functions [1]: [partial_sum(UnscaledValue(ws_net_paid#33))] +Aggregate Attributes [1]: [sum#41] +Results [5]: [c_customer_id#38, c_first_name#39, c_last_name#40, d_year#36, sum#42] (53) Exchange -Input [5]: [c_customer_id#46, c_first_name#47, c_last_name#48, d_year#43, sum#50] -Arguments: hashpartitioning(c_customer_id#46, c_first_name#47, c_last_name#48, d_year#43, 5), ENSURE_REQUIREMENTS, [id=#51] +Input [5]: [c_customer_id#38, c_first_name#39, c_last_name#40, d_year#36, sum#42] +Arguments: hashpartitioning(c_customer_id#38, c_first_name#39, c_last_name#40, d_year#36, 5), ENSURE_REQUIREMENTS, [plan_id=9] (54) HashAggregate [codegen id : 24] -Input [5]: [c_customer_id#46, c_first_name#47, c_last_name#48, d_year#43, sum#50] -Keys [4]: [c_customer_id#46, c_first_name#47, c_last_name#48, d_year#43] -Functions [1]: [sum(UnscaledValue(ws_net_paid#40))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#40))#52] -Results [2]: [c_customer_id#46 AS customer_id#53, MakeDecimal(sum(UnscaledValue(ws_net_paid#40))#52,17,2) AS year_total#54] +Input [5]: [c_customer_id#38, c_first_name#39, c_last_name#40, d_year#36, sum#42] +Keys [4]: [c_customer_id#38, c_first_name#39, c_last_name#40, d_year#36] +Functions [1]: [sum(UnscaledValue(ws_net_paid#33))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#33))#43] +Results [2]: [c_customer_id#38 AS customer_id#44, MakeDecimal(sum(UnscaledValue(ws_net_paid#33))#43,17,2) AS year_total#45] (55) Filter [codegen id : 24] -Input [2]: [customer_id#53, year_total#54] -Condition : (isnotnull(year_total#54) AND (year_total#54 > 0.00)) +Input [2]: [customer_id#44, year_total#45] +Condition : (isnotnull(year_total#45) AND (year_total#45 > 0.00)) (56) Exchange -Input [2]: [customer_id#53, year_total#54] -Arguments: hashpartitioning(customer_id#53, 5), ENSURE_REQUIREMENTS, [id=#55] +Input [2]: [customer_id#44, year_total#45] +Arguments: hashpartitioning(customer_id#44, 5), ENSURE_REQUIREMENTS, [plan_id=10] (57) Sort [codegen id : 25] -Input [2]: [customer_id#53, year_total#54] -Arguments: [customer_id#53 ASC NULLS FIRST], false, 0 +Input [2]: [customer_id#44, year_total#45] +Arguments: [customer_id#44 ASC NULLS FIRST], false, 0 (58) SortMergeJoin [codegen id : 26] -Left keys [1]: [customer_id#17] -Right keys [1]: [customer_id#53] +Left keys [1]: [customer_id#14] +Right keys [1]: [customer_id#44] Join condition: None (59) Project [codegen id : 26] -Output [7]: [customer_id#17, year_total#18, customer_id#34, customer_first_name#35, customer_last_name#36, year_total#37, year_total#54] -Input [8]: [customer_id#17, year_total#18, customer_id#34, customer_first_name#35, customer_last_name#36, year_total#37, customer_id#53, year_total#54] +Output [7]: [customer_id#14, year_total#15, customer_id#28, customer_first_name#29, customer_last_name#30, year_total#31, year_total#45] +Input [8]: [customer_id#14, year_total#15, customer_id#28, customer_first_name#29, customer_last_name#30, year_total#31, customer_id#44, year_total#45] (60) Scan parquet default.web_sales -Output [3]: [ws_bill_customer_sk#56, ws_net_paid#57, ws_sold_date_sk#58] +Output [3]: [ws_bill_customer_sk#46, ws_net_paid#47, ws_sold_date_sk#48] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#58), dynamicpruningexpression(ws_sold_date_sk#58 IN dynamicpruning#23)] +PartitionFilters: [isnotnull(ws_sold_date_sk#48), dynamicpruningexpression(ws_sold_date_sk#48 IN dynamicpruning#19)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (61) ColumnarToRow [codegen id : 28] -Input [3]: [ws_bill_customer_sk#56, ws_net_paid#57, ws_sold_date_sk#58] +Input [3]: [ws_bill_customer_sk#46, ws_net_paid#47, ws_sold_date_sk#48] (62) Filter [codegen id : 28] -Input [3]: [ws_bill_customer_sk#56, ws_net_paid#57, ws_sold_date_sk#58] -Condition : isnotnull(ws_bill_customer_sk#56) +Input [3]: [ws_bill_customer_sk#46, ws_net_paid#47, ws_sold_date_sk#48] +Condition : isnotnull(ws_bill_customer_sk#46) (63) ReusedExchange [Reuses operator id: 87] -Output [2]: [d_date_sk#59, d_year#60] +Output [2]: [d_date_sk#49, d_year#50] (64) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [ws_sold_date_sk#58] -Right keys [1]: [d_date_sk#59] +Left keys [1]: [ws_sold_date_sk#48] +Right keys [1]: [d_date_sk#49] Join condition: None (65) Project [codegen id : 28] -Output [3]: [ws_bill_customer_sk#56, ws_net_paid#57, d_year#60] -Input [5]: [ws_bill_customer_sk#56, ws_net_paid#57, ws_sold_date_sk#58, d_date_sk#59, d_year#60] +Output [3]: [ws_bill_customer_sk#46, ws_net_paid#47, d_year#50] +Input [5]: [ws_bill_customer_sk#46, ws_net_paid#47, ws_sold_date_sk#48, d_date_sk#49, d_year#50] (66) Exchange -Input [3]: [ws_bill_customer_sk#56, ws_net_paid#57, d_year#60] -Arguments: hashpartitioning(ws_bill_customer_sk#56, 5), ENSURE_REQUIREMENTS, [id=#61] +Input [3]: [ws_bill_customer_sk#46, ws_net_paid#47, d_year#50] +Arguments: hashpartitioning(ws_bill_customer_sk#46, 5), ENSURE_REQUIREMENTS, [plan_id=11] (67) Sort [codegen id : 29] -Input [3]: [ws_bill_customer_sk#56, ws_net_paid#57, d_year#60] -Arguments: [ws_bill_customer_sk#56 ASC NULLS FIRST], false, 0 +Input [3]: [ws_bill_customer_sk#46, ws_net_paid#47, d_year#50] +Arguments: [ws_bill_customer_sk#46 ASC NULLS FIRST], false, 0 (68) ReusedExchange [Reuses operator id: 12] -Output [4]: [c_customer_sk#62, c_customer_id#63, c_first_name#64, c_last_name#65] +Output [4]: [c_customer_sk#51, c_customer_id#52, c_first_name#53, c_last_name#54] (69) Sort [codegen id : 31] -Input [4]: [c_customer_sk#62, c_customer_id#63, c_first_name#64, c_last_name#65] -Arguments: [c_customer_sk#62 ASC NULLS FIRST], false, 0 +Input [4]: [c_customer_sk#51, c_customer_id#52, c_first_name#53, c_last_name#54] +Arguments: [c_customer_sk#51 ASC NULLS FIRST], false, 0 (70) SortMergeJoin [codegen id : 32] -Left keys [1]: [ws_bill_customer_sk#56] -Right keys [1]: [c_customer_sk#62] +Left keys [1]: [ws_bill_customer_sk#46] +Right keys [1]: [c_customer_sk#51] Join condition: None (71) Project [codegen id : 32] -Output [5]: [c_customer_id#63, c_first_name#64, c_last_name#65, ws_net_paid#57, d_year#60] -Input [7]: [ws_bill_customer_sk#56, ws_net_paid#57, d_year#60, c_customer_sk#62, c_customer_id#63, c_first_name#64, c_last_name#65] +Output [5]: [c_customer_id#52, c_first_name#53, c_last_name#54, ws_net_paid#47, d_year#50] +Input [7]: [ws_bill_customer_sk#46, ws_net_paid#47, d_year#50, c_customer_sk#51, c_customer_id#52, c_first_name#53, c_last_name#54] (72) HashAggregate [codegen id : 32] -Input [5]: [c_customer_id#63, c_first_name#64, c_last_name#65, ws_net_paid#57, d_year#60] -Keys [4]: [c_customer_id#63, c_first_name#64, c_last_name#65, d_year#60] -Functions [1]: [partial_sum(UnscaledValue(ws_net_paid#57))] -Aggregate Attributes [1]: [sum#66] -Results [5]: [c_customer_id#63, c_first_name#64, c_last_name#65, d_year#60, sum#67] +Input [5]: [c_customer_id#52, c_first_name#53, c_last_name#54, ws_net_paid#47, d_year#50] +Keys [4]: [c_customer_id#52, c_first_name#53, c_last_name#54, d_year#50] +Functions [1]: [partial_sum(UnscaledValue(ws_net_paid#47))] +Aggregate Attributes [1]: [sum#55] +Results [5]: [c_customer_id#52, c_first_name#53, c_last_name#54, d_year#50, sum#56] (73) Exchange -Input [5]: [c_customer_id#63, c_first_name#64, c_last_name#65, d_year#60, sum#67] -Arguments: hashpartitioning(c_customer_id#63, c_first_name#64, c_last_name#65, d_year#60, 5), ENSURE_REQUIREMENTS, [id=#68] +Input [5]: [c_customer_id#52, c_first_name#53, c_last_name#54, d_year#50, sum#56] +Arguments: hashpartitioning(c_customer_id#52, c_first_name#53, c_last_name#54, d_year#50, 5), ENSURE_REQUIREMENTS, [plan_id=12] (74) HashAggregate [codegen id : 33] -Input [5]: [c_customer_id#63, c_first_name#64, c_last_name#65, d_year#60, sum#67] -Keys [4]: [c_customer_id#63, c_first_name#64, c_last_name#65, d_year#60] -Functions [1]: [sum(UnscaledValue(ws_net_paid#57))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#57))#52] -Results [2]: [c_customer_id#63 AS customer_id#69, MakeDecimal(sum(UnscaledValue(ws_net_paid#57))#52,17,2) AS year_total#70] +Input [5]: [c_customer_id#52, c_first_name#53, c_last_name#54, d_year#50, sum#56] +Keys [4]: [c_customer_id#52, c_first_name#53, c_last_name#54, d_year#50] +Functions [1]: [sum(UnscaledValue(ws_net_paid#47))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#47))#43] +Results [2]: [c_customer_id#52 AS customer_id#57, MakeDecimal(sum(UnscaledValue(ws_net_paid#47))#43,17,2) AS year_total#58] (75) Exchange -Input [2]: [customer_id#69, year_total#70] -Arguments: hashpartitioning(customer_id#69, 5), ENSURE_REQUIREMENTS, [id=#71] +Input [2]: [customer_id#57, year_total#58] +Arguments: hashpartitioning(customer_id#57, 5), ENSURE_REQUIREMENTS, [plan_id=13] (76) Sort [codegen id : 34] -Input [2]: [customer_id#69, year_total#70] -Arguments: [customer_id#69 ASC NULLS FIRST], false, 0 +Input [2]: [customer_id#57, year_total#58] +Arguments: [customer_id#57 ASC NULLS FIRST], false, 0 (77) SortMergeJoin [codegen id : 35] -Left keys [1]: [customer_id#17] -Right keys [1]: [customer_id#69] -Join condition: (CASE WHEN (year_total#54 > 0.00) THEN CheckOverflow((promote_precision(year_total#70) / promote_precision(year_total#54)), DecimalType(37,20)) END > CASE WHEN (year_total#18 > 0.00) THEN CheckOverflow((promote_precision(year_total#37) / promote_precision(year_total#18)), DecimalType(37,20)) END) +Left keys [1]: [customer_id#14] +Right keys [1]: [customer_id#57] +Join condition: (CASE WHEN (year_total#45 > 0.00) THEN CheckOverflow((promote_precision(year_total#58) / promote_precision(year_total#45)), DecimalType(37,20)) END > CASE WHEN (year_total#15 > 0.00) THEN CheckOverflow((promote_precision(year_total#31) / promote_precision(year_total#15)), DecimalType(37,20)) END) (78) Project [codegen id : 35] -Output [3]: [customer_id#34, customer_first_name#35, customer_last_name#36] -Input [9]: [customer_id#17, year_total#18, customer_id#34, customer_first_name#35, customer_last_name#36, year_total#37, year_total#54, customer_id#69, year_total#70] +Output [3]: [customer_id#28, customer_first_name#29, customer_last_name#30] +Input [9]: [customer_id#14, year_total#15, customer_id#28, customer_first_name#29, customer_last_name#30, year_total#31, year_total#45, customer_id#57, year_total#58] (79) TakeOrderedAndProject -Input [3]: [customer_id#34, customer_first_name#35, customer_last_name#36] -Arguments: 100, [customer_first_name#35 ASC NULLS FIRST, customer_id#34 ASC NULLS FIRST, customer_last_name#36 ASC NULLS FIRST], [customer_id#34, customer_first_name#35, customer_last_name#36] +Input [3]: [customer_id#28, customer_first_name#29, customer_last_name#30] +Arguments: 100, [customer_first_name#29 ASC NULLS FIRST, customer_id#28 ASC NULLS FIRST, customer_last_name#30 ASC NULLS FIRST], [customer_id#28, customer_first_name#29, customer_last_name#30] ===== Subqueries ===== @@ -463,9 +463,9 @@ Condition : (((isnotnull(d_year#6) AND (d_year#6 = 2001)) AND d_year#6 IN (2001, (83) BroadcastExchange Input [2]: [d_date_sk#5, d_year#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#72] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=14] -Subquery:2 Hosting operator id = 22 Hosting Expression = ss_sold_date_sk#22 IN dynamicpruning#23 +Subquery:2 Hosting operator id = 22 Hosting Expression = ss_sold_date_sk#18 IN dynamicpruning#19 BroadcastExchange (87) +- * Filter (86) +- * ColumnarToRow (85) @@ -473,25 +473,25 @@ BroadcastExchange (87) (84) Scan parquet default.date_dim -Output [2]: [d_date_sk#24, d_year#25] +Output [2]: [d_date_sk#20, d_year#21] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), In(d_year, [2001,2002]), IsNotNull(d_date_sk)] ReadSchema: struct (85) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#24, d_year#25] +Input [2]: [d_date_sk#20, d_year#21] (86) Filter [codegen id : 1] -Input [2]: [d_date_sk#24, d_year#25] -Condition : (((isnotnull(d_year#25) AND (d_year#25 = 2002)) AND d_year#25 IN (2001,2002)) AND isnotnull(d_date_sk#24)) +Input [2]: [d_date_sk#20, d_year#21] +Condition : (((isnotnull(d_year#21) AND (d_year#21 = 2002)) AND d_year#21 IN (2001,2002)) AND isnotnull(d_date_sk#20)) (87) BroadcastExchange -Input [2]: [d_date_sk#24, d_year#25] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#73] +Input [2]: [d_date_sk#20, d_year#21] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15] -Subquery:3 Hosting operator id = 40 Hosting Expression = ws_sold_date_sk#41 IN dynamicpruning#4 +Subquery:3 Hosting operator id = 40 Hosting Expression = ws_sold_date_sk#34 IN dynamicpruning#4 -Subquery:4 Hosting operator id = 60 Hosting Expression = ws_sold_date_sk#58 IN dynamicpruning#23 +Subquery:4 Hosting operator id = 60 Hosting Expression = ws_sold_date_sk#48 IN dynamicpruning#19 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q74/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q74/explain.txt index a2c8929c7f285..3c549bb77b191 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q74/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q74/explain.txt @@ -103,7 +103,7 @@ Condition : isnotnull(ss_customer_sk#5) (7) BroadcastExchange Input [3]: [ss_customer_sk#5, ss_net_paid#6, ss_sold_date_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [c_customer_sk#1] @@ -115,297 +115,297 @@ Output [5]: [c_customer_id#2, c_first_name#3, c_last_name#4, ss_net_paid#6, ss_s Input [7]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, ss_customer_sk#5, ss_net_paid#6, ss_sold_date_sk#7] (10) ReusedExchange [Reuses operator id: 75] -Output [2]: [d_date_sk#10, d_year#11] +Output [2]: [d_date_sk#9, d_year#10] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_sold_date_sk#7] -Right keys [1]: [d_date_sk#10] +Right keys [1]: [d_date_sk#9] Join condition: None (12) Project [codegen id : 3] -Output [5]: [c_customer_id#2, c_first_name#3, c_last_name#4, ss_net_paid#6, d_year#11] -Input [7]: [c_customer_id#2, c_first_name#3, c_last_name#4, ss_net_paid#6, ss_sold_date_sk#7, d_date_sk#10, d_year#11] +Output [5]: [c_customer_id#2, c_first_name#3, c_last_name#4, ss_net_paid#6, d_year#10] +Input [7]: [c_customer_id#2, c_first_name#3, c_last_name#4, ss_net_paid#6, ss_sold_date_sk#7, d_date_sk#9, d_year#10] (13) HashAggregate [codegen id : 3] -Input [5]: [c_customer_id#2, c_first_name#3, c_last_name#4, ss_net_paid#6, d_year#11] -Keys [4]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#11] +Input [5]: [c_customer_id#2, c_first_name#3, c_last_name#4, ss_net_paid#6, d_year#10] +Keys [4]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#10] Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#6))] -Aggregate Attributes [1]: [sum#12] -Results [5]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#11, sum#13] +Aggregate Attributes [1]: [sum#11] +Results [5]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#10, sum#12] (14) Exchange -Input [5]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#11, sum#13] -Arguments: hashpartitioning(c_customer_id#2, c_first_name#3, c_last_name#4, d_year#11, 5), ENSURE_REQUIREMENTS, [id=#14] +Input [5]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#10, sum#12] +Arguments: hashpartitioning(c_customer_id#2, c_first_name#3, c_last_name#4, d_year#10, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 16] -Input [5]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#11, sum#13] -Keys [4]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#11] +Input [5]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#10, sum#12] +Keys [4]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#10] Functions [1]: [sum(UnscaledValue(ss_net_paid#6))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#6))#15] -Results [2]: [c_customer_id#2 AS customer_id#16, MakeDecimal(sum(UnscaledValue(ss_net_paid#6))#15,17,2) AS year_total#17] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#6))#13] +Results [2]: [c_customer_id#2 AS customer_id#14, MakeDecimal(sum(UnscaledValue(ss_net_paid#6))#13,17,2) AS year_total#15] (16) Filter [codegen id : 16] -Input [2]: [customer_id#16, year_total#17] -Condition : (isnotnull(year_total#17) AND (year_total#17 > 0.00)) +Input [2]: [customer_id#14, year_total#15] +Condition : (isnotnull(year_total#15) AND (year_total#15 > 0.00)) (17) Scan parquet default.customer -Output [4]: [c_customer_sk#18, c_customer_id#19, c_first_name#20, c_last_name#21] +Output [4]: [c_customer_sk#16, c_customer_id#17, c_first_name#18, c_last_name#19] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (18) ColumnarToRow [codegen id : 6] -Input [4]: [c_customer_sk#18, c_customer_id#19, c_first_name#20, c_last_name#21] +Input [4]: [c_customer_sk#16, c_customer_id#17, c_first_name#18, c_last_name#19] (19) Filter [codegen id : 6] -Input [4]: [c_customer_sk#18, c_customer_id#19, c_first_name#20, c_last_name#21] -Condition : (isnotnull(c_customer_sk#18) AND isnotnull(c_customer_id#19)) +Input [4]: [c_customer_sk#16, c_customer_id#17, c_first_name#18, c_last_name#19] +Condition : (isnotnull(c_customer_sk#16) AND isnotnull(c_customer_id#17)) (20) Scan parquet default.store_sales -Output [3]: [ss_customer_sk#22, ss_net_paid#23, ss_sold_date_sk#24] +Output [3]: [ss_customer_sk#20, ss_net_paid#21, ss_sold_date_sk#22] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#24), dynamicpruningexpression(ss_sold_date_sk#24 IN dynamicpruning#25)] +PartitionFilters: [isnotnull(ss_sold_date_sk#22), dynamicpruningexpression(ss_sold_date_sk#22 IN dynamicpruning#23)] PushedFilters: [IsNotNull(ss_customer_sk)] ReadSchema: struct (21) ColumnarToRow [codegen id : 4] -Input [3]: [ss_customer_sk#22, ss_net_paid#23, ss_sold_date_sk#24] +Input [3]: [ss_customer_sk#20, ss_net_paid#21, ss_sold_date_sk#22] (22) Filter [codegen id : 4] -Input [3]: [ss_customer_sk#22, ss_net_paid#23, ss_sold_date_sk#24] -Condition : isnotnull(ss_customer_sk#22) +Input [3]: [ss_customer_sk#20, ss_net_paid#21, ss_sold_date_sk#22] +Condition : isnotnull(ss_customer_sk#20) (23) BroadcastExchange -Input [3]: [ss_customer_sk#22, ss_net_paid#23, ss_sold_date_sk#24] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#26] +Input [3]: [ss_customer_sk#20, ss_net_paid#21, ss_sold_date_sk#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [c_customer_sk#18] -Right keys [1]: [ss_customer_sk#22] +Left keys [1]: [c_customer_sk#16] +Right keys [1]: [ss_customer_sk#20] Join condition: None (25) Project [codegen id : 6] -Output [5]: [c_customer_id#19, c_first_name#20, c_last_name#21, ss_net_paid#23, ss_sold_date_sk#24] -Input [7]: [c_customer_sk#18, c_customer_id#19, c_first_name#20, c_last_name#21, ss_customer_sk#22, ss_net_paid#23, ss_sold_date_sk#24] +Output [5]: [c_customer_id#17, c_first_name#18, c_last_name#19, ss_net_paid#21, ss_sold_date_sk#22] +Input [7]: [c_customer_sk#16, c_customer_id#17, c_first_name#18, c_last_name#19, ss_customer_sk#20, ss_net_paid#21, ss_sold_date_sk#22] (26) ReusedExchange [Reuses operator id: 79] -Output [2]: [d_date_sk#27, d_year#28] +Output [2]: [d_date_sk#24, d_year#25] (27) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ss_sold_date_sk#24] -Right keys [1]: [d_date_sk#27] +Left keys [1]: [ss_sold_date_sk#22] +Right keys [1]: [d_date_sk#24] Join condition: None (28) Project [codegen id : 6] -Output [5]: [c_customer_id#19, c_first_name#20, c_last_name#21, ss_net_paid#23, d_year#28] -Input [7]: [c_customer_id#19, c_first_name#20, c_last_name#21, ss_net_paid#23, ss_sold_date_sk#24, d_date_sk#27, d_year#28] +Output [5]: [c_customer_id#17, c_first_name#18, c_last_name#19, ss_net_paid#21, d_year#25] +Input [7]: [c_customer_id#17, c_first_name#18, c_last_name#19, ss_net_paid#21, ss_sold_date_sk#22, d_date_sk#24, d_year#25] (29) HashAggregate [codegen id : 6] -Input [5]: [c_customer_id#19, c_first_name#20, c_last_name#21, ss_net_paid#23, d_year#28] -Keys [4]: [c_customer_id#19, c_first_name#20, c_last_name#21, d_year#28] -Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#23))] -Aggregate Attributes [1]: [sum#29] -Results [5]: [c_customer_id#19, c_first_name#20, c_last_name#21, d_year#28, sum#30] +Input [5]: [c_customer_id#17, c_first_name#18, c_last_name#19, ss_net_paid#21, d_year#25] +Keys [4]: [c_customer_id#17, c_first_name#18, c_last_name#19, d_year#25] +Functions [1]: [partial_sum(UnscaledValue(ss_net_paid#21))] +Aggregate Attributes [1]: [sum#26] +Results [5]: [c_customer_id#17, c_first_name#18, c_last_name#19, d_year#25, sum#27] (30) Exchange -Input [5]: [c_customer_id#19, c_first_name#20, c_last_name#21, d_year#28, sum#30] -Arguments: hashpartitioning(c_customer_id#19, c_first_name#20, c_last_name#21, d_year#28, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [5]: [c_customer_id#17, c_first_name#18, c_last_name#19, d_year#25, sum#27] +Arguments: hashpartitioning(c_customer_id#17, c_first_name#18, c_last_name#19, d_year#25, 5), ENSURE_REQUIREMENTS, [plan_id=4] (31) HashAggregate [codegen id : 7] -Input [5]: [c_customer_id#19, c_first_name#20, c_last_name#21, d_year#28, sum#30] -Keys [4]: [c_customer_id#19, c_first_name#20, c_last_name#21, d_year#28] -Functions [1]: [sum(UnscaledValue(ss_net_paid#23))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#23))#15] -Results [4]: [c_customer_id#19 AS customer_id#32, c_first_name#20 AS customer_first_name#33, c_last_name#21 AS customer_last_name#34, MakeDecimal(sum(UnscaledValue(ss_net_paid#23))#15,17,2) AS year_total#35] +Input [5]: [c_customer_id#17, c_first_name#18, c_last_name#19, d_year#25, sum#27] +Keys [4]: [c_customer_id#17, c_first_name#18, c_last_name#19, d_year#25] +Functions [1]: [sum(UnscaledValue(ss_net_paid#21))] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_paid#21))#13] +Results [4]: [c_customer_id#17 AS customer_id#28, c_first_name#18 AS customer_first_name#29, c_last_name#19 AS customer_last_name#30, MakeDecimal(sum(UnscaledValue(ss_net_paid#21))#13,17,2) AS year_total#31] (32) BroadcastExchange -Input [4]: [customer_id#32, customer_first_name#33, customer_last_name#34, year_total#35] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#36] +Input [4]: [customer_id#28, customer_first_name#29, customer_last_name#30, year_total#31] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=5] (33) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [customer_id#16] -Right keys [1]: [customer_id#32] +Left keys [1]: [customer_id#14] +Right keys [1]: [customer_id#28] Join condition: None (34) Scan parquet default.customer -Output [4]: [c_customer_sk#37, c_customer_id#38, c_first_name#39, c_last_name#40] +Output [4]: [c_customer_sk#32, c_customer_id#33, c_first_name#34, c_last_name#35] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (35) ColumnarToRow [codegen id : 10] -Input [4]: [c_customer_sk#37, c_customer_id#38, c_first_name#39, c_last_name#40] +Input [4]: [c_customer_sk#32, c_customer_id#33, c_first_name#34, c_last_name#35] (36) Filter [codegen id : 10] -Input [4]: [c_customer_sk#37, c_customer_id#38, c_first_name#39, c_last_name#40] -Condition : (isnotnull(c_customer_sk#37) AND isnotnull(c_customer_id#38)) +Input [4]: [c_customer_sk#32, c_customer_id#33, c_first_name#34, c_last_name#35] +Condition : (isnotnull(c_customer_sk#32) AND isnotnull(c_customer_id#33)) (37) Scan parquet default.web_sales -Output [3]: [ws_bill_customer_sk#41, ws_net_paid#42, ws_sold_date_sk#43] +Output [3]: [ws_bill_customer_sk#36, ws_net_paid#37, ws_sold_date_sk#38] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#43), dynamicpruningexpression(ws_sold_date_sk#43 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ws_sold_date_sk#38), dynamicpruningexpression(ws_sold_date_sk#38 IN dynamicpruning#8)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (38) ColumnarToRow [codegen id : 8] -Input [3]: [ws_bill_customer_sk#41, ws_net_paid#42, ws_sold_date_sk#43] +Input [3]: [ws_bill_customer_sk#36, ws_net_paid#37, ws_sold_date_sk#38] (39) Filter [codegen id : 8] -Input [3]: [ws_bill_customer_sk#41, ws_net_paid#42, ws_sold_date_sk#43] -Condition : isnotnull(ws_bill_customer_sk#41) +Input [3]: [ws_bill_customer_sk#36, ws_net_paid#37, ws_sold_date_sk#38] +Condition : isnotnull(ws_bill_customer_sk#36) (40) BroadcastExchange -Input [3]: [ws_bill_customer_sk#41, ws_net_paid#42, ws_sold_date_sk#43] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#44] +Input [3]: [ws_bill_customer_sk#36, ws_net_paid#37, ws_sold_date_sk#38] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6] (41) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [c_customer_sk#37] -Right keys [1]: [ws_bill_customer_sk#41] +Left keys [1]: [c_customer_sk#32] +Right keys [1]: [ws_bill_customer_sk#36] Join condition: None (42) Project [codegen id : 10] -Output [5]: [c_customer_id#38, c_first_name#39, c_last_name#40, ws_net_paid#42, ws_sold_date_sk#43] -Input [7]: [c_customer_sk#37, c_customer_id#38, c_first_name#39, c_last_name#40, ws_bill_customer_sk#41, ws_net_paid#42, ws_sold_date_sk#43] +Output [5]: [c_customer_id#33, c_first_name#34, c_last_name#35, ws_net_paid#37, ws_sold_date_sk#38] +Input [7]: [c_customer_sk#32, c_customer_id#33, c_first_name#34, c_last_name#35, ws_bill_customer_sk#36, ws_net_paid#37, ws_sold_date_sk#38] (43) ReusedExchange [Reuses operator id: 75] -Output [2]: [d_date_sk#45, d_year#46] +Output [2]: [d_date_sk#39, d_year#40] (44) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ws_sold_date_sk#43] -Right keys [1]: [d_date_sk#45] +Left keys [1]: [ws_sold_date_sk#38] +Right keys [1]: [d_date_sk#39] Join condition: None (45) Project [codegen id : 10] -Output [5]: [c_customer_id#38, c_first_name#39, c_last_name#40, ws_net_paid#42, d_year#46] -Input [7]: [c_customer_id#38, c_first_name#39, c_last_name#40, ws_net_paid#42, ws_sold_date_sk#43, d_date_sk#45, d_year#46] +Output [5]: [c_customer_id#33, c_first_name#34, c_last_name#35, ws_net_paid#37, d_year#40] +Input [7]: [c_customer_id#33, c_first_name#34, c_last_name#35, ws_net_paid#37, ws_sold_date_sk#38, d_date_sk#39, d_year#40] (46) HashAggregate [codegen id : 10] -Input [5]: [c_customer_id#38, c_first_name#39, c_last_name#40, ws_net_paid#42, d_year#46] -Keys [4]: [c_customer_id#38, c_first_name#39, c_last_name#40, d_year#46] -Functions [1]: [partial_sum(UnscaledValue(ws_net_paid#42))] -Aggregate Attributes [1]: [sum#47] -Results [5]: [c_customer_id#38, c_first_name#39, c_last_name#40, d_year#46, sum#48] +Input [5]: [c_customer_id#33, c_first_name#34, c_last_name#35, ws_net_paid#37, d_year#40] +Keys [4]: [c_customer_id#33, c_first_name#34, c_last_name#35, d_year#40] +Functions [1]: [partial_sum(UnscaledValue(ws_net_paid#37))] +Aggregate Attributes [1]: [sum#41] +Results [5]: [c_customer_id#33, c_first_name#34, c_last_name#35, d_year#40, sum#42] (47) Exchange -Input [5]: [c_customer_id#38, c_first_name#39, c_last_name#40, d_year#46, sum#48] -Arguments: hashpartitioning(c_customer_id#38, c_first_name#39, c_last_name#40, d_year#46, 5), ENSURE_REQUIREMENTS, [id=#49] +Input [5]: [c_customer_id#33, c_first_name#34, c_last_name#35, d_year#40, sum#42] +Arguments: hashpartitioning(c_customer_id#33, c_first_name#34, c_last_name#35, d_year#40, 5), ENSURE_REQUIREMENTS, [plan_id=7] (48) HashAggregate [codegen id : 11] -Input [5]: [c_customer_id#38, c_first_name#39, c_last_name#40, d_year#46, sum#48] -Keys [4]: [c_customer_id#38, c_first_name#39, c_last_name#40, d_year#46] -Functions [1]: [sum(UnscaledValue(ws_net_paid#42))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#42))#50] -Results [2]: [c_customer_id#38 AS customer_id#51, MakeDecimal(sum(UnscaledValue(ws_net_paid#42))#50,17,2) AS year_total#52] +Input [5]: [c_customer_id#33, c_first_name#34, c_last_name#35, d_year#40, sum#42] +Keys [4]: [c_customer_id#33, c_first_name#34, c_last_name#35, d_year#40] +Functions [1]: [sum(UnscaledValue(ws_net_paid#37))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#37))#43] +Results [2]: [c_customer_id#33 AS customer_id#44, MakeDecimal(sum(UnscaledValue(ws_net_paid#37))#43,17,2) AS year_total#45] (49) Filter [codegen id : 11] -Input [2]: [customer_id#51, year_total#52] -Condition : (isnotnull(year_total#52) AND (year_total#52 > 0.00)) +Input [2]: [customer_id#44, year_total#45] +Condition : (isnotnull(year_total#45) AND (year_total#45 > 0.00)) (50) BroadcastExchange -Input [2]: [customer_id#51, year_total#52] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#53] +Input [2]: [customer_id#44, year_total#45] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=8] (51) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [customer_id#16] -Right keys [1]: [customer_id#51] +Left keys [1]: [customer_id#14] +Right keys [1]: [customer_id#44] Join condition: None (52) Project [codegen id : 16] -Output [7]: [customer_id#16, year_total#17, customer_id#32, customer_first_name#33, customer_last_name#34, year_total#35, year_total#52] -Input [8]: [customer_id#16, year_total#17, customer_id#32, customer_first_name#33, customer_last_name#34, year_total#35, customer_id#51, year_total#52] +Output [7]: [customer_id#14, year_total#15, customer_id#28, customer_first_name#29, customer_last_name#30, year_total#31, year_total#45] +Input [8]: [customer_id#14, year_total#15, customer_id#28, customer_first_name#29, customer_last_name#30, year_total#31, customer_id#44, year_total#45] (53) Scan parquet default.customer -Output [4]: [c_customer_sk#54, c_customer_id#55, c_first_name#56, c_last_name#57] +Output [4]: [c_customer_sk#46, c_customer_id#47, c_first_name#48, c_last_name#49] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)] ReadSchema: struct (54) ColumnarToRow [codegen id : 14] -Input [4]: [c_customer_sk#54, c_customer_id#55, c_first_name#56, c_last_name#57] +Input [4]: [c_customer_sk#46, c_customer_id#47, c_first_name#48, c_last_name#49] (55) Filter [codegen id : 14] -Input [4]: [c_customer_sk#54, c_customer_id#55, c_first_name#56, c_last_name#57] -Condition : (isnotnull(c_customer_sk#54) AND isnotnull(c_customer_id#55)) +Input [4]: [c_customer_sk#46, c_customer_id#47, c_first_name#48, c_last_name#49] +Condition : (isnotnull(c_customer_sk#46) AND isnotnull(c_customer_id#47)) (56) Scan parquet default.web_sales -Output [3]: [ws_bill_customer_sk#58, ws_net_paid#59, ws_sold_date_sk#60] +Output [3]: [ws_bill_customer_sk#50, ws_net_paid#51, ws_sold_date_sk#52] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#60), dynamicpruningexpression(ws_sold_date_sk#60 IN dynamicpruning#25)] +PartitionFilters: [isnotnull(ws_sold_date_sk#52), dynamicpruningexpression(ws_sold_date_sk#52 IN dynamicpruning#23)] PushedFilters: [IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 12] -Input [3]: [ws_bill_customer_sk#58, ws_net_paid#59, ws_sold_date_sk#60] +Input [3]: [ws_bill_customer_sk#50, ws_net_paid#51, ws_sold_date_sk#52] (58) Filter [codegen id : 12] -Input [3]: [ws_bill_customer_sk#58, ws_net_paid#59, ws_sold_date_sk#60] -Condition : isnotnull(ws_bill_customer_sk#58) +Input [3]: [ws_bill_customer_sk#50, ws_net_paid#51, ws_sold_date_sk#52] +Condition : isnotnull(ws_bill_customer_sk#50) (59) BroadcastExchange -Input [3]: [ws_bill_customer_sk#58, ws_net_paid#59, ws_sold_date_sk#60] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#61] +Input [3]: [ws_bill_customer_sk#50, ws_net_paid#51, ws_sold_date_sk#52] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] (60) BroadcastHashJoin [codegen id : 14] -Left keys [1]: [c_customer_sk#54] -Right keys [1]: [ws_bill_customer_sk#58] +Left keys [1]: [c_customer_sk#46] +Right keys [1]: [ws_bill_customer_sk#50] Join condition: None (61) Project [codegen id : 14] -Output [5]: [c_customer_id#55, c_first_name#56, c_last_name#57, ws_net_paid#59, ws_sold_date_sk#60] -Input [7]: [c_customer_sk#54, c_customer_id#55, c_first_name#56, c_last_name#57, ws_bill_customer_sk#58, ws_net_paid#59, ws_sold_date_sk#60] +Output [5]: [c_customer_id#47, c_first_name#48, c_last_name#49, ws_net_paid#51, ws_sold_date_sk#52] +Input [7]: [c_customer_sk#46, c_customer_id#47, c_first_name#48, c_last_name#49, ws_bill_customer_sk#50, ws_net_paid#51, ws_sold_date_sk#52] (62) ReusedExchange [Reuses operator id: 79] -Output [2]: [d_date_sk#62, d_year#63] +Output [2]: [d_date_sk#53, d_year#54] (63) BroadcastHashJoin [codegen id : 14] -Left keys [1]: [ws_sold_date_sk#60] -Right keys [1]: [d_date_sk#62] +Left keys [1]: [ws_sold_date_sk#52] +Right keys [1]: [d_date_sk#53] Join condition: None (64) Project [codegen id : 14] -Output [5]: [c_customer_id#55, c_first_name#56, c_last_name#57, ws_net_paid#59, d_year#63] -Input [7]: [c_customer_id#55, c_first_name#56, c_last_name#57, ws_net_paid#59, ws_sold_date_sk#60, d_date_sk#62, d_year#63] +Output [5]: [c_customer_id#47, c_first_name#48, c_last_name#49, ws_net_paid#51, d_year#54] +Input [7]: [c_customer_id#47, c_first_name#48, c_last_name#49, ws_net_paid#51, ws_sold_date_sk#52, d_date_sk#53, d_year#54] (65) HashAggregate [codegen id : 14] -Input [5]: [c_customer_id#55, c_first_name#56, c_last_name#57, ws_net_paid#59, d_year#63] -Keys [4]: [c_customer_id#55, c_first_name#56, c_last_name#57, d_year#63] -Functions [1]: [partial_sum(UnscaledValue(ws_net_paid#59))] -Aggregate Attributes [1]: [sum#64] -Results [5]: [c_customer_id#55, c_first_name#56, c_last_name#57, d_year#63, sum#65] +Input [5]: [c_customer_id#47, c_first_name#48, c_last_name#49, ws_net_paid#51, d_year#54] +Keys [4]: [c_customer_id#47, c_first_name#48, c_last_name#49, d_year#54] +Functions [1]: [partial_sum(UnscaledValue(ws_net_paid#51))] +Aggregate Attributes [1]: [sum#55] +Results [5]: [c_customer_id#47, c_first_name#48, c_last_name#49, d_year#54, sum#56] (66) Exchange -Input [5]: [c_customer_id#55, c_first_name#56, c_last_name#57, d_year#63, sum#65] -Arguments: hashpartitioning(c_customer_id#55, c_first_name#56, c_last_name#57, d_year#63, 5), ENSURE_REQUIREMENTS, [id=#66] +Input [5]: [c_customer_id#47, c_first_name#48, c_last_name#49, d_year#54, sum#56] +Arguments: hashpartitioning(c_customer_id#47, c_first_name#48, c_last_name#49, d_year#54, 5), ENSURE_REQUIREMENTS, [plan_id=10] (67) HashAggregate [codegen id : 15] -Input [5]: [c_customer_id#55, c_first_name#56, c_last_name#57, d_year#63, sum#65] -Keys [4]: [c_customer_id#55, c_first_name#56, c_last_name#57, d_year#63] -Functions [1]: [sum(UnscaledValue(ws_net_paid#59))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#59))#50] -Results [2]: [c_customer_id#55 AS customer_id#67, MakeDecimal(sum(UnscaledValue(ws_net_paid#59))#50,17,2) AS year_total#68] +Input [5]: [c_customer_id#47, c_first_name#48, c_last_name#49, d_year#54, sum#56] +Keys [4]: [c_customer_id#47, c_first_name#48, c_last_name#49, d_year#54] +Functions [1]: [sum(UnscaledValue(ws_net_paid#51))] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#51))#43] +Results [2]: [c_customer_id#47 AS customer_id#57, MakeDecimal(sum(UnscaledValue(ws_net_paid#51))#43,17,2) AS year_total#58] (68) BroadcastExchange -Input [2]: [customer_id#67, year_total#68] -Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [id=#69] +Input [2]: [customer_id#57, year_total#58] +Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=11] (69) BroadcastHashJoin [codegen id : 16] -Left keys [1]: [customer_id#16] -Right keys [1]: [customer_id#67] -Join condition: (CASE WHEN (year_total#52 > 0.00) THEN CheckOverflow((promote_precision(year_total#68) / promote_precision(year_total#52)), DecimalType(37,20)) END > CASE WHEN (year_total#17 > 0.00) THEN CheckOverflow((promote_precision(year_total#35) / promote_precision(year_total#17)), DecimalType(37,20)) END) +Left keys [1]: [customer_id#14] +Right keys [1]: [customer_id#57] +Join condition: (CASE WHEN (year_total#45 > 0.00) THEN CheckOverflow((promote_precision(year_total#58) / promote_precision(year_total#45)), DecimalType(37,20)) END > CASE WHEN (year_total#15 > 0.00) THEN CheckOverflow((promote_precision(year_total#31) / promote_precision(year_total#15)), DecimalType(37,20)) END) (70) Project [codegen id : 16] -Output [3]: [customer_id#32, customer_first_name#33, customer_last_name#34] -Input [9]: [customer_id#16, year_total#17, customer_id#32, customer_first_name#33, customer_last_name#34, year_total#35, year_total#52, customer_id#67, year_total#68] +Output [3]: [customer_id#28, customer_first_name#29, customer_last_name#30] +Input [9]: [customer_id#14, year_total#15, customer_id#28, customer_first_name#29, customer_last_name#30, year_total#31, year_total#45, customer_id#57, year_total#58] (71) TakeOrderedAndProject -Input [3]: [customer_id#32, customer_first_name#33, customer_last_name#34] -Arguments: 100, [customer_first_name#33 ASC NULLS FIRST, customer_id#32 ASC NULLS FIRST, customer_last_name#34 ASC NULLS FIRST], [customer_id#32, customer_first_name#33, customer_last_name#34] +Input [3]: [customer_id#28, customer_first_name#29, customer_last_name#30] +Arguments: 100, [customer_first_name#29 ASC NULLS FIRST, customer_id#28 ASC NULLS FIRST, customer_last_name#30 ASC NULLS FIRST], [customer_id#28, customer_first_name#29, customer_last_name#30] ===== Subqueries ===== @@ -417,24 +417,24 @@ BroadcastExchange (75) (72) Scan parquet default.date_dim -Output [2]: [d_date_sk#10, d_year#11] +Output [2]: [d_date_sk#9, d_year#10] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), In(d_year, [2001,2002]), IsNotNull(d_date_sk)] ReadSchema: struct (73) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#10, d_year#11] +Input [2]: [d_date_sk#9, d_year#10] (74) Filter [codegen id : 1] -Input [2]: [d_date_sk#10, d_year#11] -Condition : (((isnotnull(d_year#11) AND (d_year#11 = 2001)) AND d_year#11 IN (2001,2002)) AND isnotnull(d_date_sk#10)) +Input [2]: [d_date_sk#9, d_year#10] +Condition : (((isnotnull(d_year#10) AND (d_year#10 = 2001)) AND d_year#10 IN (2001,2002)) AND isnotnull(d_date_sk#9)) (75) BroadcastExchange -Input [2]: [d_date_sk#10, d_year#11] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#70] +Input [2]: [d_date_sk#9, d_year#10] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=12] -Subquery:2 Hosting operator id = 20 Hosting Expression = ss_sold_date_sk#24 IN dynamicpruning#25 +Subquery:2 Hosting operator id = 20 Hosting Expression = ss_sold_date_sk#22 IN dynamicpruning#23 BroadcastExchange (79) +- * Filter (78) +- * ColumnarToRow (77) @@ -442,25 +442,25 @@ BroadcastExchange (79) (76) Scan parquet default.date_dim -Output [2]: [d_date_sk#27, d_year#28] +Output [2]: [d_date_sk#24, d_year#25] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), In(d_year, [2001,2002]), IsNotNull(d_date_sk)] ReadSchema: struct (77) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#27, d_year#28] +Input [2]: [d_date_sk#24, d_year#25] (78) Filter [codegen id : 1] -Input [2]: [d_date_sk#27, d_year#28] -Condition : (((isnotnull(d_year#28) AND (d_year#28 = 2002)) AND d_year#28 IN (2001,2002)) AND isnotnull(d_date_sk#27)) +Input [2]: [d_date_sk#24, d_year#25] +Condition : (((isnotnull(d_year#25) AND (d_year#25 = 2002)) AND d_year#25 IN (2001,2002)) AND isnotnull(d_date_sk#24)) (79) BroadcastExchange -Input [2]: [d_date_sk#27, d_year#28] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#71] +Input [2]: [d_date_sk#24, d_year#25] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=13] -Subquery:3 Hosting operator id = 37 Hosting Expression = ws_sold_date_sk#43 IN dynamicpruning#8 +Subquery:3 Hosting operator id = 37 Hosting Expression = ws_sold_date_sk#38 IN dynamicpruning#8 -Subquery:4 Hosting operator id = 56 Hosting Expression = ws_sold_date_sk#60 IN dynamicpruning#25 +Subquery:4 Hosting operator id = 56 Hosting Expression = ws_sold_date_sk#52 IN dynamicpruning#23 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q75.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q75.sf100/explain.txt index 27a2b5f734281..6bb0d1e90534b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q75.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q75.sf100/explain.txt @@ -163,7 +163,7 @@ Input [6]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_categor (8) BroadcastExchange Input [5]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_item_sk#1] @@ -175,517 +175,517 @@ Output [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price# Input [10]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, cs_sold_date_sk#5, i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12] (11) ReusedExchange [Reuses operator id: 131] -Output [2]: [d_date_sk#14, d_year#15] +Output [2]: [d_date_sk#13, d_year#14] (12) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_sold_date_sk#5] -Right keys [1]: [d_date_sk#14] +Right keys [1]: [d_date_sk#13] Join condition: None (13) Project [codegen id : 3] -Output [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#15] -Input [11]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, cs_sold_date_sk#5, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_date_sk#14, d_year#15] +Output [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14] +Input [11]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, cs_sold_date_sk#5, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_date_sk#13, d_year#14] (14) Exchange -Input [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#15] -Arguments: hashpartitioning(cs_order_number#2, cs_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14] +Arguments: hashpartitioning(cs_order_number#2, cs_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) Sort [codegen id : 4] -Input [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#15] +Input [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14] Arguments: [cs_order_number#2 ASC NULLS FIRST, cs_item_sk#1 ASC NULLS FIRST], false, 0 (16) Scan parquet default.catalog_returns -Output [5]: [cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20, cr_returned_date_sk#21] +Output [5]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18, cr_returned_date_sk#19] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_order_number), IsNotNull(cr_item_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 5] -Input [5]: [cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20, cr_returned_date_sk#21] +Input [5]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18, cr_returned_date_sk#19] (18) Filter [codegen id : 5] -Input [5]: [cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20, cr_returned_date_sk#21] -Condition : (isnotnull(cr_order_number#18) AND isnotnull(cr_item_sk#17)) +Input [5]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18, cr_returned_date_sk#19] +Condition : (isnotnull(cr_order_number#16) AND isnotnull(cr_item_sk#15)) (19) Project [codegen id : 5] -Output [4]: [cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20] -Input [5]: [cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20, cr_returned_date_sk#21] +Output [4]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18] +Input [5]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18, cr_returned_date_sk#19] (20) Exchange -Input [4]: [cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20] -Arguments: hashpartitioning(cr_order_number#18, cr_item_sk#17, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [4]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18] +Arguments: hashpartitioning(cr_order_number#16, cr_item_sk#15, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) Sort [codegen id : 6] -Input [4]: [cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20] -Arguments: [cr_order_number#18 ASC NULLS FIRST, cr_item_sk#17 ASC NULLS FIRST], false, 0 +Input [4]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18] +Arguments: [cr_order_number#16 ASC NULLS FIRST, cr_item_sk#15 ASC NULLS FIRST], false, 0 (22) SortMergeJoin [codegen id : 7] Left keys [2]: [cs_order_number#2, cs_item_sk#1] -Right keys [2]: [cr_order_number#18, cr_item_sk#17] +Right keys [2]: [cr_order_number#16, cr_item_sk#15] Join condition: None (23) Project [codegen id : 7] -Output [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, (cs_quantity#3 - coalesce(cr_return_quantity#19, 0)) AS sales_cnt#23, CheckOverflow((promote_precision(cast(cs_ext_sales_price#4 as decimal(8,2))) - promote_precision(cast(coalesce(cr_return_amount#20, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#24] -Input [13]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#15, cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20] +Output [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, (cs_quantity#3 - coalesce(cr_return_quantity#17, 0)) AS sales_cnt#20, CheckOverflow((promote_precision(cast(cs_ext_sales_price#4 as decimal(8,2))) - promote_precision(cast(coalesce(cr_return_amount#18, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#21] +Input [13]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14, cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18] (24) Scan parquet default.store_sales -Output [5]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, ss_sold_date_sk#29] +Output [5]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#29), dynamicpruningexpression(ss_sold_date_sk#29 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(ss_sold_date_sk#26), dynamicpruningexpression(ss_sold_date_sk#26 IN dynamicpruning#6)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 10] -Input [5]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, ss_sold_date_sk#29] +Input [5]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26] (26) Filter [codegen id : 10] -Input [5]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, ss_sold_date_sk#29] -Condition : isnotnull(ss_item_sk#25) +Input [5]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26] +Condition : isnotnull(ss_item_sk#22) (27) ReusedExchange [Reuses operator id: 8] -Output [5]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34] +Output [5]: [i_item_sk#27, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31] (28) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_item_sk#25] -Right keys [1]: [i_item_sk#30] +Left keys [1]: [ss_item_sk#22] +Right keys [1]: [i_item_sk#27] Join condition: None (29) Project [codegen id : 10] -Output [9]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, ss_sold_date_sk#29, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34] -Input [10]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, ss_sold_date_sk#29, i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34] +Output [9]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31] +Input [10]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26, i_item_sk#27, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31] (30) ReusedExchange [Reuses operator id: 131] -Output [2]: [d_date_sk#35, d_year#36] +Output [2]: [d_date_sk#32, d_year#33] (31) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_sold_date_sk#29] -Right keys [1]: [d_date_sk#35] +Left keys [1]: [ss_sold_date_sk#26] +Right keys [1]: [d_date_sk#32] Join condition: None (32) Project [codegen id : 10] -Output [9]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34, d_year#36] -Input [11]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, ss_sold_date_sk#29, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34, d_date_sk#35, d_year#36] +Output [9]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31, d_year#33] +Input [11]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31, d_date_sk#32, d_year#33] (33) Exchange -Input [9]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34, d_year#36] -Arguments: hashpartitioning(ss_ticket_number#26, ss_item_sk#25, 5), ENSURE_REQUIREMENTS, [id=#37] +Input [9]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31, d_year#33] +Arguments: hashpartitioning(ss_ticket_number#23, ss_item_sk#22, 5), ENSURE_REQUIREMENTS, [plan_id=4] (34) Sort [codegen id : 11] -Input [9]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34, d_year#36] -Arguments: [ss_ticket_number#26 ASC NULLS FIRST, ss_item_sk#25 ASC NULLS FIRST], false, 0 +Input [9]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31, d_year#33] +Arguments: [ss_ticket_number#23 ASC NULLS FIRST, ss_item_sk#22 ASC NULLS FIRST], false, 0 (35) Scan parquet default.store_returns -Output [5]: [sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41, sr_returned_date_sk#42] +Output [5]: [sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37, sr_returned_date_sk#38] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct (36) ColumnarToRow [codegen id : 12] -Input [5]: [sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41, sr_returned_date_sk#42] +Input [5]: [sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37, sr_returned_date_sk#38] (37) Filter [codegen id : 12] -Input [5]: [sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41, sr_returned_date_sk#42] -Condition : (isnotnull(sr_ticket_number#39) AND isnotnull(sr_item_sk#38)) +Input [5]: [sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37, sr_returned_date_sk#38] +Condition : (isnotnull(sr_ticket_number#35) AND isnotnull(sr_item_sk#34)) (38) Project [codegen id : 12] -Output [4]: [sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41] -Input [5]: [sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41, sr_returned_date_sk#42] +Output [4]: [sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37] +Input [5]: [sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37, sr_returned_date_sk#38] (39) Exchange -Input [4]: [sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41] -Arguments: hashpartitioning(sr_ticket_number#39, sr_item_sk#38, 5), ENSURE_REQUIREMENTS, [id=#43] +Input [4]: [sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37] +Arguments: hashpartitioning(sr_ticket_number#35, sr_item_sk#34, 5), ENSURE_REQUIREMENTS, [plan_id=5] (40) Sort [codegen id : 13] -Input [4]: [sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41] -Arguments: [sr_ticket_number#39 ASC NULLS FIRST, sr_item_sk#38 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37] +Arguments: [sr_ticket_number#35 ASC NULLS FIRST, sr_item_sk#34 ASC NULLS FIRST], false, 0 (41) SortMergeJoin [codegen id : 14] -Left keys [2]: [ss_ticket_number#26, ss_item_sk#25] -Right keys [2]: [sr_ticket_number#39, sr_item_sk#38] +Left keys [2]: [ss_ticket_number#23, ss_item_sk#22] +Right keys [2]: [sr_ticket_number#35, sr_item_sk#34] Join condition: None (42) Project [codegen id : 14] -Output [7]: [d_year#36, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34, (ss_quantity#27 - coalesce(sr_return_quantity#40, 0)) AS sales_cnt#44, CheckOverflow((promote_precision(cast(ss_ext_sales_price#28 as decimal(8,2))) - promote_precision(cast(coalesce(sr_return_amt#41, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#45] -Input [13]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34, d_year#36, sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41] +Output [7]: [d_year#33, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31, (ss_quantity#24 - coalesce(sr_return_quantity#36, 0)) AS sales_cnt#39, CheckOverflow((promote_precision(cast(ss_ext_sales_price#25 as decimal(8,2))) - promote_precision(cast(coalesce(sr_return_amt#37, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#40] +Input [13]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31, d_year#33, sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37] (43) Scan parquet default.web_sales -Output [5]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, ws_sold_date_sk#50] +Output [5]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, ws_sold_date_sk#45] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#50), dynamicpruningexpression(ws_sold_date_sk#50 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(ws_sold_date_sk#45), dynamicpruningexpression(ws_sold_date_sk#45 IN dynamicpruning#6)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 17] -Input [5]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, ws_sold_date_sk#50] +Input [5]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, ws_sold_date_sk#45] (45) Filter [codegen id : 17] -Input [5]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, ws_sold_date_sk#50] -Condition : isnotnull(ws_item_sk#46) +Input [5]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, ws_sold_date_sk#45] +Condition : isnotnull(ws_item_sk#41) (46) ReusedExchange [Reuses operator id: 8] -Output [5]: [i_item_sk#51, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55] +Output [5]: [i_item_sk#46, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50] (47) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_item_sk#46] -Right keys [1]: [i_item_sk#51] +Left keys [1]: [ws_item_sk#41] +Right keys [1]: [i_item_sk#46] Join condition: None (48) Project [codegen id : 17] -Output [9]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, ws_sold_date_sk#50, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55] -Input [10]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, ws_sold_date_sk#50, i_item_sk#51, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55] +Output [9]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, ws_sold_date_sk#45, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50] +Input [10]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, ws_sold_date_sk#45, i_item_sk#46, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50] (49) ReusedExchange [Reuses operator id: 131] -Output [2]: [d_date_sk#56, d_year#57] +Output [2]: [d_date_sk#51, d_year#52] (50) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_sold_date_sk#50] -Right keys [1]: [d_date_sk#56] +Left keys [1]: [ws_sold_date_sk#45] +Right keys [1]: [d_date_sk#51] Join condition: None (51) Project [codegen id : 17] -Output [9]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55, d_year#57] -Input [11]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, ws_sold_date_sk#50, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55, d_date_sk#56, d_year#57] +Output [9]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50, d_year#52] +Input [11]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, ws_sold_date_sk#45, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50, d_date_sk#51, d_year#52] (52) Exchange -Input [9]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55, d_year#57] -Arguments: hashpartitioning(ws_order_number#47, ws_item_sk#46, 5), ENSURE_REQUIREMENTS, [id=#58] +Input [9]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50, d_year#52] +Arguments: hashpartitioning(ws_order_number#42, ws_item_sk#41, 5), ENSURE_REQUIREMENTS, [plan_id=6] (53) Sort [codegen id : 18] -Input [9]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55, d_year#57] -Arguments: [ws_order_number#47 ASC NULLS FIRST, ws_item_sk#46 ASC NULLS FIRST], false, 0 +Input [9]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50, d_year#52] +Arguments: [ws_order_number#42 ASC NULLS FIRST, ws_item_sk#41 ASC NULLS FIRST], false, 0 (54) Scan parquet default.web_returns -Output [5]: [wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62, wr_returned_date_sk#63] +Output [5]: [wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56, wr_returned_date_sk#57] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_order_number), IsNotNull(wr_item_sk)] ReadSchema: struct (55) ColumnarToRow [codegen id : 19] -Input [5]: [wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62, wr_returned_date_sk#63] +Input [5]: [wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56, wr_returned_date_sk#57] (56) Filter [codegen id : 19] -Input [5]: [wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62, wr_returned_date_sk#63] -Condition : (isnotnull(wr_order_number#60) AND isnotnull(wr_item_sk#59)) +Input [5]: [wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56, wr_returned_date_sk#57] +Condition : (isnotnull(wr_order_number#54) AND isnotnull(wr_item_sk#53)) (57) Project [codegen id : 19] -Output [4]: [wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62] -Input [5]: [wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62, wr_returned_date_sk#63] +Output [4]: [wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56] +Input [5]: [wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56, wr_returned_date_sk#57] (58) Exchange -Input [4]: [wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62] -Arguments: hashpartitioning(wr_order_number#60, wr_item_sk#59, 5), ENSURE_REQUIREMENTS, [id=#64] +Input [4]: [wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56] +Arguments: hashpartitioning(wr_order_number#54, wr_item_sk#53, 5), ENSURE_REQUIREMENTS, [plan_id=7] (59) Sort [codegen id : 20] -Input [4]: [wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62] -Arguments: [wr_order_number#60 ASC NULLS FIRST, wr_item_sk#59 ASC NULLS FIRST], false, 0 +Input [4]: [wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56] +Arguments: [wr_order_number#54 ASC NULLS FIRST, wr_item_sk#53 ASC NULLS FIRST], false, 0 (60) SortMergeJoin [codegen id : 21] -Left keys [2]: [ws_order_number#47, ws_item_sk#46] -Right keys [2]: [wr_order_number#60, wr_item_sk#59] +Left keys [2]: [ws_order_number#42, ws_item_sk#41] +Right keys [2]: [wr_order_number#54, wr_item_sk#53] Join condition: None (61) Project [codegen id : 21] -Output [7]: [d_year#57, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55, (ws_quantity#48 - coalesce(wr_return_quantity#61, 0)) AS sales_cnt#65, CheckOverflow((promote_precision(cast(ws_ext_sales_price#49 as decimal(8,2))) - promote_precision(cast(coalesce(wr_return_amt#62, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#66] -Input [13]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55, d_year#57, wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62] +Output [7]: [d_year#52, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50, (ws_quantity#43 - coalesce(wr_return_quantity#55, 0)) AS sales_cnt#58, CheckOverflow((promote_precision(cast(ws_ext_sales_price#44 as decimal(8,2))) - promote_precision(cast(coalesce(wr_return_amt#56, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#59] +Input [13]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50, d_year#52, wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56] (62) Union (63) HashAggregate [codegen id : 22] -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] -Keys [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] +Keys [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] Functions: [] Aggregate Attributes: [] -Results [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] +Results [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] (64) Exchange -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] -Arguments: hashpartitioning(d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24, 5), ENSURE_REQUIREMENTS, [id=#67] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] +Arguments: hashpartitioning(d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21, 5), ENSURE_REQUIREMENTS, [plan_id=8] (65) HashAggregate [codegen id : 23] -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] -Keys [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] +Keys [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] Functions: [] Aggregate Attributes: [] -Results [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] +Results [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] (66) HashAggregate [codegen id : 23] -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] -Keys [5]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12] -Functions [2]: [partial_sum(sales_cnt#23), partial_sum(UnscaledValue(sales_amt#24))] -Aggregate Attributes [2]: [sum#68, sum#69] -Results [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#70, sum#71] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] +Keys [5]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12] +Functions [2]: [partial_sum(sales_cnt#20), partial_sum(UnscaledValue(sales_amt#21))] +Aggregate Attributes [2]: [sum#60, sum#61] +Results [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#62, sum#63] (67) Exchange -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#70, sum#71] -Arguments: hashpartitioning(d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, 5), ENSURE_REQUIREMENTS, [id=#72] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#62, sum#63] +Arguments: hashpartitioning(d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, 5), ENSURE_REQUIREMENTS, [plan_id=9] (68) HashAggregate [codegen id : 24] -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#70, sum#71] -Keys [5]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12] -Functions [2]: [sum(sales_cnt#23), sum(UnscaledValue(sales_amt#24))] -Aggregate Attributes [2]: [sum(sales_cnt#23)#73, sum(UnscaledValue(sales_amt#24))#74] -Results [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum(sales_cnt#23)#73 AS sales_cnt#75, MakeDecimal(sum(UnscaledValue(sales_amt#24))#74,18,2) AS sales_amt#76] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#62, sum#63] +Keys [5]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12] +Functions [2]: [sum(sales_cnt#20), sum(UnscaledValue(sales_amt#21))] +Aggregate Attributes [2]: [sum(sales_cnt#20)#64, sum(UnscaledValue(sales_amt#21))#65] +Results [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum(sales_cnt#20)#64 AS sales_cnt#66, MakeDecimal(sum(UnscaledValue(sales_amt#21))#65,18,2) AS sales_amt#67] (69) Exchange -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#75, sales_amt#76] -Arguments: hashpartitioning(i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, 5), ENSURE_REQUIREMENTS, [id=#77] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#66, sales_amt#67] +Arguments: hashpartitioning(i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, 5), ENSURE_REQUIREMENTS, [plan_id=10] (70) Sort [codegen id : 25] -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#75, sales_amt#76] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#66, sales_amt#67] Arguments: [i_brand_id#8 ASC NULLS FIRST, i_class_id#9 ASC NULLS FIRST, i_category_id#10 ASC NULLS FIRST, i_manufact_id#12 ASC NULLS FIRST], false, 0 (71) Scan parquet default.catalog_sales -Output [5]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, cs_sold_date_sk#82] +Output [5]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#82), dynamicpruningexpression(cs_sold_date_sk#82 IN dynamicpruning#83)] +PartitionFilters: [isnotnull(cs_sold_date_sk#72), dynamicpruningexpression(cs_sold_date_sk#72 IN dynamicpruning#73)] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (72) ColumnarToRow [codegen id : 28] -Input [5]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, cs_sold_date_sk#82] +Input [5]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72] (73) Filter [codegen id : 28] -Input [5]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, cs_sold_date_sk#82] -Condition : isnotnull(cs_item_sk#78) +Input [5]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72] +Condition : isnotnull(cs_item_sk#68) (74) ReusedExchange [Reuses operator id: 8] -Output [5]: [i_item_sk#84, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88] +Output [5]: [i_item_sk#74, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78] (75) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [cs_item_sk#78] -Right keys [1]: [i_item_sk#84] +Left keys [1]: [cs_item_sk#68] +Right keys [1]: [i_item_sk#74] Join condition: None (76) Project [codegen id : 28] -Output [9]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, cs_sold_date_sk#82, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88] -Input [10]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, cs_sold_date_sk#82, i_item_sk#84, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88] +Output [9]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78] +Input [10]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72, i_item_sk#74, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78] (77) ReusedExchange [Reuses operator id: 135] -Output [2]: [d_date_sk#89, d_year#90] +Output [2]: [d_date_sk#79, d_year#80] (78) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [cs_sold_date_sk#82] -Right keys [1]: [d_date_sk#89] +Left keys [1]: [cs_sold_date_sk#72] +Right keys [1]: [d_date_sk#79] Join condition: None (79) Project [codegen id : 28] -Output [9]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, d_year#90] -Input [11]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, cs_sold_date_sk#82, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, d_date_sk#89, d_year#90] +Output [9]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80] +Input [11]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_date_sk#79, d_year#80] (80) Exchange -Input [9]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, d_year#90] -Arguments: hashpartitioning(cs_order_number#79, cs_item_sk#78, 5), ENSURE_REQUIREMENTS, [id=#91] +Input [9]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80] +Arguments: hashpartitioning(cs_order_number#69, cs_item_sk#68, 5), ENSURE_REQUIREMENTS, [plan_id=11] (81) Sort [codegen id : 29] -Input [9]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, d_year#90] -Arguments: [cs_order_number#79 ASC NULLS FIRST, cs_item_sk#78 ASC NULLS FIRST], false, 0 +Input [9]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80] +Arguments: [cs_order_number#69 ASC NULLS FIRST, cs_item_sk#68 ASC NULLS FIRST], false, 0 (82) ReusedExchange [Reuses operator id: 20] -Output [4]: [cr_item_sk#92, cr_order_number#93, cr_return_quantity#94, cr_return_amount#95] +Output [4]: [cr_item_sk#81, cr_order_number#82, cr_return_quantity#83, cr_return_amount#84] (83) Sort [codegen id : 31] -Input [4]: [cr_item_sk#92, cr_order_number#93, cr_return_quantity#94, cr_return_amount#95] -Arguments: [cr_order_number#93 ASC NULLS FIRST, cr_item_sk#92 ASC NULLS FIRST], false, 0 +Input [4]: [cr_item_sk#81, cr_order_number#82, cr_return_quantity#83, cr_return_amount#84] +Arguments: [cr_order_number#82 ASC NULLS FIRST, cr_item_sk#81 ASC NULLS FIRST], false, 0 (84) SortMergeJoin [codegen id : 32] -Left keys [2]: [cs_order_number#79, cs_item_sk#78] -Right keys [2]: [cr_order_number#93, cr_item_sk#92] +Left keys [2]: [cs_order_number#69, cs_item_sk#68] +Right keys [2]: [cr_order_number#82, cr_item_sk#81] Join condition: None (85) Project [codegen id : 32] -Output [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, (cs_quantity#80 - coalesce(cr_return_quantity#94, 0)) AS sales_cnt#23, CheckOverflow((promote_precision(cast(cs_ext_sales_price#81 as decimal(8,2))) - promote_precision(cast(coalesce(cr_return_amount#95, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#24] -Input [13]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, d_year#90, cr_item_sk#92, cr_order_number#93, cr_return_quantity#94, cr_return_amount#95] +Output [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, (cs_quantity#70 - coalesce(cr_return_quantity#83, 0)) AS sales_cnt#20, CheckOverflow((promote_precision(cast(cs_ext_sales_price#71 as decimal(8,2))) - promote_precision(cast(coalesce(cr_return_amount#84, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#21] +Input [13]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80, cr_item_sk#81, cr_order_number#82, cr_return_quantity#83, cr_return_amount#84] (86) Scan parquet default.store_sales -Output [5]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, ss_sold_date_sk#100] +Output [5]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, ss_sold_date_sk#89] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#100), dynamicpruningexpression(ss_sold_date_sk#100 IN dynamicpruning#83)] +PartitionFilters: [isnotnull(ss_sold_date_sk#89), dynamicpruningexpression(ss_sold_date_sk#89 IN dynamicpruning#73)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (87) ColumnarToRow [codegen id : 35] -Input [5]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, ss_sold_date_sk#100] +Input [5]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, ss_sold_date_sk#89] (88) Filter [codegen id : 35] -Input [5]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, ss_sold_date_sk#100] -Condition : isnotnull(ss_item_sk#96) +Input [5]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, ss_sold_date_sk#89] +Condition : isnotnull(ss_item_sk#85) (89) ReusedExchange [Reuses operator id: 8] -Output [5]: [i_item_sk#101, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105] +Output [5]: [i_item_sk#90, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94] (90) BroadcastHashJoin [codegen id : 35] -Left keys [1]: [ss_item_sk#96] -Right keys [1]: [i_item_sk#101] +Left keys [1]: [ss_item_sk#85] +Right keys [1]: [i_item_sk#90] Join condition: None (91) Project [codegen id : 35] -Output [9]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, ss_sold_date_sk#100, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105] -Input [10]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, ss_sold_date_sk#100, i_item_sk#101, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105] +Output [9]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, ss_sold_date_sk#89, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94] +Input [10]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, ss_sold_date_sk#89, i_item_sk#90, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94] (92) ReusedExchange [Reuses operator id: 135] -Output [2]: [d_date_sk#106, d_year#107] +Output [2]: [d_date_sk#95, d_year#96] (93) BroadcastHashJoin [codegen id : 35] -Left keys [1]: [ss_sold_date_sk#100] -Right keys [1]: [d_date_sk#106] +Left keys [1]: [ss_sold_date_sk#89] +Right keys [1]: [d_date_sk#95] Join condition: None (94) Project [codegen id : 35] -Output [9]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105, d_year#107] -Input [11]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, ss_sold_date_sk#100, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105, d_date_sk#106, d_year#107] +Output [9]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94, d_year#96] +Input [11]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, ss_sold_date_sk#89, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94, d_date_sk#95, d_year#96] (95) Exchange -Input [9]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105, d_year#107] -Arguments: hashpartitioning(ss_ticket_number#97, ss_item_sk#96, 5), ENSURE_REQUIREMENTS, [id=#108] +Input [9]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94, d_year#96] +Arguments: hashpartitioning(ss_ticket_number#86, ss_item_sk#85, 5), ENSURE_REQUIREMENTS, [plan_id=12] (96) Sort [codegen id : 36] -Input [9]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105, d_year#107] -Arguments: [ss_ticket_number#97 ASC NULLS FIRST, ss_item_sk#96 ASC NULLS FIRST], false, 0 +Input [9]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94, d_year#96] +Arguments: [ss_ticket_number#86 ASC NULLS FIRST, ss_item_sk#85 ASC NULLS FIRST], false, 0 (97) ReusedExchange [Reuses operator id: 39] -Output [4]: [sr_item_sk#109, sr_ticket_number#110, sr_return_quantity#111, sr_return_amt#112] +Output [4]: [sr_item_sk#97, sr_ticket_number#98, sr_return_quantity#99, sr_return_amt#100] (98) Sort [codegen id : 38] -Input [4]: [sr_item_sk#109, sr_ticket_number#110, sr_return_quantity#111, sr_return_amt#112] -Arguments: [sr_ticket_number#110 ASC NULLS FIRST, sr_item_sk#109 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#97, sr_ticket_number#98, sr_return_quantity#99, sr_return_amt#100] +Arguments: [sr_ticket_number#98 ASC NULLS FIRST, sr_item_sk#97 ASC NULLS FIRST], false, 0 (99) SortMergeJoin [codegen id : 39] -Left keys [2]: [ss_ticket_number#97, ss_item_sk#96] -Right keys [2]: [sr_ticket_number#110, sr_item_sk#109] +Left keys [2]: [ss_ticket_number#86, ss_item_sk#85] +Right keys [2]: [sr_ticket_number#98, sr_item_sk#97] Join condition: None (100) Project [codegen id : 39] -Output [7]: [d_year#107, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105, (ss_quantity#98 - coalesce(sr_return_quantity#111, 0)) AS sales_cnt#44, CheckOverflow((promote_precision(cast(ss_ext_sales_price#99 as decimal(8,2))) - promote_precision(cast(coalesce(sr_return_amt#112, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#45] -Input [13]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105, d_year#107, sr_item_sk#109, sr_ticket_number#110, sr_return_quantity#111, sr_return_amt#112] +Output [7]: [d_year#96, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94, (ss_quantity#87 - coalesce(sr_return_quantity#99, 0)) AS sales_cnt#39, CheckOverflow((promote_precision(cast(ss_ext_sales_price#88 as decimal(8,2))) - promote_precision(cast(coalesce(sr_return_amt#100, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#40] +Input [13]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94, d_year#96, sr_item_sk#97, sr_ticket_number#98, sr_return_quantity#99, sr_return_amt#100] (101) Scan parquet default.web_sales -Output [5]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, ws_sold_date_sk#117] +Output [5]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, ws_sold_date_sk#105] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#117), dynamicpruningexpression(ws_sold_date_sk#117 IN dynamicpruning#83)] +PartitionFilters: [isnotnull(ws_sold_date_sk#105), dynamicpruningexpression(ws_sold_date_sk#105 IN dynamicpruning#73)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (102) ColumnarToRow [codegen id : 42] -Input [5]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, ws_sold_date_sk#117] +Input [5]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, ws_sold_date_sk#105] (103) Filter [codegen id : 42] -Input [5]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, ws_sold_date_sk#117] -Condition : isnotnull(ws_item_sk#113) +Input [5]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, ws_sold_date_sk#105] +Condition : isnotnull(ws_item_sk#101) (104) ReusedExchange [Reuses operator id: 8] -Output [5]: [i_item_sk#118, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122] +Output [5]: [i_item_sk#106, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110] (105) BroadcastHashJoin [codegen id : 42] -Left keys [1]: [ws_item_sk#113] -Right keys [1]: [i_item_sk#118] +Left keys [1]: [ws_item_sk#101] +Right keys [1]: [i_item_sk#106] Join condition: None (106) Project [codegen id : 42] -Output [9]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, ws_sold_date_sk#117, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122] -Input [10]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, ws_sold_date_sk#117, i_item_sk#118, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122] +Output [9]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, ws_sold_date_sk#105, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110] +Input [10]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, ws_sold_date_sk#105, i_item_sk#106, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110] (107) ReusedExchange [Reuses operator id: 135] -Output [2]: [d_date_sk#123, d_year#124] +Output [2]: [d_date_sk#111, d_year#112] (108) BroadcastHashJoin [codegen id : 42] -Left keys [1]: [ws_sold_date_sk#117] -Right keys [1]: [d_date_sk#123] +Left keys [1]: [ws_sold_date_sk#105] +Right keys [1]: [d_date_sk#111] Join condition: None (109) Project [codegen id : 42] -Output [9]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122, d_year#124] -Input [11]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, ws_sold_date_sk#117, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122, d_date_sk#123, d_year#124] +Output [9]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110, d_year#112] +Input [11]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, ws_sold_date_sk#105, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110, d_date_sk#111, d_year#112] (110) Exchange -Input [9]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122, d_year#124] -Arguments: hashpartitioning(ws_order_number#114, ws_item_sk#113, 5), ENSURE_REQUIREMENTS, [id=#125] +Input [9]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110, d_year#112] +Arguments: hashpartitioning(ws_order_number#102, ws_item_sk#101, 5), ENSURE_REQUIREMENTS, [plan_id=13] (111) Sort [codegen id : 43] -Input [9]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122, d_year#124] -Arguments: [ws_order_number#114 ASC NULLS FIRST, ws_item_sk#113 ASC NULLS FIRST], false, 0 +Input [9]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110, d_year#112] +Arguments: [ws_order_number#102 ASC NULLS FIRST, ws_item_sk#101 ASC NULLS FIRST], false, 0 (112) ReusedExchange [Reuses operator id: 58] -Output [4]: [wr_item_sk#126, wr_order_number#127, wr_return_quantity#128, wr_return_amt#129] +Output [4]: [wr_item_sk#113, wr_order_number#114, wr_return_quantity#115, wr_return_amt#116] (113) Sort [codegen id : 45] -Input [4]: [wr_item_sk#126, wr_order_number#127, wr_return_quantity#128, wr_return_amt#129] -Arguments: [wr_order_number#127 ASC NULLS FIRST, wr_item_sk#126 ASC NULLS FIRST], false, 0 +Input [4]: [wr_item_sk#113, wr_order_number#114, wr_return_quantity#115, wr_return_amt#116] +Arguments: [wr_order_number#114 ASC NULLS FIRST, wr_item_sk#113 ASC NULLS FIRST], false, 0 (114) SortMergeJoin [codegen id : 46] -Left keys [2]: [ws_order_number#114, ws_item_sk#113] -Right keys [2]: [wr_order_number#127, wr_item_sk#126] +Left keys [2]: [ws_order_number#102, ws_item_sk#101] +Right keys [2]: [wr_order_number#114, wr_item_sk#113] Join condition: None (115) Project [codegen id : 46] -Output [7]: [d_year#124, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122, (ws_quantity#115 - coalesce(wr_return_quantity#128, 0)) AS sales_cnt#65, CheckOverflow((promote_precision(cast(ws_ext_sales_price#116 as decimal(8,2))) - promote_precision(cast(coalesce(wr_return_amt#129, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#66] -Input [13]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122, d_year#124, wr_item_sk#126, wr_order_number#127, wr_return_quantity#128, wr_return_amt#129] +Output [7]: [d_year#112, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110, (ws_quantity#103 - coalesce(wr_return_quantity#115, 0)) AS sales_cnt#58, CheckOverflow((promote_precision(cast(ws_ext_sales_price#104 as decimal(8,2))) - promote_precision(cast(coalesce(wr_return_amt#116, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#59] +Input [13]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110, d_year#112, wr_item_sk#113, wr_order_number#114, wr_return_quantity#115, wr_return_amt#116] (116) Union (117) HashAggregate [codegen id : 47] -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] -Keys [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] +Keys [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] Functions: [] Aggregate Attributes: [] -Results [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] +Results [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] (118) Exchange -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] -Arguments: hashpartitioning(d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24, 5), ENSURE_REQUIREMENTS, [id=#130] +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] +Arguments: hashpartitioning(d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21, 5), ENSURE_REQUIREMENTS, [plan_id=14] (119) HashAggregate [codegen id : 48] -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] -Keys [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] +Keys [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] Functions: [] Aggregate Attributes: [] -Results [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] +Results [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] (120) HashAggregate [codegen id : 48] -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] -Keys [5]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88] -Functions [2]: [partial_sum(sales_cnt#23), partial_sum(UnscaledValue(sales_amt#24))] -Aggregate Attributes [2]: [sum#68, sum#131] -Results [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sum#70, sum#132] +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] +Keys [5]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78] +Functions [2]: [partial_sum(sales_cnt#20), partial_sum(UnscaledValue(sales_amt#21))] +Aggregate Attributes [2]: [sum#60, sum#117] +Results [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sum#62, sum#118] (121) Exchange -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sum#70, sum#132] -Arguments: hashpartitioning(d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, 5), ENSURE_REQUIREMENTS, [id=#133] +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sum#62, sum#118] +Arguments: hashpartitioning(d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, 5), ENSURE_REQUIREMENTS, [plan_id=15] (122) HashAggregate [codegen id : 49] -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sum#70, sum#132] -Keys [5]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88] -Functions [2]: [sum(sales_cnt#23), sum(UnscaledValue(sales_amt#24))] -Aggregate Attributes [2]: [sum(sales_cnt#23)#73, sum(UnscaledValue(sales_amt#24))#74] -Results [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sum(sales_cnt#23)#73 AS sales_cnt#134, MakeDecimal(sum(UnscaledValue(sales_amt#24))#74,18,2) AS sales_amt#135] +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sum#62, sum#118] +Keys [5]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78] +Functions [2]: [sum(sales_cnt#20), sum(UnscaledValue(sales_amt#21))] +Aggregate Attributes [2]: [sum(sales_cnt#20)#64, sum(UnscaledValue(sales_amt#21))#65] +Results [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sum(sales_cnt#20)#64 AS sales_cnt#119, MakeDecimal(sum(UnscaledValue(sales_amt#21))#65,18,2) AS sales_amt#120] (123) Exchange -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#134, sales_amt#135] -Arguments: hashpartitioning(i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, 5), ENSURE_REQUIREMENTS, [id=#136] +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#119, sales_amt#120] +Arguments: hashpartitioning(i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, 5), ENSURE_REQUIREMENTS, [plan_id=16] (124) Sort [codegen id : 50] -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#134, sales_amt#135] -Arguments: [i_brand_id#85 ASC NULLS FIRST, i_class_id#86 ASC NULLS FIRST, i_category_id#87 ASC NULLS FIRST, i_manufact_id#88 ASC NULLS FIRST], false, 0 +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#119, sales_amt#120] +Arguments: [i_brand_id#75 ASC NULLS FIRST, i_class_id#76 ASC NULLS FIRST, i_category_id#77 ASC NULLS FIRST, i_manufact_id#78 ASC NULLS FIRST], false, 0 (125) SortMergeJoin [codegen id : 51] Left keys [4]: [i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12] -Right keys [4]: [i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88] -Join condition: (CheckOverflow((promote_precision(cast(sales_cnt#75 as decimal(17,2))) / promote_precision(cast(sales_cnt#134 as decimal(17,2)))), DecimalType(37,20)) < 0.90000000000000000000) +Right keys [4]: [i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78] +Join condition: (CheckOverflow((promote_precision(cast(sales_cnt#66 as decimal(17,2))) / promote_precision(cast(sales_cnt#119 as decimal(17,2)))), DecimalType(37,20)) < 0.90000000000000000000) (126) Project [codegen id : 51] -Output [10]: [d_year#90 AS prev_year#137, d_year#15 AS year#138, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#134 AS prev_yr_cnt#139, sales_cnt#75 AS curr_yr_cnt#140, (sales_cnt#75 - sales_cnt#134) AS sales_cnt_diff#141, CheckOverflow((promote_precision(cast(sales_amt#76 as decimal(19,2))) - promote_precision(cast(sales_amt#135 as decimal(19,2)))), DecimalType(19,2)) AS sales_amt_diff#142] -Input [14]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#75, sales_amt#76, d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#134, sales_amt#135] +Output [10]: [d_year#80 AS prev_year#121, d_year#14 AS year#122, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#119 AS prev_yr_cnt#123, sales_cnt#66 AS curr_yr_cnt#124, (sales_cnt#66 - sales_cnt#119) AS sales_cnt_diff#125, CheckOverflow((promote_precision(cast(sales_amt#67 as decimal(19,2))) - promote_precision(cast(sales_amt#120 as decimal(19,2)))), DecimalType(19,2)) AS sales_amt_diff#126] +Input [14]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#66, sales_amt#67, d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#119, sales_amt#120] (127) TakeOrderedAndProject -Input [10]: [prev_year#137, year#138, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, prev_yr_cnt#139, curr_yr_cnt#140, sales_cnt_diff#141, sales_amt_diff#142] -Arguments: 100, [sales_cnt_diff#141 ASC NULLS FIRST, sales_amt_diff#142 ASC NULLS FIRST], [prev_year#137, year#138, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, prev_yr_cnt#139, curr_yr_cnt#140, sales_cnt_diff#141, sales_amt_diff#142] +Input [10]: [prev_year#121, year#122, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, prev_yr_cnt#123, curr_yr_cnt#124, sales_cnt_diff#125, sales_amt_diff#126] +Arguments: 100, [sales_cnt_diff#125 ASC NULLS FIRST, sales_amt_diff#126 ASC NULLS FIRST], [prev_year#121, year#122, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, prev_yr_cnt#123, curr_yr_cnt#124, sales_cnt_diff#125, sales_amt_diff#126] ===== Subqueries ===== @@ -697,28 +697,28 @@ BroadcastExchange (131) (128) Scan parquet default.date_dim -Output [2]: [d_date_sk#14, d_year#15] +Output [2]: [d_date_sk#13, d_year#14] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)] ReadSchema: struct (129) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#15] +Input [2]: [d_date_sk#13, d_year#14] (130) Filter [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#15] -Condition : ((isnotnull(d_year#15) AND (d_year#15 = 2002)) AND isnotnull(d_date_sk#14)) +Input [2]: [d_date_sk#13, d_year#14] +Condition : ((isnotnull(d_year#14) AND (d_year#14 = 2002)) AND isnotnull(d_date_sk#13)) (131) BroadcastExchange -Input [2]: [d_date_sk#14, d_year#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#143] +Input [2]: [d_date_sk#13, d_year#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=17] -Subquery:2 Hosting operator id = 24 Hosting Expression = ss_sold_date_sk#29 IN dynamicpruning#6 +Subquery:2 Hosting operator id = 24 Hosting Expression = ss_sold_date_sk#26 IN dynamicpruning#6 -Subquery:3 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#50 IN dynamicpruning#6 +Subquery:3 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#45 IN dynamicpruning#6 -Subquery:4 Hosting operator id = 71 Hosting Expression = cs_sold_date_sk#82 IN dynamicpruning#83 +Subquery:4 Hosting operator id = 71 Hosting Expression = cs_sold_date_sk#72 IN dynamicpruning#73 BroadcastExchange (135) +- * Filter (134) +- * ColumnarToRow (133) @@ -726,25 +726,25 @@ BroadcastExchange (135) (132) Scan parquet default.date_dim -Output [2]: [d_date_sk#89, d_year#90] +Output [2]: [d_date_sk#79, d_year#80] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (133) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#89, d_year#90] +Input [2]: [d_date_sk#79, d_year#80] (134) Filter [codegen id : 1] -Input [2]: [d_date_sk#89, d_year#90] -Condition : ((isnotnull(d_year#90) AND (d_year#90 = 2001)) AND isnotnull(d_date_sk#89)) +Input [2]: [d_date_sk#79, d_year#80] +Condition : ((isnotnull(d_year#80) AND (d_year#80 = 2001)) AND isnotnull(d_date_sk#79)) (135) BroadcastExchange -Input [2]: [d_date_sk#89, d_year#90] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#144] +Input [2]: [d_date_sk#79, d_year#80] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=18] -Subquery:5 Hosting operator id = 86 Hosting Expression = ss_sold_date_sk#100 IN dynamicpruning#83 +Subquery:5 Hosting operator id = 86 Hosting Expression = ss_sold_date_sk#89 IN dynamicpruning#73 -Subquery:6 Hosting operator id = 101 Hosting Expression = ws_sold_date_sk#117 IN dynamicpruning#83 +Subquery:6 Hosting operator id = 101 Hosting Expression = ws_sold_date_sk#105 IN dynamicpruning#73 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q75/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q75/explain.txt index 27a2b5f734281..6bb0d1e90534b 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q75/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q75/explain.txt @@ -163,7 +163,7 @@ Input [6]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_categor (8) BroadcastExchange Input [5]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_item_sk#1] @@ -175,517 +175,517 @@ Output [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price# Input [10]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, cs_sold_date_sk#5, i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12] (11) ReusedExchange [Reuses operator id: 131] -Output [2]: [d_date_sk#14, d_year#15] +Output [2]: [d_date_sk#13, d_year#14] (12) BroadcastHashJoin [codegen id : 3] Left keys [1]: [cs_sold_date_sk#5] -Right keys [1]: [d_date_sk#14] +Right keys [1]: [d_date_sk#13] Join condition: None (13) Project [codegen id : 3] -Output [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#15] -Input [11]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, cs_sold_date_sk#5, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_date_sk#14, d_year#15] +Output [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14] +Input [11]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, cs_sold_date_sk#5, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_date_sk#13, d_year#14] (14) Exchange -Input [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#15] -Arguments: hashpartitioning(cs_order_number#2, cs_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14] +Arguments: hashpartitioning(cs_order_number#2, cs_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) Sort [codegen id : 4] -Input [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#15] +Input [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14] Arguments: [cs_order_number#2 ASC NULLS FIRST, cs_item_sk#1 ASC NULLS FIRST], false, 0 (16) Scan parquet default.catalog_returns -Output [5]: [cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20, cr_returned_date_sk#21] +Output [5]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18, cr_returned_date_sk#19] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_order_number), IsNotNull(cr_item_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 5] -Input [5]: [cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20, cr_returned_date_sk#21] +Input [5]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18, cr_returned_date_sk#19] (18) Filter [codegen id : 5] -Input [5]: [cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20, cr_returned_date_sk#21] -Condition : (isnotnull(cr_order_number#18) AND isnotnull(cr_item_sk#17)) +Input [5]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18, cr_returned_date_sk#19] +Condition : (isnotnull(cr_order_number#16) AND isnotnull(cr_item_sk#15)) (19) Project [codegen id : 5] -Output [4]: [cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20] -Input [5]: [cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20, cr_returned_date_sk#21] +Output [4]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18] +Input [5]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18, cr_returned_date_sk#19] (20) Exchange -Input [4]: [cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20] -Arguments: hashpartitioning(cr_order_number#18, cr_item_sk#17, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [4]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18] +Arguments: hashpartitioning(cr_order_number#16, cr_item_sk#15, 5), ENSURE_REQUIREMENTS, [plan_id=3] (21) Sort [codegen id : 6] -Input [4]: [cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20] -Arguments: [cr_order_number#18 ASC NULLS FIRST, cr_item_sk#17 ASC NULLS FIRST], false, 0 +Input [4]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18] +Arguments: [cr_order_number#16 ASC NULLS FIRST, cr_item_sk#15 ASC NULLS FIRST], false, 0 (22) SortMergeJoin [codegen id : 7] Left keys [2]: [cs_order_number#2, cs_item_sk#1] -Right keys [2]: [cr_order_number#18, cr_item_sk#17] +Right keys [2]: [cr_order_number#16, cr_item_sk#15] Join condition: None (23) Project [codegen id : 7] -Output [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, (cs_quantity#3 - coalesce(cr_return_quantity#19, 0)) AS sales_cnt#23, CheckOverflow((promote_precision(cast(cs_ext_sales_price#4 as decimal(8,2))) - promote_precision(cast(coalesce(cr_return_amount#20, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#24] -Input [13]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#15, cr_item_sk#17, cr_order_number#18, cr_return_quantity#19, cr_return_amount#20] +Output [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, (cs_quantity#3 - coalesce(cr_return_quantity#17, 0)) AS sales_cnt#20, CheckOverflow((promote_precision(cast(cs_ext_sales_price#4 as decimal(8,2))) - promote_precision(cast(coalesce(cr_return_amount#18, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#21] +Input [13]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14, cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18] (24) Scan parquet default.store_sales -Output [5]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, ss_sold_date_sk#29] +Output [5]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#29), dynamicpruningexpression(ss_sold_date_sk#29 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(ss_sold_date_sk#26), dynamicpruningexpression(ss_sold_date_sk#26 IN dynamicpruning#6)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (25) ColumnarToRow [codegen id : 10] -Input [5]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, ss_sold_date_sk#29] +Input [5]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26] (26) Filter [codegen id : 10] -Input [5]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, ss_sold_date_sk#29] -Condition : isnotnull(ss_item_sk#25) +Input [5]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26] +Condition : isnotnull(ss_item_sk#22) (27) ReusedExchange [Reuses operator id: 8] -Output [5]: [i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34] +Output [5]: [i_item_sk#27, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31] (28) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_item_sk#25] -Right keys [1]: [i_item_sk#30] +Left keys [1]: [ss_item_sk#22] +Right keys [1]: [i_item_sk#27] Join condition: None (29) Project [codegen id : 10] -Output [9]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, ss_sold_date_sk#29, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34] -Input [10]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, ss_sold_date_sk#29, i_item_sk#30, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34] +Output [9]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31] +Input [10]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26, i_item_sk#27, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31] (30) ReusedExchange [Reuses operator id: 131] -Output [2]: [d_date_sk#35, d_year#36] +Output [2]: [d_date_sk#32, d_year#33] (31) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [ss_sold_date_sk#29] -Right keys [1]: [d_date_sk#35] +Left keys [1]: [ss_sold_date_sk#26] +Right keys [1]: [d_date_sk#32] Join condition: None (32) Project [codegen id : 10] -Output [9]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34, d_year#36] -Input [11]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, ss_sold_date_sk#29, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34, d_date_sk#35, d_year#36] +Output [9]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31, d_year#33] +Input [11]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31, d_date_sk#32, d_year#33] (33) Exchange -Input [9]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34, d_year#36] -Arguments: hashpartitioning(ss_ticket_number#26, ss_item_sk#25, 5), ENSURE_REQUIREMENTS, [id=#37] +Input [9]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31, d_year#33] +Arguments: hashpartitioning(ss_ticket_number#23, ss_item_sk#22, 5), ENSURE_REQUIREMENTS, [plan_id=4] (34) Sort [codegen id : 11] -Input [9]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34, d_year#36] -Arguments: [ss_ticket_number#26 ASC NULLS FIRST, ss_item_sk#25 ASC NULLS FIRST], false, 0 +Input [9]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31, d_year#33] +Arguments: [ss_ticket_number#23 ASC NULLS FIRST, ss_item_sk#22 ASC NULLS FIRST], false, 0 (35) Scan parquet default.store_returns -Output [5]: [sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41, sr_returned_date_sk#42] +Output [5]: [sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37, sr_returned_date_sk#38] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct (36) ColumnarToRow [codegen id : 12] -Input [5]: [sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41, sr_returned_date_sk#42] +Input [5]: [sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37, sr_returned_date_sk#38] (37) Filter [codegen id : 12] -Input [5]: [sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41, sr_returned_date_sk#42] -Condition : (isnotnull(sr_ticket_number#39) AND isnotnull(sr_item_sk#38)) +Input [5]: [sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37, sr_returned_date_sk#38] +Condition : (isnotnull(sr_ticket_number#35) AND isnotnull(sr_item_sk#34)) (38) Project [codegen id : 12] -Output [4]: [sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41] -Input [5]: [sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41, sr_returned_date_sk#42] +Output [4]: [sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37] +Input [5]: [sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37, sr_returned_date_sk#38] (39) Exchange -Input [4]: [sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41] -Arguments: hashpartitioning(sr_ticket_number#39, sr_item_sk#38, 5), ENSURE_REQUIREMENTS, [id=#43] +Input [4]: [sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37] +Arguments: hashpartitioning(sr_ticket_number#35, sr_item_sk#34, 5), ENSURE_REQUIREMENTS, [plan_id=5] (40) Sort [codegen id : 13] -Input [4]: [sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41] -Arguments: [sr_ticket_number#39 ASC NULLS FIRST, sr_item_sk#38 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37] +Arguments: [sr_ticket_number#35 ASC NULLS FIRST, sr_item_sk#34 ASC NULLS FIRST], false, 0 (41) SortMergeJoin [codegen id : 14] -Left keys [2]: [ss_ticket_number#26, ss_item_sk#25] -Right keys [2]: [sr_ticket_number#39, sr_item_sk#38] +Left keys [2]: [ss_ticket_number#23, ss_item_sk#22] +Right keys [2]: [sr_ticket_number#35, sr_item_sk#34] Join condition: None (42) Project [codegen id : 14] -Output [7]: [d_year#36, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34, (ss_quantity#27 - coalesce(sr_return_quantity#40, 0)) AS sales_cnt#44, CheckOverflow((promote_precision(cast(ss_ext_sales_price#28 as decimal(8,2))) - promote_precision(cast(coalesce(sr_return_amt#41, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#45] -Input [13]: [ss_item_sk#25, ss_ticket_number#26, ss_quantity#27, ss_ext_sales_price#28, i_brand_id#31, i_class_id#32, i_category_id#33, i_manufact_id#34, d_year#36, sr_item_sk#38, sr_ticket_number#39, sr_return_quantity#40, sr_return_amt#41] +Output [7]: [d_year#33, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31, (ss_quantity#24 - coalesce(sr_return_quantity#36, 0)) AS sales_cnt#39, CheckOverflow((promote_precision(cast(ss_ext_sales_price#25 as decimal(8,2))) - promote_precision(cast(coalesce(sr_return_amt#37, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#40] +Input [13]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#28, i_class_id#29, i_category_id#30, i_manufact_id#31, d_year#33, sr_item_sk#34, sr_ticket_number#35, sr_return_quantity#36, sr_return_amt#37] (43) Scan parquet default.web_sales -Output [5]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, ws_sold_date_sk#50] +Output [5]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, ws_sold_date_sk#45] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#50), dynamicpruningexpression(ws_sold_date_sk#50 IN dynamicpruning#6)] +PartitionFilters: [isnotnull(ws_sold_date_sk#45), dynamicpruningexpression(ws_sold_date_sk#45 IN dynamicpruning#6)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (44) ColumnarToRow [codegen id : 17] -Input [5]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, ws_sold_date_sk#50] +Input [5]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, ws_sold_date_sk#45] (45) Filter [codegen id : 17] -Input [5]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, ws_sold_date_sk#50] -Condition : isnotnull(ws_item_sk#46) +Input [5]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, ws_sold_date_sk#45] +Condition : isnotnull(ws_item_sk#41) (46) ReusedExchange [Reuses operator id: 8] -Output [5]: [i_item_sk#51, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55] +Output [5]: [i_item_sk#46, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50] (47) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_item_sk#46] -Right keys [1]: [i_item_sk#51] +Left keys [1]: [ws_item_sk#41] +Right keys [1]: [i_item_sk#46] Join condition: None (48) Project [codegen id : 17] -Output [9]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, ws_sold_date_sk#50, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55] -Input [10]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, ws_sold_date_sk#50, i_item_sk#51, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55] +Output [9]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, ws_sold_date_sk#45, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50] +Input [10]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, ws_sold_date_sk#45, i_item_sk#46, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50] (49) ReusedExchange [Reuses operator id: 131] -Output [2]: [d_date_sk#56, d_year#57] +Output [2]: [d_date_sk#51, d_year#52] (50) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_sold_date_sk#50] -Right keys [1]: [d_date_sk#56] +Left keys [1]: [ws_sold_date_sk#45] +Right keys [1]: [d_date_sk#51] Join condition: None (51) Project [codegen id : 17] -Output [9]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55, d_year#57] -Input [11]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, ws_sold_date_sk#50, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55, d_date_sk#56, d_year#57] +Output [9]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50, d_year#52] +Input [11]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, ws_sold_date_sk#45, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50, d_date_sk#51, d_year#52] (52) Exchange -Input [9]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55, d_year#57] -Arguments: hashpartitioning(ws_order_number#47, ws_item_sk#46, 5), ENSURE_REQUIREMENTS, [id=#58] +Input [9]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50, d_year#52] +Arguments: hashpartitioning(ws_order_number#42, ws_item_sk#41, 5), ENSURE_REQUIREMENTS, [plan_id=6] (53) Sort [codegen id : 18] -Input [9]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55, d_year#57] -Arguments: [ws_order_number#47 ASC NULLS FIRST, ws_item_sk#46 ASC NULLS FIRST], false, 0 +Input [9]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50, d_year#52] +Arguments: [ws_order_number#42 ASC NULLS FIRST, ws_item_sk#41 ASC NULLS FIRST], false, 0 (54) Scan parquet default.web_returns -Output [5]: [wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62, wr_returned_date_sk#63] +Output [5]: [wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56, wr_returned_date_sk#57] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_order_number), IsNotNull(wr_item_sk)] ReadSchema: struct (55) ColumnarToRow [codegen id : 19] -Input [5]: [wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62, wr_returned_date_sk#63] +Input [5]: [wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56, wr_returned_date_sk#57] (56) Filter [codegen id : 19] -Input [5]: [wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62, wr_returned_date_sk#63] -Condition : (isnotnull(wr_order_number#60) AND isnotnull(wr_item_sk#59)) +Input [5]: [wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56, wr_returned_date_sk#57] +Condition : (isnotnull(wr_order_number#54) AND isnotnull(wr_item_sk#53)) (57) Project [codegen id : 19] -Output [4]: [wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62] -Input [5]: [wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62, wr_returned_date_sk#63] +Output [4]: [wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56] +Input [5]: [wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56, wr_returned_date_sk#57] (58) Exchange -Input [4]: [wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62] -Arguments: hashpartitioning(wr_order_number#60, wr_item_sk#59, 5), ENSURE_REQUIREMENTS, [id=#64] +Input [4]: [wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56] +Arguments: hashpartitioning(wr_order_number#54, wr_item_sk#53, 5), ENSURE_REQUIREMENTS, [plan_id=7] (59) Sort [codegen id : 20] -Input [4]: [wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62] -Arguments: [wr_order_number#60 ASC NULLS FIRST, wr_item_sk#59 ASC NULLS FIRST], false, 0 +Input [4]: [wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56] +Arguments: [wr_order_number#54 ASC NULLS FIRST, wr_item_sk#53 ASC NULLS FIRST], false, 0 (60) SortMergeJoin [codegen id : 21] -Left keys [2]: [ws_order_number#47, ws_item_sk#46] -Right keys [2]: [wr_order_number#60, wr_item_sk#59] +Left keys [2]: [ws_order_number#42, ws_item_sk#41] +Right keys [2]: [wr_order_number#54, wr_item_sk#53] Join condition: None (61) Project [codegen id : 21] -Output [7]: [d_year#57, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55, (ws_quantity#48 - coalesce(wr_return_quantity#61, 0)) AS sales_cnt#65, CheckOverflow((promote_precision(cast(ws_ext_sales_price#49 as decimal(8,2))) - promote_precision(cast(coalesce(wr_return_amt#62, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#66] -Input [13]: [ws_item_sk#46, ws_order_number#47, ws_quantity#48, ws_ext_sales_price#49, i_brand_id#52, i_class_id#53, i_category_id#54, i_manufact_id#55, d_year#57, wr_item_sk#59, wr_order_number#60, wr_return_quantity#61, wr_return_amt#62] +Output [7]: [d_year#52, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50, (ws_quantity#43 - coalesce(wr_return_quantity#55, 0)) AS sales_cnt#58, CheckOverflow((promote_precision(cast(ws_ext_sales_price#44 as decimal(8,2))) - promote_precision(cast(coalesce(wr_return_amt#56, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#59] +Input [13]: [ws_item_sk#41, ws_order_number#42, ws_quantity#43, ws_ext_sales_price#44, i_brand_id#47, i_class_id#48, i_category_id#49, i_manufact_id#50, d_year#52, wr_item_sk#53, wr_order_number#54, wr_return_quantity#55, wr_return_amt#56] (62) Union (63) HashAggregate [codegen id : 22] -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] -Keys [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] +Keys [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] Functions: [] Aggregate Attributes: [] -Results [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] +Results [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] (64) Exchange -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] -Arguments: hashpartitioning(d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24, 5), ENSURE_REQUIREMENTS, [id=#67] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] +Arguments: hashpartitioning(d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21, 5), ENSURE_REQUIREMENTS, [plan_id=8] (65) HashAggregate [codegen id : 23] -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] -Keys [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] +Keys [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] Functions: [] Aggregate Attributes: [] -Results [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] +Results [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] (66) HashAggregate [codegen id : 23] -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#23, sales_amt#24] -Keys [5]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12] -Functions [2]: [partial_sum(sales_cnt#23), partial_sum(UnscaledValue(sales_amt#24))] -Aggregate Attributes [2]: [sum#68, sum#69] -Results [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#70, sum#71] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21] +Keys [5]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12] +Functions [2]: [partial_sum(sales_cnt#20), partial_sum(UnscaledValue(sales_amt#21))] +Aggregate Attributes [2]: [sum#60, sum#61] +Results [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#62, sum#63] (67) Exchange -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#70, sum#71] -Arguments: hashpartitioning(d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, 5), ENSURE_REQUIREMENTS, [id=#72] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#62, sum#63] +Arguments: hashpartitioning(d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, 5), ENSURE_REQUIREMENTS, [plan_id=9] (68) HashAggregate [codegen id : 24] -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#70, sum#71] -Keys [5]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12] -Functions [2]: [sum(sales_cnt#23), sum(UnscaledValue(sales_amt#24))] -Aggregate Attributes [2]: [sum(sales_cnt#23)#73, sum(UnscaledValue(sales_amt#24))#74] -Results [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum(sales_cnt#23)#73 AS sales_cnt#75, MakeDecimal(sum(UnscaledValue(sales_amt#24))#74,18,2) AS sales_amt#76] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#62, sum#63] +Keys [5]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12] +Functions [2]: [sum(sales_cnt#20), sum(UnscaledValue(sales_amt#21))] +Aggregate Attributes [2]: [sum(sales_cnt#20)#64, sum(UnscaledValue(sales_amt#21))#65] +Results [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum(sales_cnt#20)#64 AS sales_cnt#66, MakeDecimal(sum(UnscaledValue(sales_amt#21))#65,18,2) AS sales_amt#67] (69) Exchange -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#75, sales_amt#76] -Arguments: hashpartitioning(i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, 5), ENSURE_REQUIREMENTS, [id=#77] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#66, sales_amt#67] +Arguments: hashpartitioning(i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, 5), ENSURE_REQUIREMENTS, [plan_id=10] (70) Sort [codegen id : 25] -Input [7]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#75, sales_amt#76] +Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#66, sales_amt#67] Arguments: [i_brand_id#8 ASC NULLS FIRST, i_class_id#9 ASC NULLS FIRST, i_category_id#10 ASC NULLS FIRST, i_manufact_id#12 ASC NULLS FIRST], false, 0 (71) Scan parquet default.catalog_sales -Output [5]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, cs_sold_date_sk#82] +Output [5]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#82), dynamicpruningexpression(cs_sold_date_sk#82 IN dynamicpruning#83)] +PartitionFilters: [isnotnull(cs_sold_date_sk#72), dynamicpruningexpression(cs_sold_date_sk#72 IN dynamicpruning#73)] PushedFilters: [IsNotNull(cs_item_sk)] ReadSchema: struct (72) ColumnarToRow [codegen id : 28] -Input [5]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, cs_sold_date_sk#82] +Input [5]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72] (73) Filter [codegen id : 28] -Input [5]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, cs_sold_date_sk#82] -Condition : isnotnull(cs_item_sk#78) +Input [5]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72] +Condition : isnotnull(cs_item_sk#68) (74) ReusedExchange [Reuses operator id: 8] -Output [5]: [i_item_sk#84, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88] +Output [5]: [i_item_sk#74, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78] (75) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [cs_item_sk#78] -Right keys [1]: [i_item_sk#84] +Left keys [1]: [cs_item_sk#68] +Right keys [1]: [i_item_sk#74] Join condition: None (76) Project [codegen id : 28] -Output [9]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, cs_sold_date_sk#82, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88] -Input [10]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, cs_sold_date_sk#82, i_item_sk#84, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88] +Output [9]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78] +Input [10]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72, i_item_sk#74, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78] (77) ReusedExchange [Reuses operator id: 135] -Output [2]: [d_date_sk#89, d_year#90] +Output [2]: [d_date_sk#79, d_year#80] (78) BroadcastHashJoin [codegen id : 28] -Left keys [1]: [cs_sold_date_sk#82] -Right keys [1]: [d_date_sk#89] +Left keys [1]: [cs_sold_date_sk#72] +Right keys [1]: [d_date_sk#79] Join condition: None (79) Project [codegen id : 28] -Output [9]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, d_year#90] -Input [11]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, cs_sold_date_sk#82, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, d_date_sk#89, d_year#90] +Output [9]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80] +Input [11]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_date_sk#79, d_year#80] (80) Exchange -Input [9]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, d_year#90] -Arguments: hashpartitioning(cs_order_number#79, cs_item_sk#78, 5), ENSURE_REQUIREMENTS, [id=#91] +Input [9]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80] +Arguments: hashpartitioning(cs_order_number#69, cs_item_sk#68, 5), ENSURE_REQUIREMENTS, [plan_id=11] (81) Sort [codegen id : 29] -Input [9]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, d_year#90] -Arguments: [cs_order_number#79 ASC NULLS FIRST, cs_item_sk#78 ASC NULLS FIRST], false, 0 +Input [9]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80] +Arguments: [cs_order_number#69 ASC NULLS FIRST, cs_item_sk#68 ASC NULLS FIRST], false, 0 (82) ReusedExchange [Reuses operator id: 20] -Output [4]: [cr_item_sk#92, cr_order_number#93, cr_return_quantity#94, cr_return_amount#95] +Output [4]: [cr_item_sk#81, cr_order_number#82, cr_return_quantity#83, cr_return_amount#84] (83) Sort [codegen id : 31] -Input [4]: [cr_item_sk#92, cr_order_number#93, cr_return_quantity#94, cr_return_amount#95] -Arguments: [cr_order_number#93 ASC NULLS FIRST, cr_item_sk#92 ASC NULLS FIRST], false, 0 +Input [4]: [cr_item_sk#81, cr_order_number#82, cr_return_quantity#83, cr_return_amount#84] +Arguments: [cr_order_number#82 ASC NULLS FIRST, cr_item_sk#81 ASC NULLS FIRST], false, 0 (84) SortMergeJoin [codegen id : 32] -Left keys [2]: [cs_order_number#79, cs_item_sk#78] -Right keys [2]: [cr_order_number#93, cr_item_sk#92] +Left keys [2]: [cs_order_number#69, cs_item_sk#68] +Right keys [2]: [cr_order_number#82, cr_item_sk#81] Join condition: None (85) Project [codegen id : 32] -Output [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, (cs_quantity#80 - coalesce(cr_return_quantity#94, 0)) AS sales_cnt#23, CheckOverflow((promote_precision(cast(cs_ext_sales_price#81 as decimal(8,2))) - promote_precision(cast(coalesce(cr_return_amount#95, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#24] -Input [13]: [cs_item_sk#78, cs_order_number#79, cs_quantity#80, cs_ext_sales_price#81, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, d_year#90, cr_item_sk#92, cr_order_number#93, cr_return_quantity#94, cr_return_amount#95] +Output [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, (cs_quantity#70 - coalesce(cr_return_quantity#83, 0)) AS sales_cnt#20, CheckOverflow((promote_precision(cast(cs_ext_sales_price#71 as decimal(8,2))) - promote_precision(cast(coalesce(cr_return_amount#84, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#21] +Input [13]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80, cr_item_sk#81, cr_order_number#82, cr_return_quantity#83, cr_return_amount#84] (86) Scan parquet default.store_sales -Output [5]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, ss_sold_date_sk#100] +Output [5]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, ss_sold_date_sk#89] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#100), dynamicpruningexpression(ss_sold_date_sk#100 IN dynamicpruning#83)] +PartitionFilters: [isnotnull(ss_sold_date_sk#89), dynamicpruningexpression(ss_sold_date_sk#89 IN dynamicpruning#73)] PushedFilters: [IsNotNull(ss_item_sk)] ReadSchema: struct (87) ColumnarToRow [codegen id : 35] -Input [5]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, ss_sold_date_sk#100] +Input [5]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, ss_sold_date_sk#89] (88) Filter [codegen id : 35] -Input [5]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, ss_sold_date_sk#100] -Condition : isnotnull(ss_item_sk#96) +Input [5]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, ss_sold_date_sk#89] +Condition : isnotnull(ss_item_sk#85) (89) ReusedExchange [Reuses operator id: 8] -Output [5]: [i_item_sk#101, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105] +Output [5]: [i_item_sk#90, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94] (90) BroadcastHashJoin [codegen id : 35] -Left keys [1]: [ss_item_sk#96] -Right keys [1]: [i_item_sk#101] +Left keys [1]: [ss_item_sk#85] +Right keys [1]: [i_item_sk#90] Join condition: None (91) Project [codegen id : 35] -Output [9]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, ss_sold_date_sk#100, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105] -Input [10]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, ss_sold_date_sk#100, i_item_sk#101, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105] +Output [9]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, ss_sold_date_sk#89, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94] +Input [10]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, ss_sold_date_sk#89, i_item_sk#90, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94] (92) ReusedExchange [Reuses operator id: 135] -Output [2]: [d_date_sk#106, d_year#107] +Output [2]: [d_date_sk#95, d_year#96] (93) BroadcastHashJoin [codegen id : 35] -Left keys [1]: [ss_sold_date_sk#100] -Right keys [1]: [d_date_sk#106] +Left keys [1]: [ss_sold_date_sk#89] +Right keys [1]: [d_date_sk#95] Join condition: None (94) Project [codegen id : 35] -Output [9]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105, d_year#107] -Input [11]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, ss_sold_date_sk#100, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105, d_date_sk#106, d_year#107] +Output [9]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94, d_year#96] +Input [11]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, ss_sold_date_sk#89, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94, d_date_sk#95, d_year#96] (95) Exchange -Input [9]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105, d_year#107] -Arguments: hashpartitioning(ss_ticket_number#97, ss_item_sk#96, 5), ENSURE_REQUIREMENTS, [id=#108] +Input [9]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94, d_year#96] +Arguments: hashpartitioning(ss_ticket_number#86, ss_item_sk#85, 5), ENSURE_REQUIREMENTS, [plan_id=12] (96) Sort [codegen id : 36] -Input [9]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105, d_year#107] -Arguments: [ss_ticket_number#97 ASC NULLS FIRST, ss_item_sk#96 ASC NULLS FIRST], false, 0 +Input [9]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94, d_year#96] +Arguments: [ss_ticket_number#86 ASC NULLS FIRST, ss_item_sk#85 ASC NULLS FIRST], false, 0 (97) ReusedExchange [Reuses operator id: 39] -Output [4]: [sr_item_sk#109, sr_ticket_number#110, sr_return_quantity#111, sr_return_amt#112] +Output [4]: [sr_item_sk#97, sr_ticket_number#98, sr_return_quantity#99, sr_return_amt#100] (98) Sort [codegen id : 38] -Input [4]: [sr_item_sk#109, sr_ticket_number#110, sr_return_quantity#111, sr_return_amt#112] -Arguments: [sr_ticket_number#110 ASC NULLS FIRST, sr_item_sk#109 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#97, sr_ticket_number#98, sr_return_quantity#99, sr_return_amt#100] +Arguments: [sr_ticket_number#98 ASC NULLS FIRST, sr_item_sk#97 ASC NULLS FIRST], false, 0 (99) SortMergeJoin [codegen id : 39] -Left keys [2]: [ss_ticket_number#97, ss_item_sk#96] -Right keys [2]: [sr_ticket_number#110, sr_item_sk#109] +Left keys [2]: [ss_ticket_number#86, ss_item_sk#85] +Right keys [2]: [sr_ticket_number#98, sr_item_sk#97] Join condition: None (100) Project [codegen id : 39] -Output [7]: [d_year#107, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105, (ss_quantity#98 - coalesce(sr_return_quantity#111, 0)) AS sales_cnt#44, CheckOverflow((promote_precision(cast(ss_ext_sales_price#99 as decimal(8,2))) - promote_precision(cast(coalesce(sr_return_amt#112, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#45] -Input [13]: [ss_item_sk#96, ss_ticket_number#97, ss_quantity#98, ss_ext_sales_price#99, i_brand_id#102, i_class_id#103, i_category_id#104, i_manufact_id#105, d_year#107, sr_item_sk#109, sr_ticket_number#110, sr_return_quantity#111, sr_return_amt#112] +Output [7]: [d_year#96, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94, (ss_quantity#87 - coalesce(sr_return_quantity#99, 0)) AS sales_cnt#39, CheckOverflow((promote_precision(cast(ss_ext_sales_price#88 as decimal(8,2))) - promote_precision(cast(coalesce(sr_return_amt#100, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#40] +Input [13]: [ss_item_sk#85, ss_ticket_number#86, ss_quantity#87, ss_ext_sales_price#88, i_brand_id#91, i_class_id#92, i_category_id#93, i_manufact_id#94, d_year#96, sr_item_sk#97, sr_ticket_number#98, sr_return_quantity#99, sr_return_amt#100] (101) Scan parquet default.web_sales -Output [5]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, ws_sold_date_sk#117] +Output [5]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, ws_sold_date_sk#105] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#117), dynamicpruningexpression(ws_sold_date_sk#117 IN dynamicpruning#83)] +PartitionFilters: [isnotnull(ws_sold_date_sk#105), dynamicpruningexpression(ws_sold_date_sk#105 IN dynamicpruning#73)] PushedFilters: [IsNotNull(ws_item_sk)] ReadSchema: struct (102) ColumnarToRow [codegen id : 42] -Input [5]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, ws_sold_date_sk#117] +Input [5]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, ws_sold_date_sk#105] (103) Filter [codegen id : 42] -Input [5]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, ws_sold_date_sk#117] -Condition : isnotnull(ws_item_sk#113) +Input [5]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, ws_sold_date_sk#105] +Condition : isnotnull(ws_item_sk#101) (104) ReusedExchange [Reuses operator id: 8] -Output [5]: [i_item_sk#118, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122] +Output [5]: [i_item_sk#106, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110] (105) BroadcastHashJoin [codegen id : 42] -Left keys [1]: [ws_item_sk#113] -Right keys [1]: [i_item_sk#118] +Left keys [1]: [ws_item_sk#101] +Right keys [1]: [i_item_sk#106] Join condition: None (106) Project [codegen id : 42] -Output [9]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, ws_sold_date_sk#117, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122] -Input [10]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, ws_sold_date_sk#117, i_item_sk#118, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122] +Output [9]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, ws_sold_date_sk#105, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110] +Input [10]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, ws_sold_date_sk#105, i_item_sk#106, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110] (107) ReusedExchange [Reuses operator id: 135] -Output [2]: [d_date_sk#123, d_year#124] +Output [2]: [d_date_sk#111, d_year#112] (108) BroadcastHashJoin [codegen id : 42] -Left keys [1]: [ws_sold_date_sk#117] -Right keys [1]: [d_date_sk#123] +Left keys [1]: [ws_sold_date_sk#105] +Right keys [1]: [d_date_sk#111] Join condition: None (109) Project [codegen id : 42] -Output [9]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122, d_year#124] -Input [11]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, ws_sold_date_sk#117, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122, d_date_sk#123, d_year#124] +Output [9]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110, d_year#112] +Input [11]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, ws_sold_date_sk#105, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110, d_date_sk#111, d_year#112] (110) Exchange -Input [9]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122, d_year#124] -Arguments: hashpartitioning(ws_order_number#114, ws_item_sk#113, 5), ENSURE_REQUIREMENTS, [id=#125] +Input [9]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110, d_year#112] +Arguments: hashpartitioning(ws_order_number#102, ws_item_sk#101, 5), ENSURE_REQUIREMENTS, [plan_id=13] (111) Sort [codegen id : 43] -Input [9]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122, d_year#124] -Arguments: [ws_order_number#114 ASC NULLS FIRST, ws_item_sk#113 ASC NULLS FIRST], false, 0 +Input [9]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110, d_year#112] +Arguments: [ws_order_number#102 ASC NULLS FIRST, ws_item_sk#101 ASC NULLS FIRST], false, 0 (112) ReusedExchange [Reuses operator id: 58] -Output [4]: [wr_item_sk#126, wr_order_number#127, wr_return_quantity#128, wr_return_amt#129] +Output [4]: [wr_item_sk#113, wr_order_number#114, wr_return_quantity#115, wr_return_amt#116] (113) Sort [codegen id : 45] -Input [4]: [wr_item_sk#126, wr_order_number#127, wr_return_quantity#128, wr_return_amt#129] -Arguments: [wr_order_number#127 ASC NULLS FIRST, wr_item_sk#126 ASC NULLS FIRST], false, 0 +Input [4]: [wr_item_sk#113, wr_order_number#114, wr_return_quantity#115, wr_return_amt#116] +Arguments: [wr_order_number#114 ASC NULLS FIRST, wr_item_sk#113 ASC NULLS FIRST], false, 0 (114) SortMergeJoin [codegen id : 46] -Left keys [2]: [ws_order_number#114, ws_item_sk#113] -Right keys [2]: [wr_order_number#127, wr_item_sk#126] +Left keys [2]: [ws_order_number#102, ws_item_sk#101] +Right keys [2]: [wr_order_number#114, wr_item_sk#113] Join condition: None (115) Project [codegen id : 46] -Output [7]: [d_year#124, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122, (ws_quantity#115 - coalesce(wr_return_quantity#128, 0)) AS sales_cnt#65, CheckOverflow((promote_precision(cast(ws_ext_sales_price#116 as decimal(8,2))) - promote_precision(cast(coalesce(wr_return_amt#129, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#66] -Input [13]: [ws_item_sk#113, ws_order_number#114, ws_quantity#115, ws_ext_sales_price#116, i_brand_id#119, i_class_id#120, i_category_id#121, i_manufact_id#122, d_year#124, wr_item_sk#126, wr_order_number#127, wr_return_quantity#128, wr_return_amt#129] +Output [7]: [d_year#112, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110, (ws_quantity#103 - coalesce(wr_return_quantity#115, 0)) AS sales_cnt#58, CheckOverflow((promote_precision(cast(ws_ext_sales_price#104 as decimal(8,2))) - promote_precision(cast(coalesce(wr_return_amt#116, 0.00) as decimal(8,2)))), DecimalType(8,2)) AS sales_amt#59] +Input [13]: [ws_item_sk#101, ws_order_number#102, ws_quantity#103, ws_ext_sales_price#104, i_brand_id#107, i_class_id#108, i_category_id#109, i_manufact_id#110, d_year#112, wr_item_sk#113, wr_order_number#114, wr_return_quantity#115, wr_return_amt#116] (116) Union (117) HashAggregate [codegen id : 47] -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] -Keys [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] +Keys [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] Functions: [] Aggregate Attributes: [] -Results [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] +Results [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] (118) Exchange -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] -Arguments: hashpartitioning(d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24, 5), ENSURE_REQUIREMENTS, [id=#130] +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] +Arguments: hashpartitioning(d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21, 5), ENSURE_REQUIREMENTS, [plan_id=14] (119) HashAggregate [codegen id : 48] -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] -Keys [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] +Keys [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] Functions: [] Aggregate Attributes: [] -Results [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] +Results [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] (120) HashAggregate [codegen id : 48] -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#23, sales_amt#24] -Keys [5]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88] -Functions [2]: [partial_sum(sales_cnt#23), partial_sum(UnscaledValue(sales_amt#24))] -Aggregate Attributes [2]: [sum#68, sum#131] -Results [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sum#70, sum#132] +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#20, sales_amt#21] +Keys [5]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78] +Functions [2]: [partial_sum(sales_cnt#20), partial_sum(UnscaledValue(sales_amt#21))] +Aggregate Attributes [2]: [sum#60, sum#117] +Results [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sum#62, sum#118] (121) Exchange -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sum#70, sum#132] -Arguments: hashpartitioning(d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, 5), ENSURE_REQUIREMENTS, [id=#133] +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sum#62, sum#118] +Arguments: hashpartitioning(d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, 5), ENSURE_REQUIREMENTS, [plan_id=15] (122) HashAggregate [codegen id : 49] -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sum#70, sum#132] -Keys [5]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88] -Functions [2]: [sum(sales_cnt#23), sum(UnscaledValue(sales_amt#24))] -Aggregate Attributes [2]: [sum(sales_cnt#23)#73, sum(UnscaledValue(sales_amt#24))#74] -Results [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sum(sales_cnt#23)#73 AS sales_cnt#134, MakeDecimal(sum(UnscaledValue(sales_amt#24))#74,18,2) AS sales_amt#135] +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sum#62, sum#118] +Keys [5]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78] +Functions [2]: [sum(sales_cnt#20), sum(UnscaledValue(sales_amt#21))] +Aggregate Attributes [2]: [sum(sales_cnt#20)#64, sum(UnscaledValue(sales_amt#21))#65] +Results [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sum(sales_cnt#20)#64 AS sales_cnt#119, MakeDecimal(sum(UnscaledValue(sales_amt#21))#65,18,2) AS sales_amt#120] (123) Exchange -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#134, sales_amt#135] -Arguments: hashpartitioning(i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, 5), ENSURE_REQUIREMENTS, [id=#136] +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#119, sales_amt#120] +Arguments: hashpartitioning(i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, 5), ENSURE_REQUIREMENTS, [plan_id=16] (124) Sort [codegen id : 50] -Input [7]: [d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#134, sales_amt#135] -Arguments: [i_brand_id#85 ASC NULLS FIRST, i_class_id#86 ASC NULLS FIRST, i_category_id#87 ASC NULLS FIRST, i_manufact_id#88 ASC NULLS FIRST], false, 0 +Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#119, sales_amt#120] +Arguments: [i_brand_id#75 ASC NULLS FIRST, i_class_id#76 ASC NULLS FIRST, i_category_id#77 ASC NULLS FIRST, i_manufact_id#78 ASC NULLS FIRST], false, 0 (125) SortMergeJoin [codegen id : 51] Left keys [4]: [i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12] -Right keys [4]: [i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88] -Join condition: (CheckOverflow((promote_precision(cast(sales_cnt#75 as decimal(17,2))) / promote_precision(cast(sales_cnt#134 as decimal(17,2)))), DecimalType(37,20)) < 0.90000000000000000000) +Right keys [4]: [i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78] +Join condition: (CheckOverflow((promote_precision(cast(sales_cnt#66 as decimal(17,2))) / promote_precision(cast(sales_cnt#119 as decimal(17,2)))), DecimalType(37,20)) < 0.90000000000000000000) (126) Project [codegen id : 51] -Output [10]: [d_year#90 AS prev_year#137, d_year#15 AS year#138, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#134 AS prev_yr_cnt#139, sales_cnt#75 AS curr_yr_cnt#140, (sales_cnt#75 - sales_cnt#134) AS sales_cnt_diff#141, CheckOverflow((promote_precision(cast(sales_amt#76 as decimal(19,2))) - promote_precision(cast(sales_amt#135 as decimal(19,2)))), DecimalType(19,2)) AS sales_amt_diff#142] -Input [14]: [d_year#15, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#75, sales_amt#76, d_year#90, i_brand_id#85, i_class_id#86, i_category_id#87, i_manufact_id#88, sales_cnt#134, sales_amt#135] +Output [10]: [d_year#80 AS prev_year#121, d_year#14 AS year#122, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#119 AS prev_yr_cnt#123, sales_cnt#66 AS curr_yr_cnt#124, (sales_cnt#66 - sales_cnt#119) AS sales_cnt_diff#125, CheckOverflow((promote_precision(cast(sales_amt#67 as decimal(19,2))) - promote_precision(cast(sales_amt#120 as decimal(19,2)))), DecimalType(19,2)) AS sales_amt_diff#126] +Input [14]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#66, sales_amt#67, d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#119, sales_amt#120] (127) TakeOrderedAndProject -Input [10]: [prev_year#137, year#138, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, prev_yr_cnt#139, curr_yr_cnt#140, sales_cnt_diff#141, sales_amt_diff#142] -Arguments: 100, [sales_cnt_diff#141 ASC NULLS FIRST, sales_amt_diff#142 ASC NULLS FIRST], [prev_year#137, year#138, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, prev_yr_cnt#139, curr_yr_cnt#140, sales_cnt_diff#141, sales_amt_diff#142] +Input [10]: [prev_year#121, year#122, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, prev_yr_cnt#123, curr_yr_cnt#124, sales_cnt_diff#125, sales_amt_diff#126] +Arguments: 100, [sales_cnt_diff#125 ASC NULLS FIRST, sales_amt_diff#126 ASC NULLS FIRST], [prev_year#121, year#122, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, prev_yr_cnt#123, curr_yr_cnt#124, sales_cnt_diff#125, sales_amt_diff#126] ===== Subqueries ===== @@ -697,28 +697,28 @@ BroadcastExchange (131) (128) Scan parquet default.date_dim -Output [2]: [d_date_sk#14, d_year#15] +Output [2]: [d_date_sk#13, d_year#14] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)] ReadSchema: struct (129) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#15] +Input [2]: [d_date_sk#13, d_year#14] (130) Filter [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#15] -Condition : ((isnotnull(d_year#15) AND (d_year#15 = 2002)) AND isnotnull(d_date_sk#14)) +Input [2]: [d_date_sk#13, d_year#14] +Condition : ((isnotnull(d_year#14) AND (d_year#14 = 2002)) AND isnotnull(d_date_sk#13)) (131) BroadcastExchange -Input [2]: [d_date_sk#14, d_year#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#143] +Input [2]: [d_date_sk#13, d_year#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=17] -Subquery:2 Hosting operator id = 24 Hosting Expression = ss_sold_date_sk#29 IN dynamicpruning#6 +Subquery:2 Hosting operator id = 24 Hosting Expression = ss_sold_date_sk#26 IN dynamicpruning#6 -Subquery:3 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#50 IN dynamicpruning#6 +Subquery:3 Hosting operator id = 43 Hosting Expression = ws_sold_date_sk#45 IN dynamicpruning#6 -Subquery:4 Hosting operator id = 71 Hosting Expression = cs_sold_date_sk#82 IN dynamicpruning#83 +Subquery:4 Hosting operator id = 71 Hosting Expression = cs_sold_date_sk#72 IN dynamicpruning#73 BroadcastExchange (135) +- * Filter (134) +- * ColumnarToRow (133) @@ -726,25 +726,25 @@ BroadcastExchange (135) (132) Scan parquet default.date_dim -Output [2]: [d_date_sk#89, d_year#90] +Output [2]: [d_date_sk#79, d_year#80] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)] ReadSchema: struct (133) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#89, d_year#90] +Input [2]: [d_date_sk#79, d_year#80] (134) Filter [codegen id : 1] -Input [2]: [d_date_sk#89, d_year#90] -Condition : ((isnotnull(d_year#90) AND (d_year#90 = 2001)) AND isnotnull(d_date_sk#89)) +Input [2]: [d_date_sk#79, d_year#80] +Condition : ((isnotnull(d_year#80) AND (d_year#80 = 2001)) AND isnotnull(d_date_sk#79)) (135) BroadcastExchange -Input [2]: [d_date_sk#89, d_year#90] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#144] +Input [2]: [d_date_sk#79, d_year#80] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=18] -Subquery:5 Hosting operator id = 86 Hosting Expression = ss_sold_date_sk#100 IN dynamicpruning#83 +Subquery:5 Hosting operator id = 86 Hosting Expression = ss_sold_date_sk#89 IN dynamicpruning#73 -Subquery:6 Hosting operator id = 101 Hosting Expression = ws_sold_date_sk#117 IN dynamicpruning#83 +Subquery:6 Hosting operator id = 101 Hosting Expression = ws_sold_date_sk#105 IN dynamicpruning#73 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q77a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q77a.sf100/explain.txt index 335e1aee4e5ca..1061fb775d5d6 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q77a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q77a.sf100/explain.txt @@ -142,7 +142,7 @@ Condition : isnotnull(s_store_sk#7) (10) BroadcastExchange Input [1]: [s_store_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_store_sk#1] @@ -157,422 +157,422 @@ Input [4]: [ss_store_sk#1, ss_ext_sales_price#2, ss_net_profit#3, s_store_sk#7] Input [3]: [ss_ext_sales_price#2, ss_net_profit#3, s_store_sk#7] Keys [1]: [s_store_sk#7] Functions [2]: [partial_sum(UnscaledValue(ss_ext_sales_price#2)), partial_sum(UnscaledValue(ss_net_profit#3))] -Aggregate Attributes [2]: [sum#9, sum#10] -Results [3]: [s_store_sk#7, sum#11, sum#12] +Aggregate Attributes [2]: [sum#8, sum#9] +Results [3]: [s_store_sk#7, sum#10, sum#11] (14) Exchange -Input [3]: [s_store_sk#7, sum#11, sum#12] -Arguments: hashpartitioning(s_store_sk#7, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [3]: [s_store_sk#7, sum#10, sum#11] +Arguments: hashpartitioning(s_store_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 8] -Input [3]: [s_store_sk#7, sum#11, sum#12] +Input [3]: [s_store_sk#7, sum#10, sum#11] Keys [1]: [s_store_sk#7] Functions [2]: [sum(UnscaledValue(ss_ext_sales_price#2)), sum(UnscaledValue(ss_net_profit#3))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_ext_sales_price#2))#14, sum(UnscaledValue(ss_net_profit#3))#15] -Results [3]: [s_store_sk#7, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS sales#16, MakeDecimal(sum(UnscaledValue(ss_net_profit#3))#15,17,2) AS profit#17] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_ext_sales_price#2))#12, sum(UnscaledValue(ss_net_profit#3))#13] +Results [3]: [s_store_sk#7, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#12,17,2) AS sales#14, MakeDecimal(sum(UnscaledValue(ss_net_profit#3))#13,17,2) AS profit#15] (16) Scan parquet default.store_returns -Output [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21] +Output [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(sr_returned_date_sk#21), dynamicpruningexpression(sr_returned_date_sk#21 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(sr_returned_date_sk#19), dynamicpruningexpression(sr_returned_date_sk#19 IN dynamicpruning#5)] PushedFilters: [IsNotNull(sr_store_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 6] -Input [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21] +Input [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19] (18) Filter [codegen id : 6] -Input [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21] -Condition : isnotnull(sr_store_sk#18) +Input [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19] +Condition : isnotnull(sr_store_sk#16) (19) ReusedExchange [Reuses operator id: 103] -Output [1]: [d_date_sk#22] +Output [1]: [d_date_sk#20] (20) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [sr_returned_date_sk#21] -Right keys [1]: [d_date_sk#22] +Left keys [1]: [sr_returned_date_sk#19] +Right keys [1]: [d_date_sk#20] Join condition: None (21) Project [codegen id : 6] -Output [3]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20] -Input [5]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21, d_date_sk#22] +Output [3]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18] +Input [5]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19, d_date_sk#20] (22) ReusedExchange [Reuses operator id: 10] -Output [1]: [s_store_sk#23] +Output [1]: [s_store_sk#21] (23) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [sr_store_sk#18] -Right keys [1]: [s_store_sk#23] +Left keys [1]: [sr_store_sk#16] +Right keys [1]: [s_store_sk#21] Join condition: None (24) Project [codegen id : 6] -Output [3]: [sr_return_amt#19, sr_net_loss#20, s_store_sk#23] -Input [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, s_store_sk#23] +Output [3]: [sr_return_amt#17, sr_net_loss#18, s_store_sk#21] +Input [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, s_store_sk#21] (25) HashAggregate [codegen id : 6] -Input [3]: [sr_return_amt#19, sr_net_loss#20, s_store_sk#23] -Keys [1]: [s_store_sk#23] -Functions [2]: [partial_sum(UnscaledValue(sr_return_amt#19)), partial_sum(UnscaledValue(sr_net_loss#20))] -Aggregate Attributes [2]: [sum#24, sum#25] -Results [3]: [s_store_sk#23, sum#26, sum#27] +Input [3]: [sr_return_amt#17, sr_net_loss#18, s_store_sk#21] +Keys [1]: [s_store_sk#21] +Functions [2]: [partial_sum(UnscaledValue(sr_return_amt#17)), partial_sum(UnscaledValue(sr_net_loss#18))] +Aggregate Attributes [2]: [sum#22, sum#23] +Results [3]: [s_store_sk#21, sum#24, sum#25] (26) Exchange -Input [3]: [s_store_sk#23, sum#26, sum#27] -Arguments: hashpartitioning(s_store_sk#23, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [3]: [s_store_sk#21, sum#24, sum#25] +Arguments: hashpartitioning(s_store_sk#21, 5), ENSURE_REQUIREMENTS, [plan_id=3] (27) HashAggregate [codegen id : 7] -Input [3]: [s_store_sk#23, sum#26, sum#27] -Keys [1]: [s_store_sk#23] -Functions [2]: [sum(UnscaledValue(sr_return_amt#19)), sum(UnscaledValue(sr_net_loss#20))] -Aggregate Attributes [2]: [sum(UnscaledValue(sr_return_amt#19))#29, sum(UnscaledValue(sr_net_loss#20))#30] -Results [3]: [s_store_sk#23, MakeDecimal(sum(UnscaledValue(sr_return_amt#19))#29,17,2) AS returns#31, MakeDecimal(sum(UnscaledValue(sr_net_loss#20))#30,17,2) AS profit_loss#32] +Input [3]: [s_store_sk#21, sum#24, sum#25] +Keys [1]: [s_store_sk#21] +Functions [2]: [sum(UnscaledValue(sr_return_amt#17)), sum(UnscaledValue(sr_net_loss#18))] +Aggregate Attributes [2]: [sum(UnscaledValue(sr_return_amt#17))#26, sum(UnscaledValue(sr_net_loss#18))#27] +Results [3]: [s_store_sk#21, MakeDecimal(sum(UnscaledValue(sr_return_amt#17))#26,17,2) AS returns#28, MakeDecimal(sum(UnscaledValue(sr_net_loss#18))#27,17,2) AS profit_loss#29] (28) BroadcastExchange -Input [3]: [s_store_sk#23, returns#31, profit_loss#32] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#33] +Input [3]: [s_store_sk#21, returns#28, profit_loss#29] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (29) BroadcastHashJoin [codegen id : 8] Left keys [1]: [s_store_sk#7] -Right keys [1]: [s_store_sk#23] +Right keys [1]: [s_store_sk#21] Join condition: None (30) Project [codegen id : 8] -Output [5]: [store channel AS channel#34, s_store_sk#7 AS id#35, sales#16, coalesce(returns#31, 0.00) AS returns#36, CheckOverflow((promote_precision(cast(profit#17 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#32, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#37] -Input [6]: [s_store_sk#7, sales#16, profit#17, s_store_sk#23, returns#31, profit_loss#32] +Output [5]: [store channel AS channel#30, s_store_sk#7 AS id#31, sales#14, coalesce(returns#28, 0.00) AS returns#32, CheckOverflow((promote_precision(cast(profit#15 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#29, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#33] +Input [6]: [s_store_sk#7, sales#14, profit#15, s_store_sk#21, returns#28, profit_loss#29] (31) Scan parquet default.catalog_sales -Output [4]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40, cs_sold_date_sk#41] +Output [4]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36, cs_sold_date_sk#37] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#41), dynamicpruningexpression(cs_sold_date_sk#41 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#37), dynamicpruningexpression(cs_sold_date_sk#37 IN dynamicpruning#5)] ReadSchema: struct (32) ColumnarToRow [codegen id : 10] -Input [4]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40, cs_sold_date_sk#41] +Input [4]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36, cs_sold_date_sk#37] (33) ReusedExchange [Reuses operator id: 103] -Output [1]: [d_date_sk#42] +Output [1]: [d_date_sk#38] (34) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cs_sold_date_sk#41] -Right keys [1]: [d_date_sk#42] +Left keys [1]: [cs_sold_date_sk#37] +Right keys [1]: [d_date_sk#38] Join condition: None (35) Project [codegen id : 10] -Output [3]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40] -Input [5]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40, cs_sold_date_sk#41, d_date_sk#42] +Output [3]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36] +Input [5]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36, cs_sold_date_sk#37, d_date_sk#38] (36) HashAggregate [codegen id : 10] -Input [3]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40] -Keys [1]: [cs_call_center_sk#38] -Functions [2]: [partial_sum(UnscaledValue(cs_ext_sales_price#39)), partial_sum(UnscaledValue(cs_net_profit#40))] -Aggregate Attributes [2]: [sum#43, sum#44] -Results [3]: [cs_call_center_sk#38, sum#45, sum#46] +Input [3]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36] +Keys [1]: [cs_call_center_sk#34] +Functions [2]: [partial_sum(UnscaledValue(cs_ext_sales_price#35)), partial_sum(UnscaledValue(cs_net_profit#36))] +Aggregate Attributes [2]: [sum#39, sum#40] +Results [3]: [cs_call_center_sk#34, sum#41, sum#42] (37) Exchange -Input [3]: [cs_call_center_sk#38, sum#45, sum#46] -Arguments: hashpartitioning(cs_call_center_sk#38, 5), ENSURE_REQUIREMENTS, [id=#47] +Input [3]: [cs_call_center_sk#34, sum#41, sum#42] +Arguments: hashpartitioning(cs_call_center_sk#34, 5), ENSURE_REQUIREMENTS, [plan_id=5] (38) HashAggregate [codegen id : 14] -Input [3]: [cs_call_center_sk#38, sum#45, sum#46] -Keys [1]: [cs_call_center_sk#38] -Functions [2]: [sum(UnscaledValue(cs_ext_sales_price#39)), sum(UnscaledValue(cs_net_profit#40))] -Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_sales_price#39))#48, sum(UnscaledValue(cs_net_profit#40))#49] -Results [3]: [cs_call_center_sk#38, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#39))#48,17,2) AS sales#50, MakeDecimal(sum(UnscaledValue(cs_net_profit#40))#49,17,2) AS profit#51] +Input [3]: [cs_call_center_sk#34, sum#41, sum#42] +Keys [1]: [cs_call_center_sk#34] +Functions [2]: [sum(UnscaledValue(cs_ext_sales_price#35)), sum(UnscaledValue(cs_net_profit#36))] +Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_sales_price#35))#43, sum(UnscaledValue(cs_net_profit#36))#44] +Results [3]: [cs_call_center_sk#34, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#35))#43,17,2) AS sales#45, MakeDecimal(sum(UnscaledValue(cs_net_profit#36))#44,17,2) AS profit#46] (39) Scan parquet default.catalog_returns -Output [3]: [cr_return_amount#52, cr_net_loss#53, cr_returned_date_sk#54] +Output [3]: [cr_return_amount#47, cr_net_loss#48, cr_returned_date_sk#49] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cr_returned_date_sk#54), dynamicpruningexpression(cr_returned_date_sk#54 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cr_returned_date_sk#49), dynamicpruningexpression(cr_returned_date_sk#49 IN dynamicpruning#5)] ReadSchema: struct (40) ColumnarToRow [codegen id : 12] -Input [3]: [cr_return_amount#52, cr_net_loss#53, cr_returned_date_sk#54] +Input [3]: [cr_return_amount#47, cr_net_loss#48, cr_returned_date_sk#49] (41) ReusedExchange [Reuses operator id: 103] -Output [1]: [d_date_sk#55] +Output [1]: [d_date_sk#50] (42) BroadcastHashJoin [codegen id : 12] -Left keys [1]: [cr_returned_date_sk#54] -Right keys [1]: [d_date_sk#55] +Left keys [1]: [cr_returned_date_sk#49] +Right keys [1]: [d_date_sk#50] Join condition: None (43) Project [codegen id : 12] -Output [2]: [cr_return_amount#52, cr_net_loss#53] -Input [4]: [cr_return_amount#52, cr_net_loss#53, cr_returned_date_sk#54, d_date_sk#55] +Output [2]: [cr_return_amount#47, cr_net_loss#48] +Input [4]: [cr_return_amount#47, cr_net_loss#48, cr_returned_date_sk#49, d_date_sk#50] (44) HashAggregate [codegen id : 12] -Input [2]: [cr_return_amount#52, cr_net_loss#53] +Input [2]: [cr_return_amount#47, cr_net_loss#48] Keys: [] -Functions [2]: [partial_sum(UnscaledValue(cr_return_amount#52)), partial_sum(UnscaledValue(cr_net_loss#53))] -Aggregate Attributes [2]: [sum#56, sum#57] -Results [2]: [sum#58, sum#59] +Functions [2]: [partial_sum(UnscaledValue(cr_return_amount#47)), partial_sum(UnscaledValue(cr_net_loss#48))] +Aggregate Attributes [2]: [sum#51, sum#52] +Results [2]: [sum#53, sum#54] (45) Exchange -Input [2]: [sum#58, sum#59] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#60] +Input [2]: [sum#53, sum#54] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6] (46) HashAggregate [codegen id : 13] -Input [2]: [sum#58, sum#59] +Input [2]: [sum#53, sum#54] Keys: [] -Functions [2]: [sum(UnscaledValue(cr_return_amount#52)), sum(UnscaledValue(cr_net_loss#53))] -Aggregate Attributes [2]: [sum(UnscaledValue(cr_return_amount#52))#61, sum(UnscaledValue(cr_net_loss#53))#62] -Results [2]: [MakeDecimal(sum(UnscaledValue(cr_return_amount#52))#61,17,2) AS returns#63, MakeDecimal(sum(UnscaledValue(cr_net_loss#53))#62,17,2) AS profit_loss#64] +Functions [2]: [sum(UnscaledValue(cr_return_amount#47)), sum(UnscaledValue(cr_net_loss#48))] +Aggregate Attributes [2]: [sum(UnscaledValue(cr_return_amount#47))#55, sum(UnscaledValue(cr_net_loss#48))#56] +Results [2]: [MakeDecimal(sum(UnscaledValue(cr_return_amount#47))#55,17,2) AS returns#57, MakeDecimal(sum(UnscaledValue(cr_net_loss#48))#56,17,2) AS profit_loss#58] (47) BroadcastExchange -Input [2]: [returns#63, profit_loss#64] -Arguments: IdentityBroadcastMode, [id=#65] +Input [2]: [returns#57, profit_loss#58] +Arguments: IdentityBroadcastMode, [plan_id=7] (48) BroadcastNestedLoopJoin [codegen id : 14] Join condition: None (49) Project [codegen id : 14] -Output [5]: [catalog channel AS channel#66, cs_call_center_sk#38 AS id#67, sales#50, returns#63, CheckOverflow((promote_precision(cast(profit#51 as decimal(18,2))) - promote_precision(cast(profit_loss#64 as decimal(18,2)))), DecimalType(18,2)) AS profit#68] -Input [5]: [cs_call_center_sk#38, sales#50, profit#51, returns#63, profit_loss#64] +Output [5]: [catalog channel AS channel#59, cs_call_center_sk#34 AS id#60, sales#45, returns#57, CheckOverflow((promote_precision(cast(profit#46 as decimal(18,2))) - promote_precision(cast(profit_loss#58 as decimal(18,2)))), DecimalType(18,2)) AS profit#61] +Input [5]: [cs_call_center_sk#34, sales#45, profit#46, returns#57, profit_loss#58] (50) Scan parquet default.web_sales -Output [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72] +Output [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#72), dynamicpruningexpression(ws_sold_date_sk#72 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#65), dynamicpruningexpression(ws_sold_date_sk#65 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_web_page_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 17] -Input [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72] +Input [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65] (52) Filter [codegen id : 17] -Input [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72] -Condition : isnotnull(ws_web_page_sk#69) +Input [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65] +Condition : isnotnull(ws_web_page_sk#62) (53) ReusedExchange [Reuses operator id: 103] -Output [1]: [d_date_sk#73] +Output [1]: [d_date_sk#66] (54) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_sold_date_sk#72] -Right keys [1]: [d_date_sk#73] +Left keys [1]: [ws_sold_date_sk#65] +Right keys [1]: [d_date_sk#66] Join condition: None (55) Project [codegen id : 17] -Output [3]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71] -Input [5]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72, d_date_sk#73] +Output [3]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64] +Input [5]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65, d_date_sk#66] (56) Scan parquet default.web_page -Output [1]: [wp_web_page_sk#74] +Output [1]: [wp_web_page_sk#67] Batched: true Location [not included in comparison]/{warehouse_dir}/web_page] PushedFilters: [IsNotNull(wp_web_page_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 16] -Input [1]: [wp_web_page_sk#74] +Input [1]: [wp_web_page_sk#67] (58) Filter [codegen id : 16] -Input [1]: [wp_web_page_sk#74] -Condition : isnotnull(wp_web_page_sk#74) +Input [1]: [wp_web_page_sk#67] +Condition : isnotnull(wp_web_page_sk#67) (59) BroadcastExchange -Input [1]: [wp_web_page_sk#74] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#75] +Input [1]: [wp_web_page_sk#67] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] (60) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_web_page_sk#69] -Right keys [1]: [wp_web_page_sk#74] +Left keys [1]: [ws_web_page_sk#62] +Right keys [1]: [wp_web_page_sk#67] Join condition: None (61) Project [codegen id : 17] -Output [3]: [ws_ext_sales_price#70, ws_net_profit#71, wp_web_page_sk#74] -Input [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, wp_web_page_sk#74] +Output [3]: [ws_ext_sales_price#63, ws_net_profit#64, wp_web_page_sk#67] +Input [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, wp_web_page_sk#67] (62) HashAggregate [codegen id : 17] -Input [3]: [ws_ext_sales_price#70, ws_net_profit#71, wp_web_page_sk#74] -Keys [1]: [wp_web_page_sk#74] -Functions [2]: [partial_sum(UnscaledValue(ws_ext_sales_price#70)), partial_sum(UnscaledValue(ws_net_profit#71))] -Aggregate Attributes [2]: [sum#76, sum#77] -Results [3]: [wp_web_page_sk#74, sum#78, sum#79] +Input [3]: [ws_ext_sales_price#63, ws_net_profit#64, wp_web_page_sk#67] +Keys [1]: [wp_web_page_sk#67] +Functions [2]: [partial_sum(UnscaledValue(ws_ext_sales_price#63)), partial_sum(UnscaledValue(ws_net_profit#64))] +Aggregate Attributes [2]: [sum#68, sum#69] +Results [3]: [wp_web_page_sk#67, sum#70, sum#71] (63) Exchange -Input [3]: [wp_web_page_sk#74, sum#78, sum#79] -Arguments: hashpartitioning(wp_web_page_sk#74, 5), ENSURE_REQUIREMENTS, [id=#80] +Input [3]: [wp_web_page_sk#67, sum#70, sum#71] +Arguments: hashpartitioning(wp_web_page_sk#67, 5), ENSURE_REQUIREMENTS, [plan_id=9] (64) HashAggregate [codegen id : 22] -Input [3]: [wp_web_page_sk#74, sum#78, sum#79] -Keys [1]: [wp_web_page_sk#74] -Functions [2]: [sum(UnscaledValue(ws_ext_sales_price#70)), sum(UnscaledValue(ws_net_profit#71))] -Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_sales_price#70))#81, sum(UnscaledValue(ws_net_profit#71))#82] -Results [3]: [wp_web_page_sk#74, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#70))#81,17,2) AS sales#83, MakeDecimal(sum(UnscaledValue(ws_net_profit#71))#82,17,2) AS profit#84] +Input [3]: [wp_web_page_sk#67, sum#70, sum#71] +Keys [1]: [wp_web_page_sk#67] +Functions [2]: [sum(UnscaledValue(ws_ext_sales_price#63)), sum(UnscaledValue(ws_net_profit#64))] +Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_sales_price#63))#72, sum(UnscaledValue(ws_net_profit#64))#73] +Results [3]: [wp_web_page_sk#67, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#63))#72,17,2) AS sales#74, MakeDecimal(sum(UnscaledValue(ws_net_profit#64))#73,17,2) AS profit#75] (65) Scan parquet default.web_returns -Output [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88] +Output [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(wr_returned_date_sk#88), dynamicpruningexpression(wr_returned_date_sk#88 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(wr_returned_date_sk#79), dynamicpruningexpression(wr_returned_date_sk#79 IN dynamicpruning#5)] PushedFilters: [IsNotNull(wr_web_page_sk)] ReadSchema: struct (66) ColumnarToRow [codegen id : 20] -Input [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88] +Input [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79] (67) Filter [codegen id : 20] -Input [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88] -Condition : isnotnull(wr_web_page_sk#85) +Input [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79] +Condition : isnotnull(wr_web_page_sk#76) (68) ReusedExchange [Reuses operator id: 103] -Output [1]: [d_date_sk#89] +Output [1]: [d_date_sk#80] (69) BroadcastHashJoin [codegen id : 20] -Left keys [1]: [wr_returned_date_sk#88] -Right keys [1]: [d_date_sk#89] +Left keys [1]: [wr_returned_date_sk#79] +Right keys [1]: [d_date_sk#80] Join condition: None (70) Project [codegen id : 20] -Output [3]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87] -Input [5]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88, d_date_sk#89] +Output [3]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78] +Input [5]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79, d_date_sk#80] (71) ReusedExchange [Reuses operator id: 59] -Output [1]: [wp_web_page_sk#90] +Output [1]: [wp_web_page_sk#81] (72) BroadcastHashJoin [codegen id : 20] -Left keys [1]: [wr_web_page_sk#85] -Right keys [1]: [wp_web_page_sk#90] +Left keys [1]: [wr_web_page_sk#76] +Right keys [1]: [wp_web_page_sk#81] Join condition: None (73) Project [codegen id : 20] -Output [3]: [wr_return_amt#86, wr_net_loss#87, wp_web_page_sk#90] -Input [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wp_web_page_sk#90] +Output [3]: [wr_return_amt#77, wr_net_loss#78, wp_web_page_sk#81] +Input [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wp_web_page_sk#81] (74) HashAggregate [codegen id : 20] -Input [3]: [wr_return_amt#86, wr_net_loss#87, wp_web_page_sk#90] -Keys [1]: [wp_web_page_sk#90] -Functions [2]: [partial_sum(UnscaledValue(wr_return_amt#86)), partial_sum(UnscaledValue(wr_net_loss#87))] -Aggregate Attributes [2]: [sum#91, sum#92] -Results [3]: [wp_web_page_sk#90, sum#93, sum#94] +Input [3]: [wr_return_amt#77, wr_net_loss#78, wp_web_page_sk#81] +Keys [1]: [wp_web_page_sk#81] +Functions [2]: [partial_sum(UnscaledValue(wr_return_amt#77)), partial_sum(UnscaledValue(wr_net_loss#78))] +Aggregate Attributes [2]: [sum#82, sum#83] +Results [3]: [wp_web_page_sk#81, sum#84, sum#85] (75) Exchange -Input [3]: [wp_web_page_sk#90, sum#93, sum#94] -Arguments: hashpartitioning(wp_web_page_sk#90, 5), ENSURE_REQUIREMENTS, [id=#95] +Input [3]: [wp_web_page_sk#81, sum#84, sum#85] +Arguments: hashpartitioning(wp_web_page_sk#81, 5), ENSURE_REQUIREMENTS, [plan_id=10] (76) HashAggregate [codegen id : 21] -Input [3]: [wp_web_page_sk#90, sum#93, sum#94] -Keys [1]: [wp_web_page_sk#90] -Functions [2]: [sum(UnscaledValue(wr_return_amt#86)), sum(UnscaledValue(wr_net_loss#87))] -Aggregate Attributes [2]: [sum(UnscaledValue(wr_return_amt#86))#96, sum(UnscaledValue(wr_net_loss#87))#97] -Results [3]: [wp_web_page_sk#90, MakeDecimal(sum(UnscaledValue(wr_return_amt#86))#96,17,2) AS returns#98, MakeDecimal(sum(UnscaledValue(wr_net_loss#87))#97,17,2) AS profit_loss#99] +Input [3]: [wp_web_page_sk#81, sum#84, sum#85] +Keys [1]: [wp_web_page_sk#81] +Functions [2]: [sum(UnscaledValue(wr_return_amt#77)), sum(UnscaledValue(wr_net_loss#78))] +Aggregate Attributes [2]: [sum(UnscaledValue(wr_return_amt#77))#86, sum(UnscaledValue(wr_net_loss#78))#87] +Results [3]: [wp_web_page_sk#81, MakeDecimal(sum(UnscaledValue(wr_return_amt#77))#86,17,2) AS returns#88, MakeDecimal(sum(UnscaledValue(wr_net_loss#78))#87,17,2) AS profit_loss#89] (77) BroadcastExchange -Input [3]: [wp_web_page_sk#90, returns#98, profit_loss#99] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#100] +Input [3]: [wp_web_page_sk#81, returns#88, profit_loss#89] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11] (78) BroadcastHashJoin [codegen id : 22] -Left keys [1]: [wp_web_page_sk#74] -Right keys [1]: [wp_web_page_sk#90] +Left keys [1]: [wp_web_page_sk#67] +Right keys [1]: [wp_web_page_sk#81] Join condition: None (79) Project [codegen id : 22] -Output [5]: [web channel AS channel#101, wp_web_page_sk#74 AS id#102, sales#83, coalesce(returns#98, 0.00) AS returns#103, CheckOverflow((promote_precision(cast(profit#84 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#99, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#104] -Input [6]: [wp_web_page_sk#74, sales#83, profit#84, wp_web_page_sk#90, returns#98, profit_loss#99] +Output [5]: [web channel AS channel#90, wp_web_page_sk#67 AS id#91, sales#74, coalesce(returns#88, 0.00) AS returns#92, CheckOverflow((promote_precision(cast(profit#75 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#89, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#93] +Input [6]: [wp_web_page_sk#67, sales#74, profit#75, wp_web_page_sk#81, returns#88, profit_loss#89] (80) Union (81) HashAggregate [codegen id : 23] -Input [5]: [channel#34, id#35, sales#16, returns#36, profit#37] -Keys [2]: [channel#34, id#35] -Functions [3]: [partial_sum(sales#16), partial_sum(returns#36), partial_sum(profit#37)] -Aggregate Attributes [6]: [sum#105, isEmpty#106, sum#107, isEmpty#108, sum#109, isEmpty#110] -Results [8]: [channel#34, id#35, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116] +Input [5]: [channel#30, id#31, sales#14, returns#32, profit#33] +Keys [2]: [channel#30, id#31] +Functions [3]: [partial_sum(sales#14), partial_sum(returns#32), partial_sum(profit#33)] +Aggregate Attributes [6]: [sum#94, isEmpty#95, sum#96, isEmpty#97, sum#98, isEmpty#99] +Results [8]: [channel#30, id#31, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105] (82) Exchange -Input [8]: [channel#34, id#35, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116] -Arguments: hashpartitioning(channel#34, id#35, 5), ENSURE_REQUIREMENTS, [id=#117] +Input [8]: [channel#30, id#31, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105] +Arguments: hashpartitioning(channel#30, id#31, 5), ENSURE_REQUIREMENTS, [plan_id=12] (83) HashAggregate [codegen id : 24] -Input [8]: [channel#34, id#35, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116] -Keys [2]: [channel#34, id#35] -Functions [3]: [sum(sales#16), sum(returns#36), sum(profit#37)] -Aggregate Attributes [3]: [sum(sales#16)#118, sum(returns#36)#119, sum(profit#37)#120] -Results [5]: [channel#34, id#35, cast(sum(sales#16)#118 as decimal(37,2)) AS sales#121, cast(sum(returns#36)#119 as decimal(37,2)) AS returns#122, cast(sum(profit#37)#120 as decimal(38,2)) AS profit#123] +Input [8]: [channel#30, id#31, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105] +Keys [2]: [channel#30, id#31] +Functions [3]: [sum(sales#14), sum(returns#32), sum(profit#33)] +Aggregate Attributes [3]: [sum(sales#14)#106, sum(returns#32)#107, sum(profit#33)#108] +Results [5]: [channel#30, id#31, cast(sum(sales#14)#106 as decimal(37,2)) AS sales#109, cast(sum(returns#32)#107 as decimal(37,2)) AS returns#110, cast(sum(profit#33)#108 as decimal(38,2)) AS profit#111] (84) ReusedExchange [Reuses operator id: 82] -Output [8]: [channel#34, id#35, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116] +Output [8]: [channel#30, id#31, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105] (85) HashAggregate [codegen id : 48] -Input [8]: [channel#34, id#35, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116] -Keys [2]: [channel#34, id#35] -Functions [3]: [sum(sales#16), sum(returns#36), sum(profit#37)] -Aggregate Attributes [3]: [sum(sales#16)#118, sum(returns#36)#119, sum(profit#37)#120] -Results [4]: [channel#34, sum(sales#16)#118 AS sales#124, sum(returns#36)#119 AS returns#125, sum(profit#37)#120 AS profit#126] +Input [8]: [channel#30, id#31, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105] +Keys [2]: [channel#30, id#31] +Functions [3]: [sum(sales#14), sum(returns#32), sum(profit#33)] +Aggregate Attributes [3]: [sum(sales#14)#106, sum(returns#32)#107, sum(profit#33)#108] +Results [4]: [channel#30, sum(sales#14)#106 AS sales#112, sum(returns#32)#107 AS returns#113, sum(profit#33)#108 AS profit#114] (86) HashAggregate [codegen id : 48] -Input [4]: [channel#34, sales#124, returns#125, profit#126] -Keys [1]: [channel#34] -Functions [3]: [partial_sum(sales#124), partial_sum(returns#125), partial_sum(profit#126)] -Aggregate Attributes [6]: [sum#127, isEmpty#128, sum#129, isEmpty#130, sum#131, isEmpty#132] -Results [7]: [channel#34, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] +Input [4]: [channel#30, sales#112, returns#113, profit#114] +Keys [1]: [channel#30] +Functions [3]: [partial_sum(sales#112), partial_sum(returns#113), partial_sum(profit#114)] +Aggregate Attributes [6]: [sum#115, isEmpty#116, sum#117, isEmpty#118, sum#119, isEmpty#120] +Results [7]: [channel#30, sum#121, isEmpty#122, sum#123, isEmpty#124, sum#125, isEmpty#126] (87) Exchange -Input [7]: [channel#34, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] -Arguments: hashpartitioning(channel#34, 5), ENSURE_REQUIREMENTS, [id=#139] +Input [7]: [channel#30, sum#121, isEmpty#122, sum#123, isEmpty#124, sum#125, isEmpty#126] +Arguments: hashpartitioning(channel#30, 5), ENSURE_REQUIREMENTS, [plan_id=13] (88) HashAggregate [codegen id : 49] -Input [7]: [channel#34, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] -Keys [1]: [channel#34] -Functions [3]: [sum(sales#124), sum(returns#125), sum(profit#126)] -Aggregate Attributes [3]: [sum(sales#124)#140, sum(returns#125)#141, sum(profit#126)#142] -Results [5]: [channel#34, null AS id#143, sum(sales#124)#140 AS sales#144, sum(returns#125)#141 AS returns#145, sum(profit#126)#142 AS profit#146] +Input [7]: [channel#30, sum#121, isEmpty#122, sum#123, isEmpty#124, sum#125, isEmpty#126] +Keys [1]: [channel#30] +Functions [3]: [sum(sales#112), sum(returns#113), sum(profit#114)] +Aggregate Attributes [3]: [sum(sales#112)#127, sum(returns#113)#128, sum(profit#114)#129] +Results [5]: [channel#30, null AS id#130, sum(sales#112)#127 AS sales#131, sum(returns#113)#128 AS returns#132, sum(profit#114)#129 AS profit#133] (89) ReusedExchange [Reuses operator id: 82] -Output [8]: [channel#34, id#35, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116] +Output [8]: [channel#30, id#31, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105] (90) HashAggregate [codegen id : 73] -Input [8]: [channel#34, id#35, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116] -Keys [2]: [channel#34, id#35] -Functions [3]: [sum(sales#16), sum(returns#36), sum(profit#37)] -Aggregate Attributes [3]: [sum(sales#16)#118, sum(returns#36)#119, sum(profit#37)#120] -Results [3]: [sum(sales#16)#118 AS sales#124, sum(returns#36)#119 AS returns#125, sum(profit#37)#120 AS profit#126] +Input [8]: [channel#30, id#31, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105] +Keys [2]: [channel#30, id#31] +Functions [3]: [sum(sales#14), sum(returns#32), sum(profit#33)] +Aggregate Attributes [3]: [sum(sales#14)#106, sum(returns#32)#107, sum(profit#33)#108] +Results [3]: [sum(sales#14)#106 AS sales#112, sum(returns#32)#107 AS returns#113, sum(profit#33)#108 AS profit#114] (91) HashAggregate [codegen id : 73] -Input [3]: [sales#124, returns#125, profit#126] +Input [3]: [sales#112, returns#113, profit#114] Keys: [] -Functions [3]: [partial_sum(sales#124), partial_sum(returns#125), partial_sum(profit#126)] -Aggregate Attributes [6]: [sum#147, isEmpty#148, sum#149, isEmpty#150, sum#151, isEmpty#152] -Results [6]: [sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158] +Functions [3]: [partial_sum(sales#112), partial_sum(returns#113), partial_sum(profit#114)] +Aggregate Attributes [6]: [sum#134, isEmpty#135, sum#136, isEmpty#137, sum#138, isEmpty#139] +Results [6]: [sum#140, isEmpty#141, sum#142, isEmpty#143, sum#144, isEmpty#145] (92) Exchange -Input [6]: [sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#159] +Input [6]: [sum#140, isEmpty#141, sum#142, isEmpty#143, sum#144, isEmpty#145] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=14] (93) HashAggregate [codegen id : 74] -Input [6]: [sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158] +Input [6]: [sum#140, isEmpty#141, sum#142, isEmpty#143, sum#144, isEmpty#145] Keys: [] -Functions [3]: [sum(sales#124), sum(returns#125), sum(profit#126)] -Aggregate Attributes [3]: [sum(sales#124)#160, sum(returns#125)#161, sum(profit#126)#162] -Results [5]: [null AS channel#163, null AS id#164, sum(sales#124)#160 AS sales#165, sum(returns#125)#161 AS returns#166, sum(profit#126)#162 AS profit#167] +Functions [3]: [sum(sales#112), sum(returns#113), sum(profit#114)] +Aggregate Attributes [3]: [sum(sales#112)#146, sum(returns#113)#147, sum(profit#114)#148] +Results [5]: [null AS channel#149, null AS id#150, sum(sales#112)#146 AS sales#151, sum(returns#113)#147 AS returns#152, sum(profit#114)#148 AS profit#153] (94) Union (95) HashAggregate [codegen id : 75] -Input [5]: [channel#34, id#35, sales#121, returns#122, profit#123] -Keys [5]: [channel#34, id#35, sales#121, returns#122, profit#123] +Input [5]: [channel#30, id#31, sales#109, returns#110, profit#111] +Keys [5]: [channel#30, id#31, sales#109, returns#110, profit#111] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#34, id#35, sales#121, returns#122, profit#123] +Results [5]: [channel#30, id#31, sales#109, returns#110, profit#111] (96) Exchange -Input [5]: [channel#34, id#35, sales#121, returns#122, profit#123] -Arguments: hashpartitioning(channel#34, id#35, sales#121, returns#122, profit#123, 5), ENSURE_REQUIREMENTS, [id=#168] +Input [5]: [channel#30, id#31, sales#109, returns#110, profit#111] +Arguments: hashpartitioning(channel#30, id#31, sales#109, returns#110, profit#111, 5), ENSURE_REQUIREMENTS, [plan_id=15] (97) HashAggregate [codegen id : 76] -Input [5]: [channel#34, id#35, sales#121, returns#122, profit#123] -Keys [5]: [channel#34, id#35, sales#121, returns#122, profit#123] +Input [5]: [channel#30, id#31, sales#109, returns#110, profit#111] +Keys [5]: [channel#30, id#31, sales#109, returns#110, profit#111] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#34, id#35, sales#121, returns#122, profit#123] +Results [5]: [channel#30, id#31, sales#109, returns#110, profit#111] (98) TakeOrderedAndProject -Input [5]: [channel#34, id#35, sales#121, returns#122, profit#123] -Arguments: 100, [channel#34 ASC NULLS FIRST, id#35 ASC NULLS FIRST], [channel#34, id#35, sales#121, returns#122, profit#123] +Input [5]: [channel#30, id#31, sales#109, returns#110, profit#111] +Arguments: 100, [channel#30 ASC NULLS FIRST, id#31 ASC NULLS FIRST], [channel#30, id#31, sales#109, returns#110, profit#111] ===== Subqueries ===== @@ -585,35 +585,35 @@ BroadcastExchange (103) (99) Scan parquet default.date_dim -Output [2]: [d_date_sk#6, d_date#169] +Output [2]: [d_date_sk#6, d_date#154] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1998-08-04), LessThanOrEqual(d_date,1998-09-03), IsNotNull(d_date_sk)] ReadSchema: struct (100) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#6, d_date#169] +Input [2]: [d_date_sk#6, d_date#154] (101) Filter [codegen id : 1] -Input [2]: [d_date_sk#6, d_date#169] -Condition : (((isnotnull(d_date#169) AND (d_date#169 >= 1998-08-04)) AND (d_date#169 <= 1998-09-03)) AND isnotnull(d_date_sk#6)) +Input [2]: [d_date_sk#6, d_date#154] +Condition : (((isnotnull(d_date#154) AND (d_date#154 >= 1998-08-04)) AND (d_date#154 <= 1998-09-03)) AND isnotnull(d_date_sk#6)) (102) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [2]: [d_date_sk#6, d_date#169] +Input [2]: [d_date_sk#6, d_date#154] (103) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#170] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=16] -Subquery:2 Hosting operator id = 16 Hosting Expression = sr_returned_date_sk#21 IN dynamicpruning#5 +Subquery:2 Hosting operator id = 16 Hosting Expression = sr_returned_date_sk#19 IN dynamicpruning#5 -Subquery:3 Hosting operator id = 31 Hosting Expression = cs_sold_date_sk#41 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 31 Hosting Expression = cs_sold_date_sk#37 IN dynamicpruning#5 -Subquery:4 Hosting operator id = 39 Hosting Expression = cr_returned_date_sk#54 IN dynamicpruning#5 +Subquery:4 Hosting operator id = 39 Hosting Expression = cr_returned_date_sk#49 IN dynamicpruning#5 -Subquery:5 Hosting operator id = 50 Hosting Expression = ws_sold_date_sk#72 IN dynamicpruning#5 +Subquery:5 Hosting operator id = 50 Hosting Expression = ws_sold_date_sk#65 IN dynamicpruning#5 -Subquery:6 Hosting operator id = 65 Hosting Expression = wr_returned_date_sk#88 IN dynamicpruning#5 +Subquery:6 Hosting operator id = 65 Hosting Expression = wr_returned_date_sk#79 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q77a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q77a/explain.txt index 815eabe2fe0e8..d124ed40a3a59 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q77a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q77a/explain.txt @@ -142,7 +142,7 @@ Condition : isnotnull(s_store_sk#7) (10) BroadcastExchange Input [1]: [s_store_sk#7] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_store_sk#1] @@ -157,422 +157,422 @@ Input [4]: [ss_store_sk#1, ss_ext_sales_price#2, ss_net_profit#3, s_store_sk#7] Input [3]: [ss_ext_sales_price#2, ss_net_profit#3, s_store_sk#7] Keys [1]: [s_store_sk#7] Functions [2]: [partial_sum(UnscaledValue(ss_ext_sales_price#2)), partial_sum(UnscaledValue(ss_net_profit#3))] -Aggregate Attributes [2]: [sum#9, sum#10] -Results [3]: [s_store_sk#7, sum#11, sum#12] +Aggregate Attributes [2]: [sum#8, sum#9] +Results [3]: [s_store_sk#7, sum#10, sum#11] (14) Exchange -Input [3]: [s_store_sk#7, sum#11, sum#12] -Arguments: hashpartitioning(s_store_sk#7, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [3]: [s_store_sk#7, sum#10, sum#11] +Arguments: hashpartitioning(s_store_sk#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 8] -Input [3]: [s_store_sk#7, sum#11, sum#12] +Input [3]: [s_store_sk#7, sum#10, sum#11] Keys [1]: [s_store_sk#7] Functions [2]: [sum(UnscaledValue(ss_ext_sales_price#2)), sum(UnscaledValue(ss_net_profit#3))] -Aggregate Attributes [2]: [sum(UnscaledValue(ss_ext_sales_price#2))#14, sum(UnscaledValue(ss_net_profit#3))#15] -Results [3]: [s_store_sk#7, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS sales#16, MakeDecimal(sum(UnscaledValue(ss_net_profit#3))#15,17,2) AS profit#17] +Aggregate Attributes [2]: [sum(UnscaledValue(ss_ext_sales_price#2))#12, sum(UnscaledValue(ss_net_profit#3))#13] +Results [3]: [s_store_sk#7, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#12,17,2) AS sales#14, MakeDecimal(sum(UnscaledValue(ss_net_profit#3))#13,17,2) AS profit#15] (16) Scan parquet default.store_returns -Output [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21] +Output [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(sr_returned_date_sk#21), dynamicpruningexpression(sr_returned_date_sk#21 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(sr_returned_date_sk#19), dynamicpruningexpression(sr_returned_date_sk#19 IN dynamicpruning#5)] PushedFilters: [IsNotNull(sr_store_sk)] ReadSchema: struct (17) ColumnarToRow [codegen id : 6] -Input [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21] +Input [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19] (18) Filter [codegen id : 6] -Input [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21] -Condition : isnotnull(sr_store_sk#18) +Input [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19] +Condition : isnotnull(sr_store_sk#16) (19) ReusedExchange [Reuses operator id: 103] -Output [1]: [d_date_sk#22] +Output [1]: [d_date_sk#20] (20) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [sr_returned_date_sk#21] -Right keys [1]: [d_date_sk#22] +Left keys [1]: [sr_returned_date_sk#19] +Right keys [1]: [d_date_sk#20] Join condition: None (21) Project [codegen id : 6] -Output [3]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20] -Input [5]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, sr_returned_date_sk#21, d_date_sk#22] +Output [3]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18] +Input [5]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, sr_returned_date_sk#19, d_date_sk#20] (22) ReusedExchange [Reuses operator id: 10] -Output [1]: [s_store_sk#23] +Output [1]: [s_store_sk#21] (23) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [sr_store_sk#18] -Right keys [1]: [s_store_sk#23] +Left keys [1]: [sr_store_sk#16] +Right keys [1]: [s_store_sk#21] Join condition: None (24) Project [codegen id : 6] -Output [3]: [sr_return_amt#19, sr_net_loss#20, s_store_sk#23] -Input [4]: [sr_store_sk#18, sr_return_amt#19, sr_net_loss#20, s_store_sk#23] +Output [3]: [sr_return_amt#17, sr_net_loss#18, s_store_sk#21] +Input [4]: [sr_store_sk#16, sr_return_amt#17, sr_net_loss#18, s_store_sk#21] (25) HashAggregate [codegen id : 6] -Input [3]: [sr_return_amt#19, sr_net_loss#20, s_store_sk#23] -Keys [1]: [s_store_sk#23] -Functions [2]: [partial_sum(UnscaledValue(sr_return_amt#19)), partial_sum(UnscaledValue(sr_net_loss#20))] -Aggregate Attributes [2]: [sum#24, sum#25] -Results [3]: [s_store_sk#23, sum#26, sum#27] +Input [3]: [sr_return_amt#17, sr_net_loss#18, s_store_sk#21] +Keys [1]: [s_store_sk#21] +Functions [2]: [partial_sum(UnscaledValue(sr_return_amt#17)), partial_sum(UnscaledValue(sr_net_loss#18))] +Aggregate Attributes [2]: [sum#22, sum#23] +Results [3]: [s_store_sk#21, sum#24, sum#25] (26) Exchange -Input [3]: [s_store_sk#23, sum#26, sum#27] -Arguments: hashpartitioning(s_store_sk#23, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [3]: [s_store_sk#21, sum#24, sum#25] +Arguments: hashpartitioning(s_store_sk#21, 5), ENSURE_REQUIREMENTS, [plan_id=3] (27) HashAggregate [codegen id : 7] -Input [3]: [s_store_sk#23, sum#26, sum#27] -Keys [1]: [s_store_sk#23] -Functions [2]: [sum(UnscaledValue(sr_return_amt#19)), sum(UnscaledValue(sr_net_loss#20))] -Aggregate Attributes [2]: [sum(UnscaledValue(sr_return_amt#19))#29, sum(UnscaledValue(sr_net_loss#20))#30] -Results [3]: [s_store_sk#23, MakeDecimal(sum(UnscaledValue(sr_return_amt#19))#29,17,2) AS returns#31, MakeDecimal(sum(UnscaledValue(sr_net_loss#20))#30,17,2) AS profit_loss#32] +Input [3]: [s_store_sk#21, sum#24, sum#25] +Keys [1]: [s_store_sk#21] +Functions [2]: [sum(UnscaledValue(sr_return_amt#17)), sum(UnscaledValue(sr_net_loss#18))] +Aggregate Attributes [2]: [sum(UnscaledValue(sr_return_amt#17))#26, sum(UnscaledValue(sr_net_loss#18))#27] +Results [3]: [s_store_sk#21, MakeDecimal(sum(UnscaledValue(sr_return_amt#17))#26,17,2) AS returns#28, MakeDecimal(sum(UnscaledValue(sr_net_loss#18))#27,17,2) AS profit_loss#29] (28) BroadcastExchange -Input [3]: [s_store_sk#23, returns#31, profit_loss#32] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#33] +Input [3]: [s_store_sk#21, returns#28, profit_loss#29] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (29) BroadcastHashJoin [codegen id : 8] Left keys [1]: [s_store_sk#7] -Right keys [1]: [s_store_sk#23] +Right keys [1]: [s_store_sk#21] Join condition: None (30) Project [codegen id : 8] -Output [5]: [store channel AS channel#34, s_store_sk#7 AS id#35, sales#16, coalesce(returns#31, 0.00) AS returns#36, CheckOverflow((promote_precision(cast(profit#17 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#32, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#37] -Input [6]: [s_store_sk#7, sales#16, profit#17, s_store_sk#23, returns#31, profit_loss#32] +Output [5]: [store channel AS channel#30, s_store_sk#7 AS id#31, sales#14, coalesce(returns#28, 0.00) AS returns#32, CheckOverflow((promote_precision(cast(profit#15 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#29, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#33] +Input [6]: [s_store_sk#7, sales#14, profit#15, s_store_sk#21, returns#28, profit_loss#29] (31) Scan parquet default.catalog_sales -Output [4]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40, cs_sold_date_sk#41] +Output [4]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36, cs_sold_date_sk#37] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#41), dynamicpruningexpression(cs_sold_date_sk#41 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cs_sold_date_sk#37), dynamicpruningexpression(cs_sold_date_sk#37 IN dynamicpruning#5)] ReadSchema: struct (32) ColumnarToRow [codegen id : 10] -Input [4]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40, cs_sold_date_sk#41] +Input [4]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36, cs_sold_date_sk#37] (33) ReusedExchange [Reuses operator id: 103] -Output [1]: [d_date_sk#42] +Output [1]: [d_date_sk#38] (34) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [cs_sold_date_sk#41] -Right keys [1]: [d_date_sk#42] +Left keys [1]: [cs_sold_date_sk#37] +Right keys [1]: [d_date_sk#38] Join condition: None (35) Project [codegen id : 10] -Output [3]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40] -Input [5]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40, cs_sold_date_sk#41, d_date_sk#42] +Output [3]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36] +Input [5]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36, cs_sold_date_sk#37, d_date_sk#38] (36) HashAggregate [codegen id : 10] -Input [3]: [cs_call_center_sk#38, cs_ext_sales_price#39, cs_net_profit#40] -Keys [1]: [cs_call_center_sk#38] -Functions [2]: [partial_sum(UnscaledValue(cs_ext_sales_price#39)), partial_sum(UnscaledValue(cs_net_profit#40))] -Aggregate Attributes [2]: [sum#43, sum#44] -Results [3]: [cs_call_center_sk#38, sum#45, sum#46] +Input [3]: [cs_call_center_sk#34, cs_ext_sales_price#35, cs_net_profit#36] +Keys [1]: [cs_call_center_sk#34] +Functions [2]: [partial_sum(UnscaledValue(cs_ext_sales_price#35)), partial_sum(UnscaledValue(cs_net_profit#36))] +Aggregate Attributes [2]: [sum#39, sum#40] +Results [3]: [cs_call_center_sk#34, sum#41, sum#42] (37) Exchange -Input [3]: [cs_call_center_sk#38, sum#45, sum#46] -Arguments: hashpartitioning(cs_call_center_sk#38, 5), ENSURE_REQUIREMENTS, [id=#47] +Input [3]: [cs_call_center_sk#34, sum#41, sum#42] +Arguments: hashpartitioning(cs_call_center_sk#34, 5), ENSURE_REQUIREMENTS, [plan_id=5] (38) HashAggregate [codegen id : 11] -Input [3]: [cs_call_center_sk#38, sum#45, sum#46] -Keys [1]: [cs_call_center_sk#38] -Functions [2]: [sum(UnscaledValue(cs_ext_sales_price#39)), sum(UnscaledValue(cs_net_profit#40))] -Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_sales_price#39))#48, sum(UnscaledValue(cs_net_profit#40))#49] -Results [3]: [cs_call_center_sk#38, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#39))#48,17,2) AS sales#50, MakeDecimal(sum(UnscaledValue(cs_net_profit#40))#49,17,2) AS profit#51] +Input [3]: [cs_call_center_sk#34, sum#41, sum#42] +Keys [1]: [cs_call_center_sk#34] +Functions [2]: [sum(UnscaledValue(cs_ext_sales_price#35)), sum(UnscaledValue(cs_net_profit#36))] +Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_sales_price#35))#43, sum(UnscaledValue(cs_net_profit#36))#44] +Results [3]: [cs_call_center_sk#34, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#35))#43,17,2) AS sales#45, MakeDecimal(sum(UnscaledValue(cs_net_profit#36))#44,17,2) AS profit#46] (39) BroadcastExchange -Input [3]: [cs_call_center_sk#38, sales#50, profit#51] -Arguments: IdentityBroadcastMode, [id=#52] +Input [3]: [cs_call_center_sk#34, sales#45, profit#46] +Arguments: IdentityBroadcastMode, [plan_id=6] (40) Scan parquet default.catalog_returns -Output [3]: [cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] +Output [3]: [cr_return_amount#47, cr_net_loss#48, cr_returned_date_sk#49] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cr_returned_date_sk#55), dynamicpruningexpression(cr_returned_date_sk#55 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(cr_returned_date_sk#49), dynamicpruningexpression(cr_returned_date_sk#49 IN dynamicpruning#5)] ReadSchema: struct (41) ColumnarToRow [codegen id : 13] -Input [3]: [cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55] +Input [3]: [cr_return_amount#47, cr_net_loss#48, cr_returned_date_sk#49] (42) ReusedExchange [Reuses operator id: 103] -Output [1]: [d_date_sk#56] +Output [1]: [d_date_sk#50] (43) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [cr_returned_date_sk#55] -Right keys [1]: [d_date_sk#56] +Left keys [1]: [cr_returned_date_sk#49] +Right keys [1]: [d_date_sk#50] Join condition: None (44) Project [codegen id : 13] -Output [2]: [cr_return_amount#53, cr_net_loss#54] -Input [4]: [cr_return_amount#53, cr_net_loss#54, cr_returned_date_sk#55, d_date_sk#56] +Output [2]: [cr_return_amount#47, cr_net_loss#48] +Input [4]: [cr_return_amount#47, cr_net_loss#48, cr_returned_date_sk#49, d_date_sk#50] (45) HashAggregate [codegen id : 13] -Input [2]: [cr_return_amount#53, cr_net_loss#54] +Input [2]: [cr_return_amount#47, cr_net_loss#48] Keys: [] -Functions [2]: [partial_sum(UnscaledValue(cr_return_amount#53)), partial_sum(UnscaledValue(cr_net_loss#54))] -Aggregate Attributes [2]: [sum#57, sum#58] -Results [2]: [sum#59, sum#60] +Functions [2]: [partial_sum(UnscaledValue(cr_return_amount#47)), partial_sum(UnscaledValue(cr_net_loss#48))] +Aggregate Attributes [2]: [sum#51, sum#52] +Results [2]: [sum#53, sum#54] (46) Exchange -Input [2]: [sum#59, sum#60] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#61] +Input [2]: [sum#53, sum#54] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=7] (47) HashAggregate -Input [2]: [sum#59, sum#60] +Input [2]: [sum#53, sum#54] Keys: [] -Functions [2]: [sum(UnscaledValue(cr_return_amount#53)), sum(UnscaledValue(cr_net_loss#54))] -Aggregate Attributes [2]: [sum(UnscaledValue(cr_return_amount#53))#62, sum(UnscaledValue(cr_net_loss#54))#63] -Results [2]: [MakeDecimal(sum(UnscaledValue(cr_return_amount#53))#62,17,2) AS returns#64, MakeDecimal(sum(UnscaledValue(cr_net_loss#54))#63,17,2) AS profit_loss#65] +Functions [2]: [sum(UnscaledValue(cr_return_amount#47)), sum(UnscaledValue(cr_net_loss#48))] +Aggregate Attributes [2]: [sum(UnscaledValue(cr_return_amount#47))#55, sum(UnscaledValue(cr_net_loss#48))#56] +Results [2]: [MakeDecimal(sum(UnscaledValue(cr_return_amount#47))#55,17,2) AS returns#57, MakeDecimal(sum(UnscaledValue(cr_net_loss#48))#56,17,2) AS profit_loss#58] (48) BroadcastNestedLoopJoin [codegen id : 14] Join condition: None (49) Project [codegen id : 14] -Output [5]: [catalog channel AS channel#66, cs_call_center_sk#38 AS id#67, sales#50, returns#64, CheckOverflow((promote_precision(cast(profit#51 as decimal(18,2))) - promote_precision(cast(profit_loss#65 as decimal(18,2)))), DecimalType(18,2)) AS profit#68] -Input [5]: [cs_call_center_sk#38, sales#50, profit#51, returns#64, profit_loss#65] +Output [5]: [catalog channel AS channel#59, cs_call_center_sk#34 AS id#60, sales#45, returns#57, CheckOverflow((promote_precision(cast(profit#46 as decimal(18,2))) - promote_precision(cast(profit_loss#58 as decimal(18,2)))), DecimalType(18,2)) AS profit#61] +Input [5]: [cs_call_center_sk#34, sales#45, profit#46, returns#57, profit_loss#58] (50) Scan parquet default.web_sales -Output [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72] +Output [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#72), dynamicpruningexpression(ws_sold_date_sk#72 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(ws_sold_date_sk#65), dynamicpruningexpression(ws_sold_date_sk#65 IN dynamicpruning#5)] PushedFilters: [IsNotNull(ws_web_page_sk)] ReadSchema: struct (51) ColumnarToRow [codegen id : 17] -Input [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72] +Input [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65] (52) Filter [codegen id : 17] -Input [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72] -Condition : isnotnull(ws_web_page_sk#69) +Input [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65] +Condition : isnotnull(ws_web_page_sk#62) (53) ReusedExchange [Reuses operator id: 103] -Output [1]: [d_date_sk#73] +Output [1]: [d_date_sk#66] (54) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_sold_date_sk#72] -Right keys [1]: [d_date_sk#73] +Left keys [1]: [ws_sold_date_sk#65] +Right keys [1]: [d_date_sk#66] Join condition: None (55) Project [codegen id : 17] -Output [3]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71] -Input [5]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, ws_sold_date_sk#72, d_date_sk#73] +Output [3]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64] +Input [5]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, ws_sold_date_sk#65, d_date_sk#66] (56) Scan parquet default.web_page -Output [1]: [wp_web_page_sk#74] +Output [1]: [wp_web_page_sk#67] Batched: true Location [not included in comparison]/{warehouse_dir}/web_page] PushedFilters: [IsNotNull(wp_web_page_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 16] -Input [1]: [wp_web_page_sk#74] +Input [1]: [wp_web_page_sk#67] (58) Filter [codegen id : 16] -Input [1]: [wp_web_page_sk#74] -Condition : isnotnull(wp_web_page_sk#74) +Input [1]: [wp_web_page_sk#67] +Condition : isnotnull(wp_web_page_sk#67) (59) BroadcastExchange -Input [1]: [wp_web_page_sk#74] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#75] +Input [1]: [wp_web_page_sk#67] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8] (60) BroadcastHashJoin [codegen id : 17] -Left keys [1]: [ws_web_page_sk#69] -Right keys [1]: [wp_web_page_sk#74] +Left keys [1]: [ws_web_page_sk#62] +Right keys [1]: [wp_web_page_sk#67] Join condition: None (61) Project [codegen id : 17] -Output [3]: [ws_ext_sales_price#70, ws_net_profit#71, wp_web_page_sk#74] -Input [4]: [ws_web_page_sk#69, ws_ext_sales_price#70, ws_net_profit#71, wp_web_page_sk#74] +Output [3]: [ws_ext_sales_price#63, ws_net_profit#64, wp_web_page_sk#67] +Input [4]: [ws_web_page_sk#62, ws_ext_sales_price#63, ws_net_profit#64, wp_web_page_sk#67] (62) HashAggregate [codegen id : 17] -Input [3]: [ws_ext_sales_price#70, ws_net_profit#71, wp_web_page_sk#74] -Keys [1]: [wp_web_page_sk#74] -Functions [2]: [partial_sum(UnscaledValue(ws_ext_sales_price#70)), partial_sum(UnscaledValue(ws_net_profit#71))] -Aggregate Attributes [2]: [sum#76, sum#77] -Results [3]: [wp_web_page_sk#74, sum#78, sum#79] +Input [3]: [ws_ext_sales_price#63, ws_net_profit#64, wp_web_page_sk#67] +Keys [1]: [wp_web_page_sk#67] +Functions [2]: [partial_sum(UnscaledValue(ws_ext_sales_price#63)), partial_sum(UnscaledValue(ws_net_profit#64))] +Aggregate Attributes [2]: [sum#68, sum#69] +Results [3]: [wp_web_page_sk#67, sum#70, sum#71] (63) Exchange -Input [3]: [wp_web_page_sk#74, sum#78, sum#79] -Arguments: hashpartitioning(wp_web_page_sk#74, 5), ENSURE_REQUIREMENTS, [id=#80] +Input [3]: [wp_web_page_sk#67, sum#70, sum#71] +Arguments: hashpartitioning(wp_web_page_sk#67, 5), ENSURE_REQUIREMENTS, [plan_id=9] (64) HashAggregate [codegen id : 22] -Input [3]: [wp_web_page_sk#74, sum#78, sum#79] -Keys [1]: [wp_web_page_sk#74] -Functions [2]: [sum(UnscaledValue(ws_ext_sales_price#70)), sum(UnscaledValue(ws_net_profit#71))] -Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_sales_price#70))#81, sum(UnscaledValue(ws_net_profit#71))#82] -Results [3]: [wp_web_page_sk#74, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#70))#81,17,2) AS sales#83, MakeDecimal(sum(UnscaledValue(ws_net_profit#71))#82,17,2) AS profit#84] +Input [3]: [wp_web_page_sk#67, sum#70, sum#71] +Keys [1]: [wp_web_page_sk#67] +Functions [2]: [sum(UnscaledValue(ws_ext_sales_price#63)), sum(UnscaledValue(ws_net_profit#64))] +Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_sales_price#63))#72, sum(UnscaledValue(ws_net_profit#64))#73] +Results [3]: [wp_web_page_sk#67, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#63))#72,17,2) AS sales#74, MakeDecimal(sum(UnscaledValue(ws_net_profit#64))#73,17,2) AS profit#75] (65) Scan parquet default.web_returns -Output [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88] +Output [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(wr_returned_date_sk#88), dynamicpruningexpression(wr_returned_date_sk#88 IN dynamicpruning#5)] +PartitionFilters: [isnotnull(wr_returned_date_sk#79), dynamicpruningexpression(wr_returned_date_sk#79 IN dynamicpruning#5)] PushedFilters: [IsNotNull(wr_web_page_sk)] ReadSchema: struct (66) ColumnarToRow [codegen id : 20] -Input [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88] +Input [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79] (67) Filter [codegen id : 20] -Input [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88] -Condition : isnotnull(wr_web_page_sk#85) +Input [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79] +Condition : isnotnull(wr_web_page_sk#76) (68) ReusedExchange [Reuses operator id: 103] -Output [1]: [d_date_sk#89] +Output [1]: [d_date_sk#80] (69) BroadcastHashJoin [codegen id : 20] -Left keys [1]: [wr_returned_date_sk#88] -Right keys [1]: [d_date_sk#89] +Left keys [1]: [wr_returned_date_sk#79] +Right keys [1]: [d_date_sk#80] Join condition: None (70) Project [codegen id : 20] -Output [3]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87] -Input [5]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wr_returned_date_sk#88, d_date_sk#89] +Output [3]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78] +Input [5]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wr_returned_date_sk#79, d_date_sk#80] (71) ReusedExchange [Reuses operator id: 59] -Output [1]: [wp_web_page_sk#90] +Output [1]: [wp_web_page_sk#81] (72) BroadcastHashJoin [codegen id : 20] -Left keys [1]: [wr_web_page_sk#85] -Right keys [1]: [wp_web_page_sk#90] +Left keys [1]: [wr_web_page_sk#76] +Right keys [1]: [wp_web_page_sk#81] Join condition: None (73) Project [codegen id : 20] -Output [3]: [wr_return_amt#86, wr_net_loss#87, wp_web_page_sk#90] -Input [4]: [wr_web_page_sk#85, wr_return_amt#86, wr_net_loss#87, wp_web_page_sk#90] +Output [3]: [wr_return_amt#77, wr_net_loss#78, wp_web_page_sk#81] +Input [4]: [wr_web_page_sk#76, wr_return_amt#77, wr_net_loss#78, wp_web_page_sk#81] (74) HashAggregate [codegen id : 20] -Input [3]: [wr_return_amt#86, wr_net_loss#87, wp_web_page_sk#90] -Keys [1]: [wp_web_page_sk#90] -Functions [2]: [partial_sum(UnscaledValue(wr_return_amt#86)), partial_sum(UnscaledValue(wr_net_loss#87))] -Aggregate Attributes [2]: [sum#91, sum#92] -Results [3]: [wp_web_page_sk#90, sum#93, sum#94] +Input [3]: [wr_return_amt#77, wr_net_loss#78, wp_web_page_sk#81] +Keys [1]: [wp_web_page_sk#81] +Functions [2]: [partial_sum(UnscaledValue(wr_return_amt#77)), partial_sum(UnscaledValue(wr_net_loss#78))] +Aggregate Attributes [2]: [sum#82, sum#83] +Results [3]: [wp_web_page_sk#81, sum#84, sum#85] (75) Exchange -Input [3]: [wp_web_page_sk#90, sum#93, sum#94] -Arguments: hashpartitioning(wp_web_page_sk#90, 5), ENSURE_REQUIREMENTS, [id=#95] +Input [3]: [wp_web_page_sk#81, sum#84, sum#85] +Arguments: hashpartitioning(wp_web_page_sk#81, 5), ENSURE_REQUIREMENTS, [plan_id=10] (76) HashAggregate [codegen id : 21] -Input [3]: [wp_web_page_sk#90, sum#93, sum#94] -Keys [1]: [wp_web_page_sk#90] -Functions [2]: [sum(UnscaledValue(wr_return_amt#86)), sum(UnscaledValue(wr_net_loss#87))] -Aggregate Attributes [2]: [sum(UnscaledValue(wr_return_amt#86))#96, sum(UnscaledValue(wr_net_loss#87))#97] -Results [3]: [wp_web_page_sk#90, MakeDecimal(sum(UnscaledValue(wr_return_amt#86))#96,17,2) AS returns#98, MakeDecimal(sum(UnscaledValue(wr_net_loss#87))#97,17,2) AS profit_loss#99] +Input [3]: [wp_web_page_sk#81, sum#84, sum#85] +Keys [1]: [wp_web_page_sk#81] +Functions [2]: [sum(UnscaledValue(wr_return_amt#77)), sum(UnscaledValue(wr_net_loss#78))] +Aggregate Attributes [2]: [sum(UnscaledValue(wr_return_amt#77))#86, sum(UnscaledValue(wr_net_loss#78))#87] +Results [3]: [wp_web_page_sk#81, MakeDecimal(sum(UnscaledValue(wr_return_amt#77))#86,17,2) AS returns#88, MakeDecimal(sum(UnscaledValue(wr_net_loss#78))#87,17,2) AS profit_loss#89] (77) BroadcastExchange -Input [3]: [wp_web_page_sk#90, returns#98, profit_loss#99] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#100] +Input [3]: [wp_web_page_sk#81, returns#88, profit_loss#89] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11] (78) BroadcastHashJoin [codegen id : 22] -Left keys [1]: [wp_web_page_sk#74] -Right keys [1]: [wp_web_page_sk#90] +Left keys [1]: [wp_web_page_sk#67] +Right keys [1]: [wp_web_page_sk#81] Join condition: None (79) Project [codegen id : 22] -Output [5]: [web channel AS channel#101, wp_web_page_sk#74 AS id#102, sales#83, coalesce(returns#98, 0.00) AS returns#103, CheckOverflow((promote_precision(cast(profit#84 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#99, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#104] -Input [6]: [wp_web_page_sk#74, sales#83, profit#84, wp_web_page_sk#90, returns#98, profit_loss#99] +Output [5]: [web channel AS channel#90, wp_web_page_sk#67 AS id#91, sales#74, coalesce(returns#88, 0.00) AS returns#92, CheckOverflow((promote_precision(cast(profit#75 as decimal(18,2))) - promote_precision(cast(coalesce(profit_loss#89, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS profit#93] +Input [6]: [wp_web_page_sk#67, sales#74, profit#75, wp_web_page_sk#81, returns#88, profit_loss#89] (80) Union (81) HashAggregate [codegen id : 23] -Input [5]: [channel#34, id#35, sales#16, returns#36, profit#37] -Keys [2]: [channel#34, id#35] -Functions [3]: [partial_sum(sales#16), partial_sum(returns#36), partial_sum(profit#37)] -Aggregate Attributes [6]: [sum#105, isEmpty#106, sum#107, isEmpty#108, sum#109, isEmpty#110] -Results [8]: [channel#34, id#35, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116] +Input [5]: [channel#30, id#31, sales#14, returns#32, profit#33] +Keys [2]: [channel#30, id#31] +Functions [3]: [partial_sum(sales#14), partial_sum(returns#32), partial_sum(profit#33)] +Aggregate Attributes [6]: [sum#94, isEmpty#95, sum#96, isEmpty#97, sum#98, isEmpty#99] +Results [8]: [channel#30, id#31, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105] (82) Exchange -Input [8]: [channel#34, id#35, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116] -Arguments: hashpartitioning(channel#34, id#35, 5), ENSURE_REQUIREMENTS, [id=#117] +Input [8]: [channel#30, id#31, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105] +Arguments: hashpartitioning(channel#30, id#31, 5), ENSURE_REQUIREMENTS, [plan_id=12] (83) HashAggregate [codegen id : 24] -Input [8]: [channel#34, id#35, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116] -Keys [2]: [channel#34, id#35] -Functions [3]: [sum(sales#16), sum(returns#36), sum(profit#37)] -Aggregate Attributes [3]: [sum(sales#16)#118, sum(returns#36)#119, sum(profit#37)#120] -Results [5]: [channel#34, id#35, cast(sum(sales#16)#118 as decimal(37,2)) AS sales#121, cast(sum(returns#36)#119 as decimal(37,2)) AS returns#122, cast(sum(profit#37)#120 as decimal(38,2)) AS profit#123] +Input [8]: [channel#30, id#31, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105] +Keys [2]: [channel#30, id#31] +Functions [3]: [sum(sales#14), sum(returns#32), sum(profit#33)] +Aggregate Attributes [3]: [sum(sales#14)#106, sum(returns#32)#107, sum(profit#33)#108] +Results [5]: [channel#30, id#31, cast(sum(sales#14)#106 as decimal(37,2)) AS sales#109, cast(sum(returns#32)#107 as decimal(37,2)) AS returns#110, cast(sum(profit#33)#108 as decimal(38,2)) AS profit#111] (84) ReusedExchange [Reuses operator id: 82] -Output [8]: [channel#34, id#35, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116] +Output [8]: [channel#30, id#31, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105] (85) HashAggregate [codegen id : 48] -Input [8]: [channel#34, id#35, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116] -Keys [2]: [channel#34, id#35] -Functions [3]: [sum(sales#16), sum(returns#36), sum(profit#37)] -Aggregate Attributes [3]: [sum(sales#16)#118, sum(returns#36)#119, sum(profit#37)#120] -Results [4]: [channel#34, sum(sales#16)#118 AS sales#124, sum(returns#36)#119 AS returns#125, sum(profit#37)#120 AS profit#126] +Input [8]: [channel#30, id#31, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105] +Keys [2]: [channel#30, id#31] +Functions [3]: [sum(sales#14), sum(returns#32), sum(profit#33)] +Aggregate Attributes [3]: [sum(sales#14)#106, sum(returns#32)#107, sum(profit#33)#108] +Results [4]: [channel#30, sum(sales#14)#106 AS sales#112, sum(returns#32)#107 AS returns#113, sum(profit#33)#108 AS profit#114] (86) HashAggregate [codegen id : 48] -Input [4]: [channel#34, sales#124, returns#125, profit#126] -Keys [1]: [channel#34] -Functions [3]: [partial_sum(sales#124), partial_sum(returns#125), partial_sum(profit#126)] -Aggregate Attributes [6]: [sum#127, isEmpty#128, sum#129, isEmpty#130, sum#131, isEmpty#132] -Results [7]: [channel#34, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] +Input [4]: [channel#30, sales#112, returns#113, profit#114] +Keys [1]: [channel#30] +Functions [3]: [partial_sum(sales#112), partial_sum(returns#113), partial_sum(profit#114)] +Aggregate Attributes [6]: [sum#115, isEmpty#116, sum#117, isEmpty#118, sum#119, isEmpty#120] +Results [7]: [channel#30, sum#121, isEmpty#122, sum#123, isEmpty#124, sum#125, isEmpty#126] (87) Exchange -Input [7]: [channel#34, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] -Arguments: hashpartitioning(channel#34, 5), ENSURE_REQUIREMENTS, [id=#139] +Input [7]: [channel#30, sum#121, isEmpty#122, sum#123, isEmpty#124, sum#125, isEmpty#126] +Arguments: hashpartitioning(channel#30, 5), ENSURE_REQUIREMENTS, [plan_id=13] (88) HashAggregate [codegen id : 49] -Input [7]: [channel#34, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] -Keys [1]: [channel#34] -Functions [3]: [sum(sales#124), sum(returns#125), sum(profit#126)] -Aggregate Attributes [3]: [sum(sales#124)#140, sum(returns#125)#141, sum(profit#126)#142] -Results [5]: [channel#34, null AS id#143, sum(sales#124)#140 AS sales#144, sum(returns#125)#141 AS returns#145, sum(profit#126)#142 AS profit#146] +Input [7]: [channel#30, sum#121, isEmpty#122, sum#123, isEmpty#124, sum#125, isEmpty#126] +Keys [1]: [channel#30] +Functions [3]: [sum(sales#112), sum(returns#113), sum(profit#114)] +Aggregate Attributes [3]: [sum(sales#112)#127, sum(returns#113)#128, sum(profit#114)#129] +Results [5]: [channel#30, null AS id#130, sum(sales#112)#127 AS sales#131, sum(returns#113)#128 AS returns#132, sum(profit#114)#129 AS profit#133] (89) ReusedExchange [Reuses operator id: 82] -Output [8]: [channel#34, id#35, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116] +Output [8]: [channel#30, id#31, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105] (90) HashAggregate [codegen id : 73] -Input [8]: [channel#34, id#35, sum#111, isEmpty#112, sum#113, isEmpty#114, sum#115, isEmpty#116] -Keys [2]: [channel#34, id#35] -Functions [3]: [sum(sales#16), sum(returns#36), sum(profit#37)] -Aggregate Attributes [3]: [sum(sales#16)#118, sum(returns#36)#119, sum(profit#37)#120] -Results [3]: [sum(sales#16)#118 AS sales#124, sum(returns#36)#119 AS returns#125, sum(profit#37)#120 AS profit#126] +Input [8]: [channel#30, id#31, sum#100, isEmpty#101, sum#102, isEmpty#103, sum#104, isEmpty#105] +Keys [2]: [channel#30, id#31] +Functions [3]: [sum(sales#14), sum(returns#32), sum(profit#33)] +Aggregate Attributes [3]: [sum(sales#14)#106, sum(returns#32)#107, sum(profit#33)#108] +Results [3]: [sum(sales#14)#106 AS sales#112, sum(returns#32)#107 AS returns#113, sum(profit#33)#108 AS profit#114] (91) HashAggregate [codegen id : 73] -Input [3]: [sales#124, returns#125, profit#126] +Input [3]: [sales#112, returns#113, profit#114] Keys: [] -Functions [3]: [partial_sum(sales#124), partial_sum(returns#125), partial_sum(profit#126)] -Aggregate Attributes [6]: [sum#147, isEmpty#148, sum#149, isEmpty#150, sum#151, isEmpty#152] -Results [6]: [sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158] +Functions [3]: [partial_sum(sales#112), partial_sum(returns#113), partial_sum(profit#114)] +Aggregate Attributes [6]: [sum#134, isEmpty#135, sum#136, isEmpty#137, sum#138, isEmpty#139] +Results [6]: [sum#140, isEmpty#141, sum#142, isEmpty#143, sum#144, isEmpty#145] (92) Exchange -Input [6]: [sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#159] +Input [6]: [sum#140, isEmpty#141, sum#142, isEmpty#143, sum#144, isEmpty#145] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=14] (93) HashAggregate [codegen id : 74] -Input [6]: [sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158] +Input [6]: [sum#140, isEmpty#141, sum#142, isEmpty#143, sum#144, isEmpty#145] Keys: [] -Functions [3]: [sum(sales#124), sum(returns#125), sum(profit#126)] -Aggregate Attributes [3]: [sum(sales#124)#160, sum(returns#125)#161, sum(profit#126)#162] -Results [5]: [null AS channel#163, null AS id#164, sum(sales#124)#160 AS sales#165, sum(returns#125)#161 AS returns#166, sum(profit#126)#162 AS profit#167] +Functions [3]: [sum(sales#112), sum(returns#113), sum(profit#114)] +Aggregate Attributes [3]: [sum(sales#112)#146, sum(returns#113)#147, sum(profit#114)#148] +Results [5]: [null AS channel#149, null AS id#150, sum(sales#112)#146 AS sales#151, sum(returns#113)#147 AS returns#152, sum(profit#114)#148 AS profit#153] (94) Union (95) HashAggregate [codegen id : 75] -Input [5]: [channel#34, id#35, sales#121, returns#122, profit#123] -Keys [5]: [channel#34, id#35, sales#121, returns#122, profit#123] +Input [5]: [channel#30, id#31, sales#109, returns#110, profit#111] +Keys [5]: [channel#30, id#31, sales#109, returns#110, profit#111] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#34, id#35, sales#121, returns#122, profit#123] +Results [5]: [channel#30, id#31, sales#109, returns#110, profit#111] (96) Exchange -Input [5]: [channel#34, id#35, sales#121, returns#122, profit#123] -Arguments: hashpartitioning(channel#34, id#35, sales#121, returns#122, profit#123, 5), ENSURE_REQUIREMENTS, [id=#168] +Input [5]: [channel#30, id#31, sales#109, returns#110, profit#111] +Arguments: hashpartitioning(channel#30, id#31, sales#109, returns#110, profit#111, 5), ENSURE_REQUIREMENTS, [plan_id=15] (97) HashAggregate [codegen id : 76] -Input [5]: [channel#34, id#35, sales#121, returns#122, profit#123] -Keys [5]: [channel#34, id#35, sales#121, returns#122, profit#123] +Input [5]: [channel#30, id#31, sales#109, returns#110, profit#111] +Keys [5]: [channel#30, id#31, sales#109, returns#110, profit#111] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#34, id#35, sales#121, returns#122, profit#123] +Results [5]: [channel#30, id#31, sales#109, returns#110, profit#111] (98) TakeOrderedAndProject -Input [5]: [channel#34, id#35, sales#121, returns#122, profit#123] -Arguments: 100, [channel#34 ASC NULLS FIRST, id#35 ASC NULLS FIRST], [channel#34, id#35, sales#121, returns#122, profit#123] +Input [5]: [channel#30, id#31, sales#109, returns#110, profit#111] +Arguments: 100, [channel#30 ASC NULLS FIRST, id#31 ASC NULLS FIRST], [channel#30, id#31, sales#109, returns#110, profit#111] ===== Subqueries ===== @@ -585,35 +585,35 @@ BroadcastExchange (103) (99) Scan parquet default.date_dim -Output [2]: [d_date_sk#6, d_date#169] +Output [2]: [d_date_sk#6, d_date#154] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1998-08-04), LessThanOrEqual(d_date,1998-09-03), IsNotNull(d_date_sk)] ReadSchema: struct (100) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#6, d_date#169] +Input [2]: [d_date_sk#6, d_date#154] (101) Filter [codegen id : 1] -Input [2]: [d_date_sk#6, d_date#169] -Condition : (((isnotnull(d_date#169) AND (d_date#169 >= 1998-08-04)) AND (d_date#169 <= 1998-09-03)) AND isnotnull(d_date_sk#6)) +Input [2]: [d_date_sk#6, d_date#154] +Condition : (((isnotnull(d_date#154) AND (d_date#154 >= 1998-08-04)) AND (d_date#154 <= 1998-09-03)) AND isnotnull(d_date_sk#6)) (102) Project [codegen id : 1] Output [1]: [d_date_sk#6] -Input [2]: [d_date_sk#6, d_date#169] +Input [2]: [d_date_sk#6, d_date#154] (103) BroadcastExchange Input [1]: [d_date_sk#6] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#170] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=16] -Subquery:2 Hosting operator id = 16 Hosting Expression = sr_returned_date_sk#21 IN dynamicpruning#5 +Subquery:2 Hosting operator id = 16 Hosting Expression = sr_returned_date_sk#19 IN dynamicpruning#5 -Subquery:3 Hosting operator id = 31 Hosting Expression = cs_sold_date_sk#41 IN dynamicpruning#5 +Subquery:3 Hosting operator id = 31 Hosting Expression = cs_sold_date_sk#37 IN dynamicpruning#5 -Subquery:4 Hosting operator id = 40 Hosting Expression = cr_returned_date_sk#55 IN dynamicpruning#5 +Subquery:4 Hosting operator id = 40 Hosting Expression = cr_returned_date_sk#49 IN dynamicpruning#5 -Subquery:5 Hosting operator id = 50 Hosting Expression = ws_sold_date_sk#72 IN dynamicpruning#5 +Subquery:5 Hosting operator id = 50 Hosting Expression = ws_sold_date_sk#65 IN dynamicpruning#5 -Subquery:6 Hosting operator id = 65 Hosting Expression = wr_returned_date_sk#88 IN dynamicpruning#5 +Subquery:6 Hosting operator id = 65 Hosting Expression = wr_returned_date_sk#79 IN dynamicpruning#5 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q78.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q78.sf100/explain.txt index 133d5272ec111..1be531c232011 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q78.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q78.sf100/explain.txt @@ -88,306 +88,306 @@ Condition : (isnotnull(ss_item_sk#1) AND isnotnull(ss_customer_sk#2)) (4) Exchange Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7] -Arguments: hashpartitioning(ss_ticket_number#3, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ss_ticket_number#3, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7] Arguments: [ss_ticket_number#3 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_returns -Output [3]: [sr_item_sk#10, sr_ticket_number#11, sr_returned_date_sk#12] +Output [3]: [sr_item_sk#9, sr_ticket_number#10, sr_returned_date_sk#11] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [3]: [sr_item_sk#10, sr_ticket_number#11, sr_returned_date_sk#12] +Input [3]: [sr_item_sk#9, sr_ticket_number#10, sr_returned_date_sk#11] (8) Filter [codegen id : 3] -Input [3]: [sr_item_sk#10, sr_ticket_number#11, sr_returned_date_sk#12] -Condition : (isnotnull(sr_ticket_number#11) AND isnotnull(sr_item_sk#10)) +Input [3]: [sr_item_sk#9, sr_ticket_number#10, sr_returned_date_sk#11] +Condition : (isnotnull(sr_ticket_number#10) AND isnotnull(sr_item_sk#9)) (9) Project [codegen id : 3] -Output [2]: [sr_item_sk#10, sr_ticket_number#11] -Input [3]: [sr_item_sk#10, sr_ticket_number#11, sr_returned_date_sk#12] +Output [2]: [sr_item_sk#9, sr_ticket_number#10] +Input [3]: [sr_item_sk#9, sr_ticket_number#10, sr_returned_date_sk#11] (10) Exchange -Input [2]: [sr_item_sk#10, sr_ticket_number#11] -Arguments: hashpartitioning(sr_ticket_number#11, sr_item_sk#10, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [2]: [sr_item_sk#9, sr_ticket_number#10] +Arguments: hashpartitioning(sr_ticket_number#10, sr_item_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [2]: [sr_item_sk#10, sr_ticket_number#11] -Arguments: [sr_ticket_number#11 ASC NULLS FIRST, sr_item_sk#10 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#9, sr_ticket_number#10] +Arguments: [sr_ticket_number#10 ASC NULLS FIRST, sr_item_sk#9 ASC NULLS FIRST], false, 0 (12) SortMergeJoin [codegen id : 6] Left keys [2]: [ss_ticket_number#3, ss_item_sk#1] -Right keys [2]: [sr_ticket_number#11, sr_item_sk#10] +Right keys [2]: [sr_ticket_number#10, sr_item_sk#9] Join condition: None (13) Filter [codegen id : 6] -Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7, sr_item_sk#10, sr_ticket_number#11] -Condition : isnull(sr_ticket_number#11) +Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7, sr_item_sk#9, sr_ticket_number#10] +Condition : isnull(sr_ticket_number#10) (14) Project [codegen id : 6] Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7] -Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7, sr_item_sk#10, sr_ticket_number#11] +Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7, sr_item_sk#9, sr_ticket_number#10] (15) ReusedExchange [Reuses operator id: 74] -Output [2]: [d_date_sk#14, d_year#15] +Output [2]: [d_date_sk#12, d_year#13] (16) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_sold_date_sk#7] -Right keys [1]: [d_date_sk#14] +Right keys [1]: [d_date_sk#12] Join condition: None (17) Project [codegen id : 6] -Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, d_year#15] -Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7, d_date_sk#14, d_year#15] +Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, d_year#13] +Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7, d_date_sk#12, d_year#13] (18) HashAggregate [codegen id : 6] -Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, d_year#15] -Keys [3]: [d_year#15, ss_item_sk#1, ss_customer_sk#2] +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, d_year#13] +Keys [3]: [d_year#13, ss_item_sk#1, ss_customer_sk#2] Functions [3]: [partial_sum(ss_quantity#4), partial_sum(UnscaledValue(ss_wholesale_cost#5)), partial_sum(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [3]: [sum#16, sum#17, sum#18] -Results [6]: [d_year#15, ss_item_sk#1, ss_customer_sk#2, sum#19, sum#20, sum#21] +Aggregate Attributes [3]: [sum#14, sum#15, sum#16] +Results [6]: [d_year#13, ss_item_sk#1, ss_customer_sk#2, sum#17, sum#18, sum#19] (19) Exchange -Input [6]: [d_year#15, ss_item_sk#1, ss_customer_sk#2, sum#19, sum#20, sum#21] -Arguments: hashpartitioning(d_year#15, ss_item_sk#1, ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [6]: [d_year#13, ss_item_sk#1, ss_customer_sk#2, sum#17, sum#18, sum#19] +Arguments: hashpartitioning(d_year#13, ss_item_sk#1, ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 7] -Input [6]: [d_year#15, ss_item_sk#1, ss_customer_sk#2, sum#19, sum#20, sum#21] -Keys [3]: [d_year#15, ss_item_sk#1, ss_customer_sk#2] +Input [6]: [d_year#13, ss_item_sk#1, ss_customer_sk#2, sum#17, sum#18, sum#19] +Keys [3]: [d_year#13, ss_item_sk#1, ss_customer_sk#2] Functions [3]: [sum(ss_quantity#4), sum(UnscaledValue(ss_wholesale_cost#5)), sum(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [3]: [sum(ss_quantity#4)#23, sum(UnscaledValue(ss_wholesale_cost#5))#24, sum(UnscaledValue(ss_sales_price#6))#25] -Results [6]: [d_year#15 AS ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2, sum(ss_quantity#4)#23 AS ss_qty#27, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#5))#24,17,2) AS ss_wc#28, MakeDecimal(sum(UnscaledValue(ss_sales_price#6))#25,17,2) AS ss_sp#29] +Aggregate Attributes [3]: [sum(ss_quantity#4)#20, sum(UnscaledValue(ss_wholesale_cost#5))#21, sum(UnscaledValue(ss_sales_price#6))#22] +Results [6]: [d_year#13 AS ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2, sum(ss_quantity#4)#20 AS ss_qty#24, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#5))#21,17,2) AS ss_wc#25, MakeDecimal(sum(UnscaledValue(ss_sales_price#6))#22,17,2) AS ss_sp#26] (21) Sort [codegen id : 7] -Input [6]: [ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2, ss_qty#27, ss_wc#28, ss_sp#29] -Arguments: [ss_sold_year#26 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST, ss_customer_sk#2 ASC NULLS FIRST], false, 0 +Input [6]: [ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2, ss_qty#24, ss_wc#25, ss_sp#26] +Arguments: [ss_sold_year#23 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST, ss_customer_sk#2 ASC NULLS FIRST], false, 0 (22) Scan parquet default.web_sales -Output [7]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_order_number#32, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36] +Output [7]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_order_number#29, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#36), dynamicpruningexpression(ws_sold_date_sk#36 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ws_sold_date_sk#33), dynamicpruningexpression(ws_sold_date_sk#33 IN dynamicpruning#8)] PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 8] -Input [7]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_order_number#32, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36] +Input [7]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_order_number#29, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33] (24) Filter [codegen id : 8] -Input [7]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_order_number#32, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36] -Condition : (isnotnull(ws_item_sk#30) AND isnotnull(ws_bill_customer_sk#31)) +Input [7]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_order_number#29, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33] +Condition : (isnotnull(ws_item_sk#27) AND isnotnull(ws_bill_customer_sk#28)) (25) Exchange -Input [7]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_order_number#32, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36] -Arguments: hashpartitioning(ws_order_number#32, ws_item_sk#30, 5), ENSURE_REQUIREMENTS, [id=#37] +Input [7]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_order_number#29, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33] +Arguments: hashpartitioning(ws_order_number#29, ws_item_sk#27, 5), ENSURE_REQUIREMENTS, [plan_id=4] (26) Sort [codegen id : 9] -Input [7]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_order_number#32, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36] -Arguments: [ws_order_number#32 ASC NULLS FIRST, ws_item_sk#30 ASC NULLS FIRST], false, 0 +Input [7]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_order_number#29, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33] +Arguments: [ws_order_number#29 ASC NULLS FIRST, ws_item_sk#27 ASC NULLS FIRST], false, 0 (27) Scan parquet default.web_returns -Output [3]: [wr_item_sk#38, wr_order_number#39, wr_returned_date_sk#40] +Output [3]: [wr_item_sk#34, wr_order_number#35, wr_returned_date_sk#36] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_order_number), IsNotNull(wr_item_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 10] -Input [3]: [wr_item_sk#38, wr_order_number#39, wr_returned_date_sk#40] +Input [3]: [wr_item_sk#34, wr_order_number#35, wr_returned_date_sk#36] (29) Filter [codegen id : 10] -Input [3]: [wr_item_sk#38, wr_order_number#39, wr_returned_date_sk#40] -Condition : (isnotnull(wr_order_number#39) AND isnotnull(wr_item_sk#38)) +Input [3]: [wr_item_sk#34, wr_order_number#35, wr_returned_date_sk#36] +Condition : (isnotnull(wr_order_number#35) AND isnotnull(wr_item_sk#34)) (30) Project [codegen id : 10] -Output [2]: [wr_item_sk#38, wr_order_number#39] -Input [3]: [wr_item_sk#38, wr_order_number#39, wr_returned_date_sk#40] +Output [2]: [wr_item_sk#34, wr_order_number#35] +Input [3]: [wr_item_sk#34, wr_order_number#35, wr_returned_date_sk#36] (31) Exchange -Input [2]: [wr_item_sk#38, wr_order_number#39] -Arguments: hashpartitioning(wr_order_number#39, wr_item_sk#38, 5), ENSURE_REQUIREMENTS, [id=#41] +Input [2]: [wr_item_sk#34, wr_order_number#35] +Arguments: hashpartitioning(wr_order_number#35, wr_item_sk#34, 5), ENSURE_REQUIREMENTS, [plan_id=5] (32) Sort [codegen id : 11] -Input [2]: [wr_item_sk#38, wr_order_number#39] -Arguments: [wr_order_number#39 ASC NULLS FIRST, wr_item_sk#38 ASC NULLS FIRST], false, 0 +Input [2]: [wr_item_sk#34, wr_order_number#35] +Arguments: [wr_order_number#35 ASC NULLS FIRST, wr_item_sk#34 ASC NULLS FIRST], false, 0 (33) SortMergeJoin [codegen id : 13] -Left keys [2]: [ws_order_number#32, ws_item_sk#30] -Right keys [2]: [wr_order_number#39, wr_item_sk#38] +Left keys [2]: [ws_order_number#29, ws_item_sk#27] +Right keys [2]: [wr_order_number#35, wr_item_sk#34] Join condition: None (34) Filter [codegen id : 13] -Input [9]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_order_number#32, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36, wr_item_sk#38, wr_order_number#39] -Condition : isnull(wr_order_number#39) +Input [9]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_order_number#29, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33, wr_item_sk#34, wr_order_number#35] +Condition : isnull(wr_order_number#35) (35) Project [codegen id : 13] -Output [6]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36] -Input [9]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_order_number#32, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36, wr_item_sk#38, wr_order_number#39] +Output [6]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33] +Input [9]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_order_number#29, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33, wr_item_sk#34, wr_order_number#35] (36) ReusedExchange [Reuses operator id: 74] -Output [2]: [d_date_sk#42, d_year#43] +Output [2]: [d_date_sk#37, d_year#38] (37) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ws_sold_date_sk#36] -Right keys [1]: [d_date_sk#42] +Left keys [1]: [ws_sold_date_sk#33] +Right keys [1]: [d_date_sk#37] Join condition: None (38) Project [codegen id : 13] -Output [6]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, d_year#43] -Input [8]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36, d_date_sk#42, d_year#43] +Output [6]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, d_year#38] +Input [8]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33, d_date_sk#37, d_year#38] (39) HashAggregate [codegen id : 13] -Input [6]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, d_year#43] -Keys [3]: [d_year#43, ws_item_sk#30, ws_bill_customer_sk#31] -Functions [3]: [partial_sum(ws_quantity#33), partial_sum(UnscaledValue(ws_wholesale_cost#34)), partial_sum(UnscaledValue(ws_sales_price#35))] -Aggregate Attributes [3]: [sum#44, sum#45, sum#46] -Results [6]: [d_year#43, ws_item_sk#30, ws_bill_customer_sk#31, sum#47, sum#48, sum#49] +Input [6]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, d_year#38] +Keys [3]: [d_year#38, ws_item_sk#27, ws_bill_customer_sk#28] +Functions [3]: [partial_sum(ws_quantity#30), partial_sum(UnscaledValue(ws_wholesale_cost#31)), partial_sum(UnscaledValue(ws_sales_price#32))] +Aggregate Attributes [3]: [sum#39, sum#40, sum#41] +Results [6]: [d_year#38, ws_item_sk#27, ws_bill_customer_sk#28, sum#42, sum#43, sum#44] (40) Exchange -Input [6]: [d_year#43, ws_item_sk#30, ws_bill_customer_sk#31, sum#47, sum#48, sum#49] -Arguments: hashpartitioning(d_year#43, ws_item_sk#30, ws_bill_customer_sk#31, 5), ENSURE_REQUIREMENTS, [id=#50] +Input [6]: [d_year#38, ws_item_sk#27, ws_bill_customer_sk#28, sum#42, sum#43, sum#44] +Arguments: hashpartitioning(d_year#38, ws_item_sk#27, ws_bill_customer_sk#28, 5), ENSURE_REQUIREMENTS, [plan_id=6] (41) HashAggregate [codegen id : 14] -Input [6]: [d_year#43, ws_item_sk#30, ws_bill_customer_sk#31, sum#47, sum#48, sum#49] -Keys [3]: [d_year#43, ws_item_sk#30, ws_bill_customer_sk#31] -Functions [3]: [sum(ws_quantity#33), sum(UnscaledValue(ws_wholesale_cost#34)), sum(UnscaledValue(ws_sales_price#35))] -Aggregate Attributes [3]: [sum(ws_quantity#33)#51, sum(UnscaledValue(ws_wholesale_cost#34))#52, sum(UnscaledValue(ws_sales_price#35))#53] -Results [6]: [d_year#43 AS ws_sold_year#54, ws_item_sk#30, ws_bill_customer_sk#31 AS ws_customer_sk#55, sum(ws_quantity#33)#51 AS ws_qty#56, MakeDecimal(sum(UnscaledValue(ws_wholesale_cost#34))#52,17,2) AS ws_wc#57, MakeDecimal(sum(UnscaledValue(ws_sales_price#35))#53,17,2) AS ws_sp#58] +Input [6]: [d_year#38, ws_item_sk#27, ws_bill_customer_sk#28, sum#42, sum#43, sum#44] +Keys [3]: [d_year#38, ws_item_sk#27, ws_bill_customer_sk#28] +Functions [3]: [sum(ws_quantity#30), sum(UnscaledValue(ws_wholesale_cost#31)), sum(UnscaledValue(ws_sales_price#32))] +Aggregate Attributes [3]: [sum(ws_quantity#30)#45, sum(UnscaledValue(ws_wholesale_cost#31))#46, sum(UnscaledValue(ws_sales_price#32))#47] +Results [6]: [d_year#38 AS ws_sold_year#48, ws_item_sk#27, ws_bill_customer_sk#28 AS ws_customer_sk#49, sum(ws_quantity#30)#45 AS ws_qty#50, MakeDecimal(sum(UnscaledValue(ws_wholesale_cost#31))#46,17,2) AS ws_wc#51, MakeDecimal(sum(UnscaledValue(ws_sales_price#32))#47,17,2) AS ws_sp#52] (42) Filter [codegen id : 14] -Input [6]: [ws_sold_year#54, ws_item_sk#30, ws_customer_sk#55, ws_qty#56, ws_wc#57, ws_sp#58] -Condition : (coalesce(ws_qty#56, 0) > 0) +Input [6]: [ws_sold_year#48, ws_item_sk#27, ws_customer_sk#49, ws_qty#50, ws_wc#51, ws_sp#52] +Condition : (coalesce(ws_qty#50, 0) > 0) (43) Sort [codegen id : 14] -Input [6]: [ws_sold_year#54, ws_item_sk#30, ws_customer_sk#55, ws_qty#56, ws_wc#57, ws_sp#58] -Arguments: [ws_sold_year#54 ASC NULLS FIRST, ws_item_sk#30 ASC NULLS FIRST, ws_customer_sk#55 ASC NULLS FIRST], false, 0 +Input [6]: [ws_sold_year#48, ws_item_sk#27, ws_customer_sk#49, ws_qty#50, ws_wc#51, ws_sp#52] +Arguments: [ws_sold_year#48 ASC NULLS FIRST, ws_item_sk#27 ASC NULLS FIRST, ws_customer_sk#49 ASC NULLS FIRST], false, 0 (44) SortMergeJoin [codegen id : 15] -Left keys [3]: [ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2] -Right keys [3]: [ws_sold_year#54, ws_item_sk#30, ws_customer_sk#55] +Left keys [3]: [ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2] +Right keys [3]: [ws_sold_year#48, ws_item_sk#27, ws_customer_sk#49] Join condition: None (45) Project [codegen id : 15] -Output [9]: [ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2, ss_qty#27, ss_wc#28, ss_sp#29, ws_qty#56, ws_wc#57, ws_sp#58] -Input [12]: [ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2, ss_qty#27, ss_wc#28, ss_sp#29, ws_sold_year#54, ws_item_sk#30, ws_customer_sk#55, ws_qty#56, ws_wc#57, ws_sp#58] +Output [9]: [ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2, ss_qty#24, ss_wc#25, ss_sp#26, ws_qty#50, ws_wc#51, ws_sp#52] +Input [12]: [ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2, ss_qty#24, ss_wc#25, ss_sp#26, ws_sold_year#48, ws_item_sk#27, ws_customer_sk#49, ws_qty#50, ws_wc#51, ws_sp#52] (46) Scan parquet default.catalog_sales -Output [7]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_order_number#61, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65] +Output [7]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_order_number#55, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#65), dynamicpruningexpression(cs_sold_date_sk#65 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(cs_sold_date_sk#59), dynamicpruningexpression(cs_sold_date_sk#59 IN dynamicpruning#8)] PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_bill_customer_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 16] -Input [7]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_order_number#61, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65] +Input [7]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_order_number#55, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59] (48) Filter [codegen id : 16] -Input [7]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_order_number#61, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65] -Condition : (isnotnull(cs_item_sk#60) AND isnotnull(cs_bill_customer_sk#59)) +Input [7]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_order_number#55, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59] +Condition : (isnotnull(cs_item_sk#54) AND isnotnull(cs_bill_customer_sk#53)) (49) Exchange -Input [7]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_order_number#61, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65] -Arguments: hashpartitioning(cs_order_number#61, cs_item_sk#60, 5), ENSURE_REQUIREMENTS, [id=#66] +Input [7]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_order_number#55, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59] +Arguments: hashpartitioning(cs_order_number#55, cs_item_sk#54, 5), ENSURE_REQUIREMENTS, [plan_id=7] (50) Sort [codegen id : 17] -Input [7]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_order_number#61, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65] -Arguments: [cs_order_number#61 ASC NULLS FIRST, cs_item_sk#60 ASC NULLS FIRST], false, 0 +Input [7]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_order_number#55, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59] +Arguments: [cs_order_number#55 ASC NULLS FIRST, cs_item_sk#54 ASC NULLS FIRST], false, 0 (51) Scan parquet default.catalog_returns -Output [3]: [cr_item_sk#67, cr_order_number#68, cr_returned_date_sk#69] +Output [3]: [cr_item_sk#60, cr_order_number#61, cr_returned_date_sk#62] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_order_number), IsNotNull(cr_item_sk)] ReadSchema: struct (52) ColumnarToRow [codegen id : 18] -Input [3]: [cr_item_sk#67, cr_order_number#68, cr_returned_date_sk#69] +Input [3]: [cr_item_sk#60, cr_order_number#61, cr_returned_date_sk#62] (53) Filter [codegen id : 18] -Input [3]: [cr_item_sk#67, cr_order_number#68, cr_returned_date_sk#69] -Condition : (isnotnull(cr_order_number#68) AND isnotnull(cr_item_sk#67)) +Input [3]: [cr_item_sk#60, cr_order_number#61, cr_returned_date_sk#62] +Condition : (isnotnull(cr_order_number#61) AND isnotnull(cr_item_sk#60)) (54) Project [codegen id : 18] -Output [2]: [cr_item_sk#67, cr_order_number#68] -Input [3]: [cr_item_sk#67, cr_order_number#68, cr_returned_date_sk#69] +Output [2]: [cr_item_sk#60, cr_order_number#61] +Input [3]: [cr_item_sk#60, cr_order_number#61, cr_returned_date_sk#62] (55) Exchange -Input [2]: [cr_item_sk#67, cr_order_number#68] -Arguments: hashpartitioning(cr_order_number#68, cr_item_sk#67, 5), ENSURE_REQUIREMENTS, [id=#70] +Input [2]: [cr_item_sk#60, cr_order_number#61] +Arguments: hashpartitioning(cr_order_number#61, cr_item_sk#60, 5), ENSURE_REQUIREMENTS, [plan_id=8] (56) Sort [codegen id : 19] -Input [2]: [cr_item_sk#67, cr_order_number#68] -Arguments: [cr_order_number#68 ASC NULLS FIRST, cr_item_sk#67 ASC NULLS FIRST], false, 0 +Input [2]: [cr_item_sk#60, cr_order_number#61] +Arguments: [cr_order_number#61 ASC NULLS FIRST, cr_item_sk#60 ASC NULLS FIRST], false, 0 (57) SortMergeJoin [codegen id : 21] -Left keys [2]: [cs_order_number#61, cs_item_sk#60] -Right keys [2]: [cr_order_number#68, cr_item_sk#67] +Left keys [2]: [cs_order_number#55, cs_item_sk#54] +Right keys [2]: [cr_order_number#61, cr_item_sk#60] Join condition: None (58) Filter [codegen id : 21] -Input [9]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_order_number#61, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65, cr_item_sk#67, cr_order_number#68] -Condition : isnull(cr_order_number#68) +Input [9]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_order_number#55, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59, cr_item_sk#60, cr_order_number#61] +Condition : isnull(cr_order_number#61) (59) Project [codegen id : 21] -Output [6]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65] -Input [9]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_order_number#61, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65, cr_item_sk#67, cr_order_number#68] +Output [6]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59] +Input [9]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_order_number#55, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59, cr_item_sk#60, cr_order_number#61] (60) ReusedExchange [Reuses operator id: 74] -Output [2]: [d_date_sk#71, d_year#72] +Output [2]: [d_date_sk#63, d_year#64] (61) BroadcastHashJoin [codegen id : 21] -Left keys [1]: [cs_sold_date_sk#65] -Right keys [1]: [d_date_sk#71] +Left keys [1]: [cs_sold_date_sk#59] +Right keys [1]: [d_date_sk#63] Join condition: None (62) Project [codegen id : 21] -Output [6]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, d_year#72] -Input [8]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65, d_date_sk#71, d_year#72] +Output [6]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, d_year#64] +Input [8]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59, d_date_sk#63, d_year#64] (63) HashAggregate [codegen id : 21] -Input [6]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, d_year#72] -Keys [3]: [d_year#72, cs_item_sk#60, cs_bill_customer_sk#59] -Functions [3]: [partial_sum(cs_quantity#62), partial_sum(UnscaledValue(cs_wholesale_cost#63)), partial_sum(UnscaledValue(cs_sales_price#64))] -Aggregate Attributes [3]: [sum#73, sum#74, sum#75] -Results [6]: [d_year#72, cs_item_sk#60, cs_bill_customer_sk#59, sum#76, sum#77, sum#78] +Input [6]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, d_year#64] +Keys [3]: [d_year#64, cs_item_sk#54, cs_bill_customer_sk#53] +Functions [3]: [partial_sum(cs_quantity#56), partial_sum(UnscaledValue(cs_wholesale_cost#57)), partial_sum(UnscaledValue(cs_sales_price#58))] +Aggregate Attributes [3]: [sum#65, sum#66, sum#67] +Results [6]: [d_year#64, cs_item_sk#54, cs_bill_customer_sk#53, sum#68, sum#69, sum#70] (64) Exchange -Input [6]: [d_year#72, cs_item_sk#60, cs_bill_customer_sk#59, sum#76, sum#77, sum#78] -Arguments: hashpartitioning(d_year#72, cs_item_sk#60, cs_bill_customer_sk#59, 5), ENSURE_REQUIREMENTS, [id=#79] +Input [6]: [d_year#64, cs_item_sk#54, cs_bill_customer_sk#53, sum#68, sum#69, sum#70] +Arguments: hashpartitioning(d_year#64, cs_item_sk#54, cs_bill_customer_sk#53, 5), ENSURE_REQUIREMENTS, [plan_id=9] (65) HashAggregate [codegen id : 22] -Input [6]: [d_year#72, cs_item_sk#60, cs_bill_customer_sk#59, sum#76, sum#77, sum#78] -Keys [3]: [d_year#72, cs_item_sk#60, cs_bill_customer_sk#59] -Functions [3]: [sum(cs_quantity#62), sum(UnscaledValue(cs_wholesale_cost#63)), sum(UnscaledValue(cs_sales_price#64))] -Aggregate Attributes [3]: [sum(cs_quantity#62)#80, sum(UnscaledValue(cs_wholesale_cost#63))#81, sum(UnscaledValue(cs_sales_price#64))#82] -Results [6]: [d_year#72 AS cs_sold_year#83, cs_item_sk#60, cs_bill_customer_sk#59 AS cs_customer_sk#84, sum(cs_quantity#62)#80 AS cs_qty#85, MakeDecimal(sum(UnscaledValue(cs_wholesale_cost#63))#81,17,2) AS cs_wc#86, MakeDecimal(sum(UnscaledValue(cs_sales_price#64))#82,17,2) AS cs_sp#87] +Input [6]: [d_year#64, cs_item_sk#54, cs_bill_customer_sk#53, sum#68, sum#69, sum#70] +Keys [3]: [d_year#64, cs_item_sk#54, cs_bill_customer_sk#53] +Functions [3]: [sum(cs_quantity#56), sum(UnscaledValue(cs_wholesale_cost#57)), sum(UnscaledValue(cs_sales_price#58))] +Aggregate Attributes [3]: [sum(cs_quantity#56)#71, sum(UnscaledValue(cs_wholesale_cost#57))#72, sum(UnscaledValue(cs_sales_price#58))#73] +Results [6]: [d_year#64 AS cs_sold_year#74, cs_item_sk#54, cs_bill_customer_sk#53 AS cs_customer_sk#75, sum(cs_quantity#56)#71 AS cs_qty#76, MakeDecimal(sum(UnscaledValue(cs_wholesale_cost#57))#72,17,2) AS cs_wc#77, MakeDecimal(sum(UnscaledValue(cs_sales_price#58))#73,17,2) AS cs_sp#78] (66) Filter [codegen id : 22] -Input [6]: [cs_sold_year#83, cs_item_sk#60, cs_customer_sk#84, cs_qty#85, cs_wc#86, cs_sp#87] -Condition : (coalesce(cs_qty#85, 0) > 0) +Input [6]: [cs_sold_year#74, cs_item_sk#54, cs_customer_sk#75, cs_qty#76, cs_wc#77, cs_sp#78] +Condition : (coalesce(cs_qty#76, 0) > 0) (67) Sort [codegen id : 22] -Input [6]: [cs_sold_year#83, cs_item_sk#60, cs_customer_sk#84, cs_qty#85, cs_wc#86, cs_sp#87] -Arguments: [cs_sold_year#83 ASC NULLS FIRST, cs_item_sk#60 ASC NULLS FIRST, cs_customer_sk#84 ASC NULLS FIRST], false, 0 +Input [6]: [cs_sold_year#74, cs_item_sk#54, cs_customer_sk#75, cs_qty#76, cs_wc#77, cs_sp#78] +Arguments: [cs_sold_year#74 ASC NULLS FIRST, cs_item_sk#54 ASC NULLS FIRST, cs_customer_sk#75 ASC NULLS FIRST], false, 0 (68) SortMergeJoin [codegen id : 23] -Left keys [3]: [ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2] -Right keys [3]: [cs_sold_year#83, cs_item_sk#60, cs_customer_sk#84] +Left keys [3]: [ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2] +Right keys [3]: [cs_sold_year#74, cs_item_sk#54, cs_customer_sk#75] Join condition: None (69) Project [codegen id : 23] -Output [13]: [round((cast(ss_qty#27 as double) / cast(coalesce((ws_qty#56 + cs_qty#85), 1) as double)), 2) AS ratio#88, ss_qty#27 AS store_qty#89, ss_wc#28 AS store_wholesale_cost#90, ss_sp#29 AS store_sales_price#91, (coalesce(ws_qty#56, 0) + coalesce(cs_qty#85, 0)) AS other_chan_qty#92, CheckOverflow((promote_precision(cast(coalesce(ws_wc#57, 0.00) as decimal(18,2))) + promote_precision(cast(coalesce(cs_wc#86, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS other_chan_wholesale_cost#93, CheckOverflow((promote_precision(cast(coalesce(ws_sp#58, 0.00) as decimal(18,2))) + promote_precision(cast(coalesce(cs_sp#87, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS other_chan_sales_price#94, ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2, ss_qty#27, ss_wc#28, ss_sp#29] -Input [15]: [ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2, ss_qty#27, ss_wc#28, ss_sp#29, ws_qty#56, ws_wc#57, ws_sp#58, cs_sold_year#83, cs_item_sk#60, cs_customer_sk#84, cs_qty#85, cs_wc#86, cs_sp#87] +Output [13]: [round((cast(ss_qty#24 as double) / cast(coalesce((ws_qty#50 + cs_qty#76), 1) as double)), 2) AS ratio#79, ss_qty#24 AS store_qty#80, ss_wc#25 AS store_wholesale_cost#81, ss_sp#26 AS store_sales_price#82, (coalesce(ws_qty#50, 0) + coalesce(cs_qty#76, 0)) AS other_chan_qty#83, CheckOverflow((promote_precision(cast(coalesce(ws_wc#51, 0.00) as decimal(18,2))) + promote_precision(cast(coalesce(cs_wc#77, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS other_chan_wholesale_cost#84, CheckOverflow((promote_precision(cast(coalesce(ws_sp#52, 0.00) as decimal(18,2))) + promote_precision(cast(coalesce(cs_sp#78, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS other_chan_sales_price#85, ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2, ss_qty#24, ss_wc#25, ss_sp#26] +Input [15]: [ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2, ss_qty#24, ss_wc#25, ss_sp#26, ws_qty#50, ws_wc#51, ws_sp#52, cs_sold_year#74, cs_item_sk#54, cs_customer_sk#75, cs_qty#76, cs_wc#77, cs_sp#78] (70) TakeOrderedAndProject -Input [13]: [ratio#88, store_qty#89, store_wholesale_cost#90, store_sales_price#91, other_chan_qty#92, other_chan_wholesale_cost#93, other_chan_sales_price#94, ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2, ss_qty#27, ss_wc#28, ss_sp#29] -Arguments: 100, [ss_sold_year#26 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST, ss_customer_sk#2 ASC NULLS FIRST, ss_qty#27 DESC NULLS LAST, ss_wc#28 DESC NULLS LAST, ss_sp#29 DESC NULLS LAST, other_chan_qty#92 ASC NULLS FIRST, other_chan_wholesale_cost#93 ASC NULLS FIRST, other_chan_sales_price#94 ASC NULLS FIRST, ratio#88 ASC NULLS FIRST], [ratio#88, store_qty#89, store_wholesale_cost#90, store_sales_price#91, other_chan_qty#92, other_chan_wholesale_cost#93, other_chan_sales_price#94] +Input [13]: [ratio#79, store_qty#80, store_wholesale_cost#81, store_sales_price#82, other_chan_qty#83, other_chan_wholesale_cost#84, other_chan_sales_price#85, ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2, ss_qty#24, ss_wc#25, ss_sp#26] +Arguments: 100, [ss_sold_year#23 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST, ss_customer_sk#2 ASC NULLS FIRST, ss_qty#24 DESC NULLS LAST, ss_wc#25 DESC NULLS LAST, ss_sp#26 DESC NULLS LAST, other_chan_qty#83 ASC NULLS FIRST, other_chan_wholesale_cost#84 ASC NULLS FIRST, other_chan_sales_price#85 ASC NULLS FIRST, ratio#79 ASC NULLS FIRST], [ratio#79, store_qty#80, store_wholesale_cost#81, store_sales_price#82, other_chan_qty#83, other_chan_wholesale_cost#84, other_chan_sales_price#85] ===== Subqueries ===== @@ -399,25 +399,25 @@ BroadcastExchange (74) (71) Scan parquet default.date_dim -Output [2]: [d_date_sk#14, d_year#15] +Output [2]: [d_date_sk#12, d_year#13] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (72) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#15] +Input [2]: [d_date_sk#12, d_year#13] (73) Filter [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#15] -Condition : ((isnotnull(d_year#15) AND (d_year#15 = 2000)) AND isnotnull(d_date_sk#14)) +Input [2]: [d_date_sk#12, d_year#13] +Condition : ((isnotnull(d_year#13) AND (d_year#13 = 2000)) AND isnotnull(d_date_sk#12)) (74) BroadcastExchange -Input [2]: [d_date_sk#14, d_year#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#95] +Input [2]: [d_date_sk#12, d_year#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=10] -Subquery:2 Hosting operator id = 22 Hosting Expression = ws_sold_date_sk#36 IN dynamicpruning#8 +Subquery:2 Hosting operator id = 22 Hosting Expression = ws_sold_date_sk#33 IN dynamicpruning#8 -Subquery:3 Hosting operator id = 46 Hosting Expression = cs_sold_date_sk#65 IN dynamicpruning#8 +Subquery:3 Hosting operator id = 46 Hosting Expression = cs_sold_date_sk#59 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q78/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q78/explain.txt index 133d5272ec111..1be531c232011 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q78/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q78/explain.txt @@ -88,306 +88,306 @@ Condition : (isnotnull(ss_item_sk#1) AND isnotnull(ss_customer_sk#2)) (4) Exchange Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7] -Arguments: hashpartitioning(ss_ticket_number#3, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ss_ticket_number#3, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [7]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7] Arguments: [ss_ticket_number#3 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_returns -Output [3]: [sr_item_sk#10, sr_ticket_number#11, sr_returned_date_sk#12] +Output [3]: [sr_item_sk#9, sr_ticket_number#10, sr_returned_date_sk#11] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [3]: [sr_item_sk#10, sr_ticket_number#11, sr_returned_date_sk#12] +Input [3]: [sr_item_sk#9, sr_ticket_number#10, sr_returned_date_sk#11] (8) Filter [codegen id : 3] -Input [3]: [sr_item_sk#10, sr_ticket_number#11, sr_returned_date_sk#12] -Condition : (isnotnull(sr_ticket_number#11) AND isnotnull(sr_item_sk#10)) +Input [3]: [sr_item_sk#9, sr_ticket_number#10, sr_returned_date_sk#11] +Condition : (isnotnull(sr_ticket_number#10) AND isnotnull(sr_item_sk#9)) (9) Project [codegen id : 3] -Output [2]: [sr_item_sk#10, sr_ticket_number#11] -Input [3]: [sr_item_sk#10, sr_ticket_number#11, sr_returned_date_sk#12] +Output [2]: [sr_item_sk#9, sr_ticket_number#10] +Input [3]: [sr_item_sk#9, sr_ticket_number#10, sr_returned_date_sk#11] (10) Exchange -Input [2]: [sr_item_sk#10, sr_ticket_number#11] -Arguments: hashpartitioning(sr_ticket_number#11, sr_item_sk#10, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [2]: [sr_item_sk#9, sr_ticket_number#10] +Arguments: hashpartitioning(sr_ticket_number#10, sr_item_sk#9, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [2]: [sr_item_sk#10, sr_ticket_number#11] -Arguments: [sr_ticket_number#11 ASC NULLS FIRST, sr_item_sk#10 ASC NULLS FIRST], false, 0 +Input [2]: [sr_item_sk#9, sr_ticket_number#10] +Arguments: [sr_ticket_number#10 ASC NULLS FIRST, sr_item_sk#9 ASC NULLS FIRST], false, 0 (12) SortMergeJoin [codegen id : 6] Left keys [2]: [ss_ticket_number#3, ss_item_sk#1] -Right keys [2]: [sr_ticket_number#11, sr_item_sk#10] +Right keys [2]: [sr_ticket_number#10, sr_item_sk#9] Join condition: None (13) Filter [codegen id : 6] -Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7, sr_item_sk#10, sr_ticket_number#11] -Condition : isnull(sr_ticket_number#11) +Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7, sr_item_sk#9, sr_ticket_number#10] +Condition : isnull(sr_ticket_number#10) (14) Project [codegen id : 6] Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7] -Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7, sr_item_sk#10, sr_ticket_number#11] +Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7, sr_item_sk#9, sr_ticket_number#10] (15) ReusedExchange [Reuses operator id: 74] -Output [2]: [d_date_sk#14, d_year#15] +Output [2]: [d_date_sk#12, d_year#13] (16) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_sold_date_sk#7] -Right keys [1]: [d_date_sk#14] +Right keys [1]: [d_date_sk#12] Join condition: None (17) Project [codegen id : 6] -Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, d_year#15] -Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7, d_date_sk#14, d_year#15] +Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, d_year#13] +Input [8]: [ss_item_sk#1, ss_customer_sk#2, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, ss_sold_date_sk#7, d_date_sk#12, d_year#13] (18) HashAggregate [codegen id : 6] -Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, d_year#15] -Keys [3]: [d_year#15, ss_item_sk#1, ss_customer_sk#2] +Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_quantity#4, ss_wholesale_cost#5, ss_sales_price#6, d_year#13] +Keys [3]: [d_year#13, ss_item_sk#1, ss_customer_sk#2] Functions [3]: [partial_sum(ss_quantity#4), partial_sum(UnscaledValue(ss_wholesale_cost#5)), partial_sum(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [3]: [sum#16, sum#17, sum#18] -Results [6]: [d_year#15, ss_item_sk#1, ss_customer_sk#2, sum#19, sum#20, sum#21] +Aggregate Attributes [3]: [sum#14, sum#15, sum#16] +Results [6]: [d_year#13, ss_item_sk#1, ss_customer_sk#2, sum#17, sum#18, sum#19] (19) Exchange -Input [6]: [d_year#15, ss_item_sk#1, ss_customer_sk#2, sum#19, sum#20, sum#21] -Arguments: hashpartitioning(d_year#15, ss_item_sk#1, ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#22] +Input [6]: [d_year#13, ss_item_sk#1, ss_customer_sk#2, sum#17, sum#18, sum#19] +Arguments: hashpartitioning(d_year#13, ss_item_sk#1, ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 7] -Input [6]: [d_year#15, ss_item_sk#1, ss_customer_sk#2, sum#19, sum#20, sum#21] -Keys [3]: [d_year#15, ss_item_sk#1, ss_customer_sk#2] +Input [6]: [d_year#13, ss_item_sk#1, ss_customer_sk#2, sum#17, sum#18, sum#19] +Keys [3]: [d_year#13, ss_item_sk#1, ss_customer_sk#2] Functions [3]: [sum(ss_quantity#4), sum(UnscaledValue(ss_wholesale_cost#5)), sum(UnscaledValue(ss_sales_price#6))] -Aggregate Attributes [3]: [sum(ss_quantity#4)#23, sum(UnscaledValue(ss_wholesale_cost#5))#24, sum(UnscaledValue(ss_sales_price#6))#25] -Results [6]: [d_year#15 AS ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2, sum(ss_quantity#4)#23 AS ss_qty#27, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#5))#24,17,2) AS ss_wc#28, MakeDecimal(sum(UnscaledValue(ss_sales_price#6))#25,17,2) AS ss_sp#29] +Aggregate Attributes [3]: [sum(ss_quantity#4)#20, sum(UnscaledValue(ss_wholesale_cost#5))#21, sum(UnscaledValue(ss_sales_price#6))#22] +Results [6]: [d_year#13 AS ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2, sum(ss_quantity#4)#20 AS ss_qty#24, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#5))#21,17,2) AS ss_wc#25, MakeDecimal(sum(UnscaledValue(ss_sales_price#6))#22,17,2) AS ss_sp#26] (21) Sort [codegen id : 7] -Input [6]: [ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2, ss_qty#27, ss_wc#28, ss_sp#29] -Arguments: [ss_sold_year#26 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST, ss_customer_sk#2 ASC NULLS FIRST], false, 0 +Input [6]: [ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2, ss_qty#24, ss_wc#25, ss_sp#26] +Arguments: [ss_sold_year#23 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST, ss_customer_sk#2 ASC NULLS FIRST], false, 0 (22) Scan parquet default.web_sales -Output [7]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_order_number#32, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36] +Output [7]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_order_number#29, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#36), dynamicpruningexpression(ws_sold_date_sk#36 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ws_sold_date_sk#33), dynamicpruningexpression(ws_sold_date_sk#33 IN dynamicpruning#8)] PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_bill_customer_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 8] -Input [7]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_order_number#32, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36] +Input [7]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_order_number#29, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33] (24) Filter [codegen id : 8] -Input [7]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_order_number#32, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36] -Condition : (isnotnull(ws_item_sk#30) AND isnotnull(ws_bill_customer_sk#31)) +Input [7]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_order_number#29, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33] +Condition : (isnotnull(ws_item_sk#27) AND isnotnull(ws_bill_customer_sk#28)) (25) Exchange -Input [7]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_order_number#32, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36] -Arguments: hashpartitioning(ws_order_number#32, ws_item_sk#30, 5), ENSURE_REQUIREMENTS, [id=#37] +Input [7]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_order_number#29, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33] +Arguments: hashpartitioning(ws_order_number#29, ws_item_sk#27, 5), ENSURE_REQUIREMENTS, [plan_id=4] (26) Sort [codegen id : 9] -Input [7]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_order_number#32, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36] -Arguments: [ws_order_number#32 ASC NULLS FIRST, ws_item_sk#30 ASC NULLS FIRST], false, 0 +Input [7]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_order_number#29, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33] +Arguments: [ws_order_number#29 ASC NULLS FIRST, ws_item_sk#27 ASC NULLS FIRST], false, 0 (27) Scan parquet default.web_returns -Output [3]: [wr_item_sk#38, wr_order_number#39, wr_returned_date_sk#40] +Output [3]: [wr_item_sk#34, wr_order_number#35, wr_returned_date_sk#36] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_order_number), IsNotNull(wr_item_sk)] ReadSchema: struct (28) ColumnarToRow [codegen id : 10] -Input [3]: [wr_item_sk#38, wr_order_number#39, wr_returned_date_sk#40] +Input [3]: [wr_item_sk#34, wr_order_number#35, wr_returned_date_sk#36] (29) Filter [codegen id : 10] -Input [3]: [wr_item_sk#38, wr_order_number#39, wr_returned_date_sk#40] -Condition : (isnotnull(wr_order_number#39) AND isnotnull(wr_item_sk#38)) +Input [3]: [wr_item_sk#34, wr_order_number#35, wr_returned_date_sk#36] +Condition : (isnotnull(wr_order_number#35) AND isnotnull(wr_item_sk#34)) (30) Project [codegen id : 10] -Output [2]: [wr_item_sk#38, wr_order_number#39] -Input [3]: [wr_item_sk#38, wr_order_number#39, wr_returned_date_sk#40] +Output [2]: [wr_item_sk#34, wr_order_number#35] +Input [3]: [wr_item_sk#34, wr_order_number#35, wr_returned_date_sk#36] (31) Exchange -Input [2]: [wr_item_sk#38, wr_order_number#39] -Arguments: hashpartitioning(wr_order_number#39, wr_item_sk#38, 5), ENSURE_REQUIREMENTS, [id=#41] +Input [2]: [wr_item_sk#34, wr_order_number#35] +Arguments: hashpartitioning(wr_order_number#35, wr_item_sk#34, 5), ENSURE_REQUIREMENTS, [plan_id=5] (32) Sort [codegen id : 11] -Input [2]: [wr_item_sk#38, wr_order_number#39] -Arguments: [wr_order_number#39 ASC NULLS FIRST, wr_item_sk#38 ASC NULLS FIRST], false, 0 +Input [2]: [wr_item_sk#34, wr_order_number#35] +Arguments: [wr_order_number#35 ASC NULLS FIRST, wr_item_sk#34 ASC NULLS FIRST], false, 0 (33) SortMergeJoin [codegen id : 13] -Left keys [2]: [ws_order_number#32, ws_item_sk#30] -Right keys [2]: [wr_order_number#39, wr_item_sk#38] +Left keys [2]: [ws_order_number#29, ws_item_sk#27] +Right keys [2]: [wr_order_number#35, wr_item_sk#34] Join condition: None (34) Filter [codegen id : 13] -Input [9]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_order_number#32, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36, wr_item_sk#38, wr_order_number#39] -Condition : isnull(wr_order_number#39) +Input [9]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_order_number#29, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33, wr_item_sk#34, wr_order_number#35] +Condition : isnull(wr_order_number#35) (35) Project [codegen id : 13] -Output [6]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36] -Input [9]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_order_number#32, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36, wr_item_sk#38, wr_order_number#39] +Output [6]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33] +Input [9]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_order_number#29, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33, wr_item_sk#34, wr_order_number#35] (36) ReusedExchange [Reuses operator id: 74] -Output [2]: [d_date_sk#42, d_year#43] +Output [2]: [d_date_sk#37, d_year#38] (37) BroadcastHashJoin [codegen id : 13] -Left keys [1]: [ws_sold_date_sk#36] -Right keys [1]: [d_date_sk#42] +Left keys [1]: [ws_sold_date_sk#33] +Right keys [1]: [d_date_sk#37] Join condition: None (38) Project [codegen id : 13] -Output [6]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, d_year#43] -Input [8]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, ws_sold_date_sk#36, d_date_sk#42, d_year#43] +Output [6]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, d_year#38] +Input [8]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, ws_sold_date_sk#33, d_date_sk#37, d_year#38] (39) HashAggregate [codegen id : 13] -Input [6]: [ws_item_sk#30, ws_bill_customer_sk#31, ws_quantity#33, ws_wholesale_cost#34, ws_sales_price#35, d_year#43] -Keys [3]: [d_year#43, ws_item_sk#30, ws_bill_customer_sk#31] -Functions [3]: [partial_sum(ws_quantity#33), partial_sum(UnscaledValue(ws_wholesale_cost#34)), partial_sum(UnscaledValue(ws_sales_price#35))] -Aggregate Attributes [3]: [sum#44, sum#45, sum#46] -Results [6]: [d_year#43, ws_item_sk#30, ws_bill_customer_sk#31, sum#47, sum#48, sum#49] +Input [6]: [ws_item_sk#27, ws_bill_customer_sk#28, ws_quantity#30, ws_wholesale_cost#31, ws_sales_price#32, d_year#38] +Keys [3]: [d_year#38, ws_item_sk#27, ws_bill_customer_sk#28] +Functions [3]: [partial_sum(ws_quantity#30), partial_sum(UnscaledValue(ws_wholesale_cost#31)), partial_sum(UnscaledValue(ws_sales_price#32))] +Aggregate Attributes [3]: [sum#39, sum#40, sum#41] +Results [6]: [d_year#38, ws_item_sk#27, ws_bill_customer_sk#28, sum#42, sum#43, sum#44] (40) Exchange -Input [6]: [d_year#43, ws_item_sk#30, ws_bill_customer_sk#31, sum#47, sum#48, sum#49] -Arguments: hashpartitioning(d_year#43, ws_item_sk#30, ws_bill_customer_sk#31, 5), ENSURE_REQUIREMENTS, [id=#50] +Input [6]: [d_year#38, ws_item_sk#27, ws_bill_customer_sk#28, sum#42, sum#43, sum#44] +Arguments: hashpartitioning(d_year#38, ws_item_sk#27, ws_bill_customer_sk#28, 5), ENSURE_REQUIREMENTS, [plan_id=6] (41) HashAggregate [codegen id : 14] -Input [6]: [d_year#43, ws_item_sk#30, ws_bill_customer_sk#31, sum#47, sum#48, sum#49] -Keys [3]: [d_year#43, ws_item_sk#30, ws_bill_customer_sk#31] -Functions [3]: [sum(ws_quantity#33), sum(UnscaledValue(ws_wholesale_cost#34)), sum(UnscaledValue(ws_sales_price#35))] -Aggregate Attributes [3]: [sum(ws_quantity#33)#51, sum(UnscaledValue(ws_wholesale_cost#34))#52, sum(UnscaledValue(ws_sales_price#35))#53] -Results [6]: [d_year#43 AS ws_sold_year#54, ws_item_sk#30, ws_bill_customer_sk#31 AS ws_customer_sk#55, sum(ws_quantity#33)#51 AS ws_qty#56, MakeDecimal(sum(UnscaledValue(ws_wholesale_cost#34))#52,17,2) AS ws_wc#57, MakeDecimal(sum(UnscaledValue(ws_sales_price#35))#53,17,2) AS ws_sp#58] +Input [6]: [d_year#38, ws_item_sk#27, ws_bill_customer_sk#28, sum#42, sum#43, sum#44] +Keys [3]: [d_year#38, ws_item_sk#27, ws_bill_customer_sk#28] +Functions [3]: [sum(ws_quantity#30), sum(UnscaledValue(ws_wholesale_cost#31)), sum(UnscaledValue(ws_sales_price#32))] +Aggregate Attributes [3]: [sum(ws_quantity#30)#45, sum(UnscaledValue(ws_wholesale_cost#31))#46, sum(UnscaledValue(ws_sales_price#32))#47] +Results [6]: [d_year#38 AS ws_sold_year#48, ws_item_sk#27, ws_bill_customer_sk#28 AS ws_customer_sk#49, sum(ws_quantity#30)#45 AS ws_qty#50, MakeDecimal(sum(UnscaledValue(ws_wholesale_cost#31))#46,17,2) AS ws_wc#51, MakeDecimal(sum(UnscaledValue(ws_sales_price#32))#47,17,2) AS ws_sp#52] (42) Filter [codegen id : 14] -Input [6]: [ws_sold_year#54, ws_item_sk#30, ws_customer_sk#55, ws_qty#56, ws_wc#57, ws_sp#58] -Condition : (coalesce(ws_qty#56, 0) > 0) +Input [6]: [ws_sold_year#48, ws_item_sk#27, ws_customer_sk#49, ws_qty#50, ws_wc#51, ws_sp#52] +Condition : (coalesce(ws_qty#50, 0) > 0) (43) Sort [codegen id : 14] -Input [6]: [ws_sold_year#54, ws_item_sk#30, ws_customer_sk#55, ws_qty#56, ws_wc#57, ws_sp#58] -Arguments: [ws_sold_year#54 ASC NULLS FIRST, ws_item_sk#30 ASC NULLS FIRST, ws_customer_sk#55 ASC NULLS FIRST], false, 0 +Input [6]: [ws_sold_year#48, ws_item_sk#27, ws_customer_sk#49, ws_qty#50, ws_wc#51, ws_sp#52] +Arguments: [ws_sold_year#48 ASC NULLS FIRST, ws_item_sk#27 ASC NULLS FIRST, ws_customer_sk#49 ASC NULLS FIRST], false, 0 (44) SortMergeJoin [codegen id : 15] -Left keys [3]: [ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2] -Right keys [3]: [ws_sold_year#54, ws_item_sk#30, ws_customer_sk#55] +Left keys [3]: [ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2] +Right keys [3]: [ws_sold_year#48, ws_item_sk#27, ws_customer_sk#49] Join condition: None (45) Project [codegen id : 15] -Output [9]: [ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2, ss_qty#27, ss_wc#28, ss_sp#29, ws_qty#56, ws_wc#57, ws_sp#58] -Input [12]: [ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2, ss_qty#27, ss_wc#28, ss_sp#29, ws_sold_year#54, ws_item_sk#30, ws_customer_sk#55, ws_qty#56, ws_wc#57, ws_sp#58] +Output [9]: [ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2, ss_qty#24, ss_wc#25, ss_sp#26, ws_qty#50, ws_wc#51, ws_sp#52] +Input [12]: [ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2, ss_qty#24, ss_wc#25, ss_sp#26, ws_sold_year#48, ws_item_sk#27, ws_customer_sk#49, ws_qty#50, ws_wc#51, ws_sp#52] (46) Scan parquet default.catalog_sales -Output [7]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_order_number#61, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65] +Output [7]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_order_number#55, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#65), dynamicpruningexpression(cs_sold_date_sk#65 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(cs_sold_date_sk#59), dynamicpruningexpression(cs_sold_date_sk#59 IN dynamicpruning#8)] PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_bill_customer_sk)] ReadSchema: struct (47) ColumnarToRow [codegen id : 16] -Input [7]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_order_number#61, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65] +Input [7]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_order_number#55, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59] (48) Filter [codegen id : 16] -Input [7]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_order_number#61, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65] -Condition : (isnotnull(cs_item_sk#60) AND isnotnull(cs_bill_customer_sk#59)) +Input [7]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_order_number#55, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59] +Condition : (isnotnull(cs_item_sk#54) AND isnotnull(cs_bill_customer_sk#53)) (49) Exchange -Input [7]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_order_number#61, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65] -Arguments: hashpartitioning(cs_order_number#61, cs_item_sk#60, 5), ENSURE_REQUIREMENTS, [id=#66] +Input [7]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_order_number#55, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59] +Arguments: hashpartitioning(cs_order_number#55, cs_item_sk#54, 5), ENSURE_REQUIREMENTS, [plan_id=7] (50) Sort [codegen id : 17] -Input [7]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_order_number#61, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65] -Arguments: [cs_order_number#61 ASC NULLS FIRST, cs_item_sk#60 ASC NULLS FIRST], false, 0 +Input [7]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_order_number#55, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59] +Arguments: [cs_order_number#55 ASC NULLS FIRST, cs_item_sk#54 ASC NULLS FIRST], false, 0 (51) Scan parquet default.catalog_returns -Output [3]: [cr_item_sk#67, cr_order_number#68, cr_returned_date_sk#69] +Output [3]: [cr_item_sk#60, cr_order_number#61, cr_returned_date_sk#62] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_order_number), IsNotNull(cr_item_sk)] ReadSchema: struct (52) ColumnarToRow [codegen id : 18] -Input [3]: [cr_item_sk#67, cr_order_number#68, cr_returned_date_sk#69] +Input [3]: [cr_item_sk#60, cr_order_number#61, cr_returned_date_sk#62] (53) Filter [codegen id : 18] -Input [3]: [cr_item_sk#67, cr_order_number#68, cr_returned_date_sk#69] -Condition : (isnotnull(cr_order_number#68) AND isnotnull(cr_item_sk#67)) +Input [3]: [cr_item_sk#60, cr_order_number#61, cr_returned_date_sk#62] +Condition : (isnotnull(cr_order_number#61) AND isnotnull(cr_item_sk#60)) (54) Project [codegen id : 18] -Output [2]: [cr_item_sk#67, cr_order_number#68] -Input [3]: [cr_item_sk#67, cr_order_number#68, cr_returned_date_sk#69] +Output [2]: [cr_item_sk#60, cr_order_number#61] +Input [3]: [cr_item_sk#60, cr_order_number#61, cr_returned_date_sk#62] (55) Exchange -Input [2]: [cr_item_sk#67, cr_order_number#68] -Arguments: hashpartitioning(cr_order_number#68, cr_item_sk#67, 5), ENSURE_REQUIREMENTS, [id=#70] +Input [2]: [cr_item_sk#60, cr_order_number#61] +Arguments: hashpartitioning(cr_order_number#61, cr_item_sk#60, 5), ENSURE_REQUIREMENTS, [plan_id=8] (56) Sort [codegen id : 19] -Input [2]: [cr_item_sk#67, cr_order_number#68] -Arguments: [cr_order_number#68 ASC NULLS FIRST, cr_item_sk#67 ASC NULLS FIRST], false, 0 +Input [2]: [cr_item_sk#60, cr_order_number#61] +Arguments: [cr_order_number#61 ASC NULLS FIRST, cr_item_sk#60 ASC NULLS FIRST], false, 0 (57) SortMergeJoin [codegen id : 21] -Left keys [2]: [cs_order_number#61, cs_item_sk#60] -Right keys [2]: [cr_order_number#68, cr_item_sk#67] +Left keys [2]: [cs_order_number#55, cs_item_sk#54] +Right keys [2]: [cr_order_number#61, cr_item_sk#60] Join condition: None (58) Filter [codegen id : 21] -Input [9]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_order_number#61, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65, cr_item_sk#67, cr_order_number#68] -Condition : isnull(cr_order_number#68) +Input [9]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_order_number#55, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59, cr_item_sk#60, cr_order_number#61] +Condition : isnull(cr_order_number#61) (59) Project [codegen id : 21] -Output [6]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65] -Input [9]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_order_number#61, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65, cr_item_sk#67, cr_order_number#68] +Output [6]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59] +Input [9]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_order_number#55, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59, cr_item_sk#60, cr_order_number#61] (60) ReusedExchange [Reuses operator id: 74] -Output [2]: [d_date_sk#71, d_year#72] +Output [2]: [d_date_sk#63, d_year#64] (61) BroadcastHashJoin [codegen id : 21] -Left keys [1]: [cs_sold_date_sk#65] -Right keys [1]: [d_date_sk#71] +Left keys [1]: [cs_sold_date_sk#59] +Right keys [1]: [d_date_sk#63] Join condition: None (62) Project [codegen id : 21] -Output [6]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, d_year#72] -Input [8]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, cs_sold_date_sk#65, d_date_sk#71, d_year#72] +Output [6]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, d_year#64] +Input [8]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, cs_sold_date_sk#59, d_date_sk#63, d_year#64] (63) HashAggregate [codegen id : 21] -Input [6]: [cs_bill_customer_sk#59, cs_item_sk#60, cs_quantity#62, cs_wholesale_cost#63, cs_sales_price#64, d_year#72] -Keys [3]: [d_year#72, cs_item_sk#60, cs_bill_customer_sk#59] -Functions [3]: [partial_sum(cs_quantity#62), partial_sum(UnscaledValue(cs_wholesale_cost#63)), partial_sum(UnscaledValue(cs_sales_price#64))] -Aggregate Attributes [3]: [sum#73, sum#74, sum#75] -Results [6]: [d_year#72, cs_item_sk#60, cs_bill_customer_sk#59, sum#76, sum#77, sum#78] +Input [6]: [cs_bill_customer_sk#53, cs_item_sk#54, cs_quantity#56, cs_wholesale_cost#57, cs_sales_price#58, d_year#64] +Keys [3]: [d_year#64, cs_item_sk#54, cs_bill_customer_sk#53] +Functions [3]: [partial_sum(cs_quantity#56), partial_sum(UnscaledValue(cs_wholesale_cost#57)), partial_sum(UnscaledValue(cs_sales_price#58))] +Aggregate Attributes [3]: [sum#65, sum#66, sum#67] +Results [6]: [d_year#64, cs_item_sk#54, cs_bill_customer_sk#53, sum#68, sum#69, sum#70] (64) Exchange -Input [6]: [d_year#72, cs_item_sk#60, cs_bill_customer_sk#59, sum#76, sum#77, sum#78] -Arguments: hashpartitioning(d_year#72, cs_item_sk#60, cs_bill_customer_sk#59, 5), ENSURE_REQUIREMENTS, [id=#79] +Input [6]: [d_year#64, cs_item_sk#54, cs_bill_customer_sk#53, sum#68, sum#69, sum#70] +Arguments: hashpartitioning(d_year#64, cs_item_sk#54, cs_bill_customer_sk#53, 5), ENSURE_REQUIREMENTS, [plan_id=9] (65) HashAggregate [codegen id : 22] -Input [6]: [d_year#72, cs_item_sk#60, cs_bill_customer_sk#59, sum#76, sum#77, sum#78] -Keys [3]: [d_year#72, cs_item_sk#60, cs_bill_customer_sk#59] -Functions [3]: [sum(cs_quantity#62), sum(UnscaledValue(cs_wholesale_cost#63)), sum(UnscaledValue(cs_sales_price#64))] -Aggregate Attributes [3]: [sum(cs_quantity#62)#80, sum(UnscaledValue(cs_wholesale_cost#63))#81, sum(UnscaledValue(cs_sales_price#64))#82] -Results [6]: [d_year#72 AS cs_sold_year#83, cs_item_sk#60, cs_bill_customer_sk#59 AS cs_customer_sk#84, sum(cs_quantity#62)#80 AS cs_qty#85, MakeDecimal(sum(UnscaledValue(cs_wholesale_cost#63))#81,17,2) AS cs_wc#86, MakeDecimal(sum(UnscaledValue(cs_sales_price#64))#82,17,2) AS cs_sp#87] +Input [6]: [d_year#64, cs_item_sk#54, cs_bill_customer_sk#53, sum#68, sum#69, sum#70] +Keys [3]: [d_year#64, cs_item_sk#54, cs_bill_customer_sk#53] +Functions [3]: [sum(cs_quantity#56), sum(UnscaledValue(cs_wholesale_cost#57)), sum(UnscaledValue(cs_sales_price#58))] +Aggregate Attributes [3]: [sum(cs_quantity#56)#71, sum(UnscaledValue(cs_wholesale_cost#57))#72, sum(UnscaledValue(cs_sales_price#58))#73] +Results [6]: [d_year#64 AS cs_sold_year#74, cs_item_sk#54, cs_bill_customer_sk#53 AS cs_customer_sk#75, sum(cs_quantity#56)#71 AS cs_qty#76, MakeDecimal(sum(UnscaledValue(cs_wholesale_cost#57))#72,17,2) AS cs_wc#77, MakeDecimal(sum(UnscaledValue(cs_sales_price#58))#73,17,2) AS cs_sp#78] (66) Filter [codegen id : 22] -Input [6]: [cs_sold_year#83, cs_item_sk#60, cs_customer_sk#84, cs_qty#85, cs_wc#86, cs_sp#87] -Condition : (coalesce(cs_qty#85, 0) > 0) +Input [6]: [cs_sold_year#74, cs_item_sk#54, cs_customer_sk#75, cs_qty#76, cs_wc#77, cs_sp#78] +Condition : (coalesce(cs_qty#76, 0) > 0) (67) Sort [codegen id : 22] -Input [6]: [cs_sold_year#83, cs_item_sk#60, cs_customer_sk#84, cs_qty#85, cs_wc#86, cs_sp#87] -Arguments: [cs_sold_year#83 ASC NULLS FIRST, cs_item_sk#60 ASC NULLS FIRST, cs_customer_sk#84 ASC NULLS FIRST], false, 0 +Input [6]: [cs_sold_year#74, cs_item_sk#54, cs_customer_sk#75, cs_qty#76, cs_wc#77, cs_sp#78] +Arguments: [cs_sold_year#74 ASC NULLS FIRST, cs_item_sk#54 ASC NULLS FIRST, cs_customer_sk#75 ASC NULLS FIRST], false, 0 (68) SortMergeJoin [codegen id : 23] -Left keys [3]: [ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2] -Right keys [3]: [cs_sold_year#83, cs_item_sk#60, cs_customer_sk#84] +Left keys [3]: [ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2] +Right keys [3]: [cs_sold_year#74, cs_item_sk#54, cs_customer_sk#75] Join condition: None (69) Project [codegen id : 23] -Output [13]: [round((cast(ss_qty#27 as double) / cast(coalesce((ws_qty#56 + cs_qty#85), 1) as double)), 2) AS ratio#88, ss_qty#27 AS store_qty#89, ss_wc#28 AS store_wholesale_cost#90, ss_sp#29 AS store_sales_price#91, (coalesce(ws_qty#56, 0) + coalesce(cs_qty#85, 0)) AS other_chan_qty#92, CheckOverflow((promote_precision(cast(coalesce(ws_wc#57, 0.00) as decimal(18,2))) + promote_precision(cast(coalesce(cs_wc#86, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS other_chan_wholesale_cost#93, CheckOverflow((promote_precision(cast(coalesce(ws_sp#58, 0.00) as decimal(18,2))) + promote_precision(cast(coalesce(cs_sp#87, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS other_chan_sales_price#94, ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2, ss_qty#27, ss_wc#28, ss_sp#29] -Input [15]: [ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2, ss_qty#27, ss_wc#28, ss_sp#29, ws_qty#56, ws_wc#57, ws_sp#58, cs_sold_year#83, cs_item_sk#60, cs_customer_sk#84, cs_qty#85, cs_wc#86, cs_sp#87] +Output [13]: [round((cast(ss_qty#24 as double) / cast(coalesce((ws_qty#50 + cs_qty#76), 1) as double)), 2) AS ratio#79, ss_qty#24 AS store_qty#80, ss_wc#25 AS store_wholesale_cost#81, ss_sp#26 AS store_sales_price#82, (coalesce(ws_qty#50, 0) + coalesce(cs_qty#76, 0)) AS other_chan_qty#83, CheckOverflow((promote_precision(cast(coalesce(ws_wc#51, 0.00) as decimal(18,2))) + promote_precision(cast(coalesce(cs_wc#77, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS other_chan_wholesale_cost#84, CheckOverflow((promote_precision(cast(coalesce(ws_sp#52, 0.00) as decimal(18,2))) + promote_precision(cast(coalesce(cs_sp#78, 0.00) as decimal(18,2)))), DecimalType(18,2)) AS other_chan_sales_price#85, ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2, ss_qty#24, ss_wc#25, ss_sp#26] +Input [15]: [ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2, ss_qty#24, ss_wc#25, ss_sp#26, ws_qty#50, ws_wc#51, ws_sp#52, cs_sold_year#74, cs_item_sk#54, cs_customer_sk#75, cs_qty#76, cs_wc#77, cs_sp#78] (70) TakeOrderedAndProject -Input [13]: [ratio#88, store_qty#89, store_wholesale_cost#90, store_sales_price#91, other_chan_qty#92, other_chan_wholesale_cost#93, other_chan_sales_price#94, ss_sold_year#26, ss_item_sk#1, ss_customer_sk#2, ss_qty#27, ss_wc#28, ss_sp#29] -Arguments: 100, [ss_sold_year#26 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST, ss_customer_sk#2 ASC NULLS FIRST, ss_qty#27 DESC NULLS LAST, ss_wc#28 DESC NULLS LAST, ss_sp#29 DESC NULLS LAST, other_chan_qty#92 ASC NULLS FIRST, other_chan_wholesale_cost#93 ASC NULLS FIRST, other_chan_sales_price#94 ASC NULLS FIRST, ratio#88 ASC NULLS FIRST], [ratio#88, store_qty#89, store_wholesale_cost#90, store_sales_price#91, other_chan_qty#92, other_chan_wholesale_cost#93, other_chan_sales_price#94] +Input [13]: [ratio#79, store_qty#80, store_wholesale_cost#81, store_sales_price#82, other_chan_qty#83, other_chan_wholesale_cost#84, other_chan_sales_price#85, ss_sold_year#23, ss_item_sk#1, ss_customer_sk#2, ss_qty#24, ss_wc#25, ss_sp#26] +Arguments: 100, [ss_sold_year#23 ASC NULLS FIRST, ss_item_sk#1 ASC NULLS FIRST, ss_customer_sk#2 ASC NULLS FIRST, ss_qty#24 DESC NULLS LAST, ss_wc#25 DESC NULLS LAST, ss_sp#26 DESC NULLS LAST, other_chan_qty#83 ASC NULLS FIRST, other_chan_wholesale_cost#84 ASC NULLS FIRST, other_chan_sales_price#85 ASC NULLS FIRST, ratio#79 ASC NULLS FIRST], [ratio#79, store_qty#80, store_wholesale_cost#81, store_sales_price#82, other_chan_qty#83, other_chan_wholesale_cost#84, other_chan_sales_price#85] ===== Subqueries ===== @@ -399,25 +399,25 @@ BroadcastExchange (74) (71) Scan parquet default.date_dim -Output [2]: [d_date_sk#14, d_year#15] +Output [2]: [d_date_sk#12, d_year#13] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)] ReadSchema: struct (72) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#15] +Input [2]: [d_date_sk#12, d_year#13] (73) Filter [codegen id : 1] -Input [2]: [d_date_sk#14, d_year#15] -Condition : ((isnotnull(d_year#15) AND (d_year#15 = 2000)) AND isnotnull(d_date_sk#14)) +Input [2]: [d_date_sk#12, d_year#13] +Condition : ((isnotnull(d_year#13) AND (d_year#13 = 2000)) AND isnotnull(d_date_sk#12)) (74) BroadcastExchange -Input [2]: [d_date_sk#14, d_year#15] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#95] +Input [2]: [d_date_sk#12, d_year#13] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=10] -Subquery:2 Hosting operator id = 22 Hosting Expression = ws_sold_date_sk#36 IN dynamicpruning#8 +Subquery:2 Hosting operator id = 22 Hosting Expression = ws_sold_date_sk#33 IN dynamicpruning#8 -Subquery:3 Hosting operator id = 46 Hosting Expression = cs_sold_date_sk#65 IN dynamicpruning#8 +Subquery:3 Hosting operator id = 46 Hosting Expression = cs_sold_date_sk#59 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q80a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q80a.sf100/explain.txt index dfb4b68e02647..b18aae97cc2d4 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q80a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q80a.sf100/explain.txt @@ -220,626 +220,626 @@ Condition : ((((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotn (4) Exchange Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [id=#13] +Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: [ss_item_sk#1 ASC NULLS FIRST, ss_ticket_number#4 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_returns -Output [5]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17, sr_returned_date_sk#18] +Output [5]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16, sr_returned_date_sk#17] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [5]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17, sr_returned_date_sk#18] +Input [5]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16, sr_returned_date_sk#17] (8) Filter [codegen id : 3] -Input [5]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17, sr_returned_date_sk#18] -Condition : (isnotnull(sr_item_sk#14) AND isnotnull(sr_ticket_number#15)) +Input [5]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16, sr_returned_date_sk#17] +Condition : (isnotnull(sr_item_sk#13) AND isnotnull(sr_ticket_number#14)) (9) Project [codegen id : 3] -Output [4]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17] -Input [5]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17, sr_returned_date_sk#18] +Output [4]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16] +Input [5]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16, sr_returned_date_sk#17] (10) Exchange -Input [4]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17] -Arguments: hashpartitioning(sr_item_sk#14, sr_ticket_number#15, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [4]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16] +Arguments: hashpartitioning(sr_item_sk#13, sr_ticket_number#14, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [4]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17] -Arguments: [sr_item_sk#14 ASC NULLS FIRST, sr_ticket_number#15 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16] +Arguments: [sr_item_sk#13 ASC NULLS FIRST, sr_ticket_number#14 ASC NULLS FIRST], false, 0 (12) SortMergeJoin [codegen id : 9] Left keys [2]: [ss_item_sk#1, ss_ticket_number#4] -Right keys [2]: [sr_item_sk#14, sr_ticket_number#15] +Right keys [2]: [sr_item_sk#13, sr_ticket_number#14] Join condition: None (13) Project [codegen id : 9] -Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17] -Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17] +Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16] +Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16] (14) Scan parquet default.item -Output [2]: [i_item_sk#20, i_current_price#21] +Output [2]: [i_item_sk#18, i_current_price#19] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)] ReadSchema: struct (15) ColumnarToRow [codegen id : 5] -Input [2]: [i_item_sk#20, i_current_price#21] +Input [2]: [i_item_sk#18, i_current_price#19] (16) Filter [codegen id : 5] -Input [2]: [i_item_sk#20, i_current_price#21] -Condition : ((isnotnull(i_current_price#21) AND (i_current_price#21 > 50.00)) AND isnotnull(i_item_sk#20)) +Input [2]: [i_item_sk#18, i_current_price#19] +Condition : ((isnotnull(i_current_price#19) AND (i_current_price#19 > 50.00)) AND isnotnull(i_item_sk#18)) (17) Project [codegen id : 5] -Output [1]: [i_item_sk#20] -Input [2]: [i_item_sk#20, i_current_price#21] +Output [1]: [i_item_sk#18] +Input [2]: [i_item_sk#18, i_current_price#19] (18) BroadcastExchange -Input [1]: [i_item_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [i_item_sk#18] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3] (19) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#20] +Right keys [1]: [i_item_sk#18] Join condition: None (20) Project [codegen id : 9] -Output [7]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17] -Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17, i_item_sk#20] +Output [7]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16] +Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16, i_item_sk#18] (21) Scan parquet default.promotion -Output [2]: [p_promo_sk#23, p_channel_tv#24] +Output [2]: [p_promo_sk#20, p_channel_tv#21] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)] ReadSchema: struct (22) ColumnarToRow [codegen id : 6] -Input [2]: [p_promo_sk#23, p_channel_tv#24] +Input [2]: [p_promo_sk#20, p_channel_tv#21] (23) Filter [codegen id : 6] -Input [2]: [p_promo_sk#23, p_channel_tv#24] -Condition : ((isnotnull(p_channel_tv#24) AND (p_channel_tv#24 = N)) AND isnotnull(p_promo_sk#23)) +Input [2]: [p_promo_sk#20, p_channel_tv#21] +Condition : ((isnotnull(p_channel_tv#21) AND (p_channel_tv#21 = N)) AND isnotnull(p_promo_sk#20)) (24) Project [codegen id : 6] -Output [1]: [p_promo_sk#23] -Input [2]: [p_promo_sk#23, p_channel_tv#24] +Output [1]: [p_promo_sk#20] +Input [2]: [p_promo_sk#20, p_channel_tv#21] (25) BroadcastExchange -Input [1]: [p_promo_sk#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [p_promo_sk#20] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (26) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_promo_sk#3] -Right keys [1]: [p_promo_sk#23] +Right keys [1]: [p_promo_sk#20] Join condition: None (27) Project [codegen id : 9] -Output [6]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17] -Input [8]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17, p_promo_sk#23] +Output [6]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16] +Input [8]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16, p_promo_sk#20] (28) ReusedExchange [Reuses operator id: 221] -Output [1]: [d_date_sk#26] +Output [1]: [d_date_sk#22] (29) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_sold_date_sk#7] -Right keys [1]: [d_date_sk#26] +Right keys [1]: [d_date_sk#22] Join condition: None (30) Project [codegen id : 9] -Output [5]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#16, sr_net_loss#17] -Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17, d_date_sk#26] +Output [5]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#15, sr_net_loss#16] +Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16, d_date_sk#22] (31) Scan parquet default.store -Output [2]: [s_store_sk#27, s_store_id#28] +Output [2]: [s_store_sk#23, s_store_id#24] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (32) ColumnarToRow [codegen id : 8] -Input [2]: [s_store_sk#27, s_store_id#28] +Input [2]: [s_store_sk#23, s_store_id#24] (33) Filter [codegen id : 8] -Input [2]: [s_store_sk#27, s_store_id#28] -Condition : isnotnull(s_store_sk#27) +Input [2]: [s_store_sk#23, s_store_id#24] +Condition : isnotnull(s_store_sk#23) (34) BroadcastExchange -Input [2]: [s_store_sk#27, s_store_id#28] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#29] +Input [2]: [s_store_sk#23, s_store_id#24] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5] (35) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#2] -Right keys [1]: [s_store_sk#27] +Right keys [1]: [s_store_sk#23] Join condition: None (36) Project [codegen id : 9] -Output [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#16, sr_net_loss#17, s_store_id#28] -Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#16, sr_net_loss#17, s_store_sk#27, s_store_id#28] +Output [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#15, sr_net_loss#16, s_store_id#24] +Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#15, sr_net_loss#16, s_store_sk#23, s_store_id#24] (37) HashAggregate [codegen id : 9] -Input [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#16, sr_net_loss#17, s_store_id#28] -Keys [1]: [s_store_id#28] -Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#5)), partial_sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#30, sum#31, isEmpty#32, sum#33, isEmpty#34] -Results [6]: [s_store_id#28, sum#35, sum#36, isEmpty#37, sum#38, isEmpty#39] +Input [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#15, sr_net_loss#16, s_store_id#24] +Keys [1]: [s_store_id#24] +Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#5)), partial_sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#25, sum#26, isEmpty#27, sum#28, isEmpty#29] +Results [6]: [s_store_id#24, sum#30, sum#31, isEmpty#32, sum#33, isEmpty#34] (38) Exchange -Input [6]: [s_store_id#28, sum#35, sum#36, isEmpty#37, sum#38, isEmpty#39] -Arguments: hashpartitioning(s_store_id#28, 5), ENSURE_REQUIREMENTS, [id=#40] +Input [6]: [s_store_id#24, sum#30, sum#31, isEmpty#32, sum#33, isEmpty#34] +Arguments: hashpartitioning(s_store_id#24, 5), ENSURE_REQUIREMENTS, [plan_id=6] (39) HashAggregate [codegen id : 10] -Input [6]: [s_store_id#28, sum#35, sum#36, isEmpty#37, sum#38, isEmpty#39] -Keys [1]: [s_store_id#28] -Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#41, sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00))#42, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#43] -Results [5]: [store channel AS channel#44, concat(store, s_store_id#28) AS id#45, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#41,17,2) AS sales#46, sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00))#42 AS returns#47, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#43 AS profit#48] +Input [6]: [s_store_id#24, sum#30, sum#31, isEmpty#32, sum#33, isEmpty#34] +Keys [1]: [s_store_id#24] +Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#35, sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00))#36, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#37] +Results [5]: [store channel AS channel#38, concat(store, s_store_id#24) AS id#39, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#35,17,2) AS sales#40, sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00))#36 AS returns#41, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#37 AS profit#42] (40) Scan parquet default.catalog_sales -Output [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] +Output [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#55), dynamicpruningexpression(cs_sold_date_sk#55 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(cs_sold_date_sk#49), dynamicpruningexpression(cs_sold_date_sk#49 IN dynamicpruning#8)] PushedFilters: [IsNotNull(cs_catalog_page_sk), IsNotNull(cs_item_sk), IsNotNull(cs_promo_sk)] ReadSchema: struct (41) ColumnarToRow [codegen id : 11] -Input [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] +Input [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] (42) Filter [codegen id : 11] -Input [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] -Condition : ((((isnotnull(cs_catalog_page_sk#49) AND isnotnull(cs_item_sk#50)) AND isnotnull(cs_promo_sk#51)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#10], xxhash64(cs_item_sk#50, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#11, [id=#12], xxhash64(cs_promo_sk#51, 42))) +Input [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] +Condition : ((((isnotnull(cs_catalog_page_sk#43) AND isnotnull(cs_item_sk#44)) AND isnotnull(cs_promo_sk#45)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#10], xxhash64(cs_item_sk#44, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#11, [id=#12], xxhash64(cs_promo_sk#45, 42))) (43) Exchange -Input [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] -Arguments: hashpartitioning(cs_item_sk#50, cs_order_number#52, 5), ENSURE_REQUIREMENTS, [id=#56] +Input [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] +Arguments: hashpartitioning(cs_item_sk#44, cs_order_number#46, 5), ENSURE_REQUIREMENTS, [plan_id=7] (44) Sort [codegen id : 12] -Input [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] -Arguments: [cs_item_sk#50 ASC NULLS FIRST, cs_order_number#52 ASC NULLS FIRST], false, 0 +Input [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] +Arguments: [cs_item_sk#44 ASC NULLS FIRST, cs_order_number#46 ASC NULLS FIRST], false, 0 (45) Scan parquet default.catalog_returns -Output [5]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60, cr_returned_date_sk#61] +Output [5]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53, cr_returned_date_sk#54] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct (46) ColumnarToRow [codegen id : 13] -Input [5]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60, cr_returned_date_sk#61] +Input [5]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53, cr_returned_date_sk#54] (47) Filter [codegen id : 13] -Input [5]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60, cr_returned_date_sk#61] -Condition : (isnotnull(cr_item_sk#57) AND isnotnull(cr_order_number#58)) +Input [5]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53, cr_returned_date_sk#54] +Condition : (isnotnull(cr_item_sk#50) AND isnotnull(cr_order_number#51)) (48) Project [codegen id : 13] -Output [4]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60] -Input [5]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60, cr_returned_date_sk#61] +Output [4]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53] +Input [5]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53, cr_returned_date_sk#54] (49) Exchange -Input [4]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60] -Arguments: hashpartitioning(cr_item_sk#57, cr_order_number#58, 5), ENSURE_REQUIREMENTS, [id=#62] +Input [4]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53] +Arguments: hashpartitioning(cr_item_sk#50, cr_order_number#51, 5), ENSURE_REQUIREMENTS, [plan_id=8] (50) Sort [codegen id : 14] -Input [4]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60] -Arguments: [cr_item_sk#57 ASC NULLS FIRST, cr_order_number#58 ASC NULLS FIRST], false, 0 +Input [4]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53] +Arguments: [cr_item_sk#50 ASC NULLS FIRST, cr_order_number#51 ASC NULLS FIRST], false, 0 (51) SortMergeJoin [codegen id : 19] -Left keys [2]: [cs_item_sk#50, cs_order_number#52] -Right keys [2]: [cr_item_sk#57, cr_order_number#58] +Left keys [2]: [cs_item_sk#44, cs_order_number#46] +Right keys [2]: [cr_item_sk#50, cr_order_number#51] Join condition: None (52) Project [codegen id : 19] -Output [8]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60] -Input [11]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60] +Output [8]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53] +Input [11]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53] (53) ReusedExchange [Reuses operator id: 18] -Output [1]: [i_item_sk#63] +Output [1]: [i_item_sk#55] (54) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_item_sk#50] -Right keys [1]: [i_item_sk#63] +Left keys [1]: [cs_item_sk#44] +Right keys [1]: [i_item_sk#55] Join condition: None (55) Project [codegen id : 19] -Output [7]: [cs_catalog_page_sk#49, cs_promo_sk#51, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60] -Input [9]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60, i_item_sk#63] +Output [7]: [cs_catalog_page_sk#43, cs_promo_sk#45, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53] +Input [9]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53, i_item_sk#55] (56) ReusedExchange [Reuses operator id: 25] -Output [1]: [p_promo_sk#64] +Output [1]: [p_promo_sk#56] (57) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_promo_sk#51] -Right keys [1]: [p_promo_sk#64] +Left keys [1]: [cs_promo_sk#45] +Right keys [1]: [p_promo_sk#56] Join condition: None (58) Project [codegen id : 19] -Output [6]: [cs_catalog_page_sk#49, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60] -Input [8]: [cs_catalog_page_sk#49, cs_promo_sk#51, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60, p_promo_sk#64] +Output [6]: [cs_catalog_page_sk#43, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53] +Input [8]: [cs_catalog_page_sk#43, cs_promo_sk#45, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53, p_promo_sk#56] (59) ReusedExchange [Reuses operator id: 221] -Output [1]: [d_date_sk#65] +Output [1]: [d_date_sk#57] (60) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_sold_date_sk#55] -Right keys [1]: [d_date_sk#65] +Left keys [1]: [cs_sold_date_sk#49] +Right keys [1]: [d_date_sk#57] Join condition: None (61) Project [codegen id : 19] -Output [5]: [cs_catalog_page_sk#49, cs_ext_sales_price#53, cs_net_profit#54, cr_return_amount#59, cr_net_loss#60] -Input [7]: [cs_catalog_page_sk#49, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60, d_date_sk#65] +Output [5]: [cs_catalog_page_sk#43, cs_ext_sales_price#47, cs_net_profit#48, cr_return_amount#52, cr_net_loss#53] +Input [7]: [cs_catalog_page_sk#43, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53, d_date_sk#57] (62) Scan parquet default.catalog_page -Output [2]: [cp_catalog_page_sk#66, cp_catalog_page_id#67] +Output [2]: [cp_catalog_page_sk#58, cp_catalog_page_id#59] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_page] PushedFilters: [IsNotNull(cp_catalog_page_sk)] ReadSchema: struct (63) ColumnarToRow [codegen id : 18] -Input [2]: [cp_catalog_page_sk#66, cp_catalog_page_id#67] +Input [2]: [cp_catalog_page_sk#58, cp_catalog_page_id#59] (64) Filter [codegen id : 18] -Input [2]: [cp_catalog_page_sk#66, cp_catalog_page_id#67] -Condition : isnotnull(cp_catalog_page_sk#66) +Input [2]: [cp_catalog_page_sk#58, cp_catalog_page_id#59] +Condition : isnotnull(cp_catalog_page_sk#58) (65) BroadcastExchange -Input [2]: [cp_catalog_page_sk#66, cp_catalog_page_id#67] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#68] +Input [2]: [cp_catalog_page_sk#58, cp_catalog_page_id#59] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] (66) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_catalog_page_sk#49] -Right keys [1]: [cp_catalog_page_sk#66] +Left keys [1]: [cs_catalog_page_sk#43] +Right keys [1]: [cp_catalog_page_sk#58] Join condition: None (67) Project [codegen id : 19] -Output [5]: [cs_ext_sales_price#53, cs_net_profit#54, cr_return_amount#59, cr_net_loss#60, cp_catalog_page_id#67] -Input [7]: [cs_catalog_page_sk#49, cs_ext_sales_price#53, cs_net_profit#54, cr_return_amount#59, cr_net_loss#60, cp_catalog_page_sk#66, cp_catalog_page_id#67] +Output [5]: [cs_ext_sales_price#47, cs_net_profit#48, cr_return_amount#52, cr_net_loss#53, cp_catalog_page_id#59] +Input [7]: [cs_catalog_page_sk#43, cs_ext_sales_price#47, cs_net_profit#48, cr_return_amount#52, cr_net_loss#53, cp_catalog_page_sk#58, cp_catalog_page_id#59] (68) HashAggregate [codegen id : 19] -Input [5]: [cs_ext_sales_price#53, cs_net_profit#54, cr_return_amount#59, cr_net_loss#60, cp_catalog_page_id#67] -Keys [1]: [cp_catalog_page_id#67] -Functions [3]: [partial_sum(UnscaledValue(cs_ext_sales_price#53)), partial_sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#69, sum#70, isEmpty#71, sum#72, isEmpty#73] -Results [6]: [cp_catalog_page_id#67, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] +Input [5]: [cs_ext_sales_price#47, cs_net_profit#48, cr_return_amount#52, cr_net_loss#53, cp_catalog_page_id#59] +Keys [1]: [cp_catalog_page_id#59] +Functions [3]: [partial_sum(UnscaledValue(cs_ext_sales_price#47)), partial_sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#60, sum#61, isEmpty#62, sum#63, isEmpty#64] +Results [6]: [cp_catalog_page_id#59, sum#65, sum#66, isEmpty#67, sum#68, isEmpty#69] (69) Exchange -Input [6]: [cp_catalog_page_id#67, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -Arguments: hashpartitioning(cp_catalog_page_id#67, 5), ENSURE_REQUIREMENTS, [id=#79] +Input [6]: [cp_catalog_page_id#59, sum#65, sum#66, isEmpty#67, sum#68, isEmpty#69] +Arguments: hashpartitioning(cp_catalog_page_id#59, 5), ENSURE_REQUIREMENTS, [plan_id=10] (70) HashAggregate [codegen id : 20] -Input [6]: [cp_catalog_page_id#67, sum#74, sum#75, isEmpty#76, sum#77, isEmpty#78] -Keys [1]: [cp_catalog_page_id#67] -Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#53)), sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#53))#80, sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00))#81, sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#82] -Results [5]: [catalog channel AS channel#83, concat(catalog_page, cp_catalog_page_id#67) AS id#84, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#53))#80,17,2) AS sales#85, sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00))#81 AS returns#86, sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#82 AS profit#87] +Input [6]: [cp_catalog_page_id#59, sum#65, sum#66, isEmpty#67, sum#68, isEmpty#69] +Keys [1]: [cp_catalog_page_id#59] +Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#47)), sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#47))#70, sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00))#71, sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#72] +Results [5]: [catalog channel AS channel#73, concat(catalog_page, cp_catalog_page_id#59) AS id#74, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#47))#70,17,2) AS sales#75, sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00))#71 AS returns#76, sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#72 AS profit#77] (71) Scan parquet default.web_sales -Output [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] +Output [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#94), dynamicpruningexpression(ws_sold_date_sk#94 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ws_sold_date_sk#84), dynamicpruningexpression(ws_sold_date_sk#84 IN dynamicpruning#8)] PushedFilters: [IsNotNull(ws_web_site_sk), IsNotNull(ws_item_sk), IsNotNull(ws_promo_sk)] ReadSchema: struct (72) ColumnarToRow [codegen id : 21] -Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] +Input [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] (73) Filter [codegen id : 21] -Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -Condition : ((((isnotnull(ws_web_site_sk#89) AND isnotnull(ws_item_sk#88)) AND isnotnull(ws_promo_sk#90)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#10], xxhash64(ws_item_sk#88, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#11, [id=#12], xxhash64(ws_promo_sk#90, 42))) +Input [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] +Condition : ((((isnotnull(ws_web_site_sk#79) AND isnotnull(ws_item_sk#78)) AND isnotnull(ws_promo_sk#80)) AND might_contain(ReusedSubquery Subquery scalar-subquery#9, [id=#10], xxhash64(ws_item_sk#78, 42))) AND might_contain(ReusedSubquery Subquery scalar-subquery#11, [id=#12], xxhash64(ws_promo_sk#80, 42))) (74) Exchange -Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -Arguments: hashpartitioning(ws_item_sk#88, ws_order_number#91, 5), ENSURE_REQUIREMENTS, [id=#95] +Input [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] +Arguments: hashpartitioning(ws_item_sk#78, ws_order_number#81, 5), ENSURE_REQUIREMENTS, [plan_id=11] (75) Sort [codegen id : 22] -Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -Arguments: [ws_item_sk#88 ASC NULLS FIRST, ws_order_number#91 ASC NULLS FIRST], false, 0 +Input [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] +Arguments: [ws_item_sk#78 ASC NULLS FIRST, ws_order_number#81 ASC NULLS FIRST], false, 0 (76) Scan parquet default.web_returns -Output [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] +Output [5]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88, wr_returned_date_sk#89] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_order_number)] ReadSchema: struct (77) ColumnarToRow [codegen id : 23] -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] +Input [5]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88, wr_returned_date_sk#89] (78) Filter [codegen id : 23] -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] -Condition : (isnotnull(wr_item_sk#96) AND isnotnull(wr_order_number#97)) +Input [5]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88, wr_returned_date_sk#89] +Condition : (isnotnull(wr_item_sk#85) AND isnotnull(wr_order_number#86)) (79) Project [codegen id : 23] -Output [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -Input [5]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99, wr_returned_date_sk#100] +Output [4]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88] +Input [5]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88, wr_returned_date_sk#89] (80) Exchange -Input [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -Arguments: hashpartitioning(wr_item_sk#96, wr_order_number#97, 5), ENSURE_REQUIREMENTS, [id=#101] +Input [4]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88] +Arguments: hashpartitioning(wr_item_sk#85, wr_order_number#86, 5), ENSURE_REQUIREMENTS, [plan_id=12] (81) Sort [codegen id : 24] -Input [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -Arguments: [wr_item_sk#96 ASC NULLS FIRST, wr_order_number#97 ASC NULLS FIRST], false, 0 +Input [4]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88] +Arguments: [wr_item_sk#85 ASC NULLS FIRST, wr_order_number#86 ASC NULLS FIRST], false, 0 (82) SortMergeJoin [codegen id : 29] -Left keys [2]: [ws_item_sk#88, ws_order_number#91] -Right keys [2]: [wr_item_sk#96, wr_order_number#97] +Left keys [2]: [ws_item_sk#78, ws_order_number#81] +Right keys [2]: [wr_item_sk#85, wr_order_number#86] Join condition: None (83) Project [codegen id : 29] -Output [8]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] -Input [11]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] +Output [8]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88] +Input [11]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88] (84) ReusedExchange [Reuses operator id: 18] -Output [1]: [i_item_sk#102] +Output [1]: [i_item_sk#90] (85) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_item_sk#88] -Right keys [1]: [i_item_sk#102] +Left keys [1]: [ws_item_sk#78] +Right keys [1]: [i_item_sk#90] Join condition: None (86) Project [codegen id : 29] -Output [7]: [ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] -Input [9]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, i_item_sk#102] +Output [7]: [ws_web_site_sk#79, ws_promo_sk#80, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88] +Input [9]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88, i_item_sk#90] (87) ReusedExchange [Reuses operator id: 25] -Output [1]: [p_promo_sk#103] +Output [1]: [p_promo_sk#91] (88) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_promo_sk#90] -Right keys [1]: [p_promo_sk#103] +Left keys [1]: [ws_promo_sk#80] +Right keys [1]: [p_promo_sk#91] Join condition: None (89) Project [codegen id : 29] -Output [6]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] -Input [8]: [ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, p_promo_sk#103] +Output [6]: [ws_web_site_sk#79, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88] +Input [8]: [ws_web_site_sk#79, ws_promo_sk#80, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88, p_promo_sk#91] (90) ReusedExchange [Reuses operator id: 221] -Output [1]: [d_date_sk#104] +Output [1]: [d_date_sk#92] (91) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_sold_date_sk#94] -Right keys [1]: [d_date_sk#104] +Left keys [1]: [ws_sold_date_sk#84] +Right keys [1]: [d_date_sk#92] Join condition: None (92) Project [codegen id : 29] -Output [5]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99] -Input [7]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, d_date_sk#104] +Output [5]: [ws_web_site_sk#79, ws_ext_sales_price#82, ws_net_profit#83, wr_return_amt#87, wr_net_loss#88] +Input [7]: [ws_web_site_sk#79, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88, d_date_sk#92] (93) Scan parquet default.web_site -Output [2]: [web_site_sk#105, web_site_id#106] +Output [2]: [web_site_sk#93, web_site_id#94] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_site_sk)] ReadSchema: struct (94) ColumnarToRow [codegen id : 28] -Input [2]: [web_site_sk#105, web_site_id#106] +Input [2]: [web_site_sk#93, web_site_id#94] (95) Filter [codegen id : 28] -Input [2]: [web_site_sk#105, web_site_id#106] -Condition : isnotnull(web_site_sk#105) +Input [2]: [web_site_sk#93, web_site_id#94] +Condition : isnotnull(web_site_sk#93) (96) BroadcastExchange -Input [2]: [web_site_sk#105, web_site_id#106] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#107] +Input [2]: [web_site_sk#93, web_site_id#94] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=13] (97) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_web_site_sk#89] -Right keys [1]: [web_site_sk#105] +Left keys [1]: [ws_web_site_sk#79] +Right keys [1]: [web_site_sk#93] Join condition: None (98) Project [codegen id : 29] -Output [5]: [ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99, web_site_id#106] -Input [7]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99, web_site_sk#105, web_site_id#106] +Output [5]: [ws_ext_sales_price#82, ws_net_profit#83, wr_return_amt#87, wr_net_loss#88, web_site_id#94] +Input [7]: [ws_web_site_sk#79, ws_ext_sales_price#82, ws_net_profit#83, wr_return_amt#87, wr_net_loss#88, web_site_sk#93, web_site_id#94] (99) HashAggregate [codegen id : 29] -Input [5]: [ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99, web_site_id#106] -Keys [1]: [web_site_id#106] -Functions [3]: [partial_sum(UnscaledValue(ws_ext_sales_price#92)), partial_sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#108, sum#109, isEmpty#110, sum#111, isEmpty#112] -Results [6]: [web_site_id#106, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117] +Input [5]: [ws_ext_sales_price#82, ws_net_profit#83, wr_return_amt#87, wr_net_loss#88, web_site_id#94] +Keys [1]: [web_site_id#94] +Functions [3]: [partial_sum(UnscaledValue(ws_ext_sales_price#82)), partial_sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#95, sum#96, isEmpty#97, sum#98, isEmpty#99] +Results [6]: [web_site_id#94, sum#100, sum#101, isEmpty#102, sum#103, isEmpty#104] (100) Exchange -Input [6]: [web_site_id#106, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117] -Arguments: hashpartitioning(web_site_id#106, 5), ENSURE_REQUIREMENTS, [id=#118] +Input [6]: [web_site_id#94, sum#100, sum#101, isEmpty#102, sum#103, isEmpty#104] +Arguments: hashpartitioning(web_site_id#94, 5), ENSURE_REQUIREMENTS, [plan_id=14] (101) HashAggregate [codegen id : 30] -Input [6]: [web_site_id#106, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117] -Keys [1]: [web_site_id#106] -Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#92)), sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#92))#119, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#120, sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#121] -Results [5]: [web channel AS channel#122, concat(web_site, web_site_id#106) AS id#123, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#92))#119,17,2) AS sales#124, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#120 AS returns#125, sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#121 AS profit#126] +Input [6]: [web_site_id#94, sum#100, sum#101, isEmpty#102, sum#103, isEmpty#104] +Keys [1]: [web_site_id#94] +Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#82)), sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#82))#105, sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00))#106, sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#107] +Results [5]: [web channel AS channel#108, concat(web_site, web_site_id#94) AS id#109, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#82))#105,17,2) AS sales#110, sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00))#106 AS returns#111, sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#107 AS profit#112] (102) Union (103) HashAggregate [codegen id : 31] -Input [5]: [channel#44, id#45, sales#46, returns#47, profit#48] -Keys [2]: [channel#44, id#45] -Functions [3]: [partial_sum(sales#46), partial_sum(returns#47), partial_sum(profit#48)] -Aggregate Attributes [6]: [sum#127, isEmpty#128, sum#129, isEmpty#130, sum#131, isEmpty#132] -Results [8]: [channel#44, id#45, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] +Input [5]: [channel#38, id#39, sales#40, returns#41, profit#42] +Keys [2]: [channel#38, id#39] +Functions [3]: [partial_sum(sales#40), partial_sum(returns#41), partial_sum(profit#42)] +Aggregate Attributes [6]: [sum#113, isEmpty#114, sum#115, isEmpty#116, sum#117, isEmpty#118] +Results [8]: [channel#38, id#39, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] (104) Exchange -Input [8]: [channel#44, id#45, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] -Arguments: hashpartitioning(channel#44, id#45, 5), ENSURE_REQUIREMENTS, [id=#139] +Input [8]: [channel#38, id#39, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] +Arguments: hashpartitioning(channel#38, id#39, 5), ENSURE_REQUIREMENTS, [plan_id=15] (105) HashAggregate [codegen id : 32] -Input [8]: [channel#44, id#45, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] -Keys [2]: [channel#44, id#45] -Functions [3]: [sum(sales#46), sum(returns#47), sum(profit#48)] -Aggregate Attributes [3]: [sum(sales#46)#140, sum(returns#47)#141, sum(profit#48)#142] -Results [5]: [channel#44, id#45, cast(sum(sales#46)#140 as decimal(37,2)) AS sales#143, cast(sum(returns#47)#141 as decimal(38,2)) AS returns#144, cast(sum(profit#48)#142 as decimal(38,2)) AS profit#145] +Input [8]: [channel#38, id#39, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] +Keys [2]: [channel#38, id#39] +Functions [3]: [sum(sales#40), sum(returns#41), sum(profit#42)] +Aggregate Attributes [3]: [sum(sales#40)#125, sum(returns#41)#126, sum(profit#42)#127] +Results [5]: [channel#38, id#39, cast(sum(sales#40)#125 as decimal(37,2)) AS sales#128, cast(sum(returns#41)#126 as decimal(38,2)) AS returns#129, cast(sum(profit#42)#127 as decimal(38,2)) AS profit#130] (106) ReusedExchange [Reuses operator id: 38] -Output [6]: [s_store_id#28, sum#146, sum#147, isEmpty#148, sum#149, isEmpty#150] +Output [6]: [s_store_id#24, sum#131, sum#132, isEmpty#133, sum#134, isEmpty#135] (107) HashAggregate [codegen id : 42] -Input [6]: [s_store_id#28, sum#146, sum#147, isEmpty#148, sum#149, isEmpty#150] -Keys [1]: [s_store_id#28] -Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#41, sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00))#42, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#43] -Results [5]: [store channel AS channel#44, concat(store, s_store_id#28) AS id#45, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#41,17,2) AS sales#46, sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00))#42 AS returns#47, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#43 AS profit#48] +Input [6]: [s_store_id#24, sum#131, sum#132, isEmpty#133, sum#134, isEmpty#135] +Keys [1]: [s_store_id#24] +Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#35, sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00))#36, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#37] +Results [5]: [store channel AS channel#38, concat(store, s_store_id#24) AS id#39, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#35,17,2) AS sales#40, sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00))#36 AS returns#41, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#37 AS profit#42] (108) ReusedExchange [Reuses operator id: 69] -Output [6]: [cp_catalog_page_id#67, sum#151, sum#152, isEmpty#153, sum#154, isEmpty#155] +Output [6]: [cp_catalog_page_id#59, sum#136, sum#137, isEmpty#138, sum#139, isEmpty#140] (109) HashAggregate [codegen id : 52] -Input [6]: [cp_catalog_page_id#67, sum#151, sum#152, isEmpty#153, sum#154, isEmpty#155] -Keys [1]: [cp_catalog_page_id#67] -Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#53)), sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#53))#80, sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00))#81, sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#82] -Results [5]: [catalog channel AS channel#83, concat(catalog_page, cp_catalog_page_id#67) AS id#84, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#53))#80,17,2) AS sales#85, sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00))#81 AS returns#86, sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#82 AS profit#87] +Input [6]: [cp_catalog_page_id#59, sum#136, sum#137, isEmpty#138, sum#139, isEmpty#140] +Keys [1]: [cp_catalog_page_id#59] +Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#47)), sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#47))#70, sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00))#71, sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#72] +Results [5]: [catalog channel AS channel#73, concat(catalog_page, cp_catalog_page_id#59) AS id#74, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#47))#70,17,2) AS sales#75, sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00))#71 AS returns#76, sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#72 AS profit#77] (110) Scan parquet default.web_sales -Output [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] +Output [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#94), dynamicpruningexpression(ws_sold_date_sk#94 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ws_sold_date_sk#84), dynamicpruningexpression(ws_sold_date_sk#84 IN dynamicpruning#8)] PushedFilters: [IsNotNull(ws_web_site_sk), IsNotNull(ws_item_sk), IsNotNull(ws_promo_sk)] ReadSchema: struct (111) ColumnarToRow [codegen id : 53] -Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] +Input [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] (112) Filter [codegen id : 53] -Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -Condition : ((isnotnull(ws_web_site_sk#89) AND isnotnull(ws_item_sk#88)) AND isnotnull(ws_promo_sk#90)) +Input [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] +Condition : ((isnotnull(ws_web_site_sk#79) AND isnotnull(ws_item_sk#78)) AND isnotnull(ws_promo_sk#80)) (113) Exchange -Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -Arguments: hashpartitioning(ws_item_sk#88, ws_order_number#91, 5), ENSURE_REQUIREMENTS, [id=#156] +Input [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] +Arguments: hashpartitioning(ws_item_sk#78, ws_order_number#81, 5), ENSURE_REQUIREMENTS, [plan_id=16] (114) Sort [codegen id : 54] -Input [7]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94] -Arguments: [ws_item_sk#88 ASC NULLS FIRST, ws_order_number#91 ASC NULLS FIRST], false, 0 +Input [7]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84] +Arguments: [ws_item_sk#78 ASC NULLS FIRST, ws_order_number#81 ASC NULLS FIRST], false, 0 (115) ReusedExchange [Reuses operator id: 80] -Output [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] +Output [4]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88] (116) Sort [codegen id : 56] -Input [4]: [wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] -Arguments: [wr_item_sk#96 ASC NULLS FIRST, wr_order_number#97 ASC NULLS FIRST], false, 0 +Input [4]: [wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88] +Arguments: [wr_item_sk#85 ASC NULLS FIRST, wr_order_number#86 ASC NULLS FIRST], false, 0 (117) SortMergeJoin [codegen id : 61] -Left keys [2]: [ws_item_sk#88, ws_order_number#91] -Right keys [2]: [wr_item_sk#96, wr_order_number#97] +Left keys [2]: [ws_item_sk#78, ws_order_number#81] +Right keys [2]: [wr_item_sk#85, wr_order_number#86] Join condition: None (118) Project [codegen id : 61] -Output [8]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] -Input [11]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_order_number#91, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_item_sk#96, wr_order_number#97, wr_return_amt#98, wr_net_loss#99] +Output [8]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88] +Input [11]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_order_number#81, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_item_sk#85, wr_order_number#86, wr_return_amt#87, wr_net_loss#88] (119) ReusedExchange [Reuses operator id: 18] -Output [1]: [i_item_sk#102] +Output [1]: [i_item_sk#90] (120) BroadcastHashJoin [codegen id : 61] -Left keys [1]: [ws_item_sk#88] -Right keys [1]: [i_item_sk#102] +Left keys [1]: [ws_item_sk#78] +Right keys [1]: [i_item_sk#90] Join condition: None (121) Project [codegen id : 61] -Output [7]: [ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] -Input [9]: [ws_item_sk#88, ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, i_item_sk#102] +Output [7]: [ws_web_site_sk#79, ws_promo_sk#80, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88] +Input [9]: [ws_item_sk#78, ws_web_site_sk#79, ws_promo_sk#80, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88, i_item_sk#90] (122) ReusedExchange [Reuses operator id: 25] -Output [1]: [p_promo_sk#103] +Output [1]: [p_promo_sk#91] (123) BroadcastHashJoin [codegen id : 61] -Left keys [1]: [ws_promo_sk#90] -Right keys [1]: [p_promo_sk#103] +Left keys [1]: [ws_promo_sk#80] +Right keys [1]: [p_promo_sk#91] Join condition: None (124) Project [codegen id : 61] -Output [6]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99] -Input [8]: [ws_web_site_sk#89, ws_promo_sk#90, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, p_promo_sk#103] +Output [6]: [ws_web_site_sk#79, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88] +Input [8]: [ws_web_site_sk#79, ws_promo_sk#80, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88, p_promo_sk#91] (125) ReusedExchange [Reuses operator id: 221] -Output [1]: [d_date_sk#104] +Output [1]: [d_date_sk#92] (126) BroadcastHashJoin [codegen id : 61] -Left keys [1]: [ws_sold_date_sk#94] -Right keys [1]: [d_date_sk#104] +Left keys [1]: [ws_sold_date_sk#84] +Right keys [1]: [d_date_sk#92] Join condition: None (127) Project [codegen id : 61] -Output [5]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99] -Input [7]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, ws_sold_date_sk#94, wr_return_amt#98, wr_net_loss#99, d_date_sk#104] +Output [5]: [ws_web_site_sk#79, ws_ext_sales_price#82, ws_net_profit#83, wr_return_amt#87, wr_net_loss#88] +Input [7]: [ws_web_site_sk#79, ws_ext_sales_price#82, ws_net_profit#83, ws_sold_date_sk#84, wr_return_amt#87, wr_net_loss#88, d_date_sk#92] (128) ReusedExchange [Reuses operator id: 96] -Output [2]: [web_site_sk#105, web_site_id#106] +Output [2]: [web_site_sk#93, web_site_id#94] (129) BroadcastHashJoin [codegen id : 61] -Left keys [1]: [ws_web_site_sk#89] -Right keys [1]: [web_site_sk#105] +Left keys [1]: [ws_web_site_sk#79] +Right keys [1]: [web_site_sk#93] Join condition: None (130) Project [codegen id : 61] -Output [5]: [ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99, web_site_id#106] -Input [7]: [ws_web_site_sk#89, ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99, web_site_sk#105, web_site_id#106] +Output [5]: [ws_ext_sales_price#82, ws_net_profit#83, wr_return_amt#87, wr_net_loss#88, web_site_id#94] +Input [7]: [ws_web_site_sk#79, ws_ext_sales_price#82, ws_net_profit#83, wr_return_amt#87, wr_net_loss#88, web_site_sk#93, web_site_id#94] (131) HashAggregate [codegen id : 61] -Input [5]: [ws_ext_sales_price#92, ws_net_profit#93, wr_return_amt#98, wr_net_loss#99, web_site_id#106] -Keys [1]: [web_site_id#106] -Functions [3]: [partial_sum(UnscaledValue(ws_ext_sales_price#92)), partial_sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#157, sum#158, isEmpty#159, sum#160, isEmpty#161] -Results [6]: [web_site_id#106, sum#162, sum#163, isEmpty#164, sum#165, isEmpty#166] +Input [5]: [ws_ext_sales_price#82, ws_net_profit#83, wr_return_amt#87, wr_net_loss#88, web_site_id#94] +Keys [1]: [web_site_id#94] +Functions [3]: [partial_sum(UnscaledValue(ws_ext_sales_price#82)), partial_sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#141, sum#142, isEmpty#143, sum#144, isEmpty#145] +Results [6]: [web_site_id#94, sum#146, sum#147, isEmpty#148, sum#149, isEmpty#150] (132) Exchange -Input [6]: [web_site_id#106, sum#162, sum#163, isEmpty#164, sum#165, isEmpty#166] -Arguments: hashpartitioning(web_site_id#106, 5), ENSURE_REQUIREMENTS, [id=#167] +Input [6]: [web_site_id#94, sum#146, sum#147, isEmpty#148, sum#149, isEmpty#150] +Arguments: hashpartitioning(web_site_id#94, 5), ENSURE_REQUIREMENTS, [plan_id=17] (133) HashAggregate [codegen id : 62] -Input [6]: [web_site_id#106, sum#162, sum#163, isEmpty#164, sum#165, isEmpty#166] -Keys [1]: [web_site_id#106] -Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#92)), sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#92))#119, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#120, sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#121] -Results [5]: [web channel AS channel#122, concat(web_site, web_site_id#106) AS id#123, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#92))#119,17,2) AS sales#124, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#120 AS returns#125, sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#121 AS profit#126] +Input [6]: [web_site_id#94, sum#146, sum#147, isEmpty#148, sum#149, isEmpty#150] +Keys [1]: [web_site_id#94] +Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#82)), sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#82))#105, sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00))#106, sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#107] +Results [5]: [web channel AS channel#108, concat(web_site, web_site_id#94) AS id#109, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#82))#105,17,2) AS sales#110, sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00))#106 AS returns#111, sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#107 AS profit#112] (134) Union (135) HashAggregate [codegen id : 63] -Input [5]: [channel#44, id#45, sales#46, returns#47, profit#48] -Keys [2]: [channel#44, id#45] -Functions [3]: [partial_sum(sales#46), partial_sum(returns#47), partial_sum(profit#48)] -Aggregate Attributes [6]: [sum#127, isEmpty#128, sum#129, isEmpty#130, sum#131, isEmpty#132] -Results [8]: [channel#44, id#45, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] +Input [5]: [channel#38, id#39, sales#40, returns#41, profit#42] +Keys [2]: [channel#38, id#39] +Functions [3]: [partial_sum(sales#40), partial_sum(returns#41), partial_sum(profit#42)] +Aggregate Attributes [6]: [sum#113, isEmpty#114, sum#115, isEmpty#116, sum#117, isEmpty#118] +Results [8]: [channel#38, id#39, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] (136) Exchange -Input [8]: [channel#44, id#45, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] -Arguments: hashpartitioning(channel#44, id#45, 5), ENSURE_REQUIREMENTS, [id=#168] +Input [8]: [channel#38, id#39, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] +Arguments: hashpartitioning(channel#38, id#39, 5), ENSURE_REQUIREMENTS, [plan_id=18] (137) HashAggregate [codegen id : 64] -Input [8]: [channel#44, id#45, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] -Keys [2]: [channel#44, id#45] -Functions [3]: [sum(sales#46), sum(returns#47), sum(profit#48)] -Aggregate Attributes [3]: [sum(sales#46)#140, sum(returns#47)#141, sum(profit#48)#142] -Results [4]: [channel#44, sum(sales#46)#140 AS sales#169, sum(returns#47)#141 AS returns#170, sum(profit#48)#142 AS profit#171] +Input [8]: [channel#38, id#39, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] +Keys [2]: [channel#38, id#39] +Functions [3]: [sum(sales#40), sum(returns#41), sum(profit#42)] +Aggregate Attributes [3]: [sum(sales#40)#125, sum(returns#41)#126, sum(profit#42)#127] +Results [4]: [channel#38, sum(sales#40)#125 AS sales#151, sum(returns#41)#126 AS returns#152, sum(profit#42)#127 AS profit#153] (138) HashAggregate [codegen id : 64] -Input [4]: [channel#44, sales#169, returns#170, profit#171] -Keys [1]: [channel#44] -Functions [3]: [partial_sum(sales#169), partial_sum(returns#170), partial_sum(profit#171)] -Aggregate Attributes [6]: [sum#172, isEmpty#173, sum#174, isEmpty#175, sum#176, isEmpty#177] -Results [7]: [channel#44, sum#178, isEmpty#179, sum#180, isEmpty#181, sum#182, isEmpty#183] +Input [4]: [channel#38, sales#151, returns#152, profit#153] +Keys [1]: [channel#38] +Functions [3]: [partial_sum(sales#151), partial_sum(returns#152), partial_sum(profit#153)] +Aggregate Attributes [6]: [sum#154, isEmpty#155, sum#156, isEmpty#157, sum#158, isEmpty#159] +Results [7]: [channel#38, sum#160, isEmpty#161, sum#162, isEmpty#163, sum#164, isEmpty#165] (139) Exchange -Input [7]: [channel#44, sum#178, isEmpty#179, sum#180, isEmpty#181, sum#182, isEmpty#183] -Arguments: hashpartitioning(channel#44, 5), ENSURE_REQUIREMENTS, [id=#184] +Input [7]: [channel#38, sum#160, isEmpty#161, sum#162, isEmpty#163, sum#164, isEmpty#165] +Arguments: hashpartitioning(channel#38, 5), ENSURE_REQUIREMENTS, [plan_id=19] (140) HashAggregate [codegen id : 65] -Input [7]: [channel#44, sum#178, isEmpty#179, sum#180, isEmpty#181, sum#182, isEmpty#183] -Keys [1]: [channel#44] -Functions [3]: [sum(sales#169), sum(returns#170), sum(profit#171)] -Aggregate Attributes [3]: [sum(sales#169)#185, sum(returns#170)#186, sum(profit#171)#187] -Results [5]: [channel#44, null AS id#188, sum(sales#169)#185 AS sales#189, sum(returns#170)#186 AS returns#190, sum(profit#171)#187 AS profit#191] +Input [7]: [channel#38, sum#160, isEmpty#161, sum#162, isEmpty#163, sum#164, isEmpty#165] +Keys [1]: [channel#38] +Functions [3]: [sum(sales#151), sum(returns#152), sum(profit#153)] +Aggregate Attributes [3]: [sum(sales#151)#166, sum(returns#152)#167, sum(profit#153)#168] +Results [5]: [channel#38, null AS id#169, sum(sales#151)#166 AS sales#170, sum(returns#152)#167 AS returns#171, sum(profit#153)#168 AS profit#172] (141) Scan parquet default.store_sales Output [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] @@ -858,270 +858,270 @@ Condition : ((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnul (144) Exchange Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [id=#192] +Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [plan_id=20] (145) Sort [codegen id : 67] Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: [ss_item_sk#1 ASC NULLS FIRST, ss_ticket_number#4 ASC NULLS FIRST], false, 0 (146) ReusedExchange [Reuses operator id: 10] -Output [4]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17] +Output [4]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16] (147) Sort [codegen id : 69] -Input [4]: [sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17] -Arguments: [sr_item_sk#14 ASC NULLS FIRST, sr_ticket_number#15 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16] +Arguments: [sr_item_sk#13 ASC NULLS FIRST, sr_ticket_number#14 ASC NULLS FIRST], false, 0 (148) SortMergeJoin [codegen id : 74] Left keys [2]: [ss_item_sk#1, ss_ticket_number#4] -Right keys [2]: [sr_item_sk#14, sr_ticket_number#15] +Right keys [2]: [sr_item_sk#13, sr_ticket_number#14] Join condition: None (149) Project [codegen id : 74] -Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17] -Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#14, sr_ticket_number#15, sr_return_amt#16, sr_net_loss#17] +Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16] +Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#13, sr_ticket_number#14, sr_return_amt#15, sr_net_loss#16] (150) ReusedExchange [Reuses operator id: 18] -Output [1]: [i_item_sk#20] +Output [1]: [i_item_sk#18] (151) BroadcastHashJoin [codegen id : 74] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#20] +Right keys [1]: [i_item_sk#18] Join condition: None (152) Project [codegen id : 74] -Output [7]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17] -Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17, i_item_sk#20] +Output [7]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16] +Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16, i_item_sk#18] (153) ReusedExchange [Reuses operator id: 25] -Output [1]: [p_promo_sk#23] +Output [1]: [p_promo_sk#20] (154) BroadcastHashJoin [codegen id : 74] Left keys [1]: [ss_promo_sk#3] -Right keys [1]: [p_promo_sk#23] +Right keys [1]: [p_promo_sk#20] Join condition: None (155) Project [codegen id : 74] -Output [6]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17] -Input [8]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17, p_promo_sk#23] +Output [6]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16] +Input [8]: [ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16, p_promo_sk#20] (156) ReusedExchange [Reuses operator id: 221] -Output [1]: [d_date_sk#26] +Output [1]: [d_date_sk#22] (157) BroadcastHashJoin [codegen id : 74] Left keys [1]: [ss_sold_date_sk#7] -Right keys [1]: [d_date_sk#26] +Right keys [1]: [d_date_sk#22] Join condition: None (158) Project [codegen id : 74] -Output [5]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#16, sr_net_loss#17] -Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#16, sr_net_loss#17, d_date_sk#26] +Output [5]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#15, sr_net_loss#16] +Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#15, sr_net_loss#16, d_date_sk#22] (159) ReusedExchange [Reuses operator id: 34] -Output [2]: [s_store_sk#27, s_store_id#28] +Output [2]: [s_store_sk#23, s_store_id#24] (160) BroadcastHashJoin [codegen id : 74] Left keys [1]: [ss_store_sk#2] -Right keys [1]: [s_store_sk#27] +Right keys [1]: [s_store_sk#23] Join condition: None (161) Project [codegen id : 74] -Output [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#16, sr_net_loss#17, s_store_id#28] -Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#16, sr_net_loss#17, s_store_sk#27, s_store_id#28] +Output [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#15, sr_net_loss#16, s_store_id#24] +Input [7]: [ss_store_sk#2, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#15, sr_net_loss#16, s_store_sk#23, s_store_id#24] (162) HashAggregate [codegen id : 74] -Input [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#16, sr_net_loss#17, s_store_id#28] -Keys [1]: [s_store_id#28] -Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#5)), partial_sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#193, sum#194, isEmpty#195, sum#196, isEmpty#197] -Results [6]: [s_store_id#28, sum#198, sum#199, isEmpty#200, sum#201, isEmpty#202] +Input [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#15, sr_net_loss#16, s_store_id#24] +Keys [1]: [s_store_id#24] +Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#5)), partial_sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#173, sum#174, isEmpty#175, sum#176, isEmpty#177] +Results [6]: [s_store_id#24, sum#178, sum#179, isEmpty#180, sum#181, isEmpty#182] (163) Exchange -Input [6]: [s_store_id#28, sum#198, sum#199, isEmpty#200, sum#201, isEmpty#202] -Arguments: hashpartitioning(s_store_id#28, 5), ENSURE_REQUIREMENTS, [id=#203] +Input [6]: [s_store_id#24, sum#178, sum#179, isEmpty#180, sum#181, isEmpty#182] +Arguments: hashpartitioning(s_store_id#24, 5), ENSURE_REQUIREMENTS, [plan_id=21] (164) HashAggregate [codegen id : 75] -Input [6]: [s_store_id#28, sum#198, sum#199, isEmpty#200, sum#201, isEmpty#202] -Keys [1]: [s_store_id#28] -Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#41, sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00))#42, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#43] -Results [5]: [store channel AS channel#44, concat(store, s_store_id#28) AS id#45, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#41,17,2) AS sales#46, sum(coalesce(cast(sr_return_amt#16 as decimal(12,2)), 0.00))#42 AS returns#47, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#17 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#43 AS profit#48] +Input [6]: [s_store_id#24, sum#178, sum#179, isEmpty#180, sum#181, isEmpty#182] +Keys [1]: [s_store_id#24] +Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#35, sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00))#36, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#37] +Results [5]: [store channel AS channel#38, concat(store, s_store_id#24) AS id#39, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#35,17,2) AS sales#40, sum(coalesce(cast(sr_return_amt#15 as decimal(12,2)), 0.00))#36 AS returns#41, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#16 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#37 AS profit#42] (165) Scan parquet default.catalog_sales -Output [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] +Output [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#55), dynamicpruningexpression(cs_sold_date_sk#55 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(cs_sold_date_sk#49), dynamicpruningexpression(cs_sold_date_sk#49 IN dynamicpruning#8)] PushedFilters: [IsNotNull(cs_catalog_page_sk), IsNotNull(cs_item_sk), IsNotNull(cs_promo_sk)] ReadSchema: struct (166) ColumnarToRow [codegen id : 76] -Input [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] +Input [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] (167) Filter [codegen id : 76] -Input [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] -Condition : ((isnotnull(cs_catalog_page_sk#49) AND isnotnull(cs_item_sk#50)) AND isnotnull(cs_promo_sk#51)) +Input [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] +Condition : ((isnotnull(cs_catalog_page_sk#43) AND isnotnull(cs_item_sk#44)) AND isnotnull(cs_promo_sk#45)) (168) Exchange -Input [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] -Arguments: hashpartitioning(cs_item_sk#50, cs_order_number#52, 5), ENSURE_REQUIREMENTS, [id=#204] +Input [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] +Arguments: hashpartitioning(cs_item_sk#44, cs_order_number#46, 5), ENSURE_REQUIREMENTS, [plan_id=22] (169) Sort [codegen id : 77] -Input [7]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55] -Arguments: [cs_item_sk#50 ASC NULLS FIRST, cs_order_number#52 ASC NULLS FIRST], false, 0 +Input [7]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49] +Arguments: [cs_item_sk#44 ASC NULLS FIRST, cs_order_number#46 ASC NULLS FIRST], false, 0 (170) ReusedExchange [Reuses operator id: 49] -Output [4]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60] +Output [4]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53] (171) Sort [codegen id : 79] -Input [4]: [cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60] -Arguments: [cr_item_sk#57 ASC NULLS FIRST, cr_order_number#58 ASC NULLS FIRST], false, 0 +Input [4]: [cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53] +Arguments: [cr_item_sk#50 ASC NULLS FIRST, cr_order_number#51 ASC NULLS FIRST], false, 0 (172) SortMergeJoin [codegen id : 84] -Left keys [2]: [cs_item_sk#50, cs_order_number#52] -Right keys [2]: [cr_item_sk#57, cr_order_number#58] +Left keys [2]: [cs_item_sk#44, cs_order_number#46] +Right keys [2]: [cr_item_sk#50, cr_order_number#51] Join condition: None (173) Project [codegen id : 84] -Output [8]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60] -Input [11]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_order_number#52, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_item_sk#57, cr_order_number#58, cr_return_amount#59, cr_net_loss#60] +Output [8]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53] +Input [11]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_order_number#46, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_item_sk#50, cr_order_number#51, cr_return_amount#52, cr_net_loss#53] (174) ReusedExchange [Reuses operator id: 18] -Output [1]: [i_item_sk#63] +Output [1]: [i_item_sk#55] (175) BroadcastHashJoin [codegen id : 84] -Left keys [1]: [cs_item_sk#50] -Right keys [1]: [i_item_sk#63] +Left keys [1]: [cs_item_sk#44] +Right keys [1]: [i_item_sk#55] Join condition: None (176) Project [codegen id : 84] -Output [7]: [cs_catalog_page_sk#49, cs_promo_sk#51, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60] -Input [9]: [cs_catalog_page_sk#49, cs_item_sk#50, cs_promo_sk#51, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60, i_item_sk#63] +Output [7]: [cs_catalog_page_sk#43, cs_promo_sk#45, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53] +Input [9]: [cs_catalog_page_sk#43, cs_item_sk#44, cs_promo_sk#45, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53, i_item_sk#55] (177) ReusedExchange [Reuses operator id: 25] -Output [1]: [p_promo_sk#64] +Output [1]: [p_promo_sk#56] (178) BroadcastHashJoin [codegen id : 84] -Left keys [1]: [cs_promo_sk#51] -Right keys [1]: [p_promo_sk#64] +Left keys [1]: [cs_promo_sk#45] +Right keys [1]: [p_promo_sk#56] Join condition: None (179) Project [codegen id : 84] -Output [6]: [cs_catalog_page_sk#49, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60] -Input [8]: [cs_catalog_page_sk#49, cs_promo_sk#51, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60, p_promo_sk#64] +Output [6]: [cs_catalog_page_sk#43, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53] +Input [8]: [cs_catalog_page_sk#43, cs_promo_sk#45, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53, p_promo_sk#56] (180) ReusedExchange [Reuses operator id: 221] -Output [1]: [d_date_sk#65] +Output [1]: [d_date_sk#57] (181) BroadcastHashJoin [codegen id : 84] -Left keys [1]: [cs_sold_date_sk#55] -Right keys [1]: [d_date_sk#65] +Left keys [1]: [cs_sold_date_sk#49] +Right keys [1]: [d_date_sk#57] Join condition: None (182) Project [codegen id : 84] -Output [5]: [cs_catalog_page_sk#49, cs_ext_sales_price#53, cs_net_profit#54, cr_return_amount#59, cr_net_loss#60] -Input [7]: [cs_catalog_page_sk#49, cs_ext_sales_price#53, cs_net_profit#54, cs_sold_date_sk#55, cr_return_amount#59, cr_net_loss#60, d_date_sk#65] +Output [5]: [cs_catalog_page_sk#43, cs_ext_sales_price#47, cs_net_profit#48, cr_return_amount#52, cr_net_loss#53] +Input [7]: [cs_catalog_page_sk#43, cs_ext_sales_price#47, cs_net_profit#48, cs_sold_date_sk#49, cr_return_amount#52, cr_net_loss#53, d_date_sk#57] (183) ReusedExchange [Reuses operator id: 65] -Output [2]: [cp_catalog_page_sk#66, cp_catalog_page_id#67] +Output [2]: [cp_catalog_page_sk#58, cp_catalog_page_id#59] (184) BroadcastHashJoin [codegen id : 84] -Left keys [1]: [cs_catalog_page_sk#49] -Right keys [1]: [cp_catalog_page_sk#66] +Left keys [1]: [cs_catalog_page_sk#43] +Right keys [1]: [cp_catalog_page_sk#58] Join condition: None (185) Project [codegen id : 84] -Output [5]: [cs_ext_sales_price#53, cs_net_profit#54, cr_return_amount#59, cr_net_loss#60, cp_catalog_page_id#67] -Input [7]: [cs_catalog_page_sk#49, cs_ext_sales_price#53, cs_net_profit#54, cr_return_amount#59, cr_net_loss#60, cp_catalog_page_sk#66, cp_catalog_page_id#67] +Output [5]: [cs_ext_sales_price#47, cs_net_profit#48, cr_return_amount#52, cr_net_loss#53, cp_catalog_page_id#59] +Input [7]: [cs_catalog_page_sk#43, cs_ext_sales_price#47, cs_net_profit#48, cr_return_amount#52, cr_net_loss#53, cp_catalog_page_sk#58, cp_catalog_page_id#59] (186) HashAggregate [codegen id : 84] -Input [5]: [cs_ext_sales_price#53, cs_net_profit#54, cr_return_amount#59, cr_net_loss#60, cp_catalog_page_id#67] -Keys [1]: [cp_catalog_page_id#67] -Functions [3]: [partial_sum(UnscaledValue(cs_ext_sales_price#53)), partial_sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#205, sum#206, isEmpty#207, sum#208, isEmpty#209] -Results [6]: [cp_catalog_page_id#67, sum#210, sum#211, isEmpty#212, sum#213, isEmpty#214] +Input [5]: [cs_ext_sales_price#47, cs_net_profit#48, cr_return_amount#52, cr_net_loss#53, cp_catalog_page_id#59] +Keys [1]: [cp_catalog_page_id#59] +Functions [3]: [partial_sum(UnscaledValue(cs_ext_sales_price#47)), partial_sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#183, sum#184, isEmpty#185, sum#186, isEmpty#187] +Results [6]: [cp_catalog_page_id#59, sum#188, sum#189, isEmpty#190, sum#191, isEmpty#192] (187) Exchange -Input [6]: [cp_catalog_page_id#67, sum#210, sum#211, isEmpty#212, sum#213, isEmpty#214] -Arguments: hashpartitioning(cp_catalog_page_id#67, 5), ENSURE_REQUIREMENTS, [id=#215] +Input [6]: [cp_catalog_page_id#59, sum#188, sum#189, isEmpty#190, sum#191, isEmpty#192] +Arguments: hashpartitioning(cp_catalog_page_id#59, 5), ENSURE_REQUIREMENTS, [plan_id=23] (188) HashAggregate [codegen id : 85] -Input [6]: [cp_catalog_page_id#67, sum#210, sum#211, isEmpty#212, sum#213, isEmpty#214] -Keys [1]: [cp_catalog_page_id#67] -Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#53)), sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#53))#80, sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00))#81, sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#82] -Results [5]: [catalog channel AS channel#83, concat(catalog_page, cp_catalog_page_id#67) AS id#84, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#53))#80,17,2) AS sales#85, sum(coalesce(cast(cr_return_amount#59 as decimal(12,2)), 0.00))#81 AS returns#86, sum(CheckOverflow((promote_precision(cast(cs_net_profit#54 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#60 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#82 AS profit#87] +Input [6]: [cp_catalog_page_id#59, sum#188, sum#189, isEmpty#190, sum#191, isEmpty#192] +Keys [1]: [cp_catalog_page_id#59] +Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#47)), sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#47))#70, sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00))#71, sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#72] +Results [5]: [catalog channel AS channel#73, concat(catalog_page, cp_catalog_page_id#59) AS id#74, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#47))#70,17,2) AS sales#75, sum(coalesce(cast(cr_return_amount#52 as decimal(12,2)), 0.00))#71 AS returns#76, sum(CheckOverflow((promote_precision(cast(cs_net_profit#48 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#53 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#72 AS profit#77] (189) ReusedExchange [Reuses operator id: 132] -Output [6]: [web_site_id#106, sum#216, sum#217, isEmpty#218, sum#219, isEmpty#220] +Output [6]: [web_site_id#94, sum#193, sum#194, isEmpty#195, sum#196, isEmpty#197] (190) HashAggregate [codegen id : 95] -Input [6]: [web_site_id#106, sum#216, sum#217, isEmpty#218, sum#219, isEmpty#220] -Keys [1]: [web_site_id#106] -Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#92)), sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#92))#119, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#120, sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#121] -Results [5]: [web channel AS channel#122, concat(web_site, web_site_id#106) AS id#123, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#92))#119,17,2) AS sales#124, sum(coalesce(cast(wr_return_amt#98 as decimal(12,2)), 0.00))#120 AS returns#125, sum(CheckOverflow((promote_precision(cast(ws_net_profit#93 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#99 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#121 AS profit#126] +Input [6]: [web_site_id#94, sum#193, sum#194, isEmpty#195, sum#196, isEmpty#197] +Keys [1]: [web_site_id#94] +Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#82)), sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#82))#105, sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00))#106, sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#107] +Results [5]: [web channel AS channel#108, concat(web_site, web_site_id#94) AS id#109, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#82))#105,17,2) AS sales#110, sum(coalesce(cast(wr_return_amt#87 as decimal(12,2)), 0.00))#106 AS returns#111, sum(CheckOverflow((promote_precision(cast(ws_net_profit#83 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#88 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#107 AS profit#112] (191) Union (192) HashAggregate [codegen id : 96] -Input [5]: [channel#44, id#45, sales#46, returns#47, profit#48] -Keys [2]: [channel#44, id#45] -Functions [3]: [partial_sum(sales#46), partial_sum(returns#47), partial_sum(profit#48)] -Aggregate Attributes [6]: [sum#127, isEmpty#128, sum#129, isEmpty#130, sum#131, isEmpty#132] -Results [8]: [channel#44, id#45, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] +Input [5]: [channel#38, id#39, sales#40, returns#41, profit#42] +Keys [2]: [channel#38, id#39] +Functions [3]: [partial_sum(sales#40), partial_sum(returns#41), partial_sum(profit#42)] +Aggregate Attributes [6]: [sum#113, isEmpty#114, sum#115, isEmpty#116, sum#117, isEmpty#118] +Results [8]: [channel#38, id#39, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] (193) Exchange -Input [8]: [channel#44, id#45, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] -Arguments: hashpartitioning(channel#44, id#45, 5), ENSURE_REQUIREMENTS, [id=#221] +Input [8]: [channel#38, id#39, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] +Arguments: hashpartitioning(channel#38, id#39, 5), ENSURE_REQUIREMENTS, [plan_id=24] (194) HashAggregate [codegen id : 97] -Input [8]: [channel#44, id#45, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#137, isEmpty#138] -Keys [2]: [channel#44, id#45] -Functions [3]: [sum(sales#46), sum(returns#47), sum(profit#48)] -Aggregate Attributes [3]: [sum(sales#46)#140, sum(returns#47)#141, sum(profit#48)#142] -Results [3]: [sum(sales#46)#140 AS sales#169, sum(returns#47)#141 AS returns#170, sum(profit#48)#142 AS profit#171] +Input [8]: [channel#38, id#39, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] +Keys [2]: [channel#38, id#39] +Functions [3]: [sum(sales#40), sum(returns#41), sum(profit#42)] +Aggregate Attributes [3]: [sum(sales#40)#125, sum(returns#41)#126, sum(profit#42)#127] +Results [3]: [sum(sales#40)#125 AS sales#151, sum(returns#41)#126 AS returns#152, sum(profit#42)#127 AS profit#153] (195) HashAggregate [codegen id : 97] -Input [3]: [sales#169, returns#170, profit#171] +Input [3]: [sales#151, returns#152, profit#153] Keys: [] -Functions [3]: [partial_sum(sales#169), partial_sum(returns#170), partial_sum(profit#171)] -Aggregate Attributes [6]: [sum#222, isEmpty#223, sum#224, isEmpty#225, sum#226, isEmpty#227] -Results [6]: [sum#228, isEmpty#229, sum#230, isEmpty#231, sum#232, isEmpty#233] +Functions [3]: [partial_sum(sales#151), partial_sum(returns#152), partial_sum(profit#153)] +Aggregate Attributes [6]: [sum#198, isEmpty#199, sum#200, isEmpty#201, sum#202, isEmpty#203] +Results [6]: [sum#204, isEmpty#205, sum#206, isEmpty#207, sum#208, isEmpty#209] (196) Exchange -Input [6]: [sum#228, isEmpty#229, sum#230, isEmpty#231, sum#232, isEmpty#233] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#234] +Input [6]: [sum#204, isEmpty#205, sum#206, isEmpty#207, sum#208, isEmpty#209] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=25] (197) HashAggregate [codegen id : 98] -Input [6]: [sum#228, isEmpty#229, sum#230, isEmpty#231, sum#232, isEmpty#233] +Input [6]: [sum#204, isEmpty#205, sum#206, isEmpty#207, sum#208, isEmpty#209] Keys: [] -Functions [3]: [sum(sales#169), sum(returns#170), sum(profit#171)] -Aggregate Attributes [3]: [sum(sales#169)#235, sum(returns#170)#236, sum(profit#171)#237] -Results [5]: [null AS channel#238, null AS id#239, sum(sales#169)#235 AS sales#240, sum(returns#170)#236 AS returns#241, sum(profit#171)#237 AS profit#242] +Functions [3]: [sum(sales#151), sum(returns#152), sum(profit#153)] +Aggregate Attributes [3]: [sum(sales#151)#210, sum(returns#152)#211, sum(profit#153)#212] +Results [5]: [null AS channel#213, null AS id#214, sum(sales#151)#210 AS sales#215, sum(returns#152)#211 AS returns#216, sum(profit#153)#212 AS profit#217] (198) Union (199) HashAggregate [codegen id : 99] -Input [5]: [channel#44, id#45, sales#143, returns#144, profit#145] -Keys [5]: [channel#44, id#45, sales#143, returns#144, profit#145] +Input [5]: [channel#38, id#39, sales#128, returns#129, profit#130] +Keys [5]: [channel#38, id#39, sales#128, returns#129, profit#130] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#44, id#45, sales#143, returns#144, profit#145] +Results [5]: [channel#38, id#39, sales#128, returns#129, profit#130] (200) Exchange -Input [5]: [channel#44, id#45, sales#143, returns#144, profit#145] -Arguments: hashpartitioning(channel#44, id#45, sales#143, returns#144, profit#145, 5), ENSURE_REQUIREMENTS, [id=#243] +Input [5]: [channel#38, id#39, sales#128, returns#129, profit#130] +Arguments: hashpartitioning(channel#38, id#39, sales#128, returns#129, profit#130, 5), ENSURE_REQUIREMENTS, [plan_id=26] (201) HashAggregate [codegen id : 100] -Input [5]: [channel#44, id#45, sales#143, returns#144, profit#145] -Keys [5]: [channel#44, id#45, sales#143, returns#144, profit#145] +Input [5]: [channel#38, id#39, sales#128, returns#129, profit#130] +Keys [5]: [channel#38, id#39, sales#128, returns#129, profit#130] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#44, id#45, sales#143, returns#144, profit#145] +Results [5]: [channel#38, id#39, sales#128, returns#129, profit#130] (202) TakeOrderedAndProject -Input [5]: [channel#44, id#45, sales#143, returns#144, profit#145] -Arguments: 100, [channel#44 ASC NULLS FIRST, id#45 ASC NULLS FIRST], [channel#44, id#45, sales#143, returns#144, profit#145] +Input [5]: [channel#38, id#39, sales#128, returns#129, profit#130] +Arguments: 100, [channel#38 ASC NULLS FIRST, id#39 ASC NULLS FIRST], [channel#38, id#39, sales#128, returns#129, profit#130] ===== Subqueries ===== @@ -1136,40 +1136,40 @@ ObjectHashAggregate (209) (203) Scan parquet default.item -Output [2]: [i_item_sk#20, i_current_price#21] +Output [2]: [i_item_sk#18, i_current_price#19] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)] ReadSchema: struct (204) ColumnarToRow [codegen id : 1] -Input [2]: [i_item_sk#20, i_current_price#21] +Input [2]: [i_item_sk#18, i_current_price#19] (205) Filter [codegen id : 1] -Input [2]: [i_item_sk#20, i_current_price#21] -Condition : ((isnotnull(i_current_price#21) AND (i_current_price#21 > 50.00)) AND isnotnull(i_item_sk#20)) +Input [2]: [i_item_sk#18, i_current_price#19] +Condition : ((isnotnull(i_current_price#19) AND (i_current_price#19 > 50.00)) AND isnotnull(i_item_sk#18)) (206) Project [codegen id : 1] -Output [1]: [i_item_sk#20] -Input [2]: [i_item_sk#20, i_current_price#21] +Output [1]: [i_item_sk#18] +Input [2]: [i_item_sk#18, i_current_price#19] (207) ObjectHashAggregate -Input [1]: [i_item_sk#20] +Input [1]: [i_item_sk#18] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#20, 42), 101823, 814584, 0, 0)] -Aggregate Attributes [1]: [buf#244] -Results [1]: [buf#245] +Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 814584, 0, 0)] +Aggregate Attributes [1]: [buf#218] +Results [1]: [buf#219] (208) Exchange -Input [1]: [buf#245] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#246] +Input [1]: [buf#219] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=27] (209) ObjectHashAggregate -Input [1]: [buf#245] +Input [1]: [buf#219] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#20, 42), 101823, 814584, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#20, 42), 101823, 814584, 0, 0)#247] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#20, 42), 101823, 814584, 0, 0)#247 AS bloomFilter#248] +Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 814584, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 814584, 0, 0)#220] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 814584, 0, 0)#220 AS bloomFilter#221] Subquery:2 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#11, [id=#12] ObjectHashAggregate (216) @@ -1182,40 +1182,40 @@ ObjectHashAggregate (216) (210) Scan parquet default.promotion -Output [2]: [p_promo_sk#23, p_channel_tv#24] +Output [2]: [p_promo_sk#20, p_channel_tv#21] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)] ReadSchema: struct (211) ColumnarToRow [codegen id : 1] -Input [2]: [p_promo_sk#23, p_channel_tv#24] +Input [2]: [p_promo_sk#20, p_channel_tv#21] (212) Filter [codegen id : 1] -Input [2]: [p_promo_sk#23, p_channel_tv#24] -Condition : ((isnotnull(p_channel_tv#24) AND (p_channel_tv#24 = N)) AND isnotnull(p_promo_sk#23)) +Input [2]: [p_promo_sk#20, p_channel_tv#21] +Condition : ((isnotnull(p_channel_tv#21) AND (p_channel_tv#21 = N)) AND isnotnull(p_promo_sk#20)) (213) Project [codegen id : 1] -Output [1]: [p_promo_sk#23] -Input [2]: [p_promo_sk#23, p_channel_tv#24] +Output [1]: [p_promo_sk#20] +Input [2]: [p_promo_sk#20, p_channel_tv#21] (214) ObjectHashAggregate -Input [1]: [p_promo_sk#23] +Input [1]: [p_promo_sk#20] Keys: [] -Functions [1]: [partial_bloom_filter_agg(xxhash64(p_promo_sk#23, 42), 986, 7888, 0, 0)] -Aggregate Attributes [1]: [buf#249] -Results [1]: [buf#250] +Functions [1]: [partial_bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 7888, 0, 0)] +Aggregate Attributes [1]: [buf#222] +Results [1]: [buf#223] (215) Exchange -Input [1]: [buf#250] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#251] +Input [1]: [buf#223] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=28] (216) ObjectHashAggregate -Input [1]: [buf#250] +Input [1]: [buf#223] Keys: [] -Functions [1]: [bloom_filter_agg(xxhash64(p_promo_sk#23, 42), 986, 7888, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(p_promo_sk#23, 42), 986, 7888, 0, 0)#252] -Results [1]: [bloom_filter_agg(xxhash64(p_promo_sk#23, 42), 986, 7888, 0, 0)#252 AS bloomFilter#253] +Functions [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 7888, 0, 0)] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 7888, 0, 0)#224] +Results [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 7888, 0, 0)#224 AS bloomFilter#225] Subquery:3 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 BroadcastExchange (221) @@ -1226,43 +1226,43 @@ BroadcastExchange (221) (217) Scan parquet default.date_dim -Output [2]: [d_date_sk#26, d_date#254] +Output [2]: [d_date_sk#22, d_date#226] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1998-08-04), LessThanOrEqual(d_date,1998-09-03), IsNotNull(d_date_sk)] ReadSchema: struct (218) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#26, d_date#254] +Input [2]: [d_date_sk#22, d_date#226] (219) Filter [codegen id : 1] -Input [2]: [d_date_sk#26, d_date#254] -Condition : (((isnotnull(d_date#254) AND (d_date#254 >= 1998-08-04)) AND (d_date#254 <= 1998-09-03)) AND isnotnull(d_date_sk#26)) +Input [2]: [d_date_sk#22, d_date#226] +Condition : (((isnotnull(d_date#226) AND (d_date#226 >= 1998-08-04)) AND (d_date#226 <= 1998-09-03)) AND isnotnull(d_date_sk#22)) (220) Project [codegen id : 1] -Output [1]: [d_date_sk#26] -Input [2]: [d_date_sk#26, d_date#254] +Output [1]: [d_date_sk#22] +Input [2]: [d_date_sk#22, d_date#226] (221) BroadcastExchange -Input [1]: [d_date_sk#26] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#255] +Input [1]: [d_date_sk#22] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=29] Subquery:4 Hosting operator id = 42 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#10] Subquery:5 Hosting operator id = 42 Hosting Expression = ReusedSubquery Subquery scalar-subquery#11, [id=#12] -Subquery:6 Hosting operator id = 40 Hosting Expression = cs_sold_date_sk#55 IN dynamicpruning#8 +Subquery:6 Hosting operator id = 40 Hosting Expression = cs_sold_date_sk#49 IN dynamicpruning#8 Subquery:7 Hosting operator id = 73 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#10] Subquery:8 Hosting operator id = 73 Hosting Expression = ReusedSubquery Subquery scalar-subquery#11, [id=#12] -Subquery:9 Hosting operator id = 71 Hosting Expression = ws_sold_date_sk#94 IN dynamicpruning#8 +Subquery:9 Hosting operator id = 71 Hosting Expression = ws_sold_date_sk#84 IN dynamicpruning#8 -Subquery:10 Hosting operator id = 110 Hosting Expression = ws_sold_date_sk#94 IN dynamicpruning#8 +Subquery:10 Hosting operator id = 110 Hosting Expression = ws_sold_date_sk#84 IN dynamicpruning#8 Subquery:11 Hosting operator id = 141 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 -Subquery:12 Hosting operator id = 165 Hosting Expression = cs_sold_date_sk#55 IN dynamicpruning#8 +Subquery:12 Hosting operator id = 165 Hosting Expression = cs_sold_date_sk#49 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q80a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q80a/explain.txt index 03e744ac87b53..63b2856d44204 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q80a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q80a/explain.txt @@ -138,543 +138,543 @@ Condition : ((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnul (4) Exchange Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] -Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [id=#9] +Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7] Arguments: [ss_item_sk#1 ASC NULLS FIRST, ss_ticket_number#4 ASC NULLS FIRST], false, 0 (6) Scan parquet default.store_returns -Output [5]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14] +Output [5]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12, sr_returned_date_sk#13] Batched: true Location [not included in comparison]/{warehouse_dir}/store_returns] PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [5]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14] +Input [5]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12, sr_returned_date_sk#13] (8) Filter [codegen id : 3] -Input [5]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14] -Condition : (isnotnull(sr_item_sk#10) AND isnotnull(sr_ticket_number#11)) +Input [5]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12, sr_returned_date_sk#13] +Condition : (isnotnull(sr_item_sk#9) AND isnotnull(sr_ticket_number#10)) (9) Project [codegen id : 3] -Output [4]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13] -Input [5]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14] +Output [4]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12] +Input [5]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12, sr_returned_date_sk#13] (10) Exchange -Input [4]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13] -Arguments: hashpartitioning(sr_item_sk#10, sr_ticket_number#11, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12] +Arguments: hashpartitioning(sr_item_sk#9, sr_ticket_number#10, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) Sort [codegen id : 4] -Input [4]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13] -Arguments: [sr_item_sk#10 ASC NULLS FIRST, sr_ticket_number#11 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12] +Arguments: [sr_item_sk#9 ASC NULLS FIRST, sr_ticket_number#10 ASC NULLS FIRST], false, 0 (12) SortMergeJoin [codegen id : 9] Left keys [2]: [ss_item_sk#1, ss_ticket_number#4] -Right keys [2]: [sr_item_sk#10, sr_ticket_number#11] +Right keys [2]: [sr_item_sk#9, sr_ticket_number#10] Join condition: None (13) Project [codegen id : 9] -Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#12, sr_net_loss#13] -Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13] +Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#11, sr_net_loss#12] +Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12] (14) ReusedExchange [Reuses operator id: 125] -Output [1]: [d_date_sk#16] +Output [1]: [d_date_sk#14] (15) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_sold_date_sk#7] -Right keys [1]: [d_date_sk#16] +Right keys [1]: [d_date_sk#14] Join condition: None (16) Project [codegen id : 9] -Output [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13] -Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#12, sr_net_loss#13, d_date_sk#16] +Output [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12] +Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#11, sr_net_loss#12, d_date_sk#14] (17) Scan parquet default.store -Output [2]: [s_store_sk#17, s_store_id#18] +Output [2]: [s_store_sk#15, s_store_id#16] Batched: true Location [not included in comparison]/{warehouse_dir}/store] PushedFilters: [IsNotNull(s_store_sk)] ReadSchema: struct (18) ColumnarToRow [codegen id : 6] -Input [2]: [s_store_sk#17, s_store_id#18] +Input [2]: [s_store_sk#15, s_store_id#16] (19) Filter [codegen id : 6] -Input [2]: [s_store_sk#17, s_store_id#18] -Condition : isnotnull(s_store_sk#17) +Input [2]: [s_store_sk#15, s_store_id#16] +Condition : isnotnull(s_store_sk#15) (20) BroadcastExchange -Input [2]: [s_store_sk#17, s_store_id#18] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19] +Input [2]: [s_store_sk#15, s_store_id#16] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_store_sk#2] -Right keys [1]: [s_store_sk#17] +Right keys [1]: [s_store_sk#15] Join condition: None (22) Project [codegen id : 9] -Output [7]: [ss_item_sk#1, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18] -Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_sk#17, s_store_id#18] +Output [7]: [ss_item_sk#1, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#16] +Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_sk#15, s_store_id#16] (23) Scan parquet default.item -Output [2]: [i_item_sk#20, i_current_price#21] +Output [2]: [i_item_sk#17, i_current_price#18] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)] ReadSchema: struct (24) ColumnarToRow [codegen id : 7] -Input [2]: [i_item_sk#20, i_current_price#21] +Input [2]: [i_item_sk#17, i_current_price#18] (25) Filter [codegen id : 7] -Input [2]: [i_item_sk#20, i_current_price#21] -Condition : ((isnotnull(i_current_price#21) AND (i_current_price#21 > 50.00)) AND isnotnull(i_item_sk#20)) +Input [2]: [i_item_sk#17, i_current_price#18] +Condition : ((isnotnull(i_current_price#18) AND (i_current_price#18 > 50.00)) AND isnotnull(i_item_sk#17)) (26) Project [codegen id : 7] -Output [1]: [i_item_sk#20] -Input [2]: [i_item_sk#20, i_current_price#21] +Output [1]: [i_item_sk#17] +Input [2]: [i_item_sk#17, i_current_price#18] (27) BroadcastExchange -Input [1]: [i_item_sk#20] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22] +Input [1]: [i_item_sk#17] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4] (28) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#20] +Right keys [1]: [i_item_sk#17] Join condition: None (29) Project [codegen id : 9] -Output [6]: [ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18] -Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18, i_item_sk#20] +Output [6]: [ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#16] +Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#16, i_item_sk#17] (30) Scan parquet default.promotion -Output [2]: [p_promo_sk#23, p_channel_tv#24] +Output [2]: [p_promo_sk#19, p_channel_tv#20] Batched: true Location [not included in comparison]/{warehouse_dir}/promotion] PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)] ReadSchema: struct (31) ColumnarToRow [codegen id : 8] -Input [2]: [p_promo_sk#23, p_channel_tv#24] +Input [2]: [p_promo_sk#19, p_channel_tv#20] (32) Filter [codegen id : 8] -Input [2]: [p_promo_sk#23, p_channel_tv#24] -Condition : ((isnotnull(p_channel_tv#24) AND (p_channel_tv#24 = N)) AND isnotnull(p_promo_sk#23)) +Input [2]: [p_promo_sk#19, p_channel_tv#20] +Condition : ((isnotnull(p_channel_tv#20) AND (p_channel_tv#20 = N)) AND isnotnull(p_promo_sk#19)) (33) Project [codegen id : 8] -Output [1]: [p_promo_sk#23] -Input [2]: [p_promo_sk#23, p_channel_tv#24] +Output [1]: [p_promo_sk#19] +Input [2]: [p_promo_sk#19, p_channel_tv#20] (34) BroadcastExchange -Input [1]: [p_promo_sk#23] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [p_promo_sk#19] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] (35) BroadcastHashJoin [codegen id : 9] Left keys [1]: [ss_promo_sk#3] -Right keys [1]: [p_promo_sk#23] +Right keys [1]: [p_promo_sk#19] Join condition: None (36) Project [codegen id : 9] -Output [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18] -Input [7]: [ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18, p_promo_sk#23] +Output [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#16] +Input [7]: [ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#16, p_promo_sk#19] (37) HashAggregate [codegen id : 9] -Input [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18] -Keys [1]: [s_store_id#18] -Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#5)), partial_sum(coalesce(cast(sr_return_amt#12 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#13 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#26, sum#27, isEmpty#28, sum#29, isEmpty#30] -Results [6]: [s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35] +Input [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#16] +Keys [1]: [s_store_id#16] +Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#5)), partial_sum(coalesce(cast(sr_return_amt#11 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#21, sum#22, isEmpty#23, sum#24, isEmpty#25] +Results [6]: [s_store_id#16, sum#26, sum#27, isEmpty#28, sum#29, isEmpty#30] (38) Exchange -Input [6]: [s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35] -Arguments: hashpartitioning(s_store_id#18, 5), ENSURE_REQUIREMENTS, [id=#36] +Input [6]: [s_store_id#16, sum#26, sum#27, isEmpty#28, sum#29, isEmpty#30] +Arguments: hashpartitioning(s_store_id#16, 5), ENSURE_REQUIREMENTS, [plan_id=6] (39) HashAggregate [codegen id : 10] -Input [6]: [s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35] -Keys [1]: [s_store_id#18] -Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#12 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#13 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#37, sum(coalesce(cast(sr_return_amt#12 as decimal(12,2)), 0.00))#38, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#13 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#39] -Results [5]: [store channel AS channel#40, concat(store, s_store_id#18) AS id#41, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#37,17,2) AS sales#42, sum(coalesce(cast(sr_return_amt#12 as decimal(12,2)), 0.00))#38 AS returns#43, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#13 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#39 AS profit#44] +Input [6]: [s_store_id#16, sum#26, sum#27, isEmpty#28, sum#29, isEmpty#30] +Keys [1]: [s_store_id#16] +Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#11 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#31, sum(coalesce(cast(sr_return_amt#11 as decimal(12,2)), 0.00))#32, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#33] +Results [5]: [store channel AS channel#34, concat(store, s_store_id#16) AS id#35, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#31,17,2) AS sales#36, sum(coalesce(cast(sr_return_amt#11 as decimal(12,2)), 0.00))#32 AS returns#37, sum(CheckOverflow((promote_precision(cast(ss_net_profit#6 as decimal(13,2))) - promote_precision(cast(coalesce(cast(sr_net_loss#12 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#33 AS profit#38] (40) Scan parquet default.catalog_sales -Output [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51] +Output [7]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_order_number#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#51), dynamicpruningexpression(cs_sold_date_sk#51 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(cs_sold_date_sk#45), dynamicpruningexpression(cs_sold_date_sk#45 IN dynamicpruning#8)] PushedFilters: [IsNotNull(cs_catalog_page_sk), IsNotNull(cs_item_sk), IsNotNull(cs_promo_sk)] ReadSchema: struct (41) ColumnarToRow [codegen id : 11] -Input [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51] +Input [7]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_order_number#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] (42) Filter [codegen id : 11] -Input [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51] -Condition : ((isnotnull(cs_catalog_page_sk#45) AND isnotnull(cs_item_sk#46)) AND isnotnull(cs_promo_sk#47)) +Input [7]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_order_number#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] +Condition : ((isnotnull(cs_catalog_page_sk#39) AND isnotnull(cs_item_sk#40)) AND isnotnull(cs_promo_sk#41)) (43) Exchange -Input [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51] -Arguments: hashpartitioning(cs_item_sk#46, cs_order_number#48, 5), ENSURE_REQUIREMENTS, [id=#52] +Input [7]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_order_number#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] +Arguments: hashpartitioning(cs_item_sk#40, cs_order_number#42, 5), ENSURE_REQUIREMENTS, [plan_id=7] (44) Sort [codegen id : 12] -Input [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51] -Arguments: [cs_item_sk#46 ASC NULLS FIRST, cs_order_number#48 ASC NULLS FIRST], false, 0 +Input [7]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_order_number#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45] +Arguments: [cs_item_sk#40 ASC NULLS FIRST, cs_order_number#42 ASC NULLS FIRST], false, 0 (45) Scan parquet default.catalog_returns -Output [5]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Output [5]: [cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49, cr_returned_date_sk#50] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_returns] PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)] ReadSchema: struct (46) ColumnarToRow [codegen id : 13] -Input [5]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Input [5]: [cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49, cr_returned_date_sk#50] (47) Filter [codegen id : 13] -Input [5]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] -Condition : (isnotnull(cr_item_sk#53) AND isnotnull(cr_order_number#54)) +Input [5]: [cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49, cr_returned_date_sk#50] +Condition : (isnotnull(cr_item_sk#46) AND isnotnull(cr_order_number#47)) (48) Project [codegen id : 13] -Output [4]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56] -Input [5]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57] +Output [4]: [cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49] +Input [5]: [cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49, cr_returned_date_sk#50] (49) Exchange -Input [4]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56] -Arguments: hashpartitioning(cr_item_sk#53, cr_order_number#54, 5), ENSURE_REQUIREMENTS, [id=#58] +Input [4]: [cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49] +Arguments: hashpartitioning(cr_item_sk#46, cr_order_number#47, 5), ENSURE_REQUIREMENTS, [plan_id=8] (50) Sort [codegen id : 14] -Input [4]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56] -Arguments: [cr_item_sk#53 ASC NULLS FIRST, cr_order_number#54 ASC NULLS FIRST], false, 0 +Input [4]: [cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49] +Arguments: [cr_item_sk#46 ASC NULLS FIRST, cr_order_number#47 ASC NULLS FIRST], false, 0 (51) SortMergeJoin [codegen id : 19] -Left keys [2]: [cs_item_sk#46, cs_order_number#48] -Right keys [2]: [cr_item_sk#53, cr_order_number#54] +Left keys [2]: [cs_item_sk#40, cs_order_number#42] +Right keys [2]: [cr_item_sk#46, cr_order_number#47] Join condition: None (52) Project [codegen id : 19] -Output [8]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51, cr_return_amount#55, cr_net_loss#56] -Input [11]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51, cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56] +Output [8]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45, cr_return_amount#48, cr_net_loss#49] +Input [11]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_order_number#42, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45, cr_item_sk#46, cr_order_number#47, cr_return_amount#48, cr_net_loss#49] (53) ReusedExchange [Reuses operator id: 125] -Output [1]: [d_date_sk#59] +Output [1]: [d_date_sk#51] (54) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_sold_date_sk#51] -Right keys [1]: [d_date_sk#59] +Left keys [1]: [cs_sold_date_sk#45] +Right keys [1]: [d_date_sk#51] Join condition: None (55) Project [codegen id : 19] -Output [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56] -Input [9]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51, cr_return_amount#55, cr_net_loss#56, d_date_sk#59] +Output [7]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49] +Input [9]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cs_sold_date_sk#45, cr_return_amount#48, cr_net_loss#49, d_date_sk#51] (56) Scan parquet default.catalog_page -Output [2]: [cp_catalog_page_sk#60, cp_catalog_page_id#61] +Output [2]: [cp_catalog_page_sk#52, cp_catalog_page_id#53] Batched: true Location [not included in comparison]/{warehouse_dir}/catalog_page] PushedFilters: [IsNotNull(cp_catalog_page_sk)] ReadSchema: struct (57) ColumnarToRow [codegen id : 16] -Input [2]: [cp_catalog_page_sk#60, cp_catalog_page_id#61] +Input [2]: [cp_catalog_page_sk#52, cp_catalog_page_id#53] (58) Filter [codegen id : 16] -Input [2]: [cp_catalog_page_sk#60, cp_catalog_page_id#61] -Condition : isnotnull(cp_catalog_page_sk#60) +Input [2]: [cp_catalog_page_sk#52, cp_catalog_page_id#53] +Condition : isnotnull(cp_catalog_page_sk#52) (59) BroadcastExchange -Input [2]: [cp_catalog_page_sk#60, cp_catalog_page_id#61] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#62] +Input [2]: [cp_catalog_page_sk#52, cp_catalog_page_id#53] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9] (60) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_catalog_page_sk#45] -Right keys [1]: [cp_catalog_page_sk#60] +Left keys [1]: [cs_catalog_page_sk#39] +Right keys [1]: [cp_catalog_page_sk#52] Join condition: None (61) Project [codegen id : 19] -Output [7]: [cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61] -Input [9]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_sk#60, cp_catalog_page_id#61] +Output [7]: [cs_item_sk#40, cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49, cp_catalog_page_id#53] +Input [9]: [cs_catalog_page_sk#39, cs_item_sk#40, cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49, cp_catalog_page_sk#52, cp_catalog_page_id#53] (62) ReusedExchange [Reuses operator id: 27] -Output [1]: [i_item_sk#63] +Output [1]: [i_item_sk#54] (63) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_item_sk#46] -Right keys [1]: [i_item_sk#63] +Left keys [1]: [cs_item_sk#40] +Right keys [1]: [i_item_sk#54] Join condition: None (64) Project [codegen id : 19] -Output [6]: [cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61] -Input [8]: [cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61, i_item_sk#63] +Output [6]: [cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49, cp_catalog_page_id#53] +Input [8]: [cs_item_sk#40, cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49, cp_catalog_page_id#53, i_item_sk#54] (65) ReusedExchange [Reuses operator id: 34] -Output [1]: [p_promo_sk#64] +Output [1]: [p_promo_sk#55] (66) BroadcastHashJoin [codegen id : 19] -Left keys [1]: [cs_promo_sk#47] -Right keys [1]: [p_promo_sk#64] +Left keys [1]: [cs_promo_sk#41] +Right keys [1]: [p_promo_sk#55] Join condition: None (67) Project [codegen id : 19] -Output [5]: [cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61] -Input [7]: [cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61, p_promo_sk#64] +Output [5]: [cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49, cp_catalog_page_id#53] +Input [7]: [cs_promo_sk#41, cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49, cp_catalog_page_id#53, p_promo_sk#55] (68) HashAggregate [codegen id : 19] -Input [5]: [cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61] -Keys [1]: [cp_catalog_page_id#61] -Functions [3]: [partial_sum(UnscaledValue(cs_ext_sales_price#49)), partial_sum(coalesce(cast(cr_return_amount#55 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(cs_net_profit#50 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#56 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#65, sum#66, isEmpty#67, sum#68, isEmpty#69] -Results [6]: [cp_catalog_page_id#61, sum#70, sum#71, isEmpty#72, sum#73, isEmpty#74] +Input [5]: [cs_ext_sales_price#43, cs_net_profit#44, cr_return_amount#48, cr_net_loss#49, cp_catalog_page_id#53] +Keys [1]: [cp_catalog_page_id#53] +Functions [3]: [partial_sum(UnscaledValue(cs_ext_sales_price#43)), partial_sum(coalesce(cast(cr_return_amount#48 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(cs_net_profit#44 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#49 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#56, sum#57, isEmpty#58, sum#59, isEmpty#60] +Results [6]: [cp_catalog_page_id#53, sum#61, sum#62, isEmpty#63, sum#64, isEmpty#65] (69) Exchange -Input [6]: [cp_catalog_page_id#61, sum#70, sum#71, isEmpty#72, sum#73, isEmpty#74] -Arguments: hashpartitioning(cp_catalog_page_id#61, 5), ENSURE_REQUIREMENTS, [id=#75] +Input [6]: [cp_catalog_page_id#53, sum#61, sum#62, isEmpty#63, sum#64, isEmpty#65] +Arguments: hashpartitioning(cp_catalog_page_id#53, 5), ENSURE_REQUIREMENTS, [plan_id=10] (70) HashAggregate [codegen id : 20] -Input [6]: [cp_catalog_page_id#61, sum#70, sum#71, isEmpty#72, sum#73, isEmpty#74] -Keys [1]: [cp_catalog_page_id#61] -Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#49)), sum(coalesce(cast(cr_return_amount#55 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(cs_net_profit#50 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#56 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#49))#76, sum(coalesce(cast(cr_return_amount#55 as decimal(12,2)), 0.00))#77, sum(CheckOverflow((promote_precision(cast(cs_net_profit#50 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#56 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#78] -Results [5]: [catalog channel AS channel#79, concat(catalog_page, cp_catalog_page_id#61) AS id#80, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#49))#76,17,2) AS sales#81, sum(coalesce(cast(cr_return_amount#55 as decimal(12,2)), 0.00))#77 AS returns#82, sum(CheckOverflow((promote_precision(cast(cs_net_profit#50 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#56 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#78 AS profit#83] +Input [6]: [cp_catalog_page_id#53, sum#61, sum#62, isEmpty#63, sum#64, isEmpty#65] +Keys [1]: [cp_catalog_page_id#53] +Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#43)), sum(coalesce(cast(cr_return_amount#48 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(cs_net_profit#44 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#49 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#43))#66, sum(coalesce(cast(cr_return_amount#48 as decimal(12,2)), 0.00))#67, sum(CheckOverflow((promote_precision(cast(cs_net_profit#44 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#49 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#68] +Results [5]: [catalog channel AS channel#69, concat(catalog_page, cp_catalog_page_id#53) AS id#70, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#43))#66,17,2) AS sales#71, sum(coalesce(cast(cr_return_amount#48 as decimal(12,2)), 0.00))#67 AS returns#72, sum(CheckOverflow((promote_precision(cast(cs_net_profit#44 as decimal(13,2))) - promote_precision(cast(coalesce(cast(cr_net_loss#49 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#68 AS profit#73] (71) Scan parquet default.web_sales -Output [7]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_order_number#87, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90] +Output [7]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_order_number#77, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#90), dynamicpruningexpression(ws_sold_date_sk#90 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ws_sold_date_sk#80), dynamicpruningexpression(ws_sold_date_sk#80 IN dynamicpruning#8)] PushedFilters: [IsNotNull(ws_web_site_sk), IsNotNull(ws_item_sk), IsNotNull(ws_promo_sk)] ReadSchema: struct (72) ColumnarToRow [codegen id : 21] -Input [7]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_order_number#87, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90] +Input [7]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_order_number#77, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80] (73) Filter [codegen id : 21] -Input [7]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_order_number#87, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90] -Condition : ((isnotnull(ws_web_site_sk#85) AND isnotnull(ws_item_sk#84)) AND isnotnull(ws_promo_sk#86)) +Input [7]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_order_number#77, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80] +Condition : ((isnotnull(ws_web_site_sk#75) AND isnotnull(ws_item_sk#74)) AND isnotnull(ws_promo_sk#76)) (74) Exchange -Input [7]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_order_number#87, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90] -Arguments: hashpartitioning(ws_item_sk#84, ws_order_number#87, 5), ENSURE_REQUIREMENTS, [id=#91] +Input [7]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_order_number#77, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80] +Arguments: hashpartitioning(ws_item_sk#74, ws_order_number#77, 5), ENSURE_REQUIREMENTS, [plan_id=11] (75) Sort [codegen id : 22] -Input [7]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_order_number#87, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90] -Arguments: [ws_item_sk#84 ASC NULLS FIRST, ws_order_number#87 ASC NULLS FIRST], false, 0 +Input [7]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_order_number#77, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80] +Arguments: [ws_item_sk#74 ASC NULLS FIRST, ws_order_number#77 ASC NULLS FIRST], false, 0 (76) Scan parquet default.web_returns -Output [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] +Output [5]: [wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84, wr_returned_date_sk#85] Batched: true Location [not included in comparison]/{warehouse_dir}/web_returns] PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_order_number)] ReadSchema: struct (77) ColumnarToRow [codegen id : 23] -Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] +Input [5]: [wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84, wr_returned_date_sk#85] (78) Filter [codegen id : 23] -Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] -Condition : (isnotnull(wr_item_sk#92) AND isnotnull(wr_order_number#93)) +Input [5]: [wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84, wr_returned_date_sk#85] +Condition : (isnotnull(wr_item_sk#81) AND isnotnull(wr_order_number#82)) (79) Project [codegen id : 23] -Output [4]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95] -Input [5]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95, wr_returned_date_sk#96] +Output [4]: [wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84] +Input [5]: [wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84, wr_returned_date_sk#85] (80) Exchange -Input [4]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95] -Arguments: hashpartitioning(wr_item_sk#92, wr_order_number#93, 5), ENSURE_REQUIREMENTS, [id=#97] +Input [4]: [wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84] +Arguments: hashpartitioning(wr_item_sk#81, wr_order_number#82, 5), ENSURE_REQUIREMENTS, [plan_id=12] (81) Sort [codegen id : 24] -Input [4]: [wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95] -Arguments: [wr_item_sk#92 ASC NULLS FIRST, wr_order_number#93 ASC NULLS FIRST], false, 0 +Input [4]: [wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84] +Arguments: [wr_item_sk#81 ASC NULLS FIRST, wr_order_number#82 ASC NULLS FIRST], false, 0 (82) SortMergeJoin [codegen id : 29] -Left keys [2]: [ws_item_sk#84, ws_order_number#87] -Right keys [2]: [wr_item_sk#92, wr_order_number#93] +Left keys [2]: [ws_item_sk#74, ws_order_number#77] +Right keys [2]: [wr_item_sk#81, wr_order_number#82] Join condition: None (83) Project [codegen id : 29] -Output [8]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90, wr_return_amt#94, wr_net_loss#95] -Input [11]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_order_number#87, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90, wr_item_sk#92, wr_order_number#93, wr_return_amt#94, wr_net_loss#95] +Output [8]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80, wr_return_amt#83, wr_net_loss#84] +Input [11]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_order_number#77, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80, wr_item_sk#81, wr_order_number#82, wr_return_amt#83, wr_net_loss#84] (84) ReusedExchange [Reuses operator id: 125] -Output [1]: [d_date_sk#98] +Output [1]: [d_date_sk#86] (85) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_sold_date_sk#90] -Right keys [1]: [d_date_sk#98] +Left keys [1]: [ws_sold_date_sk#80] +Right keys [1]: [d_date_sk#86] Join condition: None (86) Project [codegen id : 29] -Output [7]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95] -Input [9]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, ws_sold_date_sk#90, wr_return_amt#94, wr_net_loss#95, d_date_sk#98] +Output [7]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84] +Input [9]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, ws_sold_date_sk#80, wr_return_amt#83, wr_net_loss#84, d_date_sk#86] (87) Scan parquet default.web_site -Output [2]: [web_site_sk#99, web_site_id#100] +Output [2]: [web_site_sk#87, web_site_id#88] Batched: true Location [not included in comparison]/{warehouse_dir}/web_site] PushedFilters: [IsNotNull(web_site_sk)] ReadSchema: struct (88) ColumnarToRow [codegen id : 26] -Input [2]: [web_site_sk#99, web_site_id#100] +Input [2]: [web_site_sk#87, web_site_id#88] (89) Filter [codegen id : 26] -Input [2]: [web_site_sk#99, web_site_id#100] -Condition : isnotnull(web_site_sk#99) +Input [2]: [web_site_sk#87, web_site_id#88] +Condition : isnotnull(web_site_sk#87) (90) BroadcastExchange -Input [2]: [web_site_sk#99, web_site_id#100] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#101] +Input [2]: [web_site_sk#87, web_site_id#88] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=13] (91) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_web_site_sk#85] -Right keys [1]: [web_site_sk#99] +Left keys [1]: [ws_web_site_sk#75] +Right keys [1]: [web_site_sk#87] Join condition: None (92) Project [codegen id : 29] -Output [7]: [ws_item_sk#84, ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95, web_site_id#100] -Input [9]: [ws_item_sk#84, ws_web_site_sk#85, ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95, web_site_sk#99, web_site_id#100] +Output [7]: [ws_item_sk#74, ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84, web_site_id#88] +Input [9]: [ws_item_sk#74, ws_web_site_sk#75, ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84, web_site_sk#87, web_site_id#88] (93) ReusedExchange [Reuses operator id: 27] -Output [1]: [i_item_sk#102] +Output [1]: [i_item_sk#89] (94) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_item_sk#84] -Right keys [1]: [i_item_sk#102] +Left keys [1]: [ws_item_sk#74] +Right keys [1]: [i_item_sk#89] Join condition: None (95) Project [codegen id : 29] -Output [6]: [ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95, web_site_id#100] -Input [8]: [ws_item_sk#84, ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95, web_site_id#100, i_item_sk#102] +Output [6]: [ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84, web_site_id#88] +Input [8]: [ws_item_sk#74, ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84, web_site_id#88, i_item_sk#89] (96) ReusedExchange [Reuses operator id: 34] -Output [1]: [p_promo_sk#103] +Output [1]: [p_promo_sk#90] (97) BroadcastHashJoin [codegen id : 29] -Left keys [1]: [ws_promo_sk#86] -Right keys [1]: [p_promo_sk#103] +Left keys [1]: [ws_promo_sk#76] +Right keys [1]: [p_promo_sk#90] Join condition: None (98) Project [codegen id : 29] -Output [5]: [ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95, web_site_id#100] -Input [7]: [ws_promo_sk#86, ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95, web_site_id#100, p_promo_sk#103] +Output [5]: [ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84, web_site_id#88] +Input [7]: [ws_promo_sk#76, ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84, web_site_id#88, p_promo_sk#90] (99) HashAggregate [codegen id : 29] -Input [5]: [ws_ext_sales_price#88, ws_net_profit#89, wr_return_amt#94, wr_net_loss#95, web_site_id#100] -Keys [1]: [web_site_id#100] -Functions [3]: [partial_sum(UnscaledValue(ws_ext_sales_price#88)), partial_sum(coalesce(cast(wr_return_amt#94 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ws_net_profit#89 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#95 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [5]: [sum#104, sum#105, isEmpty#106, sum#107, isEmpty#108] -Results [6]: [web_site_id#100, sum#109, sum#110, isEmpty#111, sum#112, isEmpty#113] +Input [5]: [ws_ext_sales_price#78, ws_net_profit#79, wr_return_amt#83, wr_net_loss#84, web_site_id#88] +Keys [1]: [web_site_id#88] +Functions [3]: [partial_sum(UnscaledValue(ws_ext_sales_price#78)), partial_sum(coalesce(cast(wr_return_amt#83 as decimal(12,2)), 0.00)), partial_sum(CheckOverflow((promote_precision(cast(ws_net_profit#79 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#84 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [5]: [sum#91, sum#92, isEmpty#93, sum#94, isEmpty#95] +Results [6]: [web_site_id#88, sum#96, sum#97, isEmpty#98, sum#99, isEmpty#100] (100) Exchange -Input [6]: [web_site_id#100, sum#109, sum#110, isEmpty#111, sum#112, isEmpty#113] -Arguments: hashpartitioning(web_site_id#100, 5), ENSURE_REQUIREMENTS, [id=#114] +Input [6]: [web_site_id#88, sum#96, sum#97, isEmpty#98, sum#99, isEmpty#100] +Arguments: hashpartitioning(web_site_id#88, 5), ENSURE_REQUIREMENTS, [plan_id=14] (101) HashAggregate [codegen id : 30] -Input [6]: [web_site_id#100, sum#109, sum#110, isEmpty#111, sum#112, isEmpty#113] -Keys [1]: [web_site_id#100] -Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#88)), sum(coalesce(cast(wr_return_amt#94 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ws_net_profit#89 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#95 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#88))#115, sum(coalesce(cast(wr_return_amt#94 as decimal(12,2)), 0.00))#116, sum(CheckOverflow((promote_precision(cast(ws_net_profit#89 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#95 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#117] -Results [5]: [web channel AS channel#118, concat(web_site, web_site_id#100) AS id#119, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#88))#115,17,2) AS sales#120, sum(coalesce(cast(wr_return_amt#94 as decimal(12,2)), 0.00))#116 AS returns#121, sum(CheckOverflow((promote_precision(cast(ws_net_profit#89 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#95 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#117 AS profit#122] +Input [6]: [web_site_id#88, sum#96, sum#97, isEmpty#98, sum#99, isEmpty#100] +Keys [1]: [web_site_id#88] +Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#78)), sum(coalesce(cast(wr_return_amt#83 as decimal(12,2)), 0.00)), sum(CheckOverflow((promote_precision(cast(ws_net_profit#79 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#84 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#78))#101, sum(coalesce(cast(wr_return_amt#83 as decimal(12,2)), 0.00))#102, sum(CheckOverflow((promote_precision(cast(ws_net_profit#79 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#84 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#103] +Results [5]: [web channel AS channel#104, concat(web_site, web_site_id#88) AS id#105, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#78))#101,17,2) AS sales#106, sum(coalesce(cast(wr_return_amt#83 as decimal(12,2)), 0.00))#102 AS returns#107, sum(CheckOverflow((promote_precision(cast(ws_net_profit#79 as decimal(13,2))) - promote_precision(cast(coalesce(cast(wr_net_loss#84 as decimal(12,2)), 0.00) as decimal(13,2)))), DecimalType(13,2)))#103 AS profit#108] (102) Union (103) HashAggregate [codegen id : 31] -Input [5]: [channel#40, id#41, sales#42, returns#43, profit#44] -Keys [2]: [channel#40, id#41] -Functions [3]: [partial_sum(sales#42), partial_sum(returns#43), partial_sum(profit#44)] -Aggregate Attributes [6]: [sum#123, isEmpty#124, sum#125, isEmpty#126, sum#127, isEmpty#128] -Results [8]: [channel#40, id#41, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] +Input [5]: [channel#34, id#35, sales#36, returns#37, profit#38] +Keys [2]: [channel#34, id#35] +Functions [3]: [partial_sum(sales#36), partial_sum(returns#37), partial_sum(profit#38)] +Aggregate Attributes [6]: [sum#109, isEmpty#110, sum#111, isEmpty#112, sum#113, isEmpty#114] +Results [8]: [channel#34, id#35, sum#115, isEmpty#116, sum#117, isEmpty#118, sum#119, isEmpty#120] (104) Exchange -Input [8]: [channel#40, id#41, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] -Arguments: hashpartitioning(channel#40, id#41, 5), ENSURE_REQUIREMENTS, [id=#135] +Input [8]: [channel#34, id#35, sum#115, isEmpty#116, sum#117, isEmpty#118, sum#119, isEmpty#120] +Arguments: hashpartitioning(channel#34, id#35, 5), ENSURE_REQUIREMENTS, [plan_id=15] (105) HashAggregate [codegen id : 32] -Input [8]: [channel#40, id#41, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] -Keys [2]: [channel#40, id#41] -Functions [3]: [sum(sales#42), sum(returns#43), sum(profit#44)] -Aggregate Attributes [3]: [sum(sales#42)#136, sum(returns#43)#137, sum(profit#44)#138] -Results [5]: [channel#40, id#41, cast(sum(sales#42)#136 as decimal(37,2)) AS sales#139, cast(sum(returns#43)#137 as decimal(38,2)) AS returns#140, cast(sum(profit#44)#138 as decimal(38,2)) AS profit#141] +Input [8]: [channel#34, id#35, sum#115, isEmpty#116, sum#117, isEmpty#118, sum#119, isEmpty#120] +Keys [2]: [channel#34, id#35] +Functions [3]: [sum(sales#36), sum(returns#37), sum(profit#38)] +Aggregate Attributes [3]: [sum(sales#36)#121, sum(returns#37)#122, sum(profit#38)#123] +Results [5]: [channel#34, id#35, cast(sum(sales#36)#121 as decimal(37,2)) AS sales#124, cast(sum(returns#37)#122 as decimal(38,2)) AS returns#125, cast(sum(profit#38)#123 as decimal(38,2)) AS profit#126] (106) ReusedExchange [Reuses operator id: 104] -Output [8]: [channel#40, id#41, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] +Output [8]: [channel#34, id#35, sum#115, isEmpty#116, sum#117, isEmpty#118, sum#119, isEmpty#120] (107) HashAggregate [codegen id : 64] -Input [8]: [channel#40, id#41, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] -Keys [2]: [channel#40, id#41] -Functions [3]: [sum(sales#42), sum(returns#43), sum(profit#44)] -Aggregate Attributes [3]: [sum(sales#42)#136, sum(returns#43)#137, sum(profit#44)#138] -Results [4]: [channel#40, sum(sales#42)#136 AS sales#142, sum(returns#43)#137 AS returns#143, sum(profit#44)#138 AS profit#144] +Input [8]: [channel#34, id#35, sum#115, isEmpty#116, sum#117, isEmpty#118, sum#119, isEmpty#120] +Keys [2]: [channel#34, id#35] +Functions [3]: [sum(sales#36), sum(returns#37), sum(profit#38)] +Aggregate Attributes [3]: [sum(sales#36)#121, sum(returns#37)#122, sum(profit#38)#123] +Results [4]: [channel#34, sum(sales#36)#121 AS sales#127, sum(returns#37)#122 AS returns#128, sum(profit#38)#123 AS profit#129] (108) HashAggregate [codegen id : 64] -Input [4]: [channel#40, sales#142, returns#143, profit#144] -Keys [1]: [channel#40] -Functions [3]: [partial_sum(sales#142), partial_sum(returns#143), partial_sum(profit#144)] -Aggregate Attributes [6]: [sum#145, isEmpty#146, sum#147, isEmpty#148, sum#149, isEmpty#150] -Results [7]: [channel#40, sum#151, isEmpty#152, sum#153, isEmpty#154, sum#155, isEmpty#156] +Input [4]: [channel#34, sales#127, returns#128, profit#129] +Keys [1]: [channel#34] +Functions [3]: [partial_sum(sales#127), partial_sum(returns#128), partial_sum(profit#129)] +Aggregate Attributes [6]: [sum#130, isEmpty#131, sum#132, isEmpty#133, sum#134, isEmpty#135] +Results [7]: [channel#34, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141] (109) Exchange -Input [7]: [channel#40, sum#151, isEmpty#152, sum#153, isEmpty#154, sum#155, isEmpty#156] -Arguments: hashpartitioning(channel#40, 5), ENSURE_REQUIREMENTS, [id=#157] +Input [7]: [channel#34, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141] +Arguments: hashpartitioning(channel#34, 5), ENSURE_REQUIREMENTS, [plan_id=16] (110) HashAggregate [codegen id : 65] -Input [7]: [channel#40, sum#151, isEmpty#152, sum#153, isEmpty#154, sum#155, isEmpty#156] -Keys [1]: [channel#40] -Functions [3]: [sum(sales#142), sum(returns#143), sum(profit#144)] -Aggregate Attributes [3]: [sum(sales#142)#158, sum(returns#143)#159, sum(profit#144)#160] -Results [5]: [channel#40, null AS id#161, sum(sales#142)#158 AS sales#162, sum(returns#143)#159 AS returns#163, sum(profit#144)#160 AS profit#164] +Input [7]: [channel#34, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141] +Keys [1]: [channel#34] +Functions [3]: [sum(sales#127), sum(returns#128), sum(profit#129)] +Aggregate Attributes [3]: [sum(sales#127)#142, sum(returns#128)#143, sum(profit#129)#144] +Results [5]: [channel#34, null AS id#145, sum(sales#127)#142 AS sales#146, sum(returns#128)#143 AS returns#147, sum(profit#129)#144 AS profit#148] (111) ReusedExchange [Reuses operator id: 104] -Output [8]: [channel#40, id#41, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] +Output [8]: [channel#34, id#35, sum#115, isEmpty#116, sum#117, isEmpty#118, sum#119, isEmpty#120] (112) HashAggregate [codegen id : 97] -Input [8]: [channel#40, id#41, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] -Keys [2]: [channel#40, id#41] -Functions [3]: [sum(sales#42), sum(returns#43), sum(profit#44)] -Aggregate Attributes [3]: [sum(sales#42)#136, sum(returns#43)#137, sum(profit#44)#138] -Results [3]: [sum(sales#42)#136 AS sales#142, sum(returns#43)#137 AS returns#143, sum(profit#44)#138 AS profit#144] +Input [8]: [channel#34, id#35, sum#115, isEmpty#116, sum#117, isEmpty#118, sum#119, isEmpty#120] +Keys [2]: [channel#34, id#35] +Functions [3]: [sum(sales#36), sum(returns#37), sum(profit#38)] +Aggregate Attributes [3]: [sum(sales#36)#121, sum(returns#37)#122, sum(profit#38)#123] +Results [3]: [sum(sales#36)#121 AS sales#127, sum(returns#37)#122 AS returns#128, sum(profit#38)#123 AS profit#129] (113) HashAggregate [codegen id : 97] -Input [3]: [sales#142, returns#143, profit#144] +Input [3]: [sales#127, returns#128, profit#129] Keys: [] -Functions [3]: [partial_sum(sales#142), partial_sum(returns#143), partial_sum(profit#144)] -Aggregate Attributes [6]: [sum#165, isEmpty#166, sum#167, isEmpty#168, sum#169, isEmpty#170] -Results [6]: [sum#171, isEmpty#172, sum#173, isEmpty#174, sum#175, isEmpty#176] +Functions [3]: [partial_sum(sales#127), partial_sum(returns#128), partial_sum(profit#129)] +Aggregate Attributes [6]: [sum#149, isEmpty#150, sum#151, isEmpty#152, sum#153, isEmpty#154] +Results [6]: [sum#155, isEmpty#156, sum#157, isEmpty#158, sum#159, isEmpty#160] (114) Exchange -Input [6]: [sum#171, isEmpty#172, sum#173, isEmpty#174, sum#175, isEmpty#176] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#177] +Input [6]: [sum#155, isEmpty#156, sum#157, isEmpty#158, sum#159, isEmpty#160] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=17] (115) HashAggregate [codegen id : 98] -Input [6]: [sum#171, isEmpty#172, sum#173, isEmpty#174, sum#175, isEmpty#176] +Input [6]: [sum#155, isEmpty#156, sum#157, isEmpty#158, sum#159, isEmpty#160] Keys: [] -Functions [3]: [sum(sales#142), sum(returns#143), sum(profit#144)] -Aggregate Attributes [3]: [sum(sales#142)#178, sum(returns#143)#179, sum(profit#144)#180] -Results [5]: [null AS channel#181, null AS id#182, sum(sales#142)#178 AS sales#183, sum(returns#143)#179 AS returns#184, sum(profit#144)#180 AS profit#185] +Functions [3]: [sum(sales#127), sum(returns#128), sum(profit#129)] +Aggregate Attributes [3]: [sum(sales#127)#161, sum(returns#128)#162, sum(profit#129)#163] +Results [5]: [null AS channel#164, null AS id#165, sum(sales#127)#161 AS sales#166, sum(returns#128)#162 AS returns#167, sum(profit#129)#163 AS profit#168] (116) Union (117) HashAggregate [codegen id : 99] -Input [5]: [channel#40, id#41, sales#139, returns#140, profit#141] -Keys [5]: [channel#40, id#41, sales#139, returns#140, profit#141] +Input [5]: [channel#34, id#35, sales#124, returns#125, profit#126] +Keys [5]: [channel#34, id#35, sales#124, returns#125, profit#126] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#40, id#41, sales#139, returns#140, profit#141] +Results [5]: [channel#34, id#35, sales#124, returns#125, profit#126] (118) Exchange -Input [5]: [channel#40, id#41, sales#139, returns#140, profit#141] -Arguments: hashpartitioning(channel#40, id#41, sales#139, returns#140, profit#141, 5), ENSURE_REQUIREMENTS, [id=#186] +Input [5]: [channel#34, id#35, sales#124, returns#125, profit#126] +Arguments: hashpartitioning(channel#34, id#35, sales#124, returns#125, profit#126, 5), ENSURE_REQUIREMENTS, [plan_id=18] (119) HashAggregate [codegen id : 100] -Input [5]: [channel#40, id#41, sales#139, returns#140, profit#141] -Keys [5]: [channel#40, id#41, sales#139, returns#140, profit#141] +Input [5]: [channel#34, id#35, sales#124, returns#125, profit#126] +Keys [5]: [channel#34, id#35, sales#124, returns#125, profit#126] Functions: [] Aggregate Attributes: [] -Results [5]: [channel#40, id#41, sales#139, returns#140, profit#141] +Results [5]: [channel#34, id#35, sales#124, returns#125, profit#126] (120) TakeOrderedAndProject -Input [5]: [channel#40, id#41, sales#139, returns#140, profit#141] -Arguments: 100, [channel#40 ASC NULLS FIRST, id#41 ASC NULLS FIRST], [channel#40, id#41, sales#139, returns#140, profit#141] +Input [5]: [channel#34, id#35, sales#124, returns#125, profit#126] +Arguments: 100, [channel#34 ASC NULLS FIRST, id#35 ASC NULLS FIRST], [channel#34, id#35, sales#124, returns#125, profit#126] ===== Subqueries ===== @@ -687,29 +687,29 @@ BroadcastExchange (125) (121) Scan parquet default.date_dim -Output [2]: [d_date_sk#16, d_date#187] +Output [2]: [d_date_sk#14, d_date#169] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1998-08-04), LessThanOrEqual(d_date,1998-09-03), IsNotNull(d_date_sk)] ReadSchema: struct (122) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#16, d_date#187] +Input [2]: [d_date_sk#14, d_date#169] (123) Filter [codegen id : 1] -Input [2]: [d_date_sk#16, d_date#187] -Condition : (((isnotnull(d_date#187) AND (d_date#187 >= 1998-08-04)) AND (d_date#187 <= 1998-09-03)) AND isnotnull(d_date_sk#16)) +Input [2]: [d_date_sk#14, d_date#169] +Condition : (((isnotnull(d_date#169) AND (d_date#169 >= 1998-08-04)) AND (d_date#169 <= 1998-09-03)) AND isnotnull(d_date_sk#14)) (124) Project [codegen id : 1] -Output [1]: [d_date_sk#16] -Input [2]: [d_date_sk#16, d_date#187] +Output [1]: [d_date_sk#14] +Input [2]: [d_date_sk#14, d_date#169] (125) BroadcastExchange -Input [1]: [d_date_sk#16] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#188] +Input [1]: [d_date_sk#14] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=19] -Subquery:2 Hosting operator id = 40 Hosting Expression = cs_sold_date_sk#51 IN dynamicpruning#8 +Subquery:2 Hosting operator id = 40 Hosting Expression = cs_sold_date_sk#45 IN dynamicpruning#8 -Subquery:3 Hosting operator id = 71 Hosting Expression = ws_sold_date_sk#90 IN dynamicpruning#8 +Subquery:3 Hosting operator id = 71 Hosting Expression = ws_sold_date_sk#80 IN dynamicpruning#8 diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q86a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q86a.sf100/explain.txt index 1dd3dc76a8f56..4301f4cd2b2d1 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q86a.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q86a.sf100/explain.txt @@ -78,7 +78,7 @@ Condition : isnotnull(i_item_sk#6) (10) BroadcastExchange Input [3]: [i_item_sk#6, i_class#7, i_category#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ws_item_sk#1] @@ -93,115 +93,115 @@ Input [5]: [ws_item_sk#1, ws_net_paid#2, i_item_sk#6, i_class#7, i_category#8] Input [3]: [ws_net_paid#2, i_class#7, i_category#8] Keys [2]: [i_category#8, i_class#7] Functions [1]: [partial_sum(UnscaledValue(ws_net_paid#2))] -Aggregate Attributes [1]: [sum#10] -Results [3]: [i_category#8, i_class#7, sum#11] +Aggregate Attributes [1]: [sum#9] +Results [3]: [i_category#8, i_class#7, sum#10] (14) Exchange -Input [3]: [i_category#8, i_class#7, sum#11] -Arguments: hashpartitioning(i_category#8, i_class#7, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [3]: [i_category#8, i_class#7, sum#10] +Arguments: hashpartitioning(i_category#8, i_class#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 4] -Input [3]: [i_category#8, i_class#7, sum#11] +Input [3]: [i_category#8, i_class#7, sum#10] Keys [2]: [i_category#8, i_class#7] Functions [1]: [sum(UnscaledValue(ws_net_paid#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#13] -Results [6]: [cast(MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#13,17,2) as decimal(27,2)) AS total_sum#14, i_category#8, i_class#7, 0 AS g_category#15, 0 AS g_class#16, 0 AS lochierarchy#17] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#11] +Results [6]: [cast(MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#11,17,2) as decimal(27,2)) AS total_sum#12, i_category#8, i_class#7, 0 AS g_category#13, 0 AS g_class#14, 0 AS lochierarchy#15] (16) ReusedExchange [Reuses operator id: 14] -Output [3]: [i_category#8, i_class#7, sum#18] +Output [3]: [i_category#8, i_class#7, sum#16] (17) HashAggregate [codegen id : 8] -Input [3]: [i_category#8, i_class#7, sum#18] +Input [3]: [i_category#8, i_class#7, sum#16] Keys [2]: [i_category#8, i_class#7] Functions [1]: [sum(UnscaledValue(ws_net_paid#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#13] -Results [2]: [MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#13,17,2) AS total_sum#19, i_category#8] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#11] +Results [2]: [MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#11,17,2) AS total_sum#17, i_category#8] (18) HashAggregate [codegen id : 8] -Input [2]: [total_sum#19, i_category#8] +Input [2]: [total_sum#17, i_category#8] Keys [1]: [i_category#8] -Functions [1]: [partial_sum(total_sum#19)] -Aggregate Attributes [2]: [sum#20, isEmpty#21] -Results [3]: [i_category#8, sum#22, isEmpty#23] +Functions [1]: [partial_sum(total_sum#17)] +Aggregate Attributes [2]: [sum#18, isEmpty#19] +Results [3]: [i_category#8, sum#20, isEmpty#21] (19) Exchange -Input [3]: [i_category#8, sum#22, isEmpty#23] -Arguments: hashpartitioning(i_category#8, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [3]: [i_category#8, sum#20, isEmpty#21] +Arguments: hashpartitioning(i_category#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 9] -Input [3]: [i_category#8, sum#22, isEmpty#23] +Input [3]: [i_category#8, sum#20, isEmpty#21] Keys [1]: [i_category#8] -Functions [1]: [sum(total_sum#19)] -Aggregate Attributes [1]: [sum(total_sum#19)#25] -Results [6]: [sum(total_sum#19)#25 AS total_sum#26, i_category#8, null AS i_class#27, 0 AS g_category#28, 1 AS g_class#29, 1 AS lochierarchy#30] +Functions [1]: [sum(total_sum#17)] +Aggregate Attributes [1]: [sum(total_sum#17)#22] +Results [6]: [sum(total_sum#17)#22 AS total_sum#23, i_category#8, null AS i_class#24, 0 AS g_category#25, 1 AS g_class#26, 1 AS lochierarchy#27] (21) ReusedExchange [Reuses operator id: 14] -Output [3]: [i_category#8, i_class#7, sum#31] +Output [3]: [i_category#8, i_class#7, sum#28] (22) HashAggregate [codegen id : 13] -Input [3]: [i_category#8, i_class#7, sum#31] +Input [3]: [i_category#8, i_class#7, sum#28] Keys [2]: [i_category#8, i_class#7] Functions [1]: [sum(UnscaledValue(ws_net_paid#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#13] -Results [1]: [MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#13,17,2) AS total_sum#19] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#11] +Results [1]: [MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#11,17,2) AS total_sum#17] (23) HashAggregate [codegen id : 13] -Input [1]: [total_sum#19] +Input [1]: [total_sum#17] Keys: [] -Functions [1]: [partial_sum(total_sum#19)] -Aggregate Attributes [2]: [sum#32, isEmpty#33] -Results [2]: [sum#34, isEmpty#35] +Functions [1]: [partial_sum(total_sum#17)] +Aggregate Attributes [2]: [sum#29, isEmpty#30] +Results [2]: [sum#31, isEmpty#32] (24) Exchange -Input [2]: [sum#34, isEmpty#35] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#36] +Input [2]: [sum#31, isEmpty#32] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (25) HashAggregate [codegen id : 14] -Input [2]: [sum#34, isEmpty#35] +Input [2]: [sum#31, isEmpty#32] Keys: [] -Functions [1]: [sum(total_sum#19)] -Aggregate Attributes [1]: [sum(total_sum#19)#37] -Results [6]: [sum(total_sum#19)#37 AS total_sum#38, null AS i_category#39, null AS i_class#40, 1 AS g_category#41, 1 AS g_class#42, 2 AS lochierarchy#43] +Functions [1]: [sum(total_sum#17)] +Aggregate Attributes [1]: [sum(total_sum#17)#33] +Results [6]: [sum(total_sum#17)#33 AS total_sum#34, null AS i_category#35, null AS i_class#36, 1 AS g_category#37, 1 AS g_class#38, 2 AS lochierarchy#39] (26) Union (27) HashAggregate [codegen id : 15] -Input [6]: [total_sum#14, i_category#8, i_class#7, g_category#15, g_class#16, lochierarchy#17] -Keys [6]: [total_sum#14, i_category#8, i_class#7, g_category#15, g_class#16, lochierarchy#17] +Input [6]: [total_sum#12, i_category#8, i_class#7, g_category#13, g_class#14, lochierarchy#15] +Keys [6]: [total_sum#12, i_category#8, i_class#7, g_category#13, g_class#14, lochierarchy#15] Functions: [] Aggregate Attributes: [] -Results [6]: [total_sum#14, i_category#8, i_class#7, g_category#15, g_class#16, lochierarchy#17] +Results [6]: [total_sum#12, i_category#8, i_class#7, g_category#13, g_class#14, lochierarchy#15] (28) Exchange -Input [6]: [total_sum#14, i_category#8, i_class#7, g_category#15, g_class#16, lochierarchy#17] -Arguments: hashpartitioning(total_sum#14, i_category#8, i_class#7, g_category#15, g_class#16, lochierarchy#17, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [6]: [total_sum#12, i_category#8, i_class#7, g_category#13, g_class#14, lochierarchy#15] +Arguments: hashpartitioning(total_sum#12, i_category#8, i_class#7, g_category#13, g_class#14, lochierarchy#15, 5), ENSURE_REQUIREMENTS, [plan_id=5] (29) HashAggregate [codegen id : 16] -Input [6]: [total_sum#14, i_category#8, i_class#7, g_category#15, g_class#16, lochierarchy#17] -Keys [6]: [total_sum#14, i_category#8, i_class#7, g_category#15, g_class#16, lochierarchy#17] +Input [6]: [total_sum#12, i_category#8, i_class#7, g_category#13, g_class#14, lochierarchy#15] +Keys [6]: [total_sum#12, i_category#8, i_class#7, g_category#13, g_class#14, lochierarchy#15] Functions: [] Aggregate Attributes: [] -Results [5]: [total_sum#14, i_category#8, i_class#7, lochierarchy#17, CASE WHEN (g_class#16 = 0) THEN i_category#8 END AS _w0#45] +Results [5]: [total_sum#12, i_category#8, i_class#7, lochierarchy#15, CASE WHEN (g_class#14 = 0) THEN i_category#8 END AS _w0#40] (30) Exchange -Input [5]: [total_sum#14, i_category#8, i_class#7, lochierarchy#17, _w0#45] -Arguments: hashpartitioning(lochierarchy#17, _w0#45, 5), ENSURE_REQUIREMENTS, [id=#46] +Input [5]: [total_sum#12, i_category#8, i_class#7, lochierarchy#15, _w0#40] +Arguments: hashpartitioning(lochierarchy#15, _w0#40, 5), ENSURE_REQUIREMENTS, [plan_id=6] (31) Sort [codegen id : 17] -Input [5]: [total_sum#14, i_category#8, i_class#7, lochierarchy#17, _w0#45] -Arguments: [lochierarchy#17 ASC NULLS FIRST, _w0#45 ASC NULLS FIRST, total_sum#14 DESC NULLS LAST], false, 0 +Input [5]: [total_sum#12, i_category#8, i_class#7, lochierarchy#15, _w0#40] +Arguments: [lochierarchy#15 ASC NULLS FIRST, _w0#40 ASC NULLS FIRST, total_sum#12 DESC NULLS LAST], false, 0 (32) Window -Input [5]: [total_sum#14, i_category#8, i_class#7, lochierarchy#17, _w0#45] -Arguments: [rank(total_sum#14) windowspecdefinition(lochierarchy#17, _w0#45, total_sum#14 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#47], [lochierarchy#17, _w0#45], [total_sum#14 DESC NULLS LAST] +Input [5]: [total_sum#12, i_category#8, i_class#7, lochierarchy#15, _w0#40] +Arguments: [rank(total_sum#12) windowspecdefinition(lochierarchy#15, _w0#40, total_sum#12 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#41], [lochierarchy#15, _w0#40], [total_sum#12 DESC NULLS LAST] (33) Project [codegen id : 18] -Output [5]: [total_sum#14, i_category#8, i_class#7, lochierarchy#17, rank_within_parent#47] -Input [6]: [total_sum#14, i_category#8, i_class#7, lochierarchy#17, _w0#45, rank_within_parent#47] +Output [5]: [total_sum#12, i_category#8, i_class#7, lochierarchy#15, rank_within_parent#41] +Input [6]: [total_sum#12, i_category#8, i_class#7, lochierarchy#15, _w0#40, rank_within_parent#41] (34) TakeOrderedAndProject -Input [5]: [total_sum#14, i_category#8, i_class#7, lochierarchy#17, rank_within_parent#47] -Arguments: 100, [lochierarchy#17 DESC NULLS LAST, CASE WHEN (lochierarchy#17 = 0) THEN i_category#8 END ASC NULLS FIRST, rank_within_parent#47 ASC NULLS FIRST], [total_sum#14, i_category#8, i_class#7, lochierarchy#17, rank_within_parent#47] +Input [5]: [total_sum#12, i_category#8, i_class#7, lochierarchy#15, rank_within_parent#41] +Arguments: 100, [lochierarchy#15 DESC NULLS LAST, CASE WHEN (lochierarchy#15 = 0) THEN i_category#8 END ASC NULLS FIRST, rank_within_parent#41 ASC NULLS FIRST], [total_sum#12, i_category#8, i_class#7, lochierarchy#15, rank_within_parent#41] ===== Subqueries ===== @@ -214,25 +214,25 @@ BroadcastExchange (39) (35) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_month_seq#48] +Output [2]: [d_date_sk#5, d_month_seq#42] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_date_sk)] ReadSchema: struct (36) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#48] +Input [2]: [d_date_sk#5, d_month_seq#42] (37) Filter [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#48] -Condition : (((isnotnull(d_month_seq#48) AND (d_month_seq#48 >= 1212)) AND (d_month_seq#48 <= 1223)) AND isnotnull(d_date_sk#5)) +Input [2]: [d_date_sk#5, d_month_seq#42] +Condition : (((isnotnull(d_month_seq#42) AND (d_month_seq#42 >= 1212)) AND (d_month_seq#42 <= 1223)) AND isnotnull(d_date_sk#5)) (38) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_month_seq#48] +Input [2]: [d_date_sk#5, d_month_seq#42] (39) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#49] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q86a/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q86a/explain.txt index 1dd3dc76a8f56..4301f4cd2b2d1 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q86a/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q86a/explain.txt @@ -78,7 +78,7 @@ Condition : isnotnull(i_item_sk#6) (10) BroadcastExchange Input [3]: [i_item_sk#6, i_class#7, i_category#8] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ws_item_sk#1] @@ -93,115 +93,115 @@ Input [5]: [ws_item_sk#1, ws_net_paid#2, i_item_sk#6, i_class#7, i_category#8] Input [3]: [ws_net_paid#2, i_class#7, i_category#8] Keys [2]: [i_category#8, i_class#7] Functions [1]: [partial_sum(UnscaledValue(ws_net_paid#2))] -Aggregate Attributes [1]: [sum#10] -Results [3]: [i_category#8, i_class#7, sum#11] +Aggregate Attributes [1]: [sum#9] +Results [3]: [i_category#8, i_class#7, sum#10] (14) Exchange -Input [3]: [i_category#8, i_class#7, sum#11] -Arguments: hashpartitioning(i_category#8, i_class#7, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [3]: [i_category#8, i_class#7, sum#10] +Arguments: hashpartitioning(i_category#8, i_class#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 4] -Input [3]: [i_category#8, i_class#7, sum#11] +Input [3]: [i_category#8, i_class#7, sum#10] Keys [2]: [i_category#8, i_class#7] Functions [1]: [sum(UnscaledValue(ws_net_paid#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#13] -Results [6]: [cast(MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#13,17,2) as decimal(27,2)) AS total_sum#14, i_category#8, i_class#7, 0 AS g_category#15, 0 AS g_class#16, 0 AS lochierarchy#17] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#11] +Results [6]: [cast(MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#11,17,2) as decimal(27,2)) AS total_sum#12, i_category#8, i_class#7, 0 AS g_category#13, 0 AS g_class#14, 0 AS lochierarchy#15] (16) ReusedExchange [Reuses operator id: 14] -Output [3]: [i_category#8, i_class#7, sum#18] +Output [3]: [i_category#8, i_class#7, sum#16] (17) HashAggregate [codegen id : 8] -Input [3]: [i_category#8, i_class#7, sum#18] +Input [3]: [i_category#8, i_class#7, sum#16] Keys [2]: [i_category#8, i_class#7] Functions [1]: [sum(UnscaledValue(ws_net_paid#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#13] -Results [2]: [MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#13,17,2) AS total_sum#19, i_category#8] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#11] +Results [2]: [MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#11,17,2) AS total_sum#17, i_category#8] (18) HashAggregate [codegen id : 8] -Input [2]: [total_sum#19, i_category#8] +Input [2]: [total_sum#17, i_category#8] Keys [1]: [i_category#8] -Functions [1]: [partial_sum(total_sum#19)] -Aggregate Attributes [2]: [sum#20, isEmpty#21] -Results [3]: [i_category#8, sum#22, isEmpty#23] +Functions [1]: [partial_sum(total_sum#17)] +Aggregate Attributes [2]: [sum#18, isEmpty#19] +Results [3]: [i_category#8, sum#20, isEmpty#21] (19) Exchange -Input [3]: [i_category#8, sum#22, isEmpty#23] -Arguments: hashpartitioning(i_category#8, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [3]: [i_category#8, sum#20, isEmpty#21] +Arguments: hashpartitioning(i_category#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 9] -Input [3]: [i_category#8, sum#22, isEmpty#23] +Input [3]: [i_category#8, sum#20, isEmpty#21] Keys [1]: [i_category#8] -Functions [1]: [sum(total_sum#19)] -Aggregate Attributes [1]: [sum(total_sum#19)#25] -Results [6]: [sum(total_sum#19)#25 AS total_sum#26, i_category#8, null AS i_class#27, 0 AS g_category#28, 1 AS g_class#29, 1 AS lochierarchy#30] +Functions [1]: [sum(total_sum#17)] +Aggregate Attributes [1]: [sum(total_sum#17)#22] +Results [6]: [sum(total_sum#17)#22 AS total_sum#23, i_category#8, null AS i_class#24, 0 AS g_category#25, 1 AS g_class#26, 1 AS lochierarchy#27] (21) ReusedExchange [Reuses operator id: 14] -Output [3]: [i_category#8, i_class#7, sum#31] +Output [3]: [i_category#8, i_class#7, sum#28] (22) HashAggregate [codegen id : 13] -Input [3]: [i_category#8, i_class#7, sum#31] +Input [3]: [i_category#8, i_class#7, sum#28] Keys [2]: [i_category#8, i_class#7] Functions [1]: [sum(UnscaledValue(ws_net_paid#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#13] -Results [1]: [MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#13,17,2) AS total_sum#19] +Aggregate Attributes [1]: [sum(UnscaledValue(ws_net_paid#2))#11] +Results [1]: [MakeDecimal(sum(UnscaledValue(ws_net_paid#2))#11,17,2) AS total_sum#17] (23) HashAggregate [codegen id : 13] -Input [1]: [total_sum#19] +Input [1]: [total_sum#17] Keys: [] -Functions [1]: [partial_sum(total_sum#19)] -Aggregate Attributes [2]: [sum#32, isEmpty#33] -Results [2]: [sum#34, isEmpty#35] +Functions [1]: [partial_sum(total_sum#17)] +Aggregate Attributes [2]: [sum#29, isEmpty#30] +Results [2]: [sum#31, isEmpty#32] (24) Exchange -Input [2]: [sum#34, isEmpty#35] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#36] +Input [2]: [sum#31, isEmpty#32] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (25) HashAggregate [codegen id : 14] -Input [2]: [sum#34, isEmpty#35] +Input [2]: [sum#31, isEmpty#32] Keys: [] -Functions [1]: [sum(total_sum#19)] -Aggregate Attributes [1]: [sum(total_sum#19)#37] -Results [6]: [sum(total_sum#19)#37 AS total_sum#38, null AS i_category#39, null AS i_class#40, 1 AS g_category#41, 1 AS g_class#42, 2 AS lochierarchy#43] +Functions [1]: [sum(total_sum#17)] +Aggregate Attributes [1]: [sum(total_sum#17)#33] +Results [6]: [sum(total_sum#17)#33 AS total_sum#34, null AS i_category#35, null AS i_class#36, 1 AS g_category#37, 1 AS g_class#38, 2 AS lochierarchy#39] (26) Union (27) HashAggregate [codegen id : 15] -Input [6]: [total_sum#14, i_category#8, i_class#7, g_category#15, g_class#16, lochierarchy#17] -Keys [6]: [total_sum#14, i_category#8, i_class#7, g_category#15, g_class#16, lochierarchy#17] +Input [6]: [total_sum#12, i_category#8, i_class#7, g_category#13, g_class#14, lochierarchy#15] +Keys [6]: [total_sum#12, i_category#8, i_class#7, g_category#13, g_class#14, lochierarchy#15] Functions: [] Aggregate Attributes: [] -Results [6]: [total_sum#14, i_category#8, i_class#7, g_category#15, g_class#16, lochierarchy#17] +Results [6]: [total_sum#12, i_category#8, i_class#7, g_category#13, g_class#14, lochierarchy#15] (28) Exchange -Input [6]: [total_sum#14, i_category#8, i_class#7, g_category#15, g_class#16, lochierarchy#17] -Arguments: hashpartitioning(total_sum#14, i_category#8, i_class#7, g_category#15, g_class#16, lochierarchy#17, 5), ENSURE_REQUIREMENTS, [id=#44] +Input [6]: [total_sum#12, i_category#8, i_class#7, g_category#13, g_class#14, lochierarchy#15] +Arguments: hashpartitioning(total_sum#12, i_category#8, i_class#7, g_category#13, g_class#14, lochierarchy#15, 5), ENSURE_REQUIREMENTS, [plan_id=5] (29) HashAggregate [codegen id : 16] -Input [6]: [total_sum#14, i_category#8, i_class#7, g_category#15, g_class#16, lochierarchy#17] -Keys [6]: [total_sum#14, i_category#8, i_class#7, g_category#15, g_class#16, lochierarchy#17] +Input [6]: [total_sum#12, i_category#8, i_class#7, g_category#13, g_class#14, lochierarchy#15] +Keys [6]: [total_sum#12, i_category#8, i_class#7, g_category#13, g_class#14, lochierarchy#15] Functions: [] Aggregate Attributes: [] -Results [5]: [total_sum#14, i_category#8, i_class#7, lochierarchy#17, CASE WHEN (g_class#16 = 0) THEN i_category#8 END AS _w0#45] +Results [5]: [total_sum#12, i_category#8, i_class#7, lochierarchy#15, CASE WHEN (g_class#14 = 0) THEN i_category#8 END AS _w0#40] (30) Exchange -Input [5]: [total_sum#14, i_category#8, i_class#7, lochierarchy#17, _w0#45] -Arguments: hashpartitioning(lochierarchy#17, _w0#45, 5), ENSURE_REQUIREMENTS, [id=#46] +Input [5]: [total_sum#12, i_category#8, i_class#7, lochierarchy#15, _w0#40] +Arguments: hashpartitioning(lochierarchy#15, _w0#40, 5), ENSURE_REQUIREMENTS, [plan_id=6] (31) Sort [codegen id : 17] -Input [5]: [total_sum#14, i_category#8, i_class#7, lochierarchy#17, _w0#45] -Arguments: [lochierarchy#17 ASC NULLS FIRST, _w0#45 ASC NULLS FIRST, total_sum#14 DESC NULLS LAST], false, 0 +Input [5]: [total_sum#12, i_category#8, i_class#7, lochierarchy#15, _w0#40] +Arguments: [lochierarchy#15 ASC NULLS FIRST, _w0#40 ASC NULLS FIRST, total_sum#12 DESC NULLS LAST], false, 0 (32) Window -Input [5]: [total_sum#14, i_category#8, i_class#7, lochierarchy#17, _w0#45] -Arguments: [rank(total_sum#14) windowspecdefinition(lochierarchy#17, _w0#45, total_sum#14 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#47], [lochierarchy#17, _w0#45], [total_sum#14 DESC NULLS LAST] +Input [5]: [total_sum#12, i_category#8, i_class#7, lochierarchy#15, _w0#40] +Arguments: [rank(total_sum#12) windowspecdefinition(lochierarchy#15, _w0#40, total_sum#12 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rank_within_parent#41], [lochierarchy#15, _w0#40], [total_sum#12 DESC NULLS LAST] (33) Project [codegen id : 18] -Output [5]: [total_sum#14, i_category#8, i_class#7, lochierarchy#17, rank_within_parent#47] -Input [6]: [total_sum#14, i_category#8, i_class#7, lochierarchy#17, _w0#45, rank_within_parent#47] +Output [5]: [total_sum#12, i_category#8, i_class#7, lochierarchy#15, rank_within_parent#41] +Input [6]: [total_sum#12, i_category#8, i_class#7, lochierarchy#15, _w0#40, rank_within_parent#41] (34) TakeOrderedAndProject -Input [5]: [total_sum#14, i_category#8, i_class#7, lochierarchy#17, rank_within_parent#47] -Arguments: 100, [lochierarchy#17 DESC NULLS LAST, CASE WHEN (lochierarchy#17 = 0) THEN i_category#8 END ASC NULLS FIRST, rank_within_parent#47 ASC NULLS FIRST], [total_sum#14, i_category#8, i_class#7, lochierarchy#17, rank_within_parent#47] +Input [5]: [total_sum#12, i_category#8, i_class#7, lochierarchy#15, rank_within_parent#41] +Arguments: 100, [lochierarchy#15 DESC NULLS LAST, CASE WHEN (lochierarchy#15 = 0) THEN i_category#8 END ASC NULLS FIRST, rank_within_parent#41 ASC NULLS FIRST], [total_sum#12, i_category#8, i_class#7, lochierarchy#15, rank_within_parent#41] ===== Subqueries ===== @@ -214,25 +214,25 @@ BroadcastExchange (39) (35) Scan parquet default.date_dim -Output [2]: [d_date_sk#5, d_month_seq#48] +Output [2]: [d_date_sk#5, d_month_seq#42] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_date_sk)] ReadSchema: struct (36) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#48] +Input [2]: [d_date_sk#5, d_month_seq#42] (37) Filter [codegen id : 1] -Input [2]: [d_date_sk#5, d_month_seq#48] -Condition : (((isnotnull(d_month_seq#48) AND (d_month_seq#48 >= 1212)) AND (d_month_seq#48 <= 1223)) AND isnotnull(d_date_sk#5)) +Input [2]: [d_date_sk#5, d_month_seq#42] +Condition : (((isnotnull(d_month_seq#42) AND (d_month_seq#42 >= 1212)) AND (d_month_seq#42 <= 1223)) AND isnotnull(d_date_sk#5)) (38) Project [codegen id : 1] Output [1]: [d_date_sk#5] -Input [2]: [d_date_sk#5, d_month_seq#48] +Input [2]: [d_date_sk#5, d_month_seq#42] (39) BroadcastExchange Input [1]: [d_date_sk#5] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#49] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=7] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q98.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q98.sf100/explain.txt index fd1c4b503eaa8..e49d55b5e12aa 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q98.sf100/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q98.sf100/explain.txt @@ -42,96 +42,96 @@ Condition : isnotnull(ss_item_sk#1) (4) Exchange Input [3]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3] -Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#5] +Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [plan_id=1] (5) Sort [codegen id : 2] Input [3]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3] Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0 (6) Scan parquet default.item -Output [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Output [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] Batched: true Location [not included in comparison]/{warehouse_dir}/item] PushedFilters: [In(i_category, [Books ,Home ,Sports ]), IsNotNull(i_item_sk)] ReadSchema: struct (7) ColumnarToRow [codegen id : 3] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (8) Filter [codegen id : 3] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Condition : (i_category#11 IN (Sports ,Books ,Home ) AND isnotnull(i_item_sk#6)) +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Condition : (i_category#10 IN (Sports ,Books ,Home ) AND isnotnull(i_item_sk#5)) (9) Exchange -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Arguments: hashpartitioning(i_item_sk#6, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Arguments: hashpartitioning(i_item_sk#5, 5), ENSURE_REQUIREMENTS, [plan_id=2] (10) Sort [codegen id : 4] -Input [6]: [i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Arguments: [i_item_sk#6 ASC NULLS FIRST], false, 0 +Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Arguments: [i_item_sk#5 ASC NULLS FIRST], false, 0 (11) SortMergeJoin [codegen id : 6] Left keys [1]: [ss_item_sk#1] -Right keys [1]: [i_item_sk#6] +Right keys [1]: [i_item_sk#5] Join condition: None (12) Project [codegen id : 6] -Output [7]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Input [9]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_sk#6, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] +Output [7]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Input [9]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (13) ReusedExchange [Reuses operator id: 29] -Output [1]: [d_date_sk#13] +Output [1]: [d_date_sk#11] (14) BroadcastHashJoin [codegen id : 6] Left keys [1]: [ss_sold_date_sk#3] -Right keys [1]: [d_date_sk#13] +Right keys [1]: [d_date_sk#11] Join condition: None (15) Project [codegen id : 6] -Output [6]: [ss_ext_sales_price#2, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Input [8]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11, d_date_sk#13] +Output [6]: [ss_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Input [8]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#11] (16) HashAggregate [codegen id : 6] -Input [6]: [ss_ext_sales_price#2, i_item_id#7, i_item_desc#8, i_current_price#9, i_class#10, i_category#11] -Keys [5]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9] +Input [6]: [ss_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] +Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#14] -Results [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] +Aggregate Attributes [1]: [sum#12] +Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] (17) Exchange -Input [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] -Arguments: hashpartitioning(i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 7] -Input [6]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, sum#15] -Keys [5]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#17] -Results [8]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#17,17,2) AS itemrevenue#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#17,17,2) AS _w0#19, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#17,17,2) AS _w1#20] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#14] +Results [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS itemrevenue#15, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS _w0#16, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS _w1#17] (19) Exchange -Input [8]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20] -Arguments: hashpartitioning(i_class#10, 5), ENSURE_REQUIREMENTS, [id=#21] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=4] (20) Sort [codegen id : 8] -Input [8]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20] -Arguments: [i_class#10 ASC NULLS FIRST], false, 0 +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: [i_class#9 ASC NULLS FIRST], false, 0 (21) Window -Input [8]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20] -Arguments: [sum(_w1#20) windowspecdefinition(i_class#10, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#22], [i_class#10] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: [sum(_w1#17) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#9] (22) Project [codegen id : 9] -Output [7]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#19) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#22)), DecimalType(38,17)) AS revenueratio#23] -Input [9]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, _w0#19, _w1#20, _we0#22] +Output [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#16) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#18)), DecimalType(38,17)) AS revenueratio#19] +Input [9]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, _we0#18] (23) Exchange -Input [7]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, revenueratio#23] -Arguments: rangepartitioning(i_category#11 ASC NULLS FIRST, i_class#10 ASC NULLS FIRST, i_item_id#7 ASC NULLS FIRST, i_item_desc#8 ASC NULLS FIRST, revenueratio#23 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] +Arguments: rangepartitioning(i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=5] (24) Sort [codegen id : 10] -Input [7]: [i_item_id#7, i_item_desc#8, i_category#11, i_class#10, i_current_price#9, itemrevenue#18, revenueratio#23] -Arguments: [i_category#11 ASC NULLS FIRST, i_class#10 ASC NULLS FIRST, i_item_id#7 ASC NULLS FIRST, i_item_desc#8 ASC NULLS FIRST, revenueratio#23 ASC NULLS FIRST], true, 0 +Input [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] +Arguments: [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -144,25 +144,25 @@ BroadcastExchange (29) (25) Scan parquet default.date_dim -Output [2]: [d_date_sk#13, d_date#25] +Output [2]: [d_date_sk#11, d_date#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-22), LessThanOrEqual(d_date,1999-03-24), IsNotNull(d_date_sk)] ReadSchema: struct (26) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#13, d_date#25] +Input [2]: [d_date_sk#11, d_date#20] (27) Filter [codegen id : 1] -Input [2]: [d_date_sk#13, d_date#25] -Condition : (((isnotnull(d_date#25) AND (d_date#25 >= 1999-02-22)) AND (d_date#25 <= 1999-03-24)) AND isnotnull(d_date_sk#13)) +Input [2]: [d_date_sk#11, d_date#20] +Condition : (((isnotnull(d_date#20) AND (d_date#20 >= 1999-02-22)) AND (d_date#20 <= 1999-03-24)) AND isnotnull(d_date_sk#11)) (28) Project [codegen id : 1] -Output [1]: [d_date_sk#13] -Input [2]: [d_date_sk#13, d_date#25] +Output [1]: [d_date_sk#11] +Input [2]: [d_date_sk#11, d_date#20] (29) BroadcastExchange -Input [1]: [d_date_sk#13] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#26] +Input [1]: [d_date_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6] diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q98/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q98/explain.txt index 68e7dba19dbab..7d6f7604beb5a 100644 --- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q98/explain.txt +++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q98/explain.txt @@ -53,7 +53,7 @@ Condition : (i_category#10 IN (Sports (7) BroadcastExchange Input [6]: [i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_item_sk#1] @@ -65,58 +65,58 @@ Output [7]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, i_item_desc#7 Input [9]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_sk#5, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] (10) ReusedExchange [Reuses operator id: 26] -Output [1]: [d_date_sk#12] +Output [1]: [d_date_sk#11] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ss_sold_date_sk#3] -Right keys [1]: [d_date_sk#12] +Right keys [1]: [d_date_sk#11] Join condition: None (12) Project [codegen id : 3] Output [6]: [ss_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] -Input [8]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#12] +Input [8]: [ss_ext_sales_price#2, ss_sold_date_sk#3, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10, d_date_sk#11] (13) HashAggregate [codegen id : 3] Input [6]: [ss_ext_sales_price#2, i_item_id#6, i_item_desc#7, i_current_price#8, i_class#9, i_category#10] Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum#13] -Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] +Aggregate Attributes [1]: [sum#12] +Results [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] (14) Exchange -Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] -Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] +Arguments: hashpartitioning(i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (15) HashAggregate [codegen id : 4] -Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#14] +Input [6]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, sum#13] Keys [5]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8] Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))] -Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#16] -Results [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#16,17,2) AS itemrevenue#17, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#16,17,2) AS _w0#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#16,17,2) AS _w1#19] +Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#14] +Results [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS itemrevenue#15, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS _w0#16, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#14,17,2) AS _w1#17] (16) Exchange -Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19] -Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: hashpartitioning(i_class#9, 5), ENSURE_REQUIREMENTS, [plan_id=3] (17) Sort [codegen id : 5] -Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] Arguments: [i_class#9 ASC NULLS FIRST], false, 0 (18) Window -Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19] -Arguments: [sum(_w1#19) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#21], [i_class#9] +Input [8]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17] +Arguments: [sum(_w1#17) windowspecdefinition(i_class#9, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#18], [i_class#9] (19) Project [codegen id : 6] -Output [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#18) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#21)), DecimalType(38,17)) AS revenueratio#22] -Input [9]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, _w0#18, _w1#19, _we0#21] +Output [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(_w0#16) * 100.00), DecimalType(21,2)) as decimal(27,2))) / promote_precision(_we0#18)), DecimalType(38,17)) AS revenueratio#19] +Input [9]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, _w0#16, _w1#17, _we0#18] (20) Exchange -Input [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22] -Arguments: rangepartitioning(i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#22 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] +Arguments: rangepartitioning(i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=4] (21) Sort [codegen id : 7] -Input [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#17, revenueratio#22] -Arguments: [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#22 ASC NULLS FIRST], true, 0 +Input [7]: [i_item_id#6, i_item_desc#7, i_category#10, i_class#9, i_current_price#8, itemrevenue#15, revenueratio#19] +Arguments: [i_category#10 ASC NULLS FIRST, i_class#9 ASC NULLS FIRST, i_item_id#6 ASC NULLS FIRST, i_item_desc#7 ASC NULLS FIRST, revenueratio#19 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -129,25 +129,25 @@ BroadcastExchange (26) (22) Scan parquet default.date_dim -Output [2]: [d_date_sk#12, d_date#24] +Output [2]: [d_date_sk#11, d_date#20] Batched: true Location [not included in comparison]/{warehouse_dir}/date_dim] PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,1999-02-22), LessThanOrEqual(d_date,1999-03-24), IsNotNull(d_date_sk)] ReadSchema: struct (23) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#12, d_date#24] +Input [2]: [d_date_sk#11, d_date#20] (24) Filter [codegen id : 1] -Input [2]: [d_date_sk#12, d_date#24] -Condition : (((isnotnull(d_date#24) AND (d_date#24 >= 1999-02-22)) AND (d_date#24 <= 1999-03-24)) AND isnotnull(d_date_sk#12)) +Input [2]: [d_date_sk#11, d_date#20] +Condition : (((isnotnull(d_date#20) AND (d_date#20 >= 1999-02-22)) AND (d_date#20 <= 1999-03-24)) AND isnotnull(d_date_sk#11)) (25) Project [codegen id : 1] -Output [1]: [d_date_sk#12] -Input [2]: [d_date_sk#12, d_date#24] +Output [1]: [d_date_sk#11] +Input [2]: [d_date_sk#11, d_date#20] (26) BroadcastExchange -Input [1]: [d_date_sk#12] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25] +Input [1]: [d_date_sk#11] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5] diff --git a/sql/core/src/test/resources/tpch-plan-stability/q1/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q1/explain.txt index c2fdfb24d2d85..85136accfbc2c 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q1/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q1/explain.txt @@ -37,20 +37,20 @@ Results [17]: [l_returnflag#5, l_linestatus#6, sum#23, isEmpty#24, sum#25, isEmp (6) Exchange Input [17]: [l_returnflag#5, l_linestatus#6, sum#23, isEmpty#24, sum#25, isEmpty#26, sum#27, isEmpty#28, sum#29, isEmpty#30, sum#31, count#32, sum#33, count#34, sum#35, count#36, count#37] -Arguments: hashpartitioning(l_returnflag#5, l_linestatus#6, 5), ENSURE_REQUIREMENTS, [id=#38] +Arguments: hashpartitioning(l_returnflag#5, l_linestatus#6, 5), ENSURE_REQUIREMENTS, [plan_id=1] (7) HashAggregate [codegen id : 2] Input [17]: [l_returnflag#5, l_linestatus#6, sum#23, isEmpty#24, sum#25, isEmpty#26, sum#27, isEmpty#28, sum#29, isEmpty#30, sum#31, count#32, sum#33, count#34, sum#35, count#36, count#37] Keys [2]: [l_returnflag#5, l_linestatus#6] Functions [8]: [sum(l_quantity#1), sum(l_extendedprice#2), sum(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0))), sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0))) * promote_precision(cast(CheckOverflow((1 + promote_precision(cast(l_tax#4 as decimal(11,0)))), DecimalType(11,0)) as decimal(22,0)))), DecimalType(34,0))), avg(UnscaledValue(l_quantity#1)), avg(UnscaledValue(l_extendedprice#2)), avg(UnscaledValue(l_discount#3)), count(1)] -Aggregate Attributes [8]: [sum(l_quantity#1)#39, sum(l_extendedprice#2)#40, sum(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#41, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0))) * promote_precision(cast(CheckOverflow((1 + promote_precision(cast(l_tax#4 as decimal(11,0)))), DecimalType(11,0)) as decimal(22,0)))), DecimalType(34,0)))#42, avg(UnscaledValue(l_quantity#1))#43, avg(UnscaledValue(l_extendedprice#2))#44, avg(UnscaledValue(l_discount#3))#45, count(1)#46] -Results [10]: [l_returnflag#5, l_linestatus#6, sum(l_quantity#1)#39 AS sum_qty#47, sum(l_extendedprice#2)#40 AS sum_base_price#48, sum(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#41 AS sum_disc_price#49, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0))) * promote_precision(cast(CheckOverflow((1 + promote_precision(cast(l_tax#4 as decimal(11,0)))), DecimalType(11,0)) as decimal(22,0)))), DecimalType(34,0)))#42 AS sum_charge#50, cast((avg(UnscaledValue(l_quantity#1))#43 / 1.0) as decimal(14,4)) AS avg_qty#51, cast((avg(UnscaledValue(l_extendedprice#2))#44 / 1.0) as decimal(14,4)) AS avg_price#52, cast((avg(UnscaledValue(l_discount#3))#45 / 1.0) as decimal(14,4)) AS avg_disc#53, count(1)#46 AS count_order#54] +Aggregate Attributes [8]: [sum(l_quantity#1)#38, sum(l_extendedprice#2)#39, sum(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#40, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0))) * promote_precision(cast(CheckOverflow((1 + promote_precision(cast(l_tax#4 as decimal(11,0)))), DecimalType(11,0)) as decimal(22,0)))), DecimalType(34,0)))#41, avg(UnscaledValue(l_quantity#1))#42, avg(UnscaledValue(l_extendedprice#2))#43, avg(UnscaledValue(l_discount#3))#44, count(1)#45] +Results [10]: [l_returnflag#5, l_linestatus#6, sum(l_quantity#1)#38 AS sum_qty#46, sum(l_extendedprice#2)#39 AS sum_base_price#47, sum(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#40 AS sum_disc_price#48, sum(CheckOverflow((promote_precision(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0))) * promote_precision(cast(CheckOverflow((1 + promote_precision(cast(l_tax#4 as decimal(11,0)))), DecimalType(11,0)) as decimal(22,0)))), DecimalType(34,0)))#41 AS sum_charge#49, cast((avg(UnscaledValue(l_quantity#1))#42 / 1.0) as decimal(14,4)) AS avg_qty#50, cast((avg(UnscaledValue(l_extendedprice#2))#43 / 1.0) as decimal(14,4)) AS avg_price#51, cast((avg(UnscaledValue(l_discount#3))#44 / 1.0) as decimal(14,4)) AS avg_disc#52, count(1)#45 AS count_order#53] (8) Exchange -Input [10]: [l_returnflag#5, l_linestatus#6, sum_qty#47, sum_base_price#48, sum_disc_price#49, sum_charge#50, avg_qty#51, avg_price#52, avg_disc#53, count_order#54] -Arguments: rangepartitioning(l_returnflag#5 ASC NULLS FIRST, l_linestatus#6 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#55] +Input [10]: [l_returnflag#5, l_linestatus#6, sum_qty#46, sum_base_price#47, sum_disc_price#48, sum_charge#49, avg_qty#50, avg_price#51, avg_disc#52, count_order#53] +Arguments: rangepartitioning(l_returnflag#5 ASC NULLS FIRST, l_linestatus#6 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=2] (9) Sort [codegen id : 3] -Input [10]: [l_returnflag#5, l_linestatus#6, sum_qty#47, sum_base_price#48, sum_disc_price#49, sum_charge#50, avg_qty#51, avg_price#52, avg_disc#53, count_order#54] +Input [10]: [l_returnflag#5, l_linestatus#6, sum_qty#46, sum_base_price#47, sum_disc_price#48, sum_charge#49, avg_qty#50, avg_price#51, avg_disc#52, count_order#53] Arguments: [l_returnflag#5 ASC NULLS FIRST, l_linestatus#6 ASC NULLS FIRST], true, 0 diff --git a/sql/core/src/test/resources/tpch-plan-stability/q10/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q10/explain.txt index 08be511944f36..d43b68c3fc34a 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q10/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q10/explain.txt @@ -62,7 +62,7 @@ Input [3]: [o_orderkey#8, o_custkey#9, o_orderdate#10] (8) BroadcastExchange Input [2]: [o_orderkey#8, o_custkey#9] -Arguments: HashedRelationBroadcastMode(List(input[1, bigint, true]),false), [id=#11] +Arguments: HashedRelationBroadcastMode(List(input[1, bigint, true]),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [c_custkey#1] @@ -74,82 +74,82 @@ Output [8]: [c_custkey#1, c_name#2, c_address#3, c_nationkey#4, c_phone#5, c_acc Input [9]: [c_custkey#1, c_name#2, c_address#3, c_nationkey#4, c_phone#5, c_acctbal#6, c_comment#7, o_orderkey#8, o_custkey#9] (11) Scan parquet default.lineitem -Output [4]: [l_orderkey#12, l_extendedprice#13, l_discount#14, l_returnflag#15] +Output [4]: [l_orderkey#11, l_extendedprice#12, l_discount#13, l_returnflag#14] Batched: true Location [not included in comparison]/{warehouse_dir}/lineitem] PushedFilters: [IsNotNull(l_returnflag), EqualTo(l_returnflag,R), IsNotNull(l_orderkey)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [l_orderkey#12, l_extendedprice#13, l_discount#14, l_returnflag#15] +Input [4]: [l_orderkey#11, l_extendedprice#12, l_discount#13, l_returnflag#14] (13) Filter [codegen id : 2] -Input [4]: [l_orderkey#12, l_extendedprice#13, l_discount#14, l_returnflag#15] -Condition : ((isnotnull(l_returnflag#15) AND (l_returnflag#15 = R)) AND isnotnull(l_orderkey#12)) +Input [4]: [l_orderkey#11, l_extendedprice#12, l_discount#13, l_returnflag#14] +Condition : ((isnotnull(l_returnflag#14) AND (l_returnflag#14 = R)) AND isnotnull(l_orderkey#11)) (14) Project [codegen id : 2] -Output [3]: [l_orderkey#12, l_extendedprice#13, l_discount#14] -Input [4]: [l_orderkey#12, l_extendedprice#13, l_discount#14, l_returnflag#15] +Output [3]: [l_orderkey#11, l_extendedprice#12, l_discount#13] +Input [4]: [l_orderkey#11, l_extendedprice#12, l_discount#13, l_returnflag#14] (15) BroadcastExchange -Input [3]: [l_orderkey#12, l_extendedprice#13, l_discount#14] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#16] +Input [3]: [l_orderkey#11, l_extendedprice#12, l_discount#13] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 4] Left keys [1]: [o_orderkey#8] -Right keys [1]: [l_orderkey#12] +Right keys [1]: [l_orderkey#11] Join condition: None (17) Project [codegen id : 4] -Output [9]: [c_custkey#1, c_name#2, c_address#3, c_nationkey#4, c_phone#5, c_acctbal#6, c_comment#7, l_extendedprice#13, l_discount#14] -Input [11]: [c_custkey#1, c_name#2, c_address#3, c_nationkey#4, c_phone#5, c_acctbal#6, c_comment#7, o_orderkey#8, l_orderkey#12, l_extendedprice#13, l_discount#14] +Output [9]: [c_custkey#1, c_name#2, c_address#3, c_nationkey#4, c_phone#5, c_acctbal#6, c_comment#7, l_extendedprice#12, l_discount#13] +Input [11]: [c_custkey#1, c_name#2, c_address#3, c_nationkey#4, c_phone#5, c_acctbal#6, c_comment#7, o_orderkey#8, l_orderkey#11, l_extendedprice#12, l_discount#13] (18) Scan parquet default.nation -Output [2]: [n_nationkey#17, n_name#18] +Output [2]: [n_nationkey#15, n_name#16] Batched: true Location [not included in comparison]/{warehouse_dir}/nation] PushedFilters: [IsNotNull(n_nationkey)] ReadSchema: struct (19) ColumnarToRow [codegen id : 3] -Input [2]: [n_nationkey#17, n_name#18] +Input [2]: [n_nationkey#15, n_name#16] (20) Filter [codegen id : 3] -Input [2]: [n_nationkey#17, n_name#18] -Condition : isnotnull(n_nationkey#17) +Input [2]: [n_nationkey#15, n_name#16] +Condition : isnotnull(n_nationkey#15) (21) BroadcastExchange -Input [2]: [n_nationkey#17, n_name#18] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#19] +Input [2]: [n_nationkey#15, n_name#16] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=3] (22) BroadcastHashJoin [codegen id : 4] Left keys [1]: [c_nationkey#4] -Right keys [1]: [n_nationkey#17] +Right keys [1]: [n_nationkey#15] Join condition: None (23) Project [codegen id : 4] -Output [9]: [c_custkey#1, c_name#2, c_address#3, c_phone#5, c_acctbal#6, c_comment#7, l_extendedprice#13, l_discount#14, n_name#18] -Input [11]: [c_custkey#1, c_name#2, c_address#3, c_nationkey#4, c_phone#5, c_acctbal#6, c_comment#7, l_extendedprice#13, l_discount#14, n_nationkey#17, n_name#18] +Output [9]: [c_custkey#1, c_name#2, c_address#3, c_phone#5, c_acctbal#6, c_comment#7, l_extendedprice#12, l_discount#13, n_name#16] +Input [11]: [c_custkey#1, c_name#2, c_address#3, c_nationkey#4, c_phone#5, c_acctbal#6, c_comment#7, l_extendedprice#12, l_discount#13, n_nationkey#15, n_name#16] (24) HashAggregate [codegen id : 4] -Input [9]: [c_custkey#1, c_name#2, c_address#3, c_phone#5, c_acctbal#6, c_comment#7, l_extendedprice#13, l_discount#14, n_name#18] -Keys [7]: [c_custkey#1, c_name#2, c_acctbal#6, c_phone#5, n_name#18, c_address#3, c_comment#7] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(l_extendedprice#13 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#14 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] -Aggregate Attributes [2]: [sum#20, isEmpty#21] -Results [9]: [c_custkey#1, c_name#2, c_acctbal#6, c_phone#5, n_name#18, c_address#3, c_comment#7, sum#22, isEmpty#23] +Input [9]: [c_custkey#1, c_name#2, c_address#3, c_phone#5, c_acctbal#6, c_comment#7, l_extendedprice#12, l_discount#13, n_name#16] +Keys [7]: [c_custkey#1, c_name#2, c_acctbal#6, c_phone#5, n_name#16, c_address#3, c_comment#7] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(l_extendedprice#12 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#13 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] +Aggregate Attributes [2]: [sum#17, isEmpty#18] +Results [9]: [c_custkey#1, c_name#2, c_acctbal#6, c_phone#5, n_name#16, c_address#3, c_comment#7, sum#19, isEmpty#20] (25) Exchange -Input [9]: [c_custkey#1, c_name#2, c_acctbal#6, c_phone#5, n_name#18, c_address#3, c_comment#7, sum#22, isEmpty#23] -Arguments: hashpartitioning(c_custkey#1, c_name#2, c_acctbal#6, c_phone#5, n_name#18, c_address#3, c_comment#7, 5), ENSURE_REQUIREMENTS, [id=#24] +Input [9]: [c_custkey#1, c_name#2, c_acctbal#6, c_phone#5, n_name#16, c_address#3, c_comment#7, sum#19, isEmpty#20] +Arguments: hashpartitioning(c_custkey#1, c_name#2, c_acctbal#6, c_phone#5, n_name#16, c_address#3, c_comment#7, 5), ENSURE_REQUIREMENTS, [plan_id=4] (26) HashAggregate [codegen id : 5] -Input [9]: [c_custkey#1, c_name#2, c_acctbal#6, c_phone#5, n_name#18, c_address#3, c_comment#7, sum#22, isEmpty#23] -Keys [7]: [c_custkey#1, c_name#2, c_acctbal#6, c_phone#5, n_name#18, c_address#3, c_comment#7] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#13 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#14 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#13 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#14 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#25] -Results [8]: [c_custkey#1, c_name#2, sum(CheckOverflow((promote_precision(cast(l_extendedprice#13 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#14 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#25 AS revenue#26, c_acctbal#6, n_name#18, c_address#3, c_phone#5, c_comment#7] +Input [9]: [c_custkey#1, c_name#2, c_acctbal#6, c_phone#5, n_name#16, c_address#3, c_comment#7, sum#19, isEmpty#20] +Keys [7]: [c_custkey#1, c_name#2, c_acctbal#6, c_phone#5, n_name#16, c_address#3, c_comment#7] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#12 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#13 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#12 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#13 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#21] +Results [8]: [c_custkey#1, c_name#2, sum(CheckOverflow((promote_precision(cast(l_extendedprice#12 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#13 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#21 AS revenue#22, c_acctbal#6, n_name#16, c_address#3, c_phone#5, c_comment#7] (27) TakeOrderedAndProject -Input [8]: [c_custkey#1, c_name#2, revenue#26, c_acctbal#6, n_name#18, c_address#3, c_phone#5, c_comment#7] -Arguments: 20, [revenue#26 DESC NULLS LAST], [c_custkey#1, c_name#2, revenue#26, c_acctbal#6, n_name#18, c_address#3, c_phone#5, c_comment#7] +Input [8]: [c_custkey#1, c_name#2, revenue#22, c_acctbal#6, n_name#16, c_address#3, c_phone#5, c_comment#7] +Arguments: 20, [revenue#22 DESC NULLS LAST], [c_custkey#1, c_name#2, revenue#22, c_acctbal#6, n_name#16, c_address#3, c_phone#5, c_comment#7] diff --git a/sql/core/src/test/resources/tpch-plan-stability/q11/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q11/explain.txt index bc7e629fd7dd8..d538953f141b8 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q11/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q11/explain.txt @@ -53,7 +53,7 @@ Condition : (isnotnull(s_suppkey#5) AND isnotnull(s_nationkey#6)) (7) BroadcastExchange Input [2]: [s_suppkey#5, s_nationkey#6] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ps_suppkey#2] @@ -65,69 +65,69 @@ Output [4]: [ps_partkey#1, ps_availqty#3, ps_supplycost#4, s_nationkey#6] Input [6]: [ps_partkey#1, ps_suppkey#2, ps_availqty#3, ps_supplycost#4, s_suppkey#5, s_nationkey#6] (10) Scan parquet default.nation -Output [2]: [n_nationkey#8, n_name#9] +Output [2]: [n_nationkey#7, n_name#8] Batched: true Location [not included in comparison]/{warehouse_dir}/nation] PushedFilters: [IsNotNull(n_name), EqualTo(n_name,GERMANY), IsNotNull(n_nationkey)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [2]: [n_nationkey#8, n_name#9] +Input [2]: [n_nationkey#7, n_name#8] (12) Filter [codegen id : 2] -Input [2]: [n_nationkey#8, n_name#9] -Condition : ((isnotnull(n_name#9) AND (n_name#9 = GERMANY)) AND isnotnull(n_nationkey#8)) +Input [2]: [n_nationkey#7, n_name#8] +Condition : ((isnotnull(n_name#8) AND (n_name#8 = GERMANY)) AND isnotnull(n_nationkey#7)) (13) Project [codegen id : 2] -Output [1]: [n_nationkey#8] -Input [2]: [n_nationkey#8, n_name#9] +Output [1]: [n_nationkey#7] +Input [2]: [n_nationkey#7, n_name#8] (14) BroadcastExchange -Input [1]: [n_nationkey#8] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#10] +Input [1]: [n_nationkey#7] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 3] Left keys [1]: [s_nationkey#6] -Right keys [1]: [n_nationkey#8] +Right keys [1]: [n_nationkey#7] Join condition: None (16) Project [codegen id : 3] Output [3]: [ps_partkey#1, ps_availqty#3, ps_supplycost#4] -Input [5]: [ps_partkey#1, ps_availqty#3, ps_supplycost#4, s_nationkey#6, n_nationkey#8] +Input [5]: [ps_partkey#1, ps_availqty#3, ps_supplycost#4, s_nationkey#6, n_nationkey#7] (17) HashAggregate [codegen id : 3] Input [3]: [ps_partkey#1, ps_availqty#3, ps_supplycost#4] Keys [1]: [ps_partkey#1] Functions [1]: [partial_sum(CheckOverflow((promote_precision(ps_supplycost#4) * promote_precision(cast(ps_availqty#3 as decimal(10,0)))), DecimalType(21,0)))] -Aggregate Attributes [2]: [sum#11, isEmpty#12] -Results [3]: [ps_partkey#1, sum#13, isEmpty#14] +Aggregate Attributes [2]: [sum#9, isEmpty#10] +Results [3]: [ps_partkey#1, sum#11, isEmpty#12] (18) Exchange -Input [3]: [ps_partkey#1, sum#13, isEmpty#14] -Arguments: hashpartitioning(ps_partkey#1, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [3]: [ps_partkey#1, sum#11, isEmpty#12] +Arguments: hashpartitioning(ps_partkey#1, 5), ENSURE_REQUIREMENTS, [plan_id=3] (19) HashAggregate [codegen id : 4] -Input [3]: [ps_partkey#1, sum#13, isEmpty#14] +Input [3]: [ps_partkey#1, sum#11, isEmpty#12] Keys [1]: [ps_partkey#1] Functions [1]: [sum(CheckOverflow((promote_precision(ps_supplycost#4) * promote_precision(cast(ps_availqty#3 as decimal(10,0)))), DecimalType(21,0)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(ps_supplycost#4) * promote_precision(cast(ps_availqty#3 as decimal(10,0)))), DecimalType(21,0)))#16] -Results [2]: [ps_partkey#1, sum(CheckOverflow((promote_precision(ps_supplycost#4) * promote_precision(cast(ps_availqty#3 as decimal(10,0)))), DecimalType(21,0)))#16 AS value#17] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(ps_supplycost#4) * promote_precision(cast(ps_availqty#3 as decimal(10,0)))), DecimalType(21,0)))#13] +Results [2]: [ps_partkey#1, sum(CheckOverflow((promote_precision(ps_supplycost#4) * promote_precision(cast(ps_availqty#3 as decimal(10,0)))), DecimalType(21,0)))#13 AS value#14] (20) Filter [codegen id : 4] -Input [2]: [ps_partkey#1, value#17] -Condition : (isnotnull(value#17) AND (cast(value#17 as decimal(38,6)) > Subquery scalar-subquery#18, [id=#19])) +Input [2]: [ps_partkey#1, value#14] +Condition : (isnotnull(value#14) AND (cast(value#14 as decimal(38,6)) > Subquery scalar-subquery#15, [id=#16])) (21) Exchange -Input [2]: [ps_partkey#1, value#17] -Arguments: rangepartitioning(value#17 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [2]: [ps_partkey#1, value#14] +Arguments: rangepartitioning(value#14 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [plan_id=4] (22) Sort [codegen id : 5] -Input [2]: [ps_partkey#1, value#17] -Arguments: [value#17 DESC NULLS LAST], true, 0 +Input [2]: [ps_partkey#1, value#14] +Arguments: [value#14 DESC NULLS LAST], true, 0 ===== Subqueries ===== -Subquery:1 Hosting operator id = 20 Hosting Expression = Subquery scalar-subquery#18, [id=#19] +Subquery:1 Hosting operator id = 20 Hosting Expression = Subquery scalar-subquery#15, [id=#16] * HashAggregate (34) +- Exchange (33) +- * HashAggregate (32) @@ -143,59 +143,59 @@ Subquery:1 Hosting operator id = 20 Hosting Expression = Subquery scalar-subquer (23) Scan parquet default.partsupp -Output [3]: [ps_suppkey#21, ps_availqty#22, ps_supplycost#23] +Output [3]: [ps_suppkey#17, ps_availqty#18, ps_supplycost#19] Batched: true Location [not included in comparison]/{warehouse_dir}/partsupp] PushedFilters: [IsNotNull(ps_suppkey)] ReadSchema: struct (24) ColumnarToRow [codegen id : 3] -Input [3]: [ps_suppkey#21, ps_availqty#22, ps_supplycost#23] +Input [3]: [ps_suppkey#17, ps_availqty#18, ps_supplycost#19] (25) Filter [codegen id : 3] -Input [3]: [ps_suppkey#21, ps_availqty#22, ps_supplycost#23] -Condition : isnotnull(ps_suppkey#21) +Input [3]: [ps_suppkey#17, ps_availqty#18, ps_supplycost#19] +Condition : isnotnull(ps_suppkey#17) (26) ReusedExchange [Reuses operator id: 7] -Output [2]: [s_suppkey#24, s_nationkey#25] +Output [2]: [s_suppkey#20, s_nationkey#21] (27) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [ps_suppkey#21] -Right keys [1]: [s_suppkey#24] +Left keys [1]: [ps_suppkey#17] +Right keys [1]: [s_suppkey#20] Join condition: None (28) Project [codegen id : 3] -Output [3]: [ps_availqty#22, ps_supplycost#23, s_nationkey#25] -Input [5]: [ps_suppkey#21, ps_availqty#22, ps_supplycost#23, s_suppkey#24, s_nationkey#25] +Output [3]: [ps_availqty#18, ps_supplycost#19, s_nationkey#21] +Input [5]: [ps_suppkey#17, ps_availqty#18, ps_supplycost#19, s_suppkey#20, s_nationkey#21] (29) ReusedExchange [Reuses operator id: 14] -Output [1]: [n_nationkey#26] +Output [1]: [n_nationkey#22] (30) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [s_nationkey#25] -Right keys [1]: [n_nationkey#26] +Left keys [1]: [s_nationkey#21] +Right keys [1]: [n_nationkey#22] Join condition: None (31) Project [codegen id : 3] -Output [2]: [ps_availqty#22, ps_supplycost#23] -Input [4]: [ps_availqty#22, ps_supplycost#23, s_nationkey#25, n_nationkey#26] +Output [2]: [ps_availqty#18, ps_supplycost#19] +Input [4]: [ps_availqty#18, ps_supplycost#19, s_nationkey#21, n_nationkey#22] (32) HashAggregate [codegen id : 3] -Input [2]: [ps_availqty#22, ps_supplycost#23] +Input [2]: [ps_availqty#18, ps_supplycost#19] Keys: [] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(ps_supplycost#23) * promote_precision(cast(ps_availqty#22 as decimal(10,0)))), DecimalType(21,0)))] -Aggregate Attributes [2]: [sum#27, isEmpty#28] -Results [2]: [sum#29, isEmpty#30] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(ps_supplycost#19) * promote_precision(cast(ps_availqty#18 as decimal(10,0)))), DecimalType(21,0)))] +Aggregate Attributes [2]: [sum#23, isEmpty#24] +Results [2]: [sum#25, isEmpty#26] (33) Exchange -Input [2]: [sum#29, isEmpty#30] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#31] +Input [2]: [sum#25, isEmpty#26] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5] (34) HashAggregate [codegen id : 4] -Input [2]: [sum#29, isEmpty#30] +Input [2]: [sum#25, isEmpty#26] Keys: [] -Functions [1]: [sum(CheckOverflow((promote_precision(ps_supplycost#23) * promote_precision(cast(ps_availqty#22 as decimal(10,0)))), DecimalType(21,0)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(ps_supplycost#23) * promote_precision(cast(ps_availqty#22 as decimal(10,0)))), DecimalType(21,0)))#32] -Results [1]: [CheckOverflow((promote_precision(cast(sum(CheckOverflow((promote_precision(ps_supplycost#23) * promote_precision(cast(ps_availqty#22 as decimal(10,0)))), DecimalType(21,0)))#32 as decimal(38,10))) * 0.0001000000), DecimalType(38,6)) AS (sum((ps_supplycost * ps_availqty)) * 0.0001000000)#33] +Functions [1]: [sum(CheckOverflow((promote_precision(ps_supplycost#19) * promote_precision(cast(ps_availqty#18 as decimal(10,0)))), DecimalType(21,0)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(ps_supplycost#19) * promote_precision(cast(ps_availqty#18 as decimal(10,0)))), DecimalType(21,0)))#27] +Results [1]: [CheckOverflow((promote_precision(cast(sum(CheckOverflow((promote_precision(ps_supplycost#19) * promote_precision(cast(ps_availqty#18 as decimal(10,0)))), DecimalType(21,0)))#27 as decimal(38,10))) * 0.0001000000), DecimalType(38,6)) AS (sum((ps_supplycost * ps_availqty)) * 0.0001000000)#28] diff --git a/sql/core/src/test/resources/tpch-plan-stability/q12/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q12/explain.txt index 8d696607a569c..b966c6070e8ad 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q12/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q12/explain.txt @@ -50,7 +50,7 @@ Input [5]: [l_orderkey#3, l_shipdate#4, l_commitdate#5, l_receiptdate#6, l_shipm (8) BroadcastExchange Input [2]: [l_orderkey#3, l_shipmode#7] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 2] Left keys [1]: [o_orderkey#1] @@ -65,25 +65,25 @@ Input [4]: [o_orderkey#1, o_orderpriority#2, l_orderkey#3, l_shipmode#7] Input [2]: [o_orderpriority#2, l_shipmode#7] Keys [1]: [l_shipmode#7] Functions [2]: [partial_sum(CASE WHEN ((o_orderpriority#2 = 1-URGENT) OR (o_orderpriority#2 = 2-HIGH)) THEN 1 ELSE 0 END), partial_sum(CASE WHEN (NOT (o_orderpriority#2 = 1-URGENT) AND NOT (o_orderpriority#2 = 2-HIGH)) THEN 1 ELSE 0 END)] -Aggregate Attributes [2]: [sum#9, sum#10] -Results [3]: [l_shipmode#7, sum#11, sum#12] +Aggregate Attributes [2]: [sum#8, sum#9] +Results [3]: [l_shipmode#7, sum#10, sum#11] (12) Exchange -Input [3]: [l_shipmode#7, sum#11, sum#12] -Arguments: hashpartitioning(l_shipmode#7, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [3]: [l_shipmode#7, sum#10, sum#11] +Arguments: hashpartitioning(l_shipmode#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (13) HashAggregate [codegen id : 3] -Input [3]: [l_shipmode#7, sum#11, sum#12] +Input [3]: [l_shipmode#7, sum#10, sum#11] Keys [1]: [l_shipmode#7] Functions [2]: [sum(CASE WHEN ((o_orderpriority#2 = 1-URGENT) OR (o_orderpriority#2 = 2-HIGH)) THEN 1 ELSE 0 END), sum(CASE WHEN (NOT (o_orderpriority#2 = 1-URGENT) AND NOT (o_orderpriority#2 = 2-HIGH)) THEN 1 ELSE 0 END)] -Aggregate Attributes [2]: [sum(CASE WHEN ((o_orderpriority#2 = 1-URGENT) OR (o_orderpriority#2 = 2-HIGH)) THEN 1 ELSE 0 END)#14, sum(CASE WHEN (NOT (o_orderpriority#2 = 1-URGENT) AND NOT (o_orderpriority#2 = 2-HIGH)) THEN 1 ELSE 0 END)#15] -Results [3]: [l_shipmode#7, sum(CASE WHEN ((o_orderpriority#2 = 1-URGENT) OR (o_orderpriority#2 = 2-HIGH)) THEN 1 ELSE 0 END)#14 AS high_line_count#16, sum(CASE WHEN (NOT (o_orderpriority#2 = 1-URGENT) AND NOT (o_orderpriority#2 = 2-HIGH)) THEN 1 ELSE 0 END)#15 AS low_line_count#17] +Aggregate Attributes [2]: [sum(CASE WHEN ((o_orderpriority#2 = 1-URGENT) OR (o_orderpriority#2 = 2-HIGH)) THEN 1 ELSE 0 END)#12, sum(CASE WHEN (NOT (o_orderpriority#2 = 1-URGENT) AND NOT (o_orderpriority#2 = 2-HIGH)) THEN 1 ELSE 0 END)#13] +Results [3]: [l_shipmode#7, sum(CASE WHEN ((o_orderpriority#2 = 1-URGENT) OR (o_orderpriority#2 = 2-HIGH)) THEN 1 ELSE 0 END)#12 AS high_line_count#14, sum(CASE WHEN (NOT (o_orderpriority#2 = 1-URGENT) AND NOT (o_orderpriority#2 = 2-HIGH)) THEN 1 ELSE 0 END)#13 AS low_line_count#15] (14) Exchange -Input [3]: [l_shipmode#7, high_line_count#16, low_line_count#17] -Arguments: rangepartitioning(l_shipmode#7 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#18] +Input [3]: [l_shipmode#7, high_line_count#14, low_line_count#15] +Arguments: rangepartitioning(l_shipmode#7 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=3] (15) Sort [codegen id : 4] -Input [3]: [l_shipmode#7, high_line_count#16, low_line_count#17] +Input [3]: [l_shipmode#7, high_line_count#14, low_line_count#15] Arguments: [l_shipmode#7 ASC NULLS FIRST], true, 0 diff --git a/sql/core/src/test/resources/tpch-plan-stability/q13/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q13/explain.txt index ade70cd509a61..01aa3d3074d6f 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q13/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q13/explain.txt @@ -47,7 +47,7 @@ Input [3]: [o_orderkey#2, o_custkey#3, o_comment#4] (7) BroadcastExchange Input [2]: [o_orderkey#2, o_custkey#3] -Arguments: HashedRelationBroadcastMode(List(input[1, bigint, true]),false), [id=#5] +Arguments: HashedRelationBroadcastMode(List(input[1, bigint, true]),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 2] Left keys [1]: [c_custkey#1] @@ -62,43 +62,43 @@ Input [3]: [c_custkey#1, o_orderkey#2, o_custkey#3] Input [2]: [c_custkey#1, o_orderkey#2] Keys [1]: [c_custkey#1] Functions [1]: [partial_count(o_orderkey#2)] -Aggregate Attributes [1]: [count#6] -Results [2]: [c_custkey#1, count#7] +Aggregate Attributes [1]: [count#5] +Results [2]: [c_custkey#1, count#6] (11) Exchange -Input [2]: [c_custkey#1, count#7] -Arguments: hashpartitioning(c_custkey#1, 5), ENSURE_REQUIREMENTS, [id=#8] +Input [2]: [c_custkey#1, count#6] +Arguments: hashpartitioning(c_custkey#1, 5), ENSURE_REQUIREMENTS, [plan_id=2] (12) HashAggregate [codegen id : 3] -Input [2]: [c_custkey#1, count#7] +Input [2]: [c_custkey#1, count#6] Keys [1]: [c_custkey#1] Functions [1]: [count(o_orderkey#2)] -Aggregate Attributes [1]: [count(o_orderkey#2)#9] -Results [1]: [count(o_orderkey#2)#9 AS c_count#10] +Aggregate Attributes [1]: [count(o_orderkey#2)#7] +Results [1]: [count(o_orderkey#2)#7 AS c_count#8] (13) HashAggregate [codegen id : 3] -Input [1]: [c_count#10] -Keys [1]: [c_count#10] +Input [1]: [c_count#8] +Keys [1]: [c_count#8] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#11] -Results [2]: [c_count#10, count#12] +Aggregate Attributes [1]: [count#9] +Results [2]: [c_count#8, count#10] (14) Exchange -Input [2]: [c_count#10, count#12] -Arguments: hashpartitioning(c_count#10, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [2]: [c_count#8, count#10] +Arguments: hashpartitioning(c_count#8, 5), ENSURE_REQUIREMENTS, [plan_id=3] (15) HashAggregate [codegen id : 4] -Input [2]: [c_count#10, count#12] -Keys [1]: [c_count#10] +Input [2]: [c_count#8, count#10] +Keys [1]: [c_count#8] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#14] -Results [2]: [c_count#10, count(1)#14 AS custdist#15] +Aggregate Attributes [1]: [count(1)#11] +Results [2]: [c_count#8, count(1)#11 AS custdist#12] (16) Exchange -Input [2]: [c_count#10, custdist#15] -Arguments: rangepartitioning(custdist#15 DESC NULLS LAST, c_count#10 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#16] +Input [2]: [c_count#8, custdist#12] +Arguments: rangepartitioning(custdist#12 DESC NULLS LAST, c_count#8 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [plan_id=4] (17) Sort [codegen id : 5] -Input [2]: [c_count#10, custdist#15] -Arguments: [custdist#15 DESC NULLS LAST, c_count#10 DESC NULLS LAST], true, 0 +Input [2]: [c_count#8, custdist#12] +Arguments: [custdist#12 DESC NULLS LAST, c_count#8 DESC NULLS LAST], true, 0 diff --git a/sql/core/src/test/resources/tpch-plan-stability/q14/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q14/explain.txt index 0e923aebe1e11..7a0dd83d4e1a0 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q14/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q14/explain.txt @@ -48,7 +48,7 @@ Condition : isnotnull(p_partkey#5) (8) BroadcastExchange Input [2]: [p_partkey#5, p_type#6] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 2] Left keys [1]: [l_partkey#1] @@ -63,17 +63,17 @@ Input [5]: [l_partkey#1, l_extendedprice#2, l_discount#3, p_partkey#5, p_type#6] Input [3]: [l_extendedprice#2, l_discount#3, p_type#6] Keys: [] Functions [2]: [partial_sum(CASE WHEN StartsWith(p_type#6, PROMO) THEN CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)) ELSE 0 END), partial_sum(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] -Aggregate Attributes [4]: [sum#8, isEmpty#9, sum#10, isEmpty#11] -Results [4]: [sum#12, isEmpty#13, sum#14, isEmpty#15] +Aggregate Attributes [4]: [sum#7, isEmpty#8, sum#9, isEmpty#10] +Results [4]: [sum#11, isEmpty#12, sum#13, isEmpty#14] (12) Exchange -Input [4]: [sum#12, isEmpty#13, sum#14, isEmpty#15] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#16] +Input [4]: [sum#11, isEmpty#12, sum#13, isEmpty#14] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2] (13) HashAggregate [codegen id : 3] -Input [4]: [sum#12, isEmpty#13, sum#14, isEmpty#15] +Input [4]: [sum#11, isEmpty#12, sum#13, isEmpty#14] Keys: [] Functions [2]: [sum(CASE WHEN StartsWith(p_type#6, PROMO) THEN CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)) ELSE 0 END), sum(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] -Aggregate Attributes [2]: [sum(CASE WHEN StartsWith(p_type#6, PROMO) THEN CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)) ELSE 0 END)#17, sum(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#18] -Results [1]: [CheckOverflow((promote_precision(CheckOverflow((100.00 * promote_precision(cast(sum(CASE WHEN StartsWith(p_type#6, PROMO) THEN CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)) ELSE 0 END)#17 as decimal(34,2)))), DecimalType(38,2))) / promote_precision(cast(sum(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#18 as decimal(38,2)))), DecimalType(38,6)) AS promo_revenue#19] +Aggregate Attributes [2]: [sum(CASE WHEN StartsWith(p_type#6, PROMO) THEN CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)) ELSE 0 END)#15, sum(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#16] +Results [1]: [CheckOverflow((promote_precision(CheckOverflow((100.00 * promote_precision(cast(sum(CASE WHEN StartsWith(p_type#6, PROMO) THEN CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)) ELSE 0 END)#15 as decimal(34,2)))), DecimalType(38,2))) / promote_precision(cast(sum(CheckOverflow((promote_precision(cast(l_extendedprice#2 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#3 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#16 as decimal(38,2)))), DecimalType(38,6)) AS promo_revenue#17] diff --git a/sql/core/src/test/resources/tpch-plan-stability/q15/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q15/explain.txt index a615b73893782..dc6bfda4a7309 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q15/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q15/explain.txt @@ -58,43 +58,43 @@ Results [3]: [l_suppkey#5, sum#11, isEmpty#12] (9) Exchange Input [3]: [l_suppkey#5, sum#11, isEmpty#12] -Arguments: hashpartitioning(l_suppkey#5, 5), ENSURE_REQUIREMENTS, [id=#13] +Arguments: hashpartitioning(l_suppkey#5, 5), ENSURE_REQUIREMENTS, [plan_id=1] (10) HashAggregate [codegen id : 2] Input [3]: [l_suppkey#5, sum#11, isEmpty#12] Keys [1]: [l_suppkey#5] Functions [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#6 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#7 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#6 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#7 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#14] -Results [2]: [l_suppkey#5 AS supplier_no#15, sum(CheckOverflow((promote_precision(cast(l_extendedprice#6 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#7 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#14 AS total_revenue#16] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#6 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#7 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#13] +Results [2]: [l_suppkey#5 AS supplier_no#14, sum(CheckOverflow((promote_precision(cast(l_extendedprice#6 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#7 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#13 AS total_revenue#15] (11) Filter [codegen id : 2] -Input [2]: [supplier_no#15, total_revenue#16] -Condition : (isnotnull(total_revenue#16) AND (total_revenue#16 = Subquery scalar-subquery#17, [id=#18])) +Input [2]: [supplier_no#14, total_revenue#15] +Condition : (isnotnull(total_revenue#15) AND (total_revenue#15 = Subquery scalar-subquery#16, [id=#17])) (12) BroadcastExchange -Input [2]: [supplier_no#15, total_revenue#16] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#19] +Input [2]: [supplier_no#14, total_revenue#15] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=2] (13) BroadcastHashJoin [codegen id : 3] Left keys [1]: [s_suppkey#1] -Right keys [1]: [supplier_no#15] +Right keys [1]: [supplier_no#14] Join condition: None (14) Project [codegen id : 3] -Output [5]: [s_suppkey#1, s_name#2, s_address#3, s_phone#4, total_revenue#16] -Input [6]: [s_suppkey#1, s_name#2, s_address#3, s_phone#4, supplier_no#15, total_revenue#16] +Output [5]: [s_suppkey#1, s_name#2, s_address#3, s_phone#4, total_revenue#15] +Input [6]: [s_suppkey#1, s_name#2, s_address#3, s_phone#4, supplier_no#14, total_revenue#15] (15) Exchange -Input [5]: [s_suppkey#1, s_name#2, s_address#3, s_phone#4, total_revenue#16] -Arguments: rangepartitioning(s_suppkey#1 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [5]: [s_suppkey#1, s_name#2, s_address#3, s_phone#4, total_revenue#15] +Arguments: rangepartitioning(s_suppkey#1 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=3] (16) Sort [codegen id : 4] -Input [5]: [s_suppkey#1, s_name#2, s_address#3, s_phone#4, total_revenue#16] +Input [5]: [s_suppkey#1, s_name#2, s_address#3, s_phone#4, total_revenue#15] Arguments: [s_suppkey#1 ASC NULLS FIRST], true, 0 ===== Subqueries ===== -Subquery:1 Hosting operator id = 11 Hosting Expression = Subquery scalar-subquery#17, [id=#18] +Subquery:1 Hosting operator id = 11 Hosting Expression = Subquery scalar-subquery#16, [id=#17] * HashAggregate (26) +- Exchange (25) +- * HashAggregate (24) @@ -129,36 +129,36 @@ Input [4]: [l_suppkey#5, l_extendedprice#6, l_discount#7, l_shipdate#8] Input [3]: [l_suppkey#5, l_extendedprice#6, l_discount#7] Keys [1]: [l_suppkey#5] Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(l_extendedprice#6 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#7 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] -Aggregate Attributes [2]: [sum#21, isEmpty#22] -Results [3]: [l_suppkey#5, sum#23, isEmpty#24] +Aggregate Attributes [2]: [sum#18, isEmpty#19] +Results [3]: [l_suppkey#5, sum#20, isEmpty#21] (22) Exchange -Input [3]: [l_suppkey#5, sum#23, isEmpty#24] -Arguments: hashpartitioning(l_suppkey#5, 5), ENSURE_REQUIREMENTS, [id=#25] +Input [3]: [l_suppkey#5, sum#20, isEmpty#21] +Arguments: hashpartitioning(l_suppkey#5, 5), ENSURE_REQUIREMENTS, [plan_id=4] (23) HashAggregate [codegen id : 2] -Input [3]: [l_suppkey#5, sum#23, isEmpty#24] +Input [3]: [l_suppkey#5, sum#20, isEmpty#21] Keys [1]: [l_suppkey#5] Functions [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#6 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#7 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#6 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#7 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#14] -Results [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#6 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#7 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#14 AS total_revenue#16] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#6 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#7 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#13] +Results [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#6 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#7 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#13 AS total_revenue#15] (24) HashAggregate [codegen id : 2] -Input [1]: [total_revenue#16] +Input [1]: [total_revenue#15] Keys: [] -Functions [1]: [partial_max(total_revenue#16)] -Aggregate Attributes [1]: [max#26] -Results [1]: [max#27] +Functions [1]: [partial_max(total_revenue#15)] +Aggregate Attributes [1]: [max#22] +Results [1]: [max#23] (25) Exchange -Input [1]: [max#27] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#28] +Input [1]: [max#23] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5] (26) HashAggregate [codegen id : 3] -Input [1]: [max#27] +Input [1]: [max#23] Keys: [] -Functions [1]: [max(total_revenue#16)] -Aggregate Attributes [1]: [max(total_revenue#16)#29] -Results [1]: [max(total_revenue#16)#29 AS max(total_revenue)#30] +Functions [1]: [max(total_revenue#15)] +Aggregate Attributes [1]: [max(total_revenue#15)#24] +Results [1]: [max(total_revenue#15)#24 AS max(total_revenue)#25] diff --git a/sql/core/src/test/resources/tpch-plan-stability/q16/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q16/explain.txt index 462da91904e53..f1a2383668b66 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q16/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q16/explain.txt @@ -58,7 +58,7 @@ Input [2]: [s_suppkey#3, s_comment#4] (8) BroadcastExchange Input [1]: [s_suppkey#3] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),true), [id=#5] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),true), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ps_suppkey#2] @@ -66,73 +66,73 @@ Right keys [1]: [s_suppkey#3] Join condition: None (10) Scan parquet default.part -Output [4]: [p_partkey#6, p_brand#7, p_type#8, p_size#9] +Output [4]: [p_partkey#5, p_brand#6, p_type#7, p_size#8] Batched: true Location [not included in comparison]/{warehouse_dir}/part] -PushedFilters: [IsNotNull(p_brand), IsNotNull(p_type), Not(EqualTo(p_brand,Brand#10)), Not(StringStartsWith(p_type,MEDIUM POLISHED)), In(p_size, [14,19,23,3,36,45,49,9]), IsNotNull(p_partkey)] +PushedFilters: [IsNotNull(p_brand), IsNotNull(p_type), Not(EqualTo(p_brand,Brand#9)), Not(StringStartsWith(p_type,MEDIUM POLISHED)), In(p_size, [14,19,23,3,36,45,49,9]), IsNotNull(p_partkey)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [4]: [p_partkey#6, p_brand#7, p_type#8, p_size#9] +Input [4]: [p_partkey#5, p_brand#6, p_type#7, p_size#8] (12) Filter [codegen id : 2] -Input [4]: [p_partkey#6, p_brand#7, p_type#8, p_size#9] -Condition : (((((isnotnull(p_brand#7) AND isnotnull(p_type#8)) AND NOT (p_brand#7 = Brand#10)) AND NOT StartsWith(p_type#8, MEDIUM POLISHED)) AND p_size#9 IN (49,14,23,45,19,3,36,9)) AND isnotnull(p_partkey#6)) +Input [4]: [p_partkey#5, p_brand#6, p_type#7, p_size#8] +Condition : (((((isnotnull(p_brand#6) AND isnotnull(p_type#7)) AND NOT (p_brand#6 = Brand#9)) AND NOT StartsWith(p_type#7, MEDIUM POLISHED)) AND p_size#8 IN (49,14,23,45,19,3,36,9)) AND isnotnull(p_partkey#5)) (13) BroadcastExchange -Input [4]: [p_partkey#6, p_brand#7, p_type#8, p_size#9] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#11] +Input [4]: [p_partkey#5, p_brand#6, p_type#7, p_size#8] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 3] Left keys [1]: [ps_partkey#1] -Right keys [1]: [p_partkey#6] +Right keys [1]: [p_partkey#5] Join condition: None (15) Project [codegen id : 3] -Output [4]: [ps_suppkey#2, p_brand#7, p_type#8, p_size#9] -Input [6]: [ps_partkey#1, ps_suppkey#2, p_partkey#6, p_brand#7, p_type#8, p_size#9] +Output [4]: [ps_suppkey#2, p_brand#6, p_type#7, p_size#8] +Input [6]: [ps_partkey#1, ps_suppkey#2, p_partkey#5, p_brand#6, p_type#7, p_size#8] (16) HashAggregate [codegen id : 3] -Input [4]: [ps_suppkey#2, p_brand#7, p_type#8, p_size#9] -Keys [4]: [p_brand#7, p_type#8, p_size#9, ps_suppkey#2] +Input [4]: [ps_suppkey#2, p_brand#6, p_type#7, p_size#8] +Keys [4]: [p_brand#6, p_type#7, p_size#8, ps_suppkey#2] Functions: [] Aggregate Attributes: [] -Results [4]: [p_brand#7, p_type#8, p_size#9, ps_suppkey#2] +Results [4]: [p_brand#6, p_type#7, p_size#8, ps_suppkey#2] (17) Exchange -Input [4]: [p_brand#7, p_type#8, p_size#9, ps_suppkey#2] -Arguments: hashpartitioning(p_brand#7, p_type#8, p_size#9, ps_suppkey#2, 5), ENSURE_REQUIREMENTS, [id=#12] +Input [4]: [p_brand#6, p_type#7, p_size#8, ps_suppkey#2] +Arguments: hashpartitioning(p_brand#6, p_type#7, p_size#8, ps_suppkey#2, 5), ENSURE_REQUIREMENTS, [plan_id=3] (18) HashAggregate [codegen id : 4] -Input [4]: [p_brand#7, p_type#8, p_size#9, ps_suppkey#2] -Keys [4]: [p_brand#7, p_type#8, p_size#9, ps_suppkey#2] +Input [4]: [p_brand#6, p_type#7, p_size#8, ps_suppkey#2] +Keys [4]: [p_brand#6, p_type#7, p_size#8, ps_suppkey#2] Functions: [] Aggregate Attributes: [] -Results [4]: [p_brand#7, p_type#8, p_size#9, ps_suppkey#2] +Results [4]: [p_brand#6, p_type#7, p_size#8, ps_suppkey#2] (19) HashAggregate [codegen id : 4] -Input [4]: [p_brand#7, p_type#8, p_size#9, ps_suppkey#2] -Keys [3]: [p_brand#7, p_type#8, p_size#9] +Input [4]: [p_brand#6, p_type#7, p_size#8, ps_suppkey#2] +Keys [3]: [p_brand#6, p_type#7, p_size#8] Functions [1]: [partial_count(distinct ps_suppkey#2)] -Aggregate Attributes [1]: [count(ps_suppkey#2)#13] -Results [4]: [p_brand#7, p_type#8, p_size#9, count#14] +Aggregate Attributes [1]: [count(ps_suppkey#2)#10] +Results [4]: [p_brand#6, p_type#7, p_size#8, count#11] (20) Exchange -Input [4]: [p_brand#7, p_type#8, p_size#9, count#14] -Arguments: hashpartitioning(p_brand#7, p_type#8, p_size#9, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [p_brand#6, p_type#7, p_size#8, count#11] +Arguments: hashpartitioning(p_brand#6, p_type#7, p_size#8, 5), ENSURE_REQUIREMENTS, [plan_id=4] (21) HashAggregate [codegen id : 5] -Input [4]: [p_brand#7, p_type#8, p_size#9, count#14] -Keys [3]: [p_brand#7, p_type#8, p_size#9] +Input [4]: [p_brand#6, p_type#7, p_size#8, count#11] +Keys [3]: [p_brand#6, p_type#7, p_size#8] Functions [1]: [count(distinct ps_suppkey#2)] -Aggregate Attributes [1]: [count(ps_suppkey#2)#13] -Results [4]: [p_brand#7, p_type#8, p_size#9, count(ps_suppkey#2)#13 AS supplier_cnt#16] +Aggregate Attributes [1]: [count(ps_suppkey#2)#10] +Results [4]: [p_brand#6, p_type#7, p_size#8, count(ps_suppkey#2)#10 AS supplier_cnt#12] (22) Exchange -Input [4]: [p_brand#7, p_type#8, p_size#9, supplier_cnt#16] -Arguments: rangepartitioning(supplier_cnt#16 DESC NULLS LAST, p_brand#7 ASC NULLS FIRST, p_type#8 ASC NULLS FIRST, p_size#9 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [4]: [p_brand#6, p_type#7, p_size#8, supplier_cnt#12] +Arguments: rangepartitioning(supplier_cnt#12 DESC NULLS LAST, p_brand#6 ASC NULLS FIRST, p_type#7 ASC NULLS FIRST, p_size#8 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=5] (23) Sort [codegen id : 6] -Input [4]: [p_brand#7, p_type#8, p_size#9, supplier_cnt#16] -Arguments: [supplier_cnt#16 DESC NULLS LAST, p_brand#7 ASC NULLS FIRST, p_type#8 ASC NULLS FIRST, p_size#9 ASC NULLS FIRST], true, 0 +Input [4]: [p_brand#6, p_type#7, p_size#8, supplier_cnt#12] +Arguments: [supplier_cnt#12 DESC NULLS LAST, p_brand#6 ASC NULLS FIRST, p_type#7 ASC NULLS FIRST, p_size#8 ASC NULLS FIRST], true, 0 diff --git a/sql/core/src/test/resources/tpch-plan-stability/q17/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q17/explain.txt index 652bf04238ca2..a3bf795610edf 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q17/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q17/explain.txt @@ -58,7 +58,7 @@ Input [3]: [p_partkey#4, p_brand#5, p_container#6] (8) BroadcastExchange Input [1]: [p_partkey#4] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 4] Left keys [1]: [l_partkey#1] @@ -70,69 +70,69 @@ Output [3]: [l_quantity#2, l_extendedprice#3, p_partkey#4] Input [4]: [l_partkey#1, l_quantity#2, l_extendedprice#3, p_partkey#4] (11) Scan parquet default.lineitem -Output [2]: [l_partkey#9, l_quantity#10] +Output [2]: [l_partkey#8, l_quantity#9] Batched: true Location [not included in comparison]/{warehouse_dir}/lineitem] PushedFilters: [IsNotNull(l_partkey)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [2]: [l_partkey#9, l_quantity#10] +Input [2]: [l_partkey#8, l_quantity#9] (13) Filter [codegen id : 2] -Input [2]: [l_partkey#9, l_quantity#10] -Condition : isnotnull(l_partkey#9) +Input [2]: [l_partkey#8, l_quantity#9] +Condition : isnotnull(l_partkey#8) (14) HashAggregate [codegen id : 2] -Input [2]: [l_partkey#9, l_quantity#10] -Keys [1]: [l_partkey#9] -Functions [1]: [partial_avg(UnscaledValue(l_quantity#10))] -Aggregate Attributes [2]: [sum#11, count#12] -Results [3]: [l_partkey#9, sum#13, count#14] +Input [2]: [l_partkey#8, l_quantity#9] +Keys [1]: [l_partkey#8] +Functions [1]: [partial_avg(UnscaledValue(l_quantity#9))] +Aggregate Attributes [2]: [sum#10, count#11] +Results [3]: [l_partkey#8, sum#12, count#13] (15) Exchange -Input [3]: [l_partkey#9, sum#13, count#14] -Arguments: hashpartitioning(l_partkey#9, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [3]: [l_partkey#8, sum#12, count#13] +Arguments: hashpartitioning(l_partkey#8, 5), ENSURE_REQUIREMENTS, [plan_id=2] (16) HashAggregate [codegen id : 3] -Input [3]: [l_partkey#9, sum#13, count#14] -Keys [1]: [l_partkey#9] -Functions [1]: [avg(UnscaledValue(l_quantity#10))] -Aggregate Attributes [1]: [avg(UnscaledValue(l_quantity#10))#16] -Results [2]: [CheckOverflow((0.2000 * promote_precision(cast((avg(UnscaledValue(l_quantity#10))#16 / 1.0) as decimal(14,4)))), DecimalType(16,5)) AS (0.2 * avg(l_quantity))#17, l_partkey#9] +Input [3]: [l_partkey#8, sum#12, count#13] +Keys [1]: [l_partkey#8] +Functions [1]: [avg(UnscaledValue(l_quantity#9))] +Aggregate Attributes [1]: [avg(UnscaledValue(l_quantity#9))#14] +Results [2]: [CheckOverflow((0.2000 * promote_precision(cast((avg(UnscaledValue(l_quantity#9))#14 / 1.0) as decimal(14,4)))), DecimalType(16,5)) AS (0.2 * avg(l_quantity))#15, l_partkey#8] (17) Filter [codegen id : 3] -Input [2]: [(0.2 * avg(l_quantity))#17, l_partkey#9] -Condition : isnotnull((0.2 * avg(l_quantity))#17) +Input [2]: [(0.2 * avg(l_quantity))#15, l_partkey#8] +Condition : isnotnull((0.2 * avg(l_quantity))#15) (18) BroadcastExchange -Input [2]: [(0.2 * avg(l_quantity))#17, l_partkey#9] -Arguments: HashedRelationBroadcastMode(List(input[1, bigint, true]),false), [id=#18] +Input [2]: [(0.2 * avg(l_quantity))#15, l_partkey#8] +Arguments: HashedRelationBroadcastMode(List(input[1, bigint, true]),false), [plan_id=3] (19) BroadcastHashJoin [codegen id : 4] Left keys [1]: [p_partkey#4] -Right keys [1]: [l_partkey#9] -Join condition: (cast(l_quantity#2 as decimal(16,5)) < (0.2 * avg(l_quantity))#17) +Right keys [1]: [l_partkey#8] +Join condition: (cast(l_quantity#2 as decimal(16,5)) < (0.2 * avg(l_quantity))#15) (20) Project [codegen id : 4] Output [1]: [l_extendedprice#3] -Input [5]: [l_quantity#2, l_extendedprice#3, p_partkey#4, (0.2 * avg(l_quantity))#17, l_partkey#9] +Input [5]: [l_quantity#2, l_extendedprice#3, p_partkey#4, (0.2 * avg(l_quantity))#15, l_partkey#8] (21) HashAggregate [codegen id : 4] Input [1]: [l_extendedprice#3] Keys: [] Functions [1]: [partial_sum(l_extendedprice#3)] -Aggregate Attributes [2]: [sum#19, isEmpty#20] -Results [2]: [sum#21, isEmpty#22] +Aggregate Attributes [2]: [sum#16, isEmpty#17] +Results [2]: [sum#18, isEmpty#19] (22) Exchange -Input [2]: [sum#21, isEmpty#22] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#23] +Input [2]: [sum#18, isEmpty#19] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (23) HashAggregate [codegen id : 5] -Input [2]: [sum#21, isEmpty#22] +Input [2]: [sum#18, isEmpty#19] Keys: [] Functions [1]: [sum(l_extendedprice#3)] -Aggregate Attributes [1]: [sum(l_extendedprice#3)#24] -Results [1]: [CheckOverflow((promote_precision(cast(sum(l_extendedprice#3)#24 as decimal(21,1))) / 7.0), DecimalType(27,6)) AS avg_yearly#25] +Aggregate Attributes [1]: [sum(l_extendedprice#3)#20] +Results [1]: [CheckOverflow((promote_precision(cast(sum(l_extendedprice#3)#20 as decimal(21,1))) / 7.0), DecimalType(27,6)) AS avg_yearly#21] diff --git a/sql/core/src/test/resources/tpch-plan-stability/q18/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q18/explain.txt index 6425b29a8f0ae..36ff27d8bd496 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q18/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q18/explain.txt @@ -77,26 +77,26 @@ Results [3]: [l_orderkey#7, sum#11, isEmpty#12] (10) Exchange Input [3]: [l_orderkey#7, sum#11, isEmpty#12] -Arguments: hashpartitioning(l_orderkey#7, 5), ENSURE_REQUIREMENTS, [id=#13] +Arguments: hashpartitioning(l_orderkey#7, 5), ENSURE_REQUIREMENTS, [plan_id=1] (11) HashAggregate [codegen id : 2] Input [3]: [l_orderkey#7, sum#11, isEmpty#12] Keys [1]: [l_orderkey#7] Functions [1]: [sum(l_quantity#8)] -Aggregate Attributes [1]: [sum(l_quantity#8)#14] -Results [2]: [l_orderkey#7, sum(l_quantity#8)#14 AS sum(l_quantity#15)#16] +Aggregate Attributes [1]: [sum(l_quantity#8)#13] +Results [2]: [l_orderkey#7, sum(l_quantity#8)#13 AS sum(l_quantity#14)#15] (12) Filter [codegen id : 2] -Input [2]: [l_orderkey#7, sum(l_quantity#15)#16] -Condition : (isnotnull(sum(l_quantity#15)#16) AND (sum(l_quantity#15)#16 > 300)) +Input [2]: [l_orderkey#7, sum(l_quantity#14)#15] +Condition : (isnotnull(sum(l_quantity#14)#15) AND (sum(l_quantity#14)#15 > 300)) (13) Project [codegen id : 2] Output [1]: [l_orderkey#7] -Input [2]: [l_orderkey#7, sum(l_quantity#15)#16] +Input [2]: [l_orderkey#7, sum(l_quantity#14)#15] (14) BroadcastExchange Input [1]: [l_orderkey#7] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#17] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 3] Left keys [1]: [o_orderkey#3] @@ -105,7 +105,7 @@ Join condition: None (16) BroadcastExchange Input [4]: [o_orderkey#3, o_custkey#4, o_totalprice#5, o_orderdate#6] -Arguments: HashedRelationBroadcastMode(List(input[1, bigint, false]),false), [id=#18] +Arguments: HashedRelationBroadcastMode(List(input[1, bigint, false]),false), [plan_id=3] (17) BroadcastHashJoin [codegen id : 7] Left keys [1]: [c_custkey#1] @@ -117,59 +117,59 @@ Output [5]: [c_custkey#1, c_name#2, o_orderkey#3, o_totalprice#5, o_orderdate#6] Input [6]: [c_custkey#1, c_name#2, o_orderkey#3, o_custkey#4, o_totalprice#5, o_orderdate#6] (19) Scan parquet default.lineitem -Output [2]: [l_orderkey#19, l_quantity#15] +Output [2]: [l_orderkey#16, l_quantity#14] Batched: true Location [not included in comparison]/{warehouse_dir}/lineitem] PushedFilters: [IsNotNull(l_orderkey)] ReadSchema: struct (20) ColumnarToRow [codegen id : 6] -Input [2]: [l_orderkey#19, l_quantity#15] +Input [2]: [l_orderkey#16, l_quantity#14] (21) Filter [codegen id : 6] -Input [2]: [l_orderkey#19, l_quantity#15] -Condition : isnotnull(l_orderkey#19) +Input [2]: [l_orderkey#16, l_quantity#14] +Condition : isnotnull(l_orderkey#16) (22) ReusedExchange [Reuses operator id: 14] Output [1]: [l_orderkey#7] (23) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [l_orderkey#19] +Left keys [1]: [l_orderkey#16] Right keys [1]: [l_orderkey#7] Join condition: None (24) BroadcastExchange -Input [2]: [l_orderkey#19, l_quantity#15] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#20] +Input [2]: [l_orderkey#16, l_quantity#14] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=4] (25) BroadcastHashJoin [codegen id : 7] Left keys [1]: [o_orderkey#3] -Right keys [1]: [l_orderkey#19] +Right keys [1]: [l_orderkey#16] Join condition: None (26) Project [codegen id : 7] -Output [6]: [c_custkey#1, c_name#2, o_orderkey#3, o_totalprice#5, o_orderdate#6, l_quantity#15] -Input [7]: [c_custkey#1, c_name#2, o_orderkey#3, o_totalprice#5, o_orderdate#6, l_orderkey#19, l_quantity#15] +Output [6]: [c_custkey#1, c_name#2, o_orderkey#3, o_totalprice#5, o_orderdate#6, l_quantity#14] +Input [7]: [c_custkey#1, c_name#2, o_orderkey#3, o_totalprice#5, o_orderdate#6, l_orderkey#16, l_quantity#14] (27) HashAggregate [codegen id : 7] -Input [6]: [c_custkey#1, c_name#2, o_orderkey#3, o_totalprice#5, o_orderdate#6, l_quantity#15] +Input [6]: [c_custkey#1, c_name#2, o_orderkey#3, o_totalprice#5, o_orderdate#6, l_quantity#14] Keys [5]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5] -Functions [1]: [partial_sum(l_quantity#15)] -Aggregate Attributes [2]: [sum#21, isEmpty#22] -Results [7]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#23, isEmpty#24] +Functions [1]: [partial_sum(l_quantity#14)] +Aggregate Attributes [2]: [sum#17, isEmpty#18] +Results [7]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#19, isEmpty#20] (28) Exchange -Input [7]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#23, isEmpty#24] -Arguments: hashpartitioning(c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, 5), ENSURE_REQUIREMENTS, [id=#25] +Input [7]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#19, isEmpty#20] +Arguments: hashpartitioning(c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, 5), ENSURE_REQUIREMENTS, [plan_id=5] (29) HashAggregate [codegen id : 8] -Input [7]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#23, isEmpty#24] +Input [7]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#19, isEmpty#20] Keys [5]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5] -Functions [1]: [sum(l_quantity#15)] -Aggregate Attributes [1]: [sum(l_quantity#15)#26] -Results [6]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum(l_quantity#15)#26 AS sum(l_quantity)#27] +Functions [1]: [sum(l_quantity#14)] +Aggregate Attributes [1]: [sum(l_quantity#14)#21] +Results [6]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum(l_quantity#14)#21 AS sum(l_quantity)#22] (30) TakeOrderedAndProject -Input [6]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum(l_quantity)#27] -Arguments: 100, [o_totalprice#5 DESC NULLS LAST, o_orderdate#6 ASC NULLS FIRST], [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum(l_quantity)#27] +Input [6]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum(l_quantity)#22] +Arguments: 100, [o_totalprice#5 DESC NULLS LAST, o_orderdate#6 ASC NULLS FIRST], [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum(l_quantity)#22] diff --git a/sql/core/src/test/resources/tpch-plan-stability/q19/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q19/explain.txt index b5d84e54efc7e..e0c279b6b1e86 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q19/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q19/explain.txt @@ -48,7 +48,7 @@ Condition : (((isnotnull(p_size#9) AND (p_size#9 >= 1)) AND isnotnull(p_partkey# (8) BroadcastExchange Input [4]: [p_partkey#7, p_brand#8, p_size#9, p_container#10] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#14] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 2] Left keys [1]: [l_partkey#1] @@ -63,17 +63,17 @@ Input [8]: [l_partkey#1, l_quantity#2, l_extendedprice#3, l_discount#4, p_partke Input [2]: [l_extendedprice#3, l_discount#4] Keys: [] Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(l_extendedprice#3 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#4 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] -Aggregate Attributes [2]: [sum#15, isEmpty#16] -Results [2]: [sum#17, isEmpty#18] +Aggregate Attributes [2]: [sum#14, isEmpty#15] +Results [2]: [sum#16, isEmpty#17] (12) Exchange -Input [2]: [sum#17, isEmpty#18] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#19] +Input [2]: [sum#16, isEmpty#17] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2] (13) HashAggregate [codegen id : 3] -Input [2]: [sum#17, isEmpty#18] +Input [2]: [sum#16, isEmpty#17] Keys: [] Functions [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#3 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#4 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#3 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#4 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#20] -Results [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#3 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#4 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#20 AS revenue#21] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#3 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#4 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#18] +Results [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#3 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#4 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#18 AS revenue#19] diff --git a/sql/core/src/test/resources/tpch-plan-stability/q2/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q2/explain.txt index 1a938a23f7d3f..da01853dbe487 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q2/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q2/explain.txt @@ -90,7 +90,7 @@ Condition : ((isnotnull(ps_partkey#5) AND isnotnull(ps_supplycost#7)) AND isnotn (8) BroadcastExchange Input [3]: [ps_partkey#5, ps_suppkey#6, ps_supplycost#7] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 10] Left keys [1]: [p_partkey#1] @@ -102,206 +102,206 @@ Output [4]: [p_partkey#1, p_mfgr#2, ps_suppkey#6, ps_supplycost#7] Input [5]: [p_partkey#1, p_mfgr#2, ps_partkey#5, ps_suppkey#6, ps_supplycost#7] (11) Scan parquet default.partsupp -Output [3]: [ps_partkey#9, ps_suppkey#10, ps_supplycost#11] +Output [3]: [ps_partkey#8, ps_suppkey#9, ps_supplycost#10] Batched: true Location [not included in comparison]/{warehouse_dir}/partsupp] PushedFilters: [IsNotNull(ps_suppkey), IsNotNull(ps_partkey)] ReadSchema: struct (12) ColumnarToRow [codegen id : 5] -Input [3]: [ps_partkey#9, ps_suppkey#10, ps_supplycost#11] +Input [3]: [ps_partkey#8, ps_suppkey#9, ps_supplycost#10] (13) Filter [codegen id : 5] -Input [3]: [ps_partkey#9, ps_suppkey#10, ps_supplycost#11] -Condition : (isnotnull(ps_suppkey#10) AND isnotnull(ps_partkey#9)) +Input [3]: [ps_partkey#8, ps_suppkey#9, ps_supplycost#10] +Condition : (isnotnull(ps_suppkey#9) AND isnotnull(ps_partkey#8)) (14) Scan parquet default.supplier -Output [2]: [s_suppkey#12, s_nationkey#13] +Output [2]: [s_suppkey#11, s_nationkey#12] Batched: true Location [not included in comparison]/{warehouse_dir}/supplier] PushedFilters: [IsNotNull(s_suppkey), IsNotNull(s_nationkey)] ReadSchema: struct (15) ColumnarToRow [codegen id : 2] -Input [2]: [s_suppkey#12, s_nationkey#13] +Input [2]: [s_suppkey#11, s_nationkey#12] (16) Filter [codegen id : 2] -Input [2]: [s_suppkey#12, s_nationkey#13] -Condition : (isnotnull(s_suppkey#12) AND isnotnull(s_nationkey#13)) +Input [2]: [s_suppkey#11, s_nationkey#12] +Condition : (isnotnull(s_suppkey#11) AND isnotnull(s_nationkey#12)) (17) BroadcastExchange -Input [2]: [s_suppkey#12, s_nationkey#13] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#14] +Input [2]: [s_suppkey#11, s_nationkey#12] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=2] (18) BroadcastHashJoin [codegen id : 5] -Left keys [1]: [ps_suppkey#10] -Right keys [1]: [s_suppkey#12] +Left keys [1]: [ps_suppkey#9] +Right keys [1]: [s_suppkey#11] Join condition: None (19) Project [codegen id : 5] -Output [3]: [ps_partkey#9, ps_supplycost#11, s_nationkey#13] -Input [5]: [ps_partkey#9, ps_suppkey#10, ps_supplycost#11, s_suppkey#12, s_nationkey#13] +Output [3]: [ps_partkey#8, ps_supplycost#10, s_nationkey#12] +Input [5]: [ps_partkey#8, ps_suppkey#9, ps_supplycost#10, s_suppkey#11, s_nationkey#12] (20) Scan parquet default.nation -Output [2]: [n_nationkey#15, n_regionkey#16] +Output [2]: [n_nationkey#13, n_regionkey#14] Batched: true Location [not included in comparison]/{warehouse_dir}/nation] PushedFilters: [IsNotNull(n_nationkey), IsNotNull(n_regionkey)] ReadSchema: struct (21) ColumnarToRow [codegen id : 3] -Input [2]: [n_nationkey#15, n_regionkey#16] +Input [2]: [n_nationkey#13, n_regionkey#14] (22) Filter [codegen id : 3] -Input [2]: [n_nationkey#15, n_regionkey#16] -Condition : (isnotnull(n_nationkey#15) AND isnotnull(n_regionkey#16)) +Input [2]: [n_nationkey#13, n_regionkey#14] +Condition : (isnotnull(n_nationkey#13) AND isnotnull(n_regionkey#14)) (23) BroadcastExchange -Input [2]: [n_nationkey#15, n_regionkey#16] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#17] +Input [2]: [n_nationkey#13, n_regionkey#14] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 5] -Left keys [1]: [s_nationkey#13] -Right keys [1]: [n_nationkey#15] +Left keys [1]: [s_nationkey#12] +Right keys [1]: [n_nationkey#13] Join condition: None (25) Project [codegen id : 5] -Output [3]: [ps_partkey#9, ps_supplycost#11, n_regionkey#16] -Input [5]: [ps_partkey#9, ps_supplycost#11, s_nationkey#13, n_nationkey#15, n_regionkey#16] +Output [3]: [ps_partkey#8, ps_supplycost#10, n_regionkey#14] +Input [5]: [ps_partkey#8, ps_supplycost#10, s_nationkey#12, n_nationkey#13, n_regionkey#14] (26) Scan parquet default.region -Output [2]: [r_regionkey#18, r_name#19] +Output [2]: [r_regionkey#15, r_name#16] Batched: true Location [not included in comparison]/{warehouse_dir}/region] PushedFilters: [IsNotNull(r_name), EqualTo(r_name,EUROPE), IsNotNull(r_regionkey)] ReadSchema: struct (27) ColumnarToRow [codegen id : 4] -Input [2]: [r_regionkey#18, r_name#19] +Input [2]: [r_regionkey#15, r_name#16] (28) Filter [codegen id : 4] -Input [2]: [r_regionkey#18, r_name#19] -Condition : ((isnotnull(r_name#19) AND (r_name#19 = EUROPE)) AND isnotnull(r_regionkey#18)) +Input [2]: [r_regionkey#15, r_name#16] +Condition : ((isnotnull(r_name#16) AND (r_name#16 = EUROPE)) AND isnotnull(r_regionkey#15)) (29) Project [codegen id : 4] -Output [1]: [r_regionkey#18] -Input [2]: [r_regionkey#18, r_name#19] +Output [1]: [r_regionkey#15] +Input [2]: [r_regionkey#15, r_name#16] (30) BroadcastExchange -Input [1]: [r_regionkey#18] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#20] +Input [1]: [r_regionkey#15] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=4] (31) BroadcastHashJoin [codegen id : 5] -Left keys [1]: [n_regionkey#16] -Right keys [1]: [r_regionkey#18] +Left keys [1]: [n_regionkey#14] +Right keys [1]: [r_regionkey#15] Join condition: None (32) Project [codegen id : 5] -Output [2]: [ps_partkey#9, ps_supplycost#11] -Input [4]: [ps_partkey#9, ps_supplycost#11, n_regionkey#16, r_regionkey#18] +Output [2]: [ps_partkey#8, ps_supplycost#10] +Input [4]: [ps_partkey#8, ps_supplycost#10, n_regionkey#14, r_regionkey#15] (33) HashAggregate [codegen id : 5] -Input [2]: [ps_partkey#9, ps_supplycost#11] -Keys [1]: [ps_partkey#9] -Functions [1]: [partial_min(ps_supplycost#11)] -Aggregate Attributes [1]: [min#21] -Results [2]: [ps_partkey#9, min#22] +Input [2]: [ps_partkey#8, ps_supplycost#10] +Keys [1]: [ps_partkey#8] +Functions [1]: [partial_min(ps_supplycost#10)] +Aggregate Attributes [1]: [min#17] +Results [2]: [ps_partkey#8, min#18] (34) Exchange -Input [2]: [ps_partkey#9, min#22] -Arguments: hashpartitioning(ps_partkey#9, 5), ENSURE_REQUIREMENTS, [id=#23] +Input [2]: [ps_partkey#8, min#18] +Arguments: hashpartitioning(ps_partkey#8, 5), ENSURE_REQUIREMENTS, [plan_id=5] (35) HashAggregate [codegen id : 6] -Input [2]: [ps_partkey#9, min#22] -Keys [1]: [ps_partkey#9] -Functions [1]: [min(ps_supplycost#11)] -Aggregate Attributes [1]: [min(ps_supplycost#11)#24] -Results [2]: [min(ps_supplycost#11)#24 AS min(ps_supplycost)#25, ps_partkey#9] +Input [2]: [ps_partkey#8, min#18] +Keys [1]: [ps_partkey#8] +Functions [1]: [min(ps_supplycost#10)] +Aggregate Attributes [1]: [min(ps_supplycost#10)#19] +Results [2]: [min(ps_supplycost#10)#19 AS min(ps_supplycost)#20, ps_partkey#8] (36) Filter [codegen id : 6] -Input [2]: [min(ps_supplycost)#25, ps_partkey#9] -Condition : isnotnull(min(ps_supplycost)#25) +Input [2]: [min(ps_supplycost)#20, ps_partkey#8] +Condition : isnotnull(min(ps_supplycost)#20) (37) BroadcastExchange -Input [2]: [min(ps_supplycost)#25, ps_partkey#9] -Arguments: HashedRelationBroadcastMode(List(input[0, decimal(10,0), false], input[1, bigint, true]),false), [id=#26] +Input [2]: [min(ps_supplycost)#20, ps_partkey#8] +Arguments: HashedRelationBroadcastMode(List(input[0, decimal(10,0), false], input[1, bigint, true]),false), [plan_id=6] (38) BroadcastHashJoin [codegen id : 10] Left keys [2]: [ps_supplycost#7, p_partkey#1] -Right keys [2]: [min(ps_supplycost)#25, ps_partkey#9] +Right keys [2]: [min(ps_supplycost)#20, ps_partkey#8] Join condition: None (39) Project [codegen id : 10] Output [3]: [p_partkey#1, p_mfgr#2, ps_suppkey#6] -Input [6]: [p_partkey#1, p_mfgr#2, ps_suppkey#6, ps_supplycost#7, min(ps_supplycost)#25, ps_partkey#9] +Input [6]: [p_partkey#1, p_mfgr#2, ps_suppkey#6, ps_supplycost#7, min(ps_supplycost)#20, ps_partkey#8] (40) Scan parquet default.supplier -Output [7]: [s_suppkey#27, s_name#28, s_address#29, s_nationkey#30, s_phone#31, s_acctbal#32, s_comment#33] +Output [7]: [s_suppkey#21, s_name#22, s_address#23, s_nationkey#24, s_phone#25, s_acctbal#26, s_comment#27] Batched: true Location [not included in comparison]/{warehouse_dir}/supplier] PushedFilters: [IsNotNull(s_suppkey), IsNotNull(s_nationkey)] ReadSchema: struct (41) ColumnarToRow [codegen id : 7] -Input [7]: [s_suppkey#27, s_name#28, s_address#29, s_nationkey#30, s_phone#31, s_acctbal#32, s_comment#33] +Input [7]: [s_suppkey#21, s_name#22, s_address#23, s_nationkey#24, s_phone#25, s_acctbal#26, s_comment#27] (42) Filter [codegen id : 7] -Input [7]: [s_suppkey#27, s_name#28, s_address#29, s_nationkey#30, s_phone#31, s_acctbal#32, s_comment#33] -Condition : (isnotnull(s_suppkey#27) AND isnotnull(s_nationkey#30)) +Input [7]: [s_suppkey#21, s_name#22, s_address#23, s_nationkey#24, s_phone#25, s_acctbal#26, s_comment#27] +Condition : (isnotnull(s_suppkey#21) AND isnotnull(s_nationkey#24)) (43) BroadcastExchange -Input [7]: [s_suppkey#27, s_name#28, s_address#29, s_nationkey#30, s_phone#31, s_acctbal#32, s_comment#33] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#34] +Input [7]: [s_suppkey#21, s_name#22, s_address#23, s_nationkey#24, s_phone#25, s_acctbal#26, s_comment#27] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=7] (44) BroadcastHashJoin [codegen id : 10] Left keys [1]: [ps_suppkey#6] -Right keys [1]: [s_suppkey#27] +Right keys [1]: [s_suppkey#21] Join condition: None (45) Project [codegen id : 10] -Output [8]: [p_partkey#1, p_mfgr#2, s_name#28, s_address#29, s_nationkey#30, s_phone#31, s_acctbal#32, s_comment#33] -Input [10]: [p_partkey#1, p_mfgr#2, ps_suppkey#6, s_suppkey#27, s_name#28, s_address#29, s_nationkey#30, s_phone#31, s_acctbal#32, s_comment#33] +Output [8]: [p_partkey#1, p_mfgr#2, s_name#22, s_address#23, s_nationkey#24, s_phone#25, s_acctbal#26, s_comment#27] +Input [10]: [p_partkey#1, p_mfgr#2, ps_suppkey#6, s_suppkey#21, s_name#22, s_address#23, s_nationkey#24, s_phone#25, s_acctbal#26, s_comment#27] (46) Scan parquet default.nation -Output [3]: [n_nationkey#35, n_name#36, n_regionkey#37] +Output [3]: [n_nationkey#28, n_name#29, n_regionkey#30] Batched: true Location [not included in comparison]/{warehouse_dir}/nation] PushedFilters: [IsNotNull(n_nationkey), IsNotNull(n_regionkey)] ReadSchema: struct (47) ColumnarToRow [codegen id : 8] -Input [3]: [n_nationkey#35, n_name#36, n_regionkey#37] +Input [3]: [n_nationkey#28, n_name#29, n_regionkey#30] (48) Filter [codegen id : 8] -Input [3]: [n_nationkey#35, n_name#36, n_regionkey#37] -Condition : (isnotnull(n_nationkey#35) AND isnotnull(n_regionkey#37)) +Input [3]: [n_nationkey#28, n_name#29, n_regionkey#30] +Condition : (isnotnull(n_nationkey#28) AND isnotnull(n_regionkey#30)) (49) BroadcastExchange -Input [3]: [n_nationkey#35, n_name#36, n_regionkey#37] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#38] +Input [3]: [n_nationkey#28, n_name#29, n_regionkey#30] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=8] (50) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [s_nationkey#30] -Right keys [1]: [n_nationkey#35] +Left keys [1]: [s_nationkey#24] +Right keys [1]: [n_nationkey#28] Join condition: None (51) Project [codegen id : 10] -Output [9]: [p_partkey#1, p_mfgr#2, s_name#28, s_address#29, s_phone#31, s_acctbal#32, s_comment#33, n_name#36, n_regionkey#37] -Input [11]: [p_partkey#1, p_mfgr#2, s_name#28, s_address#29, s_nationkey#30, s_phone#31, s_acctbal#32, s_comment#33, n_nationkey#35, n_name#36, n_regionkey#37] +Output [9]: [p_partkey#1, p_mfgr#2, s_name#22, s_address#23, s_phone#25, s_acctbal#26, s_comment#27, n_name#29, n_regionkey#30] +Input [11]: [p_partkey#1, p_mfgr#2, s_name#22, s_address#23, s_nationkey#24, s_phone#25, s_acctbal#26, s_comment#27, n_nationkey#28, n_name#29, n_regionkey#30] (52) ReusedExchange [Reuses operator id: 30] -Output [1]: [r_regionkey#39] +Output [1]: [r_regionkey#31] (53) BroadcastHashJoin [codegen id : 10] -Left keys [1]: [n_regionkey#37] -Right keys [1]: [r_regionkey#39] +Left keys [1]: [n_regionkey#30] +Right keys [1]: [r_regionkey#31] Join condition: None (54) Project [codegen id : 10] -Output [8]: [s_acctbal#32, s_name#28, n_name#36, p_partkey#1, p_mfgr#2, s_address#29, s_phone#31, s_comment#33] -Input [10]: [p_partkey#1, p_mfgr#2, s_name#28, s_address#29, s_phone#31, s_acctbal#32, s_comment#33, n_name#36, n_regionkey#37, r_regionkey#39] +Output [8]: [s_acctbal#26, s_name#22, n_name#29, p_partkey#1, p_mfgr#2, s_address#23, s_phone#25, s_comment#27] +Input [10]: [p_partkey#1, p_mfgr#2, s_name#22, s_address#23, s_phone#25, s_acctbal#26, s_comment#27, n_name#29, n_regionkey#30, r_regionkey#31] (55) TakeOrderedAndProject -Input [8]: [s_acctbal#32, s_name#28, n_name#36, p_partkey#1, p_mfgr#2, s_address#29, s_phone#31, s_comment#33] -Arguments: 100, [s_acctbal#32 DESC NULLS LAST, n_name#36 ASC NULLS FIRST, s_name#28 ASC NULLS FIRST, p_partkey#1 ASC NULLS FIRST], [s_acctbal#32, s_name#28, n_name#36, p_partkey#1, p_mfgr#2, s_address#29, s_phone#31, s_comment#33] +Input [8]: [s_acctbal#26, s_name#22, n_name#29, p_partkey#1, p_mfgr#2, s_address#23, s_phone#25, s_comment#27] +Arguments: 100, [s_acctbal#26 DESC NULLS LAST, n_name#29 ASC NULLS FIRST, s_name#22 ASC NULLS FIRST, p_partkey#1 ASC NULLS FIRST], [s_acctbal#26, s_name#22, n_name#29, p_partkey#1, p_mfgr#2, s_address#23, s_phone#25, s_comment#27] diff --git a/sql/core/src/test/resources/tpch-plan-stability/q20/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q20/explain.txt index 43d5431a70f2e..45ff5e67dacb9 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q20/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q20/explain.txt @@ -86,7 +86,7 @@ Input [2]: [p_partkey#8, p_name#9] (11) BroadcastExchange Input [1]: [p_partkey#8] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=1] (12) BroadcastHashJoin [codegen id : 5] Left keys [1]: [ps_partkey#5] @@ -94,69 +94,69 @@ Right keys [1]: [p_partkey#8] Join condition: None (13) Scan parquet default.lineitem -Output [4]: [l_partkey#11, l_suppkey#12, l_quantity#13, l_shipdate#14] +Output [4]: [l_partkey#10, l_suppkey#11, l_quantity#12, l_shipdate#13] Batched: true Location [not included in comparison]/{warehouse_dir}/lineitem] PushedFilters: [IsNotNull(l_shipdate), GreaterThanOrEqual(l_shipdate,1994-01-01), LessThan(l_shipdate,1995-01-01), IsNotNull(l_partkey), IsNotNull(l_suppkey)] ReadSchema: struct (14) ColumnarToRow [codegen id : 3] -Input [4]: [l_partkey#11, l_suppkey#12, l_quantity#13, l_shipdate#14] +Input [4]: [l_partkey#10, l_suppkey#11, l_quantity#12, l_shipdate#13] (15) Filter [codegen id : 3] -Input [4]: [l_partkey#11, l_suppkey#12, l_quantity#13, l_shipdate#14] -Condition : ((((isnotnull(l_shipdate#14) AND (l_shipdate#14 >= 1994-01-01)) AND (l_shipdate#14 < 1995-01-01)) AND isnotnull(l_partkey#11)) AND isnotnull(l_suppkey#12)) +Input [4]: [l_partkey#10, l_suppkey#11, l_quantity#12, l_shipdate#13] +Condition : ((((isnotnull(l_shipdate#13) AND (l_shipdate#13 >= 1994-01-01)) AND (l_shipdate#13 < 1995-01-01)) AND isnotnull(l_partkey#10)) AND isnotnull(l_suppkey#11)) (16) Project [codegen id : 3] -Output [3]: [l_partkey#11, l_suppkey#12, l_quantity#13] -Input [4]: [l_partkey#11, l_suppkey#12, l_quantity#13, l_shipdate#14] +Output [3]: [l_partkey#10, l_suppkey#11, l_quantity#12] +Input [4]: [l_partkey#10, l_suppkey#11, l_quantity#12, l_shipdate#13] (17) ReusedExchange [Reuses operator id: 11] Output [1]: [p_partkey#8] (18) BroadcastHashJoin [codegen id : 3] -Left keys [1]: [l_partkey#11] +Left keys [1]: [l_partkey#10] Right keys [1]: [p_partkey#8] Join condition: None (19) HashAggregate [codegen id : 3] -Input [3]: [l_partkey#11, l_suppkey#12, l_quantity#13] -Keys [2]: [l_partkey#11, l_suppkey#12] -Functions [1]: [partial_sum(l_quantity#13)] -Aggregate Attributes [2]: [sum#15, isEmpty#16] -Results [4]: [l_partkey#11, l_suppkey#12, sum#17, isEmpty#18] +Input [3]: [l_partkey#10, l_suppkey#11, l_quantity#12] +Keys [2]: [l_partkey#10, l_suppkey#11] +Functions [1]: [partial_sum(l_quantity#12)] +Aggregate Attributes [2]: [sum#14, isEmpty#15] +Results [4]: [l_partkey#10, l_suppkey#11, sum#16, isEmpty#17] (20) Exchange -Input [4]: [l_partkey#11, l_suppkey#12, sum#17, isEmpty#18] -Arguments: hashpartitioning(l_partkey#11, l_suppkey#12, 5), ENSURE_REQUIREMENTS, [id=#19] +Input [4]: [l_partkey#10, l_suppkey#11, sum#16, isEmpty#17] +Arguments: hashpartitioning(l_partkey#10, l_suppkey#11, 5), ENSURE_REQUIREMENTS, [plan_id=2] (21) HashAggregate [codegen id : 4] -Input [4]: [l_partkey#11, l_suppkey#12, sum#17, isEmpty#18] -Keys [2]: [l_partkey#11, l_suppkey#12] -Functions [1]: [sum(l_quantity#13)] -Aggregate Attributes [1]: [sum(l_quantity#13)#20] -Results [3]: [CheckOverflow((0.5 * promote_precision(cast(sum(l_quantity#13)#20 as decimal(21,1)))), DecimalType(22,1)) AS (0.5 * sum(l_quantity))#21, l_partkey#11, l_suppkey#12] +Input [4]: [l_partkey#10, l_suppkey#11, sum#16, isEmpty#17] +Keys [2]: [l_partkey#10, l_suppkey#11] +Functions [1]: [sum(l_quantity#12)] +Aggregate Attributes [1]: [sum(l_quantity#12)#18] +Results [3]: [CheckOverflow((0.5 * promote_precision(cast(sum(l_quantity#12)#18 as decimal(21,1)))), DecimalType(22,1)) AS (0.5 * sum(l_quantity))#19, l_partkey#10, l_suppkey#11] (22) Filter [codegen id : 4] -Input [3]: [(0.5 * sum(l_quantity))#21, l_partkey#11, l_suppkey#12] -Condition : isnotnull((0.5 * sum(l_quantity))#21) +Input [3]: [(0.5 * sum(l_quantity))#19, l_partkey#10, l_suppkey#11] +Condition : isnotnull((0.5 * sum(l_quantity))#19) (23) BroadcastExchange -Input [3]: [(0.5 * sum(l_quantity))#21, l_partkey#11, l_suppkey#12] -Arguments: HashedRelationBroadcastMode(List(input[1, bigint, true], input[2, bigint, true]),false), [id=#22] +Input [3]: [(0.5 * sum(l_quantity))#19, l_partkey#10, l_suppkey#11] +Arguments: HashedRelationBroadcastMode(List(input[1, bigint, true], input[2, bigint, true]),false), [plan_id=3] (24) BroadcastHashJoin [codegen id : 5] Left keys [2]: [ps_partkey#5, ps_suppkey#6] -Right keys [2]: [l_partkey#11, l_suppkey#12] -Join condition: (cast(ps_availqty#7 as decimal(22,1)) > (0.5 * sum(l_quantity))#21) +Right keys [2]: [l_partkey#10, l_suppkey#11] +Join condition: (cast(ps_availqty#7 as decimal(22,1)) > (0.5 * sum(l_quantity))#19) (25) Project [codegen id : 5] Output [1]: [ps_suppkey#6] -Input [6]: [ps_partkey#5, ps_suppkey#6, ps_availqty#7, (0.5 * sum(l_quantity))#21, l_partkey#11, l_suppkey#12] +Input [6]: [ps_partkey#5, ps_suppkey#6, ps_availqty#7, (0.5 * sum(l_quantity))#19, l_partkey#10, l_suppkey#11] (26) BroadcastExchange Input [1]: [ps_suppkey#6] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#23] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=4] (27) BroadcastHashJoin [codegen id : 7] Left keys [1]: [s_suppkey#1] @@ -168,39 +168,39 @@ Output [3]: [s_name#2, s_address#3, s_nationkey#4] Input [4]: [s_suppkey#1, s_name#2, s_address#3, s_nationkey#4] (29) Scan parquet default.nation -Output [2]: [n_nationkey#24, n_name#25] +Output [2]: [n_nationkey#20, n_name#21] Batched: true Location [not included in comparison]/{warehouse_dir}/nation] PushedFilters: [IsNotNull(n_name), EqualTo(n_name,CANADA), IsNotNull(n_nationkey)] ReadSchema: struct (30) ColumnarToRow [codegen id : 6] -Input [2]: [n_nationkey#24, n_name#25] +Input [2]: [n_nationkey#20, n_name#21] (31) Filter [codegen id : 6] -Input [2]: [n_nationkey#24, n_name#25] -Condition : ((isnotnull(n_name#25) AND (n_name#25 = CANADA)) AND isnotnull(n_nationkey#24)) +Input [2]: [n_nationkey#20, n_name#21] +Condition : ((isnotnull(n_name#21) AND (n_name#21 = CANADA)) AND isnotnull(n_nationkey#20)) (32) Project [codegen id : 6] -Output [1]: [n_nationkey#24] -Input [2]: [n_nationkey#24, n_name#25] +Output [1]: [n_nationkey#20] +Input [2]: [n_nationkey#20, n_name#21] (33) BroadcastExchange -Input [1]: [n_nationkey#24] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#26] +Input [1]: [n_nationkey#20] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 7] Left keys [1]: [s_nationkey#4] -Right keys [1]: [n_nationkey#24] +Right keys [1]: [n_nationkey#20] Join condition: None (35) Project [codegen id : 7] Output [2]: [s_name#2, s_address#3] -Input [4]: [s_name#2, s_address#3, s_nationkey#4, n_nationkey#24] +Input [4]: [s_name#2, s_address#3, s_nationkey#4, n_nationkey#20] (36) Exchange Input [2]: [s_name#2, s_address#3] -Arguments: rangepartitioning(s_name#2 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#27] +Arguments: rangepartitioning(s_name#2 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=6] (37) Sort [codegen id : 8] Input [2]: [s_name#2, s_address#3] diff --git a/sql/core/src/test/resources/tpch-plan-stability/q21/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q21/explain.txt index 6a38536eb7246..5d5a5e6a430b6 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q21/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q21/explain.txt @@ -82,7 +82,7 @@ Input [2]: [l_orderkey#8, l_suppkey#9] (10) BroadcastExchange Input [2]: [l_orderkey#8, l_suppkey#9] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#10] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=1] (11) BroadcastHashJoin [codegen id : 3] Left keys [1]: [l_orderkey#4] @@ -90,35 +90,35 @@ Right keys [1]: [l_orderkey#8] Join condition: NOT (l_suppkey#9 = l_suppkey#5) (12) Scan parquet default.lineitem -Output [4]: [l_orderkey#11, l_suppkey#12, l_commitdate#13, l_receiptdate#14] +Output [4]: [l_orderkey#10, l_suppkey#11, l_commitdate#12, l_receiptdate#13] Batched: true Location [not included in comparison]/{warehouse_dir}/lineitem] PushedFilters: [IsNotNull(l_receiptdate), IsNotNull(l_commitdate)] ReadSchema: struct (13) ColumnarToRow [codegen id : 2] -Input [4]: [l_orderkey#11, l_suppkey#12, l_commitdate#13, l_receiptdate#14] +Input [4]: [l_orderkey#10, l_suppkey#11, l_commitdate#12, l_receiptdate#13] (14) Filter [codegen id : 2] -Input [4]: [l_orderkey#11, l_suppkey#12, l_commitdate#13, l_receiptdate#14] -Condition : ((isnotnull(l_receiptdate#14) AND isnotnull(l_commitdate#13)) AND (l_receiptdate#14 > l_commitdate#13)) +Input [4]: [l_orderkey#10, l_suppkey#11, l_commitdate#12, l_receiptdate#13] +Condition : ((isnotnull(l_receiptdate#13) AND isnotnull(l_commitdate#12)) AND (l_receiptdate#13 > l_commitdate#12)) (15) Project [codegen id : 2] -Output [2]: [l_orderkey#11, l_suppkey#12] -Input [4]: [l_orderkey#11, l_suppkey#12, l_commitdate#13, l_receiptdate#14] +Output [2]: [l_orderkey#10, l_suppkey#11] +Input [4]: [l_orderkey#10, l_suppkey#11, l_commitdate#12, l_receiptdate#13] (16) BroadcastExchange -Input [2]: [l_orderkey#11, l_suppkey#12] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#15] +Input [2]: [l_orderkey#10, l_suppkey#11] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=2] (17) BroadcastHashJoin [codegen id : 3] Left keys [1]: [l_orderkey#4] -Right keys [1]: [l_orderkey#11] -Join condition: NOT (l_suppkey#12 = l_suppkey#5) +Right keys [1]: [l_orderkey#10] +Join condition: NOT (l_suppkey#11 = l_suppkey#5) (18) BroadcastExchange Input [2]: [l_orderkey#4, l_suppkey#5] -Arguments: HashedRelationBroadcastMode(List(input[1, bigint, true]),false), [id=#16] +Arguments: HashedRelationBroadcastMode(List(input[1, bigint, true]),false), [plan_id=3] (19) BroadcastHashJoin [codegen id : 6] Left keys [1]: [s_suppkey#1] @@ -130,86 +130,86 @@ Output [3]: [s_name#2, s_nationkey#3, l_orderkey#4] Input [5]: [s_suppkey#1, s_name#2, s_nationkey#3, l_orderkey#4, l_suppkey#5] (21) Scan parquet default.orders -Output [2]: [o_orderkey#17, o_orderstatus#18] +Output [2]: [o_orderkey#14, o_orderstatus#15] Batched: true Location [not included in comparison]/{warehouse_dir}/orders] PushedFilters: [IsNotNull(o_orderstatus), EqualTo(o_orderstatus,F), IsNotNull(o_orderkey)] ReadSchema: struct (22) ColumnarToRow [codegen id : 4] -Input [2]: [o_orderkey#17, o_orderstatus#18] +Input [2]: [o_orderkey#14, o_orderstatus#15] (23) Filter [codegen id : 4] -Input [2]: [o_orderkey#17, o_orderstatus#18] -Condition : ((isnotnull(o_orderstatus#18) AND (o_orderstatus#18 = F)) AND isnotnull(o_orderkey#17)) +Input [2]: [o_orderkey#14, o_orderstatus#15] +Condition : ((isnotnull(o_orderstatus#15) AND (o_orderstatus#15 = F)) AND isnotnull(o_orderkey#14)) (24) Project [codegen id : 4] -Output [1]: [o_orderkey#17] -Input [2]: [o_orderkey#17, o_orderstatus#18] +Output [1]: [o_orderkey#14] +Input [2]: [o_orderkey#14, o_orderstatus#15] (25) BroadcastExchange -Input [1]: [o_orderkey#17] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#19] +Input [1]: [o_orderkey#14] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=4] (26) BroadcastHashJoin [codegen id : 6] Left keys [1]: [l_orderkey#4] -Right keys [1]: [o_orderkey#17] +Right keys [1]: [o_orderkey#14] Join condition: None (27) Project [codegen id : 6] Output [2]: [s_name#2, s_nationkey#3] -Input [4]: [s_name#2, s_nationkey#3, l_orderkey#4, o_orderkey#17] +Input [4]: [s_name#2, s_nationkey#3, l_orderkey#4, o_orderkey#14] (28) Scan parquet default.nation -Output [2]: [n_nationkey#20, n_name#21] +Output [2]: [n_nationkey#16, n_name#17] Batched: true Location [not included in comparison]/{warehouse_dir}/nation] PushedFilters: [IsNotNull(n_name), EqualTo(n_name,SAUDI ARABIA), IsNotNull(n_nationkey)] ReadSchema: struct (29) ColumnarToRow [codegen id : 5] -Input [2]: [n_nationkey#20, n_name#21] +Input [2]: [n_nationkey#16, n_name#17] (30) Filter [codegen id : 5] -Input [2]: [n_nationkey#20, n_name#21] -Condition : ((isnotnull(n_name#21) AND (n_name#21 = SAUDI ARABIA)) AND isnotnull(n_nationkey#20)) +Input [2]: [n_nationkey#16, n_name#17] +Condition : ((isnotnull(n_name#17) AND (n_name#17 = SAUDI ARABIA)) AND isnotnull(n_nationkey#16)) (31) Project [codegen id : 5] -Output [1]: [n_nationkey#20] -Input [2]: [n_nationkey#20, n_name#21] +Output [1]: [n_nationkey#16] +Input [2]: [n_nationkey#16, n_name#17] (32) BroadcastExchange -Input [1]: [n_nationkey#20] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#22] +Input [1]: [n_nationkey#16] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=5] (33) BroadcastHashJoin [codegen id : 6] Left keys [1]: [s_nationkey#3] -Right keys [1]: [n_nationkey#20] +Right keys [1]: [n_nationkey#16] Join condition: None (34) Project [codegen id : 6] Output [1]: [s_name#2] -Input [3]: [s_name#2, s_nationkey#3, n_nationkey#20] +Input [3]: [s_name#2, s_nationkey#3, n_nationkey#16] (35) HashAggregate [codegen id : 6] Input [1]: [s_name#2] Keys [1]: [s_name#2] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#23] -Results [2]: [s_name#2, count#24] +Aggregate Attributes [1]: [count#18] +Results [2]: [s_name#2, count#19] (36) Exchange -Input [2]: [s_name#2, count#24] -Arguments: hashpartitioning(s_name#2, 5), ENSURE_REQUIREMENTS, [id=#25] +Input [2]: [s_name#2, count#19] +Arguments: hashpartitioning(s_name#2, 5), ENSURE_REQUIREMENTS, [plan_id=6] (37) HashAggregate [codegen id : 7] -Input [2]: [s_name#2, count#24] +Input [2]: [s_name#2, count#19] Keys [1]: [s_name#2] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#26] -Results [2]: [s_name#2, count(1)#26 AS numwait#27] +Aggregate Attributes [1]: [count(1)#20] +Results [2]: [s_name#2, count(1)#20 AS numwait#21] (38) TakeOrderedAndProject -Input [2]: [s_name#2, numwait#27] -Arguments: 100, [numwait#27 DESC NULLS LAST, s_name#2 ASC NULLS FIRST], [s_name#2, numwait#27] +Input [2]: [s_name#2, numwait#21] +Arguments: 100, [numwait#21 DESC NULLS LAST, s_name#2 ASC NULLS FIRST], [s_name#2, numwait#21] diff --git a/sql/core/src/test/resources/tpch-plan-stability/q22/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q22/explain.txt index d9dc261771e0e..b9bc2eb0526dc 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q22/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q22/explain.txt @@ -39,7 +39,7 @@ Input [1]: [o_custkey#6] (6) BroadcastExchange Input [1]: [o_custkey#6] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=1] (7) BroadcastHashJoin [codegen id : 2] Left keys [1]: [c_custkey#1] @@ -47,34 +47,34 @@ Right keys [1]: [o_custkey#6] Join condition: None (8) Project [codegen id : 2] -Output [2]: [substring(c_phone#2, 1, 2) AS cntrycode#8, c_acctbal#3] +Output [2]: [substring(c_phone#2, 1, 2) AS cntrycode#7, c_acctbal#3] Input [3]: [c_custkey#1, c_phone#2, c_acctbal#3] (9) HashAggregate [codegen id : 2] -Input [2]: [cntrycode#8, c_acctbal#3] -Keys [1]: [cntrycode#8] +Input [2]: [cntrycode#7, c_acctbal#3] +Keys [1]: [cntrycode#7] Functions [2]: [partial_count(1), partial_sum(c_acctbal#3)] -Aggregate Attributes [3]: [count#9, sum#10, isEmpty#11] -Results [4]: [cntrycode#8, count#12, sum#13, isEmpty#14] +Aggregate Attributes [3]: [count#8, sum#9, isEmpty#10] +Results [4]: [cntrycode#7, count#11, sum#12, isEmpty#13] (10) Exchange -Input [4]: [cntrycode#8, count#12, sum#13, isEmpty#14] -Arguments: hashpartitioning(cntrycode#8, 5), ENSURE_REQUIREMENTS, [id=#15] +Input [4]: [cntrycode#7, count#11, sum#12, isEmpty#13] +Arguments: hashpartitioning(cntrycode#7, 5), ENSURE_REQUIREMENTS, [plan_id=2] (11) HashAggregate [codegen id : 3] -Input [4]: [cntrycode#8, count#12, sum#13, isEmpty#14] -Keys [1]: [cntrycode#8] +Input [4]: [cntrycode#7, count#11, sum#12, isEmpty#13] +Keys [1]: [cntrycode#7] Functions [2]: [count(1), sum(c_acctbal#3)] -Aggregate Attributes [2]: [count(1)#16, sum(c_acctbal#3)#17] -Results [3]: [cntrycode#8, count(1)#16 AS numcust#18, sum(c_acctbal#3)#17 AS totacctbal#19] +Aggregate Attributes [2]: [count(1)#14, sum(c_acctbal#3)#15] +Results [3]: [cntrycode#7, count(1)#14 AS numcust#16, sum(c_acctbal#3)#15 AS totacctbal#17] (12) Exchange -Input [3]: [cntrycode#8, numcust#18, totacctbal#19] -Arguments: rangepartitioning(cntrycode#8 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#20] +Input [3]: [cntrycode#7, numcust#16, totacctbal#17] +Arguments: rangepartitioning(cntrycode#7 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=3] (13) Sort [codegen id : 4] -Input [3]: [cntrycode#8, numcust#18, totacctbal#19] -Arguments: [cntrycode#8 ASC NULLS FIRST], true, 0 +Input [3]: [cntrycode#7, numcust#16, totacctbal#17] +Arguments: [cntrycode#7 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -89,39 +89,39 @@ Subquery:1 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery (14) Scan parquet default.customer -Output [2]: [c_phone#21, c_acctbal#22] +Output [2]: [c_phone#18, c_acctbal#19] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_acctbal), GreaterThan(c_acctbal,0)] ReadSchema: struct (15) ColumnarToRow [codegen id : 1] -Input [2]: [c_phone#21, c_acctbal#22] +Input [2]: [c_phone#18, c_acctbal#19] (16) Filter [codegen id : 1] -Input [2]: [c_phone#21, c_acctbal#22] -Condition : ((isnotnull(c_acctbal#22) AND (c_acctbal#22 > 0)) AND substring(c_phone#21, 1, 2) IN (13,31,23,29,30,18,17)) +Input [2]: [c_phone#18, c_acctbal#19] +Condition : ((isnotnull(c_acctbal#19) AND (c_acctbal#19 > 0)) AND substring(c_phone#18, 1, 2) IN (13,31,23,29,30,18,17)) (17) Project [codegen id : 1] -Output [1]: [c_acctbal#22] -Input [2]: [c_phone#21, c_acctbal#22] +Output [1]: [c_acctbal#19] +Input [2]: [c_phone#18, c_acctbal#19] (18) HashAggregate [codegen id : 1] -Input [1]: [c_acctbal#22] +Input [1]: [c_acctbal#19] Keys: [] -Functions [1]: [partial_avg(UnscaledValue(c_acctbal#22))] -Aggregate Attributes [2]: [sum#23, count#24] -Results [2]: [sum#25, count#26] +Functions [1]: [partial_avg(UnscaledValue(c_acctbal#19))] +Aggregate Attributes [2]: [sum#20, count#21] +Results [2]: [sum#22, count#23] (19) Exchange -Input [2]: [sum#25, count#26] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#27] +Input [2]: [sum#22, count#23] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4] (20) HashAggregate [codegen id : 2] -Input [2]: [sum#25, count#26] +Input [2]: [sum#22, count#23] Keys: [] -Functions [1]: [avg(UnscaledValue(c_acctbal#22))] -Aggregate Attributes [1]: [avg(UnscaledValue(c_acctbal#22))#28] -Results [1]: [cast((avg(UnscaledValue(c_acctbal#22))#28 / 1.0) as decimal(14,4)) AS avg(c_acctbal)#29] +Functions [1]: [avg(UnscaledValue(c_acctbal#19))] +Aggregate Attributes [1]: [avg(UnscaledValue(c_acctbal#19))#24] +Results [1]: [cast((avg(UnscaledValue(c_acctbal#19))#24 / 1.0) as decimal(14,4)) AS avg(c_acctbal)#25] diff --git a/sql/core/src/test/resources/tpch-plan-stability/q3/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q3/explain.txt index e0243ce3bbd52..49285d759b09a 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q3/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q3/explain.txt @@ -56,7 +56,7 @@ Condition : (((isnotnull(o_orderdate#5) AND (o_orderdate#5 < 1995-03-15)) AND is (8) BroadcastExchange Input [4]: [o_orderkey#3, o_custkey#4, o_orderdate#5, o_shippriority#6] -Arguments: HashedRelationBroadcastMode(List(input[1, bigint, false]),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(input[1, bigint, false]),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 3] Left keys [1]: [c_custkey#1] @@ -68,55 +68,55 @@ Output [3]: [o_orderkey#3, o_orderdate#5, o_shippriority#6] Input [5]: [c_custkey#1, o_orderkey#3, o_custkey#4, o_orderdate#5, o_shippriority#6] (11) Scan parquet default.lineitem -Output [4]: [l_orderkey#8, l_extendedprice#9, l_discount#10, l_shipdate#11] +Output [4]: [l_orderkey#7, l_extendedprice#8, l_discount#9, l_shipdate#10] Batched: true Location [not included in comparison]/{warehouse_dir}/lineitem] PushedFilters: [IsNotNull(l_shipdate), GreaterThan(l_shipdate,1995-03-15), IsNotNull(l_orderkey)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [l_orderkey#8, l_extendedprice#9, l_discount#10, l_shipdate#11] +Input [4]: [l_orderkey#7, l_extendedprice#8, l_discount#9, l_shipdate#10] (13) Filter [codegen id : 2] -Input [4]: [l_orderkey#8, l_extendedprice#9, l_discount#10, l_shipdate#11] -Condition : ((isnotnull(l_shipdate#11) AND (l_shipdate#11 > 1995-03-15)) AND isnotnull(l_orderkey#8)) +Input [4]: [l_orderkey#7, l_extendedprice#8, l_discount#9, l_shipdate#10] +Condition : ((isnotnull(l_shipdate#10) AND (l_shipdate#10 > 1995-03-15)) AND isnotnull(l_orderkey#7)) (14) Project [codegen id : 2] -Output [3]: [l_orderkey#8, l_extendedprice#9, l_discount#10] -Input [4]: [l_orderkey#8, l_extendedprice#9, l_discount#10, l_shipdate#11] +Output [3]: [l_orderkey#7, l_extendedprice#8, l_discount#9] +Input [4]: [l_orderkey#7, l_extendedprice#8, l_discount#9, l_shipdate#10] (15) BroadcastExchange -Input [3]: [l_orderkey#8, l_extendedprice#9, l_discount#10] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#12] +Input [3]: [l_orderkey#7, l_extendedprice#8, l_discount#9] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=2] (16) BroadcastHashJoin [codegen id : 3] Left keys [1]: [o_orderkey#3] -Right keys [1]: [l_orderkey#8] +Right keys [1]: [l_orderkey#7] Join condition: None (17) Project [codegen id : 3] -Output [5]: [o_orderdate#5, o_shippriority#6, l_orderkey#8, l_extendedprice#9, l_discount#10] -Input [6]: [o_orderkey#3, o_orderdate#5, o_shippriority#6, l_orderkey#8, l_extendedprice#9, l_discount#10] +Output [5]: [o_orderdate#5, o_shippriority#6, l_orderkey#7, l_extendedprice#8, l_discount#9] +Input [6]: [o_orderkey#3, o_orderdate#5, o_shippriority#6, l_orderkey#7, l_extendedprice#8, l_discount#9] (18) HashAggregate [codegen id : 3] -Input [5]: [o_orderdate#5, o_shippriority#6, l_orderkey#8, l_extendedprice#9, l_discount#10] -Keys [3]: [l_orderkey#8, o_orderdate#5, o_shippriority#6] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(l_extendedprice#9 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#10 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] -Aggregate Attributes [2]: [sum#13, isEmpty#14] -Results [5]: [l_orderkey#8, o_orderdate#5, o_shippriority#6, sum#15, isEmpty#16] +Input [5]: [o_orderdate#5, o_shippriority#6, l_orderkey#7, l_extendedprice#8, l_discount#9] +Keys [3]: [l_orderkey#7, o_orderdate#5, o_shippriority#6] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(l_extendedprice#8 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#9 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] +Aggregate Attributes [2]: [sum#11, isEmpty#12] +Results [5]: [l_orderkey#7, o_orderdate#5, o_shippriority#6, sum#13, isEmpty#14] (19) Exchange -Input [5]: [l_orderkey#8, o_orderdate#5, o_shippriority#6, sum#15, isEmpty#16] -Arguments: hashpartitioning(l_orderkey#8, o_orderdate#5, o_shippriority#6, 5), ENSURE_REQUIREMENTS, [id=#17] +Input [5]: [l_orderkey#7, o_orderdate#5, o_shippriority#6, sum#13, isEmpty#14] +Arguments: hashpartitioning(l_orderkey#7, o_orderdate#5, o_shippriority#6, 5), ENSURE_REQUIREMENTS, [plan_id=3] (20) HashAggregate [codegen id : 4] -Input [5]: [l_orderkey#8, o_orderdate#5, o_shippriority#6, sum#15, isEmpty#16] -Keys [3]: [l_orderkey#8, o_orderdate#5, o_shippriority#6] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#9 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#10 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#9 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#10 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#18] -Results [4]: [l_orderkey#8, sum(CheckOverflow((promote_precision(cast(l_extendedprice#9 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#10 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#18 AS revenue#19, o_orderdate#5, o_shippriority#6] +Input [5]: [l_orderkey#7, o_orderdate#5, o_shippriority#6, sum#13, isEmpty#14] +Keys [3]: [l_orderkey#7, o_orderdate#5, o_shippriority#6] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#8 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#9 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#8 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#9 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#15] +Results [4]: [l_orderkey#7, sum(CheckOverflow((promote_precision(cast(l_extendedprice#8 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#9 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#15 AS revenue#16, o_orderdate#5, o_shippriority#6] (21) TakeOrderedAndProject -Input [4]: [l_orderkey#8, revenue#19, o_orderdate#5, o_shippriority#6] -Arguments: 10, [revenue#19 DESC NULLS LAST, o_orderdate#5 ASC NULLS FIRST], [l_orderkey#8, revenue#19, o_orderdate#5, o_shippriority#6] +Input [4]: [l_orderkey#7, revenue#16, o_orderdate#5, o_shippriority#6] +Arguments: 10, [revenue#16 DESC NULLS LAST, o_orderdate#5 ASC NULLS FIRST], [l_orderkey#7, revenue#16, o_orderdate#5, o_shippriority#6] diff --git a/sql/core/src/test/resources/tpch-plan-stability/q4/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q4/explain.txt index 064d659e1d4ed..b12a2d7593671 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q4/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q4/explain.txt @@ -55,7 +55,7 @@ Input [3]: [l_orderkey#4, l_commitdate#5, l_receiptdate#6] (9) BroadcastExchange Input [1]: [l_orderkey#4] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#7] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=1] (10) BroadcastHashJoin [codegen id : 2] Left keys [1]: [o_orderkey#1] @@ -70,25 +70,25 @@ Input [2]: [o_orderkey#1, o_orderpriority#3] Input [1]: [o_orderpriority#3] Keys [1]: [o_orderpriority#3] Functions [1]: [partial_count(1)] -Aggregate Attributes [1]: [count#8] -Results [2]: [o_orderpriority#3, count#9] +Aggregate Attributes [1]: [count#7] +Results [2]: [o_orderpriority#3, count#8] (13) Exchange -Input [2]: [o_orderpriority#3, count#9] -Arguments: hashpartitioning(o_orderpriority#3, 5), ENSURE_REQUIREMENTS, [id=#10] +Input [2]: [o_orderpriority#3, count#8] +Arguments: hashpartitioning(o_orderpriority#3, 5), ENSURE_REQUIREMENTS, [plan_id=2] (14) HashAggregate [codegen id : 3] -Input [2]: [o_orderpriority#3, count#9] +Input [2]: [o_orderpriority#3, count#8] Keys [1]: [o_orderpriority#3] Functions [1]: [count(1)] -Aggregate Attributes [1]: [count(1)#11] -Results [2]: [o_orderpriority#3, count(1)#11 AS order_count#12] +Aggregate Attributes [1]: [count(1)#9] +Results [2]: [o_orderpriority#3, count(1)#9 AS order_count#10] (15) Exchange -Input [2]: [o_orderpriority#3, order_count#12] -Arguments: rangepartitioning(o_orderpriority#3 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#13] +Input [2]: [o_orderpriority#3, order_count#10] +Arguments: rangepartitioning(o_orderpriority#3 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=3] (16) Sort [codegen id : 4] -Input [2]: [o_orderpriority#3, order_count#12] +Input [2]: [o_orderpriority#3, order_count#10] Arguments: [o_orderpriority#3 ASC NULLS FIRST], true, 0 diff --git a/sql/core/src/test/resources/tpch-plan-stability/q5/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q5/explain.txt index c3dbd88338317..9ba43b07cde9f 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q5/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q5/explain.txt @@ -75,7 +75,7 @@ Input [3]: [o_orderkey#3, o_custkey#4, o_orderdate#5] (8) BroadcastExchange Input [2]: [o_orderkey#3, o_custkey#4] -Arguments: HashedRelationBroadcastMode(List(input[1, bigint, true]),false), [id=#6] +Arguments: HashedRelationBroadcastMode(List(input[1, bigint, true]),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 6] Left keys [1]: [c_custkey#1] @@ -87,140 +87,140 @@ Output [2]: [c_nationkey#2, o_orderkey#3] Input [4]: [c_custkey#1, c_nationkey#2, o_orderkey#3, o_custkey#4] (11) Scan parquet default.lineitem -Output [4]: [l_orderkey#7, l_suppkey#8, l_extendedprice#9, l_discount#10] +Output [4]: [l_orderkey#6, l_suppkey#7, l_extendedprice#8, l_discount#9] Batched: true Location [not included in comparison]/{warehouse_dir}/lineitem] PushedFilters: [IsNotNull(l_orderkey), IsNotNull(l_suppkey)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [4]: [l_orderkey#7, l_suppkey#8, l_extendedprice#9, l_discount#10] +Input [4]: [l_orderkey#6, l_suppkey#7, l_extendedprice#8, l_discount#9] (13) Filter [codegen id : 2] -Input [4]: [l_orderkey#7, l_suppkey#8, l_extendedprice#9, l_discount#10] -Condition : (isnotnull(l_orderkey#7) AND isnotnull(l_suppkey#8)) +Input [4]: [l_orderkey#6, l_suppkey#7, l_extendedprice#8, l_discount#9] +Condition : (isnotnull(l_orderkey#6) AND isnotnull(l_suppkey#7)) (14) BroadcastExchange -Input [4]: [l_orderkey#7, l_suppkey#8, l_extendedprice#9, l_discount#10] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#11] +Input [4]: [l_orderkey#6, l_suppkey#7, l_extendedprice#8, l_discount#9] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 6] Left keys [1]: [o_orderkey#3] -Right keys [1]: [l_orderkey#7] +Right keys [1]: [l_orderkey#6] Join condition: None (16) Project [codegen id : 6] -Output [4]: [c_nationkey#2, l_suppkey#8, l_extendedprice#9, l_discount#10] -Input [6]: [c_nationkey#2, o_orderkey#3, l_orderkey#7, l_suppkey#8, l_extendedprice#9, l_discount#10] +Output [4]: [c_nationkey#2, l_suppkey#7, l_extendedprice#8, l_discount#9] +Input [6]: [c_nationkey#2, o_orderkey#3, l_orderkey#6, l_suppkey#7, l_extendedprice#8, l_discount#9] (17) Scan parquet default.supplier -Output [2]: [s_suppkey#12, s_nationkey#13] +Output [2]: [s_suppkey#10, s_nationkey#11] Batched: true Location [not included in comparison]/{warehouse_dir}/supplier] PushedFilters: [IsNotNull(s_suppkey), IsNotNull(s_nationkey)] ReadSchema: struct (18) ColumnarToRow [codegen id : 3] -Input [2]: [s_suppkey#12, s_nationkey#13] +Input [2]: [s_suppkey#10, s_nationkey#11] (19) Filter [codegen id : 3] -Input [2]: [s_suppkey#12, s_nationkey#13] -Condition : (isnotnull(s_suppkey#12) AND isnotnull(s_nationkey#13)) +Input [2]: [s_suppkey#10, s_nationkey#11] +Condition : (isnotnull(s_suppkey#10) AND isnotnull(s_nationkey#11)) (20) BroadcastExchange -Input [2]: [s_suppkey#12, s_nationkey#13] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false], input[1, bigint, false]),false), [id=#14] +Input [2]: [s_suppkey#10, s_nationkey#11] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false], input[1, bigint, false]),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 6] -Left keys [2]: [l_suppkey#8, c_nationkey#2] -Right keys [2]: [s_suppkey#12, s_nationkey#13] +Left keys [2]: [l_suppkey#7, c_nationkey#2] +Right keys [2]: [s_suppkey#10, s_nationkey#11] Join condition: None (22) Project [codegen id : 6] -Output [3]: [l_extendedprice#9, l_discount#10, s_nationkey#13] -Input [6]: [c_nationkey#2, l_suppkey#8, l_extendedprice#9, l_discount#10, s_suppkey#12, s_nationkey#13] +Output [3]: [l_extendedprice#8, l_discount#9, s_nationkey#11] +Input [6]: [c_nationkey#2, l_suppkey#7, l_extendedprice#8, l_discount#9, s_suppkey#10, s_nationkey#11] (23) Scan parquet default.nation -Output [3]: [n_nationkey#15, n_name#16, n_regionkey#17] +Output [3]: [n_nationkey#12, n_name#13, n_regionkey#14] Batched: true Location [not included in comparison]/{warehouse_dir}/nation] PushedFilters: [IsNotNull(n_nationkey), IsNotNull(n_regionkey)] ReadSchema: struct (24) ColumnarToRow [codegen id : 4] -Input [3]: [n_nationkey#15, n_name#16, n_regionkey#17] +Input [3]: [n_nationkey#12, n_name#13, n_regionkey#14] (25) Filter [codegen id : 4] -Input [3]: [n_nationkey#15, n_name#16, n_regionkey#17] -Condition : (isnotnull(n_nationkey#15) AND isnotnull(n_regionkey#17)) +Input [3]: [n_nationkey#12, n_name#13, n_regionkey#14] +Condition : (isnotnull(n_nationkey#12) AND isnotnull(n_regionkey#14)) (26) BroadcastExchange -Input [3]: [n_nationkey#15, n_name#16, n_regionkey#17] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#18] +Input [3]: [n_nationkey#12, n_name#13, n_regionkey#14] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=4] (27) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [s_nationkey#13] -Right keys [1]: [n_nationkey#15] +Left keys [1]: [s_nationkey#11] +Right keys [1]: [n_nationkey#12] Join condition: None (28) Project [codegen id : 6] -Output [4]: [l_extendedprice#9, l_discount#10, n_name#16, n_regionkey#17] -Input [6]: [l_extendedprice#9, l_discount#10, s_nationkey#13, n_nationkey#15, n_name#16, n_regionkey#17] +Output [4]: [l_extendedprice#8, l_discount#9, n_name#13, n_regionkey#14] +Input [6]: [l_extendedprice#8, l_discount#9, s_nationkey#11, n_nationkey#12, n_name#13, n_regionkey#14] (29) Scan parquet default.region -Output [2]: [r_regionkey#19, r_name#20] +Output [2]: [r_regionkey#15, r_name#16] Batched: true Location [not included in comparison]/{warehouse_dir}/region] PushedFilters: [IsNotNull(r_name), EqualTo(r_name,ASIA), IsNotNull(r_regionkey)] ReadSchema: struct (30) ColumnarToRow [codegen id : 5] -Input [2]: [r_regionkey#19, r_name#20] +Input [2]: [r_regionkey#15, r_name#16] (31) Filter [codegen id : 5] -Input [2]: [r_regionkey#19, r_name#20] -Condition : ((isnotnull(r_name#20) AND (r_name#20 = ASIA)) AND isnotnull(r_regionkey#19)) +Input [2]: [r_regionkey#15, r_name#16] +Condition : ((isnotnull(r_name#16) AND (r_name#16 = ASIA)) AND isnotnull(r_regionkey#15)) (32) Project [codegen id : 5] -Output [1]: [r_regionkey#19] -Input [2]: [r_regionkey#19, r_name#20] +Output [1]: [r_regionkey#15] +Input [2]: [r_regionkey#15, r_name#16] (33) BroadcastExchange -Input [1]: [r_regionkey#19] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#21] +Input [1]: [r_regionkey#15] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=5] (34) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [n_regionkey#17] -Right keys [1]: [r_regionkey#19] +Left keys [1]: [n_regionkey#14] +Right keys [1]: [r_regionkey#15] Join condition: None (35) Project [codegen id : 6] -Output [3]: [l_extendedprice#9, l_discount#10, n_name#16] -Input [5]: [l_extendedprice#9, l_discount#10, n_name#16, n_regionkey#17, r_regionkey#19] +Output [3]: [l_extendedprice#8, l_discount#9, n_name#13] +Input [5]: [l_extendedprice#8, l_discount#9, n_name#13, n_regionkey#14, r_regionkey#15] (36) HashAggregate [codegen id : 6] -Input [3]: [l_extendedprice#9, l_discount#10, n_name#16] -Keys [1]: [n_name#16] -Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(l_extendedprice#9 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#10 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] -Aggregate Attributes [2]: [sum#22, isEmpty#23] -Results [3]: [n_name#16, sum#24, isEmpty#25] +Input [3]: [l_extendedprice#8, l_discount#9, n_name#13] +Keys [1]: [n_name#13] +Functions [1]: [partial_sum(CheckOverflow((promote_precision(cast(l_extendedprice#8 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#9 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] +Aggregate Attributes [2]: [sum#17, isEmpty#18] +Results [3]: [n_name#13, sum#19, isEmpty#20] (37) Exchange -Input [3]: [n_name#16, sum#24, isEmpty#25] -Arguments: hashpartitioning(n_name#16, 5), ENSURE_REQUIREMENTS, [id=#26] +Input [3]: [n_name#13, sum#19, isEmpty#20] +Arguments: hashpartitioning(n_name#13, 5), ENSURE_REQUIREMENTS, [plan_id=6] (38) HashAggregate [codegen id : 7] -Input [3]: [n_name#16, sum#24, isEmpty#25] -Keys [1]: [n_name#16] -Functions [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#9 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#10 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#9 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#10 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#27] -Results [2]: [n_name#16, sum(CheckOverflow((promote_precision(cast(l_extendedprice#9 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#10 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#27 AS revenue#28] +Input [3]: [n_name#13, sum#19, isEmpty#20] +Keys [1]: [n_name#13] +Functions [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#8 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#9 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(cast(l_extendedprice#8 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#9 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#21] +Results [2]: [n_name#13, sum(CheckOverflow((promote_precision(cast(l_extendedprice#8 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#9 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)))#21 AS revenue#22] (39) Exchange -Input [2]: [n_name#16, revenue#28] -Arguments: rangepartitioning(revenue#28 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#29] +Input [2]: [n_name#13, revenue#22] +Arguments: rangepartitioning(revenue#22 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [plan_id=7] (40) Sort [codegen id : 8] -Input [2]: [n_name#16, revenue#28] -Arguments: [revenue#28 DESC NULLS LAST], true, 0 +Input [2]: [n_name#13, revenue#22] +Arguments: [revenue#22 DESC NULLS LAST], true, 0 diff --git a/sql/core/src/test/resources/tpch-plan-stability/q6/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q6/explain.txt index a092574d73c57..71aee8542d0bc 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q6/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q6/explain.txt @@ -18,12 +18,12 @@ Results [2]: [sum#5, isEmpty#6] (3) Exchange Input [2]: [sum#5, isEmpty#6] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#7] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=1] (4) HashAggregate [codegen id : 2] Input [2]: [sum#5, isEmpty#6] Keys: [] Functions [1]: [sum(CheckOverflow((promote_precision(l_extendedprice#1) * promote_precision(l_discount#2)), DecimalType(21,0)))] -Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(l_extendedprice#1) * promote_precision(l_discount#2)), DecimalType(21,0)))#8] -Results [1]: [sum(CheckOverflow((promote_precision(l_extendedprice#1) * promote_precision(l_discount#2)), DecimalType(21,0)))#8 AS revenue#9] +Aggregate Attributes [1]: [sum(CheckOverflow((promote_precision(l_extendedprice#1) * promote_precision(l_discount#2)), DecimalType(21,0)))#7] +Results [1]: [sum(CheckOverflow((promote_precision(l_extendedprice#1) * promote_precision(l_discount#2)), DecimalType(21,0)))#7 AS revenue#8] diff --git a/sql/core/src/test/resources/tpch-plan-stability/q7/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q7/explain.txt index 9994d01a28e5c..ec99e035b4bac 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q7/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q7/explain.txt @@ -66,7 +66,7 @@ Condition : ((((isnotnull(l_shipdate#7) AND (l_shipdate#7 >= 1995-01-01)) AND (l (7) BroadcastExchange Input [5]: [l_orderkey#3, l_suppkey#4, l_extendedprice#5, l_discount#6, l_shipdate#7] -Arguments: HashedRelationBroadcastMode(List(input[1, bigint, false]),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(input[1, bigint, false]),false), [plan_id=1] (8) BroadcastHashJoin [codegen id : 6] Left keys [1]: [s_suppkey#1] @@ -78,121 +78,121 @@ Output [5]: [s_nationkey#2, l_orderkey#3, l_extendedprice#5, l_discount#6, l_shi Input [7]: [s_suppkey#1, s_nationkey#2, l_orderkey#3, l_suppkey#4, l_extendedprice#5, l_discount#6, l_shipdate#7] (10) Scan parquet default.orders -Output [2]: [o_orderkey#9, o_custkey#10] +Output [2]: [o_orderkey#8, o_custkey#9] Batched: true Location [not included in comparison]/{warehouse_dir}/orders] PushedFilters: [IsNotNull(o_orderkey), IsNotNull(o_custkey)] ReadSchema: struct (11) ColumnarToRow [codegen id : 2] -Input [2]: [o_orderkey#9, o_custkey#10] +Input [2]: [o_orderkey#8, o_custkey#9] (12) Filter [codegen id : 2] -Input [2]: [o_orderkey#9, o_custkey#10] -Condition : (isnotnull(o_orderkey#9) AND isnotnull(o_custkey#10)) +Input [2]: [o_orderkey#8, o_custkey#9] +Condition : (isnotnull(o_orderkey#8) AND isnotnull(o_custkey#9)) (13) BroadcastExchange -Input [2]: [o_orderkey#9, o_custkey#10] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#11] +Input [2]: [o_orderkey#8, o_custkey#9] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=2] (14) BroadcastHashJoin [codegen id : 6] Left keys [1]: [l_orderkey#3] -Right keys [1]: [o_orderkey#9] +Right keys [1]: [o_orderkey#8] Join condition: None (15) Project [codegen id : 6] -Output [5]: [s_nationkey#2, l_extendedprice#5, l_discount#6, l_shipdate#7, o_custkey#10] -Input [7]: [s_nationkey#2, l_orderkey#3, l_extendedprice#5, l_discount#6, l_shipdate#7, o_orderkey#9, o_custkey#10] +Output [5]: [s_nationkey#2, l_extendedprice#5, l_discount#6, l_shipdate#7, o_custkey#9] +Input [7]: [s_nationkey#2, l_orderkey#3, l_extendedprice#5, l_discount#6, l_shipdate#7, o_orderkey#8, o_custkey#9] (16) Scan parquet default.customer -Output [2]: [c_custkey#12, c_nationkey#13] +Output [2]: [c_custkey#10, c_nationkey#11] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_custkey), IsNotNull(c_nationkey)] ReadSchema: struct (17) ColumnarToRow [codegen id : 3] -Input [2]: [c_custkey#12, c_nationkey#13] +Input [2]: [c_custkey#10, c_nationkey#11] (18) Filter [codegen id : 3] -Input [2]: [c_custkey#12, c_nationkey#13] -Condition : (isnotnull(c_custkey#12) AND isnotnull(c_nationkey#13)) +Input [2]: [c_custkey#10, c_nationkey#11] +Condition : (isnotnull(c_custkey#10) AND isnotnull(c_nationkey#11)) (19) BroadcastExchange -Input [2]: [c_custkey#12, c_nationkey#13] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#14] +Input [2]: [c_custkey#10, c_nationkey#11] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=3] (20) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [o_custkey#10] -Right keys [1]: [c_custkey#12] +Left keys [1]: [o_custkey#9] +Right keys [1]: [c_custkey#10] Join condition: None (21) Project [codegen id : 6] -Output [5]: [s_nationkey#2, l_extendedprice#5, l_discount#6, l_shipdate#7, c_nationkey#13] -Input [7]: [s_nationkey#2, l_extendedprice#5, l_discount#6, l_shipdate#7, o_custkey#10, c_custkey#12, c_nationkey#13] +Output [5]: [s_nationkey#2, l_extendedprice#5, l_discount#6, l_shipdate#7, c_nationkey#11] +Input [7]: [s_nationkey#2, l_extendedprice#5, l_discount#6, l_shipdate#7, o_custkey#9, c_custkey#10, c_nationkey#11] (22) Scan parquet default.nation -Output [2]: [n_nationkey#15, n_name#16] +Output [2]: [n_nationkey#12, n_name#13] Batched: true Location [not included in comparison]/{warehouse_dir}/nation] PushedFilters: [IsNotNull(n_nationkey), Or(EqualTo(n_name,FRANCE),EqualTo(n_name,GERMANY))] ReadSchema: struct (23) ColumnarToRow [codegen id : 4] -Input [2]: [n_nationkey#15, n_name#16] +Input [2]: [n_nationkey#12, n_name#13] (24) Filter [codegen id : 4] -Input [2]: [n_nationkey#15, n_name#16] -Condition : (isnotnull(n_nationkey#15) AND ((n_name#16 = FRANCE) OR (n_name#16 = GERMANY))) +Input [2]: [n_nationkey#12, n_name#13] +Condition : (isnotnull(n_nationkey#12) AND ((n_name#13 = FRANCE) OR (n_name#13 = GERMANY))) (25) BroadcastExchange -Input [2]: [n_nationkey#15, n_name#16] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#17] +Input [2]: [n_nationkey#12, n_name#13] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=4] (26) BroadcastHashJoin [codegen id : 6] Left keys [1]: [s_nationkey#2] -Right keys [1]: [n_nationkey#15] +Right keys [1]: [n_nationkey#12] Join condition: None (27) Project [codegen id : 6] -Output [5]: [l_extendedprice#5, l_discount#6, l_shipdate#7, c_nationkey#13, n_name#16] -Input [7]: [s_nationkey#2, l_extendedprice#5, l_discount#6, l_shipdate#7, c_nationkey#13, n_nationkey#15, n_name#16] +Output [5]: [l_extendedprice#5, l_discount#6, l_shipdate#7, c_nationkey#11, n_name#13] +Input [7]: [s_nationkey#2, l_extendedprice#5, l_discount#6, l_shipdate#7, c_nationkey#11, n_nationkey#12, n_name#13] (28) ReusedExchange [Reuses operator id: 25] -Output [2]: [n_nationkey#18, n_name#19] +Output [2]: [n_nationkey#14, n_name#15] (29) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [c_nationkey#13] -Right keys [1]: [n_nationkey#18] -Join condition: (((n_name#16 = FRANCE) AND (n_name#19 = GERMANY)) OR ((n_name#16 = GERMANY) AND (n_name#19 = FRANCE))) +Left keys [1]: [c_nationkey#11] +Right keys [1]: [n_nationkey#14] +Join condition: (((n_name#13 = FRANCE) AND (n_name#15 = GERMANY)) OR ((n_name#13 = GERMANY) AND (n_name#15 = FRANCE))) (30) Project [codegen id : 6] -Output [4]: [n_name#16 AS supp_nation#20, n_name#19 AS cust_nation#21, year(l_shipdate#7) AS l_year#22, CheckOverflow((promote_precision(cast(l_extendedprice#5 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#6 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)) AS volume#23] -Input [7]: [l_extendedprice#5, l_discount#6, l_shipdate#7, c_nationkey#13, n_name#16, n_nationkey#18, n_name#19] +Output [4]: [n_name#13 AS supp_nation#16, n_name#15 AS cust_nation#17, year(l_shipdate#7) AS l_year#18, CheckOverflow((promote_precision(cast(l_extendedprice#5 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#6 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)) AS volume#19] +Input [7]: [l_extendedprice#5, l_discount#6, l_shipdate#7, c_nationkey#11, n_name#13, n_nationkey#14, n_name#15] (31) HashAggregate [codegen id : 6] -Input [4]: [supp_nation#20, cust_nation#21, l_year#22, volume#23] -Keys [3]: [supp_nation#20, cust_nation#21, l_year#22] -Functions [1]: [partial_sum(volume#23)] -Aggregate Attributes [2]: [sum#24, isEmpty#25] -Results [5]: [supp_nation#20, cust_nation#21, l_year#22, sum#26, isEmpty#27] +Input [4]: [supp_nation#16, cust_nation#17, l_year#18, volume#19] +Keys [3]: [supp_nation#16, cust_nation#17, l_year#18] +Functions [1]: [partial_sum(volume#19)] +Aggregate Attributes [2]: [sum#20, isEmpty#21] +Results [5]: [supp_nation#16, cust_nation#17, l_year#18, sum#22, isEmpty#23] (32) Exchange -Input [5]: [supp_nation#20, cust_nation#21, l_year#22, sum#26, isEmpty#27] -Arguments: hashpartitioning(supp_nation#20, cust_nation#21, l_year#22, 5), ENSURE_REQUIREMENTS, [id=#28] +Input [5]: [supp_nation#16, cust_nation#17, l_year#18, sum#22, isEmpty#23] +Arguments: hashpartitioning(supp_nation#16, cust_nation#17, l_year#18, 5), ENSURE_REQUIREMENTS, [plan_id=5] (33) HashAggregate [codegen id : 7] -Input [5]: [supp_nation#20, cust_nation#21, l_year#22, sum#26, isEmpty#27] -Keys [3]: [supp_nation#20, cust_nation#21, l_year#22] -Functions [1]: [sum(volume#23)] -Aggregate Attributes [1]: [sum(volume#23)#29] -Results [4]: [supp_nation#20, cust_nation#21, l_year#22, sum(volume#23)#29 AS revenue#30] +Input [5]: [supp_nation#16, cust_nation#17, l_year#18, sum#22, isEmpty#23] +Keys [3]: [supp_nation#16, cust_nation#17, l_year#18] +Functions [1]: [sum(volume#19)] +Aggregate Attributes [1]: [sum(volume#19)#24] +Results [4]: [supp_nation#16, cust_nation#17, l_year#18, sum(volume#19)#24 AS revenue#25] (34) Exchange -Input [4]: [supp_nation#20, cust_nation#21, l_year#22, revenue#30] -Arguments: rangepartitioning(supp_nation#20 ASC NULLS FIRST, cust_nation#21 ASC NULLS FIRST, l_year#22 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#31] +Input [4]: [supp_nation#16, cust_nation#17, l_year#18, revenue#25] +Arguments: rangepartitioning(supp_nation#16 ASC NULLS FIRST, cust_nation#17 ASC NULLS FIRST, l_year#18 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=6] (35) Sort [codegen id : 8] -Input [4]: [supp_nation#20, cust_nation#21, l_year#22, revenue#30] -Arguments: [supp_nation#20 ASC NULLS FIRST, cust_nation#21 ASC NULLS FIRST, l_year#22 ASC NULLS FIRST], true, 0 +Input [4]: [supp_nation#16, cust_nation#17, l_year#18, revenue#25] +Arguments: [supp_nation#16 ASC NULLS FIRST, cust_nation#17 ASC NULLS FIRST, l_year#18 ASC NULLS FIRST], true, 0 diff --git a/sql/core/src/test/resources/tpch-plan-stability/q8/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q8/explain.txt index 4eb4f811035d8..651269127a090 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q8/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q8/explain.txt @@ -87,7 +87,7 @@ Condition : ((isnotnull(l_partkey#4) AND isnotnull(l_suppkey#5)) AND isnotnull(l (8) BroadcastExchange Input [5]: [l_orderkey#3, l_partkey#4, l_suppkey#5, l_extendedprice#6, l_discount#7] -Arguments: HashedRelationBroadcastMode(List(input[1, bigint, false]),false), [id=#8] +Arguments: HashedRelationBroadcastMode(List(input[1, bigint, false]),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 8] Left keys [1]: [p_partkey#1] @@ -99,194 +99,194 @@ Output [4]: [l_orderkey#3, l_suppkey#5, l_extendedprice#6, l_discount#7] Input [6]: [p_partkey#1, l_orderkey#3, l_partkey#4, l_suppkey#5, l_extendedprice#6, l_discount#7] (11) Scan parquet default.supplier -Output [2]: [s_suppkey#9, s_nationkey#10] +Output [2]: [s_suppkey#8, s_nationkey#9] Batched: true Location [not included in comparison]/{warehouse_dir}/supplier] PushedFilters: [IsNotNull(s_suppkey), IsNotNull(s_nationkey)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [2]: [s_suppkey#9, s_nationkey#10] +Input [2]: [s_suppkey#8, s_nationkey#9] (13) Filter [codegen id : 2] -Input [2]: [s_suppkey#9, s_nationkey#10] -Condition : (isnotnull(s_suppkey#9) AND isnotnull(s_nationkey#10)) +Input [2]: [s_suppkey#8, s_nationkey#9] +Condition : (isnotnull(s_suppkey#8) AND isnotnull(s_nationkey#9)) (14) BroadcastExchange -Input [2]: [s_suppkey#9, s_nationkey#10] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#11] +Input [2]: [s_suppkey#8, s_nationkey#9] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 8] Left keys [1]: [l_suppkey#5] -Right keys [1]: [s_suppkey#9] +Right keys [1]: [s_suppkey#8] Join condition: None (16) Project [codegen id : 8] -Output [4]: [l_orderkey#3, l_extendedprice#6, l_discount#7, s_nationkey#10] -Input [6]: [l_orderkey#3, l_suppkey#5, l_extendedprice#6, l_discount#7, s_suppkey#9, s_nationkey#10] +Output [4]: [l_orderkey#3, l_extendedprice#6, l_discount#7, s_nationkey#9] +Input [6]: [l_orderkey#3, l_suppkey#5, l_extendedprice#6, l_discount#7, s_suppkey#8, s_nationkey#9] (17) Scan parquet default.orders -Output [3]: [o_orderkey#12, o_custkey#13, o_orderdate#14] +Output [3]: [o_orderkey#10, o_custkey#11, o_orderdate#12] Batched: true Location [not included in comparison]/{warehouse_dir}/orders] PushedFilters: [IsNotNull(o_orderdate), GreaterThanOrEqual(o_orderdate,1995-01-01), LessThanOrEqual(o_orderdate,1996-12-31), IsNotNull(o_orderkey), IsNotNull(o_custkey)] ReadSchema: struct (18) ColumnarToRow [codegen id : 3] -Input [3]: [o_orderkey#12, o_custkey#13, o_orderdate#14] +Input [3]: [o_orderkey#10, o_custkey#11, o_orderdate#12] (19) Filter [codegen id : 3] -Input [3]: [o_orderkey#12, o_custkey#13, o_orderdate#14] -Condition : ((((isnotnull(o_orderdate#14) AND (o_orderdate#14 >= 1995-01-01)) AND (o_orderdate#14 <= 1996-12-31)) AND isnotnull(o_orderkey#12)) AND isnotnull(o_custkey#13)) +Input [3]: [o_orderkey#10, o_custkey#11, o_orderdate#12] +Condition : ((((isnotnull(o_orderdate#12) AND (o_orderdate#12 >= 1995-01-01)) AND (o_orderdate#12 <= 1996-12-31)) AND isnotnull(o_orderkey#10)) AND isnotnull(o_custkey#11)) (20) BroadcastExchange -Input [3]: [o_orderkey#12, o_custkey#13, o_orderdate#14] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#15] +Input [3]: [o_orderkey#10, o_custkey#11, o_orderdate#12] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 8] Left keys [1]: [l_orderkey#3] -Right keys [1]: [o_orderkey#12] +Right keys [1]: [o_orderkey#10] Join condition: None (22) Project [codegen id : 8] -Output [5]: [l_extendedprice#6, l_discount#7, s_nationkey#10, o_custkey#13, o_orderdate#14] -Input [7]: [l_orderkey#3, l_extendedprice#6, l_discount#7, s_nationkey#10, o_orderkey#12, o_custkey#13, o_orderdate#14] +Output [5]: [l_extendedprice#6, l_discount#7, s_nationkey#9, o_custkey#11, o_orderdate#12] +Input [7]: [l_orderkey#3, l_extendedprice#6, l_discount#7, s_nationkey#9, o_orderkey#10, o_custkey#11, o_orderdate#12] (23) Scan parquet default.customer -Output [2]: [c_custkey#16, c_nationkey#17] +Output [2]: [c_custkey#13, c_nationkey#14] Batched: true Location [not included in comparison]/{warehouse_dir}/customer] PushedFilters: [IsNotNull(c_custkey), IsNotNull(c_nationkey)] ReadSchema: struct (24) ColumnarToRow [codegen id : 4] -Input [2]: [c_custkey#16, c_nationkey#17] +Input [2]: [c_custkey#13, c_nationkey#14] (25) Filter [codegen id : 4] -Input [2]: [c_custkey#16, c_nationkey#17] -Condition : (isnotnull(c_custkey#16) AND isnotnull(c_nationkey#17)) +Input [2]: [c_custkey#13, c_nationkey#14] +Condition : (isnotnull(c_custkey#13) AND isnotnull(c_nationkey#14)) (26) BroadcastExchange -Input [2]: [c_custkey#16, c_nationkey#17] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#18] +Input [2]: [c_custkey#13, c_nationkey#14] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=4] (27) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [o_custkey#13] -Right keys [1]: [c_custkey#16] +Left keys [1]: [o_custkey#11] +Right keys [1]: [c_custkey#13] Join condition: None (28) Project [codegen id : 8] -Output [5]: [l_extendedprice#6, l_discount#7, s_nationkey#10, o_orderdate#14, c_nationkey#17] -Input [7]: [l_extendedprice#6, l_discount#7, s_nationkey#10, o_custkey#13, o_orderdate#14, c_custkey#16, c_nationkey#17] +Output [5]: [l_extendedprice#6, l_discount#7, s_nationkey#9, o_orderdate#12, c_nationkey#14] +Input [7]: [l_extendedprice#6, l_discount#7, s_nationkey#9, o_custkey#11, o_orderdate#12, c_custkey#13, c_nationkey#14] (29) Scan parquet default.nation -Output [2]: [n_nationkey#19, n_regionkey#20] +Output [2]: [n_nationkey#15, n_regionkey#16] Batched: true Location [not included in comparison]/{warehouse_dir}/nation] PushedFilters: [IsNotNull(n_nationkey), IsNotNull(n_regionkey)] ReadSchema: struct (30) ColumnarToRow [codegen id : 5] -Input [2]: [n_nationkey#19, n_regionkey#20] +Input [2]: [n_nationkey#15, n_regionkey#16] (31) Filter [codegen id : 5] -Input [2]: [n_nationkey#19, n_regionkey#20] -Condition : (isnotnull(n_nationkey#19) AND isnotnull(n_regionkey#20)) +Input [2]: [n_nationkey#15, n_regionkey#16] +Condition : (isnotnull(n_nationkey#15) AND isnotnull(n_regionkey#16)) (32) BroadcastExchange -Input [2]: [n_nationkey#19, n_regionkey#20] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#21] +Input [2]: [n_nationkey#15, n_regionkey#16] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=5] (33) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [c_nationkey#17] -Right keys [1]: [n_nationkey#19] +Left keys [1]: [c_nationkey#14] +Right keys [1]: [n_nationkey#15] Join condition: None (34) Project [codegen id : 8] -Output [5]: [l_extendedprice#6, l_discount#7, s_nationkey#10, o_orderdate#14, n_regionkey#20] -Input [7]: [l_extendedprice#6, l_discount#7, s_nationkey#10, o_orderdate#14, c_nationkey#17, n_nationkey#19, n_regionkey#20] +Output [5]: [l_extendedprice#6, l_discount#7, s_nationkey#9, o_orderdate#12, n_regionkey#16] +Input [7]: [l_extendedprice#6, l_discount#7, s_nationkey#9, o_orderdate#12, c_nationkey#14, n_nationkey#15, n_regionkey#16] (35) Scan parquet default.nation -Output [2]: [n_nationkey#22, n_name#23] +Output [2]: [n_nationkey#17, n_name#18] Batched: true Location [not included in comparison]/{warehouse_dir}/nation] PushedFilters: [IsNotNull(n_nationkey)] ReadSchema: struct (36) ColumnarToRow [codegen id : 6] -Input [2]: [n_nationkey#22, n_name#23] +Input [2]: [n_nationkey#17, n_name#18] (37) Filter [codegen id : 6] -Input [2]: [n_nationkey#22, n_name#23] -Condition : isnotnull(n_nationkey#22) +Input [2]: [n_nationkey#17, n_name#18] +Condition : isnotnull(n_nationkey#17) (38) BroadcastExchange -Input [2]: [n_nationkey#22, n_name#23] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#24] +Input [2]: [n_nationkey#17, n_name#18] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=6] (39) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [s_nationkey#10] -Right keys [1]: [n_nationkey#22] +Left keys [1]: [s_nationkey#9] +Right keys [1]: [n_nationkey#17] Join condition: None (40) Project [codegen id : 8] -Output [5]: [l_extendedprice#6, l_discount#7, o_orderdate#14, n_regionkey#20, n_name#23] -Input [7]: [l_extendedprice#6, l_discount#7, s_nationkey#10, o_orderdate#14, n_regionkey#20, n_nationkey#22, n_name#23] +Output [5]: [l_extendedprice#6, l_discount#7, o_orderdate#12, n_regionkey#16, n_name#18] +Input [7]: [l_extendedprice#6, l_discount#7, s_nationkey#9, o_orderdate#12, n_regionkey#16, n_nationkey#17, n_name#18] (41) Scan parquet default.region -Output [2]: [r_regionkey#25, r_name#26] +Output [2]: [r_regionkey#19, r_name#20] Batched: true Location [not included in comparison]/{warehouse_dir}/region] PushedFilters: [IsNotNull(r_name), EqualTo(r_name,AMERICA), IsNotNull(r_regionkey)] ReadSchema: struct (42) ColumnarToRow [codegen id : 7] -Input [2]: [r_regionkey#25, r_name#26] +Input [2]: [r_regionkey#19, r_name#20] (43) Filter [codegen id : 7] -Input [2]: [r_regionkey#25, r_name#26] -Condition : ((isnotnull(r_name#26) AND (r_name#26 = AMERICA)) AND isnotnull(r_regionkey#25)) +Input [2]: [r_regionkey#19, r_name#20] +Condition : ((isnotnull(r_name#20) AND (r_name#20 = AMERICA)) AND isnotnull(r_regionkey#19)) (44) Project [codegen id : 7] -Output [1]: [r_regionkey#25] -Input [2]: [r_regionkey#25, r_name#26] +Output [1]: [r_regionkey#19] +Input [2]: [r_regionkey#19, r_name#20] (45) BroadcastExchange -Input [1]: [r_regionkey#25] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [id=#27] +Input [1]: [r_regionkey#19] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=7] (46) BroadcastHashJoin [codegen id : 8] -Left keys [1]: [n_regionkey#20] -Right keys [1]: [r_regionkey#25] +Left keys [1]: [n_regionkey#16] +Right keys [1]: [r_regionkey#19] Join condition: None (47) Project [codegen id : 8] -Output [3]: [year(o_orderdate#14) AS o_year#28, CheckOverflow((promote_precision(cast(l_extendedprice#6 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#7 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)) AS volume#29, n_name#23 AS nation#30] -Input [6]: [l_extendedprice#6, l_discount#7, o_orderdate#14, n_regionkey#20, n_name#23, r_regionkey#25] +Output [3]: [year(o_orderdate#12) AS o_year#21, CheckOverflow((promote_precision(cast(l_extendedprice#6 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#7 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)) AS volume#22, n_name#18 AS nation#23] +Input [6]: [l_extendedprice#6, l_discount#7, o_orderdate#12, n_regionkey#16, n_name#18, r_regionkey#19] (48) HashAggregate [codegen id : 8] -Input [3]: [o_year#28, volume#29, nation#30] -Keys [1]: [o_year#28] -Functions [2]: [partial_sum(CASE WHEN (nation#30 = BRAZIL) THEN volume#29 ELSE 0 END), partial_sum(volume#29)] -Aggregate Attributes [4]: [sum#31, isEmpty#32, sum#33, isEmpty#34] -Results [5]: [o_year#28, sum#35, isEmpty#36, sum#37, isEmpty#38] +Input [3]: [o_year#21, volume#22, nation#23] +Keys [1]: [o_year#21] +Functions [2]: [partial_sum(CASE WHEN (nation#23 = BRAZIL) THEN volume#22 ELSE 0 END), partial_sum(volume#22)] +Aggregate Attributes [4]: [sum#24, isEmpty#25, sum#26, isEmpty#27] +Results [5]: [o_year#21, sum#28, isEmpty#29, sum#30, isEmpty#31] (49) Exchange -Input [5]: [o_year#28, sum#35, isEmpty#36, sum#37, isEmpty#38] -Arguments: hashpartitioning(o_year#28, 5), ENSURE_REQUIREMENTS, [id=#39] +Input [5]: [o_year#21, sum#28, isEmpty#29, sum#30, isEmpty#31] +Arguments: hashpartitioning(o_year#21, 5), ENSURE_REQUIREMENTS, [plan_id=8] (50) HashAggregate [codegen id : 9] -Input [5]: [o_year#28, sum#35, isEmpty#36, sum#37, isEmpty#38] -Keys [1]: [o_year#28] -Functions [2]: [sum(CASE WHEN (nation#30 = BRAZIL) THEN volume#29 ELSE 0 END), sum(volume#29)] -Aggregate Attributes [2]: [sum(CASE WHEN (nation#30 = BRAZIL) THEN volume#29 ELSE 0 END)#40, sum(volume#29)#41] -Results [2]: [o_year#28, CheckOverflow((promote_precision(sum(CASE WHEN (nation#30 = BRAZIL) THEN volume#29 ELSE 0 END)#40) / promote_precision(sum(volume#29)#41)), DecimalType(38,6)) AS mkt_share#42] +Input [5]: [o_year#21, sum#28, isEmpty#29, sum#30, isEmpty#31] +Keys [1]: [o_year#21] +Functions [2]: [sum(CASE WHEN (nation#23 = BRAZIL) THEN volume#22 ELSE 0 END), sum(volume#22)] +Aggregate Attributes [2]: [sum(CASE WHEN (nation#23 = BRAZIL) THEN volume#22 ELSE 0 END)#32, sum(volume#22)#33] +Results [2]: [o_year#21, CheckOverflow((promote_precision(sum(CASE WHEN (nation#23 = BRAZIL) THEN volume#22 ELSE 0 END)#32) / promote_precision(sum(volume#22)#33)), DecimalType(38,6)) AS mkt_share#34] (51) Exchange -Input [2]: [o_year#28, mkt_share#42] -Arguments: rangepartitioning(o_year#28 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#43] +Input [2]: [o_year#21, mkt_share#34] +Arguments: rangepartitioning(o_year#21 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=9] (52) Sort [codegen id : 10] -Input [2]: [o_year#28, mkt_share#42] -Arguments: [o_year#28 ASC NULLS FIRST], true, 0 +Input [2]: [o_year#21, mkt_share#34] +Arguments: [o_year#21 ASC NULLS FIRST], true, 0 diff --git a/sql/core/src/test/resources/tpch-plan-stability/q9/explain.txt b/sql/core/src/test/resources/tpch-plan-stability/q9/explain.txt index 9ed3700e668e0..a13118976829e 100644 --- a/sql/core/src/test/resources/tpch-plan-stability/q9/explain.txt +++ b/sql/core/src/test/resources/tpch-plan-stability/q9/explain.txt @@ -74,7 +74,7 @@ Condition : ((isnotnull(l_partkey#4) AND isnotnull(l_suppkey#5)) AND isnotnull(l (8) BroadcastExchange Input [6]: [l_orderkey#3, l_partkey#4, l_suppkey#5, l_quantity#6, l_extendedprice#7, l_discount#8] -Arguments: HashedRelationBroadcastMode(List(input[1, bigint, false]),false), [id=#9] +Arguments: HashedRelationBroadcastMode(List(input[1, bigint, false]),false), [plan_id=1] (9) BroadcastHashJoin [codegen id : 6] Left keys [1]: [p_partkey#1] @@ -86,136 +86,136 @@ Output [6]: [l_orderkey#3, l_partkey#4, l_suppkey#5, l_quantity#6, l_extendedpri Input [7]: [p_partkey#1, l_orderkey#3, l_partkey#4, l_suppkey#5, l_quantity#6, l_extendedprice#7, l_discount#8] (11) Scan parquet default.supplier -Output [2]: [s_suppkey#10, s_nationkey#11] +Output [2]: [s_suppkey#9, s_nationkey#10] Batched: true Location [not included in comparison]/{warehouse_dir}/supplier] PushedFilters: [IsNotNull(s_suppkey), IsNotNull(s_nationkey)] ReadSchema: struct (12) ColumnarToRow [codegen id : 2] -Input [2]: [s_suppkey#10, s_nationkey#11] +Input [2]: [s_suppkey#9, s_nationkey#10] (13) Filter [codegen id : 2] -Input [2]: [s_suppkey#10, s_nationkey#11] -Condition : (isnotnull(s_suppkey#10) AND isnotnull(s_nationkey#11)) +Input [2]: [s_suppkey#9, s_nationkey#10] +Condition : (isnotnull(s_suppkey#9) AND isnotnull(s_nationkey#10)) (14) BroadcastExchange -Input [2]: [s_suppkey#10, s_nationkey#11] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#12] +Input [2]: [s_suppkey#9, s_nationkey#10] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=2] (15) BroadcastHashJoin [codegen id : 6] Left keys [1]: [l_suppkey#5] -Right keys [1]: [s_suppkey#10] +Right keys [1]: [s_suppkey#9] Join condition: None (16) Project [codegen id : 6] -Output [7]: [l_orderkey#3, l_partkey#4, l_suppkey#5, l_quantity#6, l_extendedprice#7, l_discount#8, s_nationkey#11] -Input [8]: [l_orderkey#3, l_partkey#4, l_suppkey#5, l_quantity#6, l_extendedprice#7, l_discount#8, s_suppkey#10, s_nationkey#11] +Output [7]: [l_orderkey#3, l_partkey#4, l_suppkey#5, l_quantity#6, l_extendedprice#7, l_discount#8, s_nationkey#10] +Input [8]: [l_orderkey#3, l_partkey#4, l_suppkey#5, l_quantity#6, l_extendedprice#7, l_discount#8, s_suppkey#9, s_nationkey#10] (17) Scan parquet default.partsupp -Output [3]: [ps_partkey#13, ps_suppkey#14, ps_supplycost#15] +Output [3]: [ps_partkey#11, ps_suppkey#12, ps_supplycost#13] Batched: true Location [not included in comparison]/{warehouse_dir}/partsupp] PushedFilters: [IsNotNull(ps_suppkey), IsNotNull(ps_partkey)] ReadSchema: struct (18) ColumnarToRow [codegen id : 3] -Input [3]: [ps_partkey#13, ps_suppkey#14, ps_supplycost#15] +Input [3]: [ps_partkey#11, ps_suppkey#12, ps_supplycost#13] (19) Filter [codegen id : 3] -Input [3]: [ps_partkey#13, ps_suppkey#14, ps_supplycost#15] -Condition : (isnotnull(ps_suppkey#14) AND isnotnull(ps_partkey#13)) +Input [3]: [ps_partkey#11, ps_suppkey#12, ps_supplycost#13] +Condition : (isnotnull(ps_suppkey#12) AND isnotnull(ps_partkey#11)) (20) BroadcastExchange -Input [3]: [ps_partkey#13, ps_suppkey#14, ps_supplycost#15] -Arguments: HashedRelationBroadcastMode(List(input[1, bigint, false], input[0, bigint, false]),false), [id=#16] +Input [3]: [ps_partkey#11, ps_suppkey#12, ps_supplycost#13] +Arguments: HashedRelationBroadcastMode(List(input[1, bigint, false], input[0, bigint, false]),false), [plan_id=3] (21) BroadcastHashJoin [codegen id : 6] Left keys [2]: [l_suppkey#5, l_partkey#4] -Right keys [2]: [ps_suppkey#14, ps_partkey#13] +Right keys [2]: [ps_suppkey#12, ps_partkey#11] Join condition: None (22) Project [codegen id : 6] -Output [6]: [l_orderkey#3, l_quantity#6, l_extendedprice#7, l_discount#8, s_nationkey#11, ps_supplycost#15] -Input [10]: [l_orderkey#3, l_partkey#4, l_suppkey#5, l_quantity#6, l_extendedprice#7, l_discount#8, s_nationkey#11, ps_partkey#13, ps_suppkey#14, ps_supplycost#15] +Output [6]: [l_orderkey#3, l_quantity#6, l_extendedprice#7, l_discount#8, s_nationkey#10, ps_supplycost#13] +Input [10]: [l_orderkey#3, l_partkey#4, l_suppkey#5, l_quantity#6, l_extendedprice#7, l_discount#8, s_nationkey#10, ps_partkey#11, ps_suppkey#12, ps_supplycost#13] (23) Scan parquet default.orders -Output [2]: [o_orderkey#17, o_orderdate#18] +Output [2]: [o_orderkey#14, o_orderdate#15] Batched: true Location [not included in comparison]/{warehouse_dir}/orders] PushedFilters: [IsNotNull(o_orderkey)] ReadSchema: struct (24) ColumnarToRow [codegen id : 4] -Input [2]: [o_orderkey#17, o_orderdate#18] +Input [2]: [o_orderkey#14, o_orderdate#15] (25) Filter [codegen id : 4] -Input [2]: [o_orderkey#17, o_orderdate#18] -Condition : isnotnull(o_orderkey#17) +Input [2]: [o_orderkey#14, o_orderdate#15] +Condition : isnotnull(o_orderkey#14) (26) BroadcastExchange -Input [2]: [o_orderkey#17, o_orderdate#18] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#19] +Input [2]: [o_orderkey#14, o_orderdate#15] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=4] (27) BroadcastHashJoin [codegen id : 6] Left keys [1]: [l_orderkey#3] -Right keys [1]: [o_orderkey#17] +Right keys [1]: [o_orderkey#14] Join condition: None (28) Project [codegen id : 6] -Output [6]: [l_quantity#6, l_extendedprice#7, l_discount#8, s_nationkey#11, ps_supplycost#15, o_orderdate#18] -Input [8]: [l_orderkey#3, l_quantity#6, l_extendedprice#7, l_discount#8, s_nationkey#11, ps_supplycost#15, o_orderkey#17, o_orderdate#18] +Output [6]: [l_quantity#6, l_extendedprice#7, l_discount#8, s_nationkey#10, ps_supplycost#13, o_orderdate#15] +Input [8]: [l_orderkey#3, l_quantity#6, l_extendedprice#7, l_discount#8, s_nationkey#10, ps_supplycost#13, o_orderkey#14, o_orderdate#15] (29) Scan parquet default.nation -Output [2]: [n_nationkey#20, n_name#21] +Output [2]: [n_nationkey#16, n_name#17] Batched: true Location [not included in comparison]/{warehouse_dir}/nation] PushedFilters: [IsNotNull(n_nationkey)] ReadSchema: struct (30) ColumnarToRow [codegen id : 5] -Input [2]: [n_nationkey#20, n_name#21] +Input [2]: [n_nationkey#16, n_name#17] (31) Filter [codegen id : 5] -Input [2]: [n_nationkey#20, n_name#21] -Condition : isnotnull(n_nationkey#20) +Input [2]: [n_nationkey#16, n_name#17] +Condition : isnotnull(n_nationkey#16) (32) BroadcastExchange -Input [2]: [n_nationkey#20, n_name#21] -Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [id=#22] +Input [2]: [n_nationkey#16, n_name#17] +Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=5] (33) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [s_nationkey#11] -Right keys [1]: [n_nationkey#20] +Left keys [1]: [s_nationkey#10] +Right keys [1]: [n_nationkey#16] Join condition: None (34) Project [codegen id : 6] -Output [3]: [n_name#21 AS nation#23, year(o_orderdate#18) AS o_year#24, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(l_extendedprice#7 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#8 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)) as decimal(23,0))) - promote_precision(cast(CheckOverflow((promote_precision(ps_supplycost#15) * promote_precision(l_quantity#6)), DecimalType(21,0)) as decimal(23,0)))), DecimalType(23,0)) AS amount#25] -Input [8]: [l_quantity#6, l_extendedprice#7, l_discount#8, s_nationkey#11, ps_supplycost#15, o_orderdate#18, n_nationkey#20, n_name#21] +Output [3]: [n_name#17 AS nation#18, year(o_orderdate#15) AS o_year#19, CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(l_extendedprice#7 as decimal(11,0))) * promote_precision(CheckOverflow((1 - promote_precision(cast(l_discount#8 as decimal(11,0)))), DecimalType(11,0)))), DecimalType(22,0)) as decimal(23,0))) - promote_precision(cast(CheckOverflow((promote_precision(ps_supplycost#13) * promote_precision(l_quantity#6)), DecimalType(21,0)) as decimal(23,0)))), DecimalType(23,0)) AS amount#20] +Input [8]: [l_quantity#6, l_extendedprice#7, l_discount#8, s_nationkey#10, ps_supplycost#13, o_orderdate#15, n_nationkey#16, n_name#17] (35) HashAggregate [codegen id : 6] -Input [3]: [nation#23, o_year#24, amount#25] -Keys [2]: [nation#23, o_year#24] -Functions [1]: [partial_sum(amount#25)] -Aggregate Attributes [2]: [sum#26, isEmpty#27] -Results [4]: [nation#23, o_year#24, sum#28, isEmpty#29] +Input [3]: [nation#18, o_year#19, amount#20] +Keys [2]: [nation#18, o_year#19] +Functions [1]: [partial_sum(amount#20)] +Aggregate Attributes [2]: [sum#21, isEmpty#22] +Results [4]: [nation#18, o_year#19, sum#23, isEmpty#24] (36) Exchange -Input [4]: [nation#23, o_year#24, sum#28, isEmpty#29] -Arguments: hashpartitioning(nation#23, o_year#24, 5), ENSURE_REQUIREMENTS, [id=#30] +Input [4]: [nation#18, o_year#19, sum#23, isEmpty#24] +Arguments: hashpartitioning(nation#18, o_year#19, 5), ENSURE_REQUIREMENTS, [plan_id=6] (37) HashAggregate [codegen id : 7] -Input [4]: [nation#23, o_year#24, sum#28, isEmpty#29] -Keys [2]: [nation#23, o_year#24] -Functions [1]: [sum(amount#25)] -Aggregate Attributes [1]: [sum(amount#25)#31] -Results [3]: [nation#23, o_year#24, sum(amount#25)#31 AS sum_profit#32] +Input [4]: [nation#18, o_year#19, sum#23, isEmpty#24] +Keys [2]: [nation#18, o_year#19] +Functions [1]: [sum(amount#20)] +Aggregate Attributes [1]: [sum(amount#20)#25] +Results [3]: [nation#18, o_year#19, sum(amount#20)#25 AS sum_profit#26] (38) Exchange -Input [3]: [nation#23, o_year#24, sum_profit#32] -Arguments: rangepartitioning(nation#23 ASC NULLS FIRST, o_year#24 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#33] +Input [3]: [nation#18, o_year#19, sum_profit#26] +Arguments: rangepartitioning(nation#18 ASC NULLS FIRST, o_year#19 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [plan_id=7] (39) Sort [codegen id : 8] -Input [3]: [nation#23, o_year#24, sum_profit#32] -Arguments: [nation#23 ASC NULLS FIRST, o_year#24 DESC NULLS LAST], true, 0 +Input [3]: [nation#18, o_year#19, sum_profit#26] +Arguments: [nation#18 ASC NULLS FIRST, o_year#19 DESC NULLS LAST], true, 0 diff --git a/sql/core/src/test/scala/org/apache/spark/sql/PlanStabilitySuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/PlanStabilitySuite.scala index a0207e9b01920..b9f782ed1ec65 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/PlanStabilitySuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/PlanStabilitySuite.scala @@ -78,6 +78,7 @@ trait PlanStabilitySuite extends DisableAdaptiveExecutionSuite { private val referenceRegex = "#\\d+".r private val normalizeRegex = "#\\d+L?".r + private val planIdRegex = "plan_id=\\d+".r private val clsName = this.getClass.getCanonicalName @@ -232,7 +233,15 @@ trait PlanStabilitySuite extends DisableAdaptiveExecutionSuite { val map = new mutable.HashMap[String, String]() normalizeRegex.findAllMatchIn(plan).map(_.toString) .foreach(map.getOrElseUpdate(_, (map.size + 1).toString)) - normalizeRegex.replaceAllIn(plan, regexMatch => s"#${map(regexMatch.toString)}") + val exprIdNormalized = normalizeRegex.replaceAllIn( + plan, regexMatch => s"#${map(regexMatch.toString)}") + + // Normalize the plan id in Exchange nodes. See `Exchange.stringArgs`. + val planIdMap = new mutable.HashMap[String, String]() + planIdRegex.findAllMatchIn(exprIdNormalized).map(_.toString) + .foreach(planIdMap.getOrElseUpdate(_, (planIdMap.size + 1).toString)) + planIdRegex.replaceAllIn( + exprIdNormalized, regexMatch => s"plan_id=${planIdMap(regexMatch.toString)}") } private def normalizeLocation(plan: String): String = { From 1959604359768097bdd68a36f18be928e481b656 Mon Sep 17 00:00:00 2001 From: Wenchen Fan Date: Fri, 10 Jun 2022 16:32:58 +0800 Subject: [PATCH 2/2] fix more tests --- .../sql-tests/results/explain-aqe.sql.out | 42 +++++++++---------- .../sql-tests/results/explain-cbo.sql.out | 2 +- .../sql-tests/results/explain.sql.out | 38 ++++++++--------- .../apache/spark/sql/SQLQueryTestHelper.scala | 1 + .../sql/execution/debug/DebuggingSuite.scala | 4 +- 5 files changed, 44 insertions(+), 43 deletions(-) diff --git a/sql/core/src/test/resources/sql-tests/results/explain-aqe.sql.out b/sql/core/src/test/resources/sql-tests/results/explain-aqe.sql.out index f98fb1eb2a57a..e6dbb1f415d47 100644 --- a/sql/core/src/test/resources/sql-tests/results/explain-aqe.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/explain-aqe.sql.out @@ -67,10 +67,10 @@ Aggregate [sum(distinct val#x) AS sum(DISTINCT val)#xL] == Physical Plan == AdaptiveSparkPlan isFinalPlan=false +- HashAggregate(keys=[], functions=[sum(distinct val#x)], output=[sum(DISTINCT val)#xL]) - +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [id=#x] + +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] +- HashAggregate(keys=[], functions=[partial_sum(distinct val#x)], output=[sum#xL]) +- HashAggregate(keys=[val#x], functions=[], output=[val#x]) - +- Exchange hashpartitioning(val#x, 4), ENSURE_REQUIREMENTS, [id=#x] + +- Exchange hashpartitioning(val#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] +- HashAggregate(keys=[val#x], functions=[], output=[val#x]) +- FileScan parquet default.explain_temp1[val#x] Batched: true, DataFilters: [], Format: Parquet, Location [not included in comparison]/{warehouse_dir}/explain_temp1], PartitionFilters: [], PushedFilters: [], ReadSchema: struct @@ -116,7 +116,7 @@ Results [2]: [key#x, max#x] (4) Exchange Input [2]: [key#x, max#x] -Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] (5) HashAggregate Input [2]: [key#x, max#x] @@ -127,7 +127,7 @@ Results [2]: [key#x, max(val#x)#x AS max(val)#x] (6) Exchange Input [2]: [key#x, max(val)#x] -Arguments: rangepartitioning(key#x ASC NULLS FIRST, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: rangepartitioning(key#x ASC NULLS FIRST, 4), ENSURE_REQUIREMENTS, [plan_id=x] (7) Sort Input [2]: [key#x, max(val)#x] @@ -178,7 +178,7 @@ Results [2]: [key#x, max#x] (4) Exchange Input [2]: [key#x, max#x] -Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] (5) HashAggregate Input [2]: [key#x, max#x] @@ -249,7 +249,7 @@ Results [2]: [key#x, val#x] (7) Exchange Input [2]: [key#x, val#x] -Arguments: hashpartitioning(key#x, val#x, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: hashpartitioning(key#x, val#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] (8) HashAggregate Input [2]: [key#x, val#x] @@ -306,7 +306,7 @@ Condition : isnotnull(key#x) (5) BroadcastExchange Input [2]: [key#x, val#x] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#x] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=x] (6) BroadcastHashJoin Left keys [1]: [key#x] @@ -355,7 +355,7 @@ Condition : isnotnull(key#x) (4) BroadcastExchange Input [2]: [key#x, val#x] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#x] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=x] (5) BroadcastHashJoin Left keys [1]: [key#x] @@ -438,7 +438,7 @@ Results [1]: [max#x] (8) Exchange Input [1]: [max#x] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#x] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] (9) HashAggregate Input [1]: [max#x] @@ -485,7 +485,7 @@ Results [1]: [max#x] (15) Exchange Input [1]: [max#x] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#x] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] (16) HashAggregate Input [1]: [max#x] @@ -569,7 +569,7 @@ Results [1]: [max#x] (8) Exchange Input [1]: [max#x] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#x] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] (9) HashAggregate Input [1]: [max#x] @@ -616,7 +616,7 @@ Results [2]: [sum#x, count#xL] (15) Exchange Input [2]: [sum#x, count#xL] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#x] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] (16) HashAggregate Input [2]: [sum#x, count#xL] @@ -682,7 +682,7 @@ Results [2]: [sum#x, count#xL] (6) Exchange Input [2]: [sum#x, count#xL] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#x] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] (7) HashAggregate Input [2]: [sum#x, count#xL] @@ -718,7 +718,7 @@ Results [2]: [sum#x, count#xL] (11) Exchange Input [2]: [sum#x, count#xL] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#x] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] (12) HashAggregate Input [2]: [sum#x, count#xL] @@ -777,7 +777,7 @@ Condition : (isnotnull(key#x) AND (key#x > 10)) (5) BroadcastExchange Input [2]: [key#x, val#x] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#x] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=x] (6) BroadcastHashJoin Left keys [1]: [key#x] @@ -837,7 +837,7 @@ Results [2]: [key#x, max#x] (4) Exchange Input [2]: [key#x, max#x] -Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] (5) HashAggregate Input [2]: [key#x, max#x] @@ -866,7 +866,7 @@ Results [2]: [key#x, max#x] (9) Exchange Input [2]: [key#x, max#x] -Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] (10) HashAggregate Input [2]: [key#x, max#x] @@ -877,7 +877,7 @@ Results [2]: [key#x, max(val#x)#x AS max(val)#x] (11) BroadcastExchange Input [2]: [key#x, max(val)#x] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#x] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=x] (12) BroadcastHashJoin Left keys [1]: [key#x] @@ -964,7 +964,7 @@ Results [3]: [count#xL, sum#xL, count#xL] (3) Exchange Input [3]: [count#xL, sum#xL, count#xL] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#x] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] (4) HashAggregate Input [3]: [count#xL, sum#xL, count#xL] @@ -1009,7 +1009,7 @@ Results [2]: [key#x, buf#x] (3) Exchange Input [2]: [key#x, buf#x] -Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] (4) ObjectHashAggregate Input [2]: [key#x, buf#x] @@ -1060,7 +1060,7 @@ Results [2]: [key#x, min#x] (4) Exchange Input [2]: [key#x, min#x] -Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] (5) Sort Input [2]: [key#x, min#x] diff --git a/sql/core/src/test/resources/sql-tests/results/explain-cbo.sql.out b/sql/core/src/test/resources/sql-tests/results/explain-cbo.sql.out index 086b4d2e0b194..902af430b55ad 100644 --- a/sql/core/src/test/resources/sql-tests/results/explain-cbo.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/explain-cbo.sql.out @@ -72,7 +72,7 @@ AdaptiveSparkPlan isFinalPlan=false : +- HashAggregate(keys=[], functions=[max(csales#xL)], output=[tpcds_cmax#xL]) : +- HashAggregate(keys=[], functions=[partial_max(csales#xL)], output=[max#xL]) : +- HashAggregate(keys=[], functions=[sum(b#x)], output=[csales#xL]) - : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [id=#x] + : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] : +- HashAggregate(keys=[], functions=[partial_sum(b#x)], output=[sum#xL]) : +- Project [b#x] : +- Filter (isnotnull(a#x) AND (a#x < 100)) diff --git a/sql/core/src/test/resources/sql-tests/results/explain.sql.out b/sql/core/src/test/resources/sql-tests/results/explain.sql.out index a563eda1e7b04..b21f1836e3f59 100644 --- a/sql/core/src/test/resources/sql-tests/results/explain.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/explain.sql.out @@ -66,10 +66,10 @@ Aggregate [sum(distinct val#x) AS sum(DISTINCT val)#xL] == Physical Plan == *HashAggregate(keys=[], functions=[sum(distinct val#x)], output=[sum(DISTINCT val)#xL]) -+- Exchange SinglePartition, ENSURE_REQUIREMENTS, [id=#x] ++- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] +- *HashAggregate(keys=[], functions=[partial_sum(distinct val#x)], output=[sum#xL]) +- *HashAggregate(keys=[val#x], functions=[], output=[val#x]) - +- Exchange hashpartitioning(val#x, 4), ENSURE_REQUIREMENTS, [id=#x] + +- Exchange hashpartitioning(val#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] +- *HashAggregate(keys=[val#x], functions=[], output=[val#x]) +- *ColumnarToRow +- FileScan parquet default.explain_temp1[val#x] Batched: true, DataFilters: [], Format: Parquet, Location [not included in comparison]/{warehouse_dir}/explain_temp1], PartitionFilters: [], PushedFilters: [], ReadSchema: struct @@ -119,7 +119,7 @@ Results [2]: [key#x, max#x] (5) Exchange Input [2]: [key#x, max#x] -Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] (6) HashAggregate [codegen id : 2] Input [2]: [key#x, max#x] @@ -130,7 +130,7 @@ Results [2]: [key#x, max(val#x)#x AS max(val)#x] (7) Exchange Input [2]: [key#x, max(val)#x] -Arguments: rangepartitioning(key#x ASC NULLS FIRST, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: rangepartitioning(key#x ASC NULLS FIRST, 4), ENSURE_REQUIREMENTS, [plan_id=x] (8) Sort [codegen id : 3] Input [2]: [key#x, max(val)#x] @@ -180,7 +180,7 @@ Results [2]: [key#x, max#x] (5) Exchange Input [2]: [key#x, max#x] -Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] (6) HashAggregate [codegen id : 2] Input [2]: [key#x, max#x] @@ -254,7 +254,7 @@ Results [2]: [key#x, val#x] (9) Exchange Input [2]: [key#x, val#x] -Arguments: hashpartitioning(key#x, val#x, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: hashpartitioning(key#x, val#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] (10) HashAggregate [codegen id : 4] Input [2]: [key#x, val#x] @@ -314,7 +314,7 @@ Condition : isnotnull(key#x) (7) BroadcastExchange Input [2]: [key#x, val#x] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#x] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=x] (8) BroadcastHashJoin [codegen id : 2] Left keys [1]: [key#x] @@ -366,7 +366,7 @@ Condition : isnotnull(key#x) (6) BroadcastExchange Input [2]: [key#x, val#x] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#x] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=x] (7) BroadcastHashJoin [codegen id : 2] Left keys [1]: [key#x] @@ -447,7 +447,7 @@ Results [1]: [max#x] (9) Exchange Input [1]: [max#x] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#x] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] (10) HashAggregate [codegen id : 2] Input [1]: [max#x] @@ -493,7 +493,7 @@ Results [1]: [max#x] (16) Exchange Input [1]: [max#x] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#x] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] (17) HashAggregate [codegen id : 2] Input [1]: [max#x] @@ -575,7 +575,7 @@ Results [1]: [max#x] (9) Exchange Input [1]: [max#x] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#x] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] (10) HashAggregate [codegen id : 2] Input [1]: [max#x] @@ -621,7 +621,7 @@ Results [2]: [sum#x, count#xL] (16) Exchange Input [2]: [sum#x, count#xL] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#x] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] (17) HashAggregate [codegen id : 2] Input [2]: [sum#x, count#xL] @@ -685,7 +685,7 @@ Results [2]: [sum#x, count#xL] (7) Exchange Input [2]: [sum#x, count#xL] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#x] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] (8) HashAggregate [codegen id : 2] Input [2]: [sum#x, count#xL] @@ -749,7 +749,7 @@ Condition : (isnotnull(key#x) AND (key#x > 10)) (7) BroadcastExchange Input [2]: [key#x, val#x] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#x] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=x] (8) BroadcastHashJoin [codegen id : 2] Left keys [1]: [key#x] @@ -805,7 +805,7 @@ Results [2]: [key#x, max#x] (5) Exchange Input [2]: [key#x, max#x] -Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] (6) HashAggregate [codegen id : 4] Input [2]: [key#x, max#x] @@ -826,7 +826,7 @@ Results [2]: [key#x, max(val#x)#x AS max(val)#x] (9) BroadcastExchange Input [2]: [key#x, max(val)#x] -Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#x] +Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=x] (10) BroadcastHashJoin [codegen id : 4] Left keys [1]: [key#x] @@ -912,7 +912,7 @@ Results [3]: [count#xL, sum#xL, count#xL] (4) Exchange Input [3]: [count#xL, sum#xL, count#xL] -Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#x] +Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=x] (5) HashAggregate [codegen id : 2] Input [3]: [count#xL, sum#xL, count#xL] @@ -956,7 +956,7 @@ Results [2]: [key#x, buf#x] (4) Exchange Input [2]: [key#x, buf#x] -Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] (5) ObjectHashAggregate Input [2]: [key#x, buf#x] @@ -1006,7 +1006,7 @@ Results [2]: [key#x, min#x] (5) Exchange Input [2]: [key#x, min#x] -Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [id=#x] +Arguments: hashpartitioning(key#x, 4), ENSURE_REQUIREMENTS, [plan_id=x] (6) Sort [codegen id : 2] Input [2]: [key#x, min#x] diff --git a/sql/core/src/test/scala/org/apache/spark/sql/SQLQueryTestHelper.scala b/sql/core/src/test/scala/org/apache/spark/sql/SQLQueryTestHelper.scala index b9ca2a0f034e5..987e09adb168e 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/SQLQueryTestHelper.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/SQLQueryTestHelper.scala @@ -35,6 +35,7 @@ trait SQLQueryTestHelper { protected def replaceNotIncludedMsg(line: String): String = { line.replaceAll("#\\d+", "#x") + .replaceAll("plan_id=\\d+", "plan_id=x") .replaceAll( s"Location.*$clsName/", s"Location $notIncludedMsg/{warehouse_dir}/") diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/debug/DebuggingSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/debug/DebuggingSuite.scala index 849ad378fc095..3a0bd35cb70fd 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/debug/DebuggingSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/debug/DebuggingSuite.scala @@ -112,8 +112,8 @@ class DebuggingSuite extends DebuggingSuiteBase with DisableAdaptiveExecutionSui val output = captured.toString() val hashedModeString = "HashedRelationBroadcastMode(List(input[0, bigint, false]),false)" - assert(output.replaceAll("\\[id=#\\d+\\]", "[id=#x]").contains( - s"""== BroadcastExchange $hashedModeString, [id=#x] == + assert(output.replaceAll("\\[plan_id=\\d+\\]", "[plan_id=x]").contains( + s"""== BroadcastExchange $hashedModeString, [plan_id=x] == |Tuples output: 0 | id LongType: {} |== WholeStageCodegen (1) ==