Skip to content

feat(parquet): Enable Parquet filter_pushdown by default, with heurstic fallback when projecting few non-filter columns#23420

Open
zhuqi-lucas wants to merge 17 commits into
apache:mainfrom
zhuqi-lucas:qizhu/parquet-pushdown-adaptive-gate
Open

feat(parquet): Enable Parquet filter_pushdown by default, with heurstic fallback when projecting few non-filter columns#23420
zhuqi-lucas wants to merge 17 commits into
apache:mainfrom
zhuqi-lucas:qizhu/parquet-pushdown-adaptive-gate

Conversation

@zhuqi-lucas

@zhuqi-lucas zhuqi-lucas commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Part of #3463 (Enable parquet.pushdown_filters by default) — this is the first step of the two-step split @alamb suggested on #23369: land the heuristic on its own now; flip the default in a follow-up.

Rationale for this change

RowFilter has a fixed per-row machinery overhead that only pays for itself when the wide-column decode it lets us skip is meaningful. When the projection is narrow and the filter columns already cover most of it (typical for GROUP BY col-style queries such as ClickBench Q10/Q11/Q40), the overhead dominates and pushdown regresses.

On ClickBench with pushdown_filters=true, the naive path shows 20 slower / 6 faster / 17 no change vs HEAD. Adding this gate on top gave 4 slower / 5 faster / 34 no change (see #23369 CI comparison), with the remaining 4 "slower" queries all inside the CI noise floor. Q23 keeps its ~21× speedup.

What changes are included in this PR?

Single-file change in ParquetSource::try_pushdown_filters: decline pushdown when the projection contains fewer than 3 columns not referenced by the filter. When declined, pushdown_filters is treated as disabled for that scan — the filter stays above the scan in a FilterExec (correctness preserved) and the predicate is still injected into ParquetSource for stats / bloom / page-index pruning.

Kept intentionally simple:

  • No tuning knob — a hardcoded PUSHDOWN_MIN_NON_FILTER_COLS = 3.
  • No byte-weighted / data-type-aware cost model.
  • Complexity budget reserved for the runtime adaptive-placement work in #22883, which will supersede this heuristic when it lands.

Are these changes tested?

By existing tests: this change only affects scans where the user has opted into pushdown_filters=true (config or ParquetSource::pushdown_filters()), and only in the direction of declining pushdown (falling back to the pre-existing FilterExec path). The default pushdown_filters=false behavior is unchanged, so the default test matrix already covers the fallback path.

The ClickBench comparison on #23369 provides the end-to-end validation.

Are there any user-facing changes?

For users who explicitly enable pushdown_filters=true: their queries with narrow projections (fewer than 3 non-filter columns) will no longer push filters into the Parquet scan. This eliminates the Q10-style regressions those users historically hit. Users on the default (pushdown_filters=false) see zero change.

Follow-up

  • Extended benchmarks across other workloads (per @alamb).
  • Follow-up PR to flip pushdown_filters default to true once we're confident this heuristic holds up.
  • Longer term: #22883 runtime adaptive placement.

cc @alamb

Copilot AI review requested due to automatic review settings July 9, 2026 13:10
@zhuqi-lucas

This comment has been minimized.

@github-actions github-actions Bot added the datasource Changes to the datasource crate label Jul 9, 2026
@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a plan-time heuristic to ParquetSource::try_pushdown_filters to decline Parquet RowFilter pushdown when the scan’s projection is narrow and mostly covered by filter columns, aiming to avoid known regressions when parquet.pushdown_filters is enabled.

Changes:

  • Introduces a hardcoded threshold (PUSHDOWN_MIN_NON_FILTER_COLS = 3) to gate RowFilter pushdown based on projected columns not referenced by filters.
  • Collects referenced filter columns and projected columns (via collect_columns) to compute the “non-filter projected” column count before deciding whether to push down.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread datafusion/datasource-parquet/src/source.rs
@zhuqi-lucas

This comment has been minimized.

@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

@zhuqi-lucas

This comment has been minimized.

@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

@alamb The result looks good also for pushdown benchmark as expected for this PR:

Comparing HEAD and qizhu_parquet-pushdown-adaptive-gate
--------------------
Benchmark clickbench_pushdown.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ QueryHEAD ┃  qizhu_parquet-pushdown-adaptive-gate ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 01.24 / 4.10 ±5.59 / 15.28 ms │          1.22 / 4.01 ±5.45 / 14.91 ms │     no change │
│ QQuery 112.96 / 13.15 ±0.12 / 13.30 ms │        13.57 / 13.86 ±0.28 / 14.39 ms │  1.05x slower │
│ QQuery 236.76 / 37.45 ±0.62 / 38.24 ms │        36.40 / 36.78 ±0.34 / 37.41 ms │     no change │
│ QQuery 331.03 / 31.63 ±0.82 / 33.25 ms │        31.04 / 31.19 ±0.12 / 31.38 ms │     no change │
│ QQuery 4227.12 / 230.25 ±2.21 / 233.66 ms │     226.06 / 227.38 ±0.86 / 228.35 ms │     no change │
│ QQuery 5274.19 / 277.03 ±2.85 / 282.25 ms │     273.51 / 278.30 ±3.38 / 283.52 ms │     no change │
│ QQuery 61.27 / 1.43 ±0.22 / 1.86 ms │           1.26 / 1.40 ±0.21 / 1.82 ms │     no change │
│ QQuery 716.54 / 16.77 ±0.19 / 16.99 ms │        15.08 / 15.15 ±0.05 / 15.24 ms │ +1.11x faster │
│ QQuery 8324.26 / 329.46 ±4.10 / 334.40 ms │     323.61 / 326.84 ±2.56 / 330.68 ms │     no change │
│ QQuery 9455.48 / 469.16 ±8.12 / 476.19 ms │     460.07 / 471.66 ±6.88 / 479.01 ms │     no change │
│ QQuery 1095.23 / 96.87 ±0.94 / 97.86 ms │        69.59 / 71.95 ±1.40 / 73.77 ms │ +1.35x faster │
│ QQuery 11106.87 / 107.79 ±0.95 / 109.41 ms │       83.37 / 87.98 ±7.69 / 103.25 ms │ +1.23x faster │
│ QQuery 12305.74 / 309.05 ±2.69 / 313.44 ms │     268.82 / 272.19 ±2.77 / 277.13 ms │ +1.14x faster │
│ QQuery 13426.27 / 436.14 ±9.16 / 450.87 ms │     370.07 / 375.79 ±5.10 / 383.77 ms │ +1.16x faster │
│ QQuery 14317.97 / 323.55 ±7.98 / 339.25 ms │     286.21 / 289.30 ±4.51 / 298.04 ms │ +1.12x faster │
│ QQuery 15275.93 / 284.48 ±7.07 / 292.21 ms │    274.85 / 287.42 ±11.31 / 305.63 ms │     no change │
│ QQuery 16622.58 / 633.26 ±9.22 / 649.55 ms │     614.49 / 623.14 ±7.08 / 632.86 ms │     no change │
│ QQuery 17634.21 / 637.48 ±2.55 / 641.26 ms │     623.65 / 634.04 ±9.82 / 646.87 ms │     no change │
│ QQuery 181269.87 / 1302.81 ±24.32 / 1345.00 ms │  1264.80 / 1271.50 ±4.83 / 1278.65 ms │     no change │
│ QQuery 1929.25 / 29.59 ±0.21 / 29.76 ms │       28.39 / 36.98 ±15.81 / 68.53 ms │  1.25x slower │
│ QQuery 20517.33 / 526.75 ±11.31 / 547.09 ms │     519.01 / 525.65 ±7.19 / 538.98 ms │     no change │
│ QQuery 21567.02 / 578.69 ±6.88 / 586.50 ms │     521.39 / 526.46 ±4.22 / 532.15 ms │ +1.10x faster │
│ QQuery 22927.00 / 937.75 ±10.48 / 956.68 ms │    990.15 / 993.76 ±4.16 / 1001.68 ms │  1.06x slower │
│ QQuery 23116.66 / 125.46 ±5.87 / 133.61 ms │     116.37 / 124.25 ±5.85 / 132.68 ms │     no change │
│ QQuery 2437.83 / 39.80 ±3.22 / 46.20 ms │        41.28 / 42.28 ±1.88 / 46.05 ms │  1.06x slower │
│ QQuery 25144.81 / 149.31 ±3.42 / 153.64 ms │     112.15 / 119.12 ±7.41 / 132.55 ms │ +1.25x faster │
│ QQuery 2649.92 / 50.96 ±0.86 / 52.31 ms │        42.00 / 42.70 ±0.37 / 43.04 ms │ +1.19x faster │
│ QQuery 27711.11 / 719.52 ±9.57 / 737.84 ms │     673.75 / 683.93 ±6.63 / 692.00 ms │     no change │
│ QQuery 283062.78 / 3091.39 ±19.74 / 3119.93 ms │  3067.46 / 3077.46 ±7.56 / 3085.45 ms │     no change │
│ QQuery 2941.17 / 45.16 ±7.39 / 59.93 ms │        41.71 / 55.51 ±9.80 / 71.56 ms │  1.23x slower │
│ QQuery 30312.51 / 317.83 ±4.76 / 326.73 ms │     307.46 / 314.68 ±4.54 / 321.29 ms │     no change │
│ QQuery 31293.30 / 301.88 ±6.24 / 310.74 ms │    295.00 / 306.48 ±11.50 / 328.33 ms │     no change │
│ QQuery 32926.19 / 968.21 ±25.26 / 1002.64 ms │   950.24 / 994.38 ±23.11 / 1017.51 ms │     no change │
│ QQuery 331451.44 / 1489.42 ±24.90 / 1529.12 ms │ 1474.44 / 1486.27 ±12.10 / 1503.04 ms │     no change │
│ QQuery 341486.33 / 1497.38 ±6.12 / 1505.11 ms │ 1493.04 / 1534.83 ±38.86 / 1585.35 ms │     no change │
│ QQuery 35281.95 / 303.19 ±24.93 / 348.47 ms │    281.46 / 305.21 ±16.40 / 324.06 ms │     no change │
│ QQuery 3667.03 / 73.48 ±4.55 / 80.29 ms │        67.22 / 72.37 ±4.84 / 80.72 ms │     no change │
│ QQuery 3736.59 / 40.92 ±4.82 / 48.33 ms │        35.86 / 41.06 ±4.50 / 47.14 ms │     no change │
│ QQuery 3836.44 / 42.07 ±4.96 / 49.73 ms │        41.81 / 43.46 ±0.90 / 44.56 ms │     no change │
│ QQuery 39141.26 / 143.72 ±2.13 / 147.46 ms │     126.12 / 142.17 ±9.14 / 154.61 ms │     no change │
│ QQuery 4018.39 / 21.19 ±4.94 / 31.06 ms │        14.23 / 16.32 ±2.55 / 21.27 ms │ +1.30x faster │
│ QQuery 4117.21 / 21.75 ±5.29 / 30.45 ms │        14.19 / 14.49 ±0.22 / 14.82 ms │ +1.50x faster │
│ QQuery 4214.71 / 14.98 ±0.21 / 15.23 ms │        13.56 / 13.77 ±0.14 / 13.99 ms │ +1.09x faster │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)17072.27ms │
│ Total Time (qizhu_parquet-pushdown-adaptive-gate)16833.48ms │
│ Average Time (HEAD)397.03ms │
│ Average Time (qizhu_parquet-pushdown-adaptive-gate)391.48ms │
│ Queries Faster12 │
│ Queries Slower5 │
│ Queries with No Change26 │
│ Queries with Failure0 │
└─────────────────────────────────────────────────────┴────────────┘

@alamb alamb left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is great. I think we are very close @zhuqi-lucas

I think we need to do the following :

  1. To make this a config setting that can be disabled (so that people who want to force filter pushdown on (to keep the current behavior) can do so
  2. Add a note to the upgrade guide explaining how to get the original behavior
  3. Add some metric so it is clear from the profiling that this heuristic has happened

I would also like to do some profiling of the query that appears consistently get slower

│ QQuery 29 │        41.17 / 45.16 ±7.39 / 59.93 ms │        41.71 / 55.51 ±9.80 / 71.56 ms │  1.23x slower │

@alamb

alamb commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

I will try and work on some of these items

zhuqi-lucas added a commit to zhuqi-lucas/arrow-datafusion that referenced this pull request Jul 10, 2026
… marker

Per @alamb's review on apache#23420:

1. Config opt-out: new
   `datafusion.execution.parquet.pushdown_filter_narrow_projection_gate`
   (default true). Set to false to restore the pre-existing unconditional
   pushdown behavior. Proto + serde support included so the option
   round-trips through the physical plan.

2. Plan-display marker: when the gate declines pushdown for a scan,
   the ParquetSource fmt_extra output includes
   `pushdown_declined=narrow_projection` so profiling / EXPLAIN
   ANALYZE can see the heuristic fired without needing to correlate
   config against per-query symptoms.

3. Upgrade guide: docs/source/library-user-guide/upgrading/55.0.0.md
   documents the new behavior and how to opt out.

Kept the heuristic itself unchanged (single hardcoded
PUSHDOWN_MIN_NON_FILTER_COLS = 3 with no tuning knob) per @alamb's
'complexity budget' note.
@github-actions github-actions Bot added documentation Improvements or additions to documentation common Related to common crate proto Related to proto crate labels Jul 10, 2026
@zhuqi-lucas

zhuqi-lucas commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

This is great. I think we are very close @zhuqi-lucas

I think we need to do the following :

  1. To make this a config setting that can be disabled (so that people who want to force filter pushdown on (to keep the current behavior) can do so
  2. Add a note to the upgrade guide explaining how to get the original behavior
  3. Add some metric so it is clear from the profiling that this heuristic has happened

I would also like to do some profiling of the query that appears consistently get slower

│ QQuery 29 │        41.17 / 45.16 ±7.39 / 59.93 ms │        41.71 / 55.51 ±9.80 / 71.56 ms │  1.23x slower │

Thanks @alamb , addressed all three points in 1ef3990:

  1. Config opt-out: added datafusion.execution.parquet.pushdown_filter_narrow_projection_gate (default true). Set to false to restore the pre-existing unconditional pushdown. Proto + serde support round-trips through the physical plan.
  2. Plan-display marker: when the gate declines, ParquetSource's fmt_extra output now includes pushdown_declined=narrow_projection so EXPLAIN / EXPLAIN ANALYZE shows it without needing to correlate config against per-query symptoms.
  3. Upgrade guide: docs/source/library-user-guide/upgrading/55.0.0.md documents the new behavior and the opt-out.

Kept the heuristic itself untouched (single hardcoded PUSHDOWN_MIN_NON_FILTER_COLS = 3, no tuning knob, no byte-weighting) per your complexity-budget note.

Q29 is noise, above triggered another run, and it does not have filter.

QQuery 2941.48 / 50.75 ±17.17 / 85.06 ms │       41.41 / 53.52 ±15.73 / 81.05 ms │  1.05x slower

@github-actions

github-actions Bot commented Jul 10, 2026

Copy link
Copy Markdown

Thank you for opening this pull request!

Reviewer note: cargo-semver-checks reported the current version number is not SemVer-compatible with the changes in this pull request (compared against the base branch).

Details
     Cloning apache/main
    Building datafusion v54.0.0 (current)
       Built [ 104.280s] (current)
     Parsing datafusion v54.0.0 (current)
      Parsed [   0.034s] (current)
    Building datafusion v54.0.0 (baseline)
       Built [ 101.508s] (baseline)
     Parsing datafusion v54.0.0 (baseline)
      Parsed [   0.035s] (baseline)
    Checking datafusion v54.0.0 -> v54.0.0 (no change; assume patch)
     Checked [   0.609s] 223 checks: 223 pass, 30 skip
     Summary no semver update required
    Finished [ 208.018s] datafusion
    Building datafusion-common v54.0.0 (current)
       Built [  32.554s] (current)
     Parsing datafusion-common v54.0.0 (current)
      Parsed [   0.059s] (current)
    Building datafusion-common v54.0.0 (baseline)
       Built [  32.966s] (baseline)
     Parsing datafusion-common v54.0.0 (baseline)
      Parsed [   0.060s] (baseline)
    Checking datafusion-common v54.0.0 -> v54.0.0 (no change; assume patch)
     Checked [   0.665s] 223 checks: 222 pass, 1 fail, 0 warn, 30 skip

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field ParquetOptions.pushdown_filter_mode in /home/runner/work/datafusion/datafusion/datafusion/common/src/config.rs:1169

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  67.281s] datafusion-common
    Building datafusion-datasource-parquet v54.0.0 (current)
       Built [  41.639s] (current)
     Parsing datafusion-datasource-parquet v54.0.0 (current)
      Parsed [   0.030s] (current)
    Building datafusion-datasource-parquet v54.0.0 (baseline)
       Built [  41.587s] (baseline)
     Parsing datafusion-datasource-parquet v54.0.0 (baseline)
      Parsed [   0.031s] (baseline)
    Checking datafusion-datasource-parquet v54.0.0 -> v54.0.0 (no change; assume patch)
     Checked [   0.161s] 223 checks: 223 pass, 30 skip
     Summary no semver update required
    Finished [  84.454s] datafusion-datasource-parquet
    Building datafusion-proto v54.0.0 (current)
       Built [  57.305s] (current)
     Parsing datafusion-proto v54.0.0 (current)
      Parsed [   0.018s] (current)
    Building datafusion-proto v54.0.0 (baseline)
       Built [  58.352s] (baseline)
     Parsing datafusion-proto v54.0.0 (baseline)
      Parsed [   0.019s] (baseline)
    Checking datafusion-proto v54.0.0 -> v54.0.0 (no change; assume patch)
     Checked [   0.221s] 223 checks: 223 pass, 30 skip
     Summary no semver update required
    Finished [ 117.174s] datafusion-proto
    Building datafusion-proto-common v54.0.0 (current)
       Built [  21.011s] (current)
     Parsing datafusion-proto-common v54.0.0 (current)
      Parsed [   0.048s] (current)
    Building datafusion-proto-common v54.0.0 (baseline)
       Built [  21.070s] (baseline)
     Parsing datafusion-proto-common v54.0.0 (baseline)
      Parsed [   0.049s] (baseline)
    Checking datafusion-proto-common v54.0.0 -> v54.0.0 (no change; assume patch)
     Checked [   1.092s] 223 checks: 222 pass, 1 fail, 0 warn, 30 skip

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field ParquetOptions.pushdown_filter_mode in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:819
  field ParquetOptions.pushdown_filter_mode in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:819
  field ParquetOptions.pushdown_filter_mode in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:819

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  44.065s] datafusion-proto-common
    Building datafusion-proto-models v54.0.0 (current)
       Built [  25.031s] (current)
     Parsing datafusion-proto-models v54.0.0 (current)
      Parsed [   0.138s] (current)
    Building datafusion-proto-models v54.0.0 (baseline)
       Built [  25.804s] (baseline)
     Parsing datafusion-proto-models v54.0.0 (baseline)
      Parsed [   0.135s] (baseline)
    Checking datafusion-proto-models v54.0.0 -> v54.0.0 (no change; assume patch)
     Checked [   1.826s] 223 checks: 222 pass, 1 fail, 0 warn, 30 skip

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field ParquetOptions.pushdown_filter_mode in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/datafusion_proto_common.rs:819
  field ParquetOptions.pushdown_filter_mode in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/datafusion_proto_common.rs:819

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  54.112s] datafusion-proto-models
    Building datafusion-sqllogictest v54.0.0 (current)
       Built [ 179.144s] (current)
     Parsing datafusion-sqllogictest v54.0.0 (current)
      Parsed [   0.020s] (current)
    Building datafusion-sqllogictest v54.0.0 (baseline)
       Built [ 178.824s] (baseline)
     Parsing datafusion-sqllogictest v54.0.0 (baseline)
      Parsed [   0.021s] (baseline)
    Checking datafusion-sqllogictest v54.0.0 -> v54.0.0 (no change; assume patch)
     Checked [   0.091s] 223 checks: 223 pass, 30 skip
     Summary no semver update required
    Finished [ 360.567s] datafusion-sqllogictest

