WholeStageCodegen (10)
  Project [amc,pmc]
    BroadcastNestedLoopJoin
      HashAggregate [count] [count(1),amc,count]
        InputAdapter
          Exchange #1
            WholeStageCodegen (4)
              HashAggregate [count,count]
                Project
                  BroadcastHashJoin [ws_sold_time_sk,t_time_sk]
                    Project [ws_sold_time_sk]
                      BroadcastHashJoin [ws_ship_hdemo_sk,hd_demo_sk]
                        Project [ws_sold_time_sk,ws_ship_hdemo_sk]
                          BroadcastHashJoin [ws_web_page_sk,wp_web_page_sk]
                            Project [ws_sold_time_sk,ws_ship_hdemo_sk,ws_web_page_sk]
                              Filter [ws_ship_hdemo_sk,ws_sold_time_sk,ws_web_page_sk]
                                ColumnarToRow
                                  InputAdapter
                                    Scan parquet spark_catalog.default.web_sales [ws_sold_time_sk,ws_ship_hdemo_sk,ws_web_page_sk,ws_sold_date_sk]
                            InputAdapter
                              BroadcastExchange #2
                                WholeStageCodegen (1)
                                  Project [wp_web_page_sk]
                                    Filter [wp_char_count,wp_web_page_sk]
                                      ColumnarToRow
                                        InputAdapter
                                          Scan parquet spark_catalog.default.web_page [wp_web_page_sk,wp_char_count]
                        InputAdapter
                          BroadcastExchange #3
                            WholeStageCodegen (2)
                              Project [hd_demo_sk]
                                Filter [hd_dep_count,hd_demo_sk]
                                  ColumnarToRow
                                    InputAdapter
                                      Scan parquet spark_catalog.default.household_demographics [hd_demo_sk,hd_dep_count]
                    InputAdapter
                      BroadcastExchange #4
                        WholeStageCodegen (3)
                          Project [t_time_sk]
                            Filter [t_hour,t_time_sk]
                              ColumnarToRow
                                InputAdapter
                                  Scan parquet spark_catalog.default.time_dim [t_time_sk,t_hour]
      InputAdapter
        BroadcastExchange #5
          WholeStageCodegen (9)
            HashAggregate [count] [count(1),pmc,count]
              InputAdapter
                Exchange #6
                  WholeStageCodegen (8)
                    HashAggregate [count,count]
                      Project
                        BroadcastHashJoin [ws_sold_time_sk,t_time_sk]
                          Project [ws_sold_time_sk]
                            BroadcastHashJoin [ws_ship_hdemo_sk,hd_demo_sk]
                              Project [ws_sold_time_sk,ws_ship_hdemo_sk]
                                BroadcastHashJoin [ws_web_page_sk,wp_web_page_sk]
                                  Project [ws_sold_time_sk,ws_ship_hdemo_sk,ws_web_page_sk]
                                    Filter [ws_ship_hdemo_sk,ws_sold_time_sk,ws_web_page_sk]
                                      ColumnarToRow
                                        InputAdapter
                                          Scan parquet spark_catalog.default.web_sales [ws_sold_time_sk,ws_ship_hdemo_sk,ws_web_page_sk,ws_sold_date_sk]
                                  InputAdapter
                                    ReusedExchange [wp_web_page_sk] #2
                              InputAdapter
                                ReusedExchange [hd_demo_sk] #3
                          InputAdapter
                            BroadcastExchange #7
                              WholeStageCodegen (7)
                                Project [t_time_sk]
                                  Filter [t_hour,t_time_sk]
                                    ColumnarToRow
                                      InputAdapter
                                        Scan parquet spark_catalog.default.time_dim [t_time_sk,t_hour]
