== Physical Plan ==
TakeOrderedAndProject (44)
+- * HashAggregate (43)
   +- Exchange (42)
      +- * HashAggregate (41)
         +- * Project (40)
            +- * BroadcastHashJoin Inner BuildRight (39)
               :- * ColumnarToRow (14)
               :  +- CometProject (13)
               :     +- CometBroadcastHashJoin (12)
               :        :- CometProject (8)
               :        :  +- CometBroadcastHashJoin (7)
               :        :     :- CometFilter (2)
               :        :     :  +- CometScan parquet spark_catalog.default.store_sales (1)
               :        :     +- CometBroadcastExchange (6)
               :        :        +- CometProject (5)
               :        :           +- CometFilter (4)
               :        :              +- CometScan parquet spark_catalog.default.date_dim (3)
               :        +- CometBroadcastExchange (11)
               :           +- CometFilter (10)
               :              +- CometScan parquet spark_catalog.default.store (9)
               +- BroadcastExchange (38)
                  +- * HashAggregate (37)
                     +- Exchange (36)
                        +- * HashAggregate (35)
                           +- * BroadcastHashJoin LeftSemi BuildRight (34)
                              :- * ColumnarToRow (18)
                              :  +- CometProject (17)
                              :     +- CometFilter (16)
                              :        +- CometScan parquet spark_catalog.default.customer_address (15)
                              +- BroadcastExchange (33)
                                 +- * Project (32)
                                    +- * Filter (31)
                                       +- * HashAggregate (30)
                                          +- Exchange (29)
                                             +- * ColumnarToRow (28)
                                                +- CometHashAggregate (27)
                                                   +- CometProject (26)
                                                      +- CometBroadcastHashJoin (25)
                                                         :- CometFilter (20)
                                                         :  +- CometScan parquet spark_catalog.default.customer_address (19)
                                                         +- CometBroadcastExchange (24)
                                                            +- CometProject (23)
                                                               +- CometFilter (22)
                                                                  +- CometScan parquet spark_catalog.default.customer (21)