@github-actions github-actions Bot added the auto detected api change Auto detected API change label Jul 10, 2026
zhuqi-lucas added a commit to zhuqi-lucas/arrow-datafusion that referenced this pull request Jul 10, 2026
Per Copilot's review on apache#23420 line 887: TableSchema layout is
[file, partition, virtual], and only file columns are actually decoded
from parquet. Partition and virtual columns don't incur decode cost,
so counting them as 'non-filter projected cols' can keep pushdown
enabled for partitioned tables whose *file* projection is actually
narrow — reintroducing the very regressions this heuristic protects
against.

Now both the filter-column set and the non-filter projected count
restrict to indices `< file_schema().fields().len()`.
@github-actions github-actions Bot added the core Core DataFusion crate label Jul 10, 2026
Two commits in one:

1. Add dynamic-filter detection to the gate: never gate a scan whose
   incoming filters include a dynamic filter (e.g. TopK's heap
   threshold). This is defensive — for cases where the dynamic filter
   arrives via `try_pushdown_filters`, keep pushdown so the runtime
   RG pruner can fire.

2. Opt existing dynamic-RG-pruning and limit-pruning tests out of the
   gate via config. TopK's dynamic filter is injected AFTER
   `try_pushdown_filters` runs, so the gate cannot detect it at
   plan-time from the filters parameter. These tests specifically
   exercise the co-existence of RowFilter + dynamic RG pruning +
   page-index selection, which needs pushdown active.
…shdown flag

Two refinements after digging into CI test failures:

1. Check both incoming filters AND self.predicate for dynamic filters
   before firing the gate. TopK's DynamicFilterPhysicalExpr can arrive
   through either channel, so both need to be inspected.

2. When the gate declines pushdown for the current filter set, don't
   persist `pushdown_filters=false` onto the source. A subsequent
   `try_pushdown_filters` call (typically from TopK dynamic filter
   injection later in the pipeline) needs the source still marked
   pushdown-eligible so the dynamic filter can install and drive
   RG pruning.

Neither is a full fix for the narrow-projection + TopK case (the
runtime RG-prune cascade requires both filters pushed together, which
isn't reachable through plan-time inspection alone), but they narrow
the impact. The remaining gap is handled by the test-side config
opt-out (this commit also restores it, with an explanation).
test_try_pushdown_filters_rejects_virtual_column_refs constructs a
ParquetSource whose file schema has only one column, all of which
appears in the filter set. That makes non-filter projected file
columns = 0, tripping the narrow-projection gate and returning
PushedDown::No for every filter — masking the actual virtual-column
rejection behavior the test is verifying.

Disable the gate for this test so the assertions test the pushable /
virtual-column split independently of the projection-width gate.
limit_pruning.slt and parquet_filter_pushdown.slt both explicitly
enable pushdown_filters=true and assert plan shapes that require the
FilterExec to be absorbed into the DataSourceExec (i.e. the
unconditional-pushdown path). The narrow-projection gate would decline
pushdown for many of those cases and leave a visible FilterExec above
the scan, breaking the expected plan output.

Opt these test files out of the gate (and RESET at the end so config
state doesn't leak to sibling test files).
…iles

push_down_filter_regression.slt, push_down_filter_parquet.slt, and
sort_pushdown.slt all explicitly enable pushdown_filters=true and
assert plan shapes that require the FilterExec to be absorbed into
the DataSourceExec. The narrow-projection gate would decline pushdown
for narrow-projection scenarios and leave a visible FilterExec above
the scan, breaking the expected plan output.

Same pattern as limit_pruning.slt / parquet_filter_pushdown.slt —
opt out at the top and RESET at the end.
…er_pushdown_config and explain_analyze

These files exercise pushdown_filters=true directly and assert the
plan has FilterExec absorbed into DataSourceExec. Disable the new
narrow-projection gate in the affected sections so the expected
plans keep matching regardless of projection width.
@zhuqi-lucas zhuqi-lucas force-pushed the qizhu/parquet-pushdown-adaptive-gate branch from e45c819 to 32f09b7 Compare July 10, 2026 14:26
@alamb

alamb commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Given the ClickBench trade (5F/4S/34NC vs 6F/20S/17NC), I think shipping as-is + opt-out is the pragmatic call. LMK if you'd rather defer.

I am reviewing this one carefully -- the name of the option I think is pretty confusing. I am trying to figure out a better name / way to communicate this to users

@alamb alamb changed the title feat(parquet): decline pushdown when projection has few non-filter columns feat(parquet): Enable Parquet filter_pushdown by default, with heurstic fallback when projecting few non-filter columns Jul 10, 2026

@alamb alamb left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @zhuqi-lucas -- thank you so much for this. I hope you don't mind but I pushed a few commits to this PR.

The biggest change was the naming of the config value -- basically I think we need:

  1. A way for users to go back to the 54 behavior
  2. A space for future dynamic filtering - e.g. #15512

I came up with an enum based approach that I think satisfies both needs -- can you give it a read and let me know what you think? I also merged up from main and resolved some CI failures

I think we can then add a similar ParquetReorderFilterMode as @adriangb adds more dynamic ways to reorder the filter during runtime

If you agree, I think we should get a few more eyes on this from people who care about parquet performance

@alamb

alamb commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

run benchmark clickbench_partitioned

@alamb

alamb commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

run benchmarks

}
}

/// Strategy for filter pushdown in Parquet scan when

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is my proposed configuration API -- an enum to control the filter pushdown behavior (and we will add fancier ones here like auto 😎 )

@alamb

alamb commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

I think we probably need to clean up the description of this PR too

@alamb alamb left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is ready to merge when

  1. We are happy with the benchmark resulst
  2. We have maybe sent a notice around to the list

Once we have confirmation about benchmark results, I think we should then tag a few more people for review

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4939749732-965-5cnsq 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing qizhu/parquet-pushdown-adaptive-gate (f4f8666) to 844c62e (merge-base) diff using: clickbench_partitioned
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4939750705-967-kh7t7 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing qizhu/parquet-pushdown-adaptive-gate (f4f8666) to 844c62e (merge-base) diff using: tpcds
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4939750705-968-2pkx6 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing qizhu/parquet-pushdown-adaptive-gate (f4f8666) to 844c62e (merge-base) diff using: tpch
Results will be posted here when complete


File an issue against this benchmark runner

let table_pushdown_enabled = self.pushdown_filters();
let pushdown_filters = table_pushdown_enabled || config_pushdown_enabled;
let mut pushdown_filters = table_pushdown_enabled || config_pushdown_enabled;
// Narrow-projection gate (issue #3463, discussion on PR #23369):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can probably reduce this comment substantially

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4939750705-966-z4kp4 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing qizhu/parquet-pushdown-adaptive-gate (f4f8666) to 844c62e (merge-base) diff using: clickbench_partitioned
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and qizhu_parquet-pushdown-adaptive-gate
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃ qizhu_parquet-pushdown-adaptive-gate ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 38.65 / 39.54 ±1.17 / 41.81 ms │       38.88 / 40.04 ±1.36 / 41.84 ms │     no change │
│ QQuery 2  │ 19.33 / 19.94 ±0.54 / 20.90 ms │       19.37 / 19.80 ±0.71 / 21.21 ms │     no change │
│ QQuery 3  │ 31.19 / 33.51 ±2.12 / 36.97 ms │       32.02 / 33.85 ±1.07 / 35.30 ms │     no change │
│ QQuery 4  │ 17.67 / 18.35 ±0.35 / 18.61 ms │       17.28 / 17.82 ±0.62 / 18.96 ms │     no change │
│ QQuery 5  │ 38.74 / 41.84 ±1.89 / 43.92 ms │       40.42 / 41.12 ±0.43 / 41.70 ms │     no change │
│ QQuery 6  │ 16.29 / 16.43 ±0.11 / 16.54 ms │       16.36 / 16.70 ±0.19 / 16.95 ms │     no change │
│ QQuery 7  │ 43.51 / 45.11 ±1.33 / 47.17 ms │       44.29 / 46.58 ±1.47 / 48.21 ms │     no change │
│ QQuery 8  │ 43.31 / 44.31 ±1.27 / 46.82 ms │       43.32 / 43.96 ±0.44 / 44.47 ms │     no change │
│ QQuery 9  │ 50.06 / 51.15 ±0.88 / 52.51 ms │       50.40 / 51.53 ±1.17 / 53.81 ms │     no change │
│ QQuery 10 │ 42.72 / 43.14 ±0.77 / 44.68 ms │       42.45 / 42.59 ±0.09 / 42.73 ms │     no change │
│ QQuery 11 │ 13.41 / 13.68 ±0.21 / 14.06 ms │       13.60 / 13.82 ±0.18 / 14.13 ms │     no change │
│ QQuery 12 │ 24.23 / 24.69 ±0.40 / 25.21 ms │       23.94 / 24.52 ±0.31 / 24.79 ms │     no change │
│ QQuery 13 │ 34.78 / 35.93 ±1.50 / 38.82 ms │       31.87 / 33.94 ±1.61 / 36.73 ms │ +1.06x faster │
│ QQuery 14 │ 24.12 / 24.30 ±0.17 / 24.55 ms │       23.88 / 24.56 ±0.68 / 25.84 ms │     no change │
│ QQuery 15 │ 31.73 / 32.32 ±0.61 / 33.11 ms │       31.57 / 32.10 ±0.72 / 33.50 ms │     no change │
│ QQuery 16 │ 14.06 / 14.27 ±0.22 / 14.66 ms │       14.20 / 14.33 ±0.13 / 14.58 ms │     no change │
│ QQuery 17 │ 75.80 / 76.44 ±0.68 / 77.56 ms │       74.82 / 75.82 ±0.75 / 77.02 ms │     no change │
│ QQuery 18 │ 60.32 / 62.09 ±1.28 / 64.06 ms │       60.04 / 60.80 ±0.59 / 61.82 ms │     no change │
│ QQuery 19 │ 33.74 / 34.74 ±1.02 / 36.43 ms │       33.67 / 33.92 ±0.19 / 34.23 ms │     no change │
│ QQuery 20 │ 32.31 / 32.62 ±0.26 / 32.94 ms │       32.49 / 32.84 ±0.28 / 33.33 ms │     no change │
│ QQuery 21 │ 53.49 / 55.20 ±1.34 / 57.36 ms │       54.92 / 56.50 ±0.85 / 57.30 ms │     no change │
│ QQuery 22 │ 14.03 / 14.28 ±0.14 / 14.43 ms │       13.88 / 14.18 ±0.21 / 14.45 ms │     no change │
└───────────┴────────────────────────────────┴──────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 773.87ms │
│ Total Time (qizhu_parquet-pushdown-adaptive-gate)   │ 771.32ms │
│ Average Time (HEAD)                                 │  35.18ms │
│ Average Time (qizhu_parquet-pushdown-adaptive-gate) │  35.06ms │
│ Queries Faster                                      │        1 │
│ Queries Slower                                      │        0 │
│ Queries with No Change                              │       21 │
│ Queries with Failure                                │        0 │
└─────────────────────────────────────────────────────┴──────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 5.0s
Peak memory 1.2 GiB
Avg memory 509.3 MiB
CPU user 22.4s
CPU sys 1.7s
Peak spill 0 B

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 1.2 GiB
Avg memory 512.9 MiB
CPU user 22.4s
CPU sys 1.8s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and qizhu_parquet-pushdown-adaptive-gate
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃  qizhu_parquet-pushdown-adaptive-gate ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │           5.59 / 6.06 ±0.91 / 7.89 ms │           5.33 / 5.81 ±0.90 / 7.62 ms │     no change │
│ QQuery 2  │        81.91 / 82.43 ±0.44 / 82.98 ms │        81.45 / 81.63 ±0.16 / 81.92 ms │     no change │
│ QQuery 3  │        29.56 / 29.84 ±0.21 / 30.06 ms │        29.63 / 29.72 ±0.07 / 29.83 ms │     no change │
│ QQuery 4  │     494.86 / 498.64 ±3.50 / 503.96 ms │     486.79 / 496.70 ±5.82 / 501.82 ms │     no change │
│ QQuery 5  │        52.18 / 52.62 ±0.46 / 53.49 ms │        51.50 / 51.92 ±0.44 / 52.74 ms │     no change │
│ QQuery 6  │        36.54 / 37.05 ±0.28 / 37.33 ms │        36.70 / 37.08 ±0.19 / 37.23 ms │     no change │
│ QQuery 7  │       94.76 / 96.26 ±2.13 / 100.47 ms │        95.03 / 95.29 ±0.25 / 95.73 ms │     no change │
│ QQuery 8  │        37.46 / 37.94 ±0.45 / 38.71 ms │        36.92 / 38.57 ±1.99 / 42.28 ms │     no change │
│ QQuery 9  │        52.90 / 54.90 ±2.05 / 58.86 ms │        51.43 / 53.04 ±0.84 / 53.78 ms │     no change │
│ QQuery 10 │        63.93 / 64.20 ±0.20 / 64.41 ms │        63.83 / 64.01 ±0.23 / 64.45 ms │     no change │
│ QQuery 11 │     306.39 / 308.73 ±3.45 / 315.43 ms │     300.24 / 304.45 ±4.32 / 311.48 ms │     no change │
│ QQuery 12 │        28.81 / 29.20 ±0.29 / 29.55 ms │        28.54 / 28.91 ±0.24 / 29.16 ms │     no change │
│ QQuery 13 │     118.88 / 120.85 ±2.00 / 124.42 ms │     118.08 / 120.42 ±1.67 / 123.30 ms │     no change │
│ QQuery 14 │     413.00 / 416.99 ±2.51 / 420.53 ms │     412.78 / 418.83 ±3.29 / 421.81 ms │     no change │
│ QQuery 15 │        57.55 / 58.41 ±0.87 / 59.78 ms │        57.52 / 57.99 ±0.39 / 58.53 ms │     no change │
│ QQuery 16 │           6.58 / 6.78 ±0.24 / 7.25 ms │           6.65 / 6.81 ±0.16 / 7.10 ms │     no change │
│ QQuery 17 │        80.77 / 81.68 ±1.18 / 83.96 ms │        81.17 / 81.94 ±1.36 / 84.66 ms │     no change │
│ QQuery 18 │     123.99 / 127.76 ±2.91 / 132.64 ms │     124.42 / 126.11 ±1.67 / 129.26 ms │     no change │
│ QQuery 19 │        41.92 / 42.24 ±0.34 / 42.86 ms │        41.80 / 42.12 ±0.36 / 42.76 ms │     no change │
│ QQuery 20 │        35.98 / 36.50 ±0.44 / 37.07 ms │        35.72 / 36.93 ±0.97 / 38.58 ms │     no change │
│ QQuery 21 │        17.62 / 18.03 ±0.27 / 18.33 ms │        17.84 / 18.02 ±0.17 / 18.22 ms │     no change │
│ QQuery 22 │        62.97 / 63.72 ±0.59 / 64.41 ms │        62.79 / 63.99 ±0.80 / 65.05 ms │     no change │
│ QQuery 23 │     342.40 / 349.21 ±5.19 / 357.91 ms │    345.68 / 358.21 ±13.27 / 383.84 ms │     no change │
│ QQuery 24 │     226.60 / 229.69 ±2.85 / 233.62 ms │     226.85 / 229.10 ±2.95 / 234.66 ms │     no change │
│ QQuery 25 │     111.59 / 113.23 ±1.47 / 115.80 ms │     111.24 / 112.04 ±1.00 / 114.02 ms │     no change │
│ QQuery 26 │        59.17 / 60.61 ±2.66 / 65.94 ms │        57.96 / 60.25 ±2.46 / 64.70 ms │     no change │
│ QQuery 27 │           6.27 / 6.43 ±0.17 / 6.77 ms │           6.32 / 6.49 ±0.18 / 6.83 ms │     no change │
│ QQuery 28 │        56.88 / 60.97 ±2.12 / 62.95 ms │        56.69 / 60.57 ±2.06 / 62.39 ms │     no change │
│ QQuery 29 │      98.83 / 100.33 ±1.35 / 102.51 ms │      97.47 / 100.49 ±3.05 / 105.77 ms │     no change │
│ QQuery 30 │        32.79 / 34.52 ±2.16 / 38.71 ms │        33.01 / 33.85 ±0.83 / 35.31 ms │     no change │
│ QQuery 31 │     113.09 / 114.19 ±1.08 / 115.88 ms │     111.49 / 112.33 ±0.86 / 113.74 ms │     no change │
│ QQuery 32 │        21.12 / 21.29 ±0.10 / 21.41 ms │        20.58 / 20.77 ±0.16 / 21.04 ms │     no change │
│ QQuery 33 │        38.12 / 39.10 ±1.52 / 42.11 ms │        37.71 / 39.72 ±2.99 / 45.55 ms │     no change │
│ QQuery 34 │         9.83 / 10.55 ±0.82 / 12.11 ms │         9.98 / 10.34 ±0.36 / 10.88 ms │     no change │
│ QQuery 35 │        73.15 / 73.85 ±0.94 / 75.70 ms │        72.37 / 73.93 ±1.71 / 77.22 ms │     no change │
│ QQuery 36 │           5.71 / 5.83 ±0.18 / 6.20 ms │           5.75 / 5.91 ±0.23 / 6.36 ms │     no change │
│ QQuery 37 │           6.69 / 6.85 ±0.11 / 6.98 ms │           6.92 / 6.98 ±0.03 / 7.01 ms │     no change │
│ QQuery 38 │        62.93 / 63.57 ±0.71 / 64.81 ms │        62.31 / 62.95 ±0.41 / 63.47 ms │     no change │
│ QQuery 39 │        91.01 / 92.35 ±1.12 / 94.38 ms │        90.51 / 92.94 ±1.36 / 94.56 ms │     no change │
│ QQuery 40 │        23.95 / 24.18 ±0.21 / 24.44 ms │        24.28 / 24.66 ±0.34 / 25.28 ms │     no change │
│ QQuery 41 │        11.93 / 12.07 ±0.11 / 12.21 ms │        11.63 / 11.82 ±0.33 / 12.47 ms │     no change │
│ QQuery 42 │        24.16 / 25.13 ±0.75 / 26.09 ms │        23.99 / 24.49 ±0.44 / 25.24 ms │     no change │
│ QQuery 43 │           5.12 / 5.21 ±0.13 / 5.47 ms │           5.00 / 5.11 ±0.15 / 5.39 ms │     no change │
│ QQuery 44 │          9.43 / 9.60 ±0.22 / 10.03 ms │           9.41 / 9.49 ±0.05 / 9.54 ms │     no change │
│ QQuery 45 │        38.94 / 39.23 ±0.26 / 39.72 ms │        38.70 / 39.17 ±0.43 / 39.93 ms │     no change │
│ QQuery 46 │        11.52 / 11.80 ±0.20 / 12.13 ms │        11.83 / 12.12 ±0.25 / 12.42 ms │     no change │
│ QQuery 47 │     227.50 / 234.17 ±6.62 / 243.07 ms │     228.21 / 233.34 ±5.45 / 242.02 ms │     no change │
│ QQuery 48 │        96.86 / 97.41 ±0.56 / 98.39 ms │        96.30 / 97.49 ±1.14 / 99.39 ms │     no change │
│ QQuery 49 │        78.26 / 78.65 ±0.30 / 79.13 ms │        76.05 / 79.29 ±5.06 / 89.36 ms │     no change │
│ QQuery 50 │        59.97 / 61.92 ±1.92 / 65.57 ms │        60.03 / 61.29 ±1.15 / 63.47 ms │     no change │
│ QQuery 51 │        91.36 / 94.74 ±2.09 / 97.87 ms │        91.98 / 94.33 ±1.28 / 95.61 ms │     no change │
│ QQuery 52 │        24.53 / 24.84 ±0.28 / 25.32 ms │        24.27 / 24.39 ±0.13 / 24.61 ms │     no change │
│ QQuery 53 │        30.36 / 32.02 ±2.47 / 36.92 ms │        29.71 / 32.53 ±4.63 / 41.74 ms │     no change │
│ QQuery 54 │        56.44 / 56.95 ±0.44 / 57.58 ms │        55.85 / 56.99 ±0.82 / 58.40 ms │     no change │
│ QQuery 55 │        23.88 / 24.37 ±0.56 / 25.45 ms │        23.34 / 23.95 ±0.62 / 25.11 ms │     no change │
│ QQuery 56 │        40.64 / 41.19 ±0.72 / 42.59 ms │        38.80 / 39.51 ±0.47 / 40.12 ms │     no change │
│ QQuery 57 │     179.37 / 181.41 ±1.49 / 183.86 ms │     177.35 / 179.12 ±1.53 / 181.86 ms │     no change │
│ QQuery 58 │     117.30 / 118.98 ±1.21 / 120.29 ms │     116.74 / 118.49 ±1.72 / 121.60 ms │     no change │
│ QQuery 59 │     121.09 / 121.36 ±0.25 / 121.80 ms │     119.17 / 119.66 ±0.36 / 120.15 ms │     no change │
│ QQuery 60 │        40.18 / 41.08 ±1.27 / 43.52 ms │        39.55 / 40.29 ±0.62 / 41.12 ms │     no change │
│ QQuery 61 │        12.38 / 12.53 ±0.20 / 12.89 ms │        12.01 / 13.40 ±2.45 / 18.29 ms │  1.07x slower │
│ QQuery 62 │        47.03 / 47.89 ±0.94 / 49.71 ms │        46.93 / 47.43 ±0.48 / 48.20 ms │     no change │
│ QQuery 63 │        30.44 / 30.86 ±0.31 / 31.21 ms │        29.78 / 30.05 ±0.26 / 30.39 ms │     no change │
│ QQuery 64 │     414.65 / 420.50 ±3.54 / 424.35 ms │     412.72 / 415.31 ±1.99 / 418.06 ms │     no change │
│ QQuery 65 │     149.08 / 153.93 ±2.51 / 156.34 ms │     149.46 / 151.86 ±1.55 / 154.10 ms │     no change │
│ QQuery 66 │        80.73 / 81.70 ±0.61 / 82.51 ms │        79.58 / 80.42 ±0.69 / 81.53 ms │     no change │
│ QQuery 67 │     244.30 / 250.42 ±7.48 / 264.49 ms │     239.14 / 245.98 ±4.58 / 252.41 ms │     no change │
│ QQuery 68 │        12.42 / 15.32 ±5.52 / 26.36 ms │        11.60 / 11.89 ±0.24 / 12.33 ms │ +1.29x faster │
│ QQuery 69 │        59.05 / 60.57 ±1.58 / 63.45 ms │        57.18 / 61.07 ±5.31 / 71.56 ms │     no change │
│ QQuery 70 │     108.28 / 111.97 ±5.23 / 122.35 ms │     105.20 / 107.76 ±2.82 / 113.17 ms │     no change │
│ QQuery 71 │        36.37 / 39.31 ±4.73 / 48.76 ms │        34.84 / 35.60 ±0.53 / 36.39 ms │ +1.10x faster │
│ QQuery 72 │ 2215.98 / 2313.42 ±86.97 / 2427.18 ms │ 2146.55 / 2216.16 ±41.11 / 2270.62 ms │     no change │
│ QQuery 73 │        10.03 / 10.18 ±0.16 / 10.47 ms │         9.39 / 14.96 ±9.33 / 33.51 ms │  1.47x slower │
│ QQuery 74 │     173.00 / 175.58 ±3.22 / 181.74 ms │     170.88 / 175.16 ±3.91 / 182.20 ms │     no change │
│ QQuery 75 │     150.01 / 150.65 ±1.03 / 152.69 ms │     149.58 / 151.12 ±1.86 / 154.72 ms │     no change │
│ QQuery 76 │        35.77 / 35.95 ±0.12 / 36.09 ms │        35.42 / 36.10 ±0.38 / 36.54 ms │     no change │
│ QQuery 77 │        61.65 / 62.05 ±0.41 / 62.76 ms │        61.63 / 62.90 ±1.46 / 65.65 ms │     no change │
│ QQuery 78 │     199.41 / 202.36 ±3.76 / 209.16 ms │     198.85 / 205.36 ±6.38 / 215.65 ms │     no change │
│ QQuery 79 │        68.29 / 70.55 ±2.67 / 74.78 ms │        67.69 / 68.29 ±0.54 / 68.97 ms │     no change │
│ QQuery 80 │     100.37 / 101.60 ±1.20 / 103.34 ms │     100.17 / 100.80 ±0.46 / 101.48 ms │     no change │
│ QQuery 81 │        26.14 / 26.52 ±0.26 / 26.81 ms │        26.61 / 30.91 ±6.69 / 44.15 ms │  1.17x slower │
│ QQuery 82 │        16.59 / 16.90 ±0.36 / 17.59 ms │        16.81 / 17.51 ±1.10 / 19.68 ms │     no change │
│ QQuery 83 │        40.77 / 43.57 ±5.17 / 53.91 ms │        40.32 / 40.97 ±0.57 / 41.86 ms │ +1.06x faster │
│ QQuery 84 │        30.63 / 32.44 ±2.90 / 38.22 ms │        30.14 / 30.49 ±0.38 / 31.05 ms │ +1.06x faster │
│ QQuery 85 │     107.69 / 108.50 ±0.61 / 109.59 ms │     107.15 / 110.68 ±3.22 / 116.06 ms │     no change │
│ QQuery 86 │        25.26 / 25.69 ±0.22 / 25.86 ms │        25.34 / 26.22 ±0.62 / 27.03 ms │     no change │
│ QQuery 87 │        63.63 / 64.77 ±0.79 / 65.76 ms │        63.24 / 64.37 ±0.89 / 65.37 ms │     no change │
│ QQuery 88 │        63.08 / 63.90 ±0.42 / 64.16 ms │        62.10 / 63.31 ±0.61 / 63.69 ms │     no change │
│ QQuery 89 │        36.24 / 36.52 ±0.22 / 36.83 ms │        36.08 / 38.92 ±4.63 / 48.15 ms │  1.07x slower │
│ QQuery 90 │        17.41 / 17.66 ±0.21 / 17.95 ms │        17.09 / 17.52 ±0.31 / 17.95 ms │     no change │
│ QQuery 91 │        46.34 / 48.23 ±2.40 / 52.98 ms │        46.87 / 47.24 ±0.21 / 47.50 ms │     no change │
│ QQuery 92 │        30.11 / 31.29 ±1.28 / 33.70 ms │        29.17 / 29.53 ±0.24 / 29.79 ms │ +1.06x faster │
│ QQuery 93 │        50.18 / 51.02 ±0.59 / 51.82 ms │        49.92 / 51.01 ±0.74 / 52.09 ms │     no change │
│ QQuery 94 │        38.46 / 38.91 ±0.29 / 39.22 ms │        38.66 / 39.17 ±0.41 / 39.91 ms │     no change │
│ QQuery 95 │        81.61 / 82.54 ±1.19 / 84.85 ms │        82.55 / 84.96 ±4.17 / 93.28 ms │     no change │
│ QQuery 96 │        24.90 / 25.74 ±1.47 / 28.68 ms │        24.40 / 24.64 ±0.18 / 24.90 ms │     no change │
│ QQuery 97 │        47.68 / 47.79 ±0.10 / 47.92 ms │        46.64 / 47.31 ±0.51 / 47.94 ms │     no change │
│ QQuery 98 │        43.53 / 43.68 ±0.12 / 43.91 ms │        43.79 / 44.36 ±0.45 / 44.97 ms │     no change │
│ QQuery 99 │        71.02 / 71.26 ±0.21 / 71.59 ms │        70.48 / 72.40 ±2.77 / 77.90 ms │     no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 10213.99ms │
│ Total Time (qizhu_parquet-pushdown-adaptive-gate)   │ 10087.84ms │
│ Average Time (HEAD)                                 │   103.17ms │
│ Average Time (qizhu_parquet-pushdown-adaptive-gate) │   101.90ms │
│ Queries Faster                                      │          5 │
│ Queries Slower                                      │          4 │
│ Queries with No Change                              │         90 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 55.0s
Peak memory 2.0 GiB
Avg memory 1.4 GiB
CPU user 233.4s
CPU sys 5.7s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 55.0s
Peak memory 1.9 GiB
Avg memory 1.3 GiB
CPU user 232.2s
CPU sys 5.8s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and qizhu_parquet-pushdown-adaptive-gate
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃  qizhu_parquet-pushdown-adaptive-gate ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.20 / 4.05 ±5.55 / 15.15 ms │          1.21 / 3.97 ±5.41 / 14.79 ms │     no change │
│ QQuery 1  │        12.51 / 12.89 ±0.20 / 13.03 ms │        12.54 / 12.96 ±0.24 / 13.22 ms │     no change │
│ QQuery 2  │        36.66 / 36.90 ±0.19 / 37.22 ms │        36.40 / 36.61 ±0.16 / 36.86 ms │     no change │
│ QQuery 3  │        30.87 / 32.39 ±1.24 / 34.16 ms │        30.85 / 31.74 ±0.78 / 32.85 ms │     no change │
│ QQuery 4  │     222.79 / 226.40 ±2.13 / 228.88 ms │     222.00 / 225.92 ±3.35 / 230.16 ms │     no change │
│ QQuery 5  │     272.39 / 274.75 ±1.69 / 276.80 ms │     273.27 / 276.07 ±1.82 / 278.23 ms │     no change │
│ QQuery 6  │           1.25 / 1.42 ±0.24 / 1.89 ms │           1.29 / 1.44 ±0.24 / 1.91 ms │     no change │
│ QQuery 7  │        14.09 / 14.26 ±0.21 / 14.66 ms │        14.10 / 14.64 ±0.31 / 14.95 ms │     no change │
│ QQuery 8  │     325.70 / 328.71 ±1.70 / 330.91 ms │     329.42 / 331.44 ±1.51 / 333.08 ms │     no change │
│ QQuery 9  │     452.49 / 459.69 ±5.41 / 466.82 ms │    447.14 / 463.82 ±10.27 / 476.29 ms │     no change │
│ QQuery 10 │        69.53 / 70.70 ±0.80 / 71.91 ms │        70.38 / 71.75 ±1.30 / 73.42 ms │     no change │
│ QQuery 11 │        80.89 / 82.65 ±1.57 / 84.64 ms │        82.58 / 83.30 ±0.87 / 85.01 ms │     no change │
│ QQuery 12 │     276.81 / 280.27 ±2.32 / 282.92 ms │     267.81 / 272.43 ±4.47 / 280.63 ms │     no change │
│ QQuery 13 │     380.35 / 392.06 ±9.22 / 400.88 ms │     367.28 / 375.01 ±7.09 / 386.03 ms │     no change │
│ QQuery 14 │     289.90 / 295.63 ±3.30 / 300.10 ms │     281.66 / 286.00 ±3.43 / 291.03 ms │     no change │
│ QQuery 15 │     279.35 / 292.34 ±9.91 / 309.46 ms │     276.65 / 283.32 ±4.30 / 288.34 ms │     no change │
│ QQuery 16 │    627.93 / 643.08 ±14.97 / 671.31 ms │     611.17 / 625.22 ±9.63 / 641.25 ms │     no change │
│ QQuery 17 │     625.10 / 633.09 ±7.05 / 643.56 ms │    623.51 / 634.04 ±10.78 / 654.60 ms │     no change │
│ QQuery 18 │ 1262.38 / 1283.19 ±17.67 / 1305.75 ms │ 1254.45 / 1284.84 ±23.05 / 1323.30 ms │     no change │
│ QQuery 19 │        28.31 / 28.45 ±0.15 / 28.71 ms │        28.07 / 28.46 ±0.29 / 28.84 ms │     no change │
│ QQuery 20 │     518.44 / 525.57 ±5.95 / 535.65 ms │     521.08 / 526.92 ±8.01 / 542.49 ms │     no change │
│ QQuery 21 │     514.93 / 522.16 ±7.09 / 534.65 ms │     519.19 / 523.61 ±3.25 / 527.89 ms │     no change │
│ QQuery 22 │  989.41 / 1002.78 ±18.07 / 1038.58 ms │    988.25 / 995.44 ±4.31 / 1000.02 ms │     no change │
│ QQuery 23 │ 3116.82 / 3136.77 ±16.34 / 3154.87 ms │ 3067.93 / 3100.48 ±28.91 / 3135.65 ms │     no change │
│ QQuery 24 │        40.83 / 42.93 ±2.81 / 48.47 ms │        41.67 / 44.44 ±5.08 / 54.59 ms │     no change │
│ QQuery 25 │     111.56 / 115.29 ±4.72 / 124.19 ms │     112.39 / 113.33 ±0.75 / 114.27 ms │     no change │
│ QQuery 26 │        41.85 / 45.12 ±2.82 / 48.58 ms │        42.06 / 46.72 ±5.40 / 56.20 ms │     no change │
│ QQuery 27 │     668.27 / 678.56 ±7.53 / 687.04 ms │     672.75 / 676.54 ±4.56 / 684.95 ms │     no change │
│ QQuery 28 │ 3044.24 / 3074.17 ±31.73 / 3124.80 ms │ 3017.03 / 3048.87 ±18.89 / 3069.03 ms │     no change │
│ QQuery 29 │      41.18 / 61.61 ±31.58 / 123.07 ms │        41.16 / 44.02 ±5.12 / 54.26 ms │ +1.40x faster │
│ QQuery 30 │     299.54 / 310.40 ±8.54 / 324.36 ms │    304.24 / 316.59 ±13.10 / 337.07 ms │     no change │
│ QQuery 31 │    283.05 / 302.62 ±19.64 / 331.80 ms │    282.45 / 296.09 ±14.37 / 323.07 ms │     no change │
│ QQuery 32 │    934.74 / 954.20 ±16.99 / 976.04 ms │    936.02 / 958.77 ±18.85 / 989.73 ms │     no change │
│ QQuery 33 │ 1460.47 / 1488.30 ±22.67 / 1520.97 ms │ 1467.50 / 1489.59 ±22.78 / 1526.39 ms │     no change │
│ QQuery 34 │ 1469.29 / 1521.10 ±42.97 / 1577.94 ms │ 1488.79 / 1568.18 ±72.31 / 1703.25 ms │     no change │
│ QQuery 35 │    289.07 / 315.80 ±45.98 / 407.40 ms │    282.69 / 319.80 ±42.49 / 400.45 ms │     no change │
│ QQuery 36 │        66.26 / 69.90 ±2.39 / 73.50 ms │        66.57 / 74.00 ±4.87 / 80.49 ms │  1.06x slower │
│ QQuery 37 │        35.69 / 39.18 ±3.63 / 45.06 ms │        36.46 / 41.79 ±4.14 / 47.73 ms │  1.07x slower │
│ QQuery 38 │        40.25 / 44.55 ±3.83 / 51.60 ms │        40.40 / 42.89 ±1.56 / 44.62 ms │     no change │
│ QQuery 39 │     144.17 / 151.05 ±4.79 / 156.42 ms │     150.60 / 160.81 ±8.69 / 176.90 ms │  1.06x slower │
│ QQuery 40 │        14.35 / 14.67 ±0.28 / 15.06 ms │        14.26 / 14.49 ±0.17 / 14.75 ms │     no change │
│ QQuery 41 │        13.94 / 14.20 ±0.33 / 14.84 ms │        13.99 / 14.09 ±0.12 / 14.31 ms │     no change │
│ QQuery 42 │        13.36 / 16.11 ±5.03 / 26.18 ms │        13.38 / 15.98 ±4.85 / 25.67 ms │     no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 19839.98ms │
│ Total Time (qizhu_parquet-pushdown-adaptive-gate)   │ 19776.43ms │
│ Average Time (HEAD)                                 │   461.39ms │
│ Average Time (qizhu_parquet-pushdown-adaptive-gate) │   459.92ms │
│ Queries Faster                                      │          1 │
│ Queries Slower                                      │          3 │
│ Queries with No Change                              │         39 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 100.0s
Peak memory 12.2 GiB
Avg memory 4.4 GiB
CPU user 1016.5s
CPU sys 69.8s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 100.0s
Peak memory 10.5 GiB
Avg memory 4.5 GiB
CPU user 1014.1s
CPU sys 71.2s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and qizhu_parquet-pushdown-adaptive-gate
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃  qizhu_parquet-pushdown-adaptive-gate ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.23 / 3.96 ±5.42 / 14.81 ms │          1.22 / 4.01 ±5.49 / 15.00 ms │     no change │
│ QQuery 1  │        12.70 / 13.04 ±0.20 / 13.30 ms │        12.79 / 12.98 ±0.18 / 13.29 ms │     no change │
│ QQuery 2  │        36.29 / 36.59 ±0.25 / 37.02 ms │        36.32 / 36.70 ±0.26 / 37.00 ms │     no change │
│ QQuery 3  │        31.03 / 31.81 ±0.96 / 33.69 ms │        30.92 / 31.55 ±0.33 / 31.89 ms │     no change │
│ QQuery 4  │     223.41 / 225.52 ±1.92 / 228.41 ms │     222.68 / 228.66 ±3.95 / 234.87 ms │     no change │
│ QQuery 5  │     270.79 / 273.09 ±1.67 / 275.42 ms │     270.67 / 271.99 ±1.95 / 275.79 ms │     no change │
│ QQuery 6  │           1.29 / 1.44 ±0.24 / 1.93 ms │           1.27 / 1.41 ±0.23 / 1.87 ms │     no change │
│ QQuery 7  │        14.39 / 14.52 ±0.10 / 14.64 ms │        13.99 / 14.18 ±0.14 / 14.37 ms │     no change │
│ QQuery 8  │     323.51 / 326.29 ±1.83 / 328.94 ms │     322.62 / 330.28 ±4.97 / 337.19 ms │     no change │
│ QQuery 9  │     452.49 / 458.49 ±5.13 / 467.67 ms │     453.12 / 464.44 ±6.71 / 473.83 ms │     no change │
│ QQuery 10 │        69.36 / 70.16 ±0.71 / 71.40 ms │        69.58 / 70.72 ±0.94 / 72.08 ms │     no change │
│ QQuery 11 │        82.17 / 82.46 ±0.22 / 82.80 ms │        81.71 / 82.48 ±0.67 / 83.73 ms │     no change │
│ QQuery 12 │     263.83 / 269.18 ±4.37 / 275.40 ms │     265.06 / 271.15 ±4.17 / 276.93 ms │     no change │
│ QQuery 13 │     364.46 / 372.31 ±7.82 / 382.79 ms │    361.58 / 378.85 ±14.67 / 402.34 ms │     no change │
│ QQuery 14 │     283.65 / 286.55 ±2.59 / 291.14 ms │     281.54 / 287.65 ±5.11 / 296.23 ms │     no change │
│ QQuery 15 │     272.18 / 279.63 ±7.74 / 294.55 ms │    270.86 / 284.72 ±11.39 / 301.35 ms │     no change │
│ QQuery 16 │     605.00 / 620.93 ±9.73 / 631.77 ms │     607.39 / 618.54 ±6.55 / 625.50 ms │     no change │
│ QQuery 17 │     612.89 / 623.49 ±6.18 / 630.91 ms │    625.65 / 637.04 ±14.93 / 666.25 ms │     no change │
│ QQuery 18 │ 1254.01 / 1275.44 ±19.07 / 1305.27 ms │ 1257.28 / 1272.11 ±14.38 / 1295.05 ms │     no change │
│ QQuery 19 │        28.31 / 32.22 ±4.94 / 40.38 ms │       28.26 / 43.09 ±19.97 / 78.99 ms │  1.34x slower │
│ QQuery 20 │     515.18 / 524.44 ±8.82 / 539.52 ms │     519.37 / 529.06 ±6.11 / 535.02 ms │     no change │
│ QQuery 21 │     516.13 / 520.14 ±3.78 / 526.82 ms │     518.74 / 522.89 ±5.39 / 533.37 ms │     no change │
│ QQuery 22 │    991.72 / 998.36 ±7.82 / 1013.35 ms │  983.85 / 1007.05 ±12.42 / 1017.18 ms │     no change │
│ QQuery 23 │ 3052.15 / 3077.58 ±18.89 / 3100.67 ms │ 3075.76 / 3125.64 ±37.32 / 3174.21 ms │     no change │
│ QQuery 24 │       41.49 / 50.84 ±14.37 / 79.19 ms │        41.14 / 46.01 ±8.09 / 62.14 ms │ +1.10x faster │
│ QQuery 25 │     111.75 / 114.61 ±3.78 / 121.99 ms │     111.06 / 112.65 ±2.68 / 118.00 ms │     no change │
│ QQuery 26 │        41.66 / 43.39 ±1.57 / 46.33 ms │        43.14 / 46.44 ±2.39 / 49.54 ms │  1.07x slower │
│ QQuery 27 │     669.50 / 676.58 ±4.37 / 682.39 ms │     669.56 / 677.15 ±7.10 / 687.34 ms │     no change │
│ QQuery 28 │ 3027.81 / 3052.33 ±12.82 / 3062.40 ms │ 2994.60 / 3025.37 ±21.80 / 3046.35 ms │     no change │
│ QQuery 29 │        41.22 / 41.38 ±0.09 / 41.50 ms │        41.17 / 42.82 ±2.84 / 48.49 ms │     no change │
│ QQuery 30 │    304.30 / 320.17 ±14.64 / 339.04 ms │    298.82 / 325.06 ±30.47 / 384.63 ms │     no change │
│ QQuery 31 │     285.83 / 295.72 ±7.06 / 306.67 ms │    289.47 / 301.22 ±11.35 / 319.89 ms │     no change │
│ QQuery 32 │    955.21 / 970.64 ±12.73 / 987.54 ms │   927.82 / 994.30 ±51.73 / 1065.40 ms │     no change │
│ QQuery 33 │ 1465.80 / 1487.61 ±21.15 / 1521.48 ms │ 1413.26 / 1471.17 ±38.03 / 1532.72 ms │     no change │
│ QQuery 34 │ 1487.58 / 1514.43 ±35.86 / 1584.67 ms │ 1464.99 / 1492.50 ±26.36 / 1539.70 ms │     no change │
│ QQuery 35 │    281.25 / 321.01 ±37.11 / 383.88 ms │    277.38 / 302.94 ±20.34 / 337.19 ms │ +1.06x faster │
│ QQuery 36 │        65.91 / 70.38 ±6.07 / 82.37 ms │        65.00 / 76.13 ±7.96 / 86.17 ms │  1.08x slower │
│ QQuery 37 │        35.25 / 36.84 ±1.39 / 39.00 ms │        35.29 / 37.56 ±3.61 / 44.74 ms │     no change │
│ QQuery 38 │        40.72 / 44.21 ±2.61 / 48.37 ms │        40.13 / 41.25 ±0.75 / 42.15 ms │ +1.07x faster │
│ QQuery 39 │     148.78 / 160.08 ±9.98 / 176.45 ms │     134.18 / 149.68 ±8.15 / 157.67 ms │ +1.07x faster │
│ QQuery 40 │        13.92 / 14.40 ±0.53 / 15.35 ms │        13.87 / 14.46 ±0.77 / 15.93 ms │     no change │
│ QQuery 41 │        13.58 / 13.99 ±0.26 / 14.31 ms │        13.84 / 14.16 ±0.34 / 14.80 ms │     no change │
│ QQuery 42 │        13.25 / 13.66 ±0.37 / 14.28 ms │        12.94 / 13.16 ±0.13 / 13.29 ms │     no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 19659.92ms │
│ Total Time (qizhu_parquet-pushdown-adaptive-gate)   │ 19711.24ms │
│ Average Time (HEAD)                                 │   457.21ms │
│ Average Time (qizhu_parquet-pushdown-adaptive-gate) │   458.40ms │
│ Queries Faster                                      │          4 │
│ Queries Slower                                      │          3 │
│ Queries with No Change                              │         36 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 100.0s
Peak memory 11.2 GiB
Avg memory 4.4 GiB
CPU user 1008.5s
CPU sys 72.6s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 100.0s
Peak memory 10.4 GiB
Avg memory 4.4 GiB
CPU user 1006.2s
CPU sys 71.3s
Peak spill 0 B

File an issue against this benchmark runner

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

auto detected api change Auto detected API change common Related to common crate core Core DataFusion crate datasource Changes to the datasource crate documentation Improvements or additions to documentation proto Related to proto crate sqllogictest SQL Logic Tests (.slt)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Enable parquet filter pushdown (filter_pushdown) by default

4 participants