[SPARK-34812][SQL] RowNumberLike and RankLike should not be nullable

### What changes were proposed in this pull request?

Marked `RowNumberLike` and `RankLike` as not-nullable.

### Why are the changes needed?

`RowNumberLike` and `RankLike` SQL expressions never return null value. Marking them as non-nullable can have some performance benefits, because some optimizer rules apply only to non-nullable expressions

### Does this PR introduce _any_ user-facing change?

No

### How was this patch tested?

Did not find any existing tests on the nullability of aggregate functions.
Plan stability suite partially covers this.

Closes #31924 from tanelk/SPARK-34812_nullability.

Authored-by: tanel.kiis@gmail.com <tanel.kiis@gmail.com>
Signed-off-by: Wenchen Fan <wenchen@databricks.com>
This commit is contained in:
tanel.kiis@gmail.com 2021-03-22 14:55:43 +00:00 committed by Wenchen Fan
parent ddfc75ec64
commit 51cf0cadea
21 changed files with 914 additions and 1082 deletions

View file

@ -526,6 +526,7 @@ abstract class RowNumberLike extends AggregateWindowFunction {
override val aggBufferAttributes: Seq[AttributeReference] = rowNumber :: Nil
override val initialValues: Seq[Expression] = zero :: Nil
override val updateExpressions: Seq[Expression] = rowNumber + one :: Nil
override def nullable: Boolean = false
}
/**
@ -834,6 +835,7 @@ abstract class RankLike extends AggregateWindowFunction {
override val updateExpressions = increaseRank +: increaseRowNumber +: children
override val evaluateExpression: Expression = rank
override def nullable: Boolean = false
override def sql: String = s"${prettyName.toUpperCase(Locale.ROOT)}()"
def withOrder(order: Seq[Expression]): RankLike

View file

@ -1,9 +1,9 @@
== Physical Plan ==
TakeOrderedAndProject (58)
+- * Project (57)
+- * SortMergeJoin Inner (56)
:- * Project (48)
: +- * SortMergeJoin Inner (47)
TakeOrderedAndProject (56)
+- * Project (55)
+- * SortMergeJoin Inner (54)
:- * Project (47)
: +- * SortMergeJoin Inner (46)
: :- * Sort (37)
: : +- Exchange (36)
: : +- * Filter (35)
@ -41,22 +41,20 @@ TakeOrderedAndProject (58)
: : +- * Filter (20)
: : +- * ColumnarToRow (19)
: : +- Scan parquet default.item (18)
: +- * Sort (46)
: +- Exchange (45)
: +- * Project (44)
: +- * Filter (43)
: +- Window (42)
: +- * Sort (41)
: +- Exchange (40)
: +- * HashAggregate (39)
: +- ReusedExchange (38)
+- * Sort (55)
+- Exchange (54)
+- * Project (53)
+- * Filter (52)
+- Window (51)
+- * Sort (50)
+- ReusedExchange (49)
: +- * Sort (45)
: +- Exchange (44)
: +- * Project (43)
: +- Window (42)
: +- * Sort (41)
: +- Exchange (40)
: +- * HashAggregate (39)
: +- ReusedExchange (38)
+- * Sort (53)
+- Exchange (52)
+- * Project (51)
+- Window (50)
+- * Sort (49)
+- ReusedExchange (48)
(1) Scan parquet default.store_sales
@ -215,7 +213,7 @@ Arguments: [rank(d_year#7, d_moy#8) windowspecdefinition(i_category#17, i_brand#
(35) Filter [codegen id : 12]
Input [9]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, d_year#7, d_moy#8, sum_sales#23, avg_monthly_sales#26, rn#28]
Condition : ((((((isnotnull(d_year#7) AND isnotnull(avg_monthly_sales#26)) AND (d_year#7 = 1999)) AND (avg_monthly_sales#26 > 0.000000)) AND (avg_monthly_sales#26 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#23 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(22,6), true))) / promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000)) AND isnotnull(rn#28))
Condition : ((((isnotnull(d_year#7) AND isnotnull(avg_monthly_sales#26)) AND (d_year#7 = 1999)) AND (avg_monthly_sales#26 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#23 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(22,6), true), false)) / promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000))
(36) Exchange
Input [9]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, d_year#7, d_moy#8, sum_sales#23, avg_monthly_sales#26, rn#28]
@ -247,78 +245,70 @@ Arguments: [i_category#30 ASC NULLS FIRST, i_brand#31 ASC NULLS FIRST, s_store_n
Input [7]: [i_category#30, i_brand#31, s_store_name#32, s_company_name#33, d_year#34, d_moy#35, sum_sales#38]
Arguments: [rank(d_year#34, d_moy#35) windowspecdefinition(i_category#30, i_brand#31, s_store_name#32, s_company_name#33, d_year#34 ASC NULLS FIRST, d_moy#35 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#40], [i_category#30, i_brand#31, s_store_name#32, s_company_name#33], [d_year#34 ASC NULLS FIRST, d_moy#35 ASC NULLS FIRST]
(43) Filter [codegen id : 23]
Input [8]: [i_category#30, i_brand#31, s_store_name#32, s_company_name#33, d_year#34, d_moy#35, sum_sales#38, rn#40]
Condition : isnotnull(rn#40)
(44) Project [codegen id : 23]
(43) Project [codegen id : 23]
Output [6]: [i_category#30, i_brand#31, s_store_name#32, s_company_name#33, sum_sales#38, rn#40]
Input [8]: [i_category#30, i_brand#31, s_store_name#32, s_company_name#33, d_year#34, d_moy#35, sum_sales#38, rn#40]
(45) Exchange
(44) Exchange
Input [6]: [i_category#30, i_brand#31, s_store_name#32, s_company_name#33, sum_sales#38, rn#40]
Arguments: hashpartitioning(i_category#30, i_brand#31, s_store_name#32, s_company_name#33, (rn#40 + 1), 5), ENSURE_REQUIREMENTS, [id=#41]
(46) Sort [codegen id : 24]
(45) Sort [codegen id : 24]
Input [6]: [i_category#30, i_brand#31, s_store_name#32, s_company_name#33, sum_sales#38, rn#40]
Arguments: [i_category#30 ASC NULLS FIRST, i_brand#31 ASC NULLS FIRST, s_store_name#32 ASC NULLS FIRST, s_company_name#33 ASC NULLS FIRST, (rn#40 + 1) ASC NULLS FIRST], false, 0
(47) SortMergeJoin [codegen id : 25]
(46) SortMergeJoin [codegen id : 25]
Left keys [5]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, rn#28]
Right keys [5]: [i_category#30, i_brand#31, s_store_name#32, s_company_name#33, (rn#40 + 1)]
Join condition: None
(48) Project [codegen id : 25]
(47) Project [codegen id : 25]
Output [10]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, d_year#7, d_moy#8, sum_sales#23, avg_monthly_sales#26, rn#28, sum_sales#38]
Input [15]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, d_year#7, d_moy#8, sum_sales#23, avg_monthly_sales#26, rn#28, i_category#30, i_brand#31, s_store_name#32, s_company_name#33, sum_sales#38, rn#40]
(49) ReusedExchange [Reuses operator id: 40]
(48) ReusedExchange [Reuses operator id: 40]
Output [7]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, d_year#46, d_moy#47, sum_sales#48]
(50) Sort [codegen id : 34]
(49) Sort [codegen id : 34]
Input [7]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, d_year#46, d_moy#47, sum_sales#48]
Arguments: [i_category#42 ASC NULLS FIRST, i_brand#43 ASC NULLS FIRST, s_store_name#44 ASC NULLS FIRST, s_company_name#45 ASC NULLS FIRST, d_year#46 ASC NULLS FIRST, d_moy#47 ASC NULLS FIRST], false, 0
(51) Window
(50) Window
Input [7]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, d_year#46, d_moy#47, sum_sales#48]
Arguments: [rank(d_year#46, d_moy#47) windowspecdefinition(i_category#42, i_brand#43, s_store_name#44, s_company_name#45, d_year#46 ASC NULLS FIRST, d_moy#47 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#49], [i_category#42, i_brand#43, s_store_name#44, s_company_name#45], [d_year#46 ASC NULLS FIRST, d_moy#47 ASC NULLS FIRST]
(52) Filter [codegen id : 35]
Input [8]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, d_year#46, d_moy#47, sum_sales#48, rn#49]
Condition : isnotnull(rn#49)
(53) Project [codegen id : 35]
(51) Project [codegen id : 35]
Output [6]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, sum_sales#48, rn#49]
Input [8]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, d_year#46, d_moy#47, sum_sales#48, rn#49]
(54) Exchange
(52) Exchange
Input [6]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, sum_sales#48, rn#49]
Arguments: hashpartitioning(i_category#42, i_brand#43, s_store_name#44, s_company_name#45, (rn#49 - 1), 5), ENSURE_REQUIREMENTS, [id=#50]
(55) Sort [codegen id : 36]
(53) Sort [codegen id : 36]
Input [6]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, sum_sales#48, rn#49]
Arguments: [i_category#42 ASC NULLS FIRST, i_brand#43 ASC NULLS FIRST, s_store_name#44 ASC NULLS FIRST, s_company_name#45 ASC NULLS FIRST, (rn#49 - 1) ASC NULLS FIRST], false, 0
(56) SortMergeJoin [codegen id : 37]
(54) SortMergeJoin [codegen id : 37]
Left keys [5]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, rn#28]
Right keys [5]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, (rn#49 - 1)]
Join condition: None
(57) Project [codegen id : 37]
(55) Project [codegen id : 37]
Output [10]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, d_year#7, d_moy#8, avg_monthly_sales#26, sum_sales#23, sum_sales#38 AS psum#51, sum_sales#48 AS nsum#52]
Input [16]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, d_year#7, d_moy#8, sum_sales#23, avg_monthly_sales#26, rn#28, sum_sales#38, i_category#42, i_brand#43, s_store_name#44, s_company_name#45, sum_sales#48, rn#49]
(58) TakeOrderedAndProject
(56) TakeOrderedAndProject
Input [10]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, d_year#7, d_moy#8, avg_monthly_sales#26, sum_sales#23, psum#51, nsum#52]
Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#23 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(22,6), true) ASC NULLS FIRST, s_store_name#11 ASC NULLS FIRST], [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, d_year#7, d_moy#8, avg_monthly_sales#26, sum_sales#23, psum#51, nsum#52]
===== Subqueries =====
Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5
ReusedExchange (59)
ReusedExchange (57)
(59) ReusedExchange [Reuses operator id: 7]
(57) ReusedExchange [Reuses operator id: 7]
Output [3]: [d_date_sk#6, d_year#7, d_moy#8]

View file

@ -12,7 +12,7 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,s_store_name,i_category,i_bra
InputAdapter
Exchange [i_category,i_brand,s_store_name,s_company_name,rn] #1
WholeStageCodegen (12)
Filter [d_year,avg_monthly_sales,sum_sales,rn]
Filter [d_year,avg_monthly_sales,sum_sales]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (11)
@ -82,17 +82,16 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,s_store_name,i_category,i_bra
Exchange [i_category,i_brand,s_store_name,s_company_name,rn] #9
WholeStageCodegen (23)
Project [i_category,i_brand,s_store_name,s_company_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (22)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,s_store_name,s_company_name] #10
WholeStageCodegen (21)
HashAggregate [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] [sum(UnscaledValue(ss_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] #11
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (22)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,s_store_name,s_company_name] #10
WholeStageCodegen (21)
HashAggregate [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] [sum(UnscaledValue(ss_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] #11
InputAdapter
WholeStageCodegen (36)
Sort [i_category,i_brand,s_store_name,s_company_name,rn]
@ -100,10 +99,9 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,s_store_name,i_category,i_bra
Exchange [i_category,i_brand,s_store_name,s_company_name,rn] #12
WholeStageCodegen (35)
Project [i_category,i_brand,s_store_name,s_company_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (34)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum_sales] #10
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (34)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum_sales] #10

View file

@ -1,9 +1,9 @@
== Physical Plan ==
TakeOrderedAndProject (51)
+- * Project (50)
+- * BroadcastHashJoin Inner BuildRight (49)
:- * Project (42)
: +- * BroadcastHashJoin Inner BuildRight (41)
TakeOrderedAndProject (49)
+- * Project (48)
+- * BroadcastHashJoin Inner BuildRight (47)
:- * Project (41)
: +- * BroadcastHashJoin Inner BuildRight (40)
: :- * Filter (32)
: : +- Window (31)
: : +- * Sort (30)
@ -36,20 +36,18 @@ TakeOrderedAndProject (51)
: : +- * Filter (18)
: : +- * ColumnarToRow (17)
: : +- Scan parquet default.store (16)
: +- BroadcastExchange (40)
: +- * Project (39)
: +- * Filter (38)
: +- Window (37)
: +- * Sort (36)
: +- Exchange (35)
: +- * HashAggregate (34)
: +- ReusedExchange (33)
+- BroadcastExchange (48)
+- * Project (47)
+- * Filter (46)
+- Window (45)
+- * Sort (44)
+- ReusedExchange (43)
: +- BroadcastExchange (39)
: +- * Project (38)
: +- Window (37)
: +- * Sort (36)
: +- Exchange (35)
: +- * HashAggregate (34)
: +- ReusedExchange (33)
+- BroadcastExchange (46)
+- * Project (45)
+- Window (44)
+- * Sort (43)
+- ReusedExchange (42)
(1) Scan parquet default.item
@ -196,7 +194,7 @@ Arguments: [rank(d_year#11, d_moy#12) windowspecdefinition(i_category#3, i_brand
(32) Filter [codegen id : 23]
Input [9]: [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, d_year#11, d_moy#12, sum_sales#22, avg_monthly_sales#25, rn#27]
Condition : ((((((isnotnull(d_year#11) AND isnotnull(avg_monthly_sales#25)) AND (d_year#11 = 1999)) AND (avg_monthly_sales#25 > 0.000000)) AND (avg_monthly_sales#25 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6), true))) / promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000)) AND isnotnull(rn#27))
Condition : ((((isnotnull(d_year#11) AND isnotnull(avg_monthly_sales#25)) AND (d_year#11 = 1999)) AND (avg_monthly_sales#25 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6), true), false)) / promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000))
(33) ReusedExchange [Reuses operator id: unknown]
Output [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum#34]
@ -220,70 +218,62 @@ Arguments: [i_category#28 ASC NULLS FIRST, i_brand#29 ASC NULLS FIRST, s_store_n
Input [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum_sales#36]
Arguments: [rank(d_year#32, d_moy#33) windowspecdefinition(i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32 ASC NULLS FIRST, d_moy#33 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#38], [i_category#28, i_brand#29, s_store_name#30, s_company_name#31], [d_year#32 ASC NULLS FIRST, d_moy#33 ASC NULLS FIRST]
(38) Filter [codegen id : 15]
Input [8]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum_sales#36, rn#38]
Condition : isnotnull(rn#38)
(39) Project [codegen id : 15]
(38) Project [codegen id : 15]
Output [6]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, sum_sales#36, rn#38]
Input [8]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum_sales#36, rn#38]
(40) BroadcastExchange
(39) BroadcastExchange
Input [6]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, sum_sales#36, rn#38]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, true] + 1)),false), [id=#39]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, false] + 1)),false), [id=#39]
(41) BroadcastHashJoin [codegen id : 23]
(40) BroadcastHashJoin [codegen id : 23]
Left keys [5]: [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, rn#27]
Right keys [5]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, (rn#38 + 1)]
Join condition: None
(42) Project [codegen id : 23]
(41) Project [codegen id : 23]
Output [10]: [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, d_year#11, d_moy#12, sum_sales#22, avg_monthly_sales#25, rn#27, sum_sales#36]
Input [15]: [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, d_year#11, d_moy#12, sum_sales#22, avg_monthly_sales#25, rn#27, i_category#28, i_brand#29, s_store_name#30, s_company_name#31, sum_sales#36, rn#38]
(43) ReusedExchange [Reuses operator id: 35]
(42) ReusedExchange [Reuses operator id: 35]
Output [7]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#46]
(44) Sort [codegen id : 21]
(43) Sort [codegen id : 21]
Input [7]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#46]
Arguments: [i_category#40 ASC NULLS FIRST, i_brand#41 ASC NULLS FIRST, s_store_name#42 ASC NULLS FIRST, s_company_name#43 ASC NULLS FIRST, d_year#44 ASC NULLS FIRST, d_moy#45 ASC NULLS FIRST], false, 0
(45) Window
(44) Window
Input [7]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#46]
Arguments: [rank(d_year#44, d_moy#45) windowspecdefinition(i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44 ASC NULLS FIRST, d_moy#45 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#47], [i_category#40, i_brand#41, s_store_name#42, s_company_name#43], [d_year#44 ASC NULLS FIRST, d_moy#45 ASC NULLS FIRST]
(46) Filter [codegen id : 22]
Input [8]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#46, rn#47]
Condition : isnotnull(rn#47)
(47) Project [codegen id : 22]
(45) Project [codegen id : 22]
Output [6]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, sum_sales#46, rn#47]
Input [8]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#46, rn#47]
(48) BroadcastExchange
(46) BroadcastExchange
Input [6]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, sum_sales#46, rn#47]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, true] - 1)),false), [id=#48]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, false] - 1)),false), [id=#48]
(49) BroadcastHashJoin [codegen id : 23]
(47) BroadcastHashJoin [codegen id : 23]
Left keys [5]: [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, rn#27]
Right keys [5]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, (rn#47 - 1)]
Join condition: None
(50) Project [codegen id : 23]
(48) Project [codegen id : 23]
Output [10]: [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, d_year#11, d_moy#12, avg_monthly_sales#25, sum_sales#22, sum_sales#36 AS psum#49, sum_sales#46 AS nsum#50]
Input [16]: [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, d_year#11, d_moy#12, sum_sales#22, avg_monthly_sales#25, rn#27, sum_sales#36, i_category#40, i_brand#41, s_store_name#42, s_company_name#43, sum_sales#46, rn#47]
(51) TakeOrderedAndProject
(49) TakeOrderedAndProject
Input [10]: [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, d_year#11, d_moy#12, avg_monthly_sales#25, sum_sales#22, psum#49, nsum#50]
Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6), true) ASC NULLS FIRST, s_store_name#15 ASC NULLS FIRST], [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, d_year#11, d_moy#12, avg_monthly_sales#25, sum_sales#22, psum#49, nsum#50]
===== Subqueries =====
Subquery:1 Hosting operator id = 4 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8
ReusedExchange (52)
ReusedExchange (50)
(52) ReusedExchange [Reuses operator id: 13]
(50) ReusedExchange [Reuses operator id: 13]
Output [3]: [d_date_sk#10, d_year#11, d_moy#12]

View file

@ -4,7 +4,7 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,s_store_name,i_category,i_bra
BroadcastHashJoin [i_category,i_brand,s_store_name,s_company_name,rn,i_category,i_brand,s_store_name,s_company_name,rn]
Project [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum_sales,avg_monthly_sales,rn,sum_sales]
BroadcastHashJoin [i_category,i_brand,s_store_name,s_company_name,rn,i_category,i_brand,s_store_name,s_company_name,rn]
Filter [d_year,avg_monthly_sales,sum_sales,rn]
Filter [d_year,avg_monthly_sales,sum_sales]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (8)
@ -62,25 +62,23 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,s_store_name,i_category,i_bra
BroadcastExchange #7
WholeStageCodegen (15)
Project [i_category,i_brand,s_store_name,s_company_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (14)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,s_store_name,s_company_name] #8
WholeStageCodegen (13)
HashAggregate [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] [sum(UnscaledValue(ss_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] #9
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (14)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,s_store_name,s_company_name] #8
WholeStageCodegen (13)
HashAggregate [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] [sum(UnscaledValue(ss_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] #9
InputAdapter
BroadcastExchange #10
WholeStageCodegen (22)
Project [i_category,i_brand,s_store_name,s_company_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (21)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum_sales] #8
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (21)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum_sales] #8

View file

@ -1,9 +1,9 @@
== Physical Plan ==
TakeOrderedAndProject (58)
+- * Project (57)
+- * SortMergeJoin Inner (56)
:- * Project (48)
: +- * SortMergeJoin Inner (47)
TakeOrderedAndProject (56)
+- * Project (55)
+- * SortMergeJoin Inner (54)
:- * Project (47)
: +- * SortMergeJoin Inner (46)
: :- * Sort (37)
: : +- Exchange (36)
: : +- * Filter (35)
@ -41,22 +41,20 @@ TakeOrderedAndProject (58)
: : +- * Filter (20)
: : +- * ColumnarToRow (19)
: : +- Scan parquet default.item (18)
: +- * Sort (46)
: +- Exchange (45)
: +- * Project (44)
: +- * Filter (43)
: +- Window (42)
: +- * Sort (41)
: +- Exchange (40)
: +- * HashAggregate (39)
: +- ReusedExchange (38)
+- * Sort (55)
+- Exchange (54)
+- * Project (53)
+- * Filter (52)
+- Window (51)
+- * Sort (50)
+- ReusedExchange (49)
: +- * Sort (45)
: +- Exchange (44)
: +- * Project (43)
: +- Window (42)
: +- * Sort (41)
: +- Exchange (40)
: +- * HashAggregate (39)
: +- ReusedExchange (38)
+- * Sort (53)
+- Exchange (52)
+- * Project (51)
+- Window (50)
+- * Sort (49)
+- ReusedExchange (48)
(1) Scan parquet default.catalog_sales
@ -215,7 +213,7 @@ Arguments: [rank(d_year#7, d_moy#8) windowspecdefinition(i_category#16, i_brand#
(35) Filter [codegen id : 12]
Input [8]: [i_category#16, i_brand#15, cc_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#25, rn#27]
Condition : ((((((isnotnull(d_year#7) AND isnotnull(avg_monthly_sales#25)) AND (d_year#7 = 1999)) AND (avg_monthly_sales#25 > 0.000000)) AND (avg_monthly_sales#25 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6), true))) / promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000)) AND isnotnull(rn#27))
Condition : ((((isnotnull(d_year#7) AND isnotnull(avg_monthly_sales#25)) AND (d_year#7 = 1999)) AND (avg_monthly_sales#25 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6), true), false)) / promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000))
(36) Exchange
Input [8]: [i_category#16, i_brand#15, cc_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#25, rn#27]
@ -247,78 +245,70 @@ Arguments: [i_category#29 ASC NULLS FIRST, i_brand#30 ASC NULLS FIRST, cc_name#3
Input [6]: [i_category#29, i_brand#30, cc_name#31, d_year#32, d_moy#33, sum_sales#36]
Arguments: [rank(d_year#32, d_moy#33) windowspecdefinition(i_category#29, i_brand#30, cc_name#31, d_year#32 ASC NULLS FIRST, d_moy#33 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#38], [i_category#29, i_brand#30, cc_name#31], [d_year#32 ASC NULLS FIRST, d_moy#33 ASC NULLS FIRST]
(43) Filter [codegen id : 23]
Input [7]: [i_category#29, i_brand#30, cc_name#31, d_year#32, d_moy#33, sum_sales#36, rn#38]
Condition : isnotnull(rn#38)
(44) Project [codegen id : 23]
(43) Project [codegen id : 23]
Output [5]: [i_category#29, i_brand#30, cc_name#31, sum_sales#36, rn#38]
Input [7]: [i_category#29, i_brand#30, cc_name#31, d_year#32, d_moy#33, sum_sales#36, rn#38]
(45) Exchange
(44) Exchange
Input [5]: [i_category#29, i_brand#30, cc_name#31, sum_sales#36, rn#38]
Arguments: hashpartitioning(i_category#29, i_brand#30, cc_name#31, (rn#38 + 1), 5), ENSURE_REQUIREMENTS, [id=#39]
(46) Sort [codegen id : 24]
(45) Sort [codegen id : 24]
Input [5]: [i_category#29, i_brand#30, cc_name#31, sum_sales#36, rn#38]
Arguments: [i_category#29 ASC NULLS FIRST, i_brand#30 ASC NULLS FIRST, cc_name#31 ASC NULLS FIRST, (rn#38 + 1) ASC NULLS FIRST], false, 0
(47) SortMergeJoin [codegen id : 25]
(46) SortMergeJoin [codegen id : 25]
Left keys [4]: [i_category#16, i_brand#15, cc_name#11, rn#27]
Right keys [4]: [i_category#29, i_brand#30, cc_name#31, (rn#38 + 1)]
Join condition: None
(48) Project [codegen id : 25]
(47) Project [codegen id : 25]
Output [9]: [i_category#16, i_brand#15, cc_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#25, rn#27, sum_sales#36]
Input [13]: [i_category#16, i_brand#15, cc_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#25, rn#27, i_category#29, i_brand#30, cc_name#31, sum_sales#36, rn#38]
(49) ReusedExchange [Reuses operator id: 40]
(48) ReusedExchange [Reuses operator id: 40]
Output [6]: [i_category#40, i_brand#41, cc_name#42, d_year#43, d_moy#44, sum_sales#45]
(50) Sort [codegen id : 34]
(49) Sort [codegen id : 34]
Input [6]: [i_category#40, i_brand#41, cc_name#42, d_year#43, d_moy#44, sum_sales#45]
Arguments: [i_category#40 ASC NULLS FIRST, i_brand#41 ASC NULLS FIRST, cc_name#42 ASC NULLS FIRST, d_year#43 ASC NULLS FIRST, d_moy#44 ASC NULLS FIRST], false, 0
(51) Window
(50) Window
Input [6]: [i_category#40, i_brand#41, cc_name#42, d_year#43, d_moy#44, sum_sales#45]
Arguments: [rank(d_year#43, d_moy#44) windowspecdefinition(i_category#40, i_brand#41, cc_name#42, d_year#43 ASC NULLS FIRST, d_moy#44 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#46], [i_category#40, i_brand#41, cc_name#42], [d_year#43 ASC NULLS FIRST, d_moy#44 ASC NULLS FIRST]
(52) Filter [codegen id : 35]
Input [7]: [i_category#40, i_brand#41, cc_name#42, d_year#43, d_moy#44, sum_sales#45, rn#46]
Condition : isnotnull(rn#46)
(53) Project [codegen id : 35]
(51) Project [codegen id : 35]
Output [5]: [i_category#40, i_brand#41, cc_name#42, sum_sales#45, rn#46]
Input [7]: [i_category#40, i_brand#41, cc_name#42, d_year#43, d_moy#44, sum_sales#45, rn#46]
(54) Exchange
(52) Exchange
Input [5]: [i_category#40, i_brand#41, cc_name#42, sum_sales#45, rn#46]
Arguments: hashpartitioning(i_category#40, i_brand#41, cc_name#42, (rn#46 - 1), 5), ENSURE_REQUIREMENTS, [id=#47]
(55) Sort [codegen id : 36]
(53) Sort [codegen id : 36]
Input [5]: [i_category#40, i_brand#41, cc_name#42, sum_sales#45, rn#46]
Arguments: [i_category#40 ASC NULLS FIRST, i_brand#41 ASC NULLS FIRST, cc_name#42 ASC NULLS FIRST, (rn#46 - 1) ASC NULLS FIRST], false, 0
(56) SortMergeJoin [codegen id : 37]
(54) SortMergeJoin [codegen id : 37]
Left keys [4]: [i_category#16, i_brand#15, cc_name#11, rn#27]
Right keys [4]: [i_category#40, i_brand#41, cc_name#42, (rn#46 - 1)]
Join condition: None
(57) Project [codegen id : 37]
(55) Project [codegen id : 37]
Output [9]: [i_category#16, i_brand#15, cc_name#11, d_year#7, d_moy#8, avg_monthly_sales#25, sum_sales#22, sum_sales#36 AS psum#48, sum_sales#45 AS nsum#49]
Input [14]: [i_category#16, i_brand#15, cc_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#25, rn#27, sum_sales#36, i_category#40, i_brand#41, cc_name#42, sum_sales#45, rn#46]
(58) TakeOrderedAndProject
(56) TakeOrderedAndProject
Input [9]: [i_category#16, i_brand#15, cc_name#11, d_year#7, d_moy#8, avg_monthly_sales#25, sum_sales#22, psum#48, nsum#49]
Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6), true) ASC NULLS FIRST, cc_name#11 ASC NULLS FIRST], [i_category#16, i_brand#15, cc_name#11, d_year#7, d_moy#8, avg_monthly_sales#25, sum_sales#22, psum#48, nsum#49]
===== Subqueries =====
Subquery:1 Hosting operator id = 1 Hosting Expression = cs_sold_date_sk#4 IN dynamicpruning#5
ReusedExchange (59)
ReusedExchange (57)
(59) ReusedExchange [Reuses operator id: 7]
(57) ReusedExchange [Reuses operator id: 7]
Output [3]: [d_date_sk#6, d_year#7, d_moy#8]

View file

@ -12,7 +12,7 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,cc_name,i_category,i_brand,d_
InputAdapter
Exchange [i_category,i_brand,cc_name,rn] #1
WholeStageCodegen (12)
Filter [d_year,avg_monthly_sales,sum_sales,rn]
Filter [d_year,avg_monthly_sales,sum_sales]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (11)
@ -82,17 +82,16 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,cc_name,i_category,i_brand,d_
Exchange [i_category,i_brand,cc_name,rn] #9
WholeStageCodegen (23)
Project [i_category,i_brand,cc_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (22)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,cc_name] #10
WholeStageCodegen (21)
HashAggregate [i_category,i_brand,cc_name,d_year,d_moy,sum] [sum(UnscaledValue(cs_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum] #11
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (22)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,cc_name] #10
WholeStageCodegen (21)
HashAggregate [i_category,i_brand,cc_name,d_year,d_moy,sum] [sum(UnscaledValue(cs_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum] #11
InputAdapter
WholeStageCodegen (36)
Sort [i_category,i_brand,cc_name,rn]
@ -100,10 +99,9 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,cc_name,i_category,i_brand,d_
Exchange [i_category,i_brand,cc_name,rn] #12
WholeStageCodegen (35)
Project [i_category,i_brand,cc_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (34)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum_sales] #10
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (34)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum_sales] #10

View file

@ -1,9 +1,9 @@
== Physical Plan ==
TakeOrderedAndProject (51)
+- * Project (50)
+- * BroadcastHashJoin Inner BuildRight (49)
:- * Project (42)
: +- * BroadcastHashJoin Inner BuildRight (41)
TakeOrderedAndProject (49)
+- * Project (48)
+- * BroadcastHashJoin Inner BuildRight (47)
:- * Project (41)
: +- * BroadcastHashJoin Inner BuildRight (40)
: :- * Filter (32)
: : +- Window (31)
: : +- * Sort (30)
@ -36,20 +36,18 @@ TakeOrderedAndProject (51)
: : +- * Filter (18)
: : +- * ColumnarToRow (17)
: : +- Scan parquet default.call_center (16)
: +- BroadcastExchange (40)
: +- * Project (39)
: +- * Filter (38)
: +- Window (37)
: +- * Sort (36)
: +- Exchange (35)
: +- * HashAggregate (34)
: +- ReusedExchange (33)
+- BroadcastExchange (48)
+- * Project (47)
+- * Filter (46)
+- Window (45)
+- * Sort (44)
+- ReusedExchange (43)
: +- BroadcastExchange (39)
: +- * Project (38)
: +- Window (37)
: +- * Sort (36)
: +- Exchange (35)
: +- * HashAggregate (34)
: +- ReusedExchange (33)
+- BroadcastExchange (46)
+- * Project (45)
+- Window (44)
+- * Sort (43)
+- ReusedExchange (42)
(1) Scan parquet default.item
@ -196,7 +194,7 @@ Arguments: [rank(d_year#11, d_moy#12) windowspecdefinition(i_category#3, i_brand
(32) Filter [codegen id : 23]
Input [8]: [i_category#3, i_brand#2, cc_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#24, rn#26]
Condition : ((((((isnotnull(d_year#11) AND isnotnull(avg_monthly_sales#24)) AND (d_year#11 = 1999)) AND (avg_monthly_sales#24 > 0.000000)) AND (avg_monthly_sales#24 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6), true))) / promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000)) AND isnotnull(rn#26))
Condition : ((((isnotnull(d_year#11) AND isnotnull(avg_monthly_sales#24)) AND (d_year#11 = 1999)) AND (avg_monthly_sales#24 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6), true), false)) / promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000))
(33) ReusedExchange [Reuses operator id: unknown]
Output [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum#32]
@ -220,70 +218,62 @@ Arguments: [i_category#27 ASC NULLS FIRST, i_brand#28 ASC NULLS FIRST, cc_name#2
Input [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum_sales#34]
Arguments: [rank(d_year#30, d_moy#31) windowspecdefinition(i_category#27, i_brand#28, cc_name#29, d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#36], [i_category#27, i_brand#28, cc_name#29], [d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST]
(38) Filter [codegen id : 15]
Input [7]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum_sales#34, rn#36]
Condition : isnotnull(rn#36)
(39) Project [codegen id : 15]
(38) Project [codegen id : 15]
Output [5]: [i_category#27, i_brand#28, cc_name#29, sum_sales#34, rn#36]
Input [7]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum_sales#34, rn#36]
(40) BroadcastExchange
(39) BroadcastExchange
Input [5]: [i_category#27, i_brand#28, cc_name#29, sum_sales#34, rn#36]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, true] + 1)),false), [id=#37]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, false] + 1)),false), [id=#37]
(41) BroadcastHashJoin [codegen id : 23]
(40) BroadcastHashJoin [codegen id : 23]
Left keys [4]: [i_category#3, i_brand#2, cc_name#15, rn#26]
Right keys [4]: [i_category#27, i_brand#28, cc_name#29, (rn#36 + 1)]
Join condition: None
(42) Project [codegen id : 23]
(41) Project [codegen id : 23]
Output [9]: [i_category#3, i_brand#2, cc_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#24, rn#26, sum_sales#34]
Input [13]: [i_category#3, i_brand#2, cc_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#24, rn#26, i_category#27, i_brand#28, cc_name#29, sum_sales#34, rn#36]
(43) ReusedExchange [Reuses operator id: 35]
(42) ReusedExchange [Reuses operator id: 35]
Output [6]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#43]
(44) Sort [codegen id : 21]
(43) Sort [codegen id : 21]
Input [6]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#43]
Arguments: [i_category#38 ASC NULLS FIRST, i_brand#39 ASC NULLS FIRST, cc_name#40 ASC NULLS FIRST, d_year#41 ASC NULLS FIRST, d_moy#42 ASC NULLS FIRST], false, 0
(45) Window
(44) Window
Input [6]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#43]
Arguments: [rank(d_year#41, d_moy#42) windowspecdefinition(i_category#38, i_brand#39, cc_name#40, d_year#41 ASC NULLS FIRST, d_moy#42 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#44], [i_category#38, i_brand#39, cc_name#40], [d_year#41 ASC NULLS FIRST, d_moy#42 ASC NULLS FIRST]
(46) Filter [codegen id : 22]
Input [7]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#43, rn#44]
Condition : isnotnull(rn#44)
(47) Project [codegen id : 22]
(45) Project [codegen id : 22]
Output [5]: [i_category#38, i_brand#39, cc_name#40, sum_sales#43, rn#44]
Input [7]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#43, rn#44]
(48) BroadcastExchange
(46) BroadcastExchange
Input [5]: [i_category#38, i_brand#39, cc_name#40, sum_sales#43, rn#44]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, true] - 1)),false), [id=#45]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, false] - 1)),false), [id=#45]
(49) BroadcastHashJoin [codegen id : 23]
(47) BroadcastHashJoin [codegen id : 23]
Left keys [4]: [i_category#3, i_brand#2, cc_name#15, rn#26]
Right keys [4]: [i_category#38, i_brand#39, cc_name#40, (rn#44 - 1)]
Join condition: None
(50) Project [codegen id : 23]
(48) Project [codegen id : 23]
Output [9]: [i_category#3, i_brand#2, cc_name#15, d_year#11, d_moy#12, avg_monthly_sales#24, sum_sales#21, sum_sales#34 AS psum#46, sum_sales#43 AS nsum#47]
Input [14]: [i_category#3, i_brand#2, cc_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#24, rn#26, sum_sales#34, i_category#38, i_brand#39, cc_name#40, sum_sales#43, rn#44]
(51) TakeOrderedAndProject
(49) TakeOrderedAndProject
Input [9]: [i_category#3, i_brand#2, cc_name#15, d_year#11, d_moy#12, avg_monthly_sales#24, sum_sales#21, psum#46, nsum#47]
Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6), true) ASC NULLS FIRST, cc_name#15 ASC NULLS FIRST], [i_category#3, i_brand#2, cc_name#15, d_year#11, d_moy#12, avg_monthly_sales#24, sum_sales#21, psum#46, nsum#47]
===== Subqueries =====
Subquery:1 Hosting operator id = 4 Hosting Expression = cs_sold_date_sk#7 IN dynamicpruning#8
ReusedExchange (52)
ReusedExchange (50)
(52) ReusedExchange [Reuses operator id: 13]
(50) ReusedExchange [Reuses operator id: 13]
Output [3]: [d_date_sk#10, d_year#11, d_moy#12]

View file

@ -4,7 +4,7 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,cc_name,i_category,i_brand,d_
BroadcastHashJoin [i_category,i_brand,cc_name,rn,i_category,i_brand,cc_name,rn]
Project [i_category,i_brand,cc_name,d_year,d_moy,sum_sales,avg_monthly_sales,rn,sum_sales]
BroadcastHashJoin [i_category,i_brand,cc_name,rn,i_category,i_brand,cc_name,rn]
Filter [d_year,avg_monthly_sales,sum_sales,rn]
Filter [d_year,avg_monthly_sales,sum_sales]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (8)
@ -62,25 +62,23 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,cc_name,i_category,i_brand,d_
BroadcastExchange #7
WholeStageCodegen (15)
Project [i_category,i_brand,cc_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (14)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,cc_name] #8
WholeStageCodegen (13)
HashAggregate [i_category,i_brand,cc_name,d_year,d_moy,sum] [sum(UnscaledValue(cs_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum] #9
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (14)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,cc_name] #8
WholeStageCodegen (13)
HashAggregate [i_category,i_brand,cc_name,d_year,d_moy,sum] [sum(UnscaledValue(cs_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum] #9
InputAdapter
BroadcastExchange #10
WholeStageCodegen (22)
Project [i_category,i_brand,cc_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (21)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum_sales] #8
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (21)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum_sales] #8

View file

@ -1,9 +1,9 @@
== Physical Plan ==
TakeOrderedAndProject (58)
+- * Project (57)
+- * SortMergeJoin Inner (56)
:- * Project (48)
: +- * SortMergeJoin Inner (47)
TakeOrderedAndProject (56)
+- * Project (55)
+- * SortMergeJoin Inner (54)
:- * Project (47)
: +- * SortMergeJoin Inner (46)
: :- * Sort (37)
: : +- Exchange (36)
: : +- * Filter (35)
@ -41,22 +41,20 @@ TakeOrderedAndProject (58)
: : +- * Filter (20)
: : +- * ColumnarToRow (19)
: : +- Scan parquet default.item (18)
: +- * Sort (46)
: +- Exchange (45)
: +- * Project (44)
: +- * Filter (43)
: +- Window (42)
: +- * Sort (41)
: +- Exchange (40)
: +- * HashAggregate (39)
: +- ReusedExchange (38)
+- * Sort (55)
+- Exchange (54)
+- * Project (53)
+- * Filter (52)
+- Window (51)
+- * Sort (50)
+- ReusedExchange (49)
: +- * Sort (45)
: +- Exchange (44)
: +- * Project (43)
: +- Window (42)
: +- * Sort (41)
: +- Exchange (40)
: +- * HashAggregate (39)
: +- ReusedExchange (38)
+- * Sort (53)
+- Exchange (52)
+- * Project (51)
+- Window (50)
+- * Sort (49)
+- ReusedExchange (48)
(1) Scan parquet default.store_sales
@ -215,7 +213,7 @@ Arguments: [rank(d_year#7, d_moy#8) windowspecdefinition(i_category#17, i_brand#
(35) Filter [codegen id : 12]
Input [9]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, d_year#7, d_moy#8, sum_sales#23, avg_monthly_sales#26, rn#28]
Condition : ((((((isnotnull(d_year#7) AND isnotnull(avg_monthly_sales#26)) AND (d_year#7 = 1999)) AND (avg_monthly_sales#26 > 0.000000)) AND (avg_monthly_sales#26 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#23 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(22,6), true))) / promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000)) AND isnotnull(rn#28))
Condition : ((((isnotnull(d_year#7) AND isnotnull(avg_monthly_sales#26)) AND (d_year#7 = 1999)) AND (avg_monthly_sales#26 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#23 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(22,6), true), false)) / promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000))
(36) Exchange
Input [9]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, d_year#7, d_moy#8, sum_sales#23, avg_monthly_sales#26, rn#28]
@ -247,78 +245,70 @@ Arguments: [i_category#30 ASC NULLS FIRST, i_brand#31 ASC NULLS FIRST, s_store_n
Input [7]: [i_category#30, i_brand#31, s_store_name#32, s_company_name#33, d_year#34, d_moy#35, sum_sales#38]
Arguments: [rank(d_year#34, d_moy#35) windowspecdefinition(i_category#30, i_brand#31, s_store_name#32, s_company_name#33, d_year#34 ASC NULLS FIRST, d_moy#35 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#40], [i_category#30, i_brand#31, s_store_name#32, s_company_name#33], [d_year#34 ASC NULLS FIRST, d_moy#35 ASC NULLS FIRST]
(43) Filter [codegen id : 23]
Input [8]: [i_category#30, i_brand#31, s_store_name#32, s_company_name#33, d_year#34, d_moy#35, sum_sales#38, rn#40]
Condition : isnotnull(rn#40)
(44) Project [codegen id : 23]
(43) Project [codegen id : 23]
Output [6]: [i_category#30, i_brand#31, s_store_name#32, s_company_name#33, sum_sales#38, rn#40]
Input [8]: [i_category#30, i_brand#31, s_store_name#32, s_company_name#33, d_year#34, d_moy#35, sum_sales#38, rn#40]
(45) Exchange
(44) Exchange
Input [6]: [i_category#30, i_brand#31, s_store_name#32, s_company_name#33, sum_sales#38, rn#40]
Arguments: hashpartitioning(i_category#30, i_brand#31, s_store_name#32, s_company_name#33, (rn#40 + 1), 5), ENSURE_REQUIREMENTS, [id=#41]
(46) Sort [codegen id : 24]
(45) Sort [codegen id : 24]
Input [6]: [i_category#30, i_brand#31, s_store_name#32, s_company_name#33, sum_sales#38, rn#40]
Arguments: [i_category#30 ASC NULLS FIRST, i_brand#31 ASC NULLS FIRST, s_store_name#32 ASC NULLS FIRST, s_company_name#33 ASC NULLS FIRST, (rn#40 + 1) ASC NULLS FIRST], false, 0
(47) SortMergeJoin [codegen id : 25]
(46) SortMergeJoin [codegen id : 25]
Left keys [5]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, rn#28]
Right keys [5]: [i_category#30, i_brand#31, s_store_name#32, s_company_name#33, (rn#40 + 1)]
Join condition: None
(48) Project [codegen id : 25]
(47) Project [codegen id : 25]
Output [10]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, d_year#7, d_moy#8, sum_sales#23, avg_monthly_sales#26, rn#28, sum_sales#38]
Input [15]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, d_year#7, d_moy#8, sum_sales#23, avg_monthly_sales#26, rn#28, i_category#30, i_brand#31, s_store_name#32, s_company_name#33, sum_sales#38, rn#40]
(49) ReusedExchange [Reuses operator id: 40]
(48) ReusedExchange [Reuses operator id: 40]
Output [7]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, d_year#46, d_moy#47, sum_sales#48]
(50) Sort [codegen id : 34]
(49) Sort [codegen id : 34]
Input [7]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, d_year#46, d_moy#47, sum_sales#48]
Arguments: [i_category#42 ASC NULLS FIRST, i_brand#43 ASC NULLS FIRST, s_store_name#44 ASC NULLS FIRST, s_company_name#45 ASC NULLS FIRST, d_year#46 ASC NULLS FIRST, d_moy#47 ASC NULLS FIRST], false, 0
(51) Window
(50) Window
Input [7]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, d_year#46, d_moy#47, sum_sales#48]
Arguments: [rank(d_year#46, d_moy#47) windowspecdefinition(i_category#42, i_brand#43, s_store_name#44, s_company_name#45, d_year#46 ASC NULLS FIRST, d_moy#47 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#49], [i_category#42, i_brand#43, s_store_name#44, s_company_name#45], [d_year#46 ASC NULLS FIRST, d_moy#47 ASC NULLS FIRST]
(52) Filter [codegen id : 35]
Input [8]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, d_year#46, d_moy#47, sum_sales#48, rn#49]
Condition : isnotnull(rn#49)
(53) Project [codegen id : 35]
(51) Project [codegen id : 35]
Output [6]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, sum_sales#48, rn#49]
Input [8]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, d_year#46, d_moy#47, sum_sales#48, rn#49]
(54) Exchange
(52) Exchange
Input [6]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, sum_sales#48, rn#49]
Arguments: hashpartitioning(i_category#42, i_brand#43, s_store_name#44, s_company_name#45, (rn#49 - 1), 5), ENSURE_REQUIREMENTS, [id=#50]
(55) Sort [codegen id : 36]
(53) Sort [codegen id : 36]
Input [6]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, sum_sales#48, rn#49]
Arguments: [i_category#42 ASC NULLS FIRST, i_brand#43 ASC NULLS FIRST, s_store_name#44 ASC NULLS FIRST, s_company_name#45 ASC NULLS FIRST, (rn#49 - 1) ASC NULLS FIRST], false, 0
(56) SortMergeJoin [codegen id : 37]
(54) SortMergeJoin [codegen id : 37]
Left keys [5]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, rn#28]
Right keys [5]: [i_category#42, i_brand#43, s_store_name#44, s_company_name#45, (rn#49 - 1)]
Join condition: None
(57) Project [codegen id : 37]
(55) Project [codegen id : 37]
Output [7]: [i_category#17, d_year#7, d_moy#8, avg_monthly_sales#26, sum_sales#23, sum_sales#38 AS psum#51, sum_sales#48 AS nsum#52]
Input [16]: [i_category#17, i_brand#16, s_store_name#11, s_company_name#12, d_year#7, d_moy#8, sum_sales#23, avg_monthly_sales#26, rn#28, sum_sales#38, i_category#42, i_brand#43, s_store_name#44, s_company_name#45, sum_sales#48, rn#49]
(58) TakeOrderedAndProject
(56) TakeOrderedAndProject
Input [7]: [i_category#17, d_year#7, d_moy#8, avg_monthly_sales#26, sum_sales#23, psum#51, nsum#52]
Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#23 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#26 as decimal(22,6)))), DecimalType(22,6), true) ASC NULLS FIRST, d_moy#8 ASC NULLS FIRST], [i_category#17, d_year#7, d_moy#8, avg_monthly_sales#26, sum_sales#23, psum#51, nsum#52]
===== Subqueries =====
Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5
ReusedExchange (59)
ReusedExchange (57)
(59) ReusedExchange [Reuses operator id: 7]
(57) ReusedExchange [Reuses operator id: 7]
Output [3]: [d_date_sk#6, d_year#7, d_moy#8]

View file

@ -12,7 +12,7 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,d_moy,i_category,d_year,psum,
InputAdapter
Exchange [i_category,i_brand,s_store_name,s_company_name,rn] #1
WholeStageCodegen (12)
Filter [d_year,avg_monthly_sales,sum_sales,rn]
Filter [d_year,avg_monthly_sales,sum_sales]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (11)
@ -82,17 +82,16 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,d_moy,i_category,d_year,psum,
Exchange [i_category,i_brand,s_store_name,s_company_name,rn] #9
WholeStageCodegen (23)
Project [i_category,i_brand,s_store_name,s_company_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (22)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,s_store_name,s_company_name] #10
WholeStageCodegen (21)
HashAggregate [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] [sum(UnscaledValue(ss_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] #11
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (22)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,s_store_name,s_company_name] #10
WholeStageCodegen (21)
HashAggregate [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] [sum(UnscaledValue(ss_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] #11
InputAdapter
WholeStageCodegen (36)
Sort [i_category,i_brand,s_store_name,s_company_name,rn]
@ -100,10 +99,9 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,d_moy,i_category,d_year,psum,
Exchange [i_category,i_brand,s_store_name,s_company_name,rn] #12
WholeStageCodegen (35)
Project [i_category,i_brand,s_store_name,s_company_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (34)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum_sales] #10
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (34)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum_sales] #10

View file

@ -1,9 +1,9 @@
== Physical Plan ==
TakeOrderedAndProject (51)
+- * Project (50)
+- * BroadcastHashJoin Inner BuildRight (49)
:- * Project (42)
: +- * BroadcastHashJoin Inner BuildRight (41)
TakeOrderedAndProject (49)
+- * Project (48)
+- * BroadcastHashJoin Inner BuildRight (47)
:- * Project (41)
: +- * BroadcastHashJoin Inner BuildRight (40)
: :- * Filter (32)
: : +- Window (31)
: : +- * Sort (30)
@ -36,20 +36,18 @@ TakeOrderedAndProject (51)
: : +- * Filter (18)
: : +- * ColumnarToRow (17)
: : +- Scan parquet default.store (16)
: +- BroadcastExchange (40)
: +- * Project (39)
: +- * Filter (38)
: +- Window (37)
: +- * Sort (36)
: +- Exchange (35)
: +- * HashAggregate (34)
: +- ReusedExchange (33)
+- BroadcastExchange (48)
+- * Project (47)
+- * Filter (46)
+- Window (45)
+- * Sort (44)
+- ReusedExchange (43)
: +- BroadcastExchange (39)
: +- * Project (38)
: +- Window (37)
: +- * Sort (36)
: +- Exchange (35)
: +- * HashAggregate (34)
: +- ReusedExchange (33)
+- BroadcastExchange (46)
+- * Project (45)
+- Window (44)
+- * Sort (43)
+- ReusedExchange (42)
(1) Scan parquet default.item
@ -196,7 +194,7 @@ Arguments: [rank(d_year#11, d_moy#12) windowspecdefinition(i_category#3, i_brand
(32) Filter [codegen id : 23]
Input [9]: [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, d_year#11, d_moy#12, sum_sales#22, avg_monthly_sales#25, rn#27]
Condition : ((((((isnotnull(d_year#11) AND isnotnull(avg_monthly_sales#25)) AND (d_year#11 = 1999)) AND (avg_monthly_sales#25 > 0.000000)) AND (avg_monthly_sales#25 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6), true))) / promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000)) AND isnotnull(rn#27))
Condition : ((((isnotnull(d_year#11) AND isnotnull(avg_monthly_sales#25)) AND (d_year#11 = 1999)) AND (avg_monthly_sales#25 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6), true), false)) / promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000))
(33) ReusedExchange [Reuses operator id: unknown]
Output [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum#34]
@ -220,70 +218,62 @@ Arguments: [i_category#28 ASC NULLS FIRST, i_brand#29 ASC NULLS FIRST, s_store_n
Input [7]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum_sales#36]
Arguments: [rank(d_year#32, d_moy#33) windowspecdefinition(i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32 ASC NULLS FIRST, d_moy#33 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#38], [i_category#28, i_brand#29, s_store_name#30, s_company_name#31], [d_year#32 ASC NULLS FIRST, d_moy#33 ASC NULLS FIRST]
(38) Filter [codegen id : 15]
Input [8]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum_sales#36, rn#38]
Condition : isnotnull(rn#38)
(39) Project [codegen id : 15]
(38) Project [codegen id : 15]
Output [6]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, sum_sales#36, rn#38]
Input [8]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, d_year#32, d_moy#33, sum_sales#36, rn#38]
(40) BroadcastExchange
(39) BroadcastExchange
Input [6]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, sum_sales#36, rn#38]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, true] + 1)),false), [id=#39]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, false] + 1)),false), [id=#39]
(41) BroadcastHashJoin [codegen id : 23]
(40) BroadcastHashJoin [codegen id : 23]
Left keys [5]: [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, rn#27]
Right keys [5]: [i_category#28, i_brand#29, s_store_name#30, s_company_name#31, (rn#38 + 1)]
Join condition: None
(42) Project [codegen id : 23]
(41) Project [codegen id : 23]
Output [10]: [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, d_year#11, d_moy#12, sum_sales#22, avg_monthly_sales#25, rn#27, sum_sales#36]
Input [15]: [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, d_year#11, d_moy#12, sum_sales#22, avg_monthly_sales#25, rn#27, i_category#28, i_brand#29, s_store_name#30, s_company_name#31, sum_sales#36, rn#38]
(43) ReusedExchange [Reuses operator id: 35]
(42) ReusedExchange [Reuses operator id: 35]
Output [7]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#46]
(44) Sort [codegen id : 21]
(43) Sort [codegen id : 21]
Input [7]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#46]
Arguments: [i_category#40 ASC NULLS FIRST, i_brand#41 ASC NULLS FIRST, s_store_name#42 ASC NULLS FIRST, s_company_name#43 ASC NULLS FIRST, d_year#44 ASC NULLS FIRST, d_moy#45 ASC NULLS FIRST], false, 0
(45) Window
(44) Window
Input [7]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#46]
Arguments: [rank(d_year#44, d_moy#45) windowspecdefinition(i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44 ASC NULLS FIRST, d_moy#45 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#47], [i_category#40, i_brand#41, s_store_name#42, s_company_name#43], [d_year#44 ASC NULLS FIRST, d_moy#45 ASC NULLS FIRST]
(46) Filter [codegen id : 22]
Input [8]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#46, rn#47]
Condition : isnotnull(rn#47)
(47) Project [codegen id : 22]
(45) Project [codegen id : 22]
Output [6]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, sum_sales#46, rn#47]
Input [8]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, d_year#44, d_moy#45, sum_sales#46, rn#47]
(48) BroadcastExchange
(46) BroadcastExchange
Input [6]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, sum_sales#46, rn#47]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, true] - 1)),false), [id=#48]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], input[3, string, true], (input[5, int, false] - 1)),false), [id=#48]
(49) BroadcastHashJoin [codegen id : 23]
(47) BroadcastHashJoin [codegen id : 23]
Left keys [5]: [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, rn#27]
Right keys [5]: [i_category#40, i_brand#41, s_store_name#42, s_company_name#43, (rn#47 - 1)]
Join condition: None
(50) Project [codegen id : 23]
(48) Project [codegen id : 23]
Output [7]: [i_category#3, d_year#11, d_moy#12, avg_monthly_sales#25, sum_sales#22, sum_sales#36 AS psum#49, sum_sales#46 AS nsum#50]
Input [16]: [i_category#3, i_brand#2, s_store_name#15, s_company_name#16, d_year#11, d_moy#12, sum_sales#22, avg_monthly_sales#25, rn#27, sum_sales#36, i_category#40, i_brand#41, s_store_name#42, s_company_name#43, sum_sales#46, rn#47]
(51) TakeOrderedAndProject
(49) TakeOrderedAndProject
Input [7]: [i_category#3, d_year#11, d_moy#12, avg_monthly_sales#25, sum_sales#22, psum#49, nsum#50]
Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6), true) ASC NULLS FIRST, d_moy#12 ASC NULLS FIRST], [i_category#3, d_year#11, d_moy#12, avg_monthly_sales#25, sum_sales#22, psum#49, nsum#50]
===== Subqueries =====
Subquery:1 Hosting operator id = 4 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8
ReusedExchange (52)
ReusedExchange (50)
(52) ReusedExchange [Reuses operator id: 13]
(50) ReusedExchange [Reuses operator id: 13]
Output [3]: [d_date_sk#10, d_year#11, d_moy#12]

View file

@ -4,7 +4,7 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,d_moy,i_category,d_year,psum,
BroadcastHashJoin [i_category,i_brand,s_store_name,s_company_name,rn,i_category,i_brand,s_store_name,s_company_name,rn]
Project [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum_sales,avg_monthly_sales,rn,sum_sales]
BroadcastHashJoin [i_category,i_brand,s_store_name,s_company_name,rn,i_category,i_brand,s_store_name,s_company_name,rn]
Filter [d_year,avg_monthly_sales,sum_sales,rn]
Filter [d_year,avg_monthly_sales,sum_sales]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (8)
@ -62,25 +62,23 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,d_moy,i_category,d_year,psum,
BroadcastExchange #7
WholeStageCodegen (15)
Project [i_category,i_brand,s_store_name,s_company_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (14)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,s_store_name,s_company_name] #8
WholeStageCodegen (13)
HashAggregate [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] [sum(UnscaledValue(ss_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] #9
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (14)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,s_store_name,s_company_name] #8
WholeStageCodegen (13)
HashAggregate [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] [sum(UnscaledValue(ss_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum] #9
InputAdapter
BroadcastExchange #10
WholeStageCodegen (22)
Project [i_category,i_brand,s_store_name,s_company_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (21)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum_sales] #8
InputAdapter
Window [d_year,d_moy,i_category,i_brand,s_store_name,s_company_name]
WholeStageCodegen (21)
Sort [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,s_store_name,s_company_name,d_year,d_moy,sum_sales] #8

View file

@ -1,84 +1,78 @@
== Physical Plan ==
TakeOrderedAndProject (80)
+- * Filter (79)
+- * HashAggregate (78)
+- * HashAggregate (77)
+- * Project (76)
+- * SortMergeJoin Inner (75)
:- * Filter (69)
: +- Window (68)
: +- * Sort (67)
: +- Exchange (66)
: +- * Project (65)
: +- * Filter (64)
: +- SortMergeJoin FullOuter (63)
: :- * Sort (33)
: : +- Exchange (32)
: : +- * HashAggregate (31)
: : +- * HashAggregate (30)
: : +- * Project (29)
: : +- * SortMergeJoin Inner (28)
: : :- * Sort (20)
: : : +- Exchange (19)
: : : +- * Project (18)
: : : +- * Filter (17)
: : : +- Window (16)
: : : +- * Sort (15)
: : : +- Exchange (14)
: : : +- * HashAggregate (13)
: : : +- Exchange (12)
: : : +- * HashAggregate (11)
: : : +- * Project (10)
: : : +- * BroadcastHashJoin Inner BuildRight (9)
: : : :- * Filter (3)
: : : : +- * ColumnarToRow (2)
: : : : +- Scan parquet default.web_sales (1)
: : : +- BroadcastExchange (8)
: : : +- * Project (7)
: : : +- * Filter (6)
: : : +- * ColumnarToRow (5)
: : : +- Scan parquet default.date_dim (4)
: : +- * Sort (27)
: : +- Exchange (26)
: : +- * Project (25)
: : +- * Filter (24)
: : +- Window (23)
: : +- * Sort (22)
: : +- ReusedExchange (21)
: +- * Sort (62)
: +- Exchange (61)
: +- * HashAggregate (60)
: +- * HashAggregate (59)
: +- * Project (58)
: +- * SortMergeJoin Inner (57)
: :- * Sort (49)
: : +- Exchange (48)
: : +- * Project (47)
: : +- * Filter (46)
: : +- Window (45)
: : +- * Sort (44)
: : +- Exchange (43)
: : +- * HashAggregate (42)
: : +- Exchange (41)
: : +- * HashAggregate (40)
: : +- * Project (39)
: : +- * BroadcastHashJoin Inner BuildRight (38)
: : :- * Filter (36)
: : : +- * ColumnarToRow (35)
: : : +- Scan parquet default.store_sales (34)
: : +- ReusedExchange (37)
: +- * Sort (56)
: +- Exchange (55)
: +- * Project (54)
: +- * Filter (53)
: +- Window (52)
: +- * Sort (51)
: +- ReusedExchange (50)
+- * Project (74)
+- * Filter (73)
+- Window (72)
+- * Sort (71)
+- ReusedExchange (70)
TakeOrderedAndProject (74)
+- * Filter (73)
+- * HashAggregate (72)
+- * HashAggregate (71)
+- * Project (70)
+- * SortMergeJoin Inner (69)
:- Window (64)
: +- * Sort (63)
: +- Exchange (62)
: +- * Project (61)
: +- * Filter (60)
: +- SortMergeJoin FullOuter (59)
: :- * Sort (31)
: : +- Exchange (30)
: : +- * HashAggregate (29)
: : +- * HashAggregate (28)
: : +- * Project (27)
: : +- * SortMergeJoin Inner (26)
: : :- * Sort (19)
: : : +- Exchange (18)
: : : +- * Project (17)
: : : +- Window (16)
: : : +- * Sort (15)
: : : +- Exchange (14)
: : : +- * HashAggregate (13)
: : : +- Exchange (12)
: : : +- * HashAggregate (11)
: : : +- * Project (10)
: : : +- * BroadcastHashJoin Inner BuildRight (9)
: : : :- * Filter (3)
: : : : +- * ColumnarToRow (2)
: : : : +- Scan parquet default.web_sales (1)
: : : +- BroadcastExchange (8)
: : : +- * Project (7)
: : : +- * Filter (6)
: : : +- * ColumnarToRow (5)
: : : +- Scan parquet default.date_dim (4)
: : +- * Sort (25)
: : +- Exchange (24)
: : +- * Project (23)
: : +- Window (22)
: : +- * Sort (21)
: : +- ReusedExchange (20)
: +- * Sort (58)
: +- Exchange (57)
: +- * HashAggregate (56)
: +- * HashAggregate (55)
: +- * Project (54)
: +- * SortMergeJoin Inner (53)
: :- * Sort (46)
: : +- Exchange (45)
: : +- * Project (44)
: : +- Window (43)
: : +- * Sort (42)
: : +- Exchange (41)
: : +- * HashAggregate (40)
: : +- Exchange (39)
: : +- * HashAggregate (38)
: : +- * Project (37)
: : +- * BroadcastHashJoin Inner BuildRight (36)
: : :- * Filter (34)
: : : +- * ColumnarToRow (33)
: : : +- Scan parquet default.store_sales (32)
: : +- ReusedExchange (35)
: +- * Sort (52)
: +- Exchange (51)
: +- * Project (50)
: +- Window (49)
: +- * Sort (48)
: +- ReusedExchange (47)
+- * Project (68)
+- Window (67)
+- * Sort (66)
+- ReusedExchange (65)
(1) Scan parquet default.web_sales
@ -157,81 +151,73 @@ Arguments: [ws_item_sk#1 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0
Input [4]: [item_sk#13, d_date#6, sumws#14, ws_item_sk#1]
Arguments: [row_number() windowspecdefinition(ws_item_sk#1, d_date#6 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#16], [ws_item_sk#1], [d_date#6 ASC NULLS FIRST]
(17) Filter [codegen id : 5]
Input [5]: [item_sk#13, d_date#6, sumws#14, ws_item_sk#1, rk#16]
Condition : isnotnull(rk#16)
(18) Project [codegen id : 5]
(17) Project [codegen id : 5]
Output [4]: [item_sk#13, d_date#6, sumws#14, rk#16]
Input [5]: [item_sk#13, d_date#6, sumws#14, ws_item_sk#1, rk#16]
(19) Exchange
(18) Exchange
Input [4]: [item_sk#13, d_date#6, sumws#14, rk#16]
Arguments: hashpartitioning(item_sk#13, 5), ENSURE_REQUIREMENTS, [id=#17]
(20) Sort [codegen id : 6]
(19) Sort [codegen id : 6]
Input [4]: [item_sk#13, d_date#6, sumws#14, rk#16]
Arguments: [item_sk#13 ASC NULLS FIRST], false, 0
(21) ReusedExchange [Reuses operator id: unknown]
(20) ReusedExchange [Reuses operator id: unknown]
Output [4]: [item_sk#18, d_date#19, sumws#20, ws_item_sk#1]
(22) Sort [codegen id : 10]
(21) Sort [codegen id : 10]
Input [4]: [item_sk#18, d_date#19, sumws#20, ws_item_sk#1]
Arguments: [ws_item_sk#1 ASC NULLS FIRST, d_date#19 ASC NULLS FIRST], false, 0
(23) Window
(22) Window
Input [4]: [item_sk#18, d_date#19, sumws#20, ws_item_sk#1]
Arguments: [row_number() windowspecdefinition(ws_item_sk#1, d_date#19 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#21], [ws_item_sk#1], [d_date#19 ASC NULLS FIRST]
(24) Filter [codegen id : 11]
Input [5]: [item_sk#18, d_date#19, sumws#20, ws_item_sk#1, rk#21]
Condition : isnotnull(rk#21)
(25) Project [codegen id : 11]
(23) Project [codegen id : 11]
Output [3]: [item_sk#18, sumws#20, rk#21]
Input [5]: [item_sk#18, d_date#19, sumws#20, ws_item_sk#1, rk#21]
(26) Exchange
(24) Exchange
Input [3]: [item_sk#18, sumws#20, rk#21]
Arguments: hashpartitioning(item_sk#18, 5), ENSURE_REQUIREMENTS, [id=#22]
(27) Sort [codegen id : 12]
(25) Sort [codegen id : 12]
Input [3]: [item_sk#18, sumws#20, rk#21]
Arguments: [item_sk#18 ASC NULLS FIRST], false, 0
(28) SortMergeJoin [codegen id : 13]
(26) SortMergeJoin [codegen id : 13]
Left keys [1]: [item_sk#13]
Right keys [1]: [item_sk#18]
Join condition: (rk#16 >= rk#21)
(29) Project [codegen id : 13]
(27) Project [codegen id : 13]
Output [4]: [item_sk#13, d_date#6, sumws#14, sumws#20]
Input [7]: [item_sk#13, d_date#6, sumws#14, rk#16, item_sk#18, sumws#20, rk#21]
(30) HashAggregate [codegen id : 13]
(28) HashAggregate [codegen id : 13]
Input [4]: [item_sk#13, d_date#6, sumws#14, sumws#20]
Keys [3]: [item_sk#13, d_date#6, sumws#14]
Functions [1]: [partial_sum(sumws#20)]
Aggregate Attributes [2]: [sum#23, isEmpty#24]
Results [5]: [item_sk#13, d_date#6, sumws#14, sum#25, isEmpty#26]
(31) HashAggregate [codegen id : 13]
(29) HashAggregate [codegen id : 13]
Input [5]: [item_sk#13, d_date#6, sumws#14, sum#25, isEmpty#26]
Keys [3]: [item_sk#13, d_date#6, sumws#14]
Functions [1]: [sum(sumws#20)]
Aggregate Attributes [1]: [sum(sumws#20)#27]
Results [3]: [item_sk#13, d_date#6, sum(sumws#20)#27 AS cume_sales#28]
(32) Exchange
(30) Exchange
Input [3]: [item_sk#13, d_date#6, cume_sales#28]
Arguments: hashpartitioning(item_sk#13, d_date#6, 5), ENSURE_REQUIREMENTS, [id=#29]
(33) Sort [codegen id : 14]
(31) Sort [codegen id : 14]
Input [3]: [item_sk#13, d_date#6, cume_sales#28]
Arguments: [item_sk#13 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0
(34) Scan parquet default.store_sales
(32) Scan parquet default.store_sales
Output [3]: [ss_item_sk#30, ss_sales_price#31, ss_sold_date_sk#32]
Batched: true
Location: InMemoryFileIndex []
@ -239,217 +225,201 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#32), dynamicpruningexpression(ss_so
PushedFilters: [IsNotNull(ss_item_sk)]
ReadSchema: struct<ss_item_sk:int,ss_sales_price:decimal(7,2)>
(35) ColumnarToRow [codegen id : 16]
(33) ColumnarToRow [codegen id : 16]
Input [3]: [ss_item_sk#30, ss_sales_price#31, ss_sold_date_sk#32]
(36) Filter [codegen id : 16]
(34) Filter [codegen id : 16]
Input [3]: [ss_item_sk#30, ss_sales_price#31, ss_sold_date_sk#32]
Condition : isnotnull(ss_item_sk#30)
(37) ReusedExchange [Reuses operator id: 8]
(35) ReusedExchange [Reuses operator id: 8]
Output [2]: [d_date_sk#33, d_date#34]
(38) BroadcastHashJoin [codegen id : 16]
(36) BroadcastHashJoin [codegen id : 16]
Left keys [1]: [ss_sold_date_sk#32]
Right keys [1]: [d_date_sk#33]
Join condition: None
(39) Project [codegen id : 16]
(37) Project [codegen id : 16]
Output [3]: [ss_item_sk#30, ss_sales_price#31, d_date#34]
Input [5]: [ss_item_sk#30, ss_sales_price#31, ss_sold_date_sk#32, d_date_sk#33, d_date#34]
(40) HashAggregate [codegen id : 16]
(38) HashAggregate [codegen id : 16]
Input [3]: [ss_item_sk#30, ss_sales_price#31, d_date#34]
Keys [2]: [ss_item_sk#30, d_date#34]
Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#31))]
Aggregate Attributes [1]: [sum#35]
Results [3]: [ss_item_sk#30, d_date#34, sum#36]
(41) Exchange
(39) Exchange
Input [3]: [ss_item_sk#30, d_date#34, sum#36]
Arguments: hashpartitioning(ss_item_sk#30, d_date#34, 5), ENSURE_REQUIREMENTS, [id=#37]
(42) HashAggregate [codegen id : 17]
(40) HashAggregate [codegen id : 17]
Input [3]: [ss_item_sk#30, d_date#34, sum#36]
Keys [2]: [ss_item_sk#30, d_date#34]
Functions [1]: [sum(UnscaledValue(ss_sales_price#31))]
Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#31))#38]
Results [4]: [ss_item_sk#30 AS item_sk#39, d_date#34, MakeDecimal(sum(UnscaledValue(ss_sales_price#31))#38,17,2) AS sumss#40, ss_item_sk#30]
(43) Exchange
(41) Exchange
Input [4]: [item_sk#39, d_date#34, sumss#40, ss_item_sk#30]
Arguments: hashpartitioning(ss_item_sk#30, 5), ENSURE_REQUIREMENTS, [id=#41]
(44) Sort [codegen id : 18]
(42) Sort [codegen id : 18]
Input [4]: [item_sk#39, d_date#34, sumss#40, ss_item_sk#30]
Arguments: [ss_item_sk#30 ASC NULLS FIRST, d_date#34 ASC NULLS FIRST], false, 0
(45) Window
(43) Window
Input [4]: [item_sk#39, d_date#34, sumss#40, ss_item_sk#30]
Arguments: [row_number() windowspecdefinition(ss_item_sk#30, d_date#34 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#42], [ss_item_sk#30], [d_date#34 ASC NULLS FIRST]
(46) Filter [codegen id : 19]
Input [5]: [item_sk#39, d_date#34, sumss#40, ss_item_sk#30, rk#42]
Condition : isnotnull(rk#42)
(47) Project [codegen id : 19]
(44) Project [codegen id : 19]
Output [4]: [item_sk#39, d_date#34, sumss#40, rk#42]
Input [5]: [item_sk#39, d_date#34, sumss#40, ss_item_sk#30, rk#42]
(48) Exchange
(45) Exchange
Input [4]: [item_sk#39, d_date#34, sumss#40, rk#42]
Arguments: hashpartitioning(item_sk#39, 5), ENSURE_REQUIREMENTS, [id=#43]
(49) Sort [codegen id : 20]
(46) Sort [codegen id : 20]
Input [4]: [item_sk#39, d_date#34, sumss#40, rk#42]
Arguments: [item_sk#39 ASC NULLS FIRST], false, 0
(50) ReusedExchange [Reuses operator id: unknown]
(47) ReusedExchange [Reuses operator id: unknown]
Output [4]: [item_sk#44, d_date#45, sumss#46, ss_item_sk#30]
(51) Sort [codegen id : 24]
(48) Sort [codegen id : 24]
Input [4]: [item_sk#44, d_date#45, sumss#46, ss_item_sk#30]
Arguments: [ss_item_sk#30 ASC NULLS FIRST, d_date#45 ASC NULLS FIRST], false, 0
(52) Window
(49) Window
Input [4]: [item_sk#44, d_date#45, sumss#46, ss_item_sk#30]
Arguments: [row_number() windowspecdefinition(ss_item_sk#30, d_date#45 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#47], [ss_item_sk#30], [d_date#45 ASC NULLS FIRST]
(53) Filter [codegen id : 25]
Input [5]: [item_sk#44, d_date#45, sumss#46, ss_item_sk#30, rk#47]
Condition : isnotnull(rk#47)
(54) Project [codegen id : 25]
(50) Project [codegen id : 25]
Output [3]: [item_sk#44, sumss#46, rk#47]
Input [5]: [item_sk#44, d_date#45, sumss#46, ss_item_sk#30, rk#47]
(55) Exchange
(51) Exchange
Input [3]: [item_sk#44, sumss#46, rk#47]
Arguments: hashpartitioning(item_sk#44, 5), ENSURE_REQUIREMENTS, [id=#48]
(56) Sort [codegen id : 26]
(52) Sort [codegen id : 26]
Input [3]: [item_sk#44, sumss#46, rk#47]
Arguments: [item_sk#44 ASC NULLS FIRST], false, 0
(57) SortMergeJoin [codegen id : 27]
(53) SortMergeJoin [codegen id : 27]
Left keys [1]: [item_sk#39]
Right keys [1]: [item_sk#44]
Join condition: (rk#42 >= rk#47)
(58) Project [codegen id : 27]
(54) Project [codegen id : 27]
Output [4]: [item_sk#39, d_date#34, sumss#40, sumss#46]
Input [7]: [item_sk#39, d_date#34, sumss#40, rk#42, item_sk#44, sumss#46, rk#47]
(59) HashAggregate [codegen id : 27]
(55) HashAggregate [codegen id : 27]
Input [4]: [item_sk#39, d_date#34, sumss#40, sumss#46]
Keys [3]: [item_sk#39, d_date#34, sumss#40]
Functions [1]: [partial_sum(sumss#46)]
Aggregate Attributes [2]: [sum#49, isEmpty#50]
Results [5]: [item_sk#39, d_date#34, sumss#40, sum#51, isEmpty#52]
(60) HashAggregate [codegen id : 27]
(56) HashAggregate [codegen id : 27]
Input [5]: [item_sk#39, d_date#34, sumss#40, sum#51, isEmpty#52]
Keys [3]: [item_sk#39, d_date#34, sumss#40]
Functions [1]: [sum(sumss#46)]
Aggregate Attributes [1]: [sum(sumss#46)#53]
Results [3]: [item_sk#39, d_date#34, sum(sumss#46)#53 AS cume_sales#54]
(61) Exchange
(57) Exchange
Input [3]: [item_sk#39, d_date#34, cume_sales#54]
Arguments: hashpartitioning(item_sk#39, d_date#34, 5), ENSURE_REQUIREMENTS, [id=#55]
(62) Sort [codegen id : 28]
(58) Sort [codegen id : 28]
Input [3]: [item_sk#39, d_date#34, cume_sales#54]
Arguments: [item_sk#39 ASC NULLS FIRST, d_date#34 ASC NULLS FIRST], false, 0
(63) SortMergeJoin
(59) SortMergeJoin
Left keys [2]: [item_sk#13, d_date#6]
Right keys [2]: [item_sk#39, d_date#34]
Join condition: None
(64) Filter [codegen id : 29]
(60) Filter [codegen id : 29]
Input [6]: [item_sk#13, d_date#6, cume_sales#28, item_sk#39, d_date#34, cume_sales#54]
Condition : isnotnull(CASE WHEN isnotnull(item_sk#13) THEN item_sk#13 ELSE item_sk#39 END)
(65) Project [codegen id : 29]
(61) Project [codegen id : 29]
Output [4]: [CASE WHEN isnotnull(item_sk#13) THEN item_sk#13 ELSE item_sk#39 END AS item_sk#56, CASE WHEN isnotnull(d_date#6) THEN d_date#6 ELSE d_date#34 END AS d_date#57, cume_sales#28 AS web_sales#58, cume_sales#54 AS store_sales#59]
Input [6]: [item_sk#13, d_date#6, cume_sales#28, item_sk#39, d_date#34, cume_sales#54]
(66) Exchange
(62) Exchange
Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59]
Arguments: hashpartitioning(item_sk#56, 5), ENSURE_REQUIREMENTS, [id=#60]
(67) Sort [codegen id : 30]
(63) Sort [codegen id : 30]
Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59]
Arguments: [item_sk#56 ASC NULLS FIRST, d_date#57 ASC NULLS FIRST], false, 0
(68) Window
(64) Window
Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59]
Arguments: [row_number() windowspecdefinition(item_sk#56, d_date#57 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#61], [item_sk#56], [d_date#57 ASC NULLS FIRST]
(69) Filter [codegen id : 31]
Input [5]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, rk#61]
Condition : isnotnull(rk#61)
(70) ReusedExchange [Reuses operator id: unknown]
(65) ReusedExchange [Reuses operator id: unknown]
Output [4]: [item_sk#62, d_date#63, web_sales#64, store_sales#65]
(71) Sort [codegen id : 61]
(66) Sort [codegen id : 60]
Input [4]: [item_sk#62, d_date#63, web_sales#64, store_sales#65]
Arguments: [item_sk#62 ASC NULLS FIRST, d_date#63 ASC NULLS FIRST], false, 0
(72) Window
(67) Window
Input [4]: [item_sk#62, d_date#63, web_sales#64, store_sales#65]
Arguments: [row_number() windowspecdefinition(item_sk#62, d_date#63 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#66], [item_sk#62], [d_date#63 ASC NULLS FIRST]
(73) Filter [codegen id : 62]
Input [5]: [item_sk#62, d_date#63, web_sales#64, store_sales#65, rk#66]
Condition : isnotnull(rk#66)
(74) Project [codegen id : 62]
(68) Project [codegen id : 61]
Output [4]: [item_sk#62, web_sales#64, store_sales#65, rk#66]
Input [5]: [item_sk#62, d_date#63, web_sales#64, store_sales#65, rk#66]
(75) SortMergeJoin [codegen id : 63]
(69) SortMergeJoin [codegen id : 62]
Left keys [1]: [item_sk#56]
Right keys [1]: [item_sk#62]
Join condition: (rk#61 >= rk#66)
(76) Project [codegen id : 63]
(70) Project [codegen id : 62]
Output [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_sales#64, store_sales#65]
Input [9]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, rk#61, item_sk#62, web_sales#64, store_sales#65, rk#66]
(77) HashAggregate [codegen id : 63]
(71) HashAggregate [codegen id : 62]
Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_sales#64, store_sales#65]
Keys [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59]
Functions [2]: [partial_max(web_sales#64), partial_max(store_sales#65)]
Aggregate Attributes [2]: [max#67, max#68]
Results [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, max#69, max#70]
(78) HashAggregate [codegen id : 63]
(72) HashAggregate [codegen id : 62]
Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, max#69, max#70]
Keys [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59]
Functions [2]: [max(web_sales#64), max(store_sales#65)]
Aggregate Attributes [2]: [max(web_sales#64)#71, max(store_sales#65)#72]
Results [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, max(web_sales#64)#71 AS web_cumulative#73, max(store_sales#65)#72 AS store_cumulative#74]
(79) Filter [codegen id : 63]
(73) Filter [codegen id : 62]
Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_cumulative#73, store_cumulative#74]
Condition : ((isnotnull(web_cumulative#73) AND isnotnull(store_cumulative#74)) AND (web_cumulative#73 > store_cumulative#74))
(80) TakeOrderedAndProject
(74) TakeOrderedAndProject
Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_cumulative#73, store_cumulative#74]
Arguments: 100, [item_sk#56 ASC NULLS FIRST, d_date#57 ASC NULLS FIRST], [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_cumulative#73, store_cumulative#74]
===== Subqueries =====
Subquery:1 Hosting operator id = 1 Hosting Expression = ws_sold_date_sk#3 IN dynamicpruning#4
ReusedExchange (81)
ReusedExchange (75)
(81) ReusedExchange [Reuses operator id: 8]
(75) ReusedExchange [Reuses operator id: 8]
Output [2]: [d_date_sk#5, d_date#6]
Subquery:2 Hosting operator id = 34 Hosting Expression = ss_sold_date_sk#32 IN dynamicpruning#4
Subquery:2 Hosting operator id = 32 Hosting Expression = ss_sold_date_sk#32 IN dynamicpruning#4

View file

@ -1,142 +1,134 @@
TakeOrderedAndProject [item_sk,d_date,web_sales,store_sales,web_cumulative,store_cumulative]
WholeStageCodegen (63)
WholeStageCodegen (62)
Filter [web_cumulative,store_cumulative]
HashAggregate [item_sk,d_date,web_sales,store_sales,max,max] [max(web_sales),max(store_sales),web_cumulative,store_cumulative,max,max]
HashAggregate [item_sk,d_date,web_sales,store_sales,web_sales,store_sales] [max,max,max,max]
Project [item_sk,d_date,web_sales,store_sales,web_sales,store_sales]
SortMergeJoin [item_sk,item_sk,rk,rk]
InputAdapter
WholeStageCodegen (31)
Filter [rk]
Window [item_sk,d_date]
WholeStageCodegen (30)
Sort [item_sk,d_date]
InputAdapter
Exchange [item_sk] #1
WholeStageCodegen (29)
Project [item_sk,item_sk,d_date,d_date,cume_sales,cume_sales]
Filter [item_sk,item_sk]
InputAdapter
SortMergeJoin [item_sk,d_date,item_sk,d_date]
WholeStageCodegen (14)
Sort [item_sk,d_date]
InputAdapter
Exchange [item_sk,d_date] #2
WholeStageCodegen (13)
HashAggregate [item_sk,d_date,sumws,sum,isEmpty] [sum(sumws),cume_sales,sum,isEmpty]
HashAggregate [item_sk,d_date,sumws,sumws] [sum,isEmpty,sum,isEmpty]
Project [item_sk,d_date,sumws,sumws]
SortMergeJoin [item_sk,item_sk,rk,rk]
InputAdapter
WholeStageCodegen (6)
Sort [item_sk]
InputAdapter
Exchange [item_sk] #3
WholeStageCodegen (5)
Project [item_sk,d_date,sumws,rk]
InputAdapter
Window [ws_item_sk,d_date]
WholeStageCodegen (4)
Sort [ws_item_sk,d_date]
InputAdapter
Exchange [ws_item_sk] #4
WholeStageCodegen (3)
HashAggregate [ws_item_sk,d_date,sum] [sum(UnscaledValue(ws_sales_price)),item_sk,sumws,sum]
InputAdapter
Exchange [ws_item_sk,d_date] #5
WholeStageCodegen (2)
HashAggregate [ws_item_sk,d_date,ws_sales_price] [sum,sum]
Project [ws_item_sk,ws_sales_price,d_date]
BroadcastHashJoin [ws_sold_date_sk,d_date_sk]
Filter [ws_item_sk]
ColumnarToRow
InputAdapter
Scan parquet default.web_sales [ws_item_sk,ws_sales_price,ws_sold_date_sk]
SubqueryBroadcast [d_date_sk] #1
ReusedExchange [d_date_sk,d_date] #6
InputAdapter
BroadcastExchange #6
WholeStageCodegen (1)
Project [d_date_sk,d_date]
Filter [d_month_seq,d_date_sk]
ColumnarToRow
InputAdapter
Scan parquet default.date_dim [d_date_sk,d_date,d_month_seq]
InputAdapter
WholeStageCodegen (12)
Sort [item_sk]
InputAdapter
Exchange [item_sk] #7
WholeStageCodegen (11)
Project [item_sk,sumws,rk]
InputAdapter
Window [ws_item_sk,d_date]
WholeStageCodegen (10)
Sort [ws_item_sk,d_date]
InputAdapter
ReusedExchange [item_sk,d_date,sumws,ws_item_sk] #8
WholeStageCodegen (28)
Sort [item_sk,d_date]
InputAdapter
Exchange [item_sk,d_date] #9
WholeStageCodegen (27)
HashAggregate [item_sk,d_date,sumss,sum,isEmpty] [sum(sumss),cume_sales,sum,isEmpty]
HashAggregate [item_sk,d_date,sumss,sumss] [sum,isEmpty,sum,isEmpty]
Project [item_sk,d_date,sumss,sumss]
SortMergeJoin [item_sk,item_sk,rk,rk]
InputAdapter
WholeStageCodegen (20)
Sort [item_sk]
InputAdapter
Exchange [item_sk] #10
WholeStageCodegen (19)
Project [item_sk,d_date,sumss,rk]
InputAdapter
Window [ss_item_sk,d_date]
WholeStageCodegen (18)
Sort [ss_item_sk,d_date]
InputAdapter
Exchange [ss_item_sk] #11
WholeStageCodegen (17)
HashAggregate [ss_item_sk,d_date,sum] [sum(UnscaledValue(ss_sales_price)),item_sk,sumss,sum]
InputAdapter
Exchange [ss_item_sk,d_date] #12
WholeStageCodegen (16)
HashAggregate [ss_item_sk,d_date,ss_sales_price] [sum,sum]
Project [ss_item_sk,ss_sales_price,d_date]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
Filter [ss_item_sk]
ColumnarToRow
InputAdapter
Scan parquet default.store_sales [ss_item_sk,ss_sales_price,ss_sold_date_sk]
ReusedSubquery [d_date_sk] #1
InputAdapter
ReusedExchange [d_date_sk,d_date] #6
InputAdapter
WholeStageCodegen (26)
Sort [item_sk]
InputAdapter
Exchange [item_sk] #13
WholeStageCodegen (25)
Project [item_sk,sumss,rk]
InputAdapter
Window [ss_item_sk,d_date]
WholeStageCodegen (24)
Sort [ss_item_sk,d_date]
InputAdapter
ReusedExchange [item_sk,d_date,sumss,ss_item_sk] #14
InputAdapter
WholeStageCodegen (61)
Project [item_sk,web_sales,store_sales,rk]
InputAdapter
Window [item_sk,d_date]
WholeStageCodegen (30)
WholeStageCodegen (60)
Sort [item_sk,d_date]
InputAdapter
Exchange [item_sk] #1
WholeStageCodegen (29)
Project [item_sk,item_sk,d_date,d_date,cume_sales,cume_sales]
Filter [item_sk,item_sk]
InputAdapter
SortMergeJoin [item_sk,d_date,item_sk,d_date]
WholeStageCodegen (14)
Sort [item_sk,d_date]
InputAdapter
Exchange [item_sk,d_date] #2
WholeStageCodegen (13)
HashAggregate [item_sk,d_date,sumws,sum,isEmpty] [sum(sumws),cume_sales,sum,isEmpty]
HashAggregate [item_sk,d_date,sumws,sumws] [sum,isEmpty,sum,isEmpty]
Project [item_sk,d_date,sumws,sumws]
SortMergeJoin [item_sk,item_sk,rk,rk]
InputAdapter
WholeStageCodegen (6)
Sort [item_sk]
InputAdapter
Exchange [item_sk] #3
WholeStageCodegen (5)
Project [item_sk,d_date,sumws,rk]
Filter [rk]
InputAdapter
Window [ws_item_sk,d_date]
WholeStageCodegen (4)
Sort [ws_item_sk,d_date]
InputAdapter
Exchange [ws_item_sk] #4
WholeStageCodegen (3)
HashAggregate [ws_item_sk,d_date,sum] [sum(UnscaledValue(ws_sales_price)),item_sk,sumws,sum]
InputAdapter
Exchange [ws_item_sk,d_date] #5
WholeStageCodegen (2)
HashAggregate [ws_item_sk,d_date,ws_sales_price] [sum,sum]
Project [ws_item_sk,ws_sales_price,d_date]
BroadcastHashJoin [ws_sold_date_sk,d_date_sk]
Filter [ws_item_sk]
ColumnarToRow
InputAdapter
Scan parquet default.web_sales [ws_item_sk,ws_sales_price,ws_sold_date_sk]
SubqueryBroadcast [d_date_sk] #1
ReusedExchange [d_date_sk,d_date] #6
InputAdapter
BroadcastExchange #6
WholeStageCodegen (1)
Project [d_date_sk,d_date]
Filter [d_month_seq,d_date_sk]
ColumnarToRow
InputAdapter
Scan parquet default.date_dim [d_date_sk,d_date,d_month_seq]
InputAdapter
WholeStageCodegen (12)
Sort [item_sk]
InputAdapter
Exchange [item_sk] #7
WholeStageCodegen (11)
Project [item_sk,sumws,rk]
Filter [rk]
InputAdapter
Window [ws_item_sk,d_date]
WholeStageCodegen (10)
Sort [ws_item_sk,d_date]
InputAdapter
ReusedExchange [item_sk,d_date,sumws,ws_item_sk] #8
WholeStageCodegen (28)
Sort [item_sk,d_date]
InputAdapter
Exchange [item_sk,d_date] #9
WholeStageCodegen (27)
HashAggregate [item_sk,d_date,sumss,sum,isEmpty] [sum(sumss),cume_sales,sum,isEmpty]
HashAggregate [item_sk,d_date,sumss,sumss] [sum,isEmpty,sum,isEmpty]
Project [item_sk,d_date,sumss,sumss]
SortMergeJoin [item_sk,item_sk,rk,rk]
InputAdapter
WholeStageCodegen (20)
Sort [item_sk]
InputAdapter
Exchange [item_sk] #10
WholeStageCodegen (19)
Project [item_sk,d_date,sumss,rk]
Filter [rk]
InputAdapter
Window [ss_item_sk,d_date]
WholeStageCodegen (18)
Sort [ss_item_sk,d_date]
InputAdapter
Exchange [ss_item_sk] #11
WholeStageCodegen (17)
HashAggregate [ss_item_sk,d_date,sum] [sum(UnscaledValue(ss_sales_price)),item_sk,sumss,sum]
InputAdapter
Exchange [ss_item_sk,d_date] #12
WholeStageCodegen (16)
HashAggregate [ss_item_sk,d_date,ss_sales_price] [sum,sum]
Project [ss_item_sk,ss_sales_price,d_date]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
Filter [ss_item_sk]
ColumnarToRow
InputAdapter
Scan parquet default.store_sales [ss_item_sk,ss_sales_price,ss_sold_date_sk]
ReusedSubquery [d_date_sk] #1
InputAdapter
ReusedExchange [d_date_sk,d_date] #6
InputAdapter
WholeStageCodegen (26)
Sort [item_sk]
InputAdapter
Exchange [item_sk] #13
WholeStageCodegen (25)
Project [item_sk,sumss,rk]
Filter [rk]
InputAdapter
Window [ss_item_sk,d_date]
WholeStageCodegen (24)
Sort [ss_item_sk,d_date]
InputAdapter
ReusedExchange [item_sk,d_date,sumss,ss_item_sk] #14
InputAdapter
WholeStageCodegen (62)
Project [item_sk,web_sales,store_sales,rk]
Filter [rk]
InputAdapter
Window [item_sk,d_date]
WholeStageCodegen (61)
Sort [item_sk,d_date]
InputAdapter
ReusedExchange [item_sk,d_date,web_sales,store_sales] #15
ReusedExchange [item_sk,d_date,web_sales,store_sales] #15

View file

@ -1,81 +1,75 @@
== Physical Plan ==
TakeOrderedAndProject (77)
+- * Filter (76)
+- * HashAggregate (75)
+- * HashAggregate (74)
+- * Project (73)
+- * BroadcastHashJoin Inner BuildRight (72)
:- * Filter (65)
: +- Window (64)
: +- * Sort (63)
: +- Exchange (62)
: +- * Project (61)
: +- * Filter (60)
: +- SortMergeJoin FullOuter (59)
: :- * Sort (31)
: : +- Exchange (30)
: : +- * HashAggregate (29)
: : +- Exchange (28)
: : +- * HashAggregate (27)
: : +- * Project (26)
: : +- * BroadcastHashJoin Inner BuildRight (25)
: : :- * Project (18)
: : : +- * Filter (17)
: : : +- Window (16)
: : : +- * Sort (15)
: : : +- Exchange (14)
: : : +- * HashAggregate (13)
: : : +- Exchange (12)
: : : +- * HashAggregate (11)
: : : +- * Project (10)
: : : +- * BroadcastHashJoin Inner BuildRight (9)
: : : :- * Filter (3)
: : : : +- * ColumnarToRow (2)
: : : : +- Scan parquet default.web_sales (1)
: : : +- BroadcastExchange (8)
: : : +- * Project (7)
: : : +- * Filter (6)
: : : +- * ColumnarToRow (5)
: : : +- Scan parquet default.date_dim (4)
: : +- BroadcastExchange (24)
: : +- * Project (23)
: : +- * Filter (22)
: : +- Window (21)
: : +- * Sort (20)
: : +- ReusedExchange (19)
: +- * Sort (58)
: +- Exchange (57)
: +- * HashAggregate (56)
: +- Exchange (55)
: +- * HashAggregate (54)
: +- * Project (53)
: +- * BroadcastHashJoin Inner BuildRight (52)
: :- * Project (45)
: : +- * Filter (44)
: : +- Window (43)
: : +- * Sort (42)
: : +- Exchange (41)
: : +- * HashAggregate (40)
: : +- Exchange (39)
: : +- * HashAggregate (38)
: : +- * Project (37)
: : +- * BroadcastHashJoin Inner BuildRight (36)
: : :- * Filter (34)
: : : +- * ColumnarToRow (33)
: : : +- Scan parquet default.store_sales (32)
: : +- ReusedExchange (35)
: +- BroadcastExchange (51)
: +- * Project (50)
: +- * Filter (49)
: +- Window (48)
: +- * Sort (47)
: +- ReusedExchange (46)
+- BroadcastExchange (71)
+- * Project (70)
+- * Filter (69)
+- Window (68)
+- * Sort (67)
+- ReusedExchange (66)
TakeOrderedAndProject (71)
+- * Filter (70)
+- * HashAggregate (69)
+- * HashAggregate (68)
+- * Project (67)
+- * BroadcastHashJoin Inner BuildRight (66)
:- Window (60)
: +- * Sort (59)
: +- Exchange (58)
: +- * Project (57)
: +- * Filter (56)
: +- SortMergeJoin FullOuter (55)
: :- * Sort (29)
: : +- Exchange (28)
: : +- * HashAggregate (27)
: : +- Exchange (26)
: : +- * HashAggregate (25)
: : +- * Project (24)
: : +- * BroadcastHashJoin Inner BuildRight (23)
: : :- * Project (17)
: : : +- Window (16)
: : : +- * Sort (15)
: : : +- Exchange (14)
: : : +- * HashAggregate (13)
: : : +- Exchange (12)
: : : +- * HashAggregate (11)
: : : +- * Project (10)
: : : +- * BroadcastHashJoin Inner BuildRight (9)
: : : :- * Filter (3)
: : : : +- * ColumnarToRow (2)
: : : : +- Scan parquet default.web_sales (1)
: : : +- BroadcastExchange (8)
: : : +- * Project (7)
: : : +- * Filter (6)
: : : +- * ColumnarToRow (5)
: : : +- Scan parquet default.date_dim (4)
: : +- BroadcastExchange (22)
: : +- * Project (21)
: : +- Window (20)
: : +- * Sort (19)
: : +- ReusedExchange (18)
: +- * Sort (54)
: +- Exchange (53)
: +- * HashAggregate (52)
: +- Exchange (51)
: +- * HashAggregate (50)
: +- * Project (49)
: +- * BroadcastHashJoin Inner BuildRight (48)
: :- * Project (42)
: : +- Window (41)
: : +- * Sort (40)
: : +- Exchange (39)
: : +- * HashAggregate (38)
: : +- Exchange (37)
: : +- * HashAggregate (36)
: : +- * Project (35)
: : +- * BroadcastHashJoin Inner BuildRight (34)
: : :- * Filter (32)
: : : +- * ColumnarToRow (31)
: : : +- Scan parquet default.store_sales (30)
: : +- ReusedExchange (33)
: +- BroadcastExchange (47)
: +- * Project (46)
: +- Window (45)
: +- * Sort (44)
: +- ReusedExchange (43)
+- BroadcastExchange (65)
+- * Project (64)
+- Window (63)
+- * Sort (62)
+- ReusedExchange (61)
(1) Scan parquet default.web_sales
@ -154,73 +148,65 @@ Arguments: [ws_item_sk#1 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0
Input [4]: [item_sk#13, d_date#6, sumws#14, ws_item_sk#1]
Arguments: [row_number() windowspecdefinition(ws_item_sk#1, d_date#6 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#16], [ws_item_sk#1], [d_date#6 ASC NULLS FIRST]
(17) Filter [codegen id : 10]
Input [5]: [item_sk#13, d_date#6, sumws#14, ws_item_sk#1, rk#16]
Condition : isnotnull(rk#16)
(18) Project [codegen id : 10]
(17) Project [codegen id : 10]
Output [4]: [item_sk#13, d_date#6, sumws#14, rk#16]
Input [5]: [item_sk#13, d_date#6, sumws#14, ws_item_sk#1, rk#16]
(19) ReusedExchange [Reuses operator id: unknown]
(18) ReusedExchange [Reuses operator id: unknown]
Output [4]: [item_sk#17, d_date#18, sumws#19, ws_item_sk#1]
(20) Sort [codegen id : 8]
(19) Sort [codegen id : 8]
Input [4]: [item_sk#17, d_date#18, sumws#19, ws_item_sk#1]
Arguments: [ws_item_sk#1 ASC NULLS FIRST, d_date#18 ASC NULLS FIRST], false, 0
(21) Window
(20) Window
Input [4]: [item_sk#17, d_date#18, sumws#19, ws_item_sk#1]
Arguments: [row_number() windowspecdefinition(ws_item_sk#1, d_date#18 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#20], [ws_item_sk#1], [d_date#18 ASC NULLS FIRST]
(22) Filter [codegen id : 9]
Input [5]: [item_sk#17, d_date#18, sumws#19, ws_item_sk#1, rk#20]
Condition : isnotnull(rk#20)
(23) Project [codegen id : 9]
(21) Project [codegen id : 9]
Output [3]: [item_sk#17, sumws#19, rk#20]
Input [5]: [item_sk#17, d_date#18, sumws#19, ws_item_sk#1, rk#20]
(24) BroadcastExchange
(22) BroadcastExchange
Input [3]: [item_sk#17, sumws#19, rk#20]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#21]
(25) BroadcastHashJoin [codegen id : 10]
(23) BroadcastHashJoin [codegen id : 10]
Left keys [1]: [item_sk#13]
Right keys [1]: [item_sk#17]
Join condition: (rk#16 >= rk#20)
(26) Project [codegen id : 10]
(24) Project [codegen id : 10]
Output [4]: [item_sk#13, d_date#6, sumws#14, sumws#19]
Input [7]: [item_sk#13, d_date#6, sumws#14, rk#16, item_sk#17, sumws#19, rk#20]
(27) HashAggregate [codegen id : 10]
(25) HashAggregate [codegen id : 10]
Input [4]: [item_sk#13, d_date#6, sumws#14, sumws#19]
Keys [3]: [item_sk#13, d_date#6, sumws#14]
Functions [1]: [partial_sum(sumws#19)]
Aggregate Attributes [2]: [sum#22, isEmpty#23]
Results [5]: [item_sk#13, d_date#6, sumws#14, sum#24, isEmpty#25]
(28) Exchange
(26) Exchange
Input [5]: [item_sk#13, d_date#6, sumws#14, sum#24, isEmpty#25]
Arguments: hashpartitioning(item_sk#13, d_date#6, sumws#14, 5), ENSURE_REQUIREMENTS, [id=#26]
(29) HashAggregate [codegen id : 11]
(27) HashAggregate [codegen id : 11]
Input [5]: [item_sk#13, d_date#6, sumws#14, sum#24, isEmpty#25]
Keys [3]: [item_sk#13, d_date#6, sumws#14]
Functions [1]: [sum(sumws#19)]
Aggregate Attributes [1]: [sum(sumws#19)#27]
Results [3]: [item_sk#13, d_date#6, sum(sumws#19)#27 AS cume_sales#28]
(30) Exchange
(28) Exchange
Input [3]: [item_sk#13, d_date#6, cume_sales#28]
Arguments: hashpartitioning(item_sk#13, d_date#6, 5), ENSURE_REQUIREMENTS, [id=#29]
(31) Sort [codegen id : 12]
(29) Sort [codegen id : 12]
Input [3]: [item_sk#13, d_date#6, cume_sales#28]
Arguments: [item_sk#13 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0
(32) Scan parquet default.store_sales
(30) Scan parquet default.store_sales
Output [3]: [ss_item_sk#30, ss_sales_price#31, ss_sold_date_sk#32]
Batched: true
Location: InMemoryFileIndex []
@ -228,213 +214,197 @@ PartitionFilters: [isnotnull(ss_sold_date_sk#32), dynamicpruningexpression(ss_so
PushedFilters: [IsNotNull(ss_item_sk)]
ReadSchema: struct<ss_item_sk:int,ss_sales_price:decimal(7,2)>
(33) ColumnarToRow [codegen id : 14]
(31) ColumnarToRow [codegen id : 14]
Input [3]: [ss_item_sk#30, ss_sales_price#31, ss_sold_date_sk#32]
(34) Filter [codegen id : 14]
(32) Filter [codegen id : 14]
Input [3]: [ss_item_sk#30, ss_sales_price#31, ss_sold_date_sk#32]
Condition : isnotnull(ss_item_sk#30)
(35) ReusedExchange [Reuses operator id: 8]
(33) ReusedExchange [Reuses operator id: 8]
Output [2]: [d_date_sk#33, d_date#34]
(36) BroadcastHashJoin [codegen id : 14]
(34) BroadcastHashJoin [codegen id : 14]
Left keys [1]: [ss_sold_date_sk#32]
Right keys [1]: [d_date_sk#33]
Join condition: None
(37) Project [codegen id : 14]
(35) Project [codegen id : 14]
Output [3]: [ss_item_sk#30, ss_sales_price#31, d_date#34]
Input [5]: [ss_item_sk#30, ss_sales_price#31, ss_sold_date_sk#32, d_date_sk#33, d_date#34]
(38) HashAggregate [codegen id : 14]
(36) HashAggregate [codegen id : 14]
Input [3]: [ss_item_sk#30, ss_sales_price#31, d_date#34]
Keys [2]: [ss_item_sk#30, d_date#34]
Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#31))]
Aggregate Attributes [1]: [sum#35]
Results [3]: [ss_item_sk#30, d_date#34, sum#36]
(39) Exchange
(37) Exchange
Input [3]: [ss_item_sk#30, d_date#34, sum#36]
Arguments: hashpartitioning(ss_item_sk#30, d_date#34, 5), ENSURE_REQUIREMENTS, [id=#37]
(40) HashAggregate [codegen id : 15]
(38) HashAggregate [codegen id : 15]
Input [3]: [ss_item_sk#30, d_date#34, sum#36]
Keys [2]: [ss_item_sk#30, d_date#34]
Functions [1]: [sum(UnscaledValue(ss_sales_price#31))]
Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#31))#38]
Results [4]: [ss_item_sk#30 AS item_sk#39, d_date#34, MakeDecimal(sum(UnscaledValue(ss_sales_price#31))#38,17,2) AS sumss#40, ss_item_sk#30]
(41) Exchange
(39) Exchange
Input [4]: [item_sk#39, d_date#34, sumss#40, ss_item_sk#30]
Arguments: hashpartitioning(ss_item_sk#30, 5), ENSURE_REQUIREMENTS, [id=#41]
(42) Sort [codegen id : 16]
(40) Sort [codegen id : 16]
Input [4]: [item_sk#39, d_date#34, sumss#40, ss_item_sk#30]
Arguments: [ss_item_sk#30 ASC NULLS FIRST, d_date#34 ASC NULLS FIRST], false, 0
(43) Window
(41) Window
Input [4]: [item_sk#39, d_date#34, sumss#40, ss_item_sk#30]
Arguments: [row_number() windowspecdefinition(ss_item_sk#30, d_date#34 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#42], [ss_item_sk#30], [d_date#34 ASC NULLS FIRST]
(44) Filter [codegen id : 22]
Input [5]: [item_sk#39, d_date#34, sumss#40, ss_item_sk#30, rk#42]
Condition : isnotnull(rk#42)
(45) Project [codegen id : 22]
(42) Project [codegen id : 22]
Output [4]: [item_sk#39, d_date#34, sumss#40, rk#42]
Input [5]: [item_sk#39, d_date#34, sumss#40, ss_item_sk#30, rk#42]
(46) ReusedExchange [Reuses operator id: unknown]
(43) ReusedExchange [Reuses operator id: unknown]
Output [4]: [item_sk#43, d_date#44, sumss#45, ss_item_sk#30]
(47) Sort [codegen id : 20]
(44) Sort [codegen id : 20]
Input [4]: [item_sk#43, d_date#44, sumss#45, ss_item_sk#30]
Arguments: [ss_item_sk#30 ASC NULLS FIRST, d_date#44 ASC NULLS FIRST], false, 0
(48) Window
(45) Window
Input [4]: [item_sk#43, d_date#44, sumss#45, ss_item_sk#30]
Arguments: [row_number() windowspecdefinition(ss_item_sk#30, d_date#44 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#46], [ss_item_sk#30], [d_date#44 ASC NULLS FIRST]
(49) Filter [codegen id : 21]
Input [5]: [item_sk#43, d_date#44, sumss#45, ss_item_sk#30, rk#46]
Condition : isnotnull(rk#46)
(50) Project [codegen id : 21]
(46) Project [codegen id : 21]
Output [3]: [item_sk#43, sumss#45, rk#46]
Input [5]: [item_sk#43, d_date#44, sumss#45, ss_item_sk#30, rk#46]
(51) BroadcastExchange
(47) BroadcastExchange
Input [3]: [item_sk#43, sumss#45, rk#46]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#47]
(52) BroadcastHashJoin [codegen id : 22]
(48) BroadcastHashJoin [codegen id : 22]
Left keys [1]: [item_sk#39]
Right keys [1]: [item_sk#43]
Join condition: (rk#42 >= rk#46)
(53) Project [codegen id : 22]
(49) Project [codegen id : 22]
Output [4]: [item_sk#39, d_date#34, sumss#40, sumss#45]
Input [7]: [item_sk#39, d_date#34, sumss#40, rk#42, item_sk#43, sumss#45, rk#46]
(54) HashAggregate [codegen id : 22]
(50) HashAggregate [codegen id : 22]
Input [4]: [item_sk#39, d_date#34, sumss#40, sumss#45]
Keys [3]: [item_sk#39, d_date#34, sumss#40]
Functions [1]: [partial_sum(sumss#45)]
Aggregate Attributes [2]: [sum#48, isEmpty#49]
Results [5]: [item_sk#39, d_date#34, sumss#40, sum#50, isEmpty#51]
(55) Exchange
(51) Exchange
Input [5]: [item_sk#39, d_date#34, sumss#40, sum#50, isEmpty#51]
Arguments: hashpartitioning(item_sk#39, d_date#34, sumss#40, 5), ENSURE_REQUIREMENTS, [id=#52]
(56) HashAggregate [codegen id : 23]
(52) HashAggregate [codegen id : 23]
Input [5]: [item_sk#39, d_date#34, sumss#40, sum#50, isEmpty#51]
Keys [3]: [item_sk#39, d_date#34, sumss#40]
Functions [1]: [sum(sumss#45)]
Aggregate Attributes [1]: [sum(sumss#45)#53]
Results [3]: [item_sk#39, d_date#34, sum(sumss#45)#53 AS cume_sales#54]
(57) Exchange
(53) Exchange
Input [3]: [item_sk#39, d_date#34, cume_sales#54]
Arguments: hashpartitioning(item_sk#39, d_date#34, 5), ENSURE_REQUIREMENTS, [id=#55]
(58) Sort [codegen id : 24]
(54) Sort [codegen id : 24]
Input [3]: [item_sk#39, d_date#34, cume_sales#54]
Arguments: [item_sk#39 ASC NULLS FIRST, d_date#34 ASC NULLS FIRST], false, 0
(59) SortMergeJoin
(55) SortMergeJoin
Left keys [2]: [item_sk#13, d_date#6]
Right keys [2]: [item_sk#39, d_date#34]
Join condition: None
(60) Filter [codegen id : 25]
(56) Filter [codegen id : 25]
Input [6]: [item_sk#13, d_date#6, cume_sales#28, item_sk#39, d_date#34, cume_sales#54]
Condition : isnotnull(CASE WHEN isnotnull(item_sk#13) THEN item_sk#13 ELSE item_sk#39 END)
(61) Project [codegen id : 25]
(57) Project [codegen id : 25]
Output [4]: [CASE WHEN isnotnull(item_sk#13) THEN item_sk#13 ELSE item_sk#39 END AS item_sk#56, CASE WHEN isnotnull(d_date#6) THEN d_date#6 ELSE d_date#34 END AS d_date#57, cume_sales#28 AS web_sales#58, cume_sales#54 AS store_sales#59]
Input [6]: [item_sk#13, d_date#6, cume_sales#28, item_sk#39, d_date#34, cume_sales#54]
(62) Exchange
(58) Exchange
Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59]
Arguments: hashpartitioning(item_sk#56, 5), ENSURE_REQUIREMENTS, [id=#60]
(63) Sort [codegen id : 26]
(59) Sort [codegen id : 26]
Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59]
Arguments: [item_sk#56 ASC NULLS FIRST, d_date#57 ASC NULLS FIRST], false, 0
(64) Window
(60) Window
Input [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59]
Arguments: [row_number() windowspecdefinition(item_sk#56, d_date#57 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#61], [item_sk#56], [d_date#57 ASC NULLS FIRST]
(65) Filter [codegen id : 54]
Input [5]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, rk#61]
Condition : isnotnull(rk#61)
(66) ReusedExchange [Reuses operator id: unknown]
(61) ReusedExchange [Reuses operator id: unknown]
Output [4]: [item_sk#62, d_date#63, web_sales#64, store_sales#65]
(67) Sort [codegen id : 52]
(62) Sort [codegen id : 52]
Input [4]: [item_sk#62, d_date#63, web_sales#64, store_sales#65]
Arguments: [item_sk#62 ASC NULLS FIRST, d_date#63 ASC NULLS FIRST], false, 0
(68) Window
(63) Window
Input [4]: [item_sk#62, d_date#63, web_sales#64, store_sales#65]
Arguments: [row_number() windowspecdefinition(item_sk#62, d_date#63 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rk#66], [item_sk#62], [d_date#63 ASC NULLS FIRST]
(69) Filter [codegen id : 53]
Input [5]: [item_sk#62, d_date#63, web_sales#64, store_sales#65, rk#66]
Condition : isnotnull(rk#66)
(70) Project [codegen id : 53]
(64) Project [codegen id : 53]
Output [4]: [item_sk#62, web_sales#64, store_sales#65, rk#66]
Input [5]: [item_sk#62, d_date#63, web_sales#64, store_sales#65, rk#66]
(71) BroadcastExchange
(65) BroadcastExchange
Input [4]: [item_sk#62, web_sales#64, store_sales#65, rk#66]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#67]
(72) BroadcastHashJoin [codegen id : 54]
(66) BroadcastHashJoin [codegen id : 54]
Left keys [1]: [item_sk#56]
Right keys [1]: [item_sk#62]
Join condition: (rk#61 >= rk#66)
(73) Project [codegen id : 54]
(67) Project [codegen id : 54]
Output [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_sales#64, store_sales#65]
Input [9]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, rk#61, item_sk#62, web_sales#64, store_sales#65, rk#66]
(74) HashAggregate [codegen id : 54]
(68) HashAggregate [codegen id : 54]
Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_sales#64, store_sales#65]
Keys [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59]
Functions [2]: [partial_max(web_sales#64), partial_max(store_sales#65)]
Aggregate Attributes [2]: [max#68, max#69]
Results [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, max#70, max#71]
(75) HashAggregate [codegen id : 54]
(69) HashAggregate [codegen id : 54]
Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, max#70, max#71]
Keys [4]: [item_sk#56, d_date#57, web_sales#58, store_sales#59]
Functions [2]: [max(web_sales#64), max(store_sales#65)]
Aggregate Attributes [2]: [max(web_sales#64)#72, max(store_sales#65)#73]
Results [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, max(web_sales#64)#72 AS web_cumulative#74, max(store_sales#65)#73 AS store_cumulative#75]
(76) Filter [codegen id : 54]
(70) Filter [codegen id : 54]
Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_cumulative#74, store_cumulative#75]
Condition : ((isnotnull(web_cumulative#74) AND isnotnull(store_cumulative#75)) AND (web_cumulative#74 > store_cumulative#75))
(77) TakeOrderedAndProject
(71) TakeOrderedAndProject
Input [6]: [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_cumulative#74, store_cumulative#75]
Arguments: 100, [item_sk#56 ASC NULLS FIRST, d_date#57 ASC NULLS FIRST], [item_sk#56, d_date#57, web_sales#58, store_sales#59, web_cumulative#74, store_cumulative#75]
===== Subqueries =====
Subquery:1 Hosting operator id = 1 Hosting Expression = ws_sold_date_sk#3 IN dynamicpruning#4
ReusedExchange (78)
ReusedExchange (72)
(78) ReusedExchange [Reuses operator id: 8]
(72) ReusedExchange [Reuses operator id: 8]
Output [2]: [d_date_sk#5, d_date#6]
Subquery:2 Hosting operator id = 32 Hosting Expression = ss_sold_date_sk#32 IN dynamicpruning#4
Subquery:2 Hosting operator id = 30 Hosting Expression = ss_sold_date_sk#32 IN dynamicpruning#4

View file

@ -5,125 +5,119 @@ TakeOrderedAndProject [item_sk,d_date,web_sales,store_sales,web_cumulative,store
HashAggregate [item_sk,d_date,web_sales,store_sales,web_sales,store_sales] [max,max,max,max]
Project [item_sk,d_date,web_sales,store_sales,web_sales,store_sales]
BroadcastHashJoin [item_sk,item_sk,rk,rk]
Filter [rk]
InputAdapter
Window [item_sk,d_date]
WholeStageCodegen (26)
Sort [item_sk,d_date]
InputAdapter
Exchange [item_sk] #1
WholeStageCodegen (25)
Project [item_sk,item_sk,d_date,d_date,cume_sales,cume_sales]
Filter [item_sk,item_sk]
InputAdapter
SortMergeJoin [item_sk,d_date,item_sk,d_date]
WholeStageCodegen (12)
Sort [item_sk,d_date]
InputAdapter
Exchange [item_sk,d_date] #2
WholeStageCodegen (11)
HashAggregate [item_sk,d_date,sumws,sum,isEmpty] [sum(sumws),cume_sales,sum,isEmpty]
InputAdapter
Exchange [item_sk,d_date,sumws] #3
WholeStageCodegen (10)
HashAggregate [item_sk,d_date,sumws,sumws] [sum,isEmpty,sum,isEmpty]
Project [item_sk,d_date,sumws,sumws]
BroadcastHashJoin [item_sk,item_sk,rk,rk]
Project [item_sk,d_date,sumws,rk]
Filter [rk]
InputAdapter
Window [ws_item_sk,d_date]
WholeStageCodegen (4)
Sort [ws_item_sk,d_date]
InputAdapter
Exchange [ws_item_sk] #4
WholeStageCodegen (3)
HashAggregate [ws_item_sk,d_date,sum] [sum(UnscaledValue(ws_sales_price)),item_sk,sumws,sum]
InputAdapter
Exchange [ws_item_sk,d_date] #5
WholeStageCodegen (2)
HashAggregate [ws_item_sk,d_date,ws_sales_price] [sum,sum]
Project [ws_item_sk,ws_sales_price,d_date]
BroadcastHashJoin [ws_sold_date_sk,d_date_sk]
Filter [ws_item_sk]
ColumnarToRow
InputAdapter
Scan parquet default.web_sales [ws_item_sk,ws_sales_price,ws_sold_date_sk]
SubqueryBroadcast [d_date_sk] #1
ReusedExchange [d_date_sk,d_date] #6
InputAdapter
BroadcastExchange #6
WholeStageCodegen (1)
Project [d_date_sk,d_date]
Filter [d_month_seq,d_date_sk]
ColumnarToRow
InputAdapter
Scan parquet default.date_dim [d_date_sk,d_date,d_month_seq]
InputAdapter
Window [item_sk,d_date]
WholeStageCodegen (26)
Sort [item_sk,d_date]
InputAdapter
Exchange [item_sk] #1
WholeStageCodegen (25)
Project [item_sk,item_sk,d_date,d_date,cume_sales,cume_sales]
Filter [item_sk,item_sk]
InputAdapter
SortMergeJoin [item_sk,d_date,item_sk,d_date]
WholeStageCodegen (12)
Sort [item_sk,d_date]
InputAdapter
Exchange [item_sk,d_date] #2
WholeStageCodegen (11)
HashAggregate [item_sk,d_date,sumws,sum,isEmpty] [sum(sumws),cume_sales,sum,isEmpty]
InputAdapter
Exchange [item_sk,d_date,sumws] #3
WholeStageCodegen (10)
HashAggregate [item_sk,d_date,sumws,sumws] [sum,isEmpty,sum,isEmpty]
Project [item_sk,d_date,sumws,sumws]
BroadcastHashJoin [item_sk,item_sk,rk,rk]
Project [item_sk,d_date,sumws,rk]
InputAdapter
BroadcastExchange #7
WholeStageCodegen (9)
Project [item_sk,sumws,rk]
Filter [rk]
InputAdapter
Window [ws_item_sk,d_date]
WholeStageCodegen (8)
Sort [ws_item_sk,d_date]
InputAdapter
ReusedExchange [item_sk,d_date,sumws,ws_item_sk] #8
WholeStageCodegen (24)
Sort [item_sk,d_date]
InputAdapter
Exchange [item_sk,d_date] #9
WholeStageCodegen (23)
HashAggregate [item_sk,d_date,sumss,sum,isEmpty] [sum(sumss),cume_sales,sum,isEmpty]
InputAdapter
Exchange [item_sk,d_date,sumss] #10
WholeStageCodegen (22)
HashAggregate [item_sk,d_date,sumss,sumss] [sum,isEmpty,sum,isEmpty]
Project [item_sk,d_date,sumss,sumss]
BroadcastHashJoin [item_sk,item_sk,rk,rk]
Project [item_sk,d_date,sumss,rk]
Filter [rk]
InputAdapter
Window [ss_item_sk,d_date]
WholeStageCodegen (16)
Sort [ss_item_sk,d_date]
InputAdapter
Exchange [ss_item_sk] #11
WholeStageCodegen (15)
HashAggregate [ss_item_sk,d_date,sum] [sum(UnscaledValue(ss_sales_price)),item_sk,sumss,sum]
InputAdapter
Exchange [ss_item_sk,d_date] #12
WholeStageCodegen (14)
HashAggregate [ss_item_sk,d_date,ss_sales_price] [sum,sum]
Project [ss_item_sk,ss_sales_price,d_date]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
Filter [ss_item_sk]
ColumnarToRow
InputAdapter
Scan parquet default.store_sales [ss_item_sk,ss_sales_price,ss_sold_date_sk]
ReusedSubquery [d_date_sk] #1
Window [ws_item_sk,d_date]
WholeStageCodegen (4)
Sort [ws_item_sk,d_date]
InputAdapter
Exchange [ws_item_sk] #4
WholeStageCodegen (3)
HashAggregate [ws_item_sk,d_date,sum] [sum(UnscaledValue(ws_sales_price)),item_sk,sumws,sum]
InputAdapter
Exchange [ws_item_sk,d_date] #5
WholeStageCodegen (2)
HashAggregate [ws_item_sk,d_date,ws_sales_price] [sum,sum]
Project [ws_item_sk,ws_sales_price,d_date]
BroadcastHashJoin [ws_sold_date_sk,d_date_sk]
Filter [ws_item_sk]
ColumnarToRow
InputAdapter
ReusedExchange [d_date_sk,d_date] #6
Scan parquet default.web_sales [ws_item_sk,ws_sales_price,ws_sold_date_sk]
SubqueryBroadcast [d_date_sk] #1
ReusedExchange [d_date_sk,d_date] #6
InputAdapter
BroadcastExchange #6
WholeStageCodegen (1)
Project [d_date_sk,d_date]
Filter [d_month_seq,d_date_sk]
ColumnarToRow
InputAdapter
Scan parquet default.date_dim [d_date_sk,d_date,d_month_seq]
InputAdapter
BroadcastExchange #7
WholeStageCodegen (9)
Project [item_sk,sumws,rk]
InputAdapter
Window [ws_item_sk,d_date]
WholeStageCodegen (8)
Sort [ws_item_sk,d_date]
InputAdapter
ReusedExchange [item_sk,d_date,sumws,ws_item_sk] #8
WholeStageCodegen (24)
Sort [item_sk,d_date]
InputAdapter
Exchange [item_sk,d_date] #9
WholeStageCodegen (23)
HashAggregate [item_sk,d_date,sumss,sum,isEmpty] [sum(sumss),cume_sales,sum,isEmpty]
InputAdapter
Exchange [item_sk,d_date,sumss] #10
WholeStageCodegen (22)
HashAggregate [item_sk,d_date,sumss,sumss] [sum,isEmpty,sum,isEmpty]
Project [item_sk,d_date,sumss,sumss]
BroadcastHashJoin [item_sk,item_sk,rk,rk]
Project [item_sk,d_date,sumss,rk]
InputAdapter
BroadcastExchange #13
WholeStageCodegen (21)
Project [item_sk,sumss,rk]
Filter [rk]
InputAdapter
Window [ss_item_sk,d_date]
WholeStageCodegen (20)
Sort [ss_item_sk,d_date]
InputAdapter
ReusedExchange [item_sk,d_date,sumss,ss_item_sk] #14
Window [ss_item_sk,d_date]
WholeStageCodegen (16)
Sort [ss_item_sk,d_date]
InputAdapter
Exchange [ss_item_sk] #11
WholeStageCodegen (15)
HashAggregate [ss_item_sk,d_date,sum] [sum(UnscaledValue(ss_sales_price)),item_sk,sumss,sum]
InputAdapter
Exchange [ss_item_sk,d_date] #12
WholeStageCodegen (14)
HashAggregate [ss_item_sk,d_date,ss_sales_price] [sum,sum]
Project [ss_item_sk,ss_sales_price,d_date]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
Filter [ss_item_sk]
ColumnarToRow
InputAdapter
Scan parquet default.store_sales [ss_item_sk,ss_sales_price,ss_sold_date_sk]
ReusedSubquery [d_date_sk] #1
InputAdapter
ReusedExchange [d_date_sk,d_date] #6
InputAdapter
BroadcastExchange #13
WholeStageCodegen (21)
Project [item_sk,sumss,rk]
InputAdapter
Window [ss_item_sk,d_date]
WholeStageCodegen (20)
Sort [ss_item_sk,d_date]
InputAdapter
ReusedExchange [item_sk,d_date,sumss,ss_item_sk] #14
InputAdapter
BroadcastExchange #15
WholeStageCodegen (53)
Project [item_sk,web_sales,store_sales,rk]
Filter [rk]
InputAdapter
Window [item_sk,d_date]
WholeStageCodegen (52)
Sort [item_sk,d_date]
InputAdapter
ReusedExchange [item_sk,d_date,web_sales,store_sales] #16
InputAdapter
Window [item_sk,d_date]
WholeStageCodegen (52)
Sort [item_sk,d_date]
InputAdapter
ReusedExchange [item_sk,d_date,web_sales,store_sales] #16

View file

@ -1,9 +1,9 @@
== Physical Plan ==
TakeOrderedAndProject (58)
+- * Project (57)
+- * SortMergeJoin Inner (56)
:- * Project (48)
: +- * SortMergeJoin Inner (47)
TakeOrderedAndProject (56)
+- * Project (55)
+- * SortMergeJoin Inner (54)
:- * Project (47)
: +- * SortMergeJoin Inner (46)
: :- * Sort (37)
: : +- Exchange (36)
: : +- * Filter (35)
@ -41,22 +41,20 @@ TakeOrderedAndProject (58)
: : +- * Filter (20)
: : +- * ColumnarToRow (19)
: : +- Scan parquet default.item (18)
: +- * Sort (46)
: +- Exchange (45)
: +- * Project (44)
: +- * Filter (43)
: +- Window (42)
: +- * Sort (41)
: +- Exchange (40)
: +- * HashAggregate (39)
: +- ReusedExchange (38)
+- * Sort (55)
+- Exchange (54)
+- * Project (53)
+- * Filter (52)
+- Window (51)
+- * Sort (50)
+- ReusedExchange (49)
: +- * Sort (45)
: +- Exchange (44)
: +- * Project (43)
: +- Window (42)
: +- * Sort (41)
: +- Exchange (40)
: +- * HashAggregate (39)
: +- ReusedExchange (38)
+- * Sort (53)
+- Exchange (52)
+- * Project (51)
+- Window (50)
+- * Sort (49)
+- ReusedExchange (48)
(1) Scan parquet default.catalog_sales
@ -215,7 +213,7 @@ Arguments: [rank(d_year#7, d_moy#8) windowspecdefinition(i_category#16, i_brand#
(35) Filter [codegen id : 12]
Input [8]: [i_category#16, i_brand#15, cc_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#25, rn#27]
Condition : ((((((isnotnull(d_year#7) AND isnotnull(avg_monthly_sales#25)) AND (d_year#7 = 1999)) AND (avg_monthly_sales#25 > 0.000000)) AND (avg_monthly_sales#25 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6), true))) / promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000)) AND isnotnull(rn#27))
Condition : ((((isnotnull(d_year#7) AND isnotnull(avg_monthly_sales#25)) AND (d_year#7 = 1999)) AND (avg_monthly_sales#25 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6), true), false)) / promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000))
(36) Exchange
Input [8]: [i_category#16, i_brand#15, cc_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#25, rn#27]
@ -247,78 +245,70 @@ Arguments: [i_category#29 ASC NULLS FIRST, i_brand#30 ASC NULLS FIRST, cc_name#3
Input [6]: [i_category#29, i_brand#30, cc_name#31, d_year#32, d_moy#33, sum_sales#36]
Arguments: [rank(d_year#32, d_moy#33) windowspecdefinition(i_category#29, i_brand#30, cc_name#31, d_year#32 ASC NULLS FIRST, d_moy#33 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#38], [i_category#29, i_brand#30, cc_name#31], [d_year#32 ASC NULLS FIRST, d_moy#33 ASC NULLS FIRST]
(43) Filter [codegen id : 23]
Input [7]: [i_category#29, i_brand#30, cc_name#31, d_year#32, d_moy#33, sum_sales#36, rn#38]
Condition : isnotnull(rn#38)
(44) Project [codegen id : 23]
(43) Project [codegen id : 23]
Output [5]: [i_category#29, i_brand#30, cc_name#31, sum_sales#36, rn#38]
Input [7]: [i_category#29, i_brand#30, cc_name#31, d_year#32, d_moy#33, sum_sales#36, rn#38]
(45) Exchange
(44) Exchange
Input [5]: [i_category#29, i_brand#30, cc_name#31, sum_sales#36, rn#38]
Arguments: hashpartitioning(i_category#29, i_brand#30, cc_name#31, (rn#38 + 1), 5), ENSURE_REQUIREMENTS, [id=#39]
(46) Sort [codegen id : 24]
(45) Sort [codegen id : 24]
Input [5]: [i_category#29, i_brand#30, cc_name#31, sum_sales#36, rn#38]
Arguments: [i_category#29 ASC NULLS FIRST, i_brand#30 ASC NULLS FIRST, cc_name#31 ASC NULLS FIRST, (rn#38 + 1) ASC NULLS FIRST], false, 0
(47) SortMergeJoin [codegen id : 25]
(46) SortMergeJoin [codegen id : 25]
Left keys [4]: [i_category#16, i_brand#15, cc_name#11, rn#27]
Right keys [4]: [i_category#29, i_brand#30, cc_name#31, (rn#38 + 1)]
Join condition: None
(48) Project [codegen id : 25]
(47) Project [codegen id : 25]
Output [9]: [i_category#16, i_brand#15, cc_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#25, rn#27, sum_sales#36]
Input [13]: [i_category#16, i_brand#15, cc_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#25, rn#27, i_category#29, i_brand#30, cc_name#31, sum_sales#36, rn#38]
(49) ReusedExchange [Reuses operator id: 40]
(48) ReusedExchange [Reuses operator id: 40]
Output [6]: [i_category#40, i_brand#41, cc_name#42, d_year#43, d_moy#44, sum_sales#45]
(50) Sort [codegen id : 34]
(49) Sort [codegen id : 34]
Input [6]: [i_category#40, i_brand#41, cc_name#42, d_year#43, d_moy#44, sum_sales#45]
Arguments: [i_category#40 ASC NULLS FIRST, i_brand#41 ASC NULLS FIRST, cc_name#42 ASC NULLS FIRST, d_year#43 ASC NULLS FIRST, d_moy#44 ASC NULLS FIRST], false, 0
(51) Window
(50) Window
Input [6]: [i_category#40, i_brand#41, cc_name#42, d_year#43, d_moy#44, sum_sales#45]
Arguments: [rank(d_year#43, d_moy#44) windowspecdefinition(i_category#40, i_brand#41, cc_name#42, d_year#43 ASC NULLS FIRST, d_moy#44 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#46], [i_category#40, i_brand#41, cc_name#42], [d_year#43 ASC NULLS FIRST, d_moy#44 ASC NULLS FIRST]
(52) Filter [codegen id : 35]
Input [7]: [i_category#40, i_brand#41, cc_name#42, d_year#43, d_moy#44, sum_sales#45, rn#46]
Condition : isnotnull(rn#46)
(53) Project [codegen id : 35]
(51) Project [codegen id : 35]
Output [5]: [i_category#40, i_brand#41, cc_name#42, sum_sales#45, rn#46]
Input [7]: [i_category#40, i_brand#41, cc_name#42, d_year#43, d_moy#44, sum_sales#45, rn#46]
(54) Exchange
(52) Exchange
Input [5]: [i_category#40, i_brand#41, cc_name#42, sum_sales#45, rn#46]
Arguments: hashpartitioning(i_category#40, i_brand#41, cc_name#42, (rn#46 - 1), 5), ENSURE_REQUIREMENTS, [id=#47]
(55) Sort [codegen id : 36]
(53) Sort [codegen id : 36]
Input [5]: [i_category#40, i_brand#41, cc_name#42, sum_sales#45, rn#46]
Arguments: [i_category#40 ASC NULLS FIRST, i_brand#41 ASC NULLS FIRST, cc_name#42 ASC NULLS FIRST, (rn#46 - 1) ASC NULLS FIRST], false, 0
(56) SortMergeJoin [codegen id : 37]
(54) SortMergeJoin [codegen id : 37]
Left keys [4]: [i_category#16, i_brand#15, cc_name#11, rn#27]
Right keys [4]: [i_category#40, i_brand#41, cc_name#42, (rn#46 - 1)]
Join condition: None
(57) Project [codegen id : 37]
(55) Project [codegen id : 37]
Output [8]: [i_category#16, i_brand#15, d_year#7, d_moy#8, avg_monthly_sales#25, sum_sales#22, sum_sales#36 AS psum#48, sum_sales#45 AS nsum#49]
Input [14]: [i_category#16, i_brand#15, cc_name#11, d_year#7, d_moy#8, sum_sales#22, avg_monthly_sales#25, rn#27, sum_sales#36, i_category#40, i_brand#41, cc_name#42, sum_sales#45, rn#46]
(58) TakeOrderedAndProject
(56) TakeOrderedAndProject
Input [8]: [i_category#16, i_brand#15, d_year#7, d_moy#8, avg_monthly_sales#25, sum_sales#22, psum#48, nsum#49]
Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#22 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#25 as decimal(22,6)))), DecimalType(22,6), true) ASC NULLS FIRST, d_year#7 ASC NULLS FIRST], [i_category#16, i_brand#15, d_year#7, d_moy#8, avg_monthly_sales#25, sum_sales#22, psum#48, nsum#49]
===== Subqueries =====
Subquery:1 Hosting operator id = 1 Hosting Expression = cs_sold_date_sk#4 IN dynamicpruning#5
ReusedExchange (59)
ReusedExchange (57)
(59) ReusedExchange [Reuses operator id: 7]
(57) ReusedExchange [Reuses operator id: 7]
Output [3]: [d_date_sk#6, d_year#7, d_moy#8]

View file

@ -12,7 +12,7 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,d_year,i_category,i_brand,d_m
InputAdapter
Exchange [i_category,i_brand,cc_name,rn] #1
WholeStageCodegen (12)
Filter [d_year,avg_monthly_sales,sum_sales,rn]
Filter [d_year,avg_monthly_sales,sum_sales]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (11)
@ -82,17 +82,16 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,d_year,i_category,i_brand,d_m
Exchange [i_category,i_brand,cc_name,rn] #9
WholeStageCodegen (23)
Project [i_category,i_brand,cc_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (22)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,cc_name] #10
WholeStageCodegen (21)
HashAggregate [i_category,i_brand,cc_name,d_year,d_moy,sum] [sum(UnscaledValue(cs_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum] #11
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (22)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,cc_name] #10
WholeStageCodegen (21)
HashAggregate [i_category,i_brand,cc_name,d_year,d_moy,sum] [sum(UnscaledValue(cs_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum] #11
InputAdapter
WholeStageCodegen (36)
Sort [i_category,i_brand,cc_name,rn]
@ -100,10 +99,9 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,d_year,i_category,i_brand,d_m
Exchange [i_category,i_brand,cc_name,rn] #12
WholeStageCodegen (35)
Project [i_category,i_brand,cc_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (34)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum_sales] #10
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (34)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum_sales] #10

View file

@ -1,9 +1,9 @@
== Physical Plan ==
TakeOrderedAndProject (51)
+- * Project (50)
+- * BroadcastHashJoin Inner BuildRight (49)
:- * Project (42)
: +- * BroadcastHashJoin Inner BuildRight (41)
TakeOrderedAndProject (49)
+- * Project (48)
+- * BroadcastHashJoin Inner BuildRight (47)
:- * Project (41)
: +- * BroadcastHashJoin Inner BuildRight (40)
: :- * Filter (32)
: : +- Window (31)
: : +- * Sort (30)
@ -36,20 +36,18 @@ TakeOrderedAndProject (51)
: : +- * Filter (18)
: : +- * ColumnarToRow (17)
: : +- Scan parquet default.call_center (16)
: +- BroadcastExchange (40)
: +- * Project (39)
: +- * Filter (38)
: +- Window (37)
: +- * Sort (36)
: +- Exchange (35)
: +- * HashAggregate (34)
: +- ReusedExchange (33)
+- BroadcastExchange (48)
+- * Project (47)
+- * Filter (46)
+- Window (45)
+- * Sort (44)
+- ReusedExchange (43)
: +- BroadcastExchange (39)
: +- * Project (38)
: +- Window (37)
: +- * Sort (36)
: +- Exchange (35)
: +- * HashAggregate (34)
: +- ReusedExchange (33)
+- BroadcastExchange (46)
+- * Project (45)
+- Window (44)
+- * Sort (43)
+- ReusedExchange (42)
(1) Scan parquet default.item
@ -196,7 +194,7 @@ Arguments: [rank(d_year#11, d_moy#12) windowspecdefinition(i_category#3, i_brand
(32) Filter [codegen id : 23]
Input [8]: [i_category#3, i_brand#2, cc_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#24, rn#26]
Condition : ((((((isnotnull(d_year#11) AND isnotnull(avg_monthly_sales#24)) AND (d_year#11 = 1999)) AND (avg_monthly_sales#24 > 0.000000)) AND (avg_monthly_sales#24 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6), true))) / promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000)) AND isnotnull(rn#26))
Condition : ((((isnotnull(d_year#11) AND isnotnull(avg_monthly_sales#24)) AND (d_year#11 = 1999)) AND (avg_monthly_sales#24 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6), true), false)) / promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000))
(33) ReusedExchange [Reuses operator id: unknown]
Output [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum#32]
@ -220,70 +218,62 @@ Arguments: [i_category#27 ASC NULLS FIRST, i_brand#28 ASC NULLS FIRST, cc_name#2
Input [6]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum_sales#34]
Arguments: [rank(d_year#30, d_moy#31) windowspecdefinition(i_category#27, i_brand#28, cc_name#29, d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#36], [i_category#27, i_brand#28, cc_name#29], [d_year#30 ASC NULLS FIRST, d_moy#31 ASC NULLS FIRST]
(38) Filter [codegen id : 15]
Input [7]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum_sales#34, rn#36]
Condition : isnotnull(rn#36)
(39) Project [codegen id : 15]
(38) Project [codegen id : 15]
Output [5]: [i_category#27, i_brand#28, cc_name#29, sum_sales#34, rn#36]
Input [7]: [i_category#27, i_brand#28, cc_name#29, d_year#30, d_moy#31, sum_sales#34, rn#36]
(40) BroadcastExchange
(39) BroadcastExchange
Input [5]: [i_category#27, i_brand#28, cc_name#29, sum_sales#34, rn#36]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, true] + 1)),false), [id=#37]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, false] + 1)),false), [id=#37]
(41) BroadcastHashJoin [codegen id : 23]
(40) BroadcastHashJoin [codegen id : 23]
Left keys [4]: [i_category#3, i_brand#2, cc_name#15, rn#26]
Right keys [4]: [i_category#27, i_brand#28, cc_name#29, (rn#36 + 1)]
Join condition: None
(42) Project [codegen id : 23]
(41) Project [codegen id : 23]
Output [9]: [i_category#3, i_brand#2, cc_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#24, rn#26, sum_sales#34]
Input [13]: [i_category#3, i_brand#2, cc_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#24, rn#26, i_category#27, i_brand#28, cc_name#29, sum_sales#34, rn#36]
(43) ReusedExchange [Reuses operator id: 35]
(42) ReusedExchange [Reuses operator id: 35]
Output [6]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#43]
(44) Sort [codegen id : 21]
(43) Sort [codegen id : 21]
Input [6]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#43]
Arguments: [i_category#38 ASC NULLS FIRST, i_brand#39 ASC NULLS FIRST, cc_name#40 ASC NULLS FIRST, d_year#41 ASC NULLS FIRST, d_moy#42 ASC NULLS FIRST], false, 0
(45) Window
(44) Window
Input [6]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#43]
Arguments: [rank(d_year#41, d_moy#42) windowspecdefinition(i_category#38, i_brand#39, cc_name#40, d_year#41 ASC NULLS FIRST, d_moy#42 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#44], [i_category#38, i_brand#39, cc_name#40], [d_year#41 ASC NULLS FIRST, d_moy#42 ASC NULLS FIRST]
(46) Filter [codegen id : 22]
Input [7]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#43, rn#44]
Condition : isnotnull(rn#44)
(47) Project [codegen id : 22]
(45) Project [codegen id : 22]
Output [5]: [i_category#38, i_brand#39, cc_name#40, sum_sales#43, rn#44]
Input [7]: [i_category#38, i_brand#39, cc_name#40, d_year#41, d_moy#42, sum_sales#43, rn#44]
(48) BroadcastExchange
(46) BroadcastExchange
Input [5]: [i_category#38, i_brand#39, cc_name#40, sum_sales#43, rn#44]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, true] - 1)),false), [id=#45]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true], input[1, string, true], input[2, string, true], (input[4, int, false] - 1)),false), [id=#45]
(49) BroadcastHashJoin [codegen id : 23]
(47) BroadcastHashJoin [codegen id : 23]
Left keys [4]: [i_category#3, i_brand#2, cc_name#15, rn#26]
Right keys [4]: [i_category#38, i_brand#39, cc_name#40, (rn#44 - 1)]
Join condition: None
(50) Project [codegen id : 23]
(48) Project [codegen id : 23]
Output [8]: [i_category#3, i_brand#2, d_year#11, d_moy#12, avg_monthly_sales#24, sum_sales#21, sum_sales#34 AS psum#46, sum_sales#43 AS nsum#47]
Input [14]: [i_category#3, i_brand#2, cc_name#15, d_year#11, d_moy#12, sum_sales#21, avg_monthly_sales#24, rn#26, sum_sales#34, i_category#38, i_brand#39, cc_name#40, sum_sales#43, rn#44]
(51) TakeOrderedAndProject
(49) TakeOrderedAndProject
Input [8]: [i_category#3, i_brand#2, d_year#11, d_moy#12, avg_monthly_sales#24, sum_sales#21, psum#46, nsum#47]
Arguments: 100, [CheckOverflow((promote_precision(cast(sum_sales#21 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#24 as decimal(22,6)))), DecimalType(22,6), true) ASC NULLS FIRST, d_year#11 ASC NULLS FIRST], [i_category#3, i_brand#2, d_year#11, d_moy#12, avg_monthly_sales#24, sum_sales#21, psum#46, nsum#47]
===== Subqueries =====
Subquery:1 Hosting operator id = 4 Hosting Expression = cs_sold_date_sk#7 IN dynamicpruning#8
ReusedExchange (52)
ReusedExchange (50)
(52) ReusedExchange [Reuses operator id: 13]
(50) ReusedExchange [Reuses operator id: 13]
Output [3]: [d_date_sk#10, d_year#11, d_moy#12]

View file

@ -4,7 +4,7 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,d_year,i_category,i_brand,d_m
BroadcastHashJoin [i_category,i_brand,cc_name,rn,i_category,i_brand,cc_name,rn]
Project [i_category,i_brand,cc_name,d_year,d_moy,sum_sales,avg_monthly_sales,rn,sum_sales]
BroadcastHashJoin [i_category,i_brand,cc_name,rn,i_category,i_brand,cc_name,rn]
Filter [d_year,avg_monthly_sales,sum_sales,rn]
Filter [d_year,avg_monthly_sales,sum_sales]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (8)
@ -62,25 +62,23 @@ TakeOrderedAndProject [sum_sales,avg_monthly_sales,d_year,i_category,i_brand,d_m
BroadcastExchange #7
WholeStageCodegen (15)
Project [i_category,i_brand,cc_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (14)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,cc_name] #8
WholeStageCodegen (13)
HashAggregate [i_category,i_brand,cc_name,d_year,d_moy,sum] [sum(UnscaledValue(cs_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum] #9
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (14)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
Exchange [i_category,i_brand,cc_name] #8
WholeStageCodegen (13)
HashAggregate [i_category,i_brand,cc_name,d_year,d_moy,sum] [sum(UnscaledValue(cs_sales_price)),sum_sales,sum]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum] #9
InputAdapter
BroadcastExchange #10
WholeStageCodegen (22)
Project [i_category,i_brand,cc_name,sum_sales,rn]
Filter [rn]
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (21)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum_sales] #8
InputAdapter
Window [d_year,d_moy,i_category,i_brand,cc_name]
WholeStageCodegen (21)
Sort [i_category,i_brand,cc_name,d_year,d_moy]
InputAdapter
ReusedExchange [i_category,i_brand,cc_name,d_year,d_moy,sum_sales] #8