write [%0->$$17, %0->$$18]
-- SINK_WRITE  |PARTITIONED|
  project ([$$17, $$18])
  -- STREAM_PROJECT  |PARTITIONED|
    exchange 
    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
      group by ([$$17 := %0->$$21]) decor ([]) {
                aggregate [$$18] <- [function-call: hive:sum(FINAL), Args:[%0->$$20]]
                -- AGGREGATE  |LOCAL|
                  nested tuple source
                  -- NESTED_TUPLE_SOURCE  |LOCAL|
             }
      -- PRE_CLUSTERED_GROUP_BY[$$21]  |PARTITIONED|
        exchange 
        -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$21(ASC)] HASH:[$$21]  |PARTITIONED|
          group by ([$$21 := %0->$$1]) decor ([]) {
                    aggregate [$$20] <- [function-call: hive:sum(PARTIAL1), Args:[function-call: hive:org.apache.hadoop.hive.ql.udf.UDFOPMultiply, Args:[%0->$$4, %0->$$3]]]
                    -- AGGREGATE  |LOCAL|
                      nested tuple source
                      -- NESTED_TUPLE_SOURCE  |LOCAL|
                 }
          -- SORT_GROUP_BY[$$1]  |PARTITIONED|
            exchange 
            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
              project ([$$1, $$3, $$4])
              -- STREAM_PROJECT  |PARTITIONED|
                exchange 
                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                  join (function-call: algebricks:eq, Args:[%0->$$2, %0->$$6])
                  -- HYBRID_HASH_JOIN [$$2][$$6]  |PARTITIONED|
                    exchange 
                    -- HASH_PARTITION_EXCHANGE [$$2]  |PARTITIONED|
                      data-scan [$$2, $$1, $$3, $$4]<-[$$1, $$2, $$3, $$4, $$5] <- default.partsupp
                      -- DATASOURCE_SCAN  |PARTITIONED|
                        exchange 
                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                          empty-tuple-source
                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                    exchange 
                    -- HASH_PARTITION_EXCHANGE [$$6]  |PARTITIONED|
                      project ([$$6])
                      -- STREAM_PROJECT  |PARTITIONED|
                        exchange 
                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                          join (function-call: algebricks:eq, Args:[%0->$$9, %0->$$13])
                          -- HYBRID_HASH_JOIN [$$9][$$13]  |PARTITIONED|
                            exchange 
                            -- HASH_PARTITION_EXCHANGE [$$9]  |PARTITIONED|
                              data-scan [$$9, $$6]<-[$$6, $$7, $$8, $$9, $$10, $$11, $$12] <- default.supplier
                              -- DATASOURCE_SCAN  |PARTITIONED|
                                exchange 
                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                  empty-tuple-source
                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                            exchange 
                            -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
                              project ([$$13])
                              -- STREAM_PROJECT  |PARTITIONED|
                                select (function-call: algebricks:eq, Args:[%0->$$14, GERMANY])
                                -- STREAM_SELECT  |PARTITIONED|
                                  exchange 
                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                    data-scan [$$13, $$14]<-[$$13, $$14, $$15, $$16] <- default.nation
                                    -- DATASOURCE_SCAN  |PARTITIONED|
                                      exchange 
                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                        empty-tuple-source
                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
write [%0->$$3]
-- SINK_WRITE  |PARTITIONED|
  exchange 
  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
    group by ([]) decor ([]) {
              aggregate [$$3] <- [function-call: hive:sum(FINAL), Args:[%0->$$5]]
              -- AGGREGATE  |LOCAL|
                nested tuple source
                -- NESTED_TUPLE_SOURCE  |LOCAL|
           }
    -- PRE_CLUSTERED_GROUP_BY[]  |PARTITIONED|
      exchange 
      -- HASH_PARTITION_EXCHANGE []  |PARTITIONED|
        group by ([]) decor ([]) {
                  aggregate [$$5] <- [function-call: hive:sum(PARTIAL1), Args:[%0->$$2]]
                  -- AGGREGATE  |LOCAL|
                    nested tuple source
                    -- NESTED_TUPLE_SOURCE  |LOCAL|
               }
        -- PRE_CLUSTERED_GROUP_BY[]  |PARTITIONED|
          exchange 
          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
            data-scan [$$2]<-[$$1, $$2] <- default.q11_part_tmp
            -- DATASOURCE_SCAN  |PARTITIONED|
              exchange 
              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                empty-tuple-source
                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
write [%0->$$2, %0->$$3]
-- SINK_WRITE  |PARTITIONED|
  exchange 
  -- SORT_MERGE_EXCHANGE [$$3(DESC) ]  |PARTITIONED|
    order (DESC, %0->$$3) 
    -- STABLE_SORT [$$3(DESC)]  |PARTITIONED|
      exchange 
      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
        project ([$$2, $$3])
        -- STREAM_PROJECT  |PARTITIONED|
          exchange 
          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
            join (function-call: algebricks:and, Args:[function-call: algebricks:gt, Args:[%0->$$3, function-call: hive:org.apache.hadoop.hive.ql.udf.UDFOPMultiply, Args:[%0->$$1, 1.0E-4]], true])
            -- NESTED_LOOP  |PARTITIONED|
              exchange 
              -- BROADCAST_EXCHANGE  |PARTITIONED|
                data-scan []<-[$$1] <- default.q11_sum_tmp
                -- DATASOURCE_SCAN  |PARTITIONED|
                  exchange 
                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                    empty-tuple-source
                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
              exchange 
              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                data-scan [$$2, $$3]<-[$$2, $$3] <- default.q11_part_tmp
                -- DATASOURCE_SCAN  |PARTITIONED|
                  exchange 
                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                    empty-tuple-source
                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
