== Physical Plan ==
VeloxColumnarToRow (89)
+- TakeOrderedAndProjectExecTransformer (88)
   +- ColumnarUnion (87)
      :- ^ RegularHashAggregateExecTransformer (32)
      :  +- ^ RegularHashAggregateExecTransformer (31)
      :     +- ^ InputIteratorTransformer (30)
      :        +- ColumnarExchange (28)
      :           +- VeloxResizeBatches (27)
      :              +- ^ ProjectExecTransformer (25)
      :                 +- ^ FlushableHashAggregateExecTransformer (24)
      :                    +- ^ ProjectExecTransformer (23)
      :                       +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (22)
      :                          :- ^ ProjectExecTransformer (15)
      :                          :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (14)
      :                          :     :- ^ ProjectExecTransformer (7)
      :                          :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (6)
      :                          :     :     :- ^ FilterExecTransformer (2)
      :                          :     :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.inventory (1)
      :                          :     :     +- ^ InputIteratorTransformer (5)
      :                          :     :        +- ReusedExchange (3)
      :                          :     +- ^ InputIteratorTransformer (13)
      :                          :        +- ColumnarBroadcastExchange (11)
      :                          :           +- ^ FilterExecTransformer (9)
      :                          :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (8)
      :                          +- ^ InputIteratorTransformer (21)
      :                             +- ColumnarBroadcastExchange (19)
      :                                +- ^ FilterExecTransformer (17)
      :                                   +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.warehouse (16)
      :- ^ ProjectExecTransformer (47)
      :  +- ^ RegularHashAggregateExecTransformer (46)
      :     +- ^ InputIteratorTransformer (45)
      :        +- ColumnarExchange (43)
      :           +- VeloxResizeBatches (42)
      :              +- ^ ProjectExecTransformer (40)
      :                 +- ^ FlushableHashAggregateExecTransformer (39)
      :                    +- ^ ProjectExecTransformer (38)
      :                       +- ^ RegularHashAggregateExecTransformer (37)
      :                          +- ^ InputIteratorTransformer (36)
      :                             +- ReusedExchange (34)
      :- ^ ProjectExecTransformer (62)
      :  +- ^ RegularHashAggregateExecTransformer (61)
      :     +- ^ InputIteratorTransformer (60)
      :        +- ColumnarExchange (58)
      :           +- VeloxResizeBatches (57)
      :              +- ^ ProjectExecTransformer (55)
      :                 +- ^ FlushableHashAggregateExecTransformer (54)
      :                    +- ^ ProjectExecTransformer (53)
      :                       +- ^ RegularHashAggregateExecTransformer (52)
      :                          +- ^ InputIteratorTransformer (51)
      :                             +- ReusedExchange (49)
      :- ^ ProjectExecTransformer (77)
      :  +- ^ RegularHashAggregateExecTransformer (76)
      :     +- ^ InputIteratorTransformer (75)
      :        +- ColumnarExchange (73)
      :           +- VeloxResizeBatches (72)
      :              +- ^ ProjectExecTransformer (70)
      :                 +- ^ FlushableHashAggregateExecTransformer (69)
      :                    +- ^ ProjectExecTransformer (68)
      :                       +- ^ RegularHashAggregateExecTransformer (67)
      :                          +- ^ InputIteratorTransformer (66)
      :                             +- ReusedExchange (64)
      +- ^ ProjectExecTransformer (85)
         +- ^ RegularHashAggregateExecTransformer (84)
            +- ^ ProjectExecTransformer (83)
               +- ^ RegularHashAggregateExecTransformer (82)
                  +- ^ InputIteratorTransformer (81)
                     +- ReusedExchange (79)


