== Physical Plan ==
VeloxColumnarToRow (66)
+- ^ SortExecTransformer (64)
   +- ^ InputIteratorTransformer (63)
      +- ColumnarExchange (61)
         +- VeloxResizeBatches (60)
            +- ^ ProjectExecTransformer (58)
               +- ^ RegularHashAggregateExecTransformer (57)
                  +- ^ InputIteratorTransformer (56)
                     +- ColumnarExchange (54)
                        +- VeloxResizeBatches (53)
                           +- ^ ProjectExecTransformer (51)
                              +- ^ FlushableHashAggregateExecTransformer (50)
                                 +- ^ ProjectExecTransformer (49)
                                    +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (48)
                                       :- ^ ProjectExecTransformer (40)
                                       :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (39)
                                       :     :- ^ ProjectExecTransformer (32)
                                       :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (31)
                                       :     :     :- ^ ProjectExecTransformer (23)
                                       :     :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (22)
                                       :     :     :     :- ^ ProjectExecTransformer (15)
                                       :     :     :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (14)
                                       :     :     :     :     :- ^ ProjectExecTransformer (10)
                                       :     :     :     :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (9)
                                       :     :     :     :     :     :- ^ FilterExecTransformer (2)
                                       :     :     :     :     :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.call_center (1)
                                       :     :     :     :     :     +- ^ InputIteratorTransformer (8)
                                       :     :     :     :     :        +- ColumnarBroadcastExchange (6)
                                       :     :     :     :     :           +- ^ FilterExecTransformer (4)
                                       :     :     :     :     :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (3)
                                       :     :     :     :     +- ^ InputIteratorTransformer (13)
                                       :     :     :     :        +- ReusedExchange (11)
                                       :     :     :     +- ^ InputIteratorTransformer (21)
                                       :     :     :        +- ColumnarBroadcastExchange (19)
                                       :     :     :           +- ^ FilterExecTransformer (17)
                                       :     :     :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (16)
                                       :     :     +- ^ InputIteratorTransformer (30)
                                       :     :        +- ColumnarBroadcastExchange (28)
                                       :     :           +- ^ ProjectExecTransformer (26)
                                       :     :              +- ^ FilterExecTransformer (25)
                                       :     :                 +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (24)
                                       :     +- ^ InputIteratorTransformer (38)
                                       :        +- ColumnarBroadcastExchange (36)
                                       :           +- ^ FilterExecTransformer (34)
                                       :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics (33)
                                       +- ^ InputIteratorTransformer (47)
                                          +- ColumnarBroadcastExchange (45)
                                             +- ^ ProjectExecTransformer (43)
                                                +- ^ FilterExecTransformer (42)
                                                   +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics (41)


(1) FileSourceScanExecTransformer parquet spark_catalog.default.call_center
Output [4]: [cc_call_center_sk#1, cc_call_center_id#2, cc_name#3, cc_manager#4]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/call_center]
PushedFilters: [IsNotNull(cc_call_center_sk)]
ReadSchema: struct<cc_call_center_sk:int,cc_call_center_id:string,cc_name:string,cc_manager:string>

(2) FilterExecTransformer
Input [4]: [cc_call_center_sk#1, cc_call_center_id#2, cc_name#3, cc_manager#4]
Arguments: isnotnull(cc_call_center_sk#1)

(3) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns
Output [4]: [cr_returning_customer_sk#5, cr_call_center_sk#6, cr_net_loss#7, cr_returned_date_sk#8]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cr_returned_date_sk#8), dynamicpruningexpression(cr_returned_date_sk#8 IN dynamicpruning#9)]
PushedFilters: [IsNotNull(cr_call_center_sk), IsNotNull(cr_returning_customer_sk)]
ReadSchema: struct<cr_returning_customer_sk:int,cr_call_center_sk:int,cr_net_loss:decimal(7,2)>

(4) FilterExecTransformer
Input [4]: [cr_returning_customer_sk#5, cr_call_center_sk#6, cr_net_loss#7, cr_returned_date_sk#8]
Arguments: (isnotnull(cr_call_center_sk#6) AND isnotnull(cr_returning_customer_sk#5))

(5) WholeStageCodegenTransformer (2)
Input [4]: [cr_returning_customer_sk#5, cr_call_center_sk#6, cr_net_loss#7, cr_returned_date_sk#8]
Arguments: false

(6) ColumnarBroadcastExchange
Input [4]: [cr_returning_customer_sk#5, cr_call_center_sk#6, cr_net_loss#7, cr_returned_date_sk#8]
Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [plan_id=1]

(7) InputAdapter
Input [4]: [cr_returning_customer_sk#5, cr_call_center_sk#6, cr_net_loss#7, cr_returned_date_sk#8]

(8) InputIteratorTransformer
Input [4]: [cr_returning_customer_sk#5, cr_call_center_sk#6, cr_net_loss#7, cr_returned_date_sk#8]

(9) BroadcastHashJoinExecTransformer
Left keys [1]: [cc_call_center_sk#1]
Right keys [1]: [cr_call_center_sk#6]
Join type: Inner
Join condition: None

(10) ProjectExecTransformer
Output [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_returning_customer_sk#5, cr_net_loss#7, cr_returned_date_sk#8]
Input [8]: [cc_call_center_sk#1, cc_call_center_id#2, cc_name#3, cc_manager#4, cr_returning_customer_sk#5, cr_call_center_sk#6, cr_net_loss#7, cr_returned_date_sk#8]

(11) ReusedExchange [Reuses operator id: 71]
Output [1]: [d_date_sk#10]

(12) InputAdapter
Input [1]: [d_date_sk#10]

(13) InputIteratorTransformer
Input [1]: [d_date_sk#10]

(14) BroadcastHashJoinExecTransformer
Left keys [1]: [cr_returned_date_sk#8]
Right keys [1]: [d_date_sk#10]
Join type: Inner
Join condition: None

(15) ProjectExecTransformer
Output [5]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_returning_customer_sk#5, cr_net_loss#7]
Input [7]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_returning_customer_sk#5, cr_net_loss#7, cr_returned_date_sk#8, d_date_sk#10]

(16) FileSourceScanExecTransformer parquet spark_catalog.default.customer
Output [4]: [c_customer_sk#11, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_hdemo_sk)]
ReadSchema: struct<c_customer_sk:int,c_current_cdemo_sk:int,c_current_hdemo_sk:int,c_current_addr_sk:int>

(17) FilterExecTransformer
Input [4]: [c_customer_sk#11, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14]
Arguments: (((isnotnull(c_customer_sk#11) AND isnotnull(c_current_addr_sk#14)) AND isnotnull(c_current_cdemo_sk#12)) AND isnotnull(c_current_hdemo_sk#13))

(18) WholeStageCodegenTransformer (4)
Input [4]: [c_customer_sk#11, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14]
Arguments: false

(19) ColumnarBroadcastExchange
Input [4]: [c_customer_sk#11, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2]

(20) InputAdapter
Input [4]: [c_customer_sk#11, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14]

(21) InputIteratorTransformer
Input [4]: [c_customer_sk#11, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14]

(22) BroadcastHashJoinExecTransformer
Left keys [1]: [cr_returning_customer_sk#5]
Right keys [1]: [c_customer_sk#11]
Join type: Inner
Join condition: None

(23) ProjectExecTransformer
Output [7]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14]
Input [9]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_returning_customer_sk#5, cr_net_loss#7, c_customer_sk#11, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14]

(24) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address
Output [2]: [ca_address_sk#15, ca_gmt_offset#16]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/customer_address]
PushedFilters: [IsNotNull(ca_gmt_offset), EqualTo(ca_gmt_offset,-7.00), IsNotNull(ca_address_sk)]
ReadSchema: struct<ca_address_sk:int,ca_gmt_offset:decimal(5,2)>

(25) FilterExecTransformer
Input [2]: [ca_address_sk#15, ca_gmt_offset#16]
Arguments: ((isnotnull(ca_gmt_offset#16) AND (ca_gmt_offset#16 = -7.00)) AND isnotnull(ca_address_sk#15))

(26) ProjectExecTransformer
Output [1]: [ca_address_sk#15]
Input [2]: [ca_address_sk#15, ca_gmt_offset#16]

(27) WholeStageCodegenTransformer (5)
Input [1]: [ca_address_sk#15]
Arguments: false

(28) ColumnarBroadcastExchange
Input [1]: [ca_address_sk#15]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3]

(29) InputAdapter
Input [1]: [ca_address_sk#15]

(30) InputIteratorTransformer
Input [1]: [ca_address_sk#15]

(31) BroadcastHashJoinExecTransformer
Left keys [1]: [c_current_addr_sk#14]
Right keys [1]: [ca_address_sk#15]
Join type: Inner
Join condition: None

(32) ProjectExecTransformer
Output [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_cdemo_sk#12, c_current_hdemo_sk#13]
Input [8]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_cdemo_sk#12, c_current_hdemo_sk#13, c_current_addr_sk#14, ca_address_sk#15]

(33) FileSourceScanExecTransformer parquet spark_catalog.default.customer_demographics
Output [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/customer_demographics]
PushedFilters: [Or(And(EqualTo(cd_marital_status,M),EqualTo(cd_education_status,Unknown             )),And(EqualTo(cd_marital_status,W),EqualTo(cd_education_status,Advanced Degree     ))), IsNotNull(cd_demo_sk)]
ReadSchema: struct<cd_demo_sk:int,cd_marital_status:string,cd_education_status:string>

(34) FilterExecTransformer
Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19]
Arguments: ((((cd_marital_status#18 = M) AND (cd_education_status#19 = Unknown             )) OR ((cd_marital_status#18 = W) AND (cd_education_status#19 = Advanced Degree     ))) AND isnotnull(cd_demo_sk#17))

(35) WholeStageCodegenTransformer (6)
Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19]
Arguments: false

(36) ColumnarBroadcastExchange
Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4]

(37) InputAdapter
Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19]

(38) InputIteratorTransformer
Input [3]: [cd_demo_sk#17, cd_marital_status#18, cd_education_status#19]

(39) BroadcastHashJoinExecTransformer
Left keys [1]: [c_current_cdemo_sk#12]
Right keys [1]: [cd_demo_sk#17]
Join type: Inner
Join condition: None

(40) ProjectExecTransformer
Output [7]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_hdemo_sk#13, cd_marital_status#18, cd_education_status#19]
Input [9]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_cdemo_sk#12, c_current_hdemo_sk#13, cd_demo_sk#17, cd_marital_status#18, cd_education_status#19]

(41) FileSourceScanExecTransformer parquet spark_catalog.default.household_demographics
Output [2]: [hd_demo_sk#20, hd_buy_potential#21]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/household_demographics]
PushedFilters: [IsNotNull(hd_buy_potential), StringStartsWith(hd_buy_potential,Unknown), IsNotNull(hd_demo_sk)]
ReadSchema: struct<hd_demo_sk:int,hd_buy_potential:string>

(42) FilterExecTransformer
Input [2]: [hd_demo_sk#20, hd_buy_potential#21]
Arguments: ((isnotnull(hd_buy_potential#21) AND StartsWith(hd_buy_potential#21, Unknown)) AND isnotnull(hd_demo_sk#20))

(43) ProjectExecTransformer
Output [1]: [hd_demo_sk#20]
Input [2]: [hd_demo_sk#20, hd_buy_potential#21]

(44) WholeStageCodegenTransformer (7)
Input [1]: [hd_demo_sk#20]
Arguments: false

(45) ColumnarBroadcastExchange
Input [1]: [hd_demo_sk#20]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5]

(46) InputAdapter
Input [1]: [hd_demo_sk#20]

(47) InputIteratorTransformer
Input [1]: [hd_demo_sk#20]

(48) BroadcastHashJoinExecTransformer
Left keys [1]: [c_current_hdemo_sk#13]
Right keys [1]: [hd_demo_sk#20]
Join type: Inner
Join condition: None

(49) ProjectExecTransformer
Output [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, UnscaledValue(cr_net_loss#7) AS _pre_1#22]
Input [8]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cr_net_loss#7, c_current_hdemo_sk#13, cd_marital_status#18, cd_education_status#19, hd_demo_sk#20]

(50) FlushableHashAggregateExecTransformer
Input [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, _pre_1#22]
Keys [5]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19]
Functions [1]: [partial_sum(_pre_1#22)]
Aggregate Attributes [1]: [sum#23]
Results [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum#24]

(51) ProjectExecTransformer
Output [7]: [hash(cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, 42) AS hash_partition_key#25, cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum#24]
Input [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum#24]

(52) WholeStageCodegenTransformer (8)
Input [7]: [hash_partition_key#25, cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum#24]
Arguments: false

(53) VeloxResizeBatches
Input [7]: [hash_partition_key#25, cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum#24]
Arguments: 1024, 2147483647, 10485760

(54) ColumnarExchange
Input [7]: [hash_partition_key#25, cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum#24]
Arguments: hashpartitioning(cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, 1), ENSURE_REQUIREMENTS, [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum#24], [plan_id=6], [shuffle_writer_type=hash]

(55) InputAdapter
Input [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum#24]

(56) InputIteratorTransformer
Input [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum#24]

(57) RegularHashAggregateExecTransformer
Input [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum#24]
Keys [5]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19]
Functions [1]: [sum(UnscaledValue(cr_net_loss#7))]
Aggregate Attributes [1]: [sum(UnscaledValue(cr_net_loss#7))#26]
Results [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum(UnscaledValue(cr_net_loss#7))#26]

(58) ProjectExecTransformer
Output [4]: [cc_call_center_id#2 AS Call_Center#27, cc_name#3 AS Call_Center_Name#28, cc_manager#4 AS Manager#29, MakeDecimal(sum(UnscaledValue(cr_net_loss#7))#26,17,2) AS Returns_Loss#30]
Input [6]: [cc_call_center_id#2, cc_name#3, cc_manager#4, cd_marital_status#18, cd_education_status#19, sum(UnscaledValue(cr_net_loss#7))#26]

(59) WholeStageCodegenTransformer (9)
Input [4]: [Call_Center#27, Call_Center_Name#28, Manager#29, Returns_Loss#30]
Arguments: false

(60) VeloxResizeBatches
Input [4]: [Call_Center#27, Call_Center_Name#28, Manager#29, Returns_Loss#30]
Arguments: 1024, 2147483647, 10485760

(61) ColumnarExchange
Input [4]: [Call_Center#27, Call_Center_Name#28, Manager#29, Returns_Loss#30]
Arguments: rangepartitioning(Returns_Loss#30 DESC NULLS LAST, 1), ENSURE_REQUIREMENTS, [plan_id=7], [shuffle_writer_type=hash]

(62) InputAdapter
Input [4]: [Call_Center#27, Call_Center_Name#28, Manager#29, Returns_Loss#30]

(63) InputIteratorTransformer
Input [4]: [Call_Center#27, Call_Center_Name#28, Manager#29, Returns_Loss#30]

(64) SortExecTransformer
Input [4]: [Call_Center#27, Call_Center_Name#28, Manager#29, Returns_Loss#30]
Arguments: [Returns_Loss#30 DESC NULLS LAST], true, 0

(65) WholeStageCodegenTransformer (10)
Input [4]: [Call_Center#27, Call_Center_Name#28, Manager#29, Returns_Loss#30]
Arguments: false

(66) VeloxColumnarToRow
Input [4]: [Call_Center#27, Call_Center_Name#28, Manager#29, Returns_Loss#30]

===== Subqueries =====

Subquery:1 Hosting operator id = 3 Hosting Expression = cr_returned_date_sk#8 IN dynamicpruning#9
ColumnarBroadcastExchange (71)
+- ^ ProjectExecTransformer (69)
   +- ^ FilterExecTransformer (68)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (67)


(67) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#10, d_year#31, d_moy#32]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,11), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_moy:int>

(68) FilterExecTransformer
Input [3]: [d_date_sk#10, d_year#31, d_moy#32]
Arguments: ((((isnotnull(d_year#31) AND isnotnull(d_moy#32)) AND (d_year#31 = 1998)) AND (d_moy#32 = 11)) AND isnotnull(d_date_sk#10))

(69) ProjectExecTransformer
Output [1]: [d_date_sk#10]
Input [3]: [d_date_sk#10, d_year#31, d_moy#32]

(70) WholeStageCodegenTransformer (1)
Input [1]: [d_date_sk#10]
Arguments: false

(71) ColumnarBroadcastExchange
Input [1]: [d_date_sk#10]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8]


