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

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

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

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

=== Stage 5 ===
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 6 ===
SortShuffleWriterExec: partitioning=Hash([ps_partkey@0], 16)
  StatsExec: rows=80000000

=== Stage 7 ===
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=5, partitioning: Hash([p_partkey@0], 16)
      SortExec: expr=[ps_partkey@0 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=6, partitioning: Hash([ps_partkey@0], 16)

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

=== Stage 9 ===
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=7, partitioning: Hash([ps_suppkey@2], 16)
      SortExec: expr=[s_suppkey@0 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=8, partitioning: Hash([s_suppkey@0], 16)

=== Stage 10 ===
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]
    ProjectionExec: expr=[p_partkey@3 as p_partkey, p_mfgr@4 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@11 as ps_supplycost, n_nationkey@0 as n_nationkey, n_name@1 as n_name, n_regionkey@2 as n_regionkey]
      HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(n_nationkey@0, s_nationkey@4)]
        UnresolvedShuffleExec: stage=4, broadcast=true, upstream_partitions: 16
        UnresolvedShuffleExec: stage=9, partitioning: Hash([s_nationkey@4], 16)

=== Stage 11 ===
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]
    ProjectionExec: expr=[p_partkey@1 as p_partkey, p_mfgr@2 as p_mfgr, s_name@3 as s_name, s_address@4 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@9 as n_name, n_regionkey@10 as n_regionkey, r_regionkey@0 as r_regionkey]
      HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(r_regionkey@0, n_regionkey@9)]
        UnresolvedShuffleExec: stage=2, broadcast=true, upstream_partitions: 16
        UnresolvedShuffleExec: stage=10, partitioning: Hash([n_regionkey@9], 16)

=== Stage 12 ===
ShuffleWriterExec: partitioning: None
  UnresolvedShuffleExec: stage=11, partitioning: Hash([p_partkey@0, ps_supplycost@7], 16)

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

=== Stage 14 ===
ShuffleWriterExec: partitioning: None
  UnresolvedShuffleExec: stage=13, partitioning: Hash([r_regionkey@0], 16)

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

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

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

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

=== Stage 19 ===
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=17, partitioning: Hash([ps_suppkey@1], 16)
      SortExec: expr=[s_suppkey@0 ASC], preserve_partitioning=[true]
        UnresolvedShuffleExec: stage=18, partitioning: Hash([s_suppkey@0], 16)

=== Stage 20 ===
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]
    ProjectionExec: expr=[ps_partkey@2 as ps_partkey, ps_supplycost@3 as ps_supplycost, s_nationkey@4 as s_nationkey, n_nationkey@0 as n_nationkey, n_regionkey@1 as n_regionkey]
      HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(n_nationkey@0, s_nationkey@2)]
        UnresolvedShuffleExec: stage=16, broadcast=true, upstream_partitions: 16
        UnresolvedShuffleExec: stage=19, partitioning: Hash([s_nationkey@2], 16)

=== Stage 21 ===
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]
      ProjectionExec: expr=[ps_partkey@1 as ps_partkey, ps_supplycost@2 as ps_supplycost, n_regionkey@3 as n_regionkey, r_regionkey@0 as r_regionkey]
        HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(r_regionkey@0, n_regionkey@2)]
          UnresolvedShuffleExec: stage=14, broadcast=true, upstream_partitions: 16
          UnresolvedShuffleExec: stage=20, partitioning: Hash([n_regionkey@2], 16)

=== Stage 22 ===
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=21, partitioning: Hash([ps_partkey@0], 16)

=== Stage 23 ===
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]
      HashJoinExec: mode=CollectLeft, join_type=Inner, on=[(p_partkey@0, ps_partkey@1), (ps_supplycost@7, min(partsupp.ps_supplycost)@0)]
        UnresolvedShuffleExec: stage=12, broadcast=true, upstream_partitions: 16
        UnresolvedShuffleExec: stage=22, partitioning: Hash([ps_partkey@1, min(partsupp.ps_supplycost)@0], 16)

=== Stage 24 ===
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=23, partitioning: Hash([p_partkey@3, min(partsupp.ps_supplycost)@9], 16)