(1) FileSourceScanExecTransformer parquet spark_catalog.default.inventory
Output [4]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(inv_date_sk#4), dynamicpruningexpression(inv_date_sk#4 IN dynamicpruning#5)]
PushedFilters: [IsNotNull(inv_item_sk), IsNotNull(inv_warehouse_sk)]
ReadSchema: struct<inv_item_sk:int,inv_warehouse_sk:int,inv_quantity_on_hand:int>

(2) FilterExecTransformer
Input [4]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4]
Arguments: (isnotnull(inv_item_sk#1) AND isnotnull(inv_warehouse_sk#2))

(3) ReusedExchange [Reuses operator id: 94]
Output [1]: [d_date_sk#6]

(4) InputAdapter
Input [1]: [d_date_sk#6]

(5) InputIteratorTransformer
Input [1]: [d_date_sk#6]

(6) BroadcastHashJoinExecTransformer
Left keys [1]: [inv_date_sk#4]
Right keys [1]: [d_date_sk#6]
Join type: Inner
Join condition: None

(7) ProjectExecTransformer
Output [3]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3]
Input [5]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, d_date_sk#6]

(8) FileSourceScanExecTransformer parquet spark_catalog.default.item
Output [5]: [i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_brand:string,i_class:string,i_category:string,i_product_name:string>

(9) FilterExecTransformer
Input [5]: [i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11]
Arguments: isnotnull(i_item_sk#7)

(10) WholeStageCodegenTransformer (3)
Input [5]: [i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11]
Arguments: false

(11) ColumnarBroadcastExchange
Input [5]: [i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1]

(12) InputAdapter
Input [5]: [i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11]

(13) InputIteratorTransformer
Input [5]: [i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11]

(14) BroadcastHashJoinExecTransformer
Left keys [1]: [inv_item_sk#1]
Right keys [1]: [i_item_sk#7]
Join type: Inner
Join condition: None

(15) ProjectExecTransformer
Output [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, i_brand#8, i_class#9, i_category#10, i_product_name#11]
Input [8]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, i_item_sk#7, i_brand#8, i_class#9, i_category#10, i_product_name#11]

(16) FileSourceScanExecTransformer parquet spark_catalog.default.warehouse
Output [1]: [w_warehouse_sk#12]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/warehouse]
PushedFilters: [IsNotNull(w_warehouse_sk)]
ReadSchema: struct<w_warehouse_sk:int>

(17) FilterExecTransformer
Input [1]: [w_warehouse_sk#12]
Arguments: isnotnull(w_warehouse_sk#12)

(18) WholeStageCodegenTransformer (4)
Input [1]: [w_warehouse_sk#12]
Arguments: false

(19) ColumnarBroadcastExchange
Input [1]: [w_warehouse_sk#12]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2]

(20) InputAdapter
Input [1]: [w_warehouse_sk#12]

(21) InputIteratorTransformer
Input [1]: [w_warehouse_sk#12]

(22) BroadcastHashJoinExecTransformer
Left keys [1]: [inv_warehouse_sk#2]
Right keys [1]: [w_warehouse_sk#12]
Join type: Inner
Join condition: None

(23) ProjectExecTransformer
Output [5]: [inv_quantity_on_hand#3, i_brand#8, i_class#9, i_category#10, i_product_name#11]
Input [7]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, i_brand#8, i_class#9, i_category#10, i_product_name#11, w_warehouse_sk#12]

(24) FlushableHashAggregateExecTransformer
Input [5]: [inv_quantity_on_hand#3, i_brand#8, i_class#9, i_category#10, i_product_name#11]
Keys [4]: [i_product_name#11, i_brand#8, i_class#9, i_category#10]
Functions [1]: [partial_avg(inv_quantity_on_hand#3)]
Aggregate Attributes [2]: [sum#13, count#14]
Results [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16]

(25) ProjectExecTransformer
Output [7]: [hash(i_product_name#11, i_brand#8, i_class#9, i_category#10, 42) AS hash_partition_key#17, i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16]
Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16]

(26) WholeStageCodegenTransformer (5)
Input [7]: [hash_partition_key#17, i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16]
Arguments: false

(27) VeloxResizeBatches
Input [7]: [hash_partition_key#17, i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16]
Arguments: 1024, 2147483647, 10485760

(28) ColumnarExchange
Input [7]: [hash_partition_key#17, i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16]
Arguments: hashpartitioning(i_product_name#11, i_brand#8, i_class#9, i_category#10, 1), ENSURE_REQUIREMENTS, [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16], [plan_id=3], [shuffle_writer_type=hash]

(29) InputAdapter
Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16]

(30) InputIteratorTransformer
Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16]

(31) RegularHashAggregateExecTransformer
Input [6]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, sum#15, count#16]
Keys [4]: [i_product_name#11, i_brand#8, i_class#9, i_category#10]
Functions [1]: [avg(inv_quantity_on_hand#3)]
Aggregate Attributes [1]: [avg(inv_quantity_on_hand#3)#18]
Results [5]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, avg(inv_quantity_on_hand#3)#18 AS qoh#19]

(32) RegularHashAggregateExecTransformer
Input [5]: [i_product_name#11, i_brand#8, i_class#9, i_category#10, qoh#19]
Keys [4]: [i_product_name#11, i_brand#8, i_class#9, i_category#10]
Functions [1]: [avg(qoh#19)]
Aggregate Attributes [1]: [avg(qoh#19)#20]
Results [5]: [i_product_name#11 AS i_product_name#21, i_brand#8 AS i_brand#22, i_class#9 AS i_class#23, i_category#10 AS i_category#24, avg(qoh#19)#20 AS qoh#25]

(33) WholeStageCodegenTransformer (6)
Input [5]: [i_product_name#21, i_brand#22, i_class#23, i_category#24, qoh#25]
Arguments: false

(34) ReusedExchange [Reuses operator id: 28]
Output [6]: [i_product_name#26, i_brand#27, i_class#28, i_category#29, sum#30, count#31]

(35) InputAdapter
Input [6]: [i_product_name#26, i_brand#27, i_class#28, i_category#29, sum#30, count#31]

(36) InputIteratorTransformer
Input [6]: [i_product_name#26, i_brand#27, i_class#28, i_category#29, sum#30, count#31]

(37) RegularHashAggregateExecTransformer
Input [6]: [i_product_name#26, i_brand#27, i_class#28, i_category#29, sum#30, count#31]
Keys [4]: [i_product_name#26, i_brand#27, i_class#28, i_category#29]
Functions [1]: [avg(inv_quantity_on_hand#32)]
Aggregate Attributes [1]: [avg(inv_quantity_on_hand#32)#18]
Results [5]: [i_product_name#26, i_brand#27, i_class#28, i_category#29, avg(inv_quantity_on_hand#32)#18]

(38) ProjectExecTransformer
Output [4]: [i_product_name#26, i_brand#27, i_class#28, avg(inv_quantity_on_hand#32)#18 AS qoh#33]
Input [5]: [i_product_name#26, i_brand#27, i_class#28, i_category#29, avg(inv_quantity_on_hand#32)#18]

(39) FlushableHashAggregateExecTransformer
Input [4]: [i_product_name#26, i_brand#27, i_class#28, qoh#33]
Keys [3]: [i_product_name#26, i_brand#27, i_class#28]
Functions [1]: [partial_avg(qoh#33)]
Aggregate Attributes [2]: [sum#34, count#35]
Results [5]: [i_product_name#26, i_brand#27, i_class#28, sum#36, count#37]

(40) ProjectExecTransformer
Output [6]: [hash(i_product_name#26, i_brand#27, i_class#28, 42) AS hash_partition_key#38, i_product_name#26, i_brand#27, i_class#28, sum#36, count#37]
Input [5]: [i_product_name#26, i_brand#27, i_class#28, sum#36, count#37]

(41) WholeStageCodegenTransformer (12)
Input [6]: [hash_partition_key#38, i_product_name#26, i_brand#27, i_class#28, sum#36, count#37]
Arguments: false

(42) VeloxResizeBatches
Input [6]: [hash_partition_key#38, i_product_name#26, i_brand#27, i_class#28, sum#36, count#37]
Arguments: 1024, 2147483647, 10485760

(43) ColumnarExchange
Input [6]: [hash_partition_key#38, i_product_name#26, i_brand#27, i_class#28, sum#36, count#37]
Arguments: hashpartitioning(i_product_name#26, i_brand#27, i_class#28, 1), ENSURE_REQUIREMENTS, [i_product_name#26, i_brand#27, i_class#28, sum#36, count#37], [plan_id=4], [shuffle_writer_type=hash]

(44) InputAdapter
Input [5]: [i_product_name#26, i_brand#27, i_class#28, sum#36, count#37]

(45) InputIteratorTransformer
Input [5]: [i_product_name#26, i_brand#27, i_class#28, sum#36, count#37]

(46) RegularHashAggregateExecTransformer
Input [5]: [i_product_name#26, i_brand#27, i_class#28, sum#36, count#37]
Keys [3]: [i_product_name#26, i_brand#27, i_class#28]
Functions [1]: [avg(qoh#33)]
Aggregate Attributes [1]: [avg(qoh#33)#39]
Results [4]: [i_product_name#26, i_brand#27, i_class#28, avg(qoh#33)#39]

(47) ProjectExecTransformer
Output [5]: [i_product_name#26, i_brand#27, i_class#28, null AS i_category#40, avg(qoh#33)#39 AS qoh#41]
Input [4]: [i_product_name#26, i_brand#27, i_class#28, avg(qoh#33)#39]

(48) WholeStageCodegenTransformer (13)
Input [5]: [i_product_name#26, i_brand#27, i_class#28, i_category#40, qoh#41]
Arguments: false

(49) ReusedExchange [Reuses operator id: 28]
Output [6]: [i_product_name#42, i_brand#43, i_class#44, i_category#45, sum#46, count#47]

(50) InputAdapter
Input [6]: [i_product_name#42, i_brand#43, i_class#44, i_category#45, sum#46, count#47]

(51) InputIteratorTransformer
Input [6]: [i_product_name#42, i_brand#43, i_class#44, i_category#45, sum#46, count#47]

(52) RegularHashAggregateExecTransformer
Input [6]: [i_product_name#42, i_brand#43, i_class#44, i_category#45, sum#46, count#47]
Keys [4]: [i_product_name#42, i_brand#43, i_class#44, i_category#45]
Functions [1]: [avg(inv_quantity_on_hand#48)]
Aggregate Attributes [1]: [avg(inv_quantity_on_hand#48)#18]
Results [5]: [i_product_name#42, i_brand#43, i_class#44, i_category#45, avg(inv_quantity_on_hand#48)#18]

(53) ProjectExecTransformer
Output [3]: [i_product_name#42, i_brand#43, avg(inv_quantity_on_hand#48)#18 AS qoh#49]
Input [5]: [i_product_name#42, i_brand#43, i_class#44, i_category#45, avg(inv_quantity_on_hand#48)#18]

(54) FlushableHashAggregateExecTransformer
Input [3]: [i_product_name#42, i_brand#43, qoh#49]
Keys [2]: [i_product_name#42, i_brand#43]
Functions [1]: [partial_avg(qoh#49)]
Aggregate Attributes [2]: [sum#50, count#51]
Results [4]: [i_product_name#42, i_brand#43, sum#52, count#53]

(55) ProjectExecTransformer
Output [5]: [hash(i_product_name#42, i_brand#43, 42) AS hash_partition_key#54, i_product_name#42, i_brand#43, sum#52, count#53]
Input [4]: [i_product_name#42, i_brand#43, sum#52, count#53]

(56) WholeStageCodegenTransformer (19)
Input [5]: [hash_partition_key#54, i_product_name#42, i_brand#43, sum#52, count#53]
Arguments: false

(57) VeloxResizeBatches
Input [5]: [hash_partition_key#54, i_product_name#42, i_brand#43, sum#52, count#53]
Arguments: 1024, 2147483647, 10485760

(58) ColumnarExchange
Input [5]: [hash_partition_key#54, i_product_name#42, i_brand#43, sum#52, count#53]
Arguments: hashpartitioning(i_product_name#42, i_brand#43, 1), ENSURE_REQUIREMENTS, [i_product_name#42, i_brand#43, sum#52, count#53], [plan_id=5], [shuffle_writer_type=hash]

(59) InputAdapter
Input [4]: [i_product_name#42, i_brand#43, sum#52, count#53]

(60) InputIteratorTransformer
Input [4]: [i_product_name#42, i_brand#43, sum#52, count#53]

(61) RegularHashAggregateExecTransformer
Input [4]: [i_product_name#42, i_brand#43, sum#52, count#53]
Keys [2]: [i_product_name#42, i_brand#43]
Functions [1]: [avg(qoh#49)]
Aggregate Attributes [1]: [avg(qoh#49)#55]
Results [3]: [i_product_name#42, i_brand#43, avg(qoh#49)#55]

(62) ProjectExecTransformer
Output [5]: [i_product_name#42, i_brand#43, null AS i_class#56, null AS i_category#57, avg(qoh#49)#55 AS qoh#58]
Input [3]: [i_product_name#42, i_brand#43, avg(qoh#49)#55]

(63) WholeStageCodegenTransformer (20)
Input [5]: [i_product_name#42, i_brand#43, i_class#56, i_category#57, qoh#58]
Arguments: false

(64) ReusedExchange [Reuses operator id: 28]
Output [6]: [i_product_name#59, i_brand#60, i_class#61, i_category#62, sum#63, count#64]

(65) InputAdapter
Input [6]: [i_product_name#59, i_brand#60, i_class#61, i_category#62, sum#63, count#64]

(66) InputIteratorTransformer
Input [6]: [i_product_name#59, i_brand#60, i_class#61, i_category#62, sum#63, count#64]

(67) RegularHashAggregateExecTransformer
Input [6]: [i_product_name#59, i_brand#60, i_class#61, i_category#62, sum#63, count#64]
Keys [4]: [i_product_name#59, i_brand#60, i_class#61, i_category#62]
Functions [1]: [avg(inv_quantity_on_hand#65)]
Aggregate Attributes [1]: [avg(inv_quantity_on_hand#65)#18]
Results [5]: [i_product_name#59, i_brand#60, i_class#61, i_category#62, avg(inv_quantity_on_hand#65)#18]

(68) ProjectExecTransformer
Output [2]: [i_product_name#59, avg(inv_quantity_on_hand#65)#18 AS qoh#66]
Input [5]: [i_product_name#59, i_brand#60, i_class#61, i_category#62, avg(inv_quantity_on_hand#65)#18]

(69) FlushableHashAggregateExecTransformer
Input [2]: [i_product_name#59, qoh#66]
Keys [1]: [i_product_name#59]
Functions [1]: [partial_avg(qoh#66)]
Aggregate Attributes [2]: [sum#67, count#68]
Results [3]: [i_product_name#59, sum#69, count#70]

(70) ProjectExecTransformer
Output [4]: [hash(i_product_name#59, 42) AS hash_partition_key#71, i_product_name#59, sum#69, count#70]
Input [3]: [i_product_name#59, sum#69, count#70]

(71) WholeStageCodegenTransformer (26)
Input [4]: [hash_partition_key#71, i_product_name#59, sum#69, count#70]
Arguments: false

(72) VeloxResizeBatches
Input [4]: [hash_partition_key#71, i_product_name#59, sum#69, count#70]
Arguments: 1024, 2147483647, 10485760

(73) ColumnarExchange
Input [4]: [hash_partition_key#71, i_product_name#59, sum#69, count#70]
Arguments: hashpartitioning(i_product_name#59, 1), ENSURE_REQUIREMENTS, [i_product_name#59, sum#69, count#70], [plan_id=6], [shuffle_writer_type=hash]

(74) InputAdapter
Input [3]: [i_product_name#59, sum#69, count#70]

(75) InputIteratorTransformer
Input [3]: [i_product_name#59, sum#69, count#70]

(76) RegularHashAggregateExecTransformer
Input [3]: [i_product_name#59, sum#69, count#70]
Keys [1]: [i_product_name#59]
Functions [1]: [avg(qoh#66)]
Aggregate Attributes [1]: [avg(qoh#66)#72]
Results [2]: [i_product_name#59, avg(qoh#66)#72]

(77) ProjectExecTransformer
Output [5]: [i_product_name#59, null AS i_brand#73, null AS i_class#74, null AS i_category#75, avg(qoh#66)#72 AS qoh#76]
Input [2]: [i_product_name#59, avg(qoh#66)#72]

(78) WholeStageCodegenTransformer (27)
Input [5]: [i_product_name#59, i_brand#73, i_class#74, i_category#75, qoh#76]
Arguments: false

(79) ReusedExchange [Reuses operator id: 28]
Output [6]: [i_product_name#77, i_brand#78, i_class#79, i_category#80, sum#81, count#82]

(80) InputAdapter
Input [6]: [i_product_name#77, i_brand#78, i_class#79, i_category#80, sum#81, count#82]

(81) InputIteratorTransformer
Input [6]: [i_product_name#77, i_brand#78, i_class#79, i_category#80, sum#81, count#82]

(82) RegularHashAggregateExecTransformer
Input [6]: [i_product_name#77, i_brand#78, i_class#79, i_category#80, sum#81, count#82]
Keys [4]: [i_product_name#77, i_brand#78, i_class#79, i_category#80]
Functions [1]: [avg(inv_quantity_on_hand#83)]
Aggregate Attributes [1]: [avg(inv_quantity_on_hand#83)#18]
Results [5]: [i_product_name#77, i_brand#78, i_class#79, i_category#80, avg(inv_quantity_on_hand#83)#18]

(83) ProjectExecTransformer
Output [1]: [avg(inv_quantity_on_hand#83)#18 AS qoh#84]
Input [5]: [i_product_name#77, i_brand#78, i_class#79, i_category#80, avg(inv_quantity_on_hand#83)#18]

(84) RegularHashAggregateExecTransformer
Input [1]: [qoh#84]
Keys: []
Functions [1]: [avg(qoh#84)]
Aggregate Attributes [1]: [avg(qoh#84)#85]
Results [1]: [avg(qoh#84)#85]

(85) ProjectExecTransformer
Output [5]: [null AS i_product_name#86, null AS i_brand#87, null AS i_class#88, null AS i_category#89, avg(qoh#84)#85 AS qoh#90]
Input [1]: [avg(qoh#84)#85]

(86) WholeStageCodegenTransformer (33)
Input [5]: [i_product_name#86, i_brand#87, i_class#88, i_category#89, qoh#90]
Arguments: false

(87) ColumnarUnion
Arguments: UnknownPartitioning(0)

(88) TakeOrderedAndProjectExecTransformer
Input [5]: [i_product_name#21, i_brand#22, i_class#23, i_category#24, qoh#25]
Arguments: 100, [qoh#25 ASC NULLS FIRST, i_product_name#21 ASC NULLS FIRST, i_brand#22 ASC NULLS FIRST, i_class#23 ASC NULLS FIRST, i_category#24 ASC NULLS FIRST], [i_product_name#21, i_brand#22, i_class#23, i_category#24, qoh#25], 0

(89) VeloxColumnarToRow
Input [5]: [i_product_name#21, i_brand#22, i_class#23, i_category#24, qoh#25]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = inv_date_sk#4 IN dynamicpruning#5
ColumnarBroadcastExchange (94)
+- ^ ProjectExecTransformer (92)
   +- ^ FilterExecTransformer (91)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (90)


(90) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#6, d_month_seq#91]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_month_seq:int>

(91) FilterExecTransformer
Input [2]: [d_date_sk#6, d_month_seq#91]
Arguments: (((isnotnull(d_month_seq#91) AND (d_month_seq#91 >= 1212)) AND (d_month_seq#91 <= 1223)) AND isnotnull(d_date_sk#6))

(92) ProjectExecTransformer
Output [1]: [d_date_sk#6]
Input [2]: [d_date_sk#6, d_month_seq#91]

(93) WholeStageCodegenTransformer (1)
Input [1]: [d_date_sk#6]
Arguments: false

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


