Skip to content

chore(optimizer): enhance the optimizer trace #18032

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
May 31, 2025

Conversation

BohuTANG
Copy link
Member

@BohuTANG BohuTANG commented May 29, 2025

I hereby agree to the terms of the CLA available at: https://docs.databend.com/dev/policies/cla/

Summary

  • SET optimizer_skip_list = 'CascadesOptimizer,PushDownFilterJoin,EliminateFilter', the optimizer will not apply CascadesOptimizer, PushDownFilterJoin& EliminateFilter Rules.
  • Enhance the optimizer trace log: set enable_optimizer_trace=1
Optimizer Trace Example
 ========== OPTIMIZERS SUMMARY TRACE ==========

[✓] 0: SubqueryDecorrelatorOptimizer (259.42µs)

[✗] 1: RuleStatsAggregateOptimizer (39.58µs)

[✗] 2: CollectStatisticsOptimizer (1.02ms)

[✗] 3: RuleNormalizeAggregateOptimizer (45.67µs)

[✓] 4: PullUpFilterOptimizer (346.29µs)

[✓] 5: RecursiveRuleOptimizer[EliminateSort,EliminateUnion,...(28)] (423.78ms)
  └── Rules: 7/30 Applied (23%)
    Rules Summary:
      [✗] 5.0: EliminateSort (481.35µs)
      [✗] 5.1: EliminateUnion (141.21µs)
      [✓] 5.2: MergeEvalScalar (293.75µs)
      [✗] 5.3: FilterNulls (184.34µs)
      [✗] 5.4: EliminateFilter (490.12µs)
      [✗] 5.5: MergeFilter (136.78µs)
      [✗] 5.6: NormalizeScalarFilter (194.70µs)
      [✗] 5.7: PushDownFilterUnion (132.50µs)
      [✓] 5.8: PushDownFilterAggregate (145.24µs)
      [✗] 5.9: PushDownFilterWindow (129.67µs)
      [✗] 5.10: PushDownFilterWindowTopN (130.38µs)
      [✗] 5.11: PushDownFilterSort (132.79µs)
      [✓] 5.12: PushDownFilterEvalScalar (1.09ms)
      [✓] 5.13: PushDownFilterJoin (2.82ms)
      [✗] 5.14: PushDownFilterProjectSet (123.59µs)
      [✗] 5.15: PushDownLimit (120.34µs)
      [✗] 5.16: PushDownLimitUnion (121.17µs)
      [✗] 5.17: PushDownSortEvalScalar (128.17µs)
      [✗] 5.18: PushDownLimitEvalScalar (122.92µs)
      [✓] 5.19: PushDownLimitSort (123.58µs)
      [✗] 5.20: PushDownLimitWindow (120.45µs)
      [✗] 5.21: RulePushDownRankLimitAggregate (145.17µs)
      [✗] 5.22: PushDownLimitOuterJoin (117.37µs)
      [✗] 5.23: PushDownLimitScan (116.42µs)
      [✗] 5.24: SemiToInnerJoin (171.17µs)
      [✗] 5.25: FoldCountAggregate (229.93µs)
      [✗] 5.26: TryApplyAggIndex (267.66µs)
      [✓] 5.27: PushDownFilterScan (202.92µs)
      [✓] 5.28: PushDownPrewhere (352.96µs)
      [✗] 5.29: PushDownSortScan (129.63µs)
    Total Applied Rules: 7/30 (23%)
    Total Non-Applied Rules: 23/30 (77%)

[✓] 6: RecursiveRuleOptimizer[SplitAggregate] (4.21ms)
  └── Rules: 1/1 Applied (100%)
    Rules Summary:
      [✓] 6.0: SplitAggregate (74.66µs)
    Total Applied Rules: 1/1 (100%)
    Total Non-Applied Rules: 0/1 (0%)

[✓] 7: DPhpyOptimizer (2.47ms)

[✗] 8: SingleToInnerOptimizer (17.96µs)

[✓] 9: DeduplicateJoinConditionOptimizer (55.92µs)

[✗] 10: RecursiveRuleOptimizer[CommuteJoin] (2.64ms)
  └── Rules: 0/1 Applied (0%)
    Rules Summary:
      [✗] 10.0: CommuteJoin (153.62µs)
    Total Applied Rules: 0/1 (0%)
    Total Non-Applied Rules: 1/1 (100%)

[✗] 11: CascadesOptimizer (2.04ms)

[✓] 12: RecursiveRuleOptimizer[EliminateEvalScalar] (4.11ms)
  └── Rules: 1/1 Applied (100%)
    Rules Summary:
      [✓] 12.0: EliminateEvalScalar (817.13µs)
    Total Applied Rules: 1/1 (100%)
    Total Non-Applied Rules: 0/1 (0%)