(1) Scan parquet spark_catalog.default.store_sales
Output [3]: [ss_store_sk#1, ss_net_profit#2, ss_sold_date_sk#3]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#3), dynamicpruningexpression(ss_sold_date_sk#3 IN dynamicpruning#4)]
PushedFilters: [IsNotNull(ss_store_sk)]
ReadSchema: struct<ss_store_sk:int,ss_net_profit:decimal(7,2)>

(2) CometFilter
Input [3]: [ss_store_sk#1, ss_net_profit#2, ss_sold_date_sk#3]
Condition : isnotnull(ss_store_sk#1)

(3) Scan parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,2), EqualTo(d_year,1998), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_qoy:int>

(4) CometFilter
Input [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Condition : ((((isnotnull(d_qoy#7) AND isnotnull(d_year#6)) AND (d_qoy#7 = 2)) AND (d_year#6 = 1998)) AND isnotnull(d_date_sk#5))

(5) CometProject
Input [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Arguments: [d_date_sk#5], [d_date_sk#5]

(6) CometBroadcastExchange
Input [1]: [d_date_sk#5]
Arguments: [d_date_sk#5]

(7) CometBroadcastHashJoin
Left output [3]: [ss_store_sk#1, ss_net_profit#2, ss_sold_date_sk#3]
Right output [1]: [d_date_sk#5]
Arguments: [ss_sold_date_sk#3], [d_date_sk#5], Inner, BuildRight

(8) CometProject
Input [4]: [ss_store_sk#1, ss_net_profit#2, ss_sold_date_sk#3, d_date_sk#5]
Arguments: [ss_store_sk#1, ss_net_profit#2], [ss_store_sk#1, ss_net_profit#2]

(9) Scan parquet spark_catalog.default.store
Output [3]: [s_store_sk#8, s_store_name#9, s_zip#10]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_zip)]
ReadSchema: struct<s_store_sk:int,s_store_name:string,s_zip:string>

(10) CometFilter
Input [3]: [s_store_sk#8, s_store_name#9, s_zip#10]
Condition : (isnotnull(s_store_sk#8) AND isnotnull(s_zip#10))

(11) CometBroadcastExchange
Input [3]: [s_store_sk#8, s_store_name#9, s_zip#10]
Arguments: [s_store_sk#8, s_store_name#9, s_zip#10]

(12) CometBroadcastHashJoin
Left output [2]: [ss_store_sk#1, ss_net_profit#2]
Right output [3]: [s_store_sk#8, s_store_name#9, s_zip#10]
Arguments: [ss_store_sk#1], [s_store_sk#8], Inner, BuildRight

(13) CometProject
Input [5]: [ss_store_sk#1, ss_net_profit#2, s_store_sk#8, s_store_name#9, s_zip#10]
Arguments: [ss_net_profit#2, s_store_name#9, s_zip#10], [ss_net_profit#2, s_store_name#9, s_zip#10]

(14) ColumnarToRow [codegen id : 5]
Input [3]: [ss_net_profit#2, s_store_name#9, s_zip#10]

(15) Scan parquet spark_catalog.default.customer_address
Output [1]: [ca_zip#11]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_address]
ReadSchema: struct<ca_zip:string>

(16) CometFilter
Input [1]: [ca_zip#11]
Condition : (substr(ca_zip#11, 1, 5) INSET 10144, 10336, 10390, 10445, 10516, 10567, 11101, 11356, 11376, 11489, 11634, 11928, 12305, 13354, 13375, 13376, 13394, 13595, 13695, 13955, 14060, 14089, 14171, 14328, 14663, 14867, 14922, 15126, 15146, 15371, 15455, 15559, 15723, 15734, 15765, 15798, 15882, 16021, 16725, 16807, 17043, 17183, 17871, 17879, 17920, 18119, 18270, 18376, 18383, 18426, 18652, 18767, 18799, 18840, 18842, 18845, 18906, 19430, 19505, 19512, 19515, 19736, 19769, 19849, 20004, 20260, 20548, 21076, 21195, 21286, 21309, 21337, 21756, 22152, 22245, 22246, 22351, 22437, 22461, 22685, 22744, 22752, 22927, 23006, 23470, 23932, 23968, 24128, 24206, 24317, 24610, 24671, 24676, 24996, 25003, 25103, 25280, 25486, 25631, 25733, 25782, 25858, 25989, 26065, 26105, 26231, 26233, 26653, 26689, 26859, 27068, 27156, 27385, 27700, 28286, 28488, 28545, 28577, 28587, 28709, 28810, 28898, 28915, 29178, 29741, 29839, 30010, 30122, 30431, 30450, 30469, 30625, 30903, 31016, 31029, 31387, 31671, 31880, 32213, 32754, 33123, 33282, 33515, 33786, 34102, 34322, 34425, 35258, 35458, 35474, 35576, 35850, 35942, 36233, 36420, 36446, 36495, 36634, 37125, 37126, 37930, 38122, 38193, 38415, 38607, 38935, 39127, 39192, 39371, 39516, 39736, 39861, 39972, 40081, 40162, 40558, 40604, 41248, 41367, 41368, 41766, 41918, 42029, 42666, 42961, 43285, 43848, 43933, 44165, 44438, 45200, 45266, 45375, 45549, 45692, 45721, 45748, 46081, 46136, 46820, 47305, 47537, 47770, 48033, 48425, 48583, 49130, 49156, 49448, 50016, 50298, 50308, 50412, 51061, 51103, 51200, 51211, 51622, 51649, 51650, 51798, 51949, 52867, 53179, 53268, 53535, 53672, 54364, 54601, 54917, 55253, 55307, 55565, 56240, 56458, 56529, 56571, 56575, 56616, 56691, 56910, 57047, 57647, 57665, 57834, 57855, 58048, 58058, 58078, 58263, 58470, 58943, 59166, 59402, 60099, 60279, 60576, 61265, 61547, 61810, 61860, 62377, 62496, 62878, 62971, 63089, 63193, 63435, 63792, 63837, 63981, 64034, 64147, 64457, 64528, 64544, 65084, 65164, 66162, 66708, 66864, 67030, 67301, 67467, 67473, 67853, 67875, 67897, 68014, 68100, 68101, 68309, 68341, 68621, 68786, 68806, 68880, 68893, 68908, 69035, 69399, 69913, 69952, 70372, 70466, 70738, 71256, 71286, 71791, 71954, 72013, 72151, 72175, 72305, 72325, 72425, 72550, 72823, 73134, 73171, 73241, 73273, 73520, 73650, 74351, 75691, 76107, 76231, 76232, 76614, 76638, 76698, 77191, 77556, 77610, 77721, 78451, 78567, 78668, 78890, 79077, 79777, 79994, 81019, 81096, 81312, 81426, 82136, 82276, 82636, 83041, 83144, 83444, 83849, 83921, 83926, 83933, 84093, 84935, 85816, 86057, 86198, 86284, 86379, 87343, 87501, 87816, 88086, 88190, 88424, 88885, 89091, 89360, 90225, 90257, 90578, 91068, 91110, 91137, 91393, 92712, 94167, 94627, 94898, 94945, 94983, 96451, 96576, 96765, 96888, 96976, 97189, 97789, 98025, 98235, 98294, 98359, 98569, 99076, 99543 AND isnotnull(substr(ca_zip#11, 1, 5)))

(17) CometProject
Input [1]: [ca_zip#11]
Arguments: [ca_zip#12], [substr(ca_zip#11, 1, 5) AS ca_zip#12]

(18) ColumnarToRow [codegen id : 3]
Input [1]: [ca_zip#12]

(19) Scan parquet spark_catalog.default.customer_address
Output [2]: [ca_address_sk#13, ca_zip#14]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_address]
PushedFilters: [IsNotNull(ca_address_sk)]
ReadSchema: struct<ca_address_sk:int,ca_zip:string>

(20) CometFilter
Input [2]: [ca_address_sk#13, ca_zip#14]
Condition : isnotnull(ca_address_sk#13)

(21) Scan parquet spark_catalog.default.customer
Output [2]: [c_current_addr_sk#15, c_preferred_cust_flag#16]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_preferred_cust_flag), EqualTo(c_preferred_cust_flag,Y), IsNotNull(c_current_addr_sk)]
ReadSchema: struct<c_current_addr_sk:int,c_preferred_cust_flag:string>

(22) CometFilter
Input [2]: [c_current_addr_sk#15, c_preferred_cust_flag#16]
Condition : ((isnotnull(c_preferred_cust_flag#16) AND (c_preferred_cust_flag#16 = Y)) AND isnotnull(c_current_addr_sk#15))

(23) CometProject
Input [2]: [c_current_addr_sk#15, c_preferred_cust_flag#16]
Arguments: [c_current_addr_sk#15], [c_current_addr_sk#15]

(24) CometBroadcastExchange
Input [1]: [c_current_addr_sk#15]
Arguments: [c_current_addr_sk#15]

(25) CometBroadcastHashJoin
Left output [2]: [ca_address_sk#13, ca_zip#14]
Right output [1]: [c_current_addr_sk#15]
Arguments: [ca_address_sk#13], [c_current_addr_sk#15], Inner, BuildRight

(26) CometProject
Input [3]: [ca_address_sk#13, ca_zip#14, c_current_addr_sk#15]
Arguments: [ca_zip#14], [ca_zip#14]

(27) CometHashAggregate
Input [1]: [ca_zip#14]
Keys [1]: [ca_zip#14]
Functions [1]: [partial_count(1)]

(28) ColumnarToRow [codegen id : 1]
Input [2]: [ca_zip#14, count#17]

(29) Exchange
Input [2]: [ca_zip#14, count#17]
Arguments: hashpartitioning(ca_zip#14, 5), ENSURE_REQUIREMENTS, [plan_id=1]

(30) HashAggregate [codegen id : 2]
Input [2]: [ca_zip#14, count#17]
Keys [1]: [ca_zip#14]
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#18]
Results [2]: [substr(ca_zip#14, 1, 5) AS ca_zip#19, count(1)#18 AS cnt#20]

(31) Filter [codegen id : 2]
Input [2]: [ca_zip#19, cnt#20]
Condition : (cnt#20 > 10)

(32) Project [codegen id : 2]
Output [1]: [ca_zip#19]
Input [2]: [ca_zip#19, cnt#20]

(33) BroadcastExchange
Input [1]: [ca_zip#19]
Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, string, true], ), isnull(input[0, string, true])),false), [plan_id=2]

(34) BroadcastHashJoin [codegen id : 3]
Left keys [2]: [coalesce(ca_zip#12, ), isnull(ca_zip#12)]
Right keys [2]: [coalesce(ca_zip#19, ), isnull(ca_zip#19)]
Join type: LeftSemi
Join condition: None

(35) HashAggregate [codegen id : 3]
Input [1]: [ca_zip#12]
Keys [1]: [ca_zip#12]
Functions: []
Aggregate Attributes: []
Results [1]: [ca_zip#12]

(36) Exchange
Input [1]: [ca_zip#12]
Arguments: hashpartitioning(ca_zip#12, 5), ENSURE_REQUIREMENTS, [plan_id=3]

(37) HashAggregate [codegen id : 4]
Input [1]: [ca_zip#12]
Keys [1]: [ca_zip#12]
Functions: []
Aggregate Attributes: []
Results [1]: [ca_zip#12]

(38) BroadcastExchange
Input [1]: [ca_zip#12]
Arguments: HashedRelationBroadcastMode(List(substr(input[0, string, true], 1, 2)),false), [plan_id=4]

(39) BroadcastHashJoin [codegen id : 5]
Left keys [1]: [substr(s_zip#10, 1, 2)]
Right keys [1]: [substr(ca_zip#12, 1, 2)]
Join type: Inner
Join condition: None

(40) Project [codegen id : 5]
Output [2]: [ss_net_profit#2, s_store_name#9]
Input [4]: [ss_net_profit#2, s_store_name#9, s_zip#10, ca_zip#12]

(41) HashAggregate [codegen id : 5]
Input [2]: [ss_net_profit#2, s_store_name#9]
Keys [1]: [s_store_name#9]
Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#2))]
Aggregate Attributes [1]: [sum#21]
Results [2]: [s_store_name#9, sum#22]

(42) Exchange
Input [2]: [s_store_name#9, sum#22]
Arguments: hashpartitioning(s_store_name#9, 5), ENSURE_REQUIREMENTS, [plan_id=5]

(43) HashAggregate [codegen id : 6]
Input [2]: [s_store_name#9, sum#22]
Keys [1]: [s_store_name#9]
Functions [1]: [sum(UnscaledValue(ss_net_profit#2))]
Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#23]
Results [2]: [s_store_name#9, MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#23,17,2) AS sum(ss_net_profit)#24]

(44) TakeOrderedAndProject
Input [2]: [s_store_name#9, sum(ss_net_profit)#24]
Arguments: 100, [s_store_name#9 ASC NULLS FIRST], [s_store_name#9, sum(ss_net_profit)#24]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#3 IN dynamicpruning#4
BroadcastExchange (49)
+- * ColumnarToRow (48)
   +- CometProject (47)
      +- CometFilter (46)
         +- CometScan parquet spark_catalog.default.date_dim (45)


(45) Scan parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,2), EqualTo(d_year,1998), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_qoy:int>

(46) CometFilter
Input [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Condition : ((((isnotnull(d_qoy#7) AND isnotnull(d_year#6)) AND (d_qoy#7 = 2)) AND (d_year#6 = 1998)) AND isnotnull(d_date_sk#5))

(47) CometProject
Input [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Arguments: [d_date_sk#5], [d_date_sk#5]

(48) ColumnarToRow [codegen id : 1]
Input [1]: [d_date_sk#5]

(49) BroadcastExchange
Input [1]: [d_date_sk#5]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=6]


