== Physical Plan ==
AdaptiveSparkPlan (92)
+- == Final Plan ==
   NativeProject (58)
   +- NativeHashAggregate (57)
      +- InputAdapter (56)
         +- AQEShuffleRead (55)
            +- ShuffleQueryStage (54), Statistics(X)
               +- NativeShuffleExchange (53)
                  +- NativeHashAggregate (52)
                     +- NativeProject (51)
                        +- NativeSortMergeJoin Inner (50)
                           :- NativeSort (41)
                           :  +- InputAdapter (40)
                           :     +- AQEShuffleRead (39)
                           :        +- ShuffleQueryStage (38), Statistics(X)
                           :           +- NativeShuffleExchange (37)
                           :              +- NativeProject (36)
                           :                 +- NativeSortMergeJoin Inner (35)
                           :                    :- NativeSort (25)
                           :                    :  +- InputAdapter (24)
                           :                    :     +- AQEShuffleRead (23)
                           :                    :        +- ShuffleQueryStage (22), Statistics(X)
                           :                    :           +- NativeShuffleExchange (21)
                           :                    :              +- NativeProject (20)
                           :                    :                 +- NativeSortMergeJoin Inner (19)
                           :                    :                    :- NativeSort (9)
                           :                    :                    :  +- InputAdapter (8)
                           :                    :                    :     +- AQEShuffleRead (7)
                           :                    :                    :        +- ShuffleQueryStage (6), Statistics(X)
                           :                    :                    :           +- NativeShuffleExchange (5)
                           :                    :                    :              +- NativeProject (4)
                           :                    :                    :                 +- NativeFilter (3)
                           :                    :                    :                    +- InputAdapter (2)
                           :                    :                    :                       +- NativeParquetScan  (1)
                           :                    :                    +- NativeSort (18)
                           :                    :                       +- InputAdapter (17)
                           :                    :                          +- AQEShuffleRead (16)
                           :                    :                             +- ShuffleQueryStage (15), Statistics(X)
                           :                    :                                +- NativeShuffleExchange (14)
                           :                    :                                   +- NativeProject (13)
                           :                    :                                      +- NativeFilter (12)
                           :                    :                                         +- InputAdapter (11)
                           :                    :                                            +- NativeParquetScan  (10)
                           :                    +- NativeSort (34)
                           :                       +- InputAdapter (33)
                           :                          +- AQEShuffleRead (32)
                           :                             +- ShuffleQueryStage (31), Statistics(X)
                           :                                +- NativeShuffleExchange (30)
                           :                                   +- NativeProject (29)
                           :                                      +- NativeFilter (28)
                           :                                         +- InputAdapter (27)
                           :                                            +- NativeParquetScan  (26)
                           +- NativeSort (49)
                              +- InputAdapter (48)
                                 +- AQEShuffleRead (47)
                                    +- ShuffleQueryStage (46), Statistics(X)
                                       +- NativeShuffleExchange (45)
                                          +- NativeFilter (44)
                                             +- InputAdapter (43)
                                                +- NativeParquetScan  (42)
+- == Initial Plan ==
   TakeOrderedAndProject (91)
   +- HashAggregate (90)
      +- Exchange (89)
         +- HashAggregate (88)
            +- Project (87)
               +- SortMergeJoin Inner (86)
                  :- Sort (81)
                  :  +- Exchange (80)
                  :     +- Project (79)
                  :        +- SortMergeJoin Inner (78)
                  :           :- Sort (72)
                  :           :  +- Exchange (71)
                  :           :     +- Project (70)
                  :           :        +- SortMergeJoin Inner (69)
                  :           :           :- Sort (63)
                  :           :           :  +- Exchange (62)
                  :           :           :     +- Project (61)
                  :           :           :        +- Filter (60)
                  :           :           :           +- Scan parquet (59)
                  :           :           +- Sort (68)
                  :           :              +- Exchange (67)
                  :           :                 +- Project (66)
                  :           :                    +- Filter (65)
                  :           :                       +- Scan parquet (64)
                  :           +- Sort (77)
                  :              +- Exchange (76)
                  :                 +- Project (75)
                  :                    +- Filter (74)
                  :                       +- Scan parquet (73)
                  +- Sort (85)
                     +- Exchange (84)
                        +- Filter (83)
                           +- Scan parquet (82)


(59) Scan parquet
Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, i_manufact_id#5]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(i_current_price), GreaterThanOrEqual(i_current_price,68.00), LessThanOrEqual(i_current_price,98.00), In(i_manufact_id, [677,694,808,940]), IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_item_id:string,i_item_desc:string,i_current_price:decimal(7,2),i_manufact_id:int>

(2) InputAdapter
Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, i_manufact_id#5]
Arguments: [#1, #2, #3, #4, #5]

(3) NativeFilter
Input [5]: [#1#1, #2#2, #3#3, #4#4, #5#5]
Condition : ((((isnotnull(i_current_price#4) AND (i_current_price#4 >= 68.00)) AND (i_current_price#4 <= 98.00)) AND i_manufact_id#5 IN (677,940,694,808)) AND isnotnull(i_item_sk#1))

(4) NativeProject
Output [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Input [5]: [#1#1, #2#2, #3#3, #4#4, #5#5]

(5) NativeShuffleExchange
Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: hashpartitioning(i_item_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=1]

(6) ShuffleQueryStage
Output [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: X

(7) AQEShuffleRead
Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: coalesced

(8) InputAdapter
Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]

(9) NativeSort
Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: [i_item_sk#1 ASC NULLS FIRST], false

(64) Scan parquet
Output [3]: [inv_date_sk#6, inv_item_sk#7, inv_quantity_on_hand#8]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(inv_quantity_on_hand), GreaterThanOrEqual(inv_quantity_on_hand,100), LessThanOrEqual(inv_quantity_on_hand,500), IsNotNull(inv_item_sk), IsNotNull(inv_date_sk)]
ReadSchema: struct<inv_date_sk:int,inv_item_sk:int,inv_quantity_on_hand:int>

(11) InputAdapter
Input [3]: [inv_date_sk#6, inv_item_sk#7, inv_quantity_on_hand#8]
Arguments: [#6, #7, #8]

(12) NativeFilter
Input [3]: [#6#6, #7#7, #8#8]
Condition : ((((isnotnull(inv_quantity_on_hand#8) AND (inv_quantity_on_hand#8 >= 100)) AND (inv_quantity_on_hand#8 <= 500)) AND isnotnull(inv_item_sk#7)) AND isnotnull(inv_date_sk#6))

(13) NativeProject
Output [2]: [inv_date_sk#6, inv_item_sk#7]
Input [3]: [#6#6, #7#7, #8#8]

(14) NativeShuffleExchange
Input [2]: [inv_date_sk#6, inv_item_sk#7]
Arguments: hashpartitioning(inv_item_sk#7, 100), ENSURE_REQUIREMENTS, [plan_id=2]

(15) ShuffleQueryStage
Output [2]: [inv_date_sk#6, inv_item_sk#7]
Arguments: X

(16) AQEShuffleRead
Input [2]: [inv_date_sk#6, inv_item_sk#7]
Arguments: coalesced

(17) InputAdapter
Input [2]: [inv_date_sk#6, inv_item_sk#7]

(18) NativeSort
Input [2]: [inv_date_sk#6, inv_item_sk#7]
Arguments: [inv_item_sk#7 ASC NULLS FIRST], false

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

(20) NativeProject
Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#6]
Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#6, inv_item_sk#7]

(21) NativeShuffleExchange
Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#6]
Arguments: hashpartitioning(inv_date_sk#6, 100), ENSURE_REQUIREMENTS, [plan_id=3]

(22) ShuffleQueryStage
Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#6]
Arguments: X

(23) AQEShuffleRead
Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#6]
Arguments: coalesced

(24) InputAdapter
Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#6]

(25) NativeSort
Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#6]
Arguments: [inv_date_sk#6 ASC NULLS FIRST], false

(73) Scan parquet
Output [2]: [d_date_sk#9, d_date#10]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-02-01), LessThanOrEqual(d_date,2000-04-01), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_date:date>

(27) InputAdapter
Input [2]: [d_date_sk#9, d_date#10]
Arguments: [#9, #10]

(28) NativeFilter
Input [2]: [#9#9, #10#10]
Condition : (((isnotnull(d_date#10) AND (d_date#10 >= 2000-02-01)) AND (d_date#10 <= 2000-04-01)) AND isnotnull(d_date_sk#9))

(29) NativeProject
Output [1]: [d_date_sk#9]
Input [2]: [#9#9, #10#10]

(30) NativeShuffleExchange
Input [1]: [d_date_sk#9]
Arguments: hashpartitioning(d_date_sk#9, 100), ENSURE_REQUIREMENTS, [plan_id=4]

(31) ShuffleQueryStage
Output [1]: [d_date_sk#9]
Arguments: X

(32) AQEShuffleRead
Input [1]: [d_date_sk#9]
Arguments: coalesced

(33) InputAdapter
Input [1]: [d_date_sk#9]

(34) NativeSort
Input [1]: [d_date_sk#9]
Arguments: [d_date_sk#9 ASC NULLS FIRST], false

(35) NativeSortMergeJoin
Left keys [1]: [inv_date_sk#6]
Right keys [1]: [d_date_sk#9]
Join type: Inner
Join condition: None

(36) NativeProject
Output [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#6, d_date_sk#9]

(37) NativeShuffleExchange
Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: hashpartitioning(i_item_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=5]

(38) ShuffleQueryStage
Output [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: X

(39) AQEShuffleRead
Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: coalesced

(40) InputAdapter
Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]

(41) NativeSort
Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: [i_item_sk#1 ASC NULLS FIRST], false

(82) Scan parquet
Output [1]: [cs_item_sk#11]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(cs_item_sk)]
ReadSchema: struct<cs_item_sk:int>

(43) InputAdapter
Input [1]: [cs_item_sk#11]
Arguments: [#11]

(44) NativeFilter
Input [1]: [#11#11]
Condition : isnotnull(cs_item_sk#11)

(45) NativeShuffleExchange
Input [1]: [#11#11]
Arguments: hashpartitioning(cs_item_sk#11, 100), ENSURE_REQUIREMENTS, [plan_id=6]

(46) ShuffleQueryStage
Output [1]: [#11#11]
Arguments: X

(47) AQEShuffleRead
Input [1]: [#11#11]
Arguments: coalesced

(48) InputAdapter
Input [1]: [#11#11]

(49) NativeSort
Input [1]: [#11#11]
Arguments: [cs_item_sk#11 ASC NULLS FIRST], false

(50) NativeSortMergeJoin
Left keys [1]: [i_item_sk#1]
Right keys [1]: [cs_item_sk#11]
Join type: Inner
Join condition: None

(51) NativeProject
Output [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, #11#11]

(52) NativeHashAggregate
Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Keys [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Functions: []
Aggregate Attributes: []
Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]

(53) NativeShuffleExchange
Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: hashpartitioning(i_item_id#2, i_item_desc#3, i_current_price#4, 100), ENSURE_REQUIREMENTS, [plan_id=7]

(54) ShuffleQueryStage
Output [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: X

(55) AQEShuffleRead
Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: coalesced

(56) InputAdapter
Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]

(57) NativeHashAggregate
Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Keys [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Functions: []
Aggregate Attributes: []
Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]

(58) NativeProject
Output [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]

(59) Scan parquet
Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, i_manufact_id#5]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(i_current_price), GreaterThanOrEqual(i_current_price,68.00), LessThanOrEqual(i_current_price,98.00), In(i_manufact_id, [677,694,808,940]), IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_item_id:string,i_item_desc:string,i_current_price:decimal(7,2),i_manufact_id:int>

(60) Filter
Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, i_manufact_id#5]
Condition : ((((isnotnull(i_current_price#4) AND (i_current_price#4 >= 68.00)) AND (i_current_price#4 <= 98.00)) AND i_manufact_id#5 IN (677,940,694,808)) AND isnotnull(i_item_sk#1))

(61) Project
Output [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, i_manufact_id#5]

(62) Exchange
Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: hashpartitioning(i_item_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=8]

(63) Sort
Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: [i_item_sk#1 ASC NULLS FIRST], false, 0

(64) Scan parquet
Output [3]: [inv_date_sk#6, inv_item_sk#7, inv_quantity_on_hand#8]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(inv_quantity_on_hand), GreaterThanOrEqual(inv_quantity_on_hand,100), LessThanOrEqual(inv_quantity_on_hand,500), IsNotNull(inv_item_sk), IsNotNull(inv_date_sk)]
ReadSchema: struct<inv_date_sk:int,inv_item_sk:int,inv_quantity_on_hand:int>

(65) Filter
Input [3]: [inv_date_sk#6, inv_item_sk#7, inv_quantity_on_hand#8]
Condition : ((((isnotnull(inv_quantity_on_hand#8) AND (inv_quantity_on_hand#8 >= 100)) AND (inv_quantity_on_hand#8 <= 500)) AND isnotnull(inv_item_sk#7)) AND isnotnull(inv_date_sk#6))

(66) Project
Output [2]: [inv_date_sk#6, inv_item_sk#7]
Input [3]: [inv_date_sk#6, inv_item_sk#7, inv_quantity_on_hand#8]

(67) Exchange
Input [2]: [inv_date_sk#6, inv_item_sk#7]
Arguments: hashpartitioning(inv_item_sk#7, 100), ENSURE_REQUIREMENTS, [plan_id=9]

(68) Sort
Input [2]: [inv_date_sk#6, inv_item_sk#7]
Arguments: [inv_item_sk#7 ASC NULLS FIRST], false, 0

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

(70) Project
Output [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#6]
Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#6, inv_item_sk#7]

(71) Exchange
Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#6]
Arguments: hashpartitioning(inv_date_sk#6, 100), ENSURE_REQUIREMENTS, [plan_id=10]

(72) Sort
Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#6]
Arguments: [inv_date_sk#6 ASC NULLS FIRST], false, 0

(73) Scan parquet
Output [2]: [d_date_sk#9, d_date#10]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-02-01), LessThanOrEqual(d_date,2000-04-01), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_date:date>

(74) Filter
Input [2]: [d_date_sk#9, d_date#10]
Condition : (((isnotnull(d_date#10) AND (d_date#10 >= 2000-02-01)) AND (d_date#10 <= 2000-04-01)) AND isnotnull(d_date_sk#9))

(75) Project
Output [1]: [d_date_sk#9]
Input [2]: [d_date_sk#9, d_date#10]

(76) Exchange
Input [1]: [d_date_sk#9]
Arguments: hashpartitioning(d_date_sk#9, 100), ENSURE_REQUIREMENTS, [plan_id=11]

(77) Sort
Input [1]: [d_date_sk#9]
Arguments: [d_date_sk#9 ASC NULLS FIRST], false, 0

(78) SortMergeJoin
Left keys [1]: [inv_date_sk#6]
Right keys [1]: [d_date_sk#9]
Join type: Inner
Join condition: None

(79) Project
Output [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Input [6]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, inv_date_sk#6, d_date_sk#9]

(80) Exchange
Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: hashpartitioning(i_item_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=12]

(81) Sort
Input [4]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: [i_item_sk#1 ASC NULLS FIRST], false, 0

(82) Scan parquet
Output [1]: [cs_item_sk#11]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(cs_item_sk)]
ReadSchema: struct<cs_item_sk:int>

(83) Filter
Input [1]: [cs_item_sk#11]
Condition : isnotnull(cs_item_sk#11)

(84) Exchange
Input [1]: [cs_item_sk#11]
Arguments: hashpartitioning(cs_item_sk#11, 100), ENSURE_REQUIREMENTS, [plan_id=13]

(85) Sort
Input [1]: [cs_item_sk#11]
Arguments: [cs_item_sk#11 ASC NULLS FIRST], false, 0

(86) SortMergeJoin
Left keys [1]: [i_item_sk#1]
Right keys [1]: [cs_item_sk#11]
Join type: Inner
Join condition: None

(87) Project
Output [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Input [5]: [i_item_sk#1, i_item_id#2, i_item_desc#3, i_current_price#4, cs_item_sk#11]

(88) HashAggregate
Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Keys [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Functions: []
Aggregate Attributes: []
Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]

(89) Exchange
Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: hashpartitioning(i_item_id#2, i_item_desc#3, i_current_price#4, 100), ENSURE_REQUIREMENTS, [plan_id=14]

(90) HashAggregate
Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Keys [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Functions: []
Aggregate Attributes: []
Results [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]

(91) TakeOrderedAndProject
Input [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: X, [i_item_id#2 ASC NULLS FIRST], [i_item_id#2, i_item_desc#3, i_current_price#4]

(92) AdaptiveSparkPlan
Output [3]: [i_item_id#2, i_item_desc#3, i_current_price#4]
Arguments: isFinalPlan=true