2025-05-30T18:05:24.331867+08:00  INFO databend_common_sql::planner::optimizer::pipeline::trace::trace: trace.rs:321 [✓] 0: SubqueryDecorrelatorOptimizer (259.42µs)

  Changes:
     Limit
     ├── limit: [100]
     ├── offset: [0]
     └── Sort
         ├── sort keys: [default.customer.c_customer_id (#79) ASC NULLS LAST]
         ├── limit: [NONE]
         └── EvalScalar
             ├── scalars: [customer.c_customer_id (#79) AS (#79)]
             └── Filter
    -            ├── filters: [gt(ctr1.ctr_total_return (#48), SUBQUERY), eq(store.s_store_sk (#49), ctr1.ctr_store_sk (#7)), eq(store.s_state (#73), 'TN'), eq(ctr1.ctr_customer_sk (#3), customer.c_customer_sk (#78))]
    -            ├── subquerys
    -            │   └── Subquery (Scalar)
    -            │       ├── output_column: derived.sum(ctr_total_return) / if(count(ctr_total_return) = 0, 1, count(ctr_total_return)) * 1.2 (#147)
    -            │       └── EvalScalar
    -            │           ├── scalars: [multiply(divide(sum(ctr_total_return) (#145), if(eq(count(ctr_total_return) (#146), 0), 1, count(ctr_total_return) (#146))), 1.2) AS (#147)]
    -            │           └── Aggregate(Initial)
    -            │               ├── group items: []
    -            │               ├── aggregate functions: [sum(ctr_total_return) AS (#145), count(ctr_total_return) AS (#146)]
    -            │               └── EvalScalar
    -            │                   ├── scalars: [ctr2.ctr_total_return (#144) AS (#144), ctr2.ctr_total_return (#144) AS (#144)]
    -            │                   └── Filter
    -            │                       ├── filters: [eq(ctr1.ctr_store_sk (#7), ctr2.ctr_store_sk (#103))]
    -            │                       └── EvalScalar
    -            │                           ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103), Sum(sr_return_amt) (#144) AS (#144)]
    -            │                           └── Aggregate(Initial)
    -            │                               ├── group items: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103)]
    -            │                               ├── aggregate functions: [Sum(sr_return_amt) AS (#144)]
    -            │                               └── EvalScalar
    -            │                                   ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103), store_returns.sr_return_amt (#107) AS (#107)]
    -            │                                   └── Filter
    -            │                                       ├── filters: [eq(store_returns.sr_returned_date_sk (#96), date_dim.d_date_sk (#116)), eq(date_dim.d_year (#122), 2001)]
    -            │                                       └── Join(Cross)
    -            │                                           ├── build keys: []
    -            │                                           ├── probe keys: []
    -            │                                           ├── other filters: []
    -            │                                           ├── Scan
    -            │                                           │   ├── table: default.store_returns (#4)
    -            │                                           │   ├── filters: []
    -            │                                           │   ├── order by: []
    -            │                                           │   └── limit: NONE
    -            │                                           └── Scan
    -            │                                               ├── table: default.date_dim (#5)
    -            │                                               ├── filters: []
    -            │                                               ├── order by: []
    -            │                                               └── limit: NONE
    -            └── Join(Cross)
    -                ├── build keys: []
    -                ├── probe keys: []
    +            ├── filters: [gt(ctr1.ctr_total_return (#48), scalar_subquery_147 (#147)), eq(store.s_store_sk (#49), ctr1.ctr_store_sk (#7)), eq(store.s_state (#73), 'TN'), eq(ctr1.ctr_customer_sk (#3), customer.c_customer_sk (#78))]
    +            └── Join(Left)
    +                ├── build keys: [sr_store_sk (#103)]
    +                ├── probe keys: [sr_store_sk (#7)]
                     ├── other filters: []
                     ├── Join(Cross)
                     │   ├── build keys: []
                     │   ├── probe keys: []
                     │   ├── other filters: []
    -                │   ├── EvalScalar
    -                │   │   ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), Sum(sr_return_amt) (#48) AS (#48)]
    -                │   │   └── Aggregate(Initial)
    -                │   │       ├── group items: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7)]
    -                │   │       ├── aggregate functions: [Sum(sr_return_amt) AS (#48)]
    -                │   │       └── EvalScalar
    -                │   │           ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), store_returns.sr_return_amt (#11) AS (#11)]
    -                │   │           └── Filter
    -                │   │               ├── filters: [eq(store_returns.sr_returned_date_sk (#0), date_dim.d_date_sk (#20)), eq(date_dim.d_year (#26), 2001)]
    -                │   │               └── Join(Cross)
    -                │   │                   ├── build keys: []
    -                │   │                   ├── probe keys: []
    -                │   │                   ├── other filters: []
    -                │   │                   ├── Scan
    -                │   │                   │   ├── table: default.store_returns (#0)
    -                │   │                   │   ├── filters: []
    -                │   │                   │   ├── order by: []
    -                │   │                   │   └── limit: NONE
    -                │   │                   └── Scan
    -                │   │                       ├── table: default.date_dim (#1)
    -                │   │                       ├── filters: []
    -                │   │                       ├── order by: []
    -                │   │                       └── limit: NONE
    +                │   ├── Join(Cross)
    +                │   │   ├── build keys: []
    +                │   │   ├── probe keys: []
    +                │   │   ├── other filters: []
    +                │   │   ├── EvalScalar
    +                │   │   │   ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), Sum(sr_return_amt) (#48) AS (#48)]
    +                │   │   │   └── Aggregate(Initial)
    +                │   │   │       ├── group items: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7)]
    +                │   │   │       ├── aggregate functions: [Sum(sr_return_amt) AS (#48)]
    +                │   │   │       └── EvalScalar
    +                │   │   │           ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), store_returns.sr_return_amt (#11) AS (#11)]
    +                │   │   │           └── Filter
    +                │   │   │               ├── filters: [eq(store_returns.sr_returned_date_sk (#0), date_dim.d_date_sk (#20)), eq(date_dim.d_year (#26), 2001)]
    +                │   │   │               └── Join(Cross)
    +                │   │   │                   ├── build keys: []
    +                │   │   │                   ├── probe keys: []
    +                │   │   │                   ├── other filters: []
    +                │   │   │                   ├── Scan
    +                │   │   │                   │   ├── table: default.store_returns (#0)
    +                │   │   │                   │   ├── filters: []
    +                │   │   │                   │   ├── order by: []
    +                │   │   │                   │   └── limit: NONE
    +                │   │   │                   └── Scan
    +                │   │   │                       ├── table: default.date_dim (#1)
    +                │   │   │                       ├── filters: []
    +                │   │   │                       ├── order by: []
    +                │   │   │                       └── limit: NONE
    +                │   │   └── Scan
    +                │   │       ├── table: default.store (#2)
    +                │   │       ├── filters: []
    +                │   │       ├── order by: []
    +                │   │       └── limit: NONE
                     │   └── Scan
    -                │       ├── table: default.store (#2)
    +                │       ├── table: default.customer (#3)
                     │       ├── filters: []
                     │       ├── order by: []
                     │       └── limit: NONE
    -                └── Scan
    -                    ├── table: default.customer (#3)
    -                    ├── filters: []
    -                    ├── order by: []
    -                    └── limit: NONE
    +                └── EvalScalar
    +                    ├── scalars: [outer.sr_store_sk (#103) AS (#103), multiply(divide(sum(ctr_total_return) (#145), if(eq(count(ctr_total_return) (#146), 0), 1, count(ctr_total_return) (#146))), 1.2) AS (#147)]
    +                    └── Aggregate(Initial)
    +                        ├── group items: [outer.sr_store_sk (#103) AS (#103)]
    +                        ├── aggregate functions: [sum(ctr_total_return) AS (#145), count(ctr_total_return) AS (#146)]
    +                        └── EvalScalar
    +                            ├── scalars: [outer.sr_store_sk (#103) AS (#103), ctr2.ctr_total_return (#144) AS (#144), ctr2.ctr_total_return (#144) AS (#144)]
    +                            └── Filter
    +                                ├── filters: [eq(sr_store_sk (#103), ctr2.ctr_store_sk (#103))]
    +                                └── EvalScalar
    +                                    ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103), Sum(sr_return_amt) (#144) AS (#144)]
    +                                    └── Aggregate(Initial)
    +                                        ├── group items: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103)]
    +                                        ├── aggregate functions: [Sum(sr_return_amt) AS (#144)]
    +                                        └── EvalScalar
    +                                            ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103), store_returns.sr_return_amt (#107) AS (#107)]
    +                                            └── Filter
    +                                                ├── filters: [eq(store_returns.sr_returned_date_sk (#96), date_dim.d_date_sk (#116)), eq(date_dim.d_year (#122), 2001)]
    +                                                └── Join(Cross)
    +                                                    ├── build keys: []
    +                                                    ├── probe keys: []
    +                                                    ├── other filters: []
    +                                                    ├── Scan
    +                                                    │   ├── table: default.store_returns (#4)
    +                                                    │   ├── filters: []
    +                                                    │   ├── order by: []
    +                                                    │   └── limit: NONE
    +                                                    └── Scan
    +                                                        ├── table: default.date_dim (#5)
    +                                                        ├── filters: []
    +                                                        ├── order by: []
    +                                                        └── limit: NONE


2025-05-30T18:05:24.331880+08:00  INFO databend_common_sql::planner::optimizer::pipeline::trace::trace: trace.rs:321 [✗] 1: RuleStatsAggregateOptimizer (39.58µs)

... ...
 
2025-05-30T18:05:24.332173+08:00  INFO databend_common_sql::planner::optimizer::pipeline::trace::trace: trace.rs:321 [✓] 5: RecursiveRuleOptimizer[EliminateSort,EliminateUnion,...(28)] (423.78ms)

  Changes:
     Limit
     ├── limit: [100]
     ├── offset: [0]
     └── Sort
         ├── sort keys: [default.customer.c_customer_id (#79) ASC NULLS LAST]
    -    ├── limit: [NONE]
    -    └── Filter
    -        ├── filters: [eq(store.s_store_sk (#156), ctr1.ctr_store_sk (#157)), eq(ctr1.ctr_customer_sk (#159), customer.c_customer_sk (#160)), gt(ctr1.ctr_total_return (#154), scalar_subquery_147 (#155)), eq(store.s_state (#158), 'TN')]
    -        └── EvalScalar
    -            ├── scalars: [customer.c_customer_id (#79) AS (#79), ctr1.ctr_total_return (#48) AS (#154), scalar_subquery_147 (#147) AS (#155), store.s_store_sk (#49) AS (#156), ctr1.ctr_store_sk (#7) AS (#157), store.s_state (#73) AS (#158), ctr1.ctr_customer_sk (#3) AS (#159), customer.c_customer_sk (#78) AS (#160)]
    -            └── Join(Left)
    -                ├── build keys: [sr_store_sk (#103)]
    -                ├── probe keys: [sr_store_sk (#7)]
    -                ├── other filters: []
    -                ├── Join(Cross)
    -                │   ├── build keys: []
    -                │   ├── probe keys: []
    -                │   ├── other filters: []
    -                │   ├── Join(Cross)
    -                │   │   ├── build keys: []
    -                │   │   ├── probe keys: []
    -                │   │   ├── other filters: []
    -                │   │   ├── EvalScalar
    -                │   │   │   ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), Sum(sr_return_amt) (#48) AS (#48)]
    -                │   │   │   └── Aggregate(Initial)
    -                │   │   │       ├── group items: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7)]
    -                │   │   │       ├── aggregate functions: [Sum(sr_return_amt) AS (#48)]
    -                │   │   │       └── Filter
    -                │   │   │           ├── filters: [eq(date_dim.d_year (#150), 2001), eq(store_returns.sr_returned_date_sk (#148), date_dim.d_date_sk (#149))]
    -                │   │   │           └── EvalScalar
    -                │   │   │               ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), store_returns.sr_return_amt (#11) AS (#11), store_returns.sr_returned_date_sk (#0) AS (#148), date_dim.d_date_sk (#20) AS (#149), date_dim.d_year (#26) AS (#150)]
    -                │   │   │               └── Join(Cross)
    -                │   │   │                   ├── build keys: []
    -                │   │   │                   ├── probe keys: []
    -                │   │   │                   ├── other filters: []
    -                │   │   │                   ├── Scan
    -                │   │   │                   │   ├── table: default.store_returns (#0)
    -                │   │   │                   │   ├── filters: []
    -                │   │   │                   │   ├── order by: []
    -                │   │   │                   │   └── limit: NONE
    -                │   │   │                   └── Scan
    -                │   │   │                       ├── table: default.date_dim (#1)
    -                │   │   │                       ├── filters: []
    -                │   │   │                       ├── order by: []
    -                │   │   │                       └── limit: NONE
    -                │   │   └── Scan
    -                │   │       ├── table: default.store (#2)
    -                │   │       ├── filters: []
    -                │   │       ├── order by: []
    -                │   │       └── limit: NONE
    -                │   └── Scan
    -                │       ├── table: default.customer (#3)
    -                │       ├── filters: []
    -                │       ├── order by: []
    -                │       └── limit: NONE
    -                └── EvalScalar
    -                    ├── scalars: [outer.sr_store_sk (#103) AS (#103), multiply(divide(sum(ctr_total_return) (#145), if(eq(count(ctr_total_return) (#146), 0), 1, count(ctr_total_return) (#146))), 1.2) AS (#147)]
    -                    └── Aggregate(Initial)
    -                        ├── group items: [outer.sr_store_sk (#103) AS (#103)]
    -                        ├── aggregate functions: [sum(ctr_total_return) AS (#145), count(ctr_total_return) AS (#146)]
    -                        └── Filter
    -                            ├── filters: [eq(sr_store_sk (#103), ctr2.ctr_store_sk (#103))]
    +    ├── limit: [100]
    +    └── EvalScalar
    +        ├── scalars: [customer.c_customer_id (#79) AS (#79), ctr1.ctr_total_return (#48) AS (#154), scalar_subquery_147 (#147) AS (#155), store.s_store_sk (#49) AS (#156), ctr1.ctr_store_sk (#7) AS (#157), store.s_state (#73) AS (#158), ctr1.ctr_customer_sk (#3) AS (#159), customer.c_customer_sk (#78) AS (#160)]
    +        └── Join(Inner)
    +            ├── build keys: [sr_store_sk (#103), sr_store_sk (#103)]
    +            ├── probe keys: [sr_store_sk (#7), store.s_store_sk (#49)]
    +            ├── other filters: [gt(ctr1.ctr_total_return (#48), scalar_subquery_147 (#147))]
    +            ├── Join(Inner)
    +            │   ├── build keys: [customer.c_customer_sk (#78)]
    +            │   ├── probe keys: [ctr1.ctr_customer_sk (#3)]
    +            │   ├── other filters: []
    +            │   ├── Join(Inner)
    +            │   │   ├── build keys: [store.s_store_sk (#49)]
    +            │   │   ├── probe keys: [sr_store_sk (#7)]
    +            │   │   ├── other filters: []
    +            │   │   ├── EvalScalar
    +            │   │   │   ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), Sum(sr_return_amt) (#48) AS (#48)]
    +            │   │   │   └── Aggregate(Initial)
    +            │   │   │       ├── group items: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7)]
    +            │   │   │       ├── aggregate functions: [Sum(sr_return_amt) AS (#48)]
    +            │   │   │       └── EvalScalar
    +            │   │   │           ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), store_returns.sr_return_amt (#11) AS (#11), store_returns.sr_returned_date_sk (#0) AS (#148), date_dim.d_date_sk (#20) AS (#149), date_dim.d_year (#26) AS (#150)]
    +            │   │   │           └── Join(Inner)
    +            │   │   │               ├── build keys: [date_dim.d_date_sk (#20)]
    +            │   │   │               ├── probe keys: [store_returns.sr_returned_date_sk (#0)]
    +            │   │   │               ├── other filters: []
    +            │   │   │               ├── Scan
    +            │   │   │               │   ├── table: default.store_returns (#0)
    +            │   │   │               │   ├── filters: []
    +            │   │   │               │   ├── order by: []
    +            │   │   │               │   └── limit: NONE
    +            │   │   │               └── Scan
    +            │   │   │                   ├── table: default.date_dim (#1)
    +            │   │   │                   ├── filters: [eq(date_dim.d_year (#26), 2001)]
    +            │   │   │                   ├── order by: []
    +            │   │   │                   └── limit: NONE
    +            │   │   └── Scan
    +            │   │       ├── table: default.store (#2)
    +            │   │       ├── filters: [eq(store.s_state (#73), 'TN')]
    +            │   │       ├── order by: []
    +            │   │       └── limit: NONE
    +            │   └── Scan
    +            │       ├── table: default.customer (#3)
    +            │       ├── filters: []
    +            │       ├── order by: []
    +            │       └── limit: NONE
    +            └── EvalScalar
    +                ├── scalars: [outer.sr_store_sk (#103) AS (#103), multiply(divide(sum(ctr_total_return) (#145), if(eq(count(ctr_total_return) (#146), 0), 1, count(ctr_total_return) (#146))), 1.2) AS (#147)]
    +                └── Aggregate(Initial)
    +                    ├── group items: [outer.sr_store_sk (#103) AS (#103)]
    +                    ├── aggregate functions: [sum(ctr_total_return) AS (#145), count(ctr_total_return) AS (#146)]
    +                    └── EvalScalar
    +                        ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), outer.sr_store_sk (#103) AS (#103), store_returns.sr_store_sk (#103) AS (#103), ctr2.ctr_total_return (#144) AS (#144), ctr2.ctr_total_return (#144) AS (#144), Sum(sr_return_amt) (#144) AS (#144)]
    +                        └── Aggregate(Initial)
    +                            ├── group items: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103)]
    +                            ├── aggregate functions: [Sum(sr_return_amt) AS (#144)]
                                 └── EvalScalar
    -                                ├── scalars: [outer.sr_store_sk (#103) AS (#103), ctr2.ctr_total_return (#144) AS (#144), ctr2.ctr_total_return (#144) AS (#144)]
    -                                └── EvalScalar
    -                                    ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103), Sum(sr_return_amt) (#144) AS (#144)]
    -                                    └── Aggregate(Initial)
    -                                        ├── group items: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103)]
    -                                        ├── aggregate functions: [Sum(sr_return_amt) AS (#144)]
    -                                        └── Filter
    -                                            ├── filters: [eq(date_dim.d_year (#153), 2001), eq(store_returns.sr_returned_date_sk (#151), date_dim.d_date_sk (#152))]
    -                                            └── EvalScalar
    -                                                ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103), store_returns.sr_return_amt (#107) AS (#107), store_returns.sr_returned_date_sk (#96) AS (#151), date_dim.d_date_sk (#116) AS (#152), date_dim.d_year (#122) AS (#153)]
    -                                                └── Join(Cross)
    -                                                    ├── build keys: []
    -                                                    ├── probe keys: []
    -                                                    ├── other filters: []
    -                                                    ├── Scan
    -                                                    │   ├── table: default.store_returns (#4)
    -                                                    │   ├── filters: []
    -                                                    │   ├── order by: []
    -                                                    │   └── limit: NONE
    -                                                    └── Scan
    -                                                        ├── table: default.date_dim (#5)
    -                                                        ├── filters: []
    -                                                        ├── order by: []
    -                                                        └── limit: NONE
    +                                ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103), store_returns.sr_return_amt (#107) AS (#107), store_returns.sr_returned_date_sk (#96) AS (#151), date_dim.d_date_sk (#116) AS (#152), date_dim.d_year (#122) AS (#153)]
    +                                └── Join(Inner)
    +                                    ├── build keys: [date_dim.d_date_sk (#116)]
    +                                    ├── probe keys: [store_returns.sr_returned_date_sk (#96)]
    +                                    ├── other filters: []
    +                                    ├── Scan
    +                                    │   ├── table: default.store_returns (#4)
    +                                    │   ├── filters: []
    +                                    │   ├── order by: []
    +                                    │   └── limit: NONE
    +                                    └── Scan
    +                                        ├── table: default.date_dim (#5)
    +                                        ├── filters: [eq(date_dim.d_year (#122), 2001)]
    +                                        ├── order by: []
    +                                        └── limit: NONE

  RecursiveRuleOptimizer[EliminateSort,EliminateUnion,...(28)] Rules Summary:
    [✗] 5.0: EliminateSort (481.35µs)
    [✗] 5.1: EliminateUnion (141.21µs)
    [✓] 5.2: MergeEvalScalar (293.75µs)
    [✗] 5.3: FilterNulls (184.34µs)
    [✗] 5.4: EliminateFilter (490.12µs)
    [✗] 5.5: MergeFilter (136.78µs)
    [✗] 5.6: NormalizeScalarFilter (194.70µs)
    [✗] 5.7: PushDownFilterUnion (132.50µs)
    [✓] 5.8: PushDownFilterAggregate (145.24µs)
    [✗] 5.9: PushDownFilterWindow (129.67µs)
    [✗] 5.10: PushDownFilterWindowTopN (130.38µs)
    [✗] 5.11: PushDownFilterSort (132.79µs)
    [✓] 5.12: PushDownFilterEvalScalar (1.09ms)
    [✓] 5.13: PushDownFilterJoin (2.82ms)
    [✗] 5.14: PushDownFilterProjectSet (123.59µs)
    [✗] 5.15: PushDownLimit (120.34µs)
    [✗] 5.16: PushDownLimitUnion (121.17µs)
    [✗] 5.17: PushDownSortEvalScalar (128.17µs)
    [✗] 5.18: PushDownLimitEvalScalar (122.92µs)
    [✓] 5.19: PushDownLimitSort (123.58µs)
    [✗] 5.20: PushDownLimitWindow (120.45µs)
    [✗] 5.21: RulePushDownRankLimitAggregate (145.17µs)
    [✗] 5.22: PushDownLimitOuterJoin (117.37µs)
    [✗] 5.23: PushDownLimitScan (116.42µs)
    [✗] 5.24: SemiToInnerJoin (171.17µs)
    [✗] 5.25: FoldCountAggregate (229.93µs)
    [✗] 5.26: TryApplyAggIndex (267.66µs)
    [✓] 5.27: PushDownFilterScan (202.92µs)
    [✓] 5.28: PushDownPrewhere (352.96µs)
    [✗] 5.29: PushDownSortScan (129.63µs)

  Total Applied Rules: 7/30 (23%)
  Total Non-Applied Rules: 23/30 (77%)

  Applied Rules Details:
    [✓] 5.2: MergeEvalScalar (293.75µs)
      Changes:
         EvalScalar
        -├── scalars: [outer.sr_store_sk (#103) AS (#103), ctr2.ctr_total_return (#144) AS (#144), ctr2.ctr_total_return (#144) AS (#144)]
        -└── EvalScalar
        -    ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103), Sum(sr_return_amt) (#144) AS (#144)]
        -    └── Aggregate(Initial)
        -        ├── group items: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103)]
        -        ├── aggregate functions: [Sum(sr_return_amt) AS (#144)]
        -        └── EvalScalar
        -            ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103), store_returns.sr_return_amt (#107) AS (#107), store_returns.sr_returned_date_sk (#96) AS (#151), date_dim.d_date_sk (#116) AS (#152), date_dim.d_year (#122) AS (#153)]
        -            └── Join(Inner)
        -                ├── build keys: [date_dim.d_date_sk (#116)]
        -                ├── probe keys: [store_returns.sr_returned_date_sk (#96)]
        -                ├── other filters: []
        -                ├── Scan
        -                │   ├── table: default.store_returns (#4)
        -                │   ├── filters: []
        -                │   ├── order by: []
        -                │   └── limit: NONE
        -                └── Scan
        -                    ├── table: default.date_dim (#5)
        -                    ├── filters: [eq(date_dim.d_year (#122), 2001)]
        -                    ├── order by: []
        -                    └── limit: NONE
        +├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), outer.sr_store_sk (#103) AS (#103), store_returns.sr_store_sk (#103) AS (#103), ctr2.ctr_total_return (#144) AS (#144), ctr2.ctr_total_return (#144) AS (#144), Sum(sr_return_amt) (#144) AS (#144)]
        +└── Aggregate(Initial)
        +    ├── group items: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103)]
        +    ├── aggregate functions: [Sum(sr_return_amt) AS (#144)]
        +    └── EvalScalar
        +        ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103), store_returns.sr_return_amt (#107) AS (#107), store_returns.sr_returned_date_sk (#96) AS (#151), date_dim.d_date_sk (#116) AS (#152), date_dim.d_year (#122) AS (#153)]
        +        └── Join(Inner)
        +            ├── build keys: [date_dim.d_date_sk (#116)]
        +            ├── probe keys: [store_returns.sr_returned_date_sk (#96)]
        +            ├── other filters: []
        +            ├── Scan
        +            │   ├── table: default.store_returns (#4)
        +            │   ├── filters: []
        +            │   ├── order by: []
        +            │   └── limit: NONE
        +            └── Scan
        +                ├── table: default.date_dim (#5)
        +                ├── filters: [eq(date_dim.d_year (#122), 2001)]
        +                ├── order by: []
        +                └── limit: NONE

    [✓] 5.8: PushDownFilterAggregate (145.24µs)
      Changes:
        -Filter
        -├── filters: [eq(outer.sr_store_sk (#103), outer.sr_store_sk (#103))]
        -└── Aggregate(Initial)
        -    ├── group items: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103)]
        -    ├── aggregate functions: [Sum(sr_return_amt) AS (#144)]
        +Aggregate(Initial)
        +├── group items: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103)]
        +├── aggregate functions: [Sum(sr_return_amt) AS (#144)]
        +└── Filter
        +    ├── filters: [eq(outer.sr_store_sk (#103), outer.sr_store_sk (#103))]
             └── EvalScalar
                 ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103), store_returns.sr_return_amt (#107) AS (#107), store_returns.sr_returned_date_sk (#96) AS (#151), date_dim.d_date_sk (#116) AS (#152), date_dim.d_year (#122) AS (#153)]
                 └── Join(Inner)
                     ├── build keys: [date_dim.d_date_sk (#116)]
                     ├── probe keys: [store_returns.sr_returned_date_sk (#96)]
                     ├── other filters: []
                     ├── Scan
                     │   ├── table: default.store_returns (#4)
                     │   ├── filters: []
                     │   ├── order by: []
                     │   └── limit: NONE
                     └── Scan
                         ├── table: default.date_dim (#5)
                         ├── filters: [eq(date_dim.d_year (#122), 2001)]
                         ├── order by: []
                         └── limit: NONE

    [✓] 5.12: PushDownFilterEvalScalar (1.09ms)
      Changes:
        -Filter
        -├── filters: [eq(store.s_store_sk (#156), ctr1.ctr_store_sk (#157)), eq(ctr1.ctr_customer_sk (#159), customer.c_customer_sk (#160)), gt(ctr1.ctr_total_return (#154), scalar_subquery_147 (#155)), eq(store.s_state (#158), 'TN')]
        -└── EvalScalar
        -    ├── scalars: [customer.c_customer_id (#79) AS (#79), ctr1.ctr_total_return (#48) AS (#154), scalar_subquery_147 (#147) AS (#155), store.s_store_sk (#49) AS (#156), ctr1.ctr_store_sk (#7) AS (#157), store.s_state (#73) AS (#158), ctr1.ctr_customer_sk (#3) AS (#159), customer.c_customer_sk (#78) AS (#160)]
        +EvalScalar
        +├── scalars: [customer.c_customer_id (#79) AS (#79), ctr1.ctr_total_return (#48) AS (#154), scalar_subquery_147 (#147) AS (#155), store.s_store_sk (#49) AS (#156), ctr1.ctr_store_sk (#7) AS (#157), store.s_state (#73) AS (#158), ctr1.ctr_customer_sk (#3) AS (#159), customer.c_customer_sk (#78) AS (#160)]
        +└── Filter
        +    ├── filters: [eq(store.s_store_sk (#49), ctr1.ctr_store_sk (#7)), eq(ctr1.ctr_customer_sk (#3), customer.c_customer_sk (#78)), gt(ctr1.ctr_total_return (#48), scalar_subquery_147 (#147)), eq(store.s_state (#73), 'TN')]
             └── Join(Left)
                 ├── build keys: [sr_store_sk (#103)]
                 ├── probe keys: [sr_store_sk (#7)]
                 ├── other filters: []
                 ├── Join(Cross)
                 │   ├── build keys: []
                 │   ├── probe keys: []
                 │   ├── other filters: []
                 │   ├── Join(Cross)
                 │   │   ├── build keys: []
                 │   │   ├── probe keys: []
                 │   │   ├── other filters: []
                 │   │   ├── EvalScalar
                 │   │   │   ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), Sum(sr_return_amt) (#48) AS (#48)]
                 │   │   │   └── Aggregate(Initial)
                 │   │   │       ├── group items: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7)]
                 │   │   │       ├── aggregate functions: [Sum(sr_return_amt) AS (#48)]
                 │   │   │       └── EvalScalar
                 │   │   │           ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), store_returns.sr_return_amt (#11) AS (#11), store_returns.sr_returned_date_sk (#0) AS (#148), date_dim.d_date_sk (#20) AS (#149), date_dim.d_year (#26) AS (#150)]
                 │   │   │           └── Join(Inner)
                 │   │   │               ├── build keys: [date_dim.d_date_sk (#20)]
                 │   │   │               ├── probe keys: [store_returns.sr_returned_date_sk (#0)]
                 │   │   │               ├── other filters: []
                 │   │   │               ├── Scan
                 │   │   │               │   ├── table: default.store_returns (#0)
                 │   │   │               │   ├── filters: []
                 │   │   │               │   ├── order by: []
                 │   │   │               │   └── limit: NONE
                 │   │   │               └── Scan
                 │   │   │                   ├── table: default.date_dim (#1)
                 │   │   │                   ├── filters: [eq(date_dim.d_year (#26), 2001)]
                 │   │   │                   ├── order by: []
                 │   │   │                   └── limit: NONE
                 │   │   └── Scan
                 │   │       ├── table: default.store (#2)
                 │   │       ├── filters: []
                 │   │       ├── order by: []
                 │   │       └── limit: NONE
                 │   └── Scan
                 │       ├── table: default.customer (#3)
                 │       ├── filters: []
                 │       ├── order by: []
                 │       └── limit: NONE
                 └── EvalScalar
                     ├── scalars: [outer.sr_store_sk (#103) AS (#103), multiply(divide(sum(ctr_total_return) (#145), if(eq(count(ctr_total_return) (#146), 0), 1, count(ctr_total_return) (#146))), 1.2) AS (#147)]
                     └── Aggregate(Initial)
                         ├── group items: [outer.sr_store_sk (#103) AS (#103)]
                         ├── aggregate functions: [sum(ctr_total_return) AS (#145), count(ctr_total_return) AS (#146)]
                         └── EvalScalar
                             ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), outer.sr_store_sk (#103) AS (#103), store_returns.sr_store_sk (#103) AS (#103), ctr2.ctr_total_return (#144) AS (#144), ctr2.ctr_total_return (#144) AS (#144), Sum(sr_return_amt) (#144) AS (#144)]
                             └── Aggregate(Initial)
                                 ├── group items: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103)]
                                 ├── aggregate functions: [Sum(sr_return_amt) AS (#144)]
                                 └── EvalScalar
                                     ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103), store_returns.sr_return_amt (#107) AS (#107), store_returns.sr_returned_date_sk (#96) AS (#151), date_dim.d_date_sk (#116) AS (#152), date_dim.d_year (#122) AS (#153)]
                                     └── Join(Inner)
                                         ├── build keys: [date_dim.d_date_sk (#116)]
                                         ├── probe keys: [store_returns.sr_returned_date_sk (#96)]
                                         ├── other filters: []
                                         ├── Scan
                                         │   ├── table: default.store_returns (#4)
                                         │   ├── filters: []
                                         │   ├── order by: []
                                         │   └── limit: NONE
                                         └── Scan
                                             ├── table: default.date_dim (#5)
                                             ├── filters: [eq(date_dim.d_year (#122), 2001)]
                                             ├── order by: []
                                             └── limit: NONE

    [✓] 5.13: PushDownFilterJoin (2.82ms)
      Changes:
        -Filter
        -├── filters: [eq(sr_store_sk (#7), store.s_store_sk (#49)), eq(store.s_state (#73), 'TN')]
        -└── Join(Cross)
        -    ├── build keys: []
        -    ├── probe keys: []
        -    ├── other filters: []
        -    ├── EvalScalar
        -    │   ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), Sum(sr_return_amt) (#48) AS (#48)]
        -    │   └── Aggregate(Initial)
        -    │       ├── group items: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7)]
        -    │       ├── aggregate functions: [Sum(sr_return_amt) AS (#48)]
        -    │       └── EvalScalar
        -    │           ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), store_returns.sr_return_amt (#11) AS (#11), store_returns.sr_returned_date_sk (#0) AS (#148), date_dim.d_date_sk (#20) AS (#149), date_dim.d_year (#26) AS (#150)]
        -    │           └── Join(Inner)
        -    │               ├── build keys: [date_dim.d_date_sk (#20)]
        -    │               ├── probe keys: [store_returns.sr_returned_date_sk (#0)]
        -    │               ├── other filters: []
        -    │               ├── Scan
        -    │               │   ├── table: default.store_returns (#0)
        -    │               │   ├── filters: []
        -    │               │   ├── order by: []
        -    │               │   └── limit: NONE
        -    │               └── Scan
        -    │                   ├── table: default.date_dim (#1)
        -    │                   ├── filters: [eq(date_dim.d_year (#26), 2001)]
        -    │                   ├── order by: []
        -    │                   └── limit: NONE
        +Join(Inner)
        +├── build keys: [store.s_store_sk (#49)]
        +├── probe keys: [sr_store_sk (#7)]
        +├── other filters: []
        +├── EvalScalar
        +│   ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), Sum(sr_return_amt) (#48) AS (#48)]
        +│   └── Aggregate(Initial)
        +│       ├── group items: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7)]
        +│       ├── aggregate functions: [Sum(sr_return_amt) AS (#48)]
        +│       └── EvalScalar
        +│           ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), store_returns.sr_return_amt (#11) AS (#11), store_returns.sr_returned_date_sk (#0) AS (#148), date_dim.d_date_sk (#20) AS (#149), date_dim.d_year (#26) AS (#150)]
        +│           └── Join(Inner)
        +│               ├── build keys: [date_dim.d_date_sk (#20)]
        +│               ├── probe keys: [store_returns.sr_returned_date_sk (#0)]
        +│               ├── other filters: []
        +│               ├── Scan
        +│               │   ├── table: default.store_returns (#0)
        +│               │   ├── filters: []
        +│               │   ├── order by: []
        +│               │   └── limit: NONE
        +│               └── Scan
        +│                   ├── table: default.date_dim (#1)
        +│                   ├── filters: [eq(date_dim.d_year (#26), 2001)]
        +│                   ├── order by: []
        +│                   └── limit: NONE
        +└── Filter
        +    ├── filters: [eq(store.s_state (#73), 'TN')]
             └── Scan
                 ├── table: default.store (#2)
                 ├── filters: []
                 ├── order by: []
                 └── limit: NONE

    [✓] 5.19: PushDownLimitSort (123.58µs)
      Changes:
         Limit
         ├── limit: [100]
         ├── offset: [0]
         └── Sort
             ├── sort keys: [default.customer.c_customer_id (#79) ASC NULLS LAST]
        -    ├── limit: [NONE]
        +    ├── limit: [100]
             └── EvalScalar
                 ├── scalars: [customer.c_customer_id (#79) AS (#79), ctr1.ctr_total_return (#48) AS (#154), scalar_subquery_147 (#147) AS (#155), store.s_store_sk (#49) AS (#156), ctr1.ctr_store_sk (#7) AS (#157), store.s_state (#73) AS (#158), ctr1.ctr_customer_sk (#3) AS (#159), customer.c_customer_sk (#78) AS (#160)]
                 └── Join(Inner)
                     ├── build keys: [sr_store_sk (#103), sr_store_sk (#103)]
                     ├── probe keys: [sr_store_sk (#7), store.s_store_sk (#49)]
                     ├── other filters: [gt(ctr1.ctr_total_return (#48), scalar_subquery_147 (#147))]
                     ├── Join(Inner)
                     │   ├── build keys: [customer.c_customer_sk (#78)]
                     │   ├── probe keys: [ctr1.ctr_customer_sk (#3)]
                     │   ├── other filters: []
                     │   ├── Join(Inner)
                     │   │   ├── build keys: [store.s_store_sk (#49)]
                     │   │   ├── probe keys: [sr_store_sk (#7)]
                     │   │   ├── other filters: []
                     │   │   ├── EvalScalar
                     │   │   │   ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), Sum(sr_return_amt) (#48) AS (#48)]
                     │   │   │   └── Aggregate(Initial)
                     │   │   │       ├── group items: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7)]
                     │   │   │       ├── aggregate functions: [Sum(sr_return_amt) AS (#48)]
                     │   │   │       └── EvalScalar
                     │   │   │           ├── scalars: [store_returns.sr_customer_sk (#3) AS (#3), store_returns.sr_store_sk (#7) AS (#7), store_returns.sr_return_amt (#11) AS (#11), store_returns.sr_returned_date_sk (#0) AS (#148), date_dim.d_date_sk (#20) AS (#149), date_dim.d_year (#26) AS (#150)]
                     │   │   │           └── Join(Inner)
                     │   │   │               ├── build keys: [date_dim.d_date_sk (#20)]
                     │   │   │               ├── probe keys: [store_returns.sr_returned_date_sk (#0)]
                     │   │   │               ├── other filters: []
                     │   │   │               ├── Scan
                     │   │   │               │   ├── table: default.store_returns (#0)
                     │   │   │               │   ├── filters: []
                     │   │   │               │   ├── order by: []
                     │   │   │               │   └── limit: NONE
                     │   │   │               └── Scan
                     │   │   │                   ├── table: default.date_dim (#1)
                     │   │   │                   ├── filters: [eq(date_dim.d_year (#26), 2001)]
                     │   │   │                   ├── order by: []
                     │   │   │                   └── limit: NONE
                     │   │   └── Scan
                     │   │       ├── table: default.store (#2)
                     │   │       ├── filters: [eq(store.s_state (#73), 'TN')]
                     │   │       ├── order by: []
                     │   │       └── limit: NONE
                     │   └── Scan
                     │       ├── table: default.customer (#3)
                     │       ├── filters: []
                     │       ├── order by: []
                     │       └── limit: NONE
                     └── EvalScalar
                         ├── scalars: [outer.sr_store_sk (#103) AS (#103), multiply(divide(sum(ctr_total_return) (#145), if(eq(count(ctr_total_return) (#146), 0), 1, count(ctr_total_return) (#146))), 1.2) AS (#147)]
                         └── Aggregate(Initial)
                             ├── group items: [outer.sr_store_sk (#103) AS (#103)]
                             ├── aggregate functions: [sum(ctr_total_return) AS (#145), count(ctr_total_return) AS (#146)]
                             └── EvalScalar
                                 ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), outer.sr_store_sk (#103) AS (#103), store_returns.sr_store_sk (#103) AS (#103), ctr2.ctr_total_return (#144) AS (#144), ctr2.ctr_total_return (#144) AS (#144), Sum(sr_return_amt) (#144) AS (#144)]
                                 └── Aggregate(Initial)
                                     ├── group items: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103)]
                                     ├── aggregate functions: [Sum(sr_return_amt) AS (#144)]
                                     └── EvalScalar
                                         ├── scalars: [store_returns.sr_customer_sk (#99) AS (#99), store_returns.sr_store_sk (#103) AS (#103), store_returns.sr_return_amt (#107) AS (#107), store_returns.sr_returned_date_sk (#96) AS (#151), date_dim.d_date_sk (#116) AS (#152), date_dim.d_year (#122) AS (#153)]
                                         └── Join(Inner)
                                             ├── build keys: [date_dim.d_date_sk (#116)]
                                             ├── probe keys: [store_returns.sr_returned_date_sk (#96)]
                                             ├── other filters: []
                                             ├── Scan
                                             │   ├── table: default.store_returns (#4)
                                             │   ├── filters: []
                                             │   ├── order by: []
                                             │   └── limit: NONE
                                             └── Scan
                                                 ├── table: default.date_dim (#5)
                                                 ├── filters: [eq(date_dim.d_year (#122), 2001)]
                                                 ├── order by: []
                                                 └── limit: NONE

    [✓] 5.27: PushDownFilterScan (202.92µs)
      Changes:
         Filter
         ├── filters: [eq(store.s_state (#73), 'TN')]
         └── Scan
             ├── table: default.store (#2)
        -    ├── filters: []
        +    ├── filters: [eq(store.s_state (#73), 'TN')]
             ├── order by: []
             └── limit: NONE

    [✓] 5.28: PushDownPrewhere (352.96µs)
      Changes:
        -Filter
        +Scan
        +├── table: default.store (#2)
         ├── filters: [eq(store.s_state (#73), 'TN')]
        -└── Scan
        -    ├── table: default.store (#2)
        -    ├── filters: [eq(store.s_state (#73), 'TN')]
        -    ├── order by: []
        -    └── limit: NONE
        +├── order by: []
        +└── limit: NONE

Tests

  • Unit Test
  • Logic Test
  • Benchmark Test
  • No Test - For debug

Type of change

  • Bug Fix (non-breaking change which fixes an issue)
  • New Feature (non-breaking change which adds functionality)
  • Breaking Change (fix or feature that could cause existing functionality not to work as expected)
  • Documentation Update
  • Refactoring
  • Performance Improvement
  • Other (please describe):

This change is Reviewable

@github-actions github-actions bot added the pr-chore this PR only has small changes that no need to record, like coding styles. label May 29, 2025
@BohuTANG BohuTANG added the ci-cloud Build docker image for cloud test label May 29, 2025
Copy link
Contributor

Docker Image for PR

  • tag: pr-18032-33ba2ee-1748510489

note: this image tag is only available for internal use.

@BohuTANG BohuTANG force-pushed the optimizer-skip-rule-r1 branch from 5c43d48 to 2feaec9 Compare May 29, 2025 13:04
@BohuTANG BohuTANG added ci-cloud Build docker image for cloud test and removed ci-cloud Build docker image for cloud test labels May 29, 2025
@BohuTANG BohuTANG force-pushed the optimizer-skip-rule-r1 branch from 2feaec9 to b7f708f Compare May 29, 2025 13:38
@BohuTANG BohuTANG removed the ci-cloud Build docker image for cloud test label May 29, 2025
Copy link
Contributor

Docker Image for PR

  • tag: pr-18032-11cad7f-1748525978

note: this image tag is only available for internal use.

@BohuTANG BohuTANG added the ci-cloud Build docker image for cloud test label May 29, 2025
Copy link
Contributor

Docker Image for PR

  • tag: pr-18032-85be918-1748528353

note: this image tag is only available for internal use.

@BohuTANG BohuTANG added ci-cloud Build docker image for cloud test and removed ci-cloud Build docker image for cloud test labels May 29, 2025
Copy link
Contributor

Docker Image for PR

  • tag: pr-18032-ad6be5b-1748532298

note: this image tag is only available for internal use.

@BohuTANG BohuTANG marked this pull request as ready for review May 30, 2025 12:11
@BohuTANG BohuTANG added ci-cloud Build docker image for cloud test and removed ci-cloud Build docker image for cloud test labels May 30, 2025
@BohuTANG BohuTANG changed the title chore(optimizer): optimizer_skip_list setting support skip special rule by name chore(optimizer): enhance the optimizer trace May 30, 2025
Copy link
Contributor

Docker Image for PR

  • tag: pr-18032-3d3b933-1748610495

note: this image tag is only available for internal use.

@BohuTANG BohuTANG force-pushed the optimizer-skip-rule-r1 branch from b76baac to 2e50f84 Compare May 30, 2025 23:39
@BohuTANG BohuTANG merged commit 288835c into databendlabs:main May 31, 2025
148 of 150 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ci-cloud Build docker image for cloud test pr-chore this PR only has small changes that no need to record, like coding styles.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants