Skip to content

Test not merge: enable pushdown_filters by default#23369

Draft
zhuqi-lucas wants to merge 3 commits into
apache:mainfrom
zhuqi-lucas:qizhu/enable-pushdown-filters-by-default
Draft

Test not merge: enable pushdown_filters by default#23369
zhuqi-lucas wants to merge 3 commits into
apache:mainfrom
zhuqi-lucas:qizhu/enable-pushdown-filters-by-default

Conversation

@zhuqi-lucas

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Part of #3463 and #20324. Draft only — putting this up to gauge the current ClickBench regression picture (I'll run the benchmark separately) now that recent adaptive machinery has landed:

Also see #22883 "Adaptive predicate evaluation" for the placement-adaptive follow-up, and #23263 "Late materialization when LIMIT prunes heavily" — where local Q23 went from 4173ms → 318ms just by flipping this config.

What changes are included in this PR?

Single-line change: datafusion.execution.parquet.pushdown_filters default falsetrue.

Nothing else touched. configs.md regeneration and any sqllogictest / explain-plan expectation updates will follow once we see what CI catches.

Are these changes tested?

Draft — expecting CI to surface sqllogictest EXPLAIN diffs and any per-query regressions. I'll iterate based on that.

Are there any user-facing changes?

Yes — Parquet reads default to applying filter expressions during decode. Marking api change.

Flip the default of datafusion.execution.parquet.pushdown_filters
from false to true, so Parquet RowFilter (within-row-group late
materialization) is enabled out of the box.

