diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/DeduplicateRelations.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/DeduplicateRelations.scala index 39dda9a13dad4..ca7061fb8e790 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/DeduplicateRelations.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/DeduplicateRelations.scala @@ -115,6 +115,14 @@ object DeduplicateRelations extends Rule[LogicalPlan] { newProject => findAliases(newProject.projectList).map(_.exprId.id).toSeq, newProject => newProject.copy(newAliases(newProject.projectList))) + case a: Aggregate => + deduplicateAndRenew[Aggregate]( + existingRelations, + a, + newAggregate => findAliases(newAggregate.aggregateExpressions).map(_.exprId.id).toSeq, + newAggregate => newAggregate.copy(aggregateExpressions = + newAliases(newAggregate.aggregateExpressions))) + case s: SerializeFromObject => deduplicateAndRenew[SerializeFromObject]( existingRelations, 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 0de177a1710d8..d4a848eceacba 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 @@ -637,116 +637,116 @@ Aggregate Attributes [2]: [sum(sales#50)#102, sum(number_sales#51)#103] Results [6]: [channel#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum(sales#50)#102 AS sum_sales#104, sum(number_sales#51)#103 AS number_sales#105] (107) ReusedExchange [Reuses operator id: 105] -Output [7]: [channel#49, i_brand_id#106, i_class_id#107, i_category_id#108, sum#99, isEmpty#100, sum#101] +Output [7]: [channel#106, i_brand_id#107, i_class_id#108, i_category_id#109, sum#110, isEmpty#111, sum#112] (108) HashAggregate [codegen id : 232] -Input [7]: [channel#49, i_brand_id#106, i_class_id#107, i_category_id#108, sum#99, isEmpty#100, sum#101] -Keys [4]: [channel#49, i_brand_id#106, i_class_id#107, i_category_id#108] -Functions [2]: [sum(sales#50), sum(number_sales#51)] -Aggregate Attributes [2]: [sum(sales#50)#102, sum(number_sales#51)#103] -Results [5]: [channel#49, i_brand_id#106, i_class_id#107, sum(sales#50)#102 AS sum_sales#109, sum(number_sales#51)#103 AS number_sales#110] +Input [7]: [channel#106, i_brand_id#107, i_class_id#108, i_category_id#109, sum#110, isEmpty#111, sum#112] +Keys [4]: [channel#106, i_brand_id#107, i_class_id#108, i_category_id#109] +Functions [2]: [sum(sales#113), sum(number_sales#114)] +Aggregate Attributes [2]: [sum(sales#113)#102, sum(number_sales#114)#103] +Results [5]: [channel#106, i_brand_id#107, i_class_id#108, sum(sales#113)#102 AS sum_sales#115, sum(number_sales#114)#103 AS number_sales#116] (109) HashAggregate [codegen id : 232] -Input [5]: [channel#49, i_brand_id#106, i_class_id#107, sum_sales#109, number_sales#110] -Keys [3]: [channel#49, i_brand_id#106, i_class_id#107] -Functions [2]: [partial_sum(sum_sales#109), partial_sum(number_sales#110)] -Aggregate Attributes [3]: [sum#111, isEmpty#112, sum#113] -Results [6]: [channel#49, i_brand_id#106, i_class_id#107, sum#114, isEmpty#115, sum#116] +Input [5]: [channel#106, i_brand_id#107, i_class_id#108, sum_sales#115, number_sales#116] +Keys [3]: [channel#106, i_brand_id#107, i_class_id#108] +Functions [2]: [partial_sum(sum_sales#115), partial_sum(number_sales#116)] +Aggregate Attributes [3]: [sum#117, isEmpty#118, sum#119] +Results [6]: [channel#106, i_brand_id#107, i_class_id#108, sum#120, isEmpty#121, sum#122] (110) Exchange -Input [6]: [channel#49, i_brand_id#106, i_class_id#107, sum#114, isEmpty#115, sum#116] -Arguments: hashpartitioning(channel#49, i_brand_id#106, i_class_id#107, 5), ENSURE_REQUIREMENTS, [plan_id=15] +Input [6]: [channel#106, i_brand_id#107, i_class_id#108, sum#120, isEmpty#121, sum#122] +Arguments: hashpartitioning(channel#106, i_brand_id#107, i_class_id#108, 5), ENSURE_REQUIREMENTS, [plan_id=15] (111) HashAggregate [codegen id : 233] -Input [6]: [channel#49, i_brand_id#106, i_class_id#107, sum#114, isEmpty#115, sum#116] -Keys [3]: [channel#49, i_brand_id#106, i_class_id#107] -Functions [2]: [sum(sum_sales#109), sum(number_sales#110)] -Aggregate Attributes [2]: [sum(sum_sales#109)#117, sum(number_sales#110)#118] -Results [6]: [channel#49, i_brand_id#106, i_class_id#107, null AS i_category_id#119, sum(sum_sales#109)#117 AS sum(sum_sales)#120, sum(number_sales#110)#118 AS sum(number_sales)#121] +Input [6]: [channel#106, i_brand_id#107, i_class_id#108, sum#120, isEmpty#121, sum#122] +Keys [3]: [channel#106, i_brand_id#107, i_class_id#108] +Functions [2]: [sum(sum_sales#115), sum(number_sales#116)] +Aggregate Attributes [2]: [sum(sum_sales#115)#123, sum(number_sales#116)#124] +Results [6]: [channel#106, i_brand_id#107, i_class_id#108, null AS i_category_id#125, sum(sum_sales#115)#123 AS sum(sum_sales)#126, sum(number_sales#116)#124 AS sum(number_sales)#127] (112) ReusedExchange [Reuses operator id: 105] -Output [7]: [channel#49, i_brand_id#122, i_class_id#123, i_category_id#124, sum#99, isEmpty#100, sum#101] +Output [7]: [channel#128, i_brand_id#129, i_class_id#130, i_category_id#131, sum#132, isEmpty#133, sum#134] (113) HashAggregate [codegen id : 349] -Input [7]: [channel#49, i_brand_id#122, i_class_id#123, i_category_id#124, sum#99, isEmpty#100, sum#101] -Keys [4]: [channel#49, i_brand_id#122, i_class_id#123, i_category_id#124] -Functions [2]: [sum(sales#50), sum(number_sales#51)] -Aggregate Attributes [2]: [sum(sales#50)#102, sum(number_sales#51)#103] -Results [4]: [channel#49, i_brand_id#122, sum(sales#50)#102 AS sum_sales#125, sum(number_sales#51)#103 AS number_sales#126] +Input [7]: [channel#128, i_brand_id#129, i_class_id#130, i_category_id#131, sum#132, isEmpty#133, sum#134] +Keys [4]: [channel#128, i_brand_id#129, i_class_id#130, i_category_id#131] +Functions [2]: [sum(sales#135), sum(number_sales#136)] +Aggregate Attributes [2]: [sum(sales#135)#102, sum(number_sales#136)#103] +Results [4]: [channel#128, i_brand_id#129, sum(sales#135)#102 AS sum_sales#137, sum(number_sales#136)#103 AS number_sales#138] (114) HashAggregate [codegen id : 349] -Input [4]: [channel#49, i_brand_id#122, sum_sales#125, number_sales#126] -Keys [2]: [channel#49, i_brand_id#122] -Functions [2]: [partial_sum(sum_sales#125), partial_sum(number_sales#126)] -Aggregate Attributes [3]: [sum#127, isEmpty#128, sum#129] -Results [5]: [channel#49, i_brand_id#122, sum#130, isEmpty#131, sum#132] +Input [4]: [channel#128, i_brand_id#129, sum_sales#137, number_sales#138] +Keys [2]: [channel#128, i_brand_id#129] +Functions [2]: [partial_sum(sum_sales#137), partial_sum(number_sales#138)] +Aggregate Attributes [3]: [sum#139, isEmpty#140, sum#141] +Results [5]: [channel#128, i_brand_id#129, sum#142, isEmpty#143, sum#144] (115) Exchange -Input [5]: [channel#49, i_brand_id#122, sum#130, isEmpty#131, sum#132] -Arguments: hashpartitioning(channel#49, i_brand_id#122, 5), ENSURE_REQUIREMENTS, [plan_id=16] +Input [5]: [channel#128, i_brand_id#129, sum#142, isEmpty#143, sum#144] +Arguments: hashpartitioning(channel#128, i_brand_id#129, 5), ENSURE_REQUIREMENTS, [plan_id=16] (116) HashAggregate [codegen id : 350] -Input [5]: [channel#49, i_brand_id#122, sum#130, isEmpty#131, sum#132] -Keys [2]: [channel#49, i_brand_id#122] -Functions [2]: [sum(sum_sales#125), sum(number_sales#126)] -Aggregate Attributes [2]: [sum(sum_sales#125)#133, sum(number_sales#126)#134] -Results [6]: [channel#49, i_brand_id#122, null AS i_class_id#135, null AS i_category_id#136, sum(sum_sales#125)#133 AS sum(sum_sales)#137, sum(number_sales#126)#134 AS sum(number_sales)#138] +Input [5]: [channel#128, i_brand_id#129, sum#142, isEmpty#143, sum#144] +Keys [2]: [channel#128, i_brand_id#129] +Functions [2]: [sum(sum_sales#137), sum(number_sales#138)] +Aggregate Attributes [2]: [sum(sum_sales#137)#145, sum(number_sales#138)#146] +Results [6]: [channel#128, i_brand_id#129, null AS i_class_id#147, null AS i_category_id#148, sum(sum_sales#137)#145 AS sum(sum_sales)#149, sum(number_sales#138)#146 AS sum(number_sales)#150] (117) ReusedExchange [Reuses operator id: 105] -Output [7]: [channel#49, i_brand_id#139, i_class_id#140, i_category_id#141, sum#99, isEmpty#100, sum#101] +Output [7]: [channel#151, i_brand_id#152, i_class_id#153, i_category_id#154, sum#155, isEmpty#156, sum#157] (118) HashAggregate [codegen id : 466] -Input [7]: [channel#49, i_brand_id#139, i_class_id#140, i_category_id#141, sum#99, isEmpty#100, sum#101] -Keys [4]: [channel#49, i_brand_id#139, i_class_id#140, i_category_id#141] -Functions [2]: [sum(sales#50), sum(number_sales#51)] -Aggregate Attributes [2]: [sum(sales#50)#102, sum(number_sales#51)#103] -Results [3]: [channel#49, sum(sales#50)#102 AS sum_sales#142, sum(number_sales#51)#103 AS number_sales#143] +Input [7]: [channel#151, i_brand_id#152, i_class_id#153, i_category_id#154, sum#155, isEmpty#156, sum#157] +Keys [4]: [channel#151, i_brand_id#152, i_class_id#153, i_category_id#154] +Functions [2]: [sum(sales#158), sum(number_sales#159)] +Aggregate Attributes [2]: [sum(sales#158)#102, sum(number_sales#159)#103] +Results [3]: [channel#151, sum(sales#158)#102 AS sum_sales#160, sum(number_sales#159)#103 AS number_sales#161] (119) HashAggregate [codegen id : 466] -Input [3]: [channel#49, sum_sales#142, number_sales#143] -Keys [1]: [channel#49] -Functions [2]: [partial_sum(sum_sales#142), partial_sum(number_sales#143)] -Aggregate Attributes [3]: [sum#144, isEmpty#145, sum#146] -Results [4]: [channel#49, sum#147, isEmpty#148, sum#149] +Input [3]: [channel#151, sum_sales#160, number_sales#161] +Keys [1]: [channel#151] +Functions [2]: [partial_sum(sum_sales#160), partial_sum(number_sales#161)] +Aggregate Attributes [3]: [sum#162, isEmpty#163, sum#164] +Results [4]: [channel#151, sum#165, isEmpty#166, sum#167] (120) Exchange -Input [4]: [channel#49, sum#147, isEmpty#148, sum#149] -Arguments: hashpartitioning(channel#49, 5), ENSURE_REQUIREMENTS, [plan_id=17] +Input [4]: [channel#151, sum#165, isEmpty#166, sum#167] +Arguments: hashpartitioning(channel#151, 5), ENSURE_REQUIREMENTS, [plan_id=17] (121) HashAggregate [codegen id : 467] -Input [4]: [channel#49, sum#147, isEmpty#148, sum#149] -Keys [1]: [channel#49] -Functions [2]: [sum(sum_sales#142), sum(number_sales#143)] -Aggregate Attributes [2]: [sum(sum_sales#142)#150, sum(number_sales#143)#151] -Results [6]: [channel#49, null AS i_brand_id#152, null AS i_class_id#153, null AS i_category_id#154, sum(sum_sales#142)#150 AS sum(sum_sales)#155, sum(number_sales#143)#151 AS sum(number_sales)#156] +Input [4]: [channel#151, sum#165, isEmpty#166, sum#167] +Keys [1]: [channel#151] +Functions [2]: [sum(sum_sales#160), sum(number_sales#161)] +Aggregate Attributes [2]: [sum(sum_sales#160)#168, sum(number_sales#161)#169] +Results [6]: [channel#151, null AS i_brand_id#170, null AS i_class_id#171, null AS i_category_id#172, sum(sum_sales#160)#168 AS sum(sum_sales)#173, sum(number_sales#161)#169 AS sum(number_sales)#174] (122) ReusedExchange [Reuses operator id: 105] -Output [7]: [channel#49, i_brand_id#157, i_class_id#158, i_category_id#159, sum#99, isEmpty#100, sum#101] +Output [7]: [channel#175, i_brand_id#176, i_class_id#177, i_category_id#178, sum#179, isEmpty#180, sum#181] (123) HashAggregate [codegen id : 583] -Input [7]: [channel#49, i_brand_id#157, i_class_id#158, i_category_id#159, sum#99, isEmpty#100, sum#101] -Keys [4]: [channel#49, i_brand_id#157, i_class_id#158, i_category_id#159] -Functions [2]: [sum(sales#50), sum(number_sales#51)] -Aggregate Attributes [2]: [sum(sales#50)#102, sum(number_sales#51)#103] -Results [2]: [sum(sales#50)#102 AS sum_sales#160, sum(number_sales#51)#103 AS number_sales#161] +Input [7]: [channel#175, i_brand_id#176, i_class_id#177, i_category_id#178, sum#179, isEmpty#180, sum#181] +Keys [4]: [channel#175, i_brand_id#176, i_class_id#177, i_category_id#178] +Functions [2]: [sum(sales#182), sum(number_sales#183)] +Aggregate Attributes [2]: [sum(sales#182)#102, sum(number_sales#183)#103] +Results [2]: [sum(sales#182)#102 AS sum_sales#184, sum(number_sales#183)#103 AS number_sales#185] (124) HashAggregate [codegen id : 583] -Input [2]: [sum_sales#160, number_sales#161] +Input [2]: [sum_sales#184, number_sales#185] Keys: [] -Functions [2]: [partial_sum(sum_sales#160), partial_sum(number_sales#161)] -Aggregate Attributes [3]: [sum#162, isEmpty#163, sum#164] -Results [3]: [sum#165, isEmpty#166, sum#167] +Functions [2]: [partial_sum(sum_sales#184), partial_sum(number_sales#185)] +Aggregate Attributes [3]: [sum#186, isEmpty#187, sum#188] +Results [3]: [sum#189, isEmpty#190, sum#191] (125) Exchange -Input [3]: [sum#165, isEmpty#166, sum#167] +Input [3]: [sum#189, isEmpty#190, sum#191] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=18] (126) HashAggregate [codegen id : 584] -Input [3]: [sum#165, isEmpty#166, sum#167] +Input [3]: [sum#189, isEmpty#190, sum#191] Keys: [] -Functions [2]: [sum(sum_sales#160), sum(number_sales#161)] -Aggregate Attributes [2]: [sum(sum_sales#160)#168, sum(number_sales#161)#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#160)#168 AS sum(sum_sales)#174, sum(number_sales#161)#169 AS sum(number_sales)#175] +Functions [2]: [sum(sum_sales#184), sum(number_sales#185)] +Aggregate Attributes [2]: [sum(sum_sales#184)#192, sum(number_sales#185)#193] +Results [6]: [null AS channel#194, null AS i_brand_id#195, null AS i_class_id#196, null AS i_category_id#197, sum(sum_sales#184)#192 AS sum(sum_sales)#198, sum(number_sales#185)#193 AS sum(number_sales)#199] (127) Union @@ -797,97 +797,97 @@ Subquery:1 Hosting operator id = 72 Hosting Expression = Subquery scalar-subquer (132) Scan parquet spark_catalog.default.store_sales -Output [3]: [ss_quantity#176, ss_list_price#177, ss_sold_date_sk#178] +Output [3]: [ss_quantity#200, ss_list_price#201, ss_sold_date_sk#202] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#178), dynamicpruningexpression(ss_sold_date_sk#178 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(ss_sold_date_sk#202), dynamicpruningexpression(ss_sold_date_sk#202 IN dynamicpruning#12)] ReadSchema: struct (133) ColumnarToRow [codegen id : 2] -Input [3]: [ss_quantity#176, ss_list_price#177, ss_sold_date_sk#178] +Input [3]: [ss_quantity#200, ss_list_price#201, ss_sold_date_sk#202] (134) ReusedExchange [Reuses operator id: 165] -Output [1]: [d_date_sk#179] +Output [1]: [d_date_sk#203] (135) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [ss_sold_date_sk#178] -Right keys [1]: [d_date_sk#179] +Left keys [1]: [ss_sold_date_sk#202] +Right keys [1]: [d_date_sk#203] Join type: Inner Join condition: None (136) Project [codegen id : 2] -Output [2]: [ss_quantity#176 AS quantity#180, ss_list_price#177 AS list_price#181] -Input [4]: [ss_quantity#176, ss_list_price#177, ss_sold_date_sk#178, d_date_sk#179] +Output [2]: [ss_quantity#200 AS quantity#204, ss_list_price#201 AS list_price#205] +Input [4]: [ss_quantity#200, ss_list_price#201, ss_sold_date_sk#202, d_date_sk#203] (137) Scan parquet spark_catalog.default.catalog_sales -Output [3]: [cs_quantity#182, cs_list_price#183, cs_sold_date_sk#184] +Output [3]: [cs_quantity#206, cs_list_price#207, cs_sold_date_sk#208] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#184), dynamicpruningexpression(cs_sold_date_sk#184 IN dynamicpruning#185)] +PartitionFilters: [isnotnull(cs_sold_date_sk#208), dynamicpruningexpression(cs_sold_date_sk#208 IN dynamicpruning#209)] ReadSchema: struct (138) ColumnarToRow [codegen id : 4] -Input [3]: [cs_quantity#182, cs_list_price#183, cs_sold_date_sk#184] +Input [3]: [cs_quantity#206, cs_list_price#207, cs_sold_date_sk#208] (139) ReusedExchange [Reuses operator id: 155] -Output [1]: [d_date_sk#186] +Output [1]: [d_date_sk#210] (140) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [cs_sold_date_sk#184] -Right keys [1]: [d_date_sk#186] +Left keys [1]: [cs_sold_date_sk#208] +Right keys [1]: [d_date_sk#210] Join type: Inner Join condition: None (141) Project [codegen id : 4] -Output [2]: [cs_quantity#182 AS quantity#187, cs_list_price#183 AS list_price#188] -Input [4]: [cs_quantity#182, cs_list_price#183, cs_sold_date_sk#184, d_date_sk#186] +Output [2]: [cs_quantity#206 AS quantity#211, cs_list_price#207 AS list_price#212] +Input [4]: [cs_quantity#206, cs_list_price#207, cs_sold_date_sk#208, d_date_sk#210] (142) Scan parquet spark_catalog.default.web_sales -Output [3]: [ws_quantity#189, ws_list_price#190, ws_sold_date_sk#191] +Output [3]: [ws_quantity#213, ws_list_price#214, ws_sold_date_sk#215] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#191), dynamicpruningexpression(ws_sold_date_sk#191 IN dynamicpruning#185)] +PartitionFilters: [isnotnull(ws_sold_date_sk#215), dynamicpruningexpression(ws_sold_date_sk#215 IN dynamicpruning#209)] ReadSchema: struct (143) ColumnarToRow [codegen id : 6] -Input [3]: [ws_quantity#189, ws_list_price#190, ws_sold_date_sk#191] +Input [3]: [ws_quantity#213, ws_list_price#214, ws_sold_date_sk#215] (144) ReusedExchange [Reuses operator id: 155] -Output [1]: [d_date_sk#192] +Output [1]: [d_date_sk#216] (145) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ws_sold_date_sk#191] -Right keys [1]: [d_date_sk#192] +Left keys [1]: [ws_sold_date_sk#215] +Right keys [1]: [d_date_sk#216] Join type: Inner Join condition: None (146) Project [codegen id : 6] -Output [2]: [ws_quantity#189 AS quantity#193, ws_list_price#190 AS list_price#194] -Input [4]: [ws_quantity#189, ws_list_price#190, ws_sold_date_sk#191, d_date_sk#192] +Output [2]: [ws_quantity#213 AS quantity#217, ws_list_price#214 AS list_price#218] +Input [4]: [ws_quantity#213, ws_list_price#214, ws_sold_date_sk#215, d_date_sk#216] (147) Union (148) HashAggregate [codegen id : 7] -Input [2]: [quantity#180, list_price#181] +Input [2]: [quantity#204, list_price#205] Keys: [] -Functions [1]: [partial_avg((cast(quantity#180 as decimal(10,0)) * list_price#181))] -Aggregate Attributes [2]: [sum#195, count#196] -Results [2]: [sum#197, count#198] +Functions [1]: [partial_avg((cast(quantity#204 as decimal(10,0)) * list_price#205))] +Aggregate Attributes [2]: [sum#219, count#220] +Results [2]: [sum#221, count#222] (149) Exchange -Input [2]: [sum#197, count#198] +Input [2]: [sum#221, count#222] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=20] (150) HashAggregate [codegen id : 8] -Input [2]: [sum#197, count#198] +Input [2]: [sum#221, count#222] Keys: [] -Functions [1]: [avg((cast(quantity#180 as decimal(10,0)) * list_price#181))] -Aggregate Attributes [1]: [avg((cast(quantity#180 as decimal(10,0)) * list_price#181))#199] -Results [1]: [avg((cast(quantity#180 as decimal(10,0)) * list_price#181))#199 AS average_sales#200] +Functions [1]: [avg((cast(quantity#204 as decimal(10,0)) * list_price#205))] +Aggregate Attributes [1]: [avg((cast(quantity#204 as decimal(10,0)) * list_price#205))#223] +Results [1]: [avg((cast(quantity#204 as decimal(10,0)) * list_price#205))#223 AS average_sales#224] -Subquery:2 Hosting operator id = 132 Hosting Expression = ss_sold_date_sk#178 IN dynamicpruning#12 +Subquery:2 Hosting operator id = 132 Hosting Expression = ss_sold_date_sk#202 IN dynamicpruning#12 -Subquery:3 Hosting operator id = 137 Hosting Expression = cs_sold_date_sk#184 IN dynamicpruning#185 +Subquery:3 Hosting operator id = 137 Hosting Expression = cs_sold_date_sk#208 IN dynamicpruning#209 BroadcastExchange (155) +- * Project (154) +- * Filter (153) @@ -896,28 +896,28 @@ BroadcastExchange (155) (151) Scan parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#186, d_year#201] +Output [2]: [d_date_sk#210, d_year#225] 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 (152) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#186, d_year#201] +Input [2]: [d_date_sk#210, d_year#225] (153) Filter [codegen id : 1] -Input [2]: [d_date_sk#186, d_year#201] -Condition : (((isnotnull(d_year#201) AND (d_year#201 >= 1998)) AND (d_year#201 <= 2000)) AND isnotnull(d_date_sk#186)) +Input [2]: [d_date_sk#210, d_year#225] +Condition : (((isnotnull(d_year#225) AND (d_year#225 >= 1998)) AND (d_year#225 <= 2000)) AND isnotnull(d_date_sk#210)) (154) Project [codegen id : 1] -Output [1]: [d_date_sk#186] -Input [2]: [d_date_sk#186, d_year#201] +Output [1]: [d_date_sk#210] +Input [2]: [d_date_sk#210, d_year#225] (155) BroadcastExchange -Input [1]: [d_date_sk#186] +Input [1]: [d_date_sk#210] Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=21] -Subquery:4 Hosting operator id = 142 Hosting Expression = ws_sold_date_sk#191 IN dynamicpruning#185 +Subquery:4 Hosting operator id = 142 Hosting Expression = ws_sold_date_sk#215 IN dynamicpruning#209 Subquery:5 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5 BroadcastExchange (160) @@ -928,22 +928,22 @@ BroadcastExchange (160) (156) Scan parquet spark_catalog.default.date_dim -Output [3]: [d_date_sk#36, d_year#202, d_moy#203] +Output [3]: [d_date_sk#36, d_year#226, d_moy#227] 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 (157) ColumnarToRow [codegen id : 1] -Input [3]: [d_date_sk#36, d_year#202, d_moy#203] +Input [3]: [d_date_sk#36, d_year#226, d_moy#227] (158) Filter [codegen id : 1] -Input [3]: [d_date_sk#36, d_year#202, d_moy#203] -Condition : ((((isnotnull(d_year#202) AND isnotnull(d_moy#203)) AND (d_year#202 = 2000)) AND (d_moy#203 = 11)) AND isnotnull(d_date_sk#36)) +Input [3]: [d_date_sk#36, d_year#226, d_moy#227] +Condition : ((((isnotnull(d_year#226) AND isnotnull(d_moy#227)) AND (d_year#226 = 2000)) AND (d_moy#227 = 11)) AND isnotnull(d_date_sk#36)) (159) Project [codegen id : 1] Output [1]: [d_date_sk#36] -Input [3]: [d_date_sk#36, d_year#202, d_moy#203] +Input [3]: [d_date_sk#36, d_year#226, d_moy#227] (160) BroadcastExchange Input [1]: [d_date_sk#36] @@ -958,22 +958,22 @@ BroadcastExchange (165) (161) Scan parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#13, d_year#204] +Output [2]: [d_date_sk#13, d_year#228] 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 (162) ColumnarToRow [codegen id : 1] -Input [2]: [d_date_sk#13, d_year#204] +Input [2]: [d_date_sk#13, d_year#228] (163) Filter [codegen id : 1] -Input [2]: [d_date_sk#13, d_year#204] -Condition : (((isnotnull(d_year#204) AND (d_year#204 >= 1999)) AND (d_year#204 <= 2001)) AND isnotnull(d_date_sk#13)) +Input [2]: [d_date_sk#13, d_year#228] +Condition : (((isnotnull(d_year#228) AND (d_year#228 >= 1999)) AND (d_year#228 <= 2001)) AND isnotnull(d_date_sk#13)) (164) Project [codegen id : 1] Output [1]: [d_date_sk#13] -Input [2]: [d_date_sk#13, d_year#204] +Input [2]: [d_date_sk#13, d_year#228] (165) BroadcastExchange Input [1]: [d_date_sk#13] 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 898e56e6926f4..cdad294331fea 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 @@ -607,116 +607,116 @@ Aggregate Attributes [2]: [sum(sales#50)#102, sum(number_sales#51)#103] Results [6]: [channel#49, i_brand_id#37, i_class_id#38, i_category_id#39, sum(sales#50)#102 AS sum_sales#104, sum(number_sales#51)#103 AS number_sales#105] (101) ReusedExchange [Reuses operator id: 99] -Output [7]: [channel#49, i_brand_id#106, i_class_id#107, i_category_id#108, sum#99, isEmpty#100, sum#101] +Output [7]: [channel#106, i_brand_id#107, i_class_id#108, i_category_id#109, sum#110, isEmpty#111, sum#112] (102) HashAggregate [codegen id : 160] -Input [7]: [channel#49, i_brand_id#106, i_class_id#107, i_category_id#108, sum#99, isEmpty#100, sum#101] -Keys [4]: [channel#49, i_brand_id#106, i_class_id#107, i_category_id#108] -Functions [2]: [sum(sales#50), sum(number_sales#51)] -Aggregate Attributes [2]: [sum(sales#50)#102, sum(number_sales#51)#103] -Results [5]: [channel#49, i_brand_id#106, i_class_id#107, sum(sales#50)#102 AS sum_sales#109, sum(number_sales#51)#103 AS number_sales#110] +Input [7]: [channel#106, i_brand_id#107, i_class_id#108, i_category_id#109, sum#110, isEmpty#111, sum#112] +Keys [4]: [channel#106, i_brand_id#107, i_class_id#108, i_category_id#109] +Functions [2]: [sum(sales#113), sum(number_sales#114)] +Aggregate Attributes [2]: [sum(sales#113)#102, sum(number_sales#114)#103] +Results [5]: [channel#106, i_brand_id#107, i_class_id#108, sum(sales#113)#102 AS sum_sales#115, sum(number_sales#114)#103 AS number_sales#116] (103) HashAggregate [codegen id : 160] -Input [5]: [channel#49, i_brand_id#106, i_class_id#107, sum_sales#109, number_sales#110] -Keys [3]: [channel#49, i_brand_id#106, i_class_id#107] -Functions [2]: [partial_sum(sum_sales#109), partial_sum(number_sales#110)] -Aggregate Attributes [3]: [sum#111, isEmpty#112, sum#113] -Results [6]: [channel#49, i_brand_id#106, i_class_id#107, sum#114, isEmpty#115, sum#116] +Input [5]: [channel#106, i_brand_id#107, i_class_id#108, sum_sales#115, number_sales#116] +Keys [3]: [channel#106, i_brand_id#107, i_class_id#108] +Functions [2]: [partial_sum(sum_sales#115), partial_sum(number_sales#116)] +Aggregate Attributes [3]: [sum#117, isEmpty#118, sum#119] +Results [6]: [channel#106, i_brand_id#107, i_class_id#108, sum#120, isEmpty#121, sum#122] (104) Exchange -Input [6]: [channel#49, i_brand_id#106, i_class_id#107, sum#114, isEmpty#115, sum#116] -Arguments: hashpartitioning(channel#49, i_brand_id#106, i_class_id#107, 5), ENSURE_REQUIREMENTS, [plan_id=13] +Input [6]: [channel#106, i_brand_id#107, i_class_id#108, sum#120, isEmpty#121, sum#122] +Arguments: hashpartitioning(channel#106, i_brand_id#107, i_class_id#108, 5), ENSURE_REQUIREMENTS, [plan_id=13] (105) HashAggregate [codegen id : 161] -Input [6]: [channel#49, i_brand_id#106, i_class_id#107, sum#114, isEmpty#115, sum#116] -Keys [3]: [channel#49, i_brand_id#106, i_class_id#107] -Functions [2]: [sum(sum_sales#109), sum(number_sales#110)] -Aggregate Attributes [2]: [sum(sum_sales#109)#117, sum(number_sales#110)#118] -Results [6]: [channel#49, i_brand_id#106, i_class_id#107, null AS i_category_id#119, sum(sum_sales#109)#117 AS sum(sum_sales)#120, sum(number_sales#110)#118 AS sum(number_sales)#121] +Input [6]: [channel#106, i_brand_id#107, i_class_id#108, sum#120, isEmpty#121, sum#122] +Keys [3]: [channel#106, i_brand_id#107, i_class_id#108] +Functions [2]: [sum(sum_sales#115), sum(number_sales#116)] +Aggregate Attributes [2]: [sum(sum_sales#115)#123, sum(number_sales#116)#124] +Results [6]: [channel#106, i_brand_id#107, i_class_id#108, null AS i_category_id#125, sum(sum_sales#115)#123 AS sum(sum_sales)#126, sum(number_sales#116)#124 AS sum(number_sales)#127] (106) ReusedExchange [Reuses operator id: 99] -Output [7]: [channel#49, i_brand_id#122, i_class_id#123, i_category_id#124, sum#99, isEmpty#100, sum#101] +Output [7]: [channel#128, i_brand_id#129, i_class_id#130, i_category_id#131, sum#132, isEmpty#133, sum#134] (107) HashAggregate [codegen id : 241] -Input [7]: [channel#49, i_brand_id#122, i_class_id#123, i_category_id#124, sum#99, isEmpty#100, sum#101] -Keys [4]: [channel#49, i_brand_id#122, i_class_id#123, i_category_id#124] -Functions [2]: [sum(sales#50), sum(number_sales#51)] -Aggregate Attributes [2]: [sum(sales#50)#102, sum(number_sales#51)#103] -Results [4]: [channel#49, i_brand_id#122, sum(sales#50)#102 AS sum_sales#125, sum(number_sales#51)#103 AS number_sales#126] +Input [7]: [channel#128, i_brand_id#129, i_class_id#130, i_category_id#131, sum#132, isEmpty#133, sum#134] +Keys [4]: [channel#128, i_brand_id#129, i_class_id#130, i_category_id#131] +Functions [2]: [sum(sales#135), sum(number_sales#136)] +Aggregate Attributes [2]: [sum(sales#135)#102, sum(number_sales#136)#103] +Results [4]: [channel#128, i_brand_id#129, sum(sales#135)#102 AS sum_sales#137, sum(number_sales#136)#103 AS number_sales#138] (108) HashAggregate [codegen id : 241] -Input [4]: [channel#49, i_brand_id#122, sum_sales#125, number_sales#126] -Keys [2]: [channel#49, i_brand_id#122] -Functions [2]: [partial_sum(sum_sales#125), partial_sum(number_sales#126)] -Aggregate Attributes [3]: [sum#127, isEmpty#128, sum#129] -Results [5]: [channel#49, i_brand_id#122, sum#130, isEmpty#131, sum#132] +Input [4]: [channel#128, i_brand_id#129, sum_sales#137, number_sales#138] +Keys [2]: [channel#128, i_brand_id#129] +Functions [2]: [partial_sum(sum_sales#137), partial_sum(number_sales#138)] +Aggregate Attributes [3]: [sum#139, isEmpty#140, sum#141] +Results [5]: [channel#128, i_brand_id#129, sum#142, isEmpty#143, sum#144] (109) Exchange -Input [5]: [channel#49, i_brand_id#122, sum#130, isEmpty#131, sum#132] -Arguments: hashpartitioning(channel#49, i_brand_id#122, 5), ENSURE_REQUIREMENTS, [plan_id=14] +Input [5]: [channel#128, i_brand_id#129, sum#142, isEmpty#143, sum#144] +Arguments: hashpartitioning(channel#128, i_brand_id#129, 5), ENSURE_REQUIREMENTS, [plan_id=14] (110) HashAggregate [codegen id : 242] -Input [5]: [channel#49, i_brand_id#122, sum#130, isEmpty#131, sum#132] -Keys [2]: [channel#49, i_brand_id#122] -Functions [2]: [sum(sum_sales#125), sum(number_sales#126)] -Aggregate Attributes [2]: [sum(sum_sales#125)#133, sum(number_sales#126)#134] -Results [6]: [channel#49, i_brand_id#122, null AS i_class_id#135, null AS i_category_id#136, sum(sum_sales#125)#133 AS sum(sum_sales)#137, sum(number_sales#126)#134 AS sum(number_sales)#138] +Input [5]: [channel#128, i_brand_id#129, sum#142, isEmpty#143, sum#144] +Keys [2]: [channel#128, i_brand_id#129] +Functions [2]: [sum(sum_sales#137), sum(number_sales#138)] +Aggregate Attributes [2]: [sum(sum_sales#137)#145, sum(number_sales#138)#146] +Results [6]: [channel#128, i_brand_id#129, null AS i_class_id#147, null AS i_category_id#148, sum(sum_sales#137)#145 AS sum(sum_sales)#149, sum(number_sales#138)#146 AS sum(number_sales)#150] (111) ReusedExchange [Reuses operator id: 99] -Output [7]: [channel#49, i_brand_id#139, i_class_id#140, i_category_id#141, sum#99, isEmpty#100, sum#101] +Output [7]: [channel#151, i_brand_id#152, i_class_id#153, i_category_id#154, sum#155, isEmpty#156, sum#157] (112) HashAggregate [codegen id : 322] -Input [7]: [channel#49, i_brand_id#139, i_class_id#140, i_category_id#141, sum#99, isEmpty#100, sum#101] -Keys [4]: [channel#49, i_brand_id#139, i_class_id#140, i_category_id#141] -Functions [2]: [sum(sales#50), sum(number_sales#51)] -Aggregate Attributes [2]: [sum(sales#50)#102, sum(number_sales#51)#103] -Results [3]: [channel#49, sum(sales#50)#102 AS sum_sales#142, sum(number_sales#51)#103 AS number_sales#143] +Input [7]: [channel#151, i_brand_id#152, i_class_id#153, i_category_id#154, sum#155, isEmpty#156, sum#157] +Keys [4]: [channel#151, i_brand_id#152, i_class_id#153, i_category_id#154] +Functions [2]: [sum(sales#158), sum(number_sales#159)] +Aggregate Attributes [2]: [sum(sales#158)#102, sum(number_sales#159)#103] +Results [3]: [channel#151, sum(sales#158)#102 AS sum_sales#160, sum(number_sales#159)#103 AS number_sales#161] (113) HashAggregate [codegen id : 322] -Input [3]: [channel#49, sum_sales#142, number_sales#143] -Keys [1]: [channel#49] -Functions [2]: [partial_sum(sum_sales#142), partial_sum(number_sales#143)] -Aggregate Attributes [3]: [sum#144, isEmpty#145, sum#146] -Results [4]: [channel#49, sum#147, isEmpty#148, sum#149] +Input [3]: [channel#151, sum_sales#160, number_sales#161] +Keys [1]: [channel#151] +Functions [2]: [partial_sum(sum_sales#160), partial_sum(number_sales#161)] +Aggregate Attributes [3]: [sum#162, isEmpty#163, sum#164] +Results [4]: [channel#151, sum#165, isEmpty#166, sum#167] (114) Exchange -Input [4]: [channel#49, sum#147, isEmpty#148, sum#149] -Arguments: hashpartitioning(channel#49, 5), ENSURE_REQUIREMENTS, [plan_id=15] +Input [4]: [channel#151, sum#165, isEmpty#166, sum#167] +Arguments: hashpartitioning(channel#151, 5), ENSURE_REQUIREMENTS, [plan_id=15] (115) HashAggregate [codegen id : 323] -Input [4]: [channel#49, sum#147, isEmpty#148, sum#149] -Keys [1]: [channel#49] -Functions [2]: [sum(sum_sales#142), sum(number_sales#143)] -Aggregate Attributes [2]: [sum(sum_sales#142)#150, sum(number_sales#143)#151] -Results [6]: [channel#49, null AS i_brand_id#152, null AS i_class_id#153, null AS i_category_id#154, sum(sum_sales#142)#150 AS sum(sum_sales)#155, sum(number_sales#143)#151 AS sum(number_sales)#156] +Input [4]: [channel#151, sum#165, isEmpty#166, sum#167] +Keys [1]: [channel#151] +Functions [2]: [sum(sum_sales#160), sum(number_sales#161)] +Aggregate Attributes [2]: [sum(sum_sales#160)#168, sum(number_sales#161)#169] +Results [6]: [channel#151, null AS i_brand_id#170, null AS i_class_id#171, null AS i_category_id#172, sum(sum_sales#160)#168 AS sum(sum_sales)#173, sum(number_sales#161)#169 AS sum(number_sales)#174] (116) ReusedExchange [Reuses operator id: 99] -Output [7]: [channel#49, i_brand_id#157, i_class_id#158, i_category_id#159, sum#99, isEmpty#100, sum#101] +Output [7]: [channel#175, i_brand_id#176, i_class_id#177, i_category_id#178, sum#179, isEmpty#180, sum#181] (117) HashAggregate [codegen id : 403] -Input [7]: [channel#49, i_brand_id#157, i_class_id#158, i_category_id#159, sum#99, isEmpty#100, sum#101] -Keys [4]: [channel#49, i_brand_id#157, i_class_id#158, i_category_id#159] -Functions [2]: [sum(sales#50), sum(number_sales#51)] -Aggregate Attributes [2]: [sum(sales#50)#102, sum(number_sales#51)#103] -Results [2]: [sum(sales#50)#102 AS sum_sales#160, sum(number_sales#51)#103 AS number_sales#161] +Input [7]: [channel#175, i_brand_id#176, i_class_id#177, i_category_id#178, sum#179, isEmpty#180, sum#181] +Keys [4]: [channel#175, i_brand_id#176, i_class_id#177, i_category_id#178] +Functions [2]: [sum(sales#182), sum(number_sales#183)] +Aggregate Attributes [2]: [sum(sales#182)#102, sum(number_sales#183)#103] +Results [2]: [sum(sales#182)#102 AS sum_sales#184, sum(number_sales#183)#103 AS number_sales#185] (118) HashAggregate [codegen id : 403] -Input [2]: [sum_sales#160, number_sales#161] +Input [2]: [sum_sales#184, number_sales#185] Keys: [] -Functions [2]: [partial_sum(sum_sales#160), partial_sum(number_sales#161)] -Aggregate Attributes [3]: [sum#162, isEmpty#163, sum#164] -Results [3]: [sum#165, isEmpty#166, sum#167] +Functions [2]: [partial_sum(sum_sales#184), partial_sum(number_sales#185)] +Aggregate Attributes [3]: [sum#186, isEmpty#187, sum#188] +Results [3]: [sum#189, isEmpty#190, sum#191] (119) Exchange -Input [3]: [sum#165, isEmpty#166, sum#167] +Input [3]: [sum#189, isEmpty#190, sum#191] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=16] (120) HashAggregate [codegen id : 404] -Input [3]: [sum#165, isEmpty#166, sum#167] +Input [3]: [sum#189, isEmpty#190, sum#191] Keys: [] -Functions [2]: [sum(sum_sales#160), sum(number_sales#161)] -Aggregate Attributes [2]: [sum(sum_sales#160)#168, sum(number_sales#161)#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#160)#168 AS sum(sum_sales)#174, sum(number_sales#161)#169 AS sum(number_sales)#175] +Functions [2]: [sum(sum_sales#184), sum(number_sales#185)] +Aggregate Attributes [2]: [sum(sum_sales#184)#192, sum(number_sales#185)#193] +Results [6]: [null AS channel#194, null AS i_brand_id#195, null AS i_class_id#196, null AS i_category_id#197, sum(sum_sales#184)#192 AS sum(sum_sales)#198, sum(number_sales#185)#193 AS sum(number_sales)#199] (121) Union @@ -767,97 +767,97 @@ Subquery:1 Hosting operator id = 66 Hosting Expression = Subquery scalar-subquer (126) Scan parquet spark_catalog.default.store_sales -Output [3]: [ss_quantity#176, ss_list_price#177, ss_sold_date_sk#178] +Output [3]: [ss_quantity#200, ss_list_price#201, ss_sold_date_sk#202] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#178), dynamicpruningexpression(ss_sold_date_sk#178 IN dynamicpruning#12)] +PartitionFilters: [isnotnull(ss_sold_date_sk#202), dynamicpruningexpression(ss_sold_date_sk#202 IN dynamicpruning#12)] ReadSchema: struct (127) ColumnarToRow [codegen id : 2] -Input [3]: [ss_quantity#176, ss_list_price#177, ss_sold_date_sk#178] +Input [3]: [ss_quantity#200, ss_list_price#201, ss_sold_date_sk#202] (128) ReusedExchange [Reuses operator id: 159] -Output [1]: [d_date_sk#179] +Output [1]: [d_date_sk#203] (129) BroadcastHashJoin [codegen id : 2] -Left keys [1]: [ss_sold_date_sk#178] -Right keys [1]: [d_date_sk#179] +Left keys [1]: [ss_sold_date_sk#202] +Right keys [1]: [d_date_sk#203] Join type: Inner Join condition: None (130) Project [codegen id : 2] -Output [2]: [ss_quantity#176 AS quantity#180, ss_list_price#177 AS list_price#181] -Input [4]: [ss_quantity#176, ss_list_price#177, ss_sold_date_sk#178, d_date_sk#179] +Output [2]: [ss_quantity#200 AS quantity#204, ss_list_price#201 AS list_price#205] +Input [4]: [ss_quantity#200, ss_list_price#201, ss_sold_date_sk#202, d_date_sk#203] (131) Scan parquet spark_catalog.default.catalog_sales -Output [3]: [cs_quantity#182, cs_list_price#183, cs_sold_date_sk#184] +Output [3]: [cs_quantity#206, cs_list_price#207, cs_sold_date_sk#208] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#184), dynamicpruningexpression(cs_sold_date_sk#184 IN dynamicpruning#185)] +PartitionFilters: [isnotnull(cs_sold_date_sk#208), dynamicpruningexpression(cs_sold_date_sk#208 IN dynamicpruning#209)] ReadSchema: struct (132) ColumnarToRow [codegen id : 4] -Input [3]: [cs_quantity#182, cs_list_price#183, cs_sold_date_sk#184] +Input [3]: [cs_quantity#206, cs_list_price#207, cs_sold_date_sk#208] (133) ReusedExchange [Reuses operator id: 149] -Output [1]: [d_date_sk#186] +Output [1]: [d_date_sk#210] (134) BroadcastHashJoin [codegen id : 4] -Left keys [1]: [cs_sold_date_sk#184] -Right keys [1]: [d_date_sk#186] +Left keys [1]: [cs_sold_date_sk#208] +Right keys [1]: [d_date_sk#210] Join type: Inner Join condition: None (135) Project [codegen id : 4] -Output [2]: [cs_quantity#182 AS quantity#187, cs_list_price#183 AS list_price#188] -Input [4]: [cs_quantity#182, cs_list_price#183, cs_sold_date_sk#184, d_date_sk#186] +Output [2]: [cs_quantity#206 AS quantity#211, cs_list_price#207 AS list_price#212] +Input [4]: [cs_quantity#206, cs_list_price#207, cs_sold_date_sk#208, d_date_sk#210] (136) Scan parquet spark_catalog.default.web_sales -Output [3]: [ws_quantity#189, ws_list_price#190, ws_sold_date_sk#191] +Output [3]: [ws_quantity#213, ws_list_price#214, ws_sold_date_sk#215] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#191), dynamicpruningexpression(ws_sold_date_sk#191 IN dynamicpruning#185)] +PartitionFilters: [isnotnull(ws_sold_date_sk#215), dynamicpruningexpression(ws_sold_date_sk#215 IN dynamicpruning#209)] ReadSchema: struct (137) ColumnarToRow [codegen id : 6] -Input [3]: [ws_quantity#189, ws_list_price#190, ws_sold_date_sk#191] +Input [3]: [ws_quantity#213, ws_list_price#214, ws_sold_date_sk#215] (138) ReusedExchange [Reuses operator id: 149] -Output [1]: [d_date_sk#192] +Output [1]: [d_date_sk#216] (139) BroadcastHashJoin [codegen id : 6] -Left keys [1]: [ws_sold_date_sk#191] -Right keys [1]: [d_date_sk#192] +Left keys [1]: [ws_sold_date_sk#215] +Right keys [1]: [d_date_sk#216] Join type: Inner Join condition: None (140) Project [codegen id : 6] -Output [2]: [ws_quantity#189 AS quantity#193, ws_list_price#190 AS list_price#194] -Input [4]: [ws_quantity#189, ws_list_price#190, ws_sold_date_sk#191, d_date_sk#192] +Output [2]: [ws_quantity#213 AS quantity#217, ws_list_price#214 AS list_price#218] +Input [4]: [ws_quantity#213, ws_list_price#214, ws_sold_date_sk#215, d_date_sk#216] (141) Union (142) HashAggregate [codegen id : 7] -Input [2]: [quantity#180, list_price#181] +Input [2]: [quantity#204, list_price#205] Keys: [] -Functions [1]: [partial_avg((cast(quantity#180 as decimal(10,0)) * list_price#181))] -Aggregate Attributes [2]: [sum#195, count#196] -Results [2]: [sum#197, count#198] +Functions [1]: [partial_avg((cast(quantity#204 as decimal(10,0)) * list_price#205))] +Aggregate Attributes [2]: [sum#219, count#220] +Results [2]: [sum#221, count#222] (143) Exchange -Input [2]: [sum#197, count#198] +Input [2]: [sum#221, count#222] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=18] (144) HashAggregate [codegen id : 8] -Input [2]: [sum#197, count#198] +Input [2]: [sum#221, count#222] Keys: [] -Functions [1]: [avg((cast(quantity#180 as decimal(10,0)) * list_price#181))] -Aggregate Attributes [1]: [avg((cast(quantity#180 as decimal(10,0)) * list_price#181))#199] -Results [1]: [avg((cast(quantity#180 as decimal(10,0)) * list_price#181))#199 AS average_sales#200] +Functions [1]: [avg((cast(quantity#204 as decimal(10,0)) * list_price#205))] +Aggregate Attributes [1]: [avg((cast(quantity#204 as decimal(10,0)) * list_price#205))#223] +Results [1]: [avg((cast(quantity#204 as decimal(10,0)) * list_price#205))#223 AS average_sales#224] -Subquery:2 Hosting operator id = 126 Hosting Expression = ss_sold_date_sk#178 IN dynamicpruning#12 +Subquery:2 Hosting operator id = 126 Hosting Expression = ss_sold_date_sk#202 IN dynamicpruning#12 -Subquery:3 Hosting operator id = 131 Hosting Expression = cs_sold_date_sk#184 IN dynamicpruning#185 +Subquery:3 Hosting operator id = 131 Hosting Expression = cs_sold_date_sk#208 IN dynamicpruning#209 BroadcastExchange (149) +- * Project (148) +- * Filter (147) @@ -866,28 +866,28 @@ BroadcastExchange (149) (145) Scan parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#186, d_year#201] +Output [2]: [d_date_sk#210, d_year#225] 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#186, d_year#201] +Input [2]: [d_date_sk#210, d_year#225] (147) Filter [codegen id : 1] -Input [2]: [d_date_sk#186, d_year#201] -Condition : (((isnotnull(d_year#201) AND (d_year#201 >= 1998)) AND (d_year#201 <= 2000)) AND isnotnull(d_date_sk#186)) +Input [2]: [d_date_sk#210, d_year#225] +Condition : (((isnotnull(d_year#225) AND (d_year#225 >= 1998)) AND (d_year#225 <= 2000)) AND isnotnull(d_date_sk#210)) (148) Project [codegen id : 1] -Output [1]: [d_date_sk#186] -Input [2]: [d_date_sk#186, d_year#201] +Output [1]: [d_date_sk#210] +Input [2]: [d_date_sk#210, d_year#225] (149) BroadcastExchange -Input [1]: [d_date_sk#186] +Input [1]: [d_date_sk#210] 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#191 IN dynamicpruning#185 +Subquery:4 Hosting operator id = 136 Hosting Expression = ws_sold_date_sk#215 IN dynamicpruning#209 Subquery:5 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5 BroadcastExchange (154) @@ -898,22 +898,22 @@ BroadcastExchange (154) (150) Scan parquet spark_catalog.default.date_dim -Output [3]: [d_date_sk#40, d_year#202, d_moy#203] +Output [3]: [d_date_sk#40, d_year#226, d_moy#227] 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#40, d_year#202, d_moy#203] +Input [3]: [d_date_sk#40, d_year#226, d_moy#227] (152) Filter [codegen id : 1] -Input [3]: [d_date_sk#40, d_year#202, d_moy#203] -Condition : ((((isnotnull(d_year#202) AND isnotnull(d_moy#203)) AND (d_year#202 = 2000)) AND (d_moy#203 = 11)) AND isnotnull(d_date_sk#40)) +Input [3]: [d_date_sk#40, d_year#226, d_moy#227] +Condition : ((((isnotnull(d_year#226) AND isnotnull(d_moy#227)) AND (d_year#226 = 2000)) AND (d_moy#227 = 11)) AND isnotnull(d_date_sk#40)) (153) Project [codegen id : 1] Output [1]: [d_date_sk#40] -Input [3]: [d_date_sk#40, d_year#202, d_moy#203] +Input [3]: [d_date_sk#40, d_year#226, d_moy#227] (154) BroadcastExchange Input [1]: [d_date_sk#40] @@ -928,22 +928,22 @@ BroadcastExchange (159) (155) Scan parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#24, d_year#204] +Output [2]: [d_date_sk#24, d_year#228] 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#24, d_year#204] +Input [2]: [d_date_sk#24, d_year#228] (157) Filter [codegen id : 1] -Input [2]: [d_date_sk#24, d_year#204] -Condition : (((isnotnull(d_year#204) AND (d_year#204 >= 1999)) AND (d_year#204 <= 2001)) AND isnotnull(d_date_sk#24)) +Input [2]: [d_date_sk#24, d_year#228] +Condition : (((isnotnull(d_year#228) AND (d_year#228 >= 1999)) AND (d_year#228 <= 2001)) AND isnotnull(d_date_sk#24)) (158) Project [codegen id : 1] Output [1]: [d_date_sk#24] -Input [2]: [d_date_sk#24, d_year#204] +Input [2]: [d_date_sk#24, d_year#228] (159) BroadcastExchange Input [1]: [d_date_sk#24] 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 fb185e813044f..1d1b56a42ad55 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 @@ -444,60 +444,60 @@ Aggregate Attributes [3]: [sum(sales#39)#139, sum(returns#40)#140, sum(profit#41 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#145, id#146, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#147, isEmpty#148] +Output [8]: [channel#145, id#146, sum#147, isEmpty#148, sum#149, isEmpty#150, sum#151, isEmpty#152] (77) HashAggregate [codegen id : 48] -Input [8]: [channel#145, id#146, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#147, isEmpty#148] +Input [8]: [channel#145, id#146, sum#147, isEmpty#148, sum#149, isEmpty#150, sum#151, isEmpty#152] Keys [2]: [channel#145, id#146] -Functions [3]: [sum(sales#39), sum(returns#40), sum(profit#149)] -Aggregate Attributes [3]: [sum(sales#39)#139, sum(returns#40)#140, sum(profit#149)#141] -Results [4]: [channel#145, sum(sales#39)#139 AS sales#150, sum(returns#40)#140 AS returns#151, sum(profit#149)#141 AS profit#152] +Functions [3]: [sum(sales#153), sum(returns#154), sum(profit#155)] +Aggregate Attributes [3]: [sum(sales#153)#139, sum(returns#154)#140, sum(profit#155)#141] +Results [4]: [channel#145, sum(sales#153)#139 AS sales#156, sum(returns#154)#140 AS returns#157, sum(profit#155)#141 AS profit#158] (78) HashAggregate [codegen id : 48] -Input [4]: [channel#145, sales#150, returns#151, profit#152] +Input [4]: [channel#145, sales#156, returns#157, profit#158] Keys [1]: [channel#145] -Functions [3]: [partial_sum(sales#150), partial_sum(returns#151), partial_sum(profit#152)] -Aggregate Attributes [6]: [sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158] -Results [7]: [channel#145, sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Functions [3]: [partial_sum(sales#156), partial_sum(returns#157), partial_sum(profit#158)] +Aggregate Attributes [6]: [sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Results [7]: [channel#145, sum#165, isEmpty#166, sum#167, isEmpty#168, sum#169, isEmpty#170] (79) Exchange -Input [7]: [channel#145, sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Input [7]: [channel#145, sum#165, isEmpty#166, sum#167, isEmpty#168, sum#169, isEmpty#170] Arguments: hashpartitioning(channel#145, 5), ENSURE_REQUIREMENTS, [plan_id=10] (80) HashAggregate [codegen id : 49] -Input [7]: [channel#145, sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Input [7]: [channel#145, sum#165, isEmpty#166, sum#167, isEmpty#168, sum#169, isEmpty#170] Keys [1]: [channel#145] -Functions [3]: [sum(sales#150), sum(returns#151), sum(profit#152)] -Aggregate Attributes [3]: [sum(sales#150)#165, sum(returns#151)#166, sum(profit#152)#167] -Results [5]: [channel#145, null AS id#168, sum(sales#150)#165 AS sum(sales)#169, sum(returns#151)#166 AS sum(returns)#170, sum(profit#152)#167 AS sum(profit)#171] +Functions [3]: [sum(sales#156), sum(returns#157), sum(profit#158)] +Aggregate Attributes [3]: [sum(sales#156)#171, sum(returns#157)#172, sum(profit#158)#173] +Results [5]: [channel#145, null AS id#174, sum(sales#156)#171 AS sum(sales)#175, sum(returns#157)#172 AS sum(returns)#176, sum(profit#158)#173 AS sum(profit)#177] (81) ReusedExchange [Reuses operator id: 74] -Output [8]: [channel#172, id#173, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#174, isEmpty#175] +Output [8]: [channel#178, id#179, sum#180, isEmpty#181, sum#182, isEmpty#183, sum#184, isEmpty#185] (82) HashAggregate [codegen id : 73] -Input [8]: [channel#172, id#173, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#174, isEmpty#175] -Keys [2]: [channel#172, id#173] -Functions [3]: [sum(sales#39), sum(returns#40), sum(profit#176)] -Aggregate Attributes [3]: [sum(sales#39)#139, sum(returns#40)#140, sum(profit#176)#141] -Results [3]: [sum(sales#39)#139 AS sales#177, sum(returns#40)#140 AS returns#178, sum(profit#176)#141 AS profit#179] +Input [8]: [channel#178, id#179, sum#180, isEmpty#181, sum#182, isEmpty#183, sum#184, isEmpty#185] +Keys [2]: [channel#178, id#179] +Functions [3]: [sum(sales#186), sum(returns#187), sum(profit#188)] +Aggregate Attributes [3]: [sum(sales#186)#139, sum(returns#187)#140, sum(profit#188)#141] +Results [3]: [sum(sales#186)#139 AS sales#189, sum(returns#187)#140 AS returns#190, sum(profit#188)#141 AS profit#191] (83) HashAggregate [codegen id : 73] -Input [3]: [sales#177, returns#178, profit#179] +Input [3]: [sales#189, returns#190, profit#191] Keys: [] -Functions [3]: [partial_sum(sales#177), partial_sum(returns#178), partial_sum(profit#179)] -Aggregate Attributes [6]: [sum#180, isEmpty#181, sum#182, isEmpty#183, sum#184, isEmpty#185] -Results [6]: [sum#186, isEmpty#187, sum#188, isEmpty#189, sum#190, isEmpty#191] +Functions [3]: [partial_sum(sales#189), partial_sum(returns#190), partial_sum(profit#191)] +Aggregate Attributes [6]: [sum#192, isEmpty#193, sum#194, isEmpty#195, sum#196, isEmpty#197] +Results [6]: [sum#198, isEmpty#199, sum#200, isEmpty#201, sum#202, isEmpty#203] (84) Exchange -Input [6]: [sum#186, isEmpty#187, sum#188, isEmpty#189, sum#190, isEmpty#191] +Input [6]: [sum#198, isEmpty#199, sum#200, isEmpty#201, sum#202, isEmpty#203] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=11] (85) HashAggregate [codegen id : 74] -Input [6]: [sum#186, isEmpty#187, sum#188, isEmpty#189, sum#190, isEmpty#191] +Input [6]: [sum#198, isEmpty#199, sum#200, isEmpty#201, sum#202, isEmpty#203] Keys: [] -Functions [3]: [sum(sales#177), sum(returns#178), sum(profit#179)] -Aggregate Attributes [3]: [sum(sales#177)#192, sum(returns#178)#193, sum(profit#179)#194] -Results [5]: [null AS channel#195, null AS id#196, sum(sales#177)#192 AS sum(sales)#197, sum(returns#178)#193 AS sum(returns)#198, sum(profit#179)#194 AS sum(profit)#199] +Functions [3]: [sum(sales#189), sum(returns#190), sum(profit#191)] +Aggregate Attributes [3]: [sum(sales#189)#204, sum(returns#190)#205, sum(profit#191)#206] +Results [5]: [null AS channel#207, null AS id#208, sum(sales#189)#204 AS sum(sales)#209, sum(returns#190)#205 AS sum(returns)#210, sum(profit#191)#206 AS sum(profit)#211] (86) Union @@ -534,22 +534,22 @@ BroadcastExchange (95) (91) Scan parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#24, d_date#200] +Output [2]: [d_date_sk#24, d_date#212] 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#24, d_date#200] +Input [2]: [d_date_sk#24, d_date#212] (93) Filter [codegen id : 1] -Input [2]: [d_date_sk#24, d_date#200] -Condition : (((isnotnull(d_date#200) AND (d_date#200 >= 1998-08-04)) AND (d_date#200 <= 1998-08-18)) AND isnotnull(d_date_sk#24)) +Input [2]: [d_date_sk#24, d_date#212] +Condition : (((isnotnull(d_date#212) AND (d_date#212 >= 1998-08-04)) AND (d_date#212 <= 1998-08-18)) AND isnotnull(d_date_sk#24)) (94) Project [codegen id : 1] Output [1]: [d_date_sk#24] -Input [2]: [d_date_sk#24, d_date#200] +Input [2]: [d_date_sk#24, d_date#212] (95) BroadcastExchange Input [1]: [d_date_sk#24] 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 d93611ad5dc6c..34c6ecf3cf2fa 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 @@ -429,60 +429,60 @@ Aggregate Attributes [3]: [sum(sales#39)#139, sum(returns#40)#140, sum(profit#41 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#145, id#146, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#147, isEmpty#148] +Output [8]: [channel#145, id#146, sum#147, isEmpty#148, sum#149, isEmpty#150, sum#151, isEmpty#152] (74) HashAggregate [codegen id : 42] -Input [8]: [channel#145, id#146, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#147, isEmpty#148] +Input [8]: [channel#145, id#146, sum#147, isEmpty#148, sum#149, isEmpty#150, sum#151, isEmpty#152] Keys [2]: [channel#145, id#146] -Functions [3]: [sum(sales#39), sum(returns#40), sum(profit#149)] -Aggregate Attributes [3]: [sum(sales#39)#139, sum(returns#40)#140, sum(profit#149)#141] -Results [4]: [channel#145, sum(sales#39)#139 AS sales#150, sum(returns#40)#140 AS returns#151, sum(profit#149)#141 AS profit#152] +Functions [3]: [sum(sales#153), sum(returns#154), sum(profit#155)] +Aggregate Attributes [3]: [sum(sales#153)#139, sum(returns#154)#140, sum(profit#155)#141] +Results [4]: [channel#145, sum(sales#153)#139 AS sales#156, sum(returns#154)#140 AS returns#157, sum(profit#155)#141 AS profit#158] (75) HashAggregate [codegen id : 42] -Input [4]: [channel#145, sales#150, returns#151, profit#152] +Input [4]: [channel#145, sales#156, returns#157, profit#158] Keys [1]: [channel#145] -Functions [3]: [partial_sum(sales#150), partial_sum(returns#151), partial_sum(profit#152)] -Aggregate Attributes [6]: [sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158] -Results [7]: [channel#145, sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Functions [3]: [partial_sum(sales#156), partial_sum(returns#157), partial_sum(profit#158)] +Aggregate Attributes [6]: [sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Results [7]: [channel#145, sum#165, isEmpty#166, sum#167, isEmpty#168, sum#169, isEmpty#170] (76) Exchange -Input [7]: [channel#145, sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Input [7]: [channel#145, sum#165, isEmpty#166, sum#167, isEmpty#168, sum#169, isEmpty#170] Arguments: hashpartitioning(channel#145, 5), ENSURE_REQUIREMENTS, [plan_id=9] (77) HashAggregate [codegen id : 43] -Input [7]: [channel#145, sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Input [7]: [channel#145, sum#165, isEmpty#166, sum#167, isEmpty#168, sum#169, isEmpty#170] Keys [1]: [channel#145] -Functions [3]: [sum(sales#150), sum(returns#151), sum(profit#152)] -Aggregate Attributes [3]: [sum(sales#150)#165, sum(returns#151)#166, sum(profit#152)#167] -Results [5]: [channel#145, null AS id#168, sum(sales#150)#165 AS sum(sales)#169, sum(returns#151)#166 AS sum(returns)#170, sum(profit#152)#167 AS sum(profit)#171] +Functions [3]: [sum(sales#156), sum(returns#157), sum(profit#158)] +Aggregate Attributes [3]: [sum(sales#156)#171, sum(returns#157)#172, sum(profit#158)#173] +Results [5]: [channel#145, null AS id#174, sum(sales#156)#171 AS sum(sales)#175, sum(returns#157)#172 AS sum(returns)#176, sum(profit#158)#173 AS sum(profit)#177] (78) ReusedExchange [Reuses operator id: 71] -Output [8]: [channel#172, id#173, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#174, isEmpty#175] +Output [8]: [channel#178, id#179, sum#180, isEmpty#181, sum#182, isEmpty#183, sum#184, isEmpty#185] (79) HashAggregate [codegen id : 64] -Input [8]: [channel#172, id#173, sum#133, isEmpty#134, sum#135, isEmpty#136, sum#174, isEmpty#175] -Keys [2]: [channel#172, id#173] -Functions [3]: [sum(sales#39), sum(returns#40), sum(profit#176)] -Aggregate Attributes [3]: [sum(sales#39)#139, sum(returns#40)#140, sum(profit#176)#141] -Results [3]: [sum(sales#39)#139 AS sales#177, sum(returns#40)#140 AS returns#178, sum(profit#176)#141 AS profit#179] +Input [8]: [channel#178, id#179, sum#180, isEmpty#181, sum#182, isEmpty#183, sum#184, isEmpty#185] +Keys [2]: [channel#178, id#179] +Functions [3]: [sum(sales#186), sum(returns#187), sum(profit#188)] +Aggregate Attributes [3]: [sum(sales#186)#139, sum(returns#187)#140, sum(profit#188)#141] +Results [3]: [sum(sales#186)#139 AS sales#189, sum(returns#187)#140 AS returns#190, sum(profit#188)#141 AS profit#191] (80) HashAggregate [codegen id : 64] -Input [3]: [sales#177, returns#178, profit#179] +Input [3]: [sales#189, returns#190, profit#191] Keys: [] -Functions [3]: [partial_sum(sales#177), partial_sum(returns#178), partial_sum(profit#179)] -Aggregate Attributes [6]: [sum#180, isEmpty#181, sum#182, isEmpty#183, sum#184, isEmpty#185] -Results [6]: [sum#186, isEmpty#187, sum#188, isEmpty#189, sum#190, isEmpty#191] +Functions [3]: [partial_sum(sales#189), partial_sum(returns#190), partial_sum(profit#191)] +Aggregate Attributes [6]: [sum#192, isEmpty#193, sum#194, isEmpty#195, sum#196, isEmpty#197] +Results [6]: [sum#198, isEmpty#199, sum#200, isEmpty#201, sum#202, isEmpty#203] (81) Exchange -Input [6]: [sum#186, isEmpty#187, sum#188, isEmpty#189, sum#190, isEmpty#191] +Input [6]: [sum#198, isEmpty#199, sum#200, isEmpty#201, sum#202, isEmpty#203] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10] (82) HashAggregate [codegen id : 65] -Input [6]: [sum#186, isEmpty#187, sum#188, isEmpty#189, sum#190, isEmpty#191] +Input [6]: [sum#198, isEmpty#199, sum#200, isEmpty#201, sum#202, isEmpty#203] Keys: [] -Functions [3]: [sum(sales#177), sum(returns#178), sum(profit#179)] -Aggregate Attributes [3]: [sum(sales#177)#192, sum(returns#178)#193, sum(profit#179)#194] -Results [5]: [null AS channel#195, null AS id#196, sum(sales#177)#192 AS sum(sales)#197, sum(returns#178)#193 AS sum(returns)#198, sum(profit#179)#194 AS sum(profit)#199] +Functions [3]: [sum(sales#189), sum(returns#190), sum(profit#191)] +Aggregate Attributes [3]: [sum(sales#189)#204, sum(returns#190)#205, sum(profit#191)#206] +Results [5]: [null AS channel#207, null AS id#208, sum(sales#189)#204 AS sum(sales)#209, sum(returns#190)#205 AS sum(returns)#210, sum(profit#191)#206 AS sum(profit)#211] (83) Union @@ -519,22 +519,22 @@ BroadcastExchange (92) (88) Scan parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#22, d_date#200] +Output [2]: [d_date_sk#22, d_date#212] 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#200] +Input [2]: [d_date_sk#22, d_date#212] (90) Filter [codegen id : 1] -Input [2]: [d_date_sk#22, d_date#200] -Condition : (((isnotnull(d_date#200) AND (d_date#200 >= 1998-08-04)) AND (d_date#200 <= 1998-08-18)) AND isnotnull(d_date_sk#22)) +Input [2]: [d_date_sk#22, d_date#212] +Condition : (((isnotnull(d_date#212) AND (d_date#212 >= 1998-08-04)) AND (d_date#212 <= 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#200] +Input [2]: [d_date_sk#22, d_date#212] (92) BroadcastExchange Input [1]: [d_date_sk#22] 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 2377520aea081..40eddbbacf38a 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 @@ -760,15 +760,15 @@ 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(((cr_refunded_cash#127 + cr_reversed_charge#128) + cr_store_credit#129))] Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#126))#33, sum(((cr_refunded_cash#127 + cr_reversed_charge#128) + cr_store_credit#129))#34] -Results [3]: [cs_item_sk#122, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#126))#33,17,2) AS sale#35, sum(((cr_refunded_cash#127 + cr_reversed_charge#128) + cr_store_credit#129))#34 AS refund#36] +Results [3]: [cs_item_sk#122, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#126))#33,17,2) AS sale#130, sum(((cr_refunded_cash#127 + cr_reversed_charge#128) + cr_store_credit#129))#34 AS refund#131] (126) Filter [codegen id : 35] -Input [3]: [cs_item_sk#122, sale#35, refund#36] -Condition : ((isnotnull(sale#35) AND isnotnull(refund#36)) AND (cast(sale#35 as decimal(21,2)) > (2 * refund#36))) +Input [3]: [cs_item_sk#122, sale#130, refund#131] +Condition : ((isnotnull(sale#130) AND isnotnull(refund#131)) AND (cast(sale#130 as decimal(21,2)) > (2 * refund#131))) (127) Project [codegen id : 35] Output [1]: [cs_item_sk#122] -Input [3]: [cs_item_sk#122, sale#35, refund#36] +Input [3]: [cs_item_sk#122, sale#130, refund#131] (128) Sort [codegen id : 35] Input [1]: [cs_item_sk#122] @@ -785,239 +785,239 @@ Output [11]: [ss_item_sk#106, ss_customer_sk#107, ss_cdemo_sk#108, ss_hdemo_sk#1 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#130, d_year#131] +Output [2]: [d_date_sk#132, d_year#133] (132) BroadcastHashJoin [codegen id : 51] Left keys [1]: [ss_sold_date_sk#117] -Right keys [1]: [d_date_sk#130] +Right keys [1]: [d_date_sk#132] Join type: Inner Join condition: None (133) Project [codegen id : 51] -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] +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#133] +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#132, d_year#133] (134) ReusedExchange [Reuses operator id: 41] -Output [3]: [s_store_sk#132, s_store_name#133, s_zip#134] +Output [3]: [s_store_sk#134, s_store_name#135, s_zip#136] (135) BroadcastHashJoin [codegen id : 51] Left keys [1]: [ss_store_sk#111] -Right keys [1]: [s_store_sk#132] +Right keys [1]: [s_store_sk#134] Join type: Inner Join condition: None (136) Project [codegen id : 51] -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] +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#133, s_store_name#135, s_zip#136] +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#133, s_store_sk#134, s_store_name#135, s_zip#136] (137) ReusedExchange [Reuses operator id: 47] -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] +Output [6]: [c_customer_sk#137, c_current_cdemo_sk#138, c_current_hdemo_sk#139, c_current_addr_sk#140, c_first_shipto_date_sk#141, c_first_sales_date_sk#142] (138) BroadcastHashJoin [codegen id : 51] Left keys [1]: [ss_customer_sk#107] -Right keys [1]: [c_customer_sk#135] +Right keys [1]: [c_customer_sk#137] Join type: Inner Join condition: None (139) Project [codegen id : 51] -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] +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#133, s_store_name#135, s_zip#136, c_current_cdemo_sk#138, c_current_hdemo_sk#139, c_current_addr_sk#140, c_first_shipto_date_sk#141, c_first_sales_date_sk#142] +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#133, s_store_name#135, s_zip#136, c_customer_sk#137, c_current_cdemo_sk#138, c_current_hdemo_sk#139, c_current_addr_sk#140, c_first_shipto_date_sk#141, c_first_sales_date_sk#142] (140) ReusedExchange [Reuses operator id: 53] -Output [2]: [d_date_sk#141, d_year#142] +Output [2]: [d_date_sk#143, d_year#144] (141) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [c_first_sales_date_sk#140] -Right keys [1]: [d_date_sk#141] +Left keys [1]: [c_first_sales_date_sk#142] +Right keys [1]: [d_date_sk#143] Join type: Inner Join condition: None (142) Project [codegen id : 51] -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] +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#133, s_store_name#135, s_zip#136, c_current_cdemo_sk#138, c_current_hdemo_sk#139, c_current_addr_sk#140, c_first_shipto_date_sk#141, 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#133, s_store_name#135, s_zip#136, c_current_cdemo_sk#138, c_current_hdemo_sk#139, c_current_addr_sk#140, c_first_shipto_date_sk#141, c_first_sales_date_sk#142, d_date_sk#143, d_year#144] (143) ReusedExchange [Reuses operator id: 53] -Output [2]: [d_date_sk#143, d_year#144] +Output [2]: [d_date_sk#145, d_year#146] (144) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [c_first_shipto_date_sk#139] -Right keys [1]: [d_date_sk#143] +Left keys [1]: [c_first_shipto_date_sk#141] +Right keys [1]: [d_date_sk#145] Join type: Inner Join condition: None (145) Project [codegen id : 51] -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] +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#133, s_store_name#135, s_zip#136, c_current_cdemo_sk#138, c_current_hdemo_sk#139, c_current_addr_sk#140, d_year#144, d_year#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#133, s_store_name#135, s_zip#136, c_current_cdemo_sk#138, c_current_hdemo_sk#139, c_current_addr_sk#140, c_first_shipto_date_sk#141, d_year#144, d_date_sk#145, d_year#146] (146) ReusedExchange [Reuses operator id: 62] -Output [2]: [cd_demo_sk#145, cd_marital_status#146] +Output [2]: [cd_demo_sk#147, cd_marital_status#148] (147) BroadcastHashJoin [codegen id : 51] Left keys [1]: [ss_cdemo_sk#108] -Right keys [1]: [cd_demo_sk#145] +Right keys [1]: [cd_demo_sk#147] Join type: Inner Join condition: None (148) Project [codegen id : 51] -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] +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#133, s_store_name#135, s_zip#136, c_current_cdemo_sk#138, c_current_hdemo_sk#139, c_current_addr_sk#140, d_year#144, d_year#146, cd_marital_status#148] +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#133, s_store_name#135, s_zip#136, c_current_cdemo_sk#138, c_current_hdemo_sk#139, c_current_addr_sk#140, d_year#144, d_year#146, cd_demo_sk#147, cd_marital_status#148] (149) ReusedExchange [Reuses operator id: 62] -Output [2]: [cd_demo_sk#147, cd_marital_status#148] +Output [2]: [cd_demo_sk#149, cd_marital_status#150] (150) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [c_current_cdemo_sk#136] -Right keys [1]: [cd_demo_sk#147] +Left keys [1]: [c_current_cdemo_sk#138] +Right keys [1]: [cd_demo_sk#149] Join type: Inner -Join condition: NOT (cd_marital_status#146 = cd_marital_status#148) +Join condition: NOT (cd_marital_status#148 = cd_marital_status#150) (151) Project [codegen id : 51] -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] +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#133, s_store_name#135, s_zip#136, c_current_hdemo_sk#139, c_current_addr_sk#140, d_year#144, d_year#146] +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#133, s_store_name#135, s_zip#136, c_current_cdemo_sk#138, c_current_hdemo_sk#139, c_current_addr_sk#140, d_year#144, d_year#146, cd_marital_status#148, cd_demo_sk#149, cd_marital_status#150] (152) ReusedExchange [Reuses operator id: 71] -Output [1]: [p_promo_sk#149] +Output [1]: [p_promo_sk#151] (153) BroadcastHashJoin [codegen id : 51] Left keys [1]: [ss_promo_sk#112] -Right keys [1]: [p_promo_sk#149] +Right keys [1]: [p_promo_sk#151] Join type: Inner Join condition: None (154) Project [codegen id : 51] -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] +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#133, s_store_name#135, s_zip#136, c_current_hdemo_sk#139, c_current_addr_sk#140, d_year#144, d_year#146] +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#133, s_store_name#135, s_zip#136, c_current_hdemo_sk#139, c_current_addr_sk#140, d_year#144, d_year#146, p_promo_sk#151] (155) ReusedExchange [Reuses operator id: 77] -Output [2]: [hd_demo_sk#150, hd_income_band_sk#151] +Output [2]: [hd_demo_sk#152, hd_income_band_sk#153] (156) BroadcastHashJoin [codegen id : 51] Left keys [1]: [ss_hdemo_sk#109] -Right keys [1]: [hd_demo_sk#150] +Right keys [1]: [hd_demo_sk#152] Join type: Inner Join condition: None (157) Project [codegen id : 51] -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] +Output [13]: [ss_item_sk#106, ss_addr_sk#110, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#133, s_store_name#135, s_zip#136, c_current_hdemo_sk#139, c_current_addr_sk#140, d_year#144, d_year#146, hd_income_band_sk#153] +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#133, s_store_name#135, s_zip#136, c_current_hdemo_sk#139, c_current_addr_sk#140, d_year#144, d_year#146, hd_demo_sk#152, hd_income_band_sk#153] (158) ReusedExchange [Reuses operator id: 77] -Output [2]: [hd_demo_sk#152, hd_income_band_sk#153] +Output [2]: [hd_demo_sk#154, hd_income_band_sk#155] (159) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [c_current_hdemo_sk#137] -Right keys [1]: [hd_demo_sk#152] +Left keys [1]: [c_current_hdemo_sk#139] +Right keys [1]: [hd_demo_sk#154] Join type: Inner Join condition: None (160) Project [codegen id : 51] -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] +Output [13]: [ss_item_sk#106, ss_addr_sk#110, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#133, s_store_name#135, s_zip#136, c_current_addr_sk#140, d_year#144, d_year#146, hd_income_band_sk#153, hd_income_band_sk#155] +Input [15]: [ss_item_sk#106, ss_addr_sk#110, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#133, s_store_name#135, s_zip#136, c_current_hdemo_sk#139, c_current_addr_sk#140, d_year#144, d_year#146, hd_income_band_sk#153, hd_demo_sk#154, hd_income_band_sk#155] (161) ReusedExchange [Reuses operator id: 86] -Output [5]: [ca_address_sk#154, ca_street_number#155, ca_street_name#156, ca_city#157, ca_zip#158] +Output [5]: [ca_address_sk#156, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160] (162) BroadcastHashJoin [codegen id : 51] Left keys [1]: [ss_addr_sk#110] -Right keys [1]: [ca_address_sk#154] +Right keys [1]: [ca_address_sk#156] Join type: Inner Join condition: None (163) Project [codegen id : 51] -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] +Output [16]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#133, s_store_name#135, s_zip#136, c_current_addr_sk#140, d_year#144, d_year#146, hd_income_band_sk#153, hd_income_band_sk#155, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160] +Input [18]: [ss_item_sk#106, ss_addr_sk#110, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#133, s_store_name#135, s_zip#136, c_current_addr_sk#140, d_year#144, d_year#146, hd_income_band_sk#153, hd_income_band_sk#155, ca_address_sk#156, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160] (164) ReusedExchange [Reuses operator id: 86] -Output [5]: [ca_address_sk#159, ca_street_number#160, ca_street_name#161, ca_city#162, ca_zip#163] +Output [5]: [ca_address_sk#161, ca_street_number#162, ca_street_name#163, ca_city#164, ca_zip#165] (165) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [c_current_addr_sk#138] -Right keys [1]: [ca_address_sk#159] +Left keys [1]: [c_current_addr_sk#140] +Right keys [1]: [ca_address_sk#161] Join type: Inner Join condition: None (166) Project [codegen id : 51] -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] +Output [19]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#133, s_store_name#135, s_zip#136, d_year#144, d_year#146, hd_income_band_sk#153, hd_income_band_sk#155, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160, ca_street_number#162, ca_street_name#163, ca_city#164, ca_zip#165] +Input [21]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#133, s_store_name#135, s_zip#136, c_current_addr_sk#140, d_year#144, d_year#146, hd_income_band_sk#153, hd_income_band_sk#155, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160, ca_address_sk#161, ca_street_number#162, ca_street_name#163, ca_city#164, ca_zip#165] (167) ReusedExchange [Reuses operator id: 95] -Output [1]: [ib_income_band_sk#164] +Output [1]: [ib_income_band_sk#166] (168) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [hd_income_band_sk#151] -Right keys [1]: [ib_income_band_sk#164] +Left keys [1]: [hd_income_band_sk#153] +Right keys [1]: [ib_income_band_sk#166] Join type: Inner Join condition: None (169) Project [codegen id : 51] -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] +Output [18]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#133, s_store_name#135, s_zip#136, d_year#144, d_year#146, hd_income_band_sk#155, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160, ca_street_number#162, ca_street_name#163, ca_city#164, ca_zip#165] +Input [20]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#133, s_store_name#135, s_zip#136, d_year#144, d_year#146, hd_income_band_sk#153, hd_income_band_sk#155, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160, ca_street_number#162, ca_street_name#163, ca_city#164, ca_zip#165, ib_income_band_sk#166] (170) ReusedExchange [Reuses operator id: 95] -Output [1]: [ib_income_band_sk#165] +Output [1]: [ib_income_band_sk#167] (171) BroadcastHashJoin [codegen id : 51] -Left keys [1]: [hd_income_band_sk#153] -Right keys [1]: [ib_income_band_sk#165] +Left keys [1]: [hd_income_band_sk#155] +Right keys [1]: [ib_income_band_sk#167] Join type: Inner Join condition: None (172) Project [codegen id : 51] -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] +Output [17]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#133, s_store_name#135, s_zip#136, d_year#144, d_year#146, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160, ca_street_number#162, ca_street_name#163, ca_city#164, ca_zip#165] +Input [19]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#133, s_store_name#135, s_zip#136, d_year#144, d_year#146, hd_income_band_sk#155, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160, ca_street_number#162, ca_street_name#163, ca_city#164, ca_zip#165, ib_income_band_sk#167] (173) ReusedExchange [Reuses operator id: 105] -Output [2]: [i_item_sk#166, i_product_name#167] +Output [2]: [i_item_sk#168, i_product_name#169] (174) BroadcastHashJoin [codegen id : 51] Left keys [1]: [ss_item_sk#106] -Right keys [1]: [i_item_sk#166] +Right keys [1]: [i_item_sk#168] Join type: Inner Join condition: None (175) Project [codegen id : 51] -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] +Output [18]: [ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#133, d_year#144, d_year#146, s_store_name#135, s_zip#136, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160, ca_street_number#162, ca_street_name#163, ca_city#164, ca_zip#165, i_item_sk#168, i_product_name#169] +Input [19]: [ss_item_sk#106, ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#133, s_store_name#135, s_zip#136, d_year#144, d_year#146, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160, ca_street_number#162, ca_street_name#163, ca_city#164, ca_zip#165, i_item_sk#168, i_product_name#169] (176) HashAggregate [codegen id : 51] -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] +Input [18]: [ss_wholesale_cost#114, ss_list_price#115, ss_coupon_amt#116, d_year#133, d_year#144, d_year#146, s_store_name#135, s_zip#136, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160, ca_street_number#162, ca_street_name#163, ca_city#164, ca_zip#165, i_item_sk#168, i_product_name#169] +Keys [15]: [i_product_name#169, i_item_sk#168, s_store_name#135, s_zip#136, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160, ca_street_number#162, ca_street_name#163, ca_city#164, ca_zip#165, d_year#133, d_year#144, d_year#146] 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] +Aggregate Attributes [4]: [count#77, sum#170, sum#171, sum#172] +Results [19]: [i_product_name#169, i_item_sk#168, s_store_name#135, s_zip#136, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160, ca_street_number#162, ca_street_name#163, ca_city#164, ca_zip#165, d_year#133, d_year#144, d_year#146, count#81, sum#173, sum#174, sum#175] (177) HashAggregate [codegen id : 51] -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] +Input [19]: [i_product_name#169, i_item_sk#168, s_store_name#135, s_zip#136, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160, ca_street_number#162, ca_street_name#163, ca_city#164, ca_zip#165, d_year#133, d_year#144, d_year#146, count#81, sum#173, sum#174, sum#175] +Keys [15]: [i_product_name#169, i_item_sk#168, s_store_name#135, s_zip#136, ca_street_number#157, ca_street_name#158, ca_city#159, ca_zip#160, ca_street_number#162, ca_street_name#163, ca_city#164, ca_zip#165, d_year#133, d_year#144, d_year#146] 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] +Results [8]: [i_item_sk#168 AS item_sk#176, s_store_name#135 AS store_name#177, s_zip#136 AS store_zip#178, d_year#133 AS syear#179, count(1)#85 AS cnt#180, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#114))#86,17,2) AS s1#181, MakeDecimal(sum(UnscaledValue(ss_list_price#115))#87,17,2) AS s2#182, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#116))#88,17,2) AS s3#183] (178) Exchange -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] +Input [8]: [item_sk#176, store_name#177, store_zip#178, syear#179, cnt#180, s1#181, s2#182, s3#183] +Arguments: hashpartitioning(item_sk#176, store_name#177, store_zip#178, 5), ENSURE_REQUIREMENTS, [plan_id=18] (179) Sort [codegen id : 52] -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 +Input [8]: [item_sk#176, store_name#177, store_zip#178, syear#179, cnt#180, s1#181, s2#182, s3#183] +Arguments: [item_sk#176 ASC NULLS FIRST, store_name#177 ASC NULLS FIRST, store_zip#178 ASC NULLS FIRST], false, 0 (180) SortMergeJoin [codegen id : 53] Left keys [3]: [item_sk#90, store_name#91, store_zip#92] -Right keys [3]: [item_sk#174, store_name#175, store_zip#176] +Right keys [3]: [item_sk#176, store_name#177, store_zip#178] Join type: Inner -Join condition: (cnt#178 <= cnt#102) +Join condition: (cnt#180 <= cnt#102) (181) Project [codegen id : 53] -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] +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#181, s2#182, s3#183, syear#179, cnt#180] +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#176, store_name#177, store_zip#178, syear#179, cnt#180, s1#181, s2#182, s3#183] (182) Exchange -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] +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#181, s2#182, s3#183, syear#179, cnt#180] +Arguments: rangepartitioning(product_name#89 ASC NULLS FIRST, store_name#91 ASC NULLS FIRST, cnt#180 ASC NULLS FIRST, s1#103 ASC NULLS FIRST, s1#181 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=19] (183) Sort [codegen id : 54] -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 +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#181, s2#182, s3#183, syear#179, cnt#180] +Arguments: [product_name#89 ASC NULLS FIRST, store_name#91 ASC NULLS FIRST, cnt#180 ASC NULLS FIRST, s1#103 ASC NULLS FIRST, s1#181 ASC NULLS FIRST], true, 0 ===== Subqueries ===== @@ -1054,21 +1054,21 @@ BroadcastExchange (191) (188) Scan parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#130, d_year#131] +Output [2]: [d_date_sk#132, d_year#133] 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#130, d_year#131] +Input [2]: [d_date_sk#132, d_year#133] (190) Filter [codegen id : 1] -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)) +Input [2]: [d_date_sk#132, d_year#133] +Condition : ((isnotnull(d_year#133) AND (d_year#133 = 2000)) AND isnotnull(d_date_sk#132)) (191) BroadcastExchange -Input [2]: [d_date_sk#130, d_year#131] +Input [2]: [d_date_sk#132, d_year#133] 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/q77a.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q77a.sf100/explain.txt index ff375a178e425..3676f5f5fc21b 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 @@ -508,60 +508,60 @@ Aggregate Attributes [3]: [sum(sales#14)#106, sum(returns#32)#107, sum(profit#33 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#112, id#113, sum#100, isEmpty#101, sum#114, isEmpty#115, sum#116, isEmpty#117] +Output [8]: [channel#112, id#113, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119] (85) HashAggregate [codegen id : 48] -Input [8]: [channel#112, id#113, sum#100, isEmpty#101, sum#114, isEmpty#115, sum#116, isEmpty#117] +Input [8]: [channel#112, id#113, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Keys [2]: [channel#112, id#113] -Functions [3]: [sum(sales#14), sum(returns#118), sum(profit#119)] -Aggregate Attributes [3]: [sum(sales#14)#106, sum(returns#118)#107, sum(profit#119)#108] -Results [4]: [channel#112, sum(sales#14)#106 AS sales#120, sum(returns#118)#107 AS returns#121, sum(profit#119)#108 AS profit#122] +Functions [3]: [sum(sales#120), sum(returns#121), sum(profit#122)] +Aggregate Attributes [3]: [sum(sales#120)#106, sum(returns#121)#107, sum(profit#122)#108] +Results [4]: [channel#112, sum(sales#120)#106 AS sales#123, sum(returns#121)#107 AS returns#124, sum(profit#122)#108 AS profit#125] (86) HashAggregate [codegen id : 48] -Input [4]: [channel#112, sales#120, returns#121, profit#122] +Input [4]: [channel#112, sales#123, returns#124, profit#125] Keys [1]: [channel#112] -Functions [3]: [partial_sum(sales#120), partial_sum(returns#121), partial_sum(profit#122)] -Aggregate Attributes [6]: [sum#123, isEmpty#124, sum#125, isEmpty#126, sum#127, isEmpty#128] -Results [7]: [channel#112, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] +Functions [3]: [partial_sum(sales#123), partial_sum(returns#124), partial_sum(profit#125)] +Aggregate Attributes [6]: [sum#126, isEmpty#127, sum#128, isEmpty#129, sum#130, isEmpty#131] +Results [7]: [channel#112, sum#132, isEmpty#133, sum#134, isEmpty#135, sum#136, isEmpty#137] (87) Exchange -Input [7]: [channel#112, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] +Input [7]: [channel#112, sum#132, isEmpty#133, sum#134, isEmpty#135, sum#136, isEmpty#137] Arguments: hashpartitioning(channel#112, 5), ENSURE_REQUIREMENTS, [plan_id=13] (88) HashAggregate [codegen id : 49] -Input [7]: [channel#112, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] +Input [7]: [channel#112, sum#132, isEmpty#133, sum#134, isEmpty#135, sum#136, isEmpty#137] Keys [1]: [channel#112] -Functions [3]: [sum(sales#120), sum(returns#121), sum(profit#122)] -Aggregate Attributes [3]: [sum(sales#120)#135, sum(returns#121)#136, sum(profit#122)#137] -Results [5]: [channel#112, null AS id#138, sum(sales#120)#135 AS sales#139, sum(returns#121)#136 AS returns#140, sum(profit#122)#137 AS profit#141] +Functions [3]: [sum(sales#123), sum(returns#124), sum(profit#125)] +Aggregate Attributes [3]: [sum(sales#123)#138, sum(returns#124)#139, sum(profit#125)#140] +Results [5]: [channel#112, null AS id#141, sum(sales#123)#138 AS sales#142, sum(returns#124)#139 AS returns#143, sum(profit#125)#140 AS profit#144] (89) ReusedExchange [Reuses operator id: 82] -Output [8]: [channel#142, id#143, sum#100, isEmpty#101, sum#144, isEmpty#145, sum#146, isEmpty#147] +Output [8]: [channel#145, id#146, sum#147, isEmpty#148, sum#149, isEmpty#150, sum#151, isEmpty#152] (90) HashAggregate [codegen id : 73] -Input [8]: [channel#142, id#143, sum#100, isEmpty#101, sum#144, isEmpty#145, sum#146, isEmpty#147] -Keys [2]: [channel#142, id#143] -Functions [3]: [sum(sales#14), sum(returns#148), sum(profit#149)] -Aggregate Attributes [3]: [sum(sales#14)#106, sum(returns#148)#107, sum(profit#149)#108] -Results [3]: [sum(sales#14)#106 AS sales#150, sum(returns#148)#107 AS returns#151, sum(profit#149)#108 AS profit#152] +Input [8]: [channel#145, id#146, sum#147, isEmpty#148, sum#149, isEmpty#150, sum#151, isEmpty#152] +Keys [2]: [channel#145, id#146] +Functions [3]: [sum(sales#153), sum(returns#154), sum(profit#155)] +Aggregate Attributes [3]: [sum(sales#153)#106, sum(returns#154)#107, sum(profit#155)#108] +Results [3]: [sum(sales#153)#106 AS sales#156, sum(returns#154)#107 AS returns#157, sum(profit#155)#108 AS profit#158] (91) HashAggregate [codegen id : 73] -Input [3]: [sales#150, returns#151, profit#152] +Input [3]: [sales#156, returns#157, profit#158] Keys: [] -Functions [3]: [partial_sum(sales#150), partial_sum(returns#151), partial_sum(profit#152)] -Aggregate Attributes [6]: [sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158] -Results [6]: [sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Functions [3]: [partial_sum(sales#156), partial_sum(returns#157), partial_sum(profit#158)] +Aggregate Attributes [6]: [sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Results [6]: [sum#165, isEmpty#166, sum#167, isEmpty#168, sum#169, isEmpty#170] (92) Exchange -Input [6]: [sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Input [6]: [sum#165, isEmpty#166, sum#167, isEmpty#168, sum#169, isEmpty#170] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=14] (93) HashAggregate [codegen id : 74] -Input [6]: [sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Input [6]: [sum#165, isEmpty#166, sum#167, isEmpty#168, sum#169, isEmpty#170] Keys: [] -Functions [3]: [sum(sales#150), sum(returns#151), sum(profit#152)] -Aggregate Attributes [3]: [sum(sales#150)#165, sum(returns#151)#166, sum(profit#152)#167] -Results [5]: [null AS channel#168, null AS id#169, sum(sales#150)#165 AS sales#170, sum(returns#151)#166 AS returns#171, sum(profit#152)#167 AS profit#172] +Functions [3]: [sum(sales#156), sum(returns#157), sum(profit#158)] +Aggregate Attributes [3]: [sum(sales#156)#171, sum(returns#157)#172, sum(profit#158)#173] +Results [5]: [null AS channel#174, null AS id#175, sum(sales#156)#171 AS sales#176, sum(returns#157)#172 AS returns#177, sum(profit#158)#173 AS profit#178] (94) Union @@ -598,22 +598,22 @@ BroadcastExchange (103) (99) Scan parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#6, d_date#173] +Output [2]: [d_date_sk#6, d_date#179] 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#173] +Input [2]: [d_date_sk#6, d_date#179] (101) Filter [codegen id : 1] -Input [2]: [d_date_sk#6, d_date#173] -Condition : (((isnotnull(d_date#173) AND (d_date#173 >= 1998-08-04)) AND (d_date#173 <= 1998-09-03)) AND isnotnull(d_date_sk#6)) +Input [2]: [d_date_sk#6, d_date#179] +Condition : (((isnotnull(d_date#179) AND (d_date#179 >= 1998-08-04)) AND (d_date#179 <= 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#173] +Input [2]: [d_date_sk#6, d_date#179] (103) BroadcastExchange Input [1]: [d_date_sk#6] 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 77463b94bcc03..a74cb2cb75801 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 @@ -508,60 +508,60 @@ Aggregate Attributes [3]: [sum(sales#14)#106, sum(returns#32)#107, sum(profit#33 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#112, id#113, sum#100, isEmpty#101, sum#114, isEmpty#115, sum#116, isEmpty#117] +Output [8]: [channel#112, id#113, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119] (85) HashAggregate [codegen id : 48] -Input [8]: [channel#112, id#113, sum#100, isEmpty#101, sum#114, isEmpty#115, sum#116, isEmpty#117] +Input [8]: [channel#112, id#113, sum#114, isEmpty#115, sum#116, isEmpty#117, sum#118, isEmpty#119] Keys [2]: [channel#112, id#113] -Functions [3]: [sum(sales#14), sum(returns#118), sum(profit#119)] -Aggregate Attributes [3]: [sum(sales#14)#106, sum(returns#118)#107, sum(profit#119)#108] -Results [4]: [channel#112, sum(sales#14)#106 AS sales#120, sum(returns#118)#107 AS returns#121, sum(profit#119)#108 AS profit#122] +Functions [3]: [sum(sales#120), sum(returns#121), sum(profit#122)] +Aggregate Attributes [3]: [sum(sales#120)#106, sum(returns#121)#107, sum(profit#122)#108] +Results [4]: [channel#112, sum(sales#120)#106 AS sales#123, sum(returns#121)#107 AS returns#124, sum(profit#122)#108 AS profit#125] (86) HashAggregate [codegen id : 48] -Input [4]: [channel#112, sales#120, returns#121, profit#122] +Input [4]: [channel#112, sales#123, returns#124, profit#125] Keys [1]: [channel#112] -Functions [3]: [partial_sum(sales#120), partial_sum(returns#121), partial_sum(profit#122)] -Aggregate Attributes [6]: [sum#123, isEmpty#124, sum#125, isEmpty#126, sum#127, isEmpty#128] -Results [7]: [channel#112, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] +Functions [3]: [partial_sum(sales#123), partial_sum(returns#124), partial_sum(profit#125)] +Aggregate Attributes [6]: [sum#126, isEmpty#127, sum#128, isEmpty#129, sum#130, isEmpty#131] +Results [7]: [channel#112, sum#132, isEmpty#133, sum#134, isEmpty#135, sum#136, isEmpty#137] (87) Exchange -Input [7]: [channel#112, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] +Input [7]: [channel#112, sum#132, isEmpty#133, sum#134, isEmpty#135, sum#136, isEmpty#137] Arguments: hashpartitioning(channel#112, 5), ENSURE_REQUIREMENTS, [plan_id=13] (88) HashAggregate [codegen id : 49] -Input [7]: [channel#112, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] +Input [7]: [channel#112, sum#132, isEmpty#133, sum#134, isEmpty#135, sum#136, isEmpty#137] Keys [1]: [channel#112] -Functions [3]: [sum(sales#120), sum(returns#121), sum(profit#122)] -Aggregate Attributes [3]: [sum(sales#120)#135, sum(returns#121)#136, sum(profit#122)#137] -Results [5]: [channel#112, null AS id#138, sum(sales#120)#135 AS sales#139, sum(returns#121)#136 AS returns#140, sum(profit#122)#137 AS profit#141] +Functions [3]: [sum(sales#123), sum(returns#124), sum(profit#125)] +Aggregate Attributes [3]: [sum(sales#123)#138, sum(returns#124)#139, sum(profit#125)#140] +Results [5]: [channel#112, null AS id#141, sum(sales#123)#138 AS sales#142, sum(returns#124)#139 AS returns#143, sum(profit#125)#140 AS profit#144] (89) ReusedExchange [Reuses operator id: 82] -Output [8]: [channel#142, id#143, sum#100, isEmpty#101, sum#144, isEmpty#145, sum#146, isEmpty#147] +Output [8]: [channel#145, id#146, sum#147, isEmpty#148, sum#149, isEmpty#150, sum#151, isEmpty#152] (90) HashAggregate [codegen id : 73] -Input [8]: [channel#142, id#143, sum#100, isEmpty#101, sum#144, isEmpty#145, sum#146, isEmpty#147] -Keys [2]: [channel#142, id#143] -Functions [3]: [sum(sales#14), sum(returns#148), sum(profit#149)] -Aggregate Attributes [3]: [sum(sales#14)#106, sum(returns#148)#107, sum(profit#149)#108] -Results [3]: [sum(sales#14)#106 AS sales#150, sum(returns#148)#107 AS returns#151, sum(profit#149)#108 AS profit#152] +Input [8]: [channel#145, id#146, sum#147, isEmpty#148, sum#149, isEmpty#150, sum#151, isEmpty#152] +Keys [2]: [channel#145, id#146] +Functions [3]: [sum(sales#153), sum(returns#154), sum(profit#155)] +Aggregate Attributes [3]: [sum(sales#153)#106, sum(returns#154)#107, sum(profit#155)#108] +Results [3]: [sum(sales#153)#106 AS sales#156, sum(returns#154)#107 AS returns#157, sum(profit#155)#108 AS profit#158] (91) HashAggregate [codegen id : 73] -Input [3]: [sales#150, returns#151, profit#152] +Input [3]: [sales#156, returns#157, profit#158] Keys: [] -Functions [3]: [partial_sum(sales#150), partial_sum(returns#151), partial_sum(profit#152)] -Aggregate Attributes [6]: [sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158] -Results [6]: [sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Functions [3]: [partial_sum(sales#156), partial_sum(returns#157), partial_sum(profit#158)] +Aggregate Attributes [6]: [sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Results [6]: [sum#165, isEmpty#166, sum#167, isEmpty#168, sum#169, isEmpty#170] (92) Exchange -Input [6]: [sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Input [6]: [sum#165, isEmpty#166, sum#167, isEmpty#168, sum#169, isEmpty#170] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=14] (93) HashAggregate [codegen id : 74] -Input [6]: [sum#159, isEmpty#160, sum#161, isEmpty#162, sum#163, isEmpty#164] +Input [6]: [sum#165, isEmpty#166, sum#167, isEmpty#168, sum#169, isEmpty#170] Keys: [] -Functions [3]: [sum(sales#150), sum(returns#151), sum(profit#152)] -Aggregate Attributes [3]: [sum(sales#150)#165, sum(returns#151)#166, sum(profit#152)#167] -Results [5]: [null AS channel#168, null AS id#169, sum(sales#150)#165 AS sales#170, sum(returns#151)#166 AS returns#171, sum(profit#152)#167 AS profit#172] +Functions [3]: [sum(sales#156), sum(returns#157), sum(profit#158)] +Aggregate Attributes [3]: [sum(sales#156)#171, sum(returns#157)#172, sum(profit#158)#173] +Results [5]: [null AS channel#174, null AS id#175, sum(sales#156)#171 AS sales#176, sum(returns#157)#172 AS returns#177, sum(profit#158)#173 AS profit#178] (94) Union @@ -598,22 +598,22 @@ BroadcastExchange (103) (99) Scan parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#6, d_date#173] +Output [2]: [d_date_sk#6, d_date#179] 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#173] +Input [2]: [d_date_sk#6, d_date#179] (101) Filter [codegen id : 1] -Input [2]: [d_date_sk#6, d_date#173] -Condition : (((isnotnull(d_date#173) AND (d_date#173 >= 1998-08-04)) AND (d_date#173 <= 1998-09-03)) AND isnotnull(d_date_sk#6)) +Input [2]: [d_date_sk#6, d_date#179] +Condition : (((isnotnull(d_date#179) AND (d_date#179 >= 1998-08-04)) AND (d_date#179 <= 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#173] +Input [2]: [d_date_sk#6, d_date#179] (103) BroadcastExchange Input [1]: [d_date_sk#6] 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 f41522bbc37c2..f21d2ce9affd7 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 @@ -701,433 +701,433 @@ Input [6]: [s_store_id#131, sum#132, sum#133, isEmpty#134, sum#135, isEmpty#136] Keys [1]: [s_store_id#131] Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#137)), sum(coalesce(cast(sr_return_amt#138 as decimal(12,2)), 0.00)), sum((ss_net_profit#139 - coalesce(cast(sr_net_loss#140 as decimal(12,2)), 0.00)))] Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#137))#35, sum(coalesce(cast(sr_return_amt#138 as decimal(12,2)), 0.00))#36, sum((ss_net_profit#139 - coalesce(cast(sr_net_loss#140 as decimal(12,2)), 0.00)))#37] -Results [5]: [store channel AS channel#141, concat(store, s_store_id#131) AS id#142, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#137))#35,17,2) AS sales#40, sum(coalesce(cast(sr_return_amt#138 as decimal(12,2)), 0.00))#36 AS returns#41, sum((ss_net_profit#139 - coalesce(cast(sr_net_loss#140 as decimal(12,2)), 0.00)))#37 AS profit#42] +Results [5]: [store channel AS channel#141, concat(store, s_store_id#131) AS id#142, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#137))#35,17,2) AS sales#143, sum(coalesce(cast(sr_return_amt#138 as decimal(12,2)), 0.00))#36 AS returns#144, sum((ss_net_profit#139 - coalesce(cast(sr_net_loss#140 as decimal(12,2)), 0.00)))#37 AS profit#145] (108) ReusedExchange [Reuses operator id: 69] -Output [6]: [cp_catalog_page_id#143, sum#144, sum#145, isEmpty#146, sum#147, isEmpty#148] +Output [6]: [cp_catalog_page_id#146, sum#147, sum#148, isEmpty#149, sum#150, isEmpty#151] (109) HashAggregate [codegen id : 52] -Input [6]: [cp_catalog_page_id#143, sum#144, sum#145, isEmpty#146, sum#147, isEmpty#148] -Keys [1]: [cp_catalog_page_id#143] -Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#149)), sum(coalesce(cast(cr_return_amount#150 as decimal(12,2)), 0.00)), sum((cs_net_profit#151 - coalesce(cast(cr_net_loss#152 as decimal(12,2)), 0.00)))] -Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#149))#70, sum(coalesce(cast(cr_return_amount#150 as decimal(12,2)), 0.00))#71, sum((cs_net_profit#151 - coalesce(cast(cr_net_loss#152 as decimal(12,2)), 0.00)))#72] -Results [5]: [catalog channel AS channel#153, concat(catalog_page, cp_catalog_page_id#143) AS id#154, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#149))#70,17,2) AS sales#75, sum(coalesce(cast(cr_return_amount#150 as decimal(12,2)), 0.00))#71 AS returns#76, sum((cs_net_profit#151 - coalesce(cast(cr_net_loss#152 as decimal(12,2)), 0.00)))#72 AS profit#77] +Input [6]: [cp_catalog_page_id#146, sum#147, sum#148, isEmpty#149, sum#150, isEmpty#151] +Keys [1]: [cp_catalog_page_id#146] +Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#152)), sum(coalesce(cast(cr_return_amount#153 as decimal(12,2)), 0.00)), sum((cs_net_profit#154 - coalesce(cast(cr_net_loss#155 as decimal(12,2)), 0.00)))] +Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#152))#70, sum(coalesce(cast(cr_return_amount#153 as decimal(12,2)), 0.00))#71, sum((cs_net_profit#154 - coalesce(cast(cr_net_loss#155 as decimal(12,2)), 0.00)))#72] +Results [5]: [catalog channel AS channel#156, concat(catalog_page, cp_catalog_page_id#146) AS id#157, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#152))#70,17,2) AS sales#158, sum(coalesce(cast(cr_return_amount#153 as decimal(12,2)), 0.00))#71 AS returns#159, sum((cs_net_profit#154 - coalesce(cast(cr_net_loss#155 as decimal(12,2)), 0.00)))#72 AS profit#160] (110) Scan parquet spark_catalog.default.web_sales -Output [7]: [ws_item_sk#155, ws_web_site_sk#156, ws_promo_sk#157, ws_order_number#158, ws_ext_sales_price#159, ws_net_profit#160, ws_sold_date_sk#161] +Output [7]: [ws_item_sk#161, ws_web_site_sk#162, ws_promo_sk#163, ws_order_number#164, ws_ext_sales_price#165, ws_net_profit#166, ws_sold_date_sk#167] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ws_sold_date_sk#161), dynamicpruningexpression(ws_sold_date_sk#161 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ws_sold_date_sk#167), dynamicpruningexpression(ws_sold_date_sk#167 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#155, ws_web_site_sk#156, ws_promo_sk#157, ws_order_number#158, ws_ext_sales_price#159, ws_net_profit#160, ws_sold_date_sk#161] +Input [7]: [ws_item_sk#161, ws_web_site_sk#162, ws_promo_sk#163, ws_order_number#164, ws_ext_sales_price#165, ws_net_profit#166, ws_sold_date_sk#167] (112) Filter [codegen id : 53] -Input [7]: [ws_item_sk#155, ws_web_site_sk#156, ws_promo_sk#157, ws_order_number#158, ws_ext_sales_price#159, ws_net_profit#160, ws_sold_date_sk#161] -Condition : ((isnotnull(ws_web_site_sk#156) AND isnotnull(ws_item_sk#155)) AND isnotnull(ws_promo_sk#157)) +Input [7]: [ws_item_sk#161, ws_web_site_sk#162, ws_promo_sk#163, ws_order_number#164, ws_ext_sales_price#165, ws_net_profit#166, ws_sold_date_sk#167] +Condition : ((isnotnull(ws_web_site_sk#162) AND isnotnull(ws_item_sk#161)) AND isnotnull(ws_promo_sk#163)) (113) Exchange -Input [7]: [ws_item_sk#155, ws_web_site_sk#156, ws_promo_sk#157, ws_order_number#158, ws_ext_sales_price#159, ws_net_profit#160, ws_sold_date_sk#161] -Arguments: hashpartitioning(ws_item_sk#155, ws_order_number#158, 5), ENSURE_REQUIREMENTS, [plan_id=16] +Input [7]: [ws_item_sk#161, ws_web_site_sk#162, ws_promo_sk#163, ws_order_number#164, ws_ext_sales_price#165, ws_net_profit#166, ws_sold_date_sk#167] +Arguments: hashpartitioning(ws_item_sk#161, ws_order_number#164, 5), ENSURE_REQUIREMENTS, [plan_id=16] (114) Sort [codegen id : 54] -Input [7]: [ws_item_sk#155, ws_web_site_sk#156, ws_promo_sk#157, ws_order_number#158, ws_ext_sales_price#159, ws_net_profit#160, ws_sold_date_sk#161] -Arguments: [ws_item_sk#155 ASC NULLS FIRST, ws_order_number#158 ASC NULLS FIRST], false, 0 +Input [7]: [ws_item_sk#161, ws_web_site_sk#162, ws_promo_sk#163, ws_order_number#164, ws_ext_sales_price#165, ws_net_profit#166, ws_sold_date_sk#167] +Arguments: [ws_item_sk#161 ASC NULLS FIRST, ws_order_number#164 ASC NULLS FIRST], false, 0 (115) ReusedExchange [Reuses operator id: 80] -Output [4]: [wr_item_sk#162, wr_order_number#163, wr_return_amt#164, wr_net_loss#165] +Output [4]: [wr_item_sk#168, wr_order_number#169, wr_return_amt#170, wr_net_loss#171] (116) Sort [codegen id : 56] -Input [4]: [wr_item_sk#162, wr_order_number#163, wr_return_amt#164, wr_net_loss#165] -Arguments: [wr_item_sk#162 ASC NULLS FIRST, wr_order_number#163 ASC NULLS FIRST], false, 0 +Input [4]: [wr_item_sk#168, wr_order_number#169, wr_return_amt#170, wr_net_loss#171] +Arguments: [wr_item_sk#168 ASC NULLS FIRST, wr_order_number#169 ASC NULLS FIRST], false, 0 (117) SortMergeJoin [codegen id : 61] -Left keys [2]: [ws_item_sk#155, ws_order_number#158] -Right keys [2]: [wr_item_sk#162, wr_order_number#163] +Left keys [2]: [ws_item_sk#161, ws_order_number#164] +Right keys [2]: [wr_item_sk#168, wr_order_number#169] Join type: LeftOuter Join condition: None (118) Project [codegen id : 61] -Output [8]: [ws_item_sk#155, ws_web_site_sk#156, ws_promo_sk#157, ws_ext_sales_price#159, ws_net_profit#160, ws_sold_date_sk#161, wr_return_amt#164, wr_net_loss#165] -Input [11]: [ws_item_sk#155, ws_web_site_sk#156, ws_promo_sk#157, ws_order_number#158, ws_ext_sales_price#159, ws_net_profit#160, ws_sold_date_sk#161, wr_item_sk#162, wr_order_number#163, wr_return_amt#164, wr_net_loss#165] +Output [8]: [ws_item_sk#161, ws_web_site_sk#162, ws_promo_sk#163, ws_ext_sales_price#165, ws_net_profit#166, ws_sold_date_sk#167, wr_return_amt#170, wr_net_loss#171] +Input [11]: [ws_item_sk#161, ws_web_site_sk#162, ws_promo_sk#163, ws_order_number#164, ws_ext_sales_price#165, ws_net_profit#166, ws_sold_date_sk#167, wr_item_sk#168, wr_order_number#169, wr_return_amt#170, wr_net_loss#171] (119) ReusedExchange [Reuses operator id: 18] -Output [1]: [i_item_sk#166] +Output [1]: [i_item_sk#172] (120) BroadcastHashJoin [codegen id : 61] -Left keys [1]: [ws_item_sk#155] -Right keys [1]: [i_item_sk#166] +Left keys [1]: [ws_item_sk#161] +Right keys [1]: [i_item_sk#172] Join type: Inner Join condition: None (121) Project [codegen id : 61] -Output [7]: [ws_web_site_sk#156, ws_promo_sk#157, ws_ext_sales_price#159, ws_net_profit#160, ws_sold_date_sk#161, wr_return_amt#164, wr_net_loss#165] -Input [9]: [ws_item_sk#155, ws_web_site_sk#156, ws_promo_sk#157, ws_ext_sales_price#159, ws_net_profit#160, ws_sold_date_sk#161, wr_return_amt#164, wr_net_loss#165, i_item_sk#166] +Output [7]: [ws_web_site_sk#162, ws_promo_sk#163, ws_ext_sales_price#165, ws_net_profit#166, ws_sold_date_sk#167, wr_return_amt#170, wr_net_loss#171] +Input [9]: [ws_item_sk#161, ws_web_site_sk#162, ws_promo_sk#163, ws_ext_sales_price#165, ws_net_profit#166, ws_sold_date_sk#167, wr_return_amt#170, wr_net_loss#171, i_item_sk#172] (122) ReusedExchange [Reuses operator id: 25] -Output [1]: [p_promo_sk#167] +Output [1]: [p_promo_sk#173] (123) BroadcastHashJoin [codegen id : 61] -Left keys [1]: [ws_promo_sk#157] -Right keys [1]: [p_promo_sk#167] +Left keys [1]: [ws_promo_sk#163] +Right keys [1]: [p_promo_sk#173] Join type: Inner Join condition: None (124) Project [codegen id : 61] -Output [6]: [ws_web_site_sk#156, ws_ext_sales_price#159, ws_net_profit#160, ws_sold_date_sk#161, wr_return_amt#164, wr_net_loss#165] -Input [8]: [ws_web_site_sk#156, ws_promo_sk#157, ws_ext_sales_price#159, ws_net_profit#160, ws_sold_date_sk#161, wr_return_amt#164, wr_net_loss#165, p_promo_sk#167] +Output [6]: [ws_web_site_sk#162, ws_ext_sales_price#165, ws_net_profit#166, ws_sold_date_sk#167, wr_return_amt#170, wr_net_loss#171] +Input [8]: [ws_web_site_sk#162, ws_promo_sk#163, ws_ext_sales_price#165, ws_net_profit#166, ws_sold_date_sk#167, wr_return_amt#170, wr_net_loss#171, p_promo_sk#173] (125) ReusedExchange [Reuses operator id: 221] -Output [1]: [d_date_sk#168] +Output [1]: [d_date_sk#174] (126) BroadcastHashJoin [codegen id : 61] -Left keys [1]: [ws_sold_date_sk#161] -Right keys [1]: [d_date_sk#168] +Left keys [1]: [ws_sold_date_sk#167] +Right keys [1]: [d_date_sk#174] Join type: Inner Join condition: None (127) Project [codegen id : 61] -Output [5]: [ws_web_site_sk#156, ws_ext_sales_price#159, ws_net_profit#160, wr_return_amt#164, wr_net_loss#165] -Input [7]: [ws_web_site_sk#156, ws_ext_sales_price#159, ws_net_profit#160, ws_sold_date_sk#161, wr_return_amt#164, wr_net_loss#165, d_date_sk#168] +Output [5]: [ws_web_site_sk#162, ws_ext_sales_price#165, ws_net_profit#166, wr_return_amt#170, wr_net_loss#171] +Input [7]: [ws_web_site_sk#162, ws_ext_sales_price#165, ws_net_profit#166, ws_sold_date_sk#167, wr_return_amt#170, wr_net_loss#171, d_date_sk#174] (128) ReusedExchange [Reuses operator id: 96] -Output [2]: [web_site_sk#169, web_site_id#170] +Output [2]: [web_site_sk#175, web_site_id#176] (129) BroadcastHashJoin [codegen id : 61] -Left keys [1]: [ws_web_site_sk#156] -Right keys [1]: [web_site_sk#169] +Left keys [1]: [ws_web_site_sk#162] +Right keys [1]: [web_site_sk#175] Join type: Inner Join condition: None (130) Project [codegen id : 61] -Output [5]: [ws_ext_sales_price#159, ws_net_profit#160, wr_return_amt#164, wr_net_loss#165, web_site_id#170] -Input [7]: [ws_web_site_sk#156, ws_ext_sales_price#159, ws_net_profit#160, wr_return_amt#164, wr_net_loss#165, web_site_sk#169, web_site_id#170] +Output [5]: [ws_ext_sales_price#165, ws_net_profit#166, wr_return_amt#170, wr_net_loss#171, web_site_id#176] +Input [7]: [ws_web_site_sk#162, ws_ext_sales_price#165, ws_net_profit#166, wr_return_amt#170, wr_net_loss#171, web_site_sk#175, web_site_id#176] (131) HashAggregate [codegen id : 61] -Input [5]: [ws_ext_sales_price#159, ws_net_profit#160, wr_return_amt#164, wr_net_loss#165, web_site_id#170] -Keys [1]: [web_site_id#170] -Functions [3]: [partial_sum(UnscaledValue(ws_ext_sales_price#159)), partial_sum(coalesce(cast(wr_return_amt#164 as decimal(12,2)), 0.00)), partial_sum((ws_net_profit#160 - coalesce(cast(wr_net_loss#165 as decimal(12,2)), 0.00)))] -Aggregate Attributes [5]: [sum#171, sum#172, isEmpty#173, sum#174, isEmpty#175] -Results [6]: [web_site_id#170, sum#176, sum#177, isEmpty#178, sum#179, isEmpty#180] +Input [5]: [ws_ext_sales_price#165, ws_net_profit#166, wr_return_amt#170, wr_net_loss#171, web_site_id#176] +Keys [1]: [web_site_id#176] +Functions [3]: [partial_sum(UnscaledValue(ws_ext_sales_price#165)), partial_sum(coalesce(cast(wr_return_amt#170 as decimal(12,2)), 0.00)), partial_sum((ws_net_profit#166 - coalesce(cast(wr_net_loss#171 as decimal(12,2)), 0.00)))] +Aggregate Attributes [5]: [sum#177, sum#178, isEmpty#179, sum#180, isEmpty#181] +Results [6]: [web_site_id#176, sum#182, sum#183, isEmpty#184, sum#185, isEmpty#186] (132) Exchange -Input [6]: [web_site_id#170, sum#176, sum#177, isEmpty#178, sum#179, isEmpty#180] -Arguments: hashpartitioning(web_site_id#170, 5), ENSURE_REQUIREMENTS, [plan_id=17] +Input [6]: [web_site_id#176, sum#182, sum#183, isEmpty#184, sum#185, isEmpty#186] +Arguments: hashpartitioning(web_site_id#176, 5), ENSURE_REQUIREMENTS, [plan_id=17] (133) HashAggregate [codegen id : 62] -Input [6]: [web_site_id#170, sum#176, sum#177, isEmpty#178, sum#179, isEmpty#180] -Keys [1]: [web_site_id#170] -Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#159)), sum(coalesce(cast(wr_return_amt#164 as decimal(12,2)), 0.00)), sum((ws_net_profit#160 - coalesce(cast(wr_net_loss#165 as decimal(12,2)), 0.00)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#159))#105, sum(coalesce(cast(wr_return_amt#164 as decimal(12,2)), 0.00))#106, sum((ws_net_profit#160 - coalesce(cast(wr_net_loss#165 as decimal(12,2)), 0.00)))#107] -Results [5]: [web channel AS channel#181, concat(web_site, web_site_id#170) AS id#182, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#159))#105,17,2) AS sales#110, sum(coalesce(cast(wr_return_amt#164 as decimal(12,2)), 0.00))#106 AS returns#111, sum((ws_net_profit#160 - coalesce(cast(wr_net_loss#165 as decimal(12,2)), 0.00)))#107 AS profit#112] +Input [6]: [web_site_id#176, sum#182, sum#183, isEmpty#184, sum#185, isEmpty#186] +Keys [1]: [web_site_id#176] +Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#165)), sum(coalesce(cast(wr_return_amt#170 as decimal(12,2)), 0.00)), sum((ws_net_profit#166 - coalesce(cast(wr_net_loss#171 as decimal(12,2)), 0.00)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#165))#105, sum(coalesce(cast(wr_return_amt#170 as decimal(12,2)), 0.00))#106, sum((ws_net_profit#166 - coalesce(cast(wr_net_loss#171 as decimal(12,2)), 0.00)))#107] +Results [5]: [web channel AS channel#187, concat(web_site, web_site_id#176) AS id#188, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#165))#105,17,2) AS sales#189, sum(coalesce(cast(wr_return_amt#170 as decimal(12,2)), 0.00))#106 AS returns#190, sum((ws_net_profit#166 - coalesce(cast(wr_net_loss#171 as decimal(12,2)), 0.00)))#107 AS profit#191] (134) Union (135) HashAggregate [codegen id : 63] -Input [5]: [channel#141, id#142, sales#40, returns#41, profit#42] +Input [5]: [channel#141, id#142, sales#143, returns#144, profit#145] Keys [2]: [channel#141, id#142] -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#141, id#142, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] +Functions [3]: [partial_sum(sales#143), partial_sum(returns#144), partial_sum(profit#145)] +Aggregate Attributes [6]: [sum#192, isEmpty#193, sum#194, isEmpty#195, sum#196, isEmpty#197] +Results [8]: [channel#141, id#142, sum#198, isEmpty#199, sum#200, isEmpty#201, sum#202, isEmpty#203] (136) Exchange -Input [8]: [channel#141, id#142, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] +Input [8]: [channel#141, id#142, sum#198, isEmpty#199, sum#200, isEmpty#201, sum#202, isEmpty#203] Arguments: hashpartitioning(channel#141, id#142, 5), ENSURE_REQUIREMENTS, [plan_id=18] (137) HashAggregate [codegen id : 64] -Input [8]: [channel#141, id#142, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] +Input [8]: [channel#141, id#142, sum#198, isEmpty#199, sum#200, isEmpty#201, sum#202, isEmpty#203] Keys [2]: [channel#141, id#142] -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#141, sum(sales#40)#125 AS sales#183, sum(returns#41)#126 AS returns#184, sum(profit#42)#127 AS profit#185] +Functions [3]: [sum(sales#143), sum(returns#144), sum(profit#145)] +Aggregate Attributes [3]: [sum(sales#143)#125, sum(returns#144)#126, sum(profit#145)#127] +Results [4]: [channel#141, sum(sales#143)#125 AS sales#204, sum(returns#144)#126 AS returns#205, sum(profit#145)#127 AS profit#206] (138) HashAggregate [codegen id : 64] -Input [4]: [channel#141, sales#183, returns#184, profit#185] +Input [4]: [channel#141, sales#204, returns#205, profit#206] Keys [1]: [channel#141] -Functions [3]: [partial_sum(sales#183), partial_sum(returns#184), partial_sum(profit#185)] -Aggregate Attributes [6]: [sum#186, isEmpty#187, sum#188, isEmpty#189, sum#190, isEmpty#191] -Results [7]: [channel#141, sum#192, isEmpty#193, sum#194, isEmpty#195, sum#196, isEmpty#197] +Functions [3]: [partial_sum(sales#204), partial_sum(returns#205), partial_sum(profit#206)] +Aggregate Attributes [6]: [sum#207, isEmpty#208, sum#209, isEmpty#210, sum#211, isEmpty#212] +Results [7]: [channel#141, sum#213, isEmpty#214, sum#215, isEmpty#216, sum#217, isEmpty#218] (139) Exchange -Input [7]: [channel#141, sum#192, isEmpty#193, sum#194, isEmpty#195, sum#196, isEmpty#197] +Input [7]: [channel#141, sum#213, isEmpty#214, sum#215, isEmpty#216, sum#217, isEmpty#218] Arguments: hashpartitioning(channel#141, 5), ENSURE_REQUIREMENTS, [plan_id=19] (140) HashAggregate [codegen id : 65] -Input [7]: [channel#141, sum#192, isEmpty#193, sum#194, isEmpty#195, sum#196, isEmpty#197] +Input [7]: [channel#141, sum#213, isEmpty#214, sum#215, isEmpty#216, sum#217, isEmpty#218] Keys [1]: [channel#141] -Functions [3]: [sum(sales#183), sum(returns#184), sum(profit#185)] -Aggregate Attributes [3]: [sum(sales#183)#198, sum(returns#184)#199, sum(profit#185)#200] -Results [5]: [channel#141, null AS id#201, sum(sales#183)#198 AS sales#202, sum(returns#184)#199 AS returns#203, sum(profit#185)#200 AS profit#204] +Functions [3]: [sum(sales#204), sum(returns#205), sum(profit#206)] +Aggregate Attributes [3]: [sum(sales#204)#219, sum(returns#205)#220, sum(profit#206)#221] +Results [5]: [channel#141, null AS id#222, sum(sales#204)#219 AS sales#223, sum(returns#205)#220 AS returns#224, sum(profit#206)#221 AS profit#225] (141) Scan parquet spark_catalog.default.store_sales -Output [7]: [ss_item_sk#205, ss_store_sk#206, ss_promo_sk#207, ss_ticket_number#208, ss_ext_sales_price#209, ss_net_profit#210, ss_sold_date_sk#211] +Output [7]: [ss_item_sk#226, ss_store_sk#227, ss_promo_sk#228, ss_ticket_number#229, ss_ext_sales_price#230, ss_net_profit#231, ss_sold_date_sk#232] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(ss_sold_date_sk#211), dynamicpruningexpression(ss_sold_date_sk#211 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(ss_sold_date_sk#232), dynamicpruningexpression(ss_sold_date_sk#232 IN dynamicpruning#8)] PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_item_sk), IsNotNull(ss_promo_sk)] ReadSchema: struct (142) ColumnarToRow [codegen id : 66] -Input [7]: [ss_item_sk#205, ss_store_sk#206, ss_promo_sk#207, ss_ticket_number#208, ss_ext_sales_price#209, ss_net_profit#210, ss_sold_date_sk#211] +Input [7]: [ss_item_sk#226, ss_store_sk#227, ss_promo_sk#228, ss_ticket_number#229, ss_ext_sales_price#230, ss_net_profit#231, ss_sold_date_sk#232] (143) Filter [codegen id : 66] -Input [7]: [ss_item_sk#205, ss_store_sk#206, ss_promo_sk#207, ss_ticket_number#208, ss_ext_sales_price#209, ss_net_profit#210, ss_sold_date_sk#211] -Condition : ((isnotnull(ss_store_sk#206) AND isnotnull(ss_item_sk#205)) AND isnotnull(ss_promo_sk#207)) +Input [7]: [ss_item_sk#226, ss_store_sk#227, ss_promo_sk#228, ss_ticket_number#229, ss_ext_sales_price#230, ss_net_profit#231, ss_sold_date_sk#232] +Condition : ((isnotnull(ss_store_sk#227) AND isnotnull(ss_item_sk#226)) AND isnotnull(ss_promo_sk#228)) (144) Exchange -Input [7]: [ss_item_sk#205, ss_store_sk#206, ss_promo_sk#207, ss_ticket_number#208, ss_ext_sales_price#209, ss_net_profit#210, ss_sold_date_sk#211] -Arguments: hashpartitioning(ss_item_sk#205, ss_ticket_number#208, 5), ENSURE_REQUIREMENTS, [plan_id=20] +Input [7]: [ss_item_sk#226, ss_store_sk#227, ss_promo_sk#228, ss_ticket_number#229, ss_ext_sales_price#230, ss_net_profit#231, ss_sold_date_sk#232] +Arguments: hashpartitioning(ss_item_sk#226, ss_ticket_number#229, 5), ENSURE_REQUIREMENTS, [plan_id=20] (145) Sort [codegen id : 67] -Input [7]: [ss_item_sk#205, ss_store_sk#206, ss_promo_sk#207, ss_ticket_number#208, ss_ext_sales_price#209, ss_net_profit#210, ss_sold_date_sk#211] -Arguments: [ss_item_sk#205 ASC NULLS FIRST, ss_ticket_number#208 ASC NULLS FIRST], false, 0 +Input [7]: [ss_item_sk#226, ss_store_sk#227, ss_promo_sk#228, ss_ticket_number#229, ss_ext_sales_price#230, ss_net_profit#231, ss_sold_date_sk#232] +Arguments: [ss_item_sk#226 ASC NULLS FIRST, ss_ticket_number#229 ASC NULLS FIRST], false, 0 (146) ReusedExchange [Reuses operator id: 10] -Output [4]: [sr_item_sk#212, sr_ticket_number#213, sr_return_amt#214, sr_net_loss#215] +Output [4]: [sr_item_sk#233, sr_ticket_number#234, sr_return_amt#235, sr_net_loss#236] (147) Sort [codegen id : 69] -Input [4]: [sr_item_sk#212, sr_ticket_number#213, sr_return_amt#214, sr_net_loss#215] -Arguments: [sr_item_sk#212 ASC NULLS FIRST, sr_ticket_number#213 ASC NULLS FIRST], false, 0 +Input [4]: [sr_item_sk#233, sr_ticket_number#234, sr_return_amt#235, sr_net_loss#236] +Arguments: [sr_item_sk#233 ASC NULLS FIRST, sr_ticket_number#234 ASC NULLS FIRST], false, 0 (148) SortMergeJoin [codegen id : 74] -Left keys [2]: [ss_item_sk#205, ss_ticket_number#208] -Right keys [2]: [sr_item_sk#212, sr_ticket_number#213] +Left keys [2]: [ss_item_sk#226, ss_ticket_number#229] +Right keys [2]: [sr_item_sk#233, sr_ticket_number#234] Join type: LeftOuter Join condition: None (149) Project [codegen id : 74] -Output [8]: [ss_item_sk#205, ss_store_sk#206, ss_promo_sk#207, ss_ext_sales_price#209, ss_net_profit#210, ss_sold_date_sk#211, sr_return_amt#214, sr_net_loss#215] -Input [11]: [ss_item_sk#205, ss_store_sk#206, ss_promo_sk#207, ss_ticket_number#208, ss_ext_sales_price#209, ss_net_profit#210, ss_sold_date_sk#211, sr_item_sk#212, sr_ticket_number#213, sr_return_amt#214, sr_net_loss#215] +Output [8]: [ss_item_sk#226, ss_store_sk#227, ss_promo_sk#228, ss_ext_sales_price#230, ss_net_profit#231, ss_sold_date_sk#232, sr_return_amt#235, sr_net_loss#236] +Input [11]: [ss_item_sk#226, ss_store_sk#227, ss_promo_sk#228, ss_ticket_number#229, ss_ext_sales_price#230, ss_net_profit#231, ss_sold_date_sk#232, sr_item_sk#233, sr_ticket_number#234, sr_return_amt#235, sr_net_loss#236] (150) ReusedExchange [Reuses operator id: 18] -Output [1]: [i_item_sk#216] +Output [1]: [i_item_sk#237] (151) BroadcastHashJoin [codegen id : 74] -Left keys [1]: [ss_item_sk#205] -Right keys [1]: [i_item_sk#216] +Left keys [1]: [ss_item_sk#226] +Right keys [1]: [i_item_sk#237] Join type: Inner Join condition: None (152) Project [codegen id : 74] -Output [7]: [ss_store_sk#206, ss_promo_sk#207, ss_ext_sales_price#209, ss_net_profit#210, ss_sold_date_sk#211, sr_return_amt#214, sr_net_loss#215] -Input [9]: [ss_item_sk#205, ss_store_sk#206, ss_promo_sk#207, ss_ext_sales_price#209, ss_net_profit#210, ss_sold_date_sk#211, sr_return_amt#214, sr_net_loss#215, i_item_sk#216] +Output [7]: [ss_store_sk#227, ss_promo_sk#228, ss_ext_sales_price#230, ss_net_profit#231, ss_sold_date_sk#232, sr_return_amt#235, sr_net_loss#236] +Input [9]: [ss_item_sk#226, ss_store_sk#227, ss_promo_sk#228, ss_ext_sales_price#230, ss_net_profit#231, ss_sold_date_sk#232, sr_return_amt#235, sr_net_loss#236, i_item_sk#237] (153) ReusedExchange [Reuses operator id: 25] -Output [1]: [p_promo_sk#217] +Output [1]: [p_promo_sk#238] (154) BroadcastHashJoin [codegen id : 74] -Left keys [1]: [ss_promo_sk#207] -Right keys [1]: [p_promo_sk#217] +Left keys [1]: [ss_promo_sk#228] +Right keys [1]: [p_promo_sk#238] Join type: Inner Join condition: None (155) Project [codegen id : 74] -Output [6]: [ss_store_sk#206, ss_ext_sales_price#209, ss_net_profit#210, ss_sold_date_sk#211, sr_return_amt#214, sr_net_loss#215] -Input [8]: [ss_store_sk#206, ss_promo_sk#207, ss_ext_sales_price#209, ss_net_profit#210, ss_sold_date_sk#211, sr_return_amt#214, sr_net_loss#215, p_promo_sk#217] +Output [6]: [ss_store_sk#227, ss_ext_sales_price#230, ss_net_profit#231, ss_sold_date_sk#232, sr_return_amt#235, sr_net_loss#236] +Input [8]: [ss_store_sk#227, ss_promo_sk#228, ss_ext_sales_price#230, ss_net_profit#231, ss_sold_date_sk#232, sr_return_amt#235, sr_net_loss#236, p_promo_sk#238] (156) ReusedExchange [Reuses operator id: 221] -Output [1]: [d_date_sk#218] +Output [1]: [d_date_sk#239] (157) BroadcastHashJoin [codegen id : 74] -Left keys [1]: [ss_sold_date_sk#211] -Right keys [1]: [d_date_sk#218] +Left keys [1]: [ss_sold_date_sk#232] +Right keys [1]: [d_date_sk#239] Join type: Inner Join condition: None (158) Project [codegen id : 74] -Output [5]: [ss_store_sk#206, ss_ext_sales_price#209, ss_net_profit#210, sr_return_amt#214, sr_net_loss#215] -Input [7]: [ss_store_sk#206, ss_ext_sales_price#209, ss_net_profit#210, ss_sold_date_sk#211, sr_return_amt#214, sr_net_loss#215, d_date_sk#218] +Output [5]: [ss_store_sk#227, ss_ext_sales_price#230, ss_net_profit#231, sr_return_amt#235, sr_net_loss#236] +Input [7]: [ss_store_sk#227, ss_ext_sales_price#230, ss_net_profit#231, ss_sold_date_sk#232, sr_return_amt#235, sr_net_loss#236, d_date_sk#239] (159) ReusedExchange [Reuses operator id: 34] -Output [2]: [s_store_sk#219, s_store_id#220] +Output [2]: [s_store_sk#240, s_store_id#241] (160) BroadcastHashJoin [codegen id : 74] -Left keys [1]: [ss_store_sk#206] -Right keys [1]: [s_store_sk#219] +Left keys [1]: [ss_store_sk#227] +Right keys [1]: [s_store_sk#240] Join type: Inner Join condition: None (161) Project [codegen id : 74] -Output [5]: [ss_ext_sales_price#209, ss_net_profit#210, sr_return_amt#214, sr_net_loss#215, s_store_id#220] -Input [7]: [ss_store_sk#206, ss_ext_sales_price#209, ss_net_profit#210, sr_return_amt#214, sr_net_loss#215, s_store_sk#219, s_store_id#220] +Output [5]: [ss_ext_sales_price#230, ss_net_profit#231, sr_return_amt#235, sr_net_loss#236, s_store_id#241] +Input [7]: [ss_store_sk#227, ss_ext_sales_price#230, ss_net_profit#231, sr_return_amt#235, sr_net_loss#236, s_store_sk#240, s_store_id#241] (162) HashAggregate [codegen id : 74] -Input [5]: [ss_ext_sales_price#209, ss_net_profit#210, sr_return_amt#214, sr_net_loss#215, s_store_id#220] -Keys [1]: [s_store_id#220] -Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#209)), partial_sum(coalesce(cast(sr_return_amt#214 as decimal(12,2)), 0.00)), partial_sum((ss_net_profit#210 - coalesce(cast(sr_net_loss#215 as decimal(12,2)), 0.00)))] -Aggregate Attributes [5]: [sum#221, sum#222, isEmpty#223, sum#224, isEmpty#225] -Results [6]: [s_store_id#220, sum#226, sum#227, isEmpty#228, sum#229, isEmpty#230] +Input [5]: [ss_ext_sales_price#230, ss_net_profit#231, sr_return_amt#235, sr_net_loss#236, s_store_id#241] +Keys [1]: [s_store_id#241] +Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#230)), partial_sum(coalesce(cast(sr_return_amt#235 as decimal(12,2)), 0.00)), partial_sum((ss_net_profit#231 - coalesce(cast(sr_net_loss#236 as decimal(12,2)), 0.00)))] +Aggregate Attributes [5]: [sum#242, sum#243, isEmpty#244, sum#245, isEmpty#246] +Results [6]: [s_store_id#241, sum#247, sum#248, isEmpty#249, sum#250, isEmpty#251] (163) Exchange -Input [6]: [s_store_id#220, sum#226, sum#227, isEmpty#228, sum#229, isEmpty#230] -Arguments: hashpartitioning(s_store_id#220, 5), ENSURE_REQUIREMENTS, [plan_id=21] +Input [6]: [s_store_id#241, sum#247, sum#248, isEmpty#249, sum#250, isEmpty#251] +Arguments: hashpartitioning(s_store_id#241, 5), ENSURE_REQUIREMENTS, [plan_id=21] (164) HashAggregate [codegen id : 75] -Input [6]: [s_store_id#220, sum#226, sum#227, isEmpty#228, sum#229, isEmpty#230] -Keys [1]: [s_store_id#220] -Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#209)), sum(coalesce(cast(sr_return_amt#214 as decimal(12,2)), 0.00)), sum((ss_net_profit#210 - coalesce(cast(sr_net_loss#215 as decimal(12,2)), 0.00)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#209))#35, sum(coalesce(cast(sr_return_amt#214 as decimal(12,2)), 0.00))#36, sum((ss_net_profit#210 - coalesce(cast(sr_net_loss#215 as decimal(12,2)), 0.00)))#37] -Results [5]: [store channel AS channel#231, concat(store, s_store_id#220) AS id#232, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#209))#35,17,2) AS sales#40, sum(coalesce(cast(sr_return_amt#214 as decimal(12,2)), 0.00))#36 AS returns#41, sum((ss_net_profit#210 - coalesce(cast(sr_net_loss#215 as decimal(12,2)), 0.00)))#37 AS profit#42] +Input [6]: [s_store_id#241, sum#247, sum#248, isEmpty#249, sum#250, isEmpty#251] +Keys [1]: [s_store_id#241] +Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#230)), sum(coalesce(cast(sr_return_amt#235 as decimal(12,2)), 0.00)), sum((ss_net_profit#231 - coalesce(cast(sr_net_loss#236 as decimal(12,2)), 0.00)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#230))#35, sum(coalesce(cast(sr_return_amt#235 as decimal(12,2)), 0.00))#36, sum((ss_net_profit#231 - coalesce(cast(sr_net_loss#236 as decimal(12,2)), 0.00)))#37] +Results [5]: [store channel AS channel#252, concat(store, s_store_id#241) AS id#253, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#230))#35,17,2) AS sales#254, sum(coalesce(cast(sr_return_amt#235 as decimal(12,2)), 0.00))#36 AS returns#255, sum((ss_net_profit#231 - coalesce(cast(sr_net_loss#236 as decimal(12,2)), 0.00)))#37 AS profit#256] (165) Scan parquet spark_catalog.default.catalog_sales -Output [7]: [cs_catalog_page_sk#233, cs_item_sk#234, cs_promo_sk#235, cs_order_number#236, cs_ext_sales_price#237, cs_net_profit#238, cs_sold_date_sk#239] +Output [7]: [cs_catalog_page_sk#257, cs_item_sk#258, cs_promo_sk#259, cs_order_number#260, cs_ext_sales_price#261, cs_net_profit#262, cs_sold_date_sk#263] Batched: true Location: InMemoryFileIndex [] -PartitionFilters: [isnotnull(cs_sold_date_sk#239), dynamicpruningexpression(cs_sold_date_sk#239 IN dynamicpruning#8)] +PartitionFilters: [isnotnull(cs_sold_date_sk#263), dynamicpruningexpression(cs_sold_date_sk#263 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#233, cs_item_sk#234, cs_promo_sk#235, cs_order_number#236, cs_ext_sales_price#237, cs_net_profit#238, cs_sold_date_sk#239] +Input [7]: [cs_catalog_page_sk#257, cs_item_sk#258, cs_promo_sk#259, cs_order_number#260, cs_ext_sales_price#261, cs_net_profit#262, cs_sold_date_sk#263] (167) Filter [codegen id : 76] -Input [7]: [cs_catalog_page_sk#233, cs_item_sk#234, cs_promo_sk#235, cs_order_number#236, cs_ext_sales_price#237, cs_net_profit#238, cs_sold_date_sk#239] -Condition : ((isnotnull(cs_catalog_page_sk#233) AND isnotnull(cs_item_sk#234)) AND isnotnull(cs_promo_sk#235)) +Input [7]: [cs_catalog_page_sk#257, cs_item_sk#258, cs_promo_sk#259, cs_order_number#260, cs_ext_sales_price#261, cs_net_profit#262, cs_sold_date_sk#263] +Condition : ((isnotnull(cs_catalog_page_sk#257) AND isnotnull(cs_item_sk#258)) AND isnotnull(cs_promo_sk#259)) (168) Exchange -Input [7]: [cs_catalog_page_sk#233, cs_item_sk#234, cs_promo_sk#235, cs_order_number#236, cs_ext_sales_price#237, cs_net_profit#238, cs_sold_date_sk#239] -Arguments: hashpartitioning(cs_item_sk#234, cs_order_number#236, 5), ENSURE_REQUIREMENTS, [plan_id=22] +Input [7]: [cs_catalog_page_sk#257, cs_item_sk#258, cs_promo_sk#259, cs_order_number#260, cs_ext_sales_price#261, cs_net_profit#262, cs_sold_date_sk#263] +Arguments: hashpartitioning(cs_item_sk#258, cs_order_number#260, 5), ENSURE_REQUIREMENTS, [plan_id=22] (169) Sort [codegen id : 77] -Input [7]: [cs_catalog_page_sk#233, cs_item_sk#234, cs_promo_sk#235, cs_order_number#236, cs_ext_sales_price#237, cs_net_profit#238, cs_sold_date_sk#239] -Arguments: [cs_item_sk#234 ASC NULLS FIRST, cs_order_number#236 ASC NULLS FIRST], false, 0 +Input [7]: [cs_catalog_page_sk#257, cs_item_sk#258, cs_promo_sk#259, cs_order_number#260, cs_ext_sales_price#261, cs_net_profit#262, cs_sold_date_sk#263] +Arguments: [cs_item_sk#258 ASC NULLS FIRST, cs_order_number#260 ASC NULLS FIRST], false, 0 (170) ReusedExchange [Reuses operator id: 49] -Output [4]: [cr_item_sk#240, cr_order_number#241, cr_return_amount#242, cr_net_loss#243] +Output [4]: [cr_item_sk#264, cr_order_number#265, cr_return_amount#266, cr_net_loss#267] (171) Sort [codegen id : 79] -Input [4]: [cr_item_sk#240, cr_order_number#241, cr_return_amount#242, cr_net_loss#243] -Arguments: [cr_item_sk#240 ASC NULLS FIRST, cr_order_number#241 ASC NULLS FIRST], false, 0 +Input [4]: [cr_item_sk#264, cr_order_number#265, cr_return_amount#266, cr_net_loss#267] +Arguments: [cr_item_sk#264 ASC NULLS FIRST, cr_order_number#265 ASC NULLS FIRST], false, 0 (172) SortMergeJoin [codegen id : 84] -Left keys [2]: [cs_item_sk#234, cs_order_number#236] -Right keys [2]: [cr_item_sk#240, cr_order_number#241] +Left keys [2]: [cs_item_sk#258, cs_order_number#260] +Right keys [2]: [cr_item_sk#264, cr_order_number#265] Join type: LeftOuter Join condition: None (173) Project [codegen id : 84] -Output [8]: [cs_catalog_page_sk#233, cs_item_sk#234, cs_promo_sk#235, cs_ext_sales_price#237, cs_net_profit#238, cs_sold_date_sk#239, cr_return_amount#242, cr_net_loss#243] -Input [11]: [cs_catalog_page_sk#233, cs_item_sk#234, cs_promo_sk#235, cs_order_number#236, cs_ext_sales_price#237, cs_net_profit#238, cs_sold_date_sk#239, cr_item_sk#240, cr_order_number#241, cr_return_amount#242, cr_net_loss#243] +Output [8]: [cs_catalog_page_sk#257, cs_item_sk#258, cs_promo_sk#259, cs_ext_sales_price#261, cs_net_profit#262, cs_sold_date_sk#263, cr_return_amount#266, cr_net_loss#267] +Input [11]: [cs_catalog_page_sk#257, cs_item_sk#258, cs_promo_sk#259, cs_order_number#260, cs_ext_sales_price#261, cs_net_profit#262, cs_sold_date_sk#263, cr_item_sk#264, cr_order_number#265, cr_return_amount#266, cr_net_loss#267] (174) ReusedExchange [Reuses operator id: 18] -Output [1]: [i_item_sk#244] +Output [1]: [i_item_sk#268] (175) BroadcastHashJoin [codegen id : 84] -Left keys [1]: [cs_item_sk#234] -Right keys [1]: [i_item_sk#244] +Left keys [1]: [cs_item_sk#258] +Right keys [1]: [i_item_sk#268] Join type: Inner Join condition: None (176) Project [codegen id : 84] -Output [7]: [cs_catalog_page_sk#233, cs_promo_sk#235, cs_ext_sales_price#237, cs_net_profit#238, cs_sold_date_sk#239, cr_return_amount#242, cr_net_loss#243] -Input [9]: [cs_catalog_page_sk#233, cs_item_sk#234, cs_promo_sk#235, cs_ext_sales_price#237, cs_net_profit#238, cs_sold_date_sk#239, cr_return_amount#242, cr_net_loss#243, i_item_sk#244] +Output [7]: [cs_catalog_page_sk#257, cs_promo_sk#259, cs_ext_sales_price#261, cs_net_profit#262, cs_sold_date_sk#263, cr_return_amount#266, cr_net_loss#267] +Input [9]: [cs_catalog_page_sk#257, cs_item_sk#258, cs_promo_sk#259, cs_ext_sales_price#261, cs_net_profit#262, cs_sold_date_sk#263, cr_return_amount#266, cr_net_loss#267, i_item_sk#268] (177) ReusedExchange [Reuses operator id: 25] -Output [1]: [p_promo_sk#245] +Output [1]: [p_promo_sk#269] (178) BroadcastHashJoin [codegen id : 84] -Left keys [1]: [cs_promo_sk#235] -Right keys [1]: [p_promo_sk#245] +Left keys [1]: [cs_promo_sk#259] +Right keys [1]: [p_promo_sk#269] Join type: Inner Join condition: None (179) Project [codegen id : 84] -Output [6]: [cs_catalog_page_sk#233, cs_ext_sales_price#237, cs_net_profit#238, cs_sold_date_sk#239, cr_return_amount#242, cr_net_loss#243] -Input [8]: [cs_catalog_page_sk#233, cs_promo_sk#235, cs_ext_sales_price#237, cs_net_profit#238, cs_sold_date_sk#239, cr_return_amount#242, cr_net_loss#243, p_promo_sk#245] +Output [6]: [cs_catalog_page_sk#257, cs_ext_sales_price#261, cs_net_profit#262, cs_sold_date_sk#263, cr_return_amount#266, cr_net_loss#267] +Input [8]: [cs_catalog_page_sk#257, cs_promo_sk#259, cs_ext_sales_price#261, cs_net_profit#262, cs_sold_date_sk#263, cr_return_amount#266, cr_net_loss#267, p_promo_sk#269] (180) ReusedExchange [Reuses operator id: 221] -Output [1]: [d_date_sk#246] +Output [1]: [d_date_sk#270] (181) BroadcastHashJoin [codegen id : 84] -Left keys [1]: [cs_sold_date_sk#239] -Right keys [1]: [d_date_sk#246] +Left keys [1]: [cs_sold_date_sk#263] +Right keys [1]: [d_date_sk#270] Join type: Inner Join condition: None (182) Project [codegen id : 84] -Output [5]: [cs_catalog_page_sk#233, cs_ext_sales_price#237, cs_net_profit#238, cr_return_amount#242, cr_net_loss#243] -Input [7]: [cs_catalog_page_sk#233, cs_ext_sales_price#237, cs_net_profit#238, cs_sold_date_sk#239, cr_return_amount#242, cr_net_loss#243, d_date_sk#246] +Output [5]: [cs_catalog_page_sk#257, cs_ext_sales_price#261, cs_net_profit#262, cr_return_amount#266, cr_net_loss#267] +Input [7]: [cs_catalog_page_sk#257, cs_ext_sales_price#261, cs_net_profit#262, cs_sold_date_sk#263, cr_return_amount#266, cr_net_loss#267, d_date_sk#270] (183) ReusedExchange [Reuses operator id: 65] -Output [2]: [cp_catalog_page_sk#247, cp_catalog_page_id#248] +Output [2]: [cp_catalog_page_sk#271, cp_catalog_page_id#272] (184) BroadcastHashJoin [codegen id : 84] -Left keys [1]: [cs_catalog_page_sk#233] -Right keys [1]: [cp_catalog_page_sk#247] +Left keys [1]: [cs_catalog_page_sk#257] +Right keys [1]: [cp_catalog_page_sk#271] Join type: Inner Join condition: None (185) Project [codegen id : 84] -Output [5]: [cs_ext_sales_price#237, cs_net_profit#238, cr_return_amount#242, cr_net_loss#243, cp_catalog_page_id#248] -Input [7]: [cs_catalog_page_sk#233, cs_ext_sales_price#237, cs_net_profit#238, cr_return_amount#242, cr_net_loss#243, cp_catalog_page_sk#247, cp_catalog_page_id#248] +Output [5]: [cs_ext_sales_price#261, cs_net_profit#262, cr_return_amount#266, cr_net_loss#267, cp_catalog_page_id#272] +Input [7]: [cs_catalog_page_sk#257, cs_ext_sales_price#261, cs_net_profit#262, cr_return_amount#266, cr_net_loss#267, cp_catalog_page_sk#271, cp_catalog_page_id#272] (186) HashAggregate [codegen id : 84] -Input [5]: [cs_ext_sales_price#237, cs_net_profit#238, cr_return_amount#242, cr_net_loss#243, cp_catalog_page_id#248] -Keys [1]: [cp_catalog_page_id#248] -Functions [3]: [partial_sum(UnscaledValue(cs_ext_sales_price#237)), partial_sum(coalesce(cast(cr_return_amount#242 as decimal(12,2)), 0.00)), partial_sum((cs_net_profit#238 - coalesce(cast(cr_net_loss#243 as decimal(12,2)), 0.00)))] -Aggregate Attributes [5]: [sum#249, sum#250, isEmpty#251, sum#252, isEmpty#253] -Results [6]: [cp_catalog_page_id#248, sum#254, sum#255, isEmpty#256, sum#257, isEmpty#258] +Input [5]: [cs_ext_sales_price#261, cs_net_profit#262, cr_return_amount#266, cr_net_loss#267, cp_catalog_page_id#272] +Keys [1]: [cp_catalog_page_id#272] +Functions [3]: [partial_sum(UnscaledValue(cs_ext_sales_price#261)), partial_sum(coalesce(cast(cr_return_amount#266 as decimal(12,2)), 0.00)), partial_sum((cs_net_profit#262 - coalesce(cast(cr_net_loss#267 as decimal(12,2)), 0.00)))] +Aggregate Attributes [5]: [sum#273, sum#274, isEmpty#275, sum#276, isEmpty#277] +Results [6]: [cp_catalog_page_id#272, sum#278, sum#279, isEmpty#280, sum#281, isEmpty#282] (187) Exchange -Input [6]: [cp_catalog_page_id#248, sum#254, sum#255, isEmpty#256, sum#257, isEmpty#258] -Arguments: hashpartitioning(cp_catalog_page_id#248, 5), ENSURE_REQUIREMENTS, [plan_id=23] +Input [6]: [cp_catalog_page_id#272, sum#278, sum#279, isEmpty#280, sum#281, isEmpty#282] +Arguments: hashpartitioning(cp_catalog_page_id#272, 5), ENSURE_REQUIREMENTS, [plan_id=23] (188) HashAggregate [codegen id : 85] -Input [6]: [cp_catalog_page_id#248, sum#254, sum#255, isEmpty#256, sum#257, isEmpty#258] -Keys [1]: [cp_catalog_page_id#248] -Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#237)), sum(coalesce(cast(cr_return_amount#242 as decimal(12,2)), 0.00)), sum((cs_net_profit#238 - coalesce(cast(cr_net_loss#243 as decimal(12,2)), 0.00)))] -Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#237))#70, sum(coalesce(cast(cr_return_amount#242 as decimal(12,2)), 0.00))#71, sum((cs_net_profit#238 - coalesce(cast(cr_net_loss#243 as decimal(12,2)), 0.00)))#72] -Results [5]: [catalog channel AS channel#259, concat(catalog_page, cp_catalog_page_id#248) AS id#260, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#237))#70,17,2) AS sales#75, sum(coalesce(cast(cr_return_amount#242 as decimal(12,2)), 0.00))#71 AS returns#76, sum((cs_net_profit#238 - coalesce(cast(cr_net_loss#243 as decimal(12,2)), 0.00)))#72 AS profit#77] +Input [6]: [cp_catalog_page_id#272, sum#278, sum#279, isEmpty#280, sum#281, isEmpty#282] +Keys [1]: [cp_catalog_page_id#272] +Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#261)), sum(coalesce(cast(cr_return_amount#266 as decimal(12,2)), 0.00)), sum((cs_net_profit#262 - coalesce(cast(cr_net_loss#267 as decimal(12,2)), 0.00)))] +Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#261))#70, sum(coalesce(cast(cr_return_amount#266 as decimal(12,2)), 0.00))#71, sum((cs_net_profit#262 - coalesce(cast(cr_net_loss#267 as decimal(12,2)), 0.00)))#72] +Results [5]: [catalog channel AS channel#283, concat(catalog_page, cp_catalog_page_id#272) AS id#284, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#261))#70,17,2) AS sales#285, sum(coalesce(cast(cr_return_amount#266 as decimal(12,2)), 0.00))#71 AS returns#286, sum((cs_net_profit#262 - coalesce(cast(cr_net_loss#267 as decimal(12,2)), 0.00)))#72 AS profit#287] (189) ReusedExchange [Reuses operator id: 132] -Output [6]: [web_site_id#261, sum#262, sum#263, isEmpty#264, sum#265, isEmpty#266] +Output [6]: [web_site_id#288, sum#289, sum#290, isEmpty#291, sum#292, isEmpty#293] (190) HashAggregate [codegen id : 95] -Input [6]: [web_site_id#261, sum#262, sum#263, isEmpty#264, sum#265, isEmpty#266] -Keys [1]: [web_site_id#261] -Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#267)), sum(coalesce(cast(wr_return_amt#268 as decimal(12,2)), 0.00)), sum((ws_net_profit#269 - coalesce(cast(wr_net_loss#270 as decimal(12,2)), 0.00)))] -Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#267))#105, sum(coalesce(cast(wr_return_amt#268 as decimal(12,2)), 0.00))#106, sum((ws_net_profit#269 - coalesce(cast(wr_net_loss#270 as decimal(12,2)), 0.00)))#107] -Results [5]: [web channel AS channel#271, concat(web_site, web_site_id#261) AS id#272, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#267))#105,17,2) AS sales#110, sum(coalesce(cast(wr_return_amt#268 as decimal(12,2)), 0.00))#106 AS returns#111, sum((ws_net_profit#269 - coalesce(cast(wr_net_loss#270 as decimal(12,2)), 0.00)))#107 AS profit#112] +Input [6]: [web_site_id#288, sum#289, sum#290, isEmpty#291, sum#292, isEmpty#293] +Keys [1]: [web_site_id#288] +Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#294)), sum(coalesce(cast(wr_return_amt#295 as decimal(12,2)), 0.00)), sum((ws_net_profit#296 - coalesce(cast(wr_net_loss#297 as decimal(12,2)), 0.00)))] +Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#294))#105, sum(coalesce(cast(wr_return_amt#295 as decimal(12,2)), 0.00))#106, sum((ws_net_profit#296 - coalesce(cast(wr_net_loss#297 as decimal(12,2)), 0.00)))#107] +Results [5]: [web channel AS channel#298, concat(web_site, web_site_id#288) AS id#299, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#294))#105,17,2) AS sales#300, sum(coalesce(cast(wr_return_amt#295 as decimal(12,2)), 0.00))#106 AS returns#301, sum((ws_net_profit#296 - coalesce(cast(wr_net_loss#297 as decimal(12,2)), 0.00)))#107 AS profit#302] (191) Union (192) HashAggregate [codegen id : 96] -Input [5]: [channel#231, id#232, sales#40, returns#41, profit#42] -Keys [2]: [channel#231, id#232] -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#231, id#232, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] +Input [5]: [channel#252, id#253, sales#254, returns#255, profit#256] +Keys [2]: [channel#252, id#253] +Functions [3]: [partial_sum(sales#254), partial_sum(returns#255), partial_sum(profit#256)] +Aggregate Attributes [6]: [sum#303, isEmpty#304, sum#305, isEmpty#306, sum#307, isEmpty#308] +Results [8]: [channel#252, id#253, sum#309, isEmpty#310, sum#311, isEmpty#312, sum#313, isEmpty#314] (193) Exchange -Input [8]: [channel#231, id#232, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] -Arguments: hashpartitioning(channel#231, id#232, 5), ENSURE_REQUIREMENTS, [plan_id=24] +Input [8]: [channel#252, id#253, sum#309, isEmpty#310, sum#311, isEmpty#312, sum#313, isEmpty#314] +Arguments: hashpartitioning(channel#252, id#253, 5), ENSURE_REQUIREMENTS, [plan_id=24] (194) HashAggregate [codegen id : 97] -Input [8]: [channel#231, id#232, sum#119, isEmpty#120, sum#121, isEmpty#122, sum#123, isEmpty#124] -Keys [2]: [channel#231, id#232] -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#273, sum(returns#41)#126 AS returns#274, sum(profit#42)#127 AS profit#275] +Input [8]: [channel#252, id#253, sum#309, isEmpty#310, sum#311, isEmpty#312, sum#313, isEmpty#314] +Keys [2]: [channel#252, id#253] +Functions [3]: [sum(sales#254), sum(returns#255), sum(profit#256)] +Aggregate Attributes [3]: [sum(sales#254)#125, sum(returns#255)#126, sum(profit#256)#127] +Results [3]: [sum(sales#254)#125 AS sales#315, sum(returns#255)#126 AS returns#316, sum(profit#256)#127 AS profit#317] (195) HashAggregate [codegen id : 97] -Input [3]: [sales#273, returns#274, profit#275] +Input [3]: [sales#315, returns#316, profit#317] Keys: [] -Functions [3]: [partial_sum(sales#273), partial_sum(returns#274), partial_sum(profit#275)] -Aggregate Attributes [6]: [sum#276, isEmpty#277, sum#278, isEmpty#279, sum#280, isEmpty#281] -Results [6]: [sum#282, isEmpty#283, sum#284, isEmpty#285, sum#286, isEmpty#287] +Functions [3]: [partial_sum(sales#315), partial_sum(returns#316), partial_sum(profit#317)] +Aggregate Attributes [6]: [sum#318, isEmpty#319, sum#320, isEmpty#321, sum#322, isEmpty#323] +Results [6]: [sum#324, isEmpty#325, sum#326, isEmpty#327, sum#328, isEmpty#329] (196) Exchange -Input [6]: [sum#282, isEmpty#283, sum#284, isEmpty#285, sum#286, isEmpty#287] +Input [6]: [sum#324, isEmpty#325, sum#326, isEmpty#327, sum#328, isEmpty#329] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=25] (197) HashAggregate [codegen id : 98] -Input [6]: [sum#282, isEmpty#283, sum#284, isEmpty#285, sum#286, isEmpty#287] +Input [6]: [sum#324, isEmpty#325, sum#326, isEmpty#327, sum#328, isEmpty#329] Keys: [] -Functions [3]: [sum(sales#273), sum(returns#274), sum(profit#275)] -Aggregate Attributes [3]: [sum(sales#273)#288, sum(returns#274)#289, sum(profit#275)#290] -Results [5]: [null AS channel#291, null AS id#292, sum(sales#273)#288 AS sales#293, sum(returns#274)#289 AS returns#294, sum(profit#275)#290 AS profit#295] +Functions [3]: [sum(sales#315), sum(returns#316), sum(profit#317)] +Aggregate Attributes [3]: [sum(sales#315)#330, sum(returns#316)#331, sum(profit#317)#332] +Results [5]: [null AS channel#333, null AS id#334, sum(sales#315)#330 AS sales#335, sum(returns#316)#331 AS returns#336, sum(profit#317)#332 AS profit#337] (198) Union @@ -1187,19 +1187,19 @@ Input [2]: [i_item_sk#18, i_current_price#19] Input [1]: [i_item_sk#18] Keys: [] Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)] -Aggregate Attributes [1]: [buf#296] -Results [1]: [buf#297] +Aggregate Attributes [1]: [buf#338] +Results [1]: [buf#339] (208) Exchange -Input [1]: [buf#297] +Input [1]: [buf#339] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=27] (209) ObjectHashAggregate -Input [1]: [buf#297] +Input [1]: [buf#339] Keys: [] Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#298] -Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#298 AS bloomFilter#299] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#340] +Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#18, 42), 101823, 1521109, 0, 0)#340 AS bloomFilter#341] Subquery:2 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#11, [id=#12] ObjectHashAggregate (216) @@ -1233,19 +1233,19 @@ Input [2]: [p_promo_sk#20, p_channel_tv#21] Input [1]: [p_promo_sk#20] Keys: [] Functions [1]: [partial_bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)] -Aggregate Attributes [1]: [buf#300] -Results [1]: [buf#301] +Aggregate Attributes [1]: [buf#342] +Results [1]: [buf#343] (215) Exchange -Input [1]: [buf#301] +Input [1]: [buf#343] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=28] (216) ObjectHashAggregate -Input [1]: [buf#301] +Input [1]: [buf#343] Keys: [] Functions [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)] -Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#302] -Results [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#302 AS bloomFilter#303] +Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#344] +Results [1]: [bloom_filter_agg(xxhash64(p_promo_sk#20, 42), 986, 24246, 0, 0)#344 AS bloomFilter#345] Subquery:3 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8 BroadcastExchange (221) @@ -1256,22 +1256,22 @@ BroadcastExchange (221) (217) Scan parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#22, d_date#304] +Output [2]: [d_date_sk#22, d_date#346] 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#22, d_date#304] +Input [2]: [d_date_sk#22, d_date#346] (219) Filter [codegen id : 1] -Input [2]: [d_date_sk#22, d_date#304] -Condition : (((isnotnull(d_date#304) AND (d_date#304 >= 1998-08-04)) AND (d_date#304 <= 1998-09-03)) AND isnotnull(d_date_sk#22)) +Input [2]: [d_date_sk#22, d_date#346] +Condition : (((isnotnull(d_date#346) AND (d_date#346 >= 1998-08-04)) AND (d_date#346 <= 1998-09-03)) AND isnotnull(d_date_sk#22)) (220) Project [codegen id : 1] Output [1]: [d_date_sk#22] -Input [2]: [d_date_sk#22, d_date#304] +Input [2]: [d_date_sk#22, d_date#346] (221) BroadcastExchange Input [1]: [d_date_sk#22] @@ -1289,10 +1289,10 @@ Subquery:8 Hosting operator id = 73 Hosting Expression = ReusedSubquery Subquery 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#161 IN dynamicpruning#8 +Subquery:10 Hosting operator id = 110 Hosting Expression = ws_sold_date_sk#167 IN dynamicpruning#8 -Subquery:11 Hosting operator id = 141 Hosting Expression = ss_sold_date_sk#211 IN dynamicpruning#8 +Subquery:11 Hosting operator id = 141 Hosting Expression = ss_sold_date_sk#232 IN dynamicpruning#8 -Subquery:12 Hosting operator id = 165 Hosting Expression = cs_sold_date_sk#239 IN dynamicpruning#8 +Subquery:12 Hosting operator id = 165 Hosting Expression = cs_sold_date_sk#263 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 6770bd4fd7f55..2507d4a4e5206 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 @@ -612,60 +612,60 @@ Aggregate Attributes [3]: [sum(sales#36)#121, sum(returns#37)#122, sum(profit#38 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#127, id#128, sum#115, isEmpty#116, sum#117, isEmpty#118, sum#119, isEmpty#120] +Output [8]: [channel#127, id#128, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] (107) HashAggregate [codegen id : 64] -Input [8]: [channel#127, id#128, sum#115, isEmpty#116, sum#117, isEmpty#118, sum#119, isEmpty#120] +Input [8]: [channel#127, id#128, sum#129, isEmpty#130, sum#131, isEmpty#132, sum#133, isEmpty#134] Keys [2]: [channel#127, id#128] -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#127, sum(sales#36)#121 AS sales#129, sum(returns#37)#122 AS returns#130, sum(profit#38)#123 AS profit#131] +Functions [3]: [sum(sales#135), sum(returns#136), sum(profit#137)] +Aggregate Attributes [3]: [sum(sales#135)#121, sum(returns#136)#122, sum(profit#137)#123] +Results [4]: [channel#127, sum(sales#135)#121 AS sales#138, sum(returns#136)#122 AS returns#139, sum(profit#137)#123 AS profit#140] (108) HashAggregate [codegen id : 64] -Input [4]: [channel#127, sales#129, returns#130, profit#131] +Input [4]: [channel#127, sales#138, returns#139, profit#140] Keys [1]: [channel#127] -Functions [3]: [partial_sum(sales#129), partial_sum(returns#130), partial_sum(profit#131)] -Aggregate Attributes [6]: [sum#132, isEmpty#133, sum#134, isEmpty#135, sum#136, isEmpty#137] -Results [7]: [channel#127, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] +Functions [3]: [partial_sum(sales#138), partial_sum(returns#139), partial_sum(profit#140)] +Aggregate Attributes [6]: [sum#141, isEmpty#142, sum#143, isEmpty#144, sum#145, isEmpty#146] +Results [7]: [channel#127, sum#147, isEmpty#148, sum#149, isEmpty#150, sum#151, isEmpty#152] (109) Exchange -Input [7]: [channel#127, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] +Input [7]: [channel#127, sum#147, isEmpty#148, sum#149, isEmpty#150, sum#151, isEmpty#152] Arguments: hashpartitioning(channel#127, 5), ENSURE_REQUIREMENTS, [plan_id=16] (110) HashAggregate [codegen id : 65] -Input [7]: [channel#127, sum#138, isEmpty#139, sum#140, isEmpty#141, sum#142, isEmpty#143] +Input [7]: [channel#127, sum#147, isEmpty#148, sum#149, isEmpty#150, sum#151, isEmpty#152] Keys [1]: [channel#127] -Functions [3]: [sum(sales#129), sum(returns#130), sum(profit#131)] -Aggregate Attributes [3]: [sum(sales#129)#144, sum(returns#130)#145, sum(profit#131)#146] -Results [5]: [channel#127, null AS id#147, sum(sales#129)#144 AS sales#148, sum(returns#130)#145 AS returns#149, sum(profit#131)#146 AS profit#150] +Functions [3]: [sum(sales#138), sum(returns#139), sum(profit#140)] +Aggregate Attributes [3]: [sum(sales#138)#153, sum(returns#139)#154, sum(profit#140)#155] +Results [5]: [channel#127, null AS id#156, sum(sales#138)#153 AS sales#157, sum(returns#139)#154 AS returns#158, sum(profit#140)#155 AS profit#159] (111) ReusedExchange [Reuses operator id: 104] -Output [8]: [channel#151, id#152, sum#115, isEmpty#116, sum#117, isEmpty#118, sum#119, isEmpty#120] +Output [8]: [channel#160, id#161, sum#162, isEmpty#163, sum#164, isEmpty#165, sum#166, isEmpty#167] (112) HashAggregate [codegen id : 97] -Input [8]: [channel#151, id#152, sum#115, isEmpty#116, sum#117, isEmpty#118, sum#119, isEmpty#120] -Keys [2]: [channel#151, id#152] -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#153, sum(returns#37)#122 AS returns#154, sum(profit#38)#123 AS profit#155] +Input [8]: [channel#160, id#161, sum#162, isEmpty#163, sum#164, isEmpty#165, sum#166, isEmpty#167] +Keys [2]: [channel#160, id#161] +Functions [3]: [sum(sales#168), sum(returns#169), sum(profit#170)] +Aggregate Attributes [3]: [sum(sales#168)#121, sum(returns#169)#122, sum(profit#170)#123] +Results [3]: [sum(sales#168)#121 AS sales#171, sum(returns#169)#122 AS returns#172, sum(profit#170)#123 AS profit#173] (113) HashAggregate [codegen id : 97] -Input [3]: [sales#153, returns#154, profit#155] +Input [3]: [sales#171, returns#172, profit#173] Keys: [] -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 [6]: [sum#162, isEmpty#163, sum#164, isEmpty#165, sum#166, isEmpty#167] +Functions [3]: [partial_sum(sales#171), partial_sum(returns#172), partial_sum(profit#173)] +Aggregate Attributes [6]: [sum#174, isEmpty#175, sum#176, isEmpty#177, sum#178, isEmpty#179] +Results [6]: [sum#180, isEmpty#181, sum#182, isEmpty#183, sum#184, isEmpty#185] (114) Exchange -Input [6]: [sum#162, isEmpty#163, sum#164, isEmpty#165, sum#166, isEmpty#167] +Input [6]: [sum#180, isEmpty#181, sum#182, isEmpty#183, sum#184, isEmpty#185] Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=17] (115) HashAggregate [codegen id : 98] -Input [6]: [sum#162, isEmpty#163, sum#164, isEmpty#165, sum#166, isEmpty#167] +Input [6]: [sum#180, isEmpty#181, sum#182, isEmpty#183, sum#184, isEmpty#185] Keys: [] -Functions [3]: [sum(sales#153), sum(returns#154), sum(profit#155)] -Aggregate Attributes [3]: [sum(sales#153)#168, sum(returns#154)#169, sum(profit#155)#170] -Results [5]: [null AS channel#171, null AS id#172, sum(sales#153)#168 AS sales#173, sum(returns#154)#169 AS returns#174, sum(profit#155)#170 AS profit#175] +Functions [3]: [sum(sales#171), sum(returns#172), sum(profit#173)] +Aggregate Attributes [3]: [sum(sales#171)#186, sum(returns#172)#187, sum(profit#173)#188] +Results [5]: [null AS channel#189, null AS id#190, sum(sales#171)#186 AS sales#191, sum(returns#172)#187 AS returns#192, sum(profit#173)#188 AS profit#193] (116) Union @@ -702,22 +702,22 @@ BroadcastExchange (125) (121) Scan parquet spark_catalog.default.date_dim -Output [2]: [d_date_sk#14, d_date#176] +Output [2]: [d_date_sk#14, d_date#194] 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#14, d_date#176] +Input [2]: [d_date_sk#14, d_date#194] (123) Filter [codegen id : 1] -Input [2]: [d_date_sk#14, d_date#176] -Condition : (((isnotnull(d_date#176) AND (d_date#176 >= 1998-08-04)) AND (d_date#176 <= 1998-09-03)) AND isnotnull(d_date_sk#14)) +Input [2]: [d_date_sk#14, d_date#194] +Condition : (((isnotnull(d_date#194) AND (d_date#194 >= 1998-08-04)) AND (d_date#194 <= 1998-09-03)) AND isnotnull(d_date_sk#14)) (124) Project [codegen id : 1] Output [1]: [d_date_sk#14] -Input [2]: [d_date_sk#14, d_date#176] +Input [2]: [d_date_sk#14, d_date#194] (125) BroadcastExchange Input [1]: [d_date_sk#14]