=== Stage 1 ===
SortShuffleWriterExec: partitioning=Hash([s_suppkey@0], 16)
  FilterExec: s_comment@1 LIKE %Customer%Complaints%, projection=[s_suppkey@0]
    StatsExec: rows=1000000

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

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

=== Stage 4 ===
SortShuffleWriterExec: partitioning=Hash([p_partkey@0], 16)
  FilterExec: p_brand@1 != Brand#45 AND p_type@2 NOT LIKE MEDIUM POLISHED% AND p_size@3 IN (SET) ([49, 14, 23, 45, 19, 3, 36, 9])
    StatsExec: rows=20000000

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

=== Stage 6 ===
SortShuffleWriterExec: partitioning=Hash([p_brand@0, p_type@1, p_size@2], 16)
  AggregateExec: mode=Partial, gby=[p_brand@0 as p_brand, p_type@1 as p_type, p_size@2 as p_size], aggr=[count(alias1)]
    AggregateExec: mode=SinglePartitioned, gby=[p_brand@1 as p_brand, p_type@2 as p_type, p_size@3 as p_size, ps_suppkey@0 as alias1], aggr=[]
      HashJoinExec: mode=CollectLeft, join_type=RightAnti, on=[(s_suppkey@0, ps_suppkey@0)]
        UnresolvedShuffleExec: stage=2, broadcast=true, upstream_partitions: 16
        UnresolvedShuffleExec: stage=5, partitioning: Hash([ps_suppkey@0], 16)

=== Stage 7 ===
ShuffleWriterExec: partitioning: None
  SortExec: expr=[supplier_cnt@3 DESC, p_brand@0 ASC NULLS LAST, p_type@1 ASC NULLS LAST, p_size@2 ASC NULLS LAST], preserve_partitioning=[true]
    ProjectionExec: expr=[p_brand@0 as p_brand, p_type@1 as p_type, p_size@2 as p_size, count(alias1)@3 as supplier_cnt]
      AggregateExec: mode=FinalPartitioned, gby=[p_brand@0 as p_brand, p_type@1 as p_type, p_size@2 as p_size], aggr=[count(alias1)]
        UnresolvedShuffleExec: stage=6, partitioning: Hash([p_brand@0, p_type@1, p_size@2], 16)

=== Stage 8 ===
ShuffleWriterExec: partitioning: None
  SortPreservingMergeExec: [supplier_cnt@3 DESC, p_brand@0 ASC NULLS LAST, p_type@1 ASC NULLS LAST, p_size@2 ASC NULLS LAST]
    UnresolvedShuffleExec: stage=7, partitioning: Hash([p_brand@0, p_type@1, p_size@2], 16)
