=== Stage 1 ===
SortShuffleWriterExec: partitioning=Hash([n_nationkey@0], 16)
  FilterExec: n_name@1 = GERMANY, projection=[n_nationkey@0]
    StatsExec: rows=25

=== Stage 2 ===
ShuffleWriterExec: partitioning: None
  UnresolvedShuffleExec: stage=1, partitioning: Hash([n_nationkey@0], 16)

=== Stage 3 ===
SortShuffleWriterExec: partitioning=Hash([ps_suppkey@0], 16)
  StatsExec: rows=80000000

=== Stage 4 ===
SortShuffleWriterExec: partitioning=Hash([s_suppkey@0], 16)
  StatsExec: rows=1000000

=== Stage 5 ===
SortShuffleWriterExec: partitioning=Hash([s_nationkey@2], 16)
  ProjectionExec: expr=[ps_availqty@1 as ps_availqty, ps_supplycost@2 as ps_supplycost, s_nationkey@4 as s_nationkey]
    SortMergeJoinExec: join_type=Inner, on=[(ps_suppkey@0, s_suppkey@0)]
      SortExec: expr=[ps_suppkey@0 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=3, partitioning: Hash([ps_suppkey@0], 16)
      SortExec: expr=[s_suppkey@0 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=4, partitioning: Hash([s_suppkey@0], 16)

=== Stage 6 ===
ShuffleWriterExec: partitioning: None
  AggregateExec: mode=Partial, gby=[], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)]
    ProjectionExec: expr=[ps_availqty@0 as ps_availqty, ps_supplycost@1 as ps_supplycost]
      ProjectionExec: expr=[ps_availqty@1 as ps_availqty, ps_supplycost@2 as ps_supplycost, s_nationkey@3 as s_nationkey, n_nationkey@0 as n_nationkey]
        HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(n_nationkey@0, s_nationkey@2)]
          UnresolvedShuffleExec: stage=2, broadcast=true, upstream_partitions: 16
          UnresolvedShuffleExec: stage=5, partitioning: Hash([s_nationkey@2], 16)

=== Stage 7 ===
SortShuffleWriterExec: partitioning=Hash([n_nationkey@0], 16)
  FilterExec: n_name@1 = GERMANY, projection=[n_nationkey@0]
    StatsExec: rows=25

=== Stage 8 ===
ShuffleWriterExec: partitioning: None
  UnresolvedShuffleExec: stage=7, partitioning: Hash([n_nationkey@0], 16)

=== Stage 9 ===
SortShuffleWriterExec: partitioning=Hash([ps_suppkey@1], 16)
  StatsExec: rows=80000000

=== Stage 10 ===
SortShuffleWriterExec: partitioning=Hash([s_suppkey@0], 16)
  StatsExec: rows=1000000

=== Stage 11 ===
SortShuffleWriterExec: partitioning=Hash([s_nationkey@3], 16)
  ProjectionExec: expr=[ps_partkey@0 as ps_partkey, ps_availqty@2 as ps_availqty, ps_supplycost@3 as ps_supplycost, s_nationkey@5 as s_nationkey]
    SortMergeJoinExec: join_type=Inner, on=[(ps_suppkey@1, s_suppkey@0)]
      SortExec: expr=[ps_suppkey@1 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=9, partitioning: Hash([ps_suppkey@1], 16)
      SortExec: expr=[s_suppkey@0 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=10, partitioning: Hash([s_suppkey@0], 16)

=== Stage 12 ===
SortShuffleWriterExec: partitioning=Hash([ps_partkey@0], 16)
  AggregateExec: mode=Partial, gby=[ps_partkey@0 as ps_partkey], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)]
    ProjectionExec: expr=[ps_partkey@0 as ps_partkey, ps_availqty@1 as ps_availqty, ps_supplycost@2 as ps_supplycost]
      ProjectionExec: expr=[ps_partkey@1 as ps_partkey, ps_availqty@2 as ps_availqty, ps_supplycost@3 as ps_supplycost, s_nationkey@4 as s_nationkey, n_nationkey@0 as n_nationkey]
        HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(n_nationkey@0, s_nationkey@3)]
          UnresolvedShuffleExec: stage=8, broadcast=true, upstream_partitions: 16
          UnresolvedShuffleExec: stage=11, partitioning: Hash([s_nationkey@3], 16)

=== Stage 13 ===
ShuffleWriterExec: partitioning: None
  SortExec: expr=[value@1 DESC], preserve_partitioning=[true]
    ProjectionExec: expr=[ps_partkey@1 as ps_partkey, sum(partsupp.ps_supplycost * partsupp.ps_availqty)@2 as value]
      NestedLoopJoinExec: join_type=Inner, filter=join_proj_push_down_1@1 > sum(partsupp.ps_supplycost * partsupp.ps_availqty) * Float64(0.0001)@0, projection=[sum(partsupp.ps_supplycost * partsupp.ps_availqty) * Float64(0.0001)@0, ps_partkey@1, sum(partsupp.ps_supplycost * partsupp.ps_availqty)@2]
        ProjectionExec: expr=[CAST(CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty)@0 AS Float64) * 0.0001 AS Decimal128(38, 15)) as sum(partsupp.ps_supplycost * partsupp.ps_availqty) * Float64(0.0001)]
          AggregateExec: mode=Final, gby=[], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)]
            CoalescePartitionsExec
              UnresolvedShuffleExec: stage=6, partitioning: Hash([s_nationkey@2], 16)
        ProjectionExec: expr=[ps_partkey@0 as ps_partkey, sum(partsupp.ps_supplycost * partsupp.ps_availqty)@1 as sum(partsupp.ps_supplycost * partsupp.ps_availqty), CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty)@1 AS Decimal128(38, 15)) as join_proj_push_down_1]
          AggregateExec: mode=FinalPartitioned, gby=[ps_partkey@0 as ps_partkey], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)]
            UnresolvedShuffleExec: stage=12, partitioning: Hash([ps_partkey@0], 16)

=== Stage 14 ===
ShuffleWriterExec: partitioning: None
  SortPreservingMergeExec: [value@1 DESC]
    UnresolvedShuffleExec: stage=13, partitioning: Hash([ps_partkey@0], 16)