Draft to gauge the current ClickBench regression picture with
recent arrow-rs improvements (adaptive RowSelection representation
in apache/arrow-rs#8733) and DataFusion's TopK dynamic RG pruning
(apache#22450) already landed.

Related: apache#3463, apache#20324, apache#22883, apache#23263.
@github-actions github-actions Bot added the common Related to common crate label Jul 7, 2026
@zhuqi-lucas zhuqi-lucas changed the title feat(parquet): enable pushdown_filters by default Test not merge: enable pushdown_filters by default Jul 7, 2026
@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_partitioned

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4902067867-889-tpd6t 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/enable-pushdown-filters-by-default (114dbc0) to 32e1146 (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_enable-pushdown-filters-by-default
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query     ┃                                   HEAD ┃ qizhu_enable-pushdown-filters-by-default ┃         Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 0  │           1.24 / 3.90 ±5.27 / 14.44 ms │             1.25 / 3.95 ±5.36 / 14.67 ms │      no change │
│ QQuery 1  │         12.29 / 12.51 ±0.16 / 12.76 ms │           12.99 / 13.16 ±0.25 / 13.65 ms │   1.05x slower │
│ QQuery 2  │         36.61 / 36.68 ±0.04 / 36.72 ms │           35.94 / 36.00 ±0.05 / 36.08 ms │      no change │
│ QQuery 3  │         32.84 / 33.47 ±0.51 / 34.37 ms │           30.60 / 31.32 ±0.83 / 32.91 ms │  +1.07x faster │
│ QQuery 4  │      258.36 / 264.91 ±3.55 / 268.57 ms │        218.97 / 222.95 ±4.44 / 231.44 ms │  +1.19x faster │
│ QQuery 5  │      286.11 / 297.00 ±8.73 / 307.85 ms │        269.99 / 271.65 ±0.92 / 272.71 ms │  +1.09x faster │
│ QQuery 6  │            1.26 / 1.40 ±0.21 / 1.81 ms │              1.25 / 1.40 ±0.22 / 1.84 ms │      no change │
│ QQuery 7  │         13.43 / 13.64 ±0.15 / 13.83 ms │           16.34 / 16.40 ±0.05 / 16.48 ms │   1.20x slower │
│ QQuery 8  │      318.70 / 321.38 ±1.74 / 323.87 ms │        316.83 / 322.23 ±3.13 / 326.14 ms │      no change │
│ QQuery 9  │      453.74 / 458.75 ±5.91 / 470.20 ms │       450.67 / 503.63 ±38.50 / 552.12 ms │   1.10x slower │
│ QQuery 10 │         69.26 / 71.09 ±1.23 / 72.82 ms │        102.45 / 104.02 ±1.63 / 106.41 ms │   1.46x slower │
│ QQuery 11 │         80.39 / 81.06 ±0.73 / 82.22 ms │        109.73 / 115.88 ±6.01 / 126.57 ms │   1.43x slower │
│ QQuery 12 │      263.36 / 270.50 ±4.63 / 276.40 ms │        314.71 / 323.68 ±4.99 / 328.65 ms │   1.20x slower │
│ QQuery 13 │     361.79 / 374.24 ±12.76 / 392.14 ms │        410.01 / 423.55 ±8.95 / 433.24 ms │   1.13x slower │
│ QQuery 14 │      276.02 / 283.52 ±5.15 / 291.47 ms │       314.34 / 333.10 ±15.85 / 358.85 ms │   1.17x slower │
│ QQuery 15 │      267.03 / 274.23 ±5.07 / 280.54 ms │       269.47 / 283.41 ±16.05 / 314.33 ms │      no change │
│ QQuery 16 │     601.07 / 611.22 ±10.64 / 630.18 ms │       630.76 / 686.37 ±36.34 / 732.72 ms │   1.12x slower │
│ QQuery 17 │     612.59 / 642.54 ±33.22 / 700.92 ms │       617.86 / 632.38 ±16.61 / 664.40 ms │      no change │
│ QQuery 18 │  1271.50 / 1318.98 ±43.79 / 1401.95 ms │     1266.69 / 1277.56 ±7.89 / 1286.30 ms │      no change │
│ QQuery 19 │         27.54 / 27.77 ±0.24 / 28.19 ms │          29.25 / 34.51 ±10.17 / 54.85 ms │   1.24x slower │
│ QQuery 20 │     516.20 / 534.46 ±22.48 / 575.61 ms │       516.59 / 526.58 ±11.87 / 549.05 ms │      no change │
│ QQuery 21 │     517.84 / 533.38 ±11.76 / 545.02 ms │        574.10 / 581.73 ±7.70 / 593.97 ms │   1.09x slower │
│ QQuery 22 │   980.46 / 1007.02 ±19.89 / 1036.98 ms │       797.39 / 835.19 ±23.62 / 865.26 ms │  +1.21x faster │
│ QQuery 23 │ 3015.34 / 3107.09 ±106.70 / 3310.50 ms │        139.83 / 143.97 ±2.57 / 147.95 ms │ +21.58x faster │
│ QQuery 24 │         42.46 / 43.08 ±0.46 / 43.60 ms │           46.72 / 50.02 ±4.93 / 59.66 ms │   1.16x slower │
│ QQuery 25 │      113.31 / 117.26 ±4.86 / 126.76 ms │        147.22 / 147.91 ±1.08 / 150.06 ms │   1.26x slower │
│ QQuery 26 │         42.31 / 44.27 ±2.02 / 47.92 ms │           49.74 / 50.19 ±0.31 / 50.68 ms │   1.13x slower │
│ QQuery 27 │     668.79 / 679.31 ±11.28 / 701.25 ms │        709.12 / 716.10 ±5.45 / 723.69 ms │   1.05x slower │
│ QQuery 28 │  3015.12 / 3082.27 ±41.67 / 3130.89 ms │    3059.46 / 3099.14 ±36.77 / 3152.15 ms │      no change │
│ QQuery 29 │         40.61 / 50.85 ±9.28 / 65.23 ms │          40.09 / 48.67 ±13.09 / 74.04 ms │      no change │
│ QQuery 30 │      295.31 / 301.41 ±5.29 / 309.73 ms │       304.70 / 321.65 ±12.24 / 341.00 ms │   1.07x slower │
│ QQuery 31 │      275.03 / 290.35 ±8.33 / 298.74 ms │        289.02 / 295.45 ±5.79 / 304.26 ms │      no change │
│ QQuery 32 │  903.76 / 1033.90 ±119.67 / 1245.66 ms │     921.42 / 1016.48 ±73.27 / 1112.80 ms │      no change │
│ QQuery 33 │  1412.91 / 1517.72 ±93.39 / 1677.42 ms │    1485.88 / 1527.97 ±41.63 / 1587.69 ms │      no change │
│ QQuery 34 │ 1505.81 / 1608.51 ±102.70 / 1792.28 ms │   1466.87 / 1560.61 ±106.93 / 1740.05 ms │      no change │
│ QQuery 35 │     269.69 / 306.89 ±50.29 / 404.05 ms │       279.75 / 318.79 ±44.72 / 373.51 ms │      no change │
│ QQuery 36 │         66.73 / 68.87 ±3.54 / 75.93 ms │           66.32 / 73.02 ±7.46 / 87.16 ms │   1.06x slower │
│ QQuery 37 │         34.91 / 35.68 ±0.61 / 36.50 ms │           36.94 / 42.79 ±6.93 / 55.75 ms │   1.20x slower │
│ QQuery 38 │         39.79 / 42.15 ±2.71 / 47.22 ms │           35.21 / 40.93 ±3.47 / 45.42 ms │      no change │
│ QQuery 39 │     133.99 / 152.37 ±10.54 / 166.01 ms │        141.82 / 144.59 ±3.62 / 151.76 ms │  +1.05x faster │
│ QQuery 40 │         13.65 / 13.95 ±0.29 / 14.44 ms │           17.94 / 18.35 ±0.42 / 19.09 ms │   1.32x slower │
│ QQuery 41 │         13.28 / 13.56 ±0.20 / 13.75 ms │           16.28 / 20.45 ±7.71 / 35.86 ms │   1.51x slower │
│ QQuery 42 │         12.92 / 14.84 ±3.41 / 21.65 ms │           13.93 / 14.13 ±0.27 / 14.65 ms │      no change │
└───────────┴────────────────────────────────────────┴──────────────────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                       ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                       │ 19998.00ms │
│ Total Time (qizhu_enable-pushdown-filters-by-default)   │ 17231.89ms │
│ Average Time (HEAD)                                     │   465.07ms │
│ Average Time (qizhu_enable-pushdown-filters-by-default) │   400.74ms │
│ Queries Faster                                          │          6 │
│ Queries Slower                                          │         20 │
│ Queries with No Change                                  │         17 │
│ Queries with Failure                                    │          0 │
└─────────────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 105.0s
Peak memory 13.2 GiB
Avg memory 4.6 GiB
CPU user 1022.1s
CPU sys 73.6s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 90.0s
Peak memory 12.3 GiB
Avg memory 4.8 GiB
CPU user 874.2s
CPU sys 63.4s
Peak spill 0 B

File an issue against this benchmark runner

@alamb

alamb commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Thanks for this @zhuqi-lucas

I think the current feeling is that to reduce these regressions we will need an adaptive approach. For example this from @adriangb

@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

Thanks for this @zhuqi-lucas

I think the current feeling is that to reduce these regressions we will need an adaptive approach. For example this from @adriangb

Thanks @alamb , i can help this epic and testing something related approach.

Add a plan-time heuristic in ParquetSource::try_pushdown_filters that
declines to push filters into the scan when the projection contains
fewer than PUSHDOWN_MIN_NON_FILTER_COLS (currently 3) columns not
referenced by the filter.

Rationale: RowFilter has fixed per-row machinery overhead that only
pays for itself when the wide-column decode it lets us skip is large.
When the filter references most of the projection, that saving is
small and the overhead dominates — see the Q10/Q40/Q41 ClickBench
regressions discussed in apache#23263.

When the heuristic declines: pushdown_filters is treated as disabled
for this scan, so the FilterExec stays above the scan (correctness
preserved) and the predicate is still injected into ParquetSource
for stats / bloom / page-index pruning.

Local numbers (5 iters, 12 partitions):
  Q10 (non-filter=1):  95ms with push  →  82ms with gate  (regression fixed)
  Q11 (non-filter=2): 116ms with push  →  73ms with gate  (regression fixed)
  Q41 (non-filter=6):  20ms with push  → 11.5ms with gate (regression fixed)
  Q22 (non-filter=1): 835ms with push  → 1150ms with gate (win lost — heuristic misses this)
  Q23 (non-filter=104): 318ms with push, still pushed with gate (kept)
@github-actions github-actions Bot added the datasource Changes to the datasource crate label Jul 7, 2026
@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_partitioned

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4904065642-893-j256z 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/enable-pushdown-filters-by-default (ab8fbb9) to 7ff7278 (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_enable-pushdown-filters-by-default
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃ qizhu_enable-pushdown-filters-by-default ┃         Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.22 / 3.90 ±5.30 / 14.49 ms │             1.23 / 3.93 ±5.33 / 14.58 ms │      no change │
│ QQuery 1  │        12.43 / 12.81 ±0.19 / 12.94 ms │           12.90 / 13.09 ±0.24 / 13.54 ms │      no change │
│ QQuery 2  │        35.64 / 35.98 ±0.24 / 36.28 ms │           35.44 / 36.10 ±0.93 / 37.94 ms │      no change │
│ QQuery 3  │        30.80 / 31.21 ±0.64 / 32.50 ms │           30.76 / 31.06 ±0.34 / 31.50 ms │      no change │
│ QQuery 4  │     218.89 / 223.08 ±3.28 / 228.79 ms │        220.89 / 222.54 ±1.66 / 225.69 ms │      no change │
│ QQuery 5  │     271.41 / 273.91 ±2.44 / 278.18 ms │        270.61 / 273.37 ±2.96 / 278.47 ms │      no change │
│ QQuery 6  │           1.28 / 1.45 ±0.25 / 1.94 ms │              1.25 / 1.40 ±0.22 / 1.84 ms │      no change │
│ QQuery 7  │        13.50 / 13.68 ±0.16 / 13.90 ms │           13.88 / 13.95 ±0.05 / 14.04 ms │      no change │
│ QQuery 8  │     320.83 / 323.15 ±2.57 / 327.70 ms │        320.49 / 322.75 ±1.31 / 324.05 ms │      no change │
│ QQuery 9  │     455.30 / 459.59 ±4.25 / 467.71 ms │        450.57 / 461.56 ±6.71 / 469.33 ms │      no change │
│ QQuery 10 │        70.88 / 72.81 ±1.51 / 75.29 ms │           70.77 / 71.97 ±1.23 / 73.72 ms │      no change │
│ QQuery 11 │        83.17 / 84.21 ±1.06 / 85.53 ms │           82.36 / 83.44 ±1.04 / 84.79 ms │      no change │
│ QQuery 12 │     265.12 / 270.15 ±3.68 / 274.98 ms │        263.85 / 270.67 ±5.31 / 278.84 ms │      no change │
│ QQuery 13 │     366.44 / 375.43 ±7.14 / 386.15 ms │       366.23 / 391.10 ±16.86 / 411.80 ms │      no change │
│ QQuery 14 │     277.49 / 287.27 ±6.18 / 296.85 ms │        284.78 / 289.70 ±5.38 / 299.98 ms │      no change │
│ QQuery 15 │    267.99 / 282.92 ±19.44 / 320.60 ms │       268.67 / 282.44 ±10.91 / 301.45 ms │      no change │
│ QQuery 16 │     611.04 / 619.92 ±8.24 / 631.31 ms │       604.10 / 622.26 ±10.10 / 634.34 ms │      no change │
│ QQuery 17 │     616.08 / 623.09 ±5.53 / 632.54 ms │        621.37 / 626.93 ±4.25 / 631.75 ms │      no change │
│ QQuery 18 │  1251.28 / 1260.02 ±9.88 / 1279.05 ms │    1254.07 / 1273.12 ±14.47 / 1290.82 ms │      no change │
│ QQuery 19 │        27.86 / 28.45 ±0.88 / 30.19 ms │          27.92 / 37.16 ±15.17 / 67.04 ms │   1.31x slower │
│ QQuery 20 │    510.79 / 522.74 ±11.77 / 544.92 ms │        520.24 / 525.16 ±7.20 / 539.36 ms │      no change │
│ QQuery 21 │     513.43 / 521.10 ±4.73 / 526.62 ms │        519.72 / 526.88 ±6.42 / 537.65 ms │      no change │
│ QQuery 22 │   978.12 / 991.93 ±11.44 / 1010.70 ms │       992.50 / 998.70 ±9.10 / 1016.77 ms │      no change │
│ QQuery 23 │ 3087.06 / 3100.35 ±15.84 / 3130.39 ms │       135.59 / 146.80 ±11.87 / 169.37 ms │ +21.12x faster │
│ QQuery 24 │        42.90 / 44.22 ±2.36 / 48.93 ms │           41.56 / 41.80 ±0.16 / 42.03 ms │  +1.06x faster │
│ QQuery 25 │     111.43 / 115.55 ±5.52 / 126.46 ms │        112.66 / 118.43 ±6.08 / 128.11 ms │      no change │
│ QQuery 26 │        42.27 / 42.65 ±0.42 / 43.43 ms │           42.33 / 46.41 ±5.83 / 58.00 ms │   1.09x slower │
│ QQuery 27 │     666.03 / 674.25 ±5.62 / 681.18 ms │        667.29 / 676.26 ±5.12 / 681.00 ms │      no change │
│ QQuery 28 │ 3014.10 / 3039.39 ±14.52 / 3054.13 ms │    3013.87 / 3047.13 ±22.54 / 3080.21 ms │      no change │
│ QQuery 29 │        40.21 / 43.89 ±6.56 / 56.99 ms │          40.67 / 48.24 ±11.27 / 70.03 ms │   1.10x slower │
│ QQuery 30 │     297.04 / 310.11 ±9.30 / 319.77 ms │        303.93 / 312.05 ±5.28 / 317.38 ms │      no change │
│ QQuery 31 │     282.23 / 290.90 ±7.78 / 304.16 ms │       283.15 / 302.92 ±14.39 / 327.31 ms │      no change │
│ QQuery 32 │    903.99 / 923.55 ±19.19 / 955.56 ms │       930.34 / 944.82 ±10.08 / 959.72 ms │      no change │
│ QQuery 33 │ 1438.01 / 1459.84 ±21.55 / 1498.69 ms │    1459.99 / 1501.22 ±28.43 / 1524.41 ms │      no change │
│ QQuery 34 │ 1461.30 / 1514.24 ±35.69 / 1559.12 ms │    1475.56 / 1498.99 ±19.94 / 1530.77 ms │      no change │
│ QQuery 35 │    277.92 / 308.24 ±35.36 / 367.75 ms │       285.33 / 314.36 ±34.56 / 380.92 ms │      no change │
│ QQuery 36 │        67.73 / 73.97 ±7.67 / 88.28 ms │           66.63 / 71.95 ±4.09 / 79.24 ms │      no change │
│ QQuery 37 │        35.36 / 38.67 ±2.76 / 43.50 ms │           35.77 / 40.02 ±4.64 / 48.82 ms │      no change │
│ QQuery 38 │        42.29 / 47.11 ±4.04 / 52.29 ms │           43.92 / 48.74 ±5.18 / 57.09 ms │      no change │
│ QQuery 39 │     146.64 / 154.85 ±7.16 / 165.81 ms │        131.03 / 145.58 ±7.49 / 150.86 ms │  +1.06x faster │
│ QQuery 40 │        14.28 / 18.86 ±5.39 / 27.41 ms │           14.60 / 17.36 ±2.63 / 21.31 ms │  +1.09x faster │
│ QQuery 41 │        13.68 / 14.38 ±1.04 / 16.43 ms │           13.96 / 19.19 ±9.90 / 38.98 ms │   1.33x slower │
│ QQuery 42 │        12.99 / 15.25 ±3.96 / 23.16 ms │           13.21 / 13.70 ±0.37 / 14.27 ms │  +1.11x faster │
└───────────┴───────────────────────────────────────┴──────────────────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                       ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                       │ 19549.01ms │
│ Total Time (qizhu_enable-pushdown-filters-by-default)   │ 16735.24ms │
│ Average Time (HEAD)                                     │   454.63ms │
│ Average Time (qizhu_enable-pushdown-filters-by-default) │   389.19ms │
│ Queries Faster                                          │          5 │
│ Queries Slower                                          │          4 │
│ Queries with No Change                                  │         34 │
│ Queries with Failure                                    │          0 │
└─────────────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 100.0s
Peak memory 11.4 GiB
Avg memory 4.2 GiB
CPU user 1006.6s
CPU sys 67.7s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 85.0s
Peak memory 11.7 GiB
Avg memory 4.8 GiB
CPU user 853.3s
CPU sys 56.4s
Peak spill 0 B

File an issue against this benchmark runner

@zhuqi-lucas

zhuqi-lucas commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

CI ClickBench numbers on this PR experiment — cc @alamb @adriangb.

Change: flip pushdown_filters default → true, plus a small gate in ParquetSource::try_pushdown_filters that declines when the projection has < 3 non-filter columns (falls back to FilterExec).

HEAD This PR
Faster 5
Slower 4 (likely noise)
Total 19549 ms 16735 ms (14% faster)
Q23 3107 ms 147 ms (21.12×)

Basically no regression, and it seems resolve the pushdown_filters regression, but Adaptive predicate evaluation should be better.

@RatulDawar

RatulDawar commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

@zhuqi-lucas I wanted to chime in here that we can also in future add a auto mode here that works on % of columns to detect if we want to push down or not.
This idea comes from starrocks not exactly same but something similar and as someone who uses starrocks in production it this helps a lot in catering multiple types of workloads.

@Dandandan

Copy link
Copy Markdown
Contributor

@zhuqi-lucas I wanted to chime in here that we can also in future add a auto mode here that works on % of columns to detect if we want to push down or not. This idea comes from starrocks not exactly same but something similar and as someone who uses starrocks in production it this helps a lot in catering multiple types of workloads.

@adriangb (and others) also are working on runtime detection of usefulness/selectivity of (row) filters, hopefully that will help as well

@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

@zhuqi-lucas I wanted to chime in here that we can also in future add a auto mode here that works on % of columns to detect if we want to push down or not. This idea comes from starrocks not exactly same but something similar and as someone who uses starrocks in production it this helps a lot in catering multiple types of workloads.

@adriangb (and others) also are working on runtime detection of usefulness/selectivity of (row) filters, hopefully that will help as well

Yeah @RatulDawar , @Dandandan , runtime detection of usefulness/selectivity of (row) filters is in progress.

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

Labels

common Related to common crate datasource Changes to the datasource crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants