=== Stage 1 ===
SortShuffleWriterExec: partitioning=Hash([p_partkey@0], 16)
  FilterExec: p_size@3 = 15 AND p_type@2 LIKE %BRASS, projection=[p_partkey@0, p_mfgr@1]
    StatsExec: rows=20000000

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

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

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

=== Stage 5 ===
SortShuffleWriterExec: partitioning=Hash([s_nationkey@4], 16)
  ProjectionExec: expr=[p_partkey@0 as p_partkey, p_mfgr@1 as p_mfgr, s_name@5 as s_name, s_address@6 as s_address, s_nationkey@7 as s_nationkey, s_phone@8 as s_phone, s_acctbal@9 as s_acctbal, s_comment@10 as s_comment, ps_supplycost@3 as ps_supplycost]
    SortMergeJoinExec: join_type=Inner, on=[(ps_suppkey@2, s_suppkey@0)]
      SortExec: expr=[ps_suppkey@2 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=3, partitioning: Hash([ps_suppkey@2], 16)
      SortExec: expr=[s_suppkey@0 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=4, partitioning: Hash([s_suppkey@0], 16)

=== Stage 6 ===
SortShuffleWriterExec: partitioning=Hash([n_nationkey@0], 16)
  StatsExec: rows=25

=== Stage 7 ===
SortShuffleWriterExec: partitioning=Hash([n_regionkey@9], 16)
  ProjectionExec: expr=[p_partkey@0 as p_partkey, p_mfgr@1 as p_mfgr, s_name@2 as s_name, s_address@3 as s_address, s_phone@5 as s_phone, s_acctbal@6 as s_acctbal, s_comment@7 as s_comment, ps_supplycost@8 as ps_supplycost, n_name@10 as n_name, n_regionkey@11 as n_regionkey]
    SortMergeJoinExec: join_type=Inner, on=[(s_nationkey@4, n_nationkey@0)]
      SortExec: expr=[s_nationkey@4 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=5, partitioning: Hash([s_nationkey@4], 16)
      SortExec: expr=[n_nationkey@0 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=6, partitioning: Hash([n_nationkey@0], 16)

=== Stage 8 ===
SortShuffleWriterExec: partitioning=Hash([r_regionkey@0], 16)
  FilterExec: r_name@1 = EUROPE, projection=[r_regionkey@0]
    StatsExec: rows=5

=== Stage 9 ===
SortShuffleWriterExec: partitioning=Hash([p_partkey@0, ps_supplycost@7], 16)
  ProjectionExec: expr=[p_partkey@0 as p_partkey, p_mfgr@1 as p_mfgr, s_name@2 as s_name, s_address@3 as s_address, s_phone@4 as s_phone, s_acctbal@5 as s_acctbal, s_comment@6 as s_comment, ps_supplycost@7 as ps_supplycost, n_name@8 as n_name]
    SortMergeJoinExec: join_type=Inner, on=[(n_regionkey@9, r_regionkey@0)]
      SortExec: expr=[n_regionkey@9 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=7, partitioning: Hash([n_regionkey@9], 16)
      SortExec: expr=[r_regionkey@0 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=8, partitioning: Hash([r_regionkey@0], 16)

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

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

=== Stage 12 ===
SortShuffleWriterExec: partitioning=Hash([s_nationkey@2], 16)
  ProjectionExec: expr=[ps_partkey@0 as ps_partkey, ps_supplycost@2 as ps_supplycost, s_nationkey@4 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=10, partitioning: Hash([ps_suppkey@1], 16)
      SortExec: expr=[s_suppkey@0 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=11, partitioning: Hash([s_suppkey@0], 16)

=== Stage 13 ===
SortShuffleWriterExec: partitioning=Hash([n_nationkey@0], 16)
  StatsExec: rows=25

=== Stage 14 ===
SortShuffleWriterExec: partitioning=Hash([n_regionkey@2], 16)
  ProjectionExec: expr=[ps_partkey@0 as ps_partkey, ps_supplycost@1 as ps_supplycost, n_regionkey@4 as n_regionkey]
    SortMergeJoinExec: join_type=Inner, on=[(s_nationkey@2, n_nationkey@0)]
      SortExec: expr=[s_nationkey@2 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=12, partitioning: Hash([s_nationkey@2], 16)
      SortExec: expr=[n_nationkey@0 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=13, partitioning: Hash([n_nationkey@0], 16)

=== Stage 15 ===
SortShuffleWriterExec: partitioning=Hash([r_regionkey@0], 16)
  FilterExec: r_name@1 = EUROPE, projection=[r_regionkey@0]
    StatsExec: rows=5

=== Stage 16 ===
SortShuffleWriterExec: partitioning=Hash([ps_partkey@0], 16)
  AggregateExec: mode=Partial, gby=[ps_partkey@0 as ps_partkey], aggr=[min(partsupp.ps_supplycost)]
    ProjectionExec: expr=[ps_partkey@0 as ps_partkey, ps_supplycost@1 as ps_supplycost]
      SortMergeJoinExec: join_type=Inner, on=[(n_regionkey@2, r_regionkey@0)]
        SortExec: expr=[n_regionkey@2 ASC], preserve_partitioning=[true]
          UnresolvedShuffleExec: stage=14, partitioning: Hash([n_regionkey@2], 16)
        SortExec: expr=[r_regionkey@0 ASC], preserve_partitioning=[true]
          UnresolvedShuffleExec: stage=15, partitioning: Hash([r_regionkey@0], 16)

=== Stage 17 ===
SortShuffleWriterExec: partitioning=Hash([ps_partkey@1, min(partsupp.ps_supplycost)@0], 16)
  ProjectionExec: expr=[min(partsupp.ps_supplycost)@1 as min(partsupp.ps_supplycost), ps_partkey@0 as ps_partkey]
    AggregateExec: mode=FinalPartitioned, gby=[ps_partkey@0 as ps_partkey], aggr=[min(partsupp.ps_supplycost)]
      UnresolvedShuffleExec: stage=16, partitioning: Hash([ps_partkey@0], 16)

=== Stage 18 ===
ShuffleWriterExec: partitioning: None
  SortExec: TopK(fetch=100), expr=[s_acctbal@0 DESC, n_name@2 ASC NULLS LAST, s_name@1 ASC NULLS LAST, p_partkey@3 ASC NULLS LAST], preserve_partitioning=[true]
    ProjectionExec: expr=[s_acctbal@5 as s_acctbal, s_name@2 as s_name, n_name@8 as n_name, p_partkey@0 as p_partkey, p_mfgr@1 as p_mfgr, s_address@3 as s_address, s_phone@4 as s_phone, s_comment@6 as s_comment]
      SortMergeJoinExec: join_type=Inner, on=[(p_partkey@0, ps_partkey@1), (ps_supplycost@7, min(partsupp.ps_supplycost)@0)]
        SortExec: expr=[p_partkey@0 ASC, ps_supplycost@7 ASC], preserve_partitioning=[true]
          UnresolvedShuffleExec: stage=9, partitioning: Hash([p_partkey@0, ps_supplycost@7], 16)
        SortExec: expr=[ps_partkey@1 ASC, min(partsupp.ps_supplycost)@0 ASC], preserve_partitioning=[true]
          UnresolvedShuffleExec: stage=17, partitioning: Hash([ps_partkey@1, min(partsupp.ps_supplycost)@0], 16)

=== Stage 19 ===
ShuffleWriterExec: partitioning: None
  SortPreservingMergeExec: [s_acctbal@0 DESC, n_name@2 ASC NULLS LAST, s_name@1 ASC NULLS LAST, p_partkey@3 ASC NULLS LAST], fetch=100
    UnresolvedShuffleExec: stage=18, partitioning: Hash([p_partkey@3, min(partsupp.ps_supplycost)@9], 16)
