[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:
parent
ddfc75ec64
commit
51cf0cadea
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue