Skip to content

perf(parquet): skip RowFilter on statically fully-matched row groups - #23696

Open
zhuqi-lucas wants to merge 11 commits into
apache:mainfrom
zhuqi-lucas:perf/parquet-skip-filter-for-full-match
Open

perf(parquet): skip RowFilter on statically fully-matched row groups#23696
zhuqi-lucas wants to merge 11 commits into
apache:mainfrom
zhuqi-lucas:perf/parquet-skip-filter-for-full-match

Conversation

@zhuqi-lucas

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

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Rationale for this change

Builds on the peek_next_row_group API landed in apache/arrow-rs#10158 (in released arrow-rs 59.1.0). When Parquet stats prove that every row of a row group already satisfies the pushdown predicate (fully_matched), running the per-row RowFilter inside that row group is pure overhead — every row passes anyway. This change installs an empty RowFilter on fully-matched runs and only pays the row-level machinery on RGs that still need filtering.

Two-phase reads for those RGs also skip fetching the filter columns when they aren't in the projection — this pattern is common on time-partitioned tables (WHERE ts >= X AND ts < Y where the RG's min/max is contained in [X, Y)) and on the middle stretch of a TopK scan where the dynamic threshold is still loose.

What changes are included in this PR?

  • access_plan.rsParquetAccessPlan now tracks per-RG fully_matched state, produced during static pruning.
  • metrics.rs — new row_filter_skipped_fully_matched counter to observe how often the toggle fires.
  • push_decoder.rsRgPlanEntry carries the per-RG toggle; RowFilterContext swaps between the real filter (from the prebuild_row_filter_candidates cache) and an empty filter as the decoder crosses row-group boundaries via peek_next_row_group().
  • row_filter.rs — split build_row_filter into prebuild_row_filter_candidates (once per file: tree walk + candidate construction) and row_filter_from_prebuilt (per RG boundary: cheap bind against the fresh array readers). The existing public build_row_filter API is preserved for callers that don't need per-RG toggling.
  • opener/mod.rs — wires the prebuilt cache into the decoder builder; skips page-index loading for fully-matched RGs (their per-row filter is a no-op, so page pruning saves nothing).
  • sort.rs — sort-order-aware RG reorder preserves the per-RG toggle through reordering.

Are these changes tested?

Yes.

  • fully_matched_rgs_skip_row_filter (datafusion/core/tests/parquet/dynamic_row_group_pruning.rs) — 4 RGs of 3 rows each, predicate v >= 3 makes RG 0 a straddler and RGs 1..=3 fully matched. Asserts (a) results are correct and (b) row_filter_skipped_fully_matched fires at least once at the RG 0 → RG 1 boundary.
  • dynamic_row_group_pruning.slt — an EXPLAIN ANALYZE case (WHERE v >= 4 with pushdown_filters=true) that surfaces row_filter_skipped_fully_matched=1 in the scan metrics, so the optimization is observable from SQL and any regression shows up as the count dropping back to 0.
  • All pre-existing dynamic_row_group_pruning integration tests still pass.
  • Full datafusion-datasource-parquet lib suite passes.

Are there any user-facing changes?

  • New row_filter_skipped_fully_matched metric appears in EXPLAIN ANALYZE on parquet scans (0 when the toggle didn't fire).
  • No public API changes; build_row_filter still exists and behaves identically for non-toggling callers.

Copilot AI review requested due to automatic review settings July 19, 2026 03:24
@github-actions github-actions Bot added core Core DataFusion crate sqllogictest SQL Logic Tests (.slt) datasource Changes to the datasource crate labels Jul 19, 2026
@zhuqi-lucas
zhuqi-lucas marked this pull request as draft July 19, 2026 03:28
@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

run benchmarks

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5013997795-1147-cgg4w 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 perf/parquet-skip-filter-for-full-match (a3047ed) to 67947b6 (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-c5013997795-1148-clr8x 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 perf/parquet-skip-filter-for-full-match (a3047ed) to 67947b6 (merge-base) diff using: tpch
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-c5013997795-1146-lb65k 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 perf/parquet-skip-filter-for-full-match (a3047ed) to 67947b6 (merge-base) diff using: clickbench_partitioned
Results will be posted here when complete


File an issue against this benchmark runner

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

This PR improves Parquet scan performance by avoiding per-row RowFilter evaluation for row groups proven (via statistics/static pruning) to be fully matched, and by enabling cheap per-row-group rebuilds of the row filter using prebuilt candidates. This builds on arrow-rs’s peek_next_row_group() to keep DataFusion’s row-group plan aligned with the decoder’s actual frontier.

Changes:

  • Track per-row-group fully_matched state in the Parquet access plan and preserve it through reorder/reverse operations.
  • Toggle the decoder’s RowFilter at row-group boundaries (empty filter for fully-matched RGs; real filter otherwise) and add a new metric for observability.
  • Refactor row-filter construction to prebuild filter candidates once per file and rebuild cheaply per row group; update integration + SQL logic tests accordingly.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
datafusion/datasource-parquet/src/access_plan.rs Carries per-RG fully_matched flags into the prepared plan and strips empty-selection RGs to keep plan/decoder alignment.
datafusion/datasource-parquet/src/metrics.rs Adds row_filter_skipped_fully_matched metric to Parquet file metrics.
datafusion/datasource-parquet/src/push_decoder.rs Adds per-RG plan entries and implements boundary-time RowFilter toggling using peek_next_row_group().
datafusion/datasource-parquet/src/row_filter.rs Splits row-filter building into “prebuild once per file” + “instantiate per RG” and expands nested/struct field planning logic.
datafusion/datasource-parquet/src/opener/mod.rs Wires the prebuilt row-filter context into decoder construction and propagates new metric/state into the stream.
datafusion/datasource-parquet/src/sort.rs Updates prepared-plan reverse test to reflect stripping of all-empty selections.
datafusion/core/tests/parquet/dynamic_row_group_pruning.rs Adds an end-to-end integration test asserting fully-matched RGs trigger row-filter skipping behavior.
datafusion/sqllogictest/test_files/push_down_filter_parquet.slt Updates EXPLAIN ANALYZE expectations to include the new metric.

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

Comment on lines +64 to +68
/// Number of row groups for which the per-row
/// [`RowFilter`](parquet::arrow::arrow_reader::RowFilter) was skipped
/// because the static stats proved every row of the RG satisfies the
/// predicate. The decoder is rebuilt at the boundary with an empty
/// row filter so the upcoming RG decodes without per-row evaluation.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in fea0264 — the doc now states explicitly that this counts suppression events, not row groups: a run of consecutive fully-matched RGs shares a single toggle.

&& (!DataType::is_nested(return_type)
|| self.is_nested_type_supported(return_type))
{
// try to resolve all field name arguments to strinrg literals

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in fea0264.

Comment on lines +192 to +196
/// The result of resolving which Parquet leaf columns and Arrow schema fields
/// are needed to evaluate an expression against a Parquet file
///
/// This is the shared output of the column resolution pipeline used by both
/// the row filter to build `ArrowPredicate`s and the opener to build `ProjectionMask`s

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in fea0264row_filter.rs now reuses the shared ParquetReadPlan / PushdownChecker machinery from projection_read_plan.rs instead of carrying its own copy (~700 lines removed).

.map(|p| replace_columns_with_literals(p, &literal_columns))
.transpose()?;
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good catch — this was real: the rebase had silently dropped the input_file_name() rewrite. Restored in fea0264 along with a regression test (test_input_file_name_projection).

@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

run benchmarks

env:
  DATAFUSION_EXECUTION_PARQUET_PUSHDOWN_FILTERS: true

@github-actions

github-actions Bot commented Jul 19, 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.1.0 (current)
       Built [ 126.690s] (current)
     Parsing datafusion v54.1.0 (current)
      Parsed [   0.037s] (current)
    Building datafusion v54.1.0 (baseline)
       Built [ 107.656s] (baseline)
     Parsing datafusion v54.1.0 (baseline)
      Parsed [   0.037s] (baseline)
    Checking datafusion v54.1.0 -> v54.1.0 (no change; assume patch)
     Checked [   0.907s] 223 checks: 223 pass, 31 skip
     Summary no semver update required
    Finished [ 237.153s] datafusion
    Building datafusion-datasource-parquet v54.1.0 (current)
       Built [  51.196s] (current)
     Parsing datafusion-datasource-parquet v54.1.0 (current)
      Parsed [   0.035s] (current)
    Building datafusion-datasource-parquet v54.1.0 (baseline)
       Built [  50.787s] (baseline)
     Parsing datafusion-datasource-parquet v54.1.0 (baseline)
      Parsed [   0.037s] (baseline)
    Checking datafusion-datasource-parquet v54.1.0 -> v54.1.0 (no change; assume patch)
     Checked [   0.215s] 223 checks: 222 pass, 1 fail, 0 warn, 31 skip

--- failure constructible_struct_adds_field: struct exhaustively constructible through public API adds field ---

Description:
A pub struct that could be exhaustively constructed with a literal using only public API has a new pub field, breaking existing exhaustive literals.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field ParquetFileMetrics.row_filter_skipped_fully_matched in /home/runner/work/datafusion/datafusion/datafusion/datasource-parquet/src/metrics.rs:74

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [ 103.516s] datafusion-datasource-parquet
    Building datafusion-sqllogictest v54.1.0 (current)
       Built [ 193.262s] (current)
     Parsing datafusion-sqllogictest v54.1.0 (current)
      Parsed [   0.024s] (current)
    Building datafusion-sqllogictest v54.1.0 (baseline)
       Built [ 189.425s] (baseline)
     Parsing datafusion-sqllogictest v54.1.0 (baseline)
      Parsed [   0.024s] (baseline)
    Checking datafusion-sqllogictest v54.1.0 -> v54.1.0 (no change; assume patch)
     Checked [   0.117s] 223 checks: 223 pass, 31 skip
     Summary no semver update required
    Finished [ 385.533s] datafusion-sqllogictest

@github-actions github-actions Bot added the auto detected api change Auto detected API change label Jul 19, 2026
@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5014042375-1149-vbkxv 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 perf/parquet-skip-filter-for-full-match (a3047ed) to 67947b6 (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-c5014042375-1151-55j4t 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 perf/parquet-skip-filter-for-full-match (a3047ed) to 67947b6 (merge-base) diff using: tpch
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-c5014042375-1150-8k8cz 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 perf/parquet-skip-filter-for-full-match (a3047ed) to 67947b6 (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 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 perf_parquet-skip-filter-for-full-match
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃ perf_parquet-skip-filter-for-full-match ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 39.89 / 40.96 ±1.29 / 43.45 ms │          40.41 / 41.28 ±1.07 / 43.36 ms │     no change │
│ QQuery 2  │ 20.19 / 20.48 ±0.21 / 20.72 ms │          19.80 / 20.59 ±0.42 / 20.91 ms │     no change │
│ QQuery 3  │ 32.94 / 34.61 ±1.51 / 36.76 ms │          31.82 / 34.35 ±1.36 / 35.94 ms │     no change │
│ QQuery 4  │ 18.51 / 18.73 ±0.18 / 19.04 ms │          17.86 / 18.09 ±0.17 / 18.27 ms │     no change │
│ QQuery 5  │ 41.71 / 43.77 ±1.52 / 46.40 ms │          39.14 / 41.58 ±1.34 / 43.02 ms │     no change │
│ QQuery 6  │ 17.15 / 17.67 ±0.48 / 18.58 ms │          16.93 / 17.48 ±0.90 / 19.27 ms │     no change │
│ QQuery 7  │ 48.91 / 50.28 ±0.78 / 51.25 ms │          46.45 / 47.79 ±1.34 / 49.98 ms │     no change │
│ QQuery 8  │ 45.41 / 46.27 ±1.13 / 48.50 ms │          43.81 / 44.28 ±0.40 / 44.82 ms │     no change │
│ QQuery 9  │ 54.09 / 55.13 ±1.20 / 57.39 ms │          51.27 / 52.31 ±0.74 / 53.50 ms │ +1.05x faster │
│ QQuery 10 │ 44.19 / 45.55 ±0.72 / 46.17 ms │          45.70 / 46.48 ±0.73 / 47.65 ms │     no change │
│ QQuery 11 │ 14.47 / 15.22 ±0.58 / 15.89 ms │          14.05 / 14.94 ±0.73 / 16.28 ms │     no change │
│ QQuery 12 │ 24.99 / 25.33 ±0.20 / 25.56 ms │          25.28 / 25.88 ±0.40 / 26.46 ms │     no change │
│ QQuery 13 │ 34.60 / 36.32 ±1.63 / 39.21 ms │          34.50 / 35.94 ±0.80 / 37.00 ms │     no change │
│ QQuery 14 │ 25.30 / 25.54 ±0.13 / 25.65 ms │          24.58 / 25.37 ±0.64 / 26.46 ms │     no change │
│ QQuery 15 │ 33.65 / 34.34 ±0.55 / 34.99 ms │          33.57 / 34.06 ±0.52 / 35.02 ms │     no change │
│ QQuery 16 │ 14.70 / 15.36 ±0.47 / 15.86 ms │          14.58 / 15.14 ±0.36 / 15.64 ms │     no change │
│ QQuery 17 │ 73.60 / 80.44 ±3.77 / 85.16 ms │          77.29 / 82.62 ±4.37 / 89.97 ms │     no change │
│ QQuery 18 │ 66.39 / 67.51 ±0.73 / 68.49 ms │          63.55 / 66.77 ±3.76 / 74.02 ms │     no change │
│ QQuery 19 │ 35.24 / 35.87 ±0.40 / 36.36 ms │          35.41 / 36.61 ±1.36 / 39.16 ms │     no change │
│ QQuery 20 │ 32.76 / 34.72 ±1.52 / 37.19 ms │          33.38 / 34.58 ±0.74 / 35.47 ms │     no change │
│ QQuery 21 │ 61.02 / 62.39 ±1.34 / 64.85 ms │          63.08 / 64.66 ±1.69 / 67.91 ms │     no change │
│ QQuery 22 │ 15.06 / 15.73 ±0.47 / 16.41 ms │          14.78 / 15.31 ±0.55 / 16.02 ms │     no change │
└───────────┴────────────────────────────────┴─────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                                      ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                                      │ 822.23ms │
│ Total Time (perf_parquet-skip-filter-for-full-match)   │ 816.12ms │
│ Average Time (HEAD)                                    │  37.37ms │
│ Average Time (perf_parquet-skip-filter-for-full-match) │  37.10ms │
│ 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 990.4 MiB
Avg memory 631.9 MiB
CPU user 23.7s
CPU sys 1.9s
Peak spill 0 B

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 998.8 MiB
Avg memory 635.8 MiB
CPU user 23.5s
CPU sys 1.9s
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 perf_parquet-skip-filter-for-full-match
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃ perf_parquet-skip-filter-for-full-match ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │           5.48 / 6.03 ±0.93 / 7.87 ms │             5.38 / 5.88 ±0.85 / 7.58 ms │     no change │
│ QQuery 2  │        82.54 / 82.74 ±0.12 / 82.91 ms │          81.12 / 81.62 ±0.35 / 82.17 ms │     no change │
│ QQuery 3  │        29.91 / 30.28 ±0.29 / 30.65 ms │          29.36 / 29.79 ±0.28 / 30.08 ms │     no change │
│ QQuery 4  │     498.44 / 504.81 ±5.53 / 513.19 ms │       497.33 / 503.81 ±5.62 / 513.49 ms │     no change │
│ QQuery 5  │        52.12 / 52.93 ±0.69 / 53.87 ms │          52.12 / 52.66 ±0.37 / 53.28 ms │     no change │
│ QQuery 6  │        36.82 / 37.53 ±0.55 / 38.37 ms │          36.70 / 37.21 ±0.33 / 37.63 ms │     no change │
│ QQuery 7  │       95.38 / 97.18 ±2.60 / 102.32 ms │         95.07 / 96.95 ±2.35 / 101.59 ms │     no change │
│ QQuery 8  │        37.36 / 37.56 ±0.28 / 38.09 ms │          37.35 / 37.49 ±0.12 / 37.69 ms │     no change │
│ QQuery 9  │        54.23 / 54.47 ±0.23 / 54.87 ms │          53.53 / 54.49 ±0.58 / 55.29 ms │     no change │
│ QQuery 10 │        64.14 / 64.31 ±0.26 / 64.82 ms │          63.32 / 63.65 ±0.21 / 63.95 ms │     no change │
│ QQuery 11 │     301.98 / 305.90 ±4.14 / 313.62 ms │       304.42 / 308.36 ±3.04 / 311.87 ms │     no change │
│ QQuery 12 │        28.62 / 28.94 ±0.23 / 29.21 ms │          28.87 / 29.22 ±0.29 / 29.72 ms │     no change │
│ QQuery 13 │     119.29 / 121.91 ±4.04 / 129.93 ms │       119.22 / 121.27 ±2.71 / 126.45 ms │     no change │
│ QQuery 14 │     416.07 / 419.64 ±3.28 / 424.89 ms │       414.59 / 419.07 ±4.75 / 427.82 ms │     no change │
│ QQuery 15 │        57.69 / 58.12 ±0.34 / 58.72 ms │          57.62 / 58.47 ±0.53 / 59.07 ms │     no change │
│ QQuery 16 │           6.60 / 6.74 ±0.19 / 7.11 ms │             6.62 / 6.78 ±0.25 / 7.28 ms │     no change │
│ QQuery 17 │        79.69 / 81.09 ±1.09 / 82.98 ms │          79.57 / 81.61 ±2.56 / 86.59 ms │     no change │
│ QQuery 18 │     124.31 / 126.20 ±1.79 / 129.28 ms │       123.83 / 124.79 ±0.80 / 125.84 ms │     no change │
│ QQuery 19 │        42.14 / 42.36 ±0.16 / 42.60 ms │          41.86 / 42.07 ±0.19 / 42.41 ms │     no change │
│ QQuery 20 │        35.72 / 36.45 ±0.78 / 37.90 ms │          35.92 / 37.20 ±1.14 / 38.76 ms │     no change │
│ QQuery 21 │        18.41 / 19.12 ±1.08 / 21.27 ms │          17.96 / 18.43 ±0.49 / 19.30 ms │     no change │
│ QQuery 22 │        62.28 / 63.49 ±0.87 / 64.64 ms │          62.53 / 64.67 ±1.89 / 68.03 ms │     no change │
│ QQuery 23 │    345.13 / 354.92 ±11.41 / 376.09 ms │       343.23 / 347.64 ±3.30 / 351.60 ms │     no change │
│ QQuery 24 │     223.12 / 224.99 ±1.04 / 226.04 ms │       224.81 / 225.83 ±0.73 / 227.01 ms │     no change │
│ QQuery 25 │     110.36 / 111.56 ±0.97 / 113.31 ms │       110.56 / 111.78 ±1.29 / 114.26 ms │     no change │
│ QQuery 26 │        57.77 / 59.46 ±1.94 / 63.25 ms │          57.94 / 59.97 ±2.62 / 65.07 ms │     no change │
│ QQuery 27 │           6.15 / 6.29 ±0.22 / 6.72 ms │             6.15 / 6.29 ±0.16 / 6.60 ms │     no change │
│ QQuery 28 │        57.06 / 60.57 ±2.47 / 62.85 ms │          57.34 / 61.24 ±1.99 / 62.76 ms │     no change │
│ QQuery 29 │       96.79 / 97.84 ±1.50 / 100.80 ms │         97.72 / 99.57 ±2.18 / 103.77 ms │     no change │
│ QQuery 30 │        32.93 / 33.92 ±1.25 / 36.25 ms │          32.74 / 34.46 ±1.25 / 36.64 ms │     no change │
│ QQuery 31 │     112.51 / 113.15 ±0.49 / 113.94 ms │       110.96 / 111.87 ±0.58 / 112.62 ms │     no change │
│ QQuery 32 │        20.26 / 20.48 ±0.28 / 21.01 ms │          20.66 / 20.87 ±0.14 / 21.07 ms │     no change │
│ QQuery 33 │        38.00 / 38.21 ±0.22 / 38.57 ms │          37.86 / 39.85 ±1.95 / 43.26 ms │     no change │
│ QQuery 34 │        10.18 / 10.54 ±0.46 / 11.45 ms │            9.66 / 9.97 ±0.21 / 10.25 ms │ +1.06x faster │
│ QQuery 35 │        72.48 / 73.43 ±0.56 / 74.22 ms │          72.71 / 73.90 ±0.98 / 75.10 ms │     no change │
│ QQuery 36 │           5.76 / 5.91 ±0.22 / 6.35 ms │             5.58 / 5.69 ±0.19 / 6.07 ms │     no change │
│ QQuery 37 │           6.82 / 6.93 ±0.08 / 7.02 ms │             6.65 / 6.80 ±0.09 / 6.93 ms │     no change │
│ QQuery 38 │        61.93 / 62.65 ±0.73 / 64.01 ms │          61.43 / 61.89 ±0.35 / 62.40 ms │     no change │
│ QQuery 39 │        90.03 / 90.47 ±0.50 / 91.46 ms │          89.52 / 91.14 ±0.99 / 92.40 ms │     no change │
│ QQuery 40 │        23.97 / 24.25 ±0.30 / 24.79 ms │          23.81 / 24.12 ±0.19 / 24.36 ms │     no change │
│ QQuery 41 │        11.61 / 11.86 ±0.28 / 12.38 ms │          11.57 / 11.71 ±0.17 / 12.04 ms │     no change │
│ QQuery 42 │        24.07 / 24.42 ±0.38 / 25.09 ms │          23.76 / 24.12 ±0.27 / 24.36 ms │     no change │
│ QQuery 43 │           5.02 / 5.15 ±0.19 / 5.53 ms │             4.82 / 4.98 ±0.15 / 5.27 ms │     no change │
│ QQuery 44 │           9.20 / 9.41 ±0.15 / 9.67 ms │             9.10 / 9.24 ±0.11 / 9.39 ms │     no change │
│ QQuery 45 │        38.72 / 38.94 ±0.23 / 39.39 ms │          38.35 / 38.86 ±0.30 / 39.19 ms │     no change │
│ QQuery 46 │        11.88 / 12.10 ±0.22 / 12.49 ms │          11.68 / 11.97 ±0.25 / 12.29 ms │     no change │
│ QQuery 47 │     228.40 / 232.29 ±4.09 / 238.48 ms │       229.26 / 230.73 ±1.63 / 233.24 ms │     no change │
│ QQuery 48 │       96.65 / 98.10 ±1.24 / 100.29 ms │          96.16 / 96.74 ±0.46 / 97.42 ms │     no change │
│ QQuery 49 │        75.94 / 77.04 ±0.67 / 77.74 ms │          76.60 / 77.50 ±0.77 / 78.79 ms │     no change │
│ QQuery 50 │        59.81 / 62.75 ±2.34 / 66.11 ms │          59.79 / 62.62 ±3.61 / 69.34 ms │     no change │
│ QQuery 51 │        91.79 / 93.26 ±1.22 / 94.91 ms │          90.07 / 92.66 ±2.38 / 96.42 ms │     no change │
│ QQuery 52 │        24.39 / 24.65 ±0.21 / 24.98 ms │          24.44 / 24.73 ±0.23 / 25.15 ms │     no change │
│ QQuery 53 │        29.94 / 31.91 ±3.63 / 39.17 ms │          30.02 / 30.67 ±1.22 / 33.12 ms │     no change │
│ QQuery 54 │        55.56 / 56.06 ±0.44 / 56.77 ms │          56.00 / 56.51 ±0.40 / 57.17 ms │     no change │
│ QQuery 55 │        23.62 / 24.30 ±0.44 / 24.75 ms │          23.81 / 24.27 ±0.54 / 25.28 ms │     no change │
│ QQuery 56 │        39.12 / 39.51 ±0.32 / 40.02 ms │          39.24 / 39.77 ±0.51 / 40.43 ms │     no change │
│ QQuery 57 │     178.24 / 180.87 ±3.39 / 187.45 ms │       177.48 / 180.44 ±2.92 / 185.94 ms │     no change │
│ QQuery 58 │     116.59 / 120.10 ±3.54 / 126.45 ms │       116.93 / 118.66 ±2.81 / 124.27 ms │     no change │
│ QQuery 59 │     119.09 / 119.83 ±0.71 / 121.19 ms │       118.06 / 119.27 ±0.89 / 120.61 ms │     no change │
│ QQuery 60 │        39.91 / 40.13 ±0.23 / 40.57 ms │          39.32 / 39.78 ±0.40 / 40.40 ms │     no change │
│ QQuery 61 │        12.32 / 12.55 ±0.16 / 12.81 ms │          12.03 / 12.17 ±0.24 / 12.66 ms │     no change │
│ QQuery 62 │        47.40 / 49.15 ±1.65 / 51.78 ms │          47.04 / 48.99 ±2.29 / 52.34 ms │     no change │
│ QQuery 63 │        30.54 / 31.03 ±0.31 / 31.41 ms │          30.45 / 30.80 ±0.28 / 31.27 ms │     no change │
│ QQuery 64 │     412.86 / 417.33 ±4.01 / 424.64 ms │       416.62 / 417.61 ±1.41 / 420.39 ms │     no change │
│ QQuery 65 │     126.01 / 128.07 ±1.54 / 129.89 ms │       123.01 / 126.37 ±2.41 / 130.48 ms │     no change │
│ QQuery 66 │        81.24 / 82.47 ±1.54 / 85.30 ms │          81.11 / 82.63 ±1.04 / 84.31 ms │     no change │
│ QQuery 67 │     244.13 / 249.14 ±5.25 / 257.67 ms │       244.06 / 249.66 ±6.80 / 262.06 ms │     no change │
│ QQuery 68 │        11.93 / 12.14 ±0.27 / 12.68 ms │          12.03 / 12.16 ±0.15 / 12.44 ms │     no change │
│ QQuery 69 │        57.80 / 60.27 ±4.35 / 68.96 ms │          57.22 / 59.14 ±3.06 / 65.21 ms │     no change │
│ QQuery 70 │     106.91 / 108.93 ±1.75 / 111.34 ms │       107.79 / 111.31 ±4.32 / 119.45 ms │     no change │
│ QQuery 71 │        35.83 / 35.93 ±0.09 / 36.08 ms │          35.60 / 35.86 ±0.31 / 36.45 ms │     no change │
│ QQuery 72 │ 2222.69 / 2249.67 ±16.34 / 2271.10 ms │   2179.93 / 2214.88 ±52.39 / 2317.37 ms │     no change │
│ QQuery 73 │         9.78 / 10.86 ±1.55 / 13.91 ms │            9.69 / 9.84 ±0.17 / 10.11 ms │ +1.10x faster │
│ QQuery 74 │     171.11 / 173.24 ±1.67 / 176.06 ms │       172.50 / 175.98 ±3.19 / 180.94 ms │     no change │
│ QQuery 75 │     148.24 / 153.98 ±8.90 / 171.58 ms │       148.89 / 152.17 ±3.20 / 158.12 ms │     no change │
│ QQuery 76 │        35.57 / 36.14 ±0.41 / 36.75 ms │          35.54 / 36.19 ±1.01 / 38.20 ms │     no change │
│ QQuery 77 │        61.79 / 64.82 ±4.08 / 72.85 ms │          61.56 / 62.87 ±1.69 / 66.05 ms │     no change │
│ QQuery 78 │     199.10 / 203.13 ±3.87 / 210.17 ms │       198.22 / 202.09 ±4.87 / 211.42 ms │     no change │
│ QQuery 79 │        68.06 / 68.64 ±0.32 / 68.96 ms │          68.43 / 69.74 ±1.49 / 71.69 ms │     no change │
│ QQuery 80 │     100.02 / 100.81 ±0.68 / 102.05 ms │        98.67 / 100.07 ±1.10 / 101.64 ms │     no change │
│ QQuery 81 │        26.14 / 26.37 ±0.21 / 26.65 ms │          25.73 / 27.65 ±3.04 / 33.69 ms │     no change │
│ QQuery 82 │        16.63 / 16.87 ±0.26 / 17.30 ms │          16.63 / 18.33 ±1.88 / 21.75 ms │  1.09x slower │
│ QQuery 83 │        40.37 / 40.84 ±0.37 / 41.31 ms │          40.35 / 41.84 ±2.01 / 45.81 ms │     no change │
│ QQuery 84 │        30.48 / 30.72 ±0.22 / 31.09 ms │          30.19 / 30.65 ±0.38 / 31.34 ms │     no change │
│ QQuery 85 │     106.70 / 111.74 ±7.72 / 127.06 ms │       106.15 / 107.67 ±1.31 / 109.75 ms │     no change │
│ QQuery 86 │        25.31 / 26.12 ±0.47 / 26.75 ms │          25.81 / 26.86 ±1.07 / 28.75 ms │     no change │
│ QQuery 87 │        62.14 / 62.89 ±0.59 / 63.91 ms │          62.87 / 64.54 ±1.75 / 67.89 ms │     no change │
│ QQuery 88 │        63.43 / 63.70 ±0.18 / 63.97 ms │          63.21 / 63.74 ±0.30 / 64.11 ms │     no change │
│ QQuery 89 │        36.91 / 38.22 ±2.23 / 42.66 ms │          36.27 / 36.32 ±0.07 / 36.46 ms │     no change │
│ QQuery 90 │        17.10 / 17.53 ±0.22 / 17.70 ms │          16.90 / 18.68 ±2.96 / 24.58 ms │  1.07x slower │
│ QQuery 91 │        46.38 / 46.91 ±0.48 / 47.49 ms │          46.52 / 47.25 ±0.73 / 48.54 ms │     no change │
│ QQuery 92 │        29.75 / 30.52 ±0.44 / 30.95 ms │          29.92 / 30.55 ±0.59 / 31.50 ms │     no change │
│ QQuery 93 │        49.82 / 50.56 ±0.51 / 51.29 ms │          50.18 / 50.88 ±0.79 / 52.38 ms │     no change │
│ QQuery 94 │        38.18 / 40.75 ±2.02 / 43.96 ms │          38.51 / 38.91 ±0.30 / 39.30 ms │     no change │
│ QQuery 95 │        81.32 / 82.93 ±1.46 / 85.41 ms │          80.75 / 83.73 ±2.26 / 86.08 ms │     no change │
│ QQuery 96 │        24.67 / 24.95 ±0.26 / 25.28 ms │          24.20 / 24.52 ±0.20 / 24.82 ms │     no change │
│ QQuery 97 │        47.07 / 47.54 ±0.41 / 48.16 ms │          47.23 / 47.66 ±0.31 / 47.99 ms │     no change │
│ QQuery 98 │        43.45 / 44.88 ±2.21 / 49.21 ms │          42.16 / 43.13 ±0.67 / 43.87 ms │     no change │
│ QQuery 99 │        71.98 / 72.52 ±0.41 / 73.03 ms │          71.98 / 73.69 ±1.78 / 77.01 ms │     no change │
└───────────┴───────────────────────────────────────┴─────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                      ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                      │ 10100.92ms │
│ Total Time (perf_parquet-skip-filter-for-full-match)   │ 10050.76ms │
│ Average Time (HEAD)                                    │   102.03ms │
│ Average Time (perf_parquet-skip-filter-for-full-match) │   101.52ms │
│ Queries Faster                                         │          2 │
│ Queries Slower                                         │          2 │
│ Queries with No Change                                 │         95 │
│ Queries with Failure                                   │          0 │
└────────────────────────────────────────────────────────┴────────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 55.0s
Peak memory 2.0 GiB
Avg memory 1.3 GiB
CPU user 225.4s
CPU sys 6.1s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 55.0s
Peak memory 2.2 GiB
Avg memory 1.5 GiB
CPU user 226.3s
CPU sys 6.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 perf_parquet-skip-filter-for-full-match
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃ perf_parquet-skip-filter-for-full-match ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 1  │ 38.81 / 39.56 ±1.05 / 41.60 ms │          38.83 / 39.82 ±1.09 / 41.89 ms │    no change │
│ QQuery 2  │ 20.36 / 20.72 ±0.40 / 21.48 ms │          20.49 / 20.87 ±0.35 / 21.51 ms │    no change │
│ QQuery 3  │ 42.55 / 42.72 ±0.12 / 42.88 ms │          42.66 / 43.04 ±0.24 / 43.36 ms │    no change │
│ QQuery 4  │ 26.21 / 26.50 ±0.27 / 26.97 ms │          26.83 / 27.87 ±1.02 / 29.10 ms │ 1.05x slower │
│ QQuery 5  │ 61.17 / 61.78 ±0.44 / 62.49 ms │          61.20 / 61.81 ±0.45 / 62.50 ms │    no change │
│ QQuery 6  │ 23.63 / 24.83 ±1.47 / 27.59 ms │          23.90 / 24.84 ±0.88 / 26.49 ms │    no change │
│ QQuery 7  │ 49.63 / 50.48 ±0.56 / 51.35 ms │          49.77 / 50.09 ±0.38 / 50.76 ms │    no change │
│ QQuery 8  │ 50.80 / 51.39 ±0.50 / 52.21 ms │          51.15 / 51.36 ±0.18 / 51.67 ms │    no change │
│ QQuery 9  │ 66.51 / 66.87 ±0.34 / 67.50 ms │          65.85 / 66.56 ±0.49 / 67.14 ms │    no change │
│ QQuery 10 │ 48.91 / 50.19 ±1.77 / 53.71 ms │          50.41 / 52.43 ±3.19 / 58.78 ms │    no change │
│ QQuery 11 │ 15.33 / 15.54 ±0.18 / 15.82 ms │          15.67 / 15.91 ±0.27 / 16.41 ms │    no change │
│ QQuery 12 │ 44.86 / 45.04 ±0.29 / 45.62 ms │          45.14 / 46.25 ±1.31 / 48.76 ms │    no change │
│ QQuery 13 │ 42.70 / 44.38 ±1.40 / 46.92 ms │          43.22 / 43.59 ±0.27 / 43.94 ms │    no change │
│ QQuery 14 │ 31.18 / 31.96 ±0.79 / 33.48 ms │          31.14 / 31.42 ±0.23 / 31.79 ms │    no change │
│ QQuery 15 │ 41.22 / 42.31 ±1.00 / 43.96 ms │          41.48 / 41.95 ±0.37 / 42.49 ms │    no change │
│ QQuery 16 │ 16.33 / 16.62 ±0.27 / 17.03 ms │          16.99 / 17.22 ±0.28 / 17.78 ms │    no change │
│ QQuery 17 │ 71.98 / 72.40 ±0.32 / 72.84 ms │          72.24 / 73.48 ±1.17 / 75.70 ms │    no change │
│ QQuery 18 │ 75.94 / 76.15 ±0.29 / 76.71 ms │          76.39 / 77.24 ±0.76 / 78.59 ms │    no change │
│ QQuery 19 │ 35.17 / 35.55 ±0.30 / 35.92 ms │          35.05 / 36.27 ±1.43 / 39.00 ms │    no change │
│ QQuery 20 │ 36.81 / 37.12 ±0.19 / 37.37 ms │          36.67 / 37.46 ±0.40 / 37.80 ms │    no change │
│ QQuery 21 │ 64.05 / 65.62 ±0.93 / 66.91 ms │          64.66 / 65.39 ±0.69 / 66.68 ms │    no change │
│ QQuery 22 │ 16.83 / 17.20 ±0.29 / 17.56 ms │          17.63 / 19.05 ±1.77 / 22.20 ms │ 1.11x slower │
└───────────┴────────────────────────────────┴─────────────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                                      ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                                      │ 934.95ms │
│ Total Time (perf_parquet-skip-filter-for-full-match)   │ 943.91ms │
│ Average Time (HEAD)                                    │  42.50ms │
│ Average Time (perf_parquet-skip-filter-for-full-match) │  42.91ms │
│ Queries Faster                                         │        0 │
│ Queries Slower                                         │        2 │
│ Queries with No Change                                 │       20 │
│ Queries with Failure                                   │        0 │
└────────────────────────────────────────────────────────┴──────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 5.0s
Peak memory 1.3 GiB
Avg memory 789.5 MiB
CPU user 23.6s
CPU sys 1.6s
Peak spill 0 B

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 1.2 GiB
Avg memory 750.5 MiB
CPU user 23.5s
CPU sys 1.7s
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 perf_parquet-skip-filter-for-full-match
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃ perf_parquet-skip-filter-for-full-match ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.22 / 4.02 ±5.48 / 14.97 ms │            1.23 / 4.04 ±5.48 / 14.99 ms │     no change │
│ QQuery 1  │        13.11 / 13.32 ±0.13 / 13.50 ms │          13.02 / 13.22 ±0.17 / 13.43 ms │     no change │
│ QQuery 2  │        36.25 / 36.73 ±0.41 / 37.31 ms │          36.06 / 36.46 ±0.45 / 37.28 ms │     no change │
│ QQuery 3  │        30.74 / 31.34 ±0.62 / 32.44 ms │          30.67 / 30.89 ±0.29 / 31.42 ms │     no change │
│ QQuery 4  │     222.56 / 227.34 ±2.82 / 231.18 ms │       222.94 / 227.14 ±2.54 / 230.26 ms │     no change │
│ QQuery 5  │     272.41 / 274.49 ±1.39 / 276.67 ms │       270.63 / 272.08 ±1.89 / 275.69 ms │     no change │
│ QQuery 6  │           1.26 / 1.42 ±0.23 / 1.87 ms │             1.27 / 1.44 ±0.24 / 1.90 ms │     no change │
│ QQuery 7  │        13.89 / 14.11 ±0.12 / 14.24 ms │          13.95 / 14.26 ±0.20 / 14.57 ms │     no change │
│ QQuery 8  │     327.54 / 330.24 ±2.09 / 333.35 ms │       325.09 / 326.92 ±1.44 / 329.17 ms │     no change │
│ QQuery 9  │     450.50 / 462.89 ±7.88 / 474.51 ms │       457.21 / 466.95 ±7.45 / 480.28 ms │     no change │
│ QQuery 10 │        69.94 / 72.25 ±2.51 / 77.09 ms │          69.00 / 69.89 ±0.68 / 70.93 ms │     no change │
│ QQuery 11 │        80.93 / 82.62 ±1.15 / 84.01 ms │          80.66 / 82.01 ±1.19 / 83.79 ms │     no change │
│ QQuery 12 │     265.87 / 273.37 ±4.32 / 277.86 ms │       267.20 / 272.89 ±4.57 / 278.69 ms │     no change │
│ QQuery 13 │     370.60 / 383.34 ±8.97 / 393.59 ms │      367.43 / 377.43 ±15.28 / 407.74 ms │     no change │
│ QQuery 14 │     286.77 / 291.99 ±4.82 / 298.43 ms │       279.16 / 283.93 ±4.18 / 291.27 ms │     no change │
│ QQuery 15 │    273.75 / 283.72 ±14.89 / 312.94 ms │       267.81 / 276.84 ±9.97 / 296.18 ms │     no change │
│ QQuery 16 │     620.28 / 627.08 ±7.60 / 636.36 ms │       617.38 / 626.54 ±7.07 / 637.20 ms │     no change │
│ QQuery 17 │     624.05 / 631.25 ±7.03 / 643.62 ms │       627.40 / 639.74 ±8.07 / 648.83 ms │     no change │
│ QQuery 18 │ 1262.21 / 1280.24 ±15.15 / 1301.63 ms │   1263.98 / 1290.68 ±13.83 / 1303.27 ms │     no change │
│ QQuery 19 │       28.10 / 34.35 ±11.84 / 58.03 ms │         28.27 / 35.79 ±14.58 / 64.95 ms │     no change │
│ QQuery 20 │     514.17 / 520.72 ±7.14 / 533.03 ms │       521.19 / 526.89 ±5.39 / 535.52 ms │     no change │
│ QQuery 21 │     514.22 / 518.69 ±4.62 / 525.05 ms │       512.01 / 517.29 ±7.71 / 532.53 ms │     no change │
│ QQuery 22 │    980.99 / 993.87 ±9.81 / 1005.78 ms │     993.83 / 1003.01 ±9.86 / 1017.80 ms │     no change │
│ QQuery 23 │ 3066.12 / 3106.21 ±31.48 / 3147.33 ms │   3083.85 / 3126.62 ±35.08 / 3181.46 ms │     no change │
│ QQuery 24 │        41.43 / 46.36 ±7.10 / 60.47 ms │          41.75 / 44.28 ±3.51 / 51.23 ms │     no change │
│ QQuery 25 │     111.15 / 113.12 ±2.56 / 117.98 ms │       110.97 / 113.80 ±2.72 / 118.33 ms │     no change │
│ QQuery 26 │        41.38 / 45.82 ±4.94 / 54.90 ms │          41.69 / 46.55 ±5.00 / 53.57 ms │     no change │
│ QQuery 27 │     514.20 / 519.08 ±4.14 / 526.63 ms │       516.00 / 524.44 ±6.26 / 532.00 ms │     no change │
│ QQuery 28 │ 2900.02 / 2922.52 ±20.09 / 2960.21 ms │   2878.73 / 2905.88 ±22.58 / 2939.56 ms │     no change │
│ QQuery 29 │       41.17 / 49.58 ±10.16 / 63.61 ms │          41.40 / 42.04 ±0.63 / 42.86 ms │ +1.18x faster │
│ QQuery 30 │    301.97 / 323.95 ±26.80 / 374.02 ms │       300.27 / 306.21 ±4.96 / 313.31 ms │ +1.06x faster │
│ QQuery 31 │     286.03 / 294.49 ±9.93 / 312.22 ms │      281.56 / 296.34 ±10.41 / 309.47 ms │     no change │
│ QQuery 32 │    931.39 / 953.47 ±24.11 / 999.97 ms │     926.08 / 955.30 ±35.83 / 1018.59 ms │     no change │
│ QQuery 33 │ 1450.19 / 1483.11 ±24.87 / 1526.18 ms │   1454.76 / 1481.79 ±19.48 / 1514.16 ms │     no change │
│ QQuery 34 │ 1482.64 / 1498.07 ±17.79 / 1528.73 ms │   1477.81 / 1497.24 ±16.54 / 1521.04 ms │     no change │
│ QQuery 35 │    279.06 / 315.24 ±43.96 / 382.82 ms │      276.52 / 328.91 ±88.13 / 504.91 ms │     no change │
│ QQuery 36 │        66.70 / 70.45 ±4.93 / 79.71 ms │          69.09 / 72.88 ±3.63 / 78.50 ms │     no change │
│ QQuery 37 │        35.90 / 39.98 ±3.47 / 44.82 ms │          35.98 / 38.84 ±2.05 / 41.48 ms │     no change │
│ QQuery 38 │        43.12 / 50.26 ±4.01 / 54.23 ms │          40.37 / 41.72 ±1.12 / 43.56 ms │ +1.20x faster │
│ QQuery 39 │     151.77 / 159.28 ±7.73 / 171.32 ms │      134.02 / 149.03 ±10.30 / 163.44 ms │ +1.07x faster │
│ QQuery 40 │        14.26 / 18.67 ±4.84 / 24.71 ms │          14.70 / 16.39 ±1.65 / 19.39 ms │ +1.14x faster │
│ QQuery 41 │        14.13 / 15.51 ±2.07 / 19.61 ms │          13.98 / 14.03 ±0.04 / 14.09 ms │ +1.11x faster │
│ QQuery 42 │        13.21 / 14.41 ±1.87 / 18.13 ms │          13.05 / 13.40 ±0.28 / 13.79 ms │ +1.08x faster │
└───────────┴───────────────────────────────────────┴─────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                      ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                      │ 19428.95ms │
│ Total Time (perf_parquet-skip-filter-for-full-match)   │ 19412.04ms │
│ Average Time (HEAD)                                    │   451.84ms │
│ Average Time (perf_parquet-skip-filter-for-full-match) │   451.44ms │
│ Queries Faster                                         │          7 │
│ Queries Slower                                         │          0 │
│ 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.8 GiB
Avg memory 4.2 GiB
CPU user 994.6s
CPU sys 69.6s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 100.0s
Peak memory 11.1 GiB
Avg memory 4.4 GiB
CPU user 992.8s
CPU sys 69.1s
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 perf_parquet-skip-filter-for-full-match
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                               HEAD ┃ perf_parquet-skip-filter-for-full-match ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │        5.00 / 5.46 ±0.84 / 7.14 ms │             4.99 / 5.53 ±0.93 / 7.38 ms │     no change │
│ QQuery 2  │     44.45 / 44.80 ±0.40 / 45.49 ms │          45.11 / 45.78 ±0.60 / 46.78 ms │     no change │
│ QQuery 3  │     26.84 / 27.19 ±0.30 / 27.74 ms │          27.76 / 28.19 ±0.27 / 28.60 ms │     no change │
│ QQuery 4  │  393.16 / 404.69 ±8.58 / 417.89 ms │      391.38 / 399.02 ±10.38 / 418.94 ms │     no change │
│ QQuery 5  │     72.23 / 73.95 ±0.95 / 75.09 ms │          73.43 / 73.66 ±0.26 / 74.16 ms │     no change │
│ QQuery 6  │     37.67 / 38.03 ±0.19 / 38.17 ms │          36.43 / 36.76 ±0.30 / 37.25 ms │     no change │
│ QQuery 7  │  119.12 / 122.99 ±4.20 / 130.64 ms │       117.33 / 123.47 ±5.92 / 133.35 ms │     no change │
│ QQuery 8  │     14.65 / 14.88 ±0.14 / 15.01 ms │          14.21 / 14.41 ±0.19 / 14.73 ms │     no change │
│ QQuery 9  │  120.85 / 126.03 ±3.35 / 129.44 ms │       124.93 / 130.38 ±4.47 / 134.92 ms │     no change │
│ QQuery 10 │     76.17 / 77.12 ±0.69 / 77.92 ms │          75.81 / 78.22 ±1.27 / 79.29 ms │     no change │
│ QQuery 11 │  253.16 / 257.00 ±3.07 / 261.02 ms │       255.07 / 256.98 ±2.15 / 260.47 ms │     no change │
│ QQuery 12 │     30.40 / 31.38 ±0.69 / 32.33 ms │          30.46 / 33.43 ±3.51 / 40.24 ms │  1.07x slower │
│ QQuery 13 │  118.20 / 119.17 ±1.56 / 122.28 ms │       120.90 / 122.69 ±2.30 / 127.22 ms │     no change │
│ QQuery 14 │  405.97 / 410.44 ±4.24 / 417.90 ms │      416.02 / 428.32 ±13.71 / 453.27 ms │     no change │
│ QQuery 15 │     23.67 / 25.00 ±1.69 / 28.32 ms │          24.94 / 25.45 ±0.35 / 25.90 ms │     no change │
│ QQuery 16 │        6.22 / 6.35 ±0.19 / 6.74 ms │            6.90 / 9.44 ±4.90 / 19.24 ms │  1.49x slower │
│ QQuery 17 │  115.28 / 116.93 ±2.31 / 121.45 ms │       116.89 / 121.48 ±5.49 / 132.03 ms │     no change │
│ QQuery 18 │  199.15 / 204.46 ±5.48 / 215.02 ms │       198.90 / 202.72 ±2.81 / 206.56 ms │     no change │
│ QQuery 19 │     40.75 / 41.24 ±0.48 / 42.07 ms │          39.50 / 40.09 ±0.75 / 41.57 ms │     no change │
│ QQuery 20 │     40.41 / 41.19 ±0.91 / 42.96 ms │          42.05 / 44.63 ±4.42 / 53.43 ms │  1.08x slower │
│ QQuery 21 │     20.68 / 22.79 ±3.61 / 29.99 ms │          20.37 / 21.52 ±1.81 / 25.12 ms │ +1.06x faster │
│ QQuery 22 │     65.29 / 66.41 ±1.11 / 68.53 ms │          61.53 / 62.44 ±0.59 / 63.34 ms │ +1.06x faster │
│ QQuery 23 │ 403.64 / 423.28 ±14.81 / 445.34 ms │      397.97 / 423.07 ±14.55 / 438.98 ms │     no change │
│ QQuery 24 │  413.63 / 420.78 ±7.01 / 431.68 ms │      416.54 / 434.35 ±10.00 / 444.76 ms │     no change │
│ QQuery 25 │  115.29 / 119.04 ±4.28 / 127.03 ms │       117.73 / 121.76 ±6.27 / 134.16 ms │     no change │
│ QQuery 26 │     80.60 / 81.48 ±0.88 / 83.16 ms │          82.22 / 83.18 ±1.22 / 85.43 ms │     no change │
│ QQuery 27 │        5.85 / 6.04 ±0.20 / 6.43 ms │             5.97 / 6.10 ±0.20 / 6.49 ms │     no change │
│ QQuery 28 │     74.95 / 81.09 ±4.86 / 87.70 ms │          75.62 / 77.16 ±1.07 / 78.96 ms │     no change │
│ QQuery 29 │  145.78 / 148.53 ±3.73 / 155.86 ms │       146.98 / 148.87 ±1.29 / 150.29 ms │     no change │
│ QQuery 30 │     33.16 / 35.25 ±2.19 / 39.47 ms │          33.41 / 36.56 ±3.79 / 43.19 ms │     no change │
│ QQuery 31 │  130.07 / 133.98 ±6.32 / 146.56 ms │       127.60 / 129.45 ±2.19 / 133.68 ms │     no change │
│ QQuery 32 │     21.19 / 21.41 ±0.19 / 21.73 ms │          21.87 / 22.30 ±0.37 / 22.93 ms │     no change │
│ QQuery 33 │     38.75 / 39.71 ±0.80 / 40.70 ms │          40.45 / 42.44 ±2.71 / 47.69 ms │  1.07x slower │
│ QQuery 34 │     11.08 / 11.30 ±0.16 / 11.51 ms │          11.26 / 12.23 ±1.05 / 14.02 ms │  1.08x slower │
│ QQuery 35 │     83.64 / 86.71 ±4.13 / 94.79 ms │          87.83 / 88.63 ±0.52 / 89.18 ms │     no change │
│ QQuery 36 │        5.37 / 5.55 ±0.18 / 5.88 ms │             5.99 / 6.14 ±0.16 / 6.43 ms │  1.11x slower │
│ QQuery 37 │        6.81 / 6.92 ±0.08 / 7.03 ms │             7.44 / 7.54 ±0.08 / 7.66 ms │  1.09x slower │
│ QQuery 38 │     77.84 / 78.58 ±0.88 / 80.26 ms │          82.75 / 85.44 ±4.34 / 94.04 ms │  1.09x slower │
│ QQuery 39 │    90.06 / 96.10 ±5.56 / 104.96 ms │          94.20 / 95.96 ±1.33 / 98.23 ms │     no change │
│ QQuery 40 │     23.30 / 23.76 ±0.48 / 24.66 ms │          24.95 / 25.24 ±0.19 / 25.53 ms │  1.06x slower │
│ QQuery 41 │     12.41 / 12.60 ±0.18 / 12.92 ms │          13.39 / 13.50 ±0.07 / 13.58 ms │  1.07x slower │
│ QQuery 42 │     22.89 / 23.73 ±0.47 / 24.35 ms │          24.14 / 24.46 ±0.21 / 24.79 ms │     no change │
│ QQuery 43 │        4.48 / 4.59 ±0.19 / 4.98 ms │             4.94 / 5.09 ±0.15 / 5.34 ms │  1.11x slower │
│ QQuery 44 │        8.70 / 8.81 ±0.06 / 8.88 ms │             9.85 / 9.91 ±0.04 / 9.96 ms │  1.13x slower │
│ QQuery 45 │     25.69 / 26.29 ±0.44 / 26.78 ms │          28.50 / 31.93 ±3.12 / 37.71 ms │  1.21x slower │
│ QQuery 46 │     13.31 / 13.82 ±0.62 / 14.94 ms │          13.66 / 14.23 ±0.50 / 15.04 ms │     no change │
│ QQuery 47 │  224.81 / 230.74 ±6.81 / 239.71 ms │      227.27 / 252.16 ±21.00 / 286.77 ms │  1.09x slower │
│ QQuery 48 │  127.34 / 129.06 ±2.33 / 133.36 ms │       128.59 / 134.00 ±6.84 / 147.10 ms │     no change │
│ QQuery 49 │  121.24 / 123.00 ±2.02 / 126.00 ms │       121.80 / 125.29 ±5.00 / 135.22 ms │     no change │
│ QQuery 50 │  124.78 / 126.06 ±1.52 / 128.98 ms │       125.17 / 133.05 ±8.20 / 145.20 ms │  1.06x slower │
│ QQuery 51 │  102.65 / 106.52 ±3.50 / 112.75 ms │       101.06 / 103.31 ±2.24 / 106.69 ms │     no change │
│ QQuery 52 │     24.01 / 24.31 ±0.27 / 24.64 ms │          24.70 / 27.31 ±4.90 / 37.10 ms │  1.12x slower │
│ QQuery 53 │     31.14 / 31.46 ±0.21 / 31.66 ms │          31.25 / 32.15 ±0.91 / 33.67 ms │     no change │
│ QQuery 54 │     30.47 / 32.06 ±1.50 / 34.35 ms │          29.87 / 31.98 ±1.34 / 33.42 ms │     no change │
│ QQuery 55 │     23.64 / 26.47 ±5.45 / 37.38 ms │          23.23 / 23.63 ±0.21 / 23.81 ms │ +1.12x faster │
│ QQuery 56 │     36.44 / 37.41 ±0.76 / 38.76 ms │          34.52 / 34.94 ±0.42 / 35.74 ms │ +1.07x faster │
│ QQuery 57 │  146.52 / 148.61 ±1.49 / 150.83 ms │       142.74 / 148.53 ±7.42 / 162.83 ms │     no change │
│ QQuery 58 │     77.18 / 79.34 ±3.23 / 85.74 ms │          74.62 / 75.13 ±0.52 / 76.11 ms │ +1.06x faster │
│ QQuery 59 │     83.86 / 85.09 ±0.94 / 86.21 ms │          81.93 / 86.91 ±4.31 / 94.72 ms │     no change │
│ QQuery 60 │     39.75 / 40.97 ±1.59 / 44.02 ms │          38.94 / 39.25 ±0.30 / 39.65 ms │     no change │
│ QQuery 61 │     12.69 / 14.98 ±4.33 / 23.65 ms │          11.77 / 11.96 ±0.20 / 12.31 ms │ +1.25x faster │
│ QQuery 62 │     45.24 / 47.84 ±1.78 / 49.97 ms │          44.00 / 44.92 ±0.69 / 45.75 ms │ +1.07x faster │
│ QQuery 63 │     32.09 / 32.59 ±0.34 / 33.06 ms │          31.09 / 31.43 ±0.25 / 31.82 ms │     no change │
│ QQuery 64 │  710.80 / 723.36 ±9.77 / 738.44 ms │      704.77 / 722.74 ±12.99 / 741.74 ms │     no change │
│ QQuery 65 │  155.66 / 161.96 ±3.72 / 165.98 ms │       154.91 / 161.29 ±5.58 / 169.76 ms │     no change │
│ QQuery 66 │     67.62 / 72.04 ±5.13 / 81.76 ms │          66.85 / 67.80 ±1.43 / 70.63 ms │ +1.06x faster │
│ QQuery 67 │  254.78 / 270.82 ±9.35 / 282.03 ms │       261.07 / 263.10 ±2.01 / 266.91 ms │     no change │
│ QQuery 68 │     13.09 / 13.22 ±0.09 / 13.32 ms │          13.26 / 13.55 ±0.22 / 13.86 ms │     no change │
│ QQuery 69 │     71.59 / 74.62 ±2.34 / 77.97 ms │          74.11 / 76.61 ±3.82 / 84.16 ms │     no change │
│ QQuery 70 │ 125.37 / 135.50 ±18.45 / 172.36 ms │       126.41 / 130.22 ±5.45 / 140.85 ms │     no change │
│ QQuery 71 │     33.23 / 33.72 ±0.44 / 34.39 ms │          33.66 / 35.21 ±1.88 / 38.89 ms │     no change │
│ QQuery 72 │  215.80 / 219.94 ±4.12 / 225.70 ms │       223.09 / 226.91 ±3.54 / 233.32 ms │     no change │
│ QQuery 73 │      9.78 / 10.04 ±0.21 / 10.29 ms │          10.78 / 11.09 ±0.29 / 11.62 ms │  1.11x slower │
│ QQuery 74 │  157.79 / 163.87 ±9.14 / 181.97 ms │       168.07 / 173.05 ±3.59 / 177.20 ms │  1.06x slower │
│ QQuery 75 │ 187.39 / 194.81 ±12.17 / 219.06 ms │       194.70 / 200.92 ±9.02 / 218.84 ms │     no change │
│ QQuery 76 │     42.45 / 42.66 ±0.15 / 42.86 ms │          43.78 / 44.99 ±0.89 / 46.46 ms │  1.05x slower │
│ QQuery 77 │     62.48 / 67.06 ±7.96 / 82.97 ms │          65.69 / 67.22 ±2.70 / 72.60 ms │     no change │
│ QQuery 78 │  150.19 / 156.38 ±3.77 / 160.36 ms │       155.40 / 161.62 ±6.47 / 173.67 ms │     no change │
│ QQuery 79 │     68.30 / 68.75 ±0.40 / 69.31 ms │          68.57 / 70.13 ±1.57 / 72.62 ms │     no change │
│ QQuery 80 │     78.77 / 80.24 ±0.98 / 81.55 ms │          77.14 / 78.71 ±2.53 / 83.71 ms │     no change │
│ QQuery 81 │     28.71 / 29.62 ±0.48 / 30.03 ms │          28.45 / 29.34 ±1.57 / 32.48 ms │     no change │
│ QQuery 82 │    39.78 / 47.63 ±12.46 / 72.28 ms │          39.32 / 40.76 ±0.97 / 42.37 ms │ +1.17x faster │
│ QQuery 83 │     37.58 / 38.14 ±0.42 / 38.85 ms │          36.81 / 37.21 ±0.40 / 37.95 ms │     no change │
│ QQuery 84 │     31.26 / 31.76 ±0.30 / 32.12 ms │          30.71 / 31.02 ±0.19 / 31.31 ms │     no change │
│ QQuery 85 │ 155.80 / 163.53 ±11.12 / 185.32 ms │       153.19 / 159.92 ±6.59 / 172.03 ms │     no change │
│ QQuery 86 │     31.43 / 31.84 ±0.32 / 32.33 ms │          30.43 / 30.78 ±0.29 / 31.30 ms │     no change │
│ QQuery 87 │     82.64 / 83.99 ±0.90 / 85.33 ms │          79.08 / 81.13 ±2.13 / 84.64 ms │     no change │
│ QQuery 88 │     69.84 / 72.21 ±2.24 / 76.29 ms │          69.07 / 74.18 ±3.14 / 78.66 ms │     no change │
│ QQuery 89 │     44.19 / 45.20 ±0.83 / 46.70 ms │          43.30 / 43.92 ±0.53 / 44.90 ms │     no change │
│ QQuery 90 │     18.32 / 18.53 ±0.13 / 18.70 ms │          18.60 / 22.50 ±5.90 / 34.13 ms │  1.21x slower │
│ QQuery 91 │     50.95 / 51.71 ±1.05 / 53.76 ms │          51.85 / 53.65 ±1.62 / 56.44 ms │     no change │
│ QQuery 92 │     29.54 / 33.91 ±6.18 / 45.81 ms │          29.75 / 30.59 ±0.84 / 31.77 ms │ +1.11x faster │
│ QQuery 93 │     53.90 / 55.19 ±0.79 / 55.93 ms │          52.70 / 54.54 ±1.04 / 55.76 ms │     no change │
│ QQuery 94 │     36.92 / 37.95 ±0.87 / 39.55 ms │          36.34 / 37.08 ±0.47 / 37.66 ms │     no change │
│ QQuery 95 │  109.22 / 112.96 ±5.03 / 122.82 ms │       111.55 / 115.35 ±3.02 / 120.74 ms │     no change │
│ QQuery 96 │     27.48 / 27.98 ±0.74 / 29.45 ms │          27.24 / 27.99 ±0.59 / 28.72 ms │     no change │
│ QQuery 97 │     49.51 / 51.35 ±2.34 / 55.48 ms │          49.86 / 51.72 ±1.38 / 53.14 ms │     no change │
│ QQuery 98 │     39.76 / 40.87 ±0.64 / 41.71 ms │          40.11 / 40.71 ±0.51 / 41.49 ms │     no change │
│ QQuery 99 │     67.79 / 68.17 ±0.23 / 68.40 ms │          68.87 / 69.17 ±0.30 / 69.56 ms │     no change │
└───────────┴────────────────────────────────────┴─────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                      ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                      │ 9034.88ms │
│ Total Time (perf_parquet-skip-filter-for-full-match)   │ 9122.79ms │
│ Average Time (HEAD)                                    │   91.26ms │
│ Average Time (perf_parquet-skip-filter-for-full-match) │   92.15ms │
│ Queries Faster                                         │        10 │
│ Queries Slower                                         │        20 │
│ Queries with No Change                                 │        69 │
│ Queries with Failure                                   │         0 │
└────────────────────────────────────────────────────────┴───────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 50.0s
Peak memory 1.9 GiB
Avg memory 1.2 GiB
CPU user 128.1s
CPU sys 6.6s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 50.0s
Peak memory 1.8 GiB
Avg memory 1.1 GiB
CPU user 128.4s
CPU sys 6.3s
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 perf_parquet-skip-filter-for-full-match
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃ perf_parquet-skip-filter-for-full-match ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.24 / 4.04 ±5.54 / 15.12 ms │            1.24 / 3.98 ±5.42 / 14.83 ms │     no change │
│ QQuery 1  │        13.27 / 13.42 ±0.08 / 13.50 ms │          13.22 / 13.43 ±0.22 / 13.79 ms │     no change │
│ QQuery 2  │        36.57 / 36.93 ±0.25 / 37.16 ms │          36.66 / 36.91 ±0.30 / 37.50 ms │     no change │
│ QQuery 3  │        30.79 / 31.80 ±1.09 / 33.69 ms │          31.05 / 31.25 ±0.15 / 31.47 ms │     no change │
│ QQuery 4  │     221.52 / 227.79 ±3.37 / 231.70 ms │       223.93 / 226.38 ±1.66 / 228.91 ms │     no change │
│ QQuery 5  │     271.41 / 274.71 ±3.56 / 281.58 ms │       269.70 / 273.04 ±2.30 / 276.27 ms │     no change │
│ QQuery 6  │           1.27 / 1.41 ±0.22 / 1.84 ms │             1.26 / 1.41 ±0.23 / 1.85 ms │     no change │
│ QQuery 7  │        16.82 / 17.15 ±0.19 / 17.35 ms │          16.80 / 16.92 ±0.11 / 17.11 ms │     no change │
│ QQuery 8  │     322.20 / 327.67 ±3.88 / 332.49 ms │       324.88 / 327.26 ±2.15 / 331.16 ms │     no change │
│ QQuery 9  │     457.20 / 464.80 ±6.70 / 473.36 ms │      452.46 / 463.88 ±14.67 / 491.82 ms │     no change │
│ QQuery 10 │        93.76 / 94.17 ±0.28 / 94.52 ms │          94.24 / 94.67 ±0.23 / 94.93 ms │     no change │
│ QQuery 11 │     105.43 / 105.96 ±0.60 / 107.07 ms │       104.92 / 108.03 ±3.43 / 114.22 ms │     no change │
│ QQuery 12 │     296.14 / 300.55 ±3.33 / 305.19 ms │       300.93 / 304.37 ±3.04 / 309.77 ms │     no change │
│ QQuery 13 │     404.07 / 414.25 ±8.42 / 422.64 ms │      399.94 / 422.16 ±13.80 / 438.41 ms │     no change │
│ QQuery 14 │     313.68 / 326.38 ±9.06 / 340.69 ms │       313.57 / 321.07 ±4.73 / 327.04 ms │     no change │
│ QQuery 15 │     269.50 / 273.56 ±3.13 / 278.84 ms │      270.17 / 284.06 ±14.44 / 304.34 ms │     no change │
│ QQuery 16 │     605.15 / 617.39 ±7.76 / 628.03 ms │       613.10 / 620.44 ±4.85 / 626.38 ms │     no change │
│ QQuery 17 │    612.96 / 623.68 ±10.89 / 643.49 ms │      624.00 / 635.56 ±10.79 / 652.40 ms │     no change │
│ QQuery 18 │ 1250.98 / 1265.26 ±12.57 / 1288.23 ms │   1249.64 / 1265.53 ±11.21 / 1278.68 ms │     no change │
│ QQuery 19 │        29.36 / 32.29 ±4.89 / 42.00 ms │          29.65 / 30.20 ±0.49 / 31.08 ms │ +1.07x faster │
│ QQuery 20 │     515.79 / 524.49 ±7.69 / 536.61 ms │       513.74 / 520.96 ±3.75 / 524.24 ms │     no change │
│ QQuery 21 │     564.61 / 573.37 ±6.11 / 581.68 ms │      568.59 / 586.54 ±18.29 / 620.93 ms │     no change │
│ QQuery 22 │    782.61 / 793.67 ±11.65 / 814.18 ms │       780.82 / 787.26 ±6.35 / 798.99 ms │     no change │
│ QQuery 23 │     137.30 / 141.31 ±6.31 / 153.68 ms │       134.48 / 142.29 ±8.87 / 158.92 ms │     no change │
│ QQuery 24 │        45.59 / 53.08 ±9.21 / 67.87 ms │          45.70 / 46.03 ±0.28 / 46.38 ms │ +1.15x faster │
│ QQuery 25 │     143.84 / 146.19 ±1.87 / 149.40 ms │       145.81 / 149.04 ±1.80 / 151.39 ms │     no change │
│ QQuery 26 │        49.01 / 50.43 ±2.24 / 54.90 ms │          49.48 / 50.75 ±1.61 / 53.80 ms │     no change │
│ QQuery 27 │     568.28 / 575.33 ±3.87 / 579.56 ms │       558.68 / 568.55 ±9.62 / 582.34 ms │     no change │
│ QQuery 28 │ 2894.92 / 2936.84 ±39.42 / 3003.34 ms │   2894.60 / 2940.05 ±42.64 / 3004.13 ms │     no change │
│ QQuery 29 │        41.52 / 47.77 ±7.45 / 58.27 ms │          41.75 / 42.39 ±0.63 / 43.21 ms │ +1.13x faster │
│ QQuery 30 │     308.04 / 312.96 ±4.80 / 320.74 ms │       306.50 / 314.58 ±8.66 / 327.01 ms │     no change │
│ QQuery 31 │     292.48 / 302.11 ±7.96 / 311.87 ms │       285.38 / 300.25 ±8.25 / 309.68 ms │     no change │
│ QQuery 32 │    915.76 / 955.80 ±26.34 / 988.83 ms │      931.50 / 951.23 ±16.21 / 973.01 ms │     no change │
│ QQuery 33 │ 1422.80 / 1475.57 ±47.84 / 1561.33 ms │   1445.32 / 1472.91 ±25.96 / 1513.31 ms │     no change │
│ QQuery 34 │ 1475.71 / 1492.87 ±14.83 / 1513.78 ms │   1464.01 / 1519.68 ±58.43 / 1607.67 ms │     no change │
│ QQuery 35 │    281.10 / 304.26 ±27.14 / 355.33 ms │      276.93 / 313.12 ±39.02 / 388.57 ms │     no change │
│ QQuery 36 │        69.37 / 76.86 ±8.53 / 92.41 ms │          64.86 / 69.51 ±5.24 / 79.57 ms │ +1.11x faster │
│ QQuery 37 │        36.24 / 38.41 ±3.53 / 45.44 ms │          37.35 / 45.92 ±8.26 / 59.02 ms │  1.20x slower │
│ QQuery 38 │        37.07 / 41.07 ±3.44 / 46.65 ms │          35.73 / 42.67 ±4.71 / 49.93 ms │     no change │
│ QQuery 39 │    126.20 / 139.48 ±11.74 / 159.44 ms │       137.33 / 144.92 ±6.77 / 155.63 ms │     no change │
│ QQuery 40 │        18.13 / 18.66 ±0.35 / 19.22 ms │          18.80 / 26.41 ±6.28 / 34.49 ms │  1.42x slower │
│ QQuery 41 │        16.93 / 20.36 ±4.01 / 26.61 ms │          16.71 / 18.99 ±4.24 / 27.45 ms │ +1.07x faster │
│ QQuery 42 │        14.41 / 19.89 ±8.01 / 35.32 ms │          14.39 / 16.99 ±4.76 / 26.50 ms │ +1.17x faster │
└───────────┴───────────────────────────────────────┴─────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                      ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                      │ 16493.97ms │
│ Total Time (perf_parquet-skip-filter-for-full-match)   │ 16551.54ms │
│ Average Time (HEAD)                                    │   383.58ms │
│ Average Time (perf_parquet-skip-filter-for-full-match) │   384.92ms │
│ Queries Faster                                         │          6 │
│ Queries Slower                                         │          2 │
│ Queries with No Change                                 │         35 │
│ Queries with Failure                                   │          0 │
└────────────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 85.0s
Peak memory 10.5 GiB
Avg memory 4.7 GiB
CPU user 841.7s
CPU sys 56.9s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 85.0s
Peak memory 12.2 GiB
Avg memory 4.8 GiB
CPU user 839.7s
CPU sys 58.7s
Peak spill 0 B

File an issue against this benchmark runner

@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

run benchmark sort_tpch

env:
  DATAFUSION_EXECUTION_PARQUET_PUSHDOWN_FILTERS: true

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5014143687-1152-m9k9h 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 perf/parquet-skip-filter-for-full-match (a3047ed) to 67947b6 (merge-base) diff using: sort_tpch
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 perf_parquet-skip-filter-for-full-match
--------------------
Benchmark sort_tpch1.json
--------------------
┏━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query ┃                               HEAD ┃ perf_parquet-skip-filter-for-full-match ┃    Change ┃
┡━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Q1    │  122.91 / 124.25 ±1.17 / 126.25 ms │       121.25 / 122.40 ±0.95 / 123.83 ms │ no change │
│ Q2    │  106.05 / 107.38 ±1.34 / 109.75 ms │       105.87 / 106.84 ±1.02 / 108.42 ms │ no change │
│ Q3    │  639.37 / 643.51 ±3.45 / 648.44 ms │       633.04 / 635.12 ±2.01 / 638.89 ms │ no change │
│ Q4    │  193.52 / 197.53 ±3.03 / 201.90 ms │       192.84 / 199.03 ±4.73 / 204.40 ms │ no change │
│ Q5    │  258.97 / 259.76 ±0.55 / 260.69 ms │       259.05 / 260.84 ±1.50 / 263.62 ms │ no change │
│ Q6    │  272.21 / 273.05 ±0.57 / 273.95 ms │       272.86 / 274.67 ±1.95 / 278.34 ms │ no change │
│ Q7    │  445.35 / 448.59 ±2.36 / 452.21 ms │       446.31 / 448.37 ±1.51 / 450.24 ms │ no change │
│ Q8    │ 313.55 / 328.30 ±10.97 / 343.09 ms │       314.35 / 322.37 ±7.79 / 336.22 ms │ no change │
│ Q9    │ 335.52 / 351.19 ±12.97 / 367.66 ms │      331.26 / 347.06 ±11.24 / 363.23 ms │ no change │
│ Q10   │  483.08 / 492.32 ±6.45 / 498.27 ms │       481.76 / 485.58 ±2.83 / 490.47 ms │ no change │
│ Q11   │ 249.70 / 262.63 ±12.90 / 283.74 ms │      248.96 / 260.64 ±15.10 / 290.43 ms │ no change │
└───────┴────────────────────────────────────┴─────────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                      ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                      │ 3488.51ms │
│ Total Time (perf_parquet-skip-filter-for-full-match)   │ 3462.92ms │
│ Average Time (HEAD)                                    │  317.14ms │
│ Average Time (perf_parquet-skip-filter-for-full-match) │  314.81ms │
│ Queries Faster                                         │         0 │
│ Queries Slower                                         │         0 │
│ Queries with No Change                                 │        11 │
│ Queries with Failure                                   │         0 │
└────────────────────────────────────────────────────────┴───────────┘

Resource Usage

sort_tpch — base (merge-base)

Metric Value
Wall time 20.0s
Peak memory 2.6 GiB
Avg memory 1.2 GiB
CPU user 63.7s
CPU sys 2.7s
Peak spill 0 B

sort_tpch — branch

Metric Value
Wall time 20.0s
Peak memory 2.5 GiB
Avg memory 1.2 GiB
CPU user 63.5s
CPU sys 2.9s
Peak spill 0 B

File an issue against this benchmark runner

@zhuqi-lucas
zhuqi-lucas force-pushed the perf/parquet-skip-filter-for-full-match branch from a3047ed to fea0264 Compare July 31, 2026 14:13
Builds on the `peek_next_row_group` API landed in apache/arrow-rs#10158.
When Parquet stats prove that every row of a row group already satisfies
the pushdown predicate (`fully_matched`), running the per-row `RowFilter`
inside that row group is pure overhead — every row passes anyway. This
change installs an *empty* `RowFilter` on fully-matched runs and only
pays the row-level machinery on RGs that still need filtering.

* `access_plan.rs` — `ParquetAccessPlan` now tracks per-RG
  `fully_matched` state, produced during static pruning.
* `metrics.rs` — new `row_filter_skipped_fully_matched` counter to
  observe how often the toggle fires.
* `push_decoder.rs` — `RgPlanEntry` carries the per-RG toggle;
  `RowFilterContext` swaps between the real filter (from the
  `prebuild_row_filter_candidates` cache) and an empty filter as the
  decoder crosses row-group boundaries.
* `row_filter.rs` — split `build_row_filter` into `prebuild_*` and
  `row_filter_from_prebuilt`: the expensive tree walk + candidate
  construction runs once per file, and the cheap per-RG bind runs at
  each toggle. Preserves the existing public `build_row_filter` API for
  non-toggling callers.
* `opener/mod.rs` — wires the prebuilt cache into the decoder builder;
  skips page-index loading for fully-matched RGs (their per-row filter
  is a no-op, so page pruning saves nothing).
* `sort.rs` — sort-order-aware RG reorder preserves the per-RG toggle
  through reordering.

* `fully_matched_rgs_skip_row_filter` (`dynamic_row_group_pruning.rs`) —
  4 RGs of 3 rows each, predicate `v >= 3` makes RGs 1..=3 fully
  matched. Asserts: (a) results are correct, (b)
  `row_filter_skipped_fully_matched` fires at least once at the
  RG 0 → RG 1 boundary.
* All 6 pre-existing `dynamic_row_group_pruning` tests still pass.
* Full `datasource-parquet` lib suite (158 tests) passes.
…t_file_name handling lost in rebase

Three fixes on top of the rebase onto latest main:

1. row_filter.rs carried a stale pre-apache#23638 copy of the column-resolution
   machinery (ParquetReadPlan, PushdownChecker, StructFieldAccess,
   build_filter_schema, etc.) that main has since moved into
   projection_read_plan.rs. Rebuilt the file on main's shared-module
   version, keeping only this PR's real additions
   (PrebuiltRowFilterCandidate, prebuild_row_filter_candidates,
   row_filter_from_prebuilt, and the RowFilterGenerator removal):
   2194 → 1483 lines, -798 net. The stray "strinrg" typo lived in the
   deleted copy.

2. The rebase silently dropped main's input_file_name() handling in
   ParquetMorselizer (import, the per-file literal rewrite in open(),
   and the test_input_file_name_projection test) because this PR's
   restructure of open() overlapped the region apache#23638 later touched.
   Restored all three; the test passes again.

3. metrics: the row_filter_skipped_fully_matched doc claimed to count
   row groups, but the counter increments once per suppression event
   (a run of consecutive fully-matched RGs shares a single toggle).
   Doc now states the actual semantics.

Verified: 158 datasource-parquet tests pass (with PARQUET_TEST_DATA),
cargo doc clean, clippy clean on touched files.
…redAccessPlan::new, regenerate slt for new metric, fix redundant doc link
@zhuqi-lucas
zhuqi-lucas force-pushed the perf/parquet-skip-filter-for-full-match branch from fea0264 to 2445739 Compare August 6, 2026 13:30
@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

run benchmark tpcds

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5205270442-1472-9pnl8 6.12.85+ #1 SMP Wed Jun 17 20:31:55 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 perf/parquet-skip-filter-for-full-match (2445739) to 4fcbfb1 (merge-base) diff

Run configuration
run benchmark tpcds

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)

Comparing perf/parquet-skip-filter-for-full-match (2445739) to 4fcbfb1 (merge-base) diff

Run configuration
run benchmark tpcds
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 perf_parquet-skip-filter-for-full-match
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ perf_parquet-skip-filter-for-full-match ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 1  │    5.39 ms │                                 5.45 ms │    no change │
│ QQuery 2  │   79.15 ms │                                80.08 ms │    no change │
│ QQuery 3  │   29.06 ms │                                29.20 ms │    no change │
│ QQuery 4  │  485.95 ms │                               486.90 ms │    no change │
│ QQuery 5  │   52.05 ms │                                52.25 ms │    no change │
│ QQuery 6  │   36.20 ms │                                36.36 ms │    no change │
│ QQuery 7  │   93.80 ms │                                94.12 ms │    no change │
│ QQuery 8  │   36.78 ms │                                36.70 ms │    no change │
│ QQuery 9  │   51.97 ms │                                53.90 ms │    no change │
│ QQuery 10 │   63.09 ms │                                62.86 ms │    no change │
│ QQuery 11 │  304.15 ms │                               302.56 ms │    no change │
│ QQuery 12 │   28.23 ms │                                28.85 ms │    no change │
│ QQuery 13 │  118.18 ms │                               119.27 ms │    no change │
│ QQuery 14 │  410.96 ms │                               412.14 ms │    no change │
│ QQuery 15 │   56.39 ms │                                57.35 ms │    no change │
│ QQuery 16 │    6.55 ms │                                 6.59 ms │    no change │
│ QQuery 17 │   79.39 ms │                                79.93 ms │    no change │
│ QQuery 18 │  122.52 ms │                               123.46 ms │    no change │
│ QQuery 19 │   41.33 ms │                                41.86 ms │    no change │
│ QQuery 20 │   35.69 ms │                                35.97 ms │    no change │
│ QQuery 21 │   17.22 ms │                                17.33 ms │    no change │
│ QQuery 22 │   62.76 ms │                                62.76 ms │    no change │
│ QQuery 23 │  339.03 ms │                               340.39 ms │    no change │
│ QQuery 24 │  223.62 ms │                               223.94 ms │    no change │
│ QQuery 25 │  108.40 ms │                               110.12 ms │    no change │
│ QQuery 26 │   56.84 ms │                                58.12 ms │    no change │
│ QQuery 27 │    6.11 ms │                                 6.12 ms │    no change │
│ QQuery 28 │   56.29 ms │                                57.83 ms │    no change │
│ QQuery 29 │   96.24 ms │                                97.17 ms │    no change │
│ QQuery 30 │   32.27 ms │                                32.62 ms │    no change │
│ QQuery 31 │  110.68 ms │                               111.88 ms │    no change │
│ QQuery 32 │   19.88 ms │                                20.25 ms │    no change │
│ QQuery 33 │   37.34 ms │                                38.03 ms │    no change │
│ QQuery 34 │    9.73 ms │                                 9.96 ms │    no change │
│ QQuery 35 │   73.05 ms │                                73.38 ms │    no change │
│ QQuery 36 │    5.75 ms │                                 5.75 ms │    no change │
│ QQuery 37 │    6.89 ms │                                 6.90 ms │    no change │
│ QQuery 38 │   61.14 ms │                                61.66 ms │    no change │
│ QQuery 39 │   89.44 ms │                                89.53 ms │    no change │
│ QQuery 40 │   23.23 ms │                                23.53 ms │    no change │
│ QQuery 41 │   11.36 ms │                                11.42 ms │    no change │
│ QQuery 42 │   23.57 ms │                                23.92 ms │    no change │
│ QQuery 43 │    4.94 ms │                                 4.85 ms │    no change │
│ QQuery 44 │    9.11 ms │                                 9.26 ms │    no change │
│ QQuery 45 │   37.57 ms │                                37.57 ms │    no change │
│ QQuery 46 │   11.83 ms │                                11.51 ms │    no change │
│ QQuery 47 │  226.85 ms │                               226.71 ms │    no change │
│ QQuery 48 │   95.56 ms │                                96.91 ms │    no change │
│ QQuery 49 │   75.82 ms │                                76.68 ms │    no change │
│ QQuery 50 │   58.50 ms │                                59.33 ms │    no change │
│ QQuery 51 │   91.51 ms │                                92.45 ms │    no change │
│ QQuery 52 │   23.71 ms │                                24.47 ms │    no change │
│ QQuery 53 │   29.11 ms │                                29.29 ms │    no change │
│ QQuery 54 │   54.66 ms │                                54.72 ms │    no change │
│ QQuery 55 │   23.53 ms │                                23.72 ms │    no change │
│ QQuery 56 │   38.91 ms │                                39.07 ms │    no change │
│ QQuery 57 │  173.22 ms │                               174.93 ms │    no change │
│ QQuery 58 │  111.65 ms │                               112.71 ms │    no change │
│ QQuery 59 │  116.83 ms │                               118.16 ms │    no change │
│ QQuery 60 │   39.04 ms │                                39.93 ms │    no change │
│ QQuery 61 │   11.93 ms │                                12.20 ms │    no change │
│ QQuery 62 │   45.82 ms │                                46.12 ms │    no change │
│ QQuery 63 │   29.44 ms │                                29.77 ms │    no change │
│ QQuery 64 │  405.56 ms │                               406.64 ms │    no change │
│ QQuery 65 │  124.73 ms │                               121.41 ms │    no change │
│ QQuery 66 │   79.53 ms │                                79.93 ms │    no change │
│ QQuery 67 │  240.43 ms │                               241.87 ms │    no change │
│ QQuery 68 │   11.92 ms │                                11.89 ms │    no change │
│ QQuery 69 │   56.91 ms │                                57.44 ms │    no change │
│ QQuery 70 │  106.51 ms │                               107.22 ms │    no change │
│ QQuery 71 │   35.35 ms │                                35.65 ms │    no change │
│ QQuery 72 │ 1973.85 ms │                              2091.29 ms │ 1.06x slower │
│ QQuery 73 │    9.47 ms │                                 9.52 ms │    no change │
│ QQuery 74 │  169.91 ms │                               170.36 ms │    no change │
│ QQuery 75 │  146.96 ms │                               148.27 ms │    no change │
│ QQuery 76 │   35.06 ms │                                35.29 ms │    no change │
│ QQuery 77 │   60.56 ms │                                61.63 ms │    no change │
│ QQuery 78 │  196.09 ms │                               195.56 ms │    no change │
│ QQuery 79 │   66.46 ms │                                67.00 ms │    no change │
│ QQuery 80 │   98.80 ms │                                99.16 ms │    no change │
│ QQuery 81 │   25.76 ms │                                25.88 ms │    no change │
│ QQuery 82 │   16.16 ms │                                16.53 ms │    no change │
│ QQuery 83 │   39.60 ms │                                39.62 ms │    no change │
│ QQuery 84 │   29.69 ms │                                30.07 ms │    no change │
│ QQuery 85 │  106.52 ms │                               105.86 ms │    no change │
│ QQuery 86 │   25.16 ms │                                25.28 ms │    no change │
│ QQuery 87 │   61.35 ms │                                61.89 ms │    no change │
│ QQuery 88 │   63.13 ms │                                63.10 ms │    no change │
│ QQuery 89 │   35.49 ms │                                36.10 ms │    no change │
│ QQuery 90 │   16.81 ms │                                16.95 ms │    no change │
│ QQuery 91 │   45.00 ms │                                46.10 ms │    no change │
│ QQuery 92 │   28.79 ms │                                29.51 ms │    no change │
│ QQuery 93 │   49.88 ms │                                49.60 ms │    no change │
│ QQuery 94 │   38.09 ms │                                38.64 ms │    no change │
│ QQuery 95 │   79.59 ms │                                80.50 ms │    no change │
│ QQuery 96 │   23.72 ms │                                24.20 ms │    no change │
│ QQuery 97 │   46.20 ms │                                47.22 ms │    no change │
│ QQuery 98 │   42.89 ms │                                43.38 ms │    no change │
│ QQuery 99 │   69.85 ms │                                70.45 ms │    no change │
└───────────┴────────────┴─────────────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                      ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                      │ 9578.99ms │
│ Total Time (perf_parquet-skip-filter-for-full-match)   │ 9739.80ms │
│ Average Time (HEAD)                                    │   96.76ms │
│ Average Time (perf_parquet-skip-filter-for-full-match) │   98.38ms │
│ Queries Faster                                         │         0 │
│ Queries Slower                                         │         1 │
│ Queries with No Change                                 │        98 │
│ Queries with Failure                                   │         0 │
└────────────────────────────────────────────────────────┴───────────┘

Distribution per query (min / mean ±stddev / max):

Comparing HEAD and perf_parquet-skip-filter-for-full-match
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃ perf_parquet-skip-filter-for-full-match ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │           5.39 / 5.86 ±0.91 / 7.67 ms │             5.45 / 5.93 ±0.86 / 7.65 ms │     no change │
│ QQuery 2  │        79.15 / 79.54 ±0.24 / 79.86 ms │          80.08 / 80.30 ±0.14 / 80.50 ms │     no change │
│ QQuery 3  │        29.06 / 29.34 ±0.17 / 29.54 ms │          29.20 / 29.61 ±0.26 / 29.97 ms │     no change │
│ QQuery 4  │     485.95 / 489.39 ±2.03 / 492.28 ms │       486.90 / 491.55 ±3.48 / 496.36 ms │     no change │
│ QQuery 5  │        52.05 / 53.09 ±1.20 / 55.42 ms │          52.25 / 52.79 ±0.37 / 53.24 ms │     no change │
│ QQuery 6  │        36.20 / 37.00 ±0.62 / 37.83 ms │          36.36 / 36.88 ±0.26 / 37.06 ms │     no change │
│ QQuery 7  │        93.80 / 94.48 ±0.40 / 95.07 ms │          94.12 / 94.74 ±0.38 / 95.17 ms │     no change │
│ QQuery 8  │        36.78 / 37.81 ±1.54 / 40.86 ms │          36.70 / 37.28 ±0.51 / 38.17 ms │     no change │
│ QQuery 9  │        51.97 / 53.68 ±1.68 / 55.95 ms │          53.90 / 55.62 ±1.43 / 57.81 ms │     no change │
│ QQuery 10 │        63.09 / 63.19 ±0.09 / 63.36 ms │          62.86 / 63.72 ±0.46 / 64.16 ms │     no change │
│ QQuery 11 │     304.15 / 305.60 ±1.33 / 307.49 ms │       302.56 / 306.93 ±2.89 / 311.67 ms │     no change │
│ QQuery 12 │        28.23 / 28.75 ±0.56 / 29.78 ms │          28.85 / 29.36 ±0.37 / 29.72 ms │     no change │
│ QQuery 13 │     118.18 / 119.19 ±1.22 / 121.24 ms │       119.27 / 120.85 ±2.62 / 126.07 ms │     no change │
│ QQuery 14 │     410.96 / 415.07 ±3.35 / 419.96 ms │       412.14 / 417.54 ±5.03 / 425.37 ms │     no change │
│ QQuery 15 │        56.39 / 56.97 ±0.56 / 57.92 ms │          57.35 / 57.85 ±0.54 / 58.72 ms │     no change │
│ QQuery 16 │           6.55 / 6.69 ±0.18 / 7.04 ms │             6.59 / 6.76 ±0.21 / 7.17 ms │     no change │
│ QQuery 17 │        79.39 / 80.48 ±1.27 / 82.92 ms │          79.93 / 81.10 ±1.14 / 83.17 ms │     no change │
│ QQuery 18 │     122.52 / 125.11 ±3.32 / 131.64 ms │       123.46 / 124.22 ±0.72 / 125.13 ms │     no change │
│ QQuery 19 │        41.33 / 41.83 ±0.27 / 42.07 ms │          41.86 / 42.23 ±0.35 / 42.79 ms │     no change │
│ QQuery 20 │        35.69 / 36.30 ±0.39 / 36.88 ms │          35.97 / 36.76 ±1.34 / 39.44 ms │     no change │
│ QQuery 21 │        17.22 / 17.46 ±0.23 / 17.80 ms │          17.33 / 17.50 ±0.13 / 17.70 ms │     no change │
│ QQuery 22 │        62.76 / 63.86 ±0.73 / 64.77 ms │          62.76 / 63.26 ±0.40 / 63.90 ms │     no change │
│ QQuery 23 │     339.03 / 344.71 ±5.43 / 353.42 ms │       340.39 / 344.43 ±3.13 / 349.87 ms │     no change │
│ QQuery 24 │     223.62 / 225.54 ±1.40 / 227.66 ms │       223.94 / 227.06 ±3.17 / 232.20 ms │     no change │
│ QQuery 25 │     108.40 / 109.75 ±1.39 / 112.43 ms │       110.12 / 111.03 ±1.01 / 112.93 ms │     no change │
│ QQuery 26 │        56.84 / 58.54 ±2.21 / 62.84 ms │          58.12 / 59.28 ±1.83 / 62.92 ms │     no change │
│ QQuery 27 │           6.11 / 6.28 ±0.19 / 6.63 ms │             6.12 / 6.23 ±0.16 / 6.54 ms │     no change │
│ QQuery 28 │        56.29 / 60.42 ±2.55 / 64.33 ms │          57.83 / 61.13 ±1.70 / 62.52 ms │     no change │
│ QQuery 29 │        96.24 / 97.78 ±1.06 / 99.47 ms │         97.17 / 98.49 ±1.66 / 101.66 ms │     no change │
│ QQuery 30 │        32.27 / 33.41 ±0.62 / 33.90 ms │          32.62 / 34.92 ±2.53 / 39.62 ms │     no change │
│ QQuery 31 │     110.68 / 111.12 ±0.43 / 111.72 ms │       111.88 / 112.64 ±0.54 / 113.57 ms │     no change │
│ QQuery 32 │        19.88 / 20.16 ±0.36 / 20.84 ms │          20.25 / 20.61 ±0.32 / 21.16 ms │     no change │
│ QQuery 33 │        37.34 / 37.59 ±0.24 / 38.01 ms │          38.03 / 38.26 ±0.22 / 38.55 ms │     no change │
│ QQuery 34 │          9.73 / 9.91 ±0.14 / 10.09 ms │           9.96 / 11.44 ±2.08 / 15.56 ms │  1.15x slower │
│ QQuery 35 │        73.05 / 74.94 ±2.45 / 79.67 ms │          73.38 / 74.03 ±0.53 / 75.01 ms │     no change │
│ QQuery 36 │           5.75 / 5.86 ±0.18 / 6.23 ms │             5.75 / 5.89 ±0.23 / 6.36 ms │     no change │
│ QQuery 37 │           6.89 / 6.95 ±0.05 / 7.02 ms │             6.90 / 6.97 ±0.05 / 7.02 ms │     no change │
│ QQuery 38 │        61.14 / 62.26 ±0.65 / 63.07 ms │          61.66 / 62.38 ±0.54 / 63.01 ms │     no change │
│ QQuery 39 │        89.44 / 91.39 ±3.25 / 97.87 ms │          89.53 / 91.90 ±3.40 / 98.54 ms │     no change │
│ QQuery 40 │        23.23 / 23.84 ±0.42 / 24.43 ms │          23.53 / 23.64 ±0.08 / 23.74 ms │     no change │
│ QQuery 41 │        11.36 / 11.56 ±0.24 / 12.03 ms │          11.42 / 11.59 ±0.17 / 11.89 ms │     no change │
│ QQuery 42 │        23.57 / 24.39 ±0.74 / 25.42 ms │          23.92 / 24.49 ±0.55 / 25.38 ms │     no change │
│ QQuery 43 │           4.94 / 5.03 ±0.12 / 5.27 ms │             4.85 / 4.99 ±0.14 / 5.26 ms │     no change │
│ QQuery 44 │           9.11 / 9.22 ±0.09 / 9.37 ms │             9.26 / 9.39 ±0.08 / 9.50 ms │     no change │
│ QQuery 45 │        37.57 / 38.26 ±0.53 / 39.15 ms │          37.57 / 38.26 ±0.42 / 38.79 ms │     no change │
│ QQuery 46 │        11.83 / 12.09 ±0.21 / 12.46 ms │          11.51 / 11.91 ±0.37 / 12.50 ms │     no change │
│ QQuery 47 │     226.85 / 228.26 ±1.29 / 230.37 ms │       226.71 / 229.84 ±3.98 / 237.62 ms │     no change │
│ QQuery 48 │        95.56 / 97.04 ±1.26 / 98.73 ms │         96.91 / 99.51 ±3.29 / 105.59 ms │     no change │
│ QQuery 49 │        75.82 / 76.47 ±0.72 / 77.83 ms │          76.68 / 77.31 ±0.44 / 77.78 ms │     no change │
│ QQuery 50 │        58.50 / 60.71 ±3.68 / 68.05 ms │          59.33 / 60.76 ±2.20 / 65.12 ms │     no change │
│ QQuery 51 │        91.51 / 93.14 ±1.71 / 96.36 ms │          92.45 / 93.22 ±0.56 / 94.07 ms │     no change │
│ QQuery 52 │        23.71 / 24.14 ±0.23 / 24.36 ms │          24.47 / 24.56 ±0.08 / 24.72 ms │     no change │
│ QQuery 53 │        29.11 / 29.36 ±0.16 / 29.56 ms │          29.29 / 29.80 ±0.62 / 31.03 ms │     no change │
│ QQuery 54 │        54.66 / 57.02 ±4.30 / 65.61 ms │          54.72 / 55.98 ±1.36 / 58.52 ms │     no change │
│ QQuery 55 │        23.53 / 24.25 ±0.53 / 25.07 ms │          23.72 / 24.25 ±0.34 / 24.59 ms │     no change │
│ QQuery 56 │        38.91 / 39.42 ±0.33 / 39.89 ms │          39.07 / 39.86 ±0.51 / 40.56 ms │     no change │
│ QQuery 57 │     173.22 / 176.21 ±3.18 / 182.24 ms │       174.93 / 176.00 ±1.34 / 178.65 ms │     no change │
│ QQuery 58 │     111.65 / 112.43 ±1.03 / 114.42 ms │       112.71 / 113.56 ±0.90 / 115.24 ms │     no change │
│ QQuery 59 │     116.83 / 119.40 ±2.56 / 123.79 ms │       118.16 / 119.48 ±1.31 / 121.70 ms │     no change │
│ QQuery 60 │        39.04 / 39.91 ±0.72 / 41.01 ms │          39.93 / 40.45 ±0.57 / 41.41 ms │     no change │
│ QQuery 61 │        11.93 / 12.06 ±0.18 / 12.41 ms │          12.20 / 12.34 ±0.16 / 12.65 ms │     no change │
│ QQuery 62 │        45.82 / 46.31 ±0.29 / 46.58 ms │          46.12 / 46.49 ±0.25 / 46.76 ms │     no change │
│ QQuery 63 │        29.44 / 29.94 ±0.43 / 30.56 ms │          29.77 / 32.04 ±2.59 / 36.17 ms │  1.07x slower │
│ QQuery 64 │     405.56 / 407.87 ±2.25 / 411.93 ms │       406.64 / 413.75 ±6.47 / 424.52 ms │     no change │
│ QQuery 65 │     124.73 / 125.80 ±1.05 / 127.57 ms │       121.41 / 124.70 ±2.41 / 127.57 ms │     no change │
│ QQuery 66 │        79.53 / 82.83 ±5.34 / 93.45 ms │          79.93 / 83.82 ±3.51 / 89.13 ms │     no change │
│ QQuery 67 │     240.43 / 244.50 ±3.43 / 249.47 ms │       241.87 / 244.79 ±2.96 / 249.69 ms │     no change │
│ QQuery 68 │        11.92 / 12.14 ±0.30 / 12.72 ms │          11.89 / 12.00 ±0.16 / 12.32 ms │     no change │
│ QQuery 69 │        56.91 / 57.15 ±0.21 / 57.51 ms │          57.44 / 57.76 ±0.17 / 57.93 ms │     no change │
│ QQuery 70 │     106.51 / 110.94 ±2.88 / 114.40 ms │       107.22 / 113.81 ±4.54 / 119.83 ms │     no change │
│ QQuery 71 │        35.35 / 35.63 ±0.21 / 35.89 ms │          35.65 / 36.16 ±0.51 / 37.00 ms │     no change │
│ QQuery 72 │ 1973.85 / 2016.14 ±36.34 / 2057.45 ms │   2091.29 / 2142.42 ±61.25 / 2246.59 ms │  1.06x slower │
│ QQuery 73 │         9.47 / 10.63 ±1.86 / 14.31 ms │            9.52 / 9.81 ±0.31 / 10.40 ms │ +1.08x faster │
│ QQuery 74 │     169.91 / 172.50 ±3.03 / 178.45 ms │       170.36 / 171.39 ±0.95 / 172.77 ms │     no change │
│ QQuery 75 │     146.96 / 151.27 ±6.17 / 163.53 ms │       148.27 / 149.52 ±1.25 / 151.82 ms │     no change │
│ QQuery 76 │        35.06 / 35.51 ±0.30 / 35.90 ms │          35.29 / 35.83 ±0.59 / 36.96 ms │     no change │
│ QQuery 77 │        60.56 / 61.26 ±0.60 / 62.12 ms │          61.63 / 62.79 ±1.70 / 66.16 ms │     no change │
│ QQuery 78 │     196.09 / 199.56 ±3.84 / 206.39 ms │       195.56 / 199.78 ±4.33 / 208.01 ms │     no change │
│ QQuery 79 │        66.46 / 67.21 ±0.61 / 68.14 ms │          67.00 / 67.79 ±0.89 / 69.54 ms │     no change │
│ QQuery 80 │      98.80 / 101.02 ±2.76 / 105.81 ms │        99.16 / 103.19 ±5.60 / 114.29 ms │     no change │
│ QQuery 81 │        25.76 / 26.17 ±0.35 / 26.63 ms │          25.88 / 26.39 ±0.51 / 27.31 ms │     no change │
│ QQuery 82 │        16.16 / 16.90 ±1.15 / 19.19 ms │          16.53 / 16.64 ±0.06 / 16.71 ms │     no change │
│ QQuery 83 │        39.60 / 40.73 ±2.00 / 44.73 ms │          39.62 / 40.34 ±0.49 / 41.04 ms │     no change │
│ QQuery 84 │        29.69 / 30.55 ±1.44 / 33.43 ms │          30.07 / 30.31 ±0.17 / 30.53 ms │     no change │
│ QQuery 85 │     106.52 / 108.13 ±1.80 / 111.03 ms │       105.86 / 109.13 ±3.94 / 116.68 ms │     no change │
│ QQuery 86 │        25.16 / 25.46 ±0.17 / 25.62 ms │          25.28 / 25.68 ±0.25 / 25.95 ms │     no change │
│ QQuery 87 │        61.35 / 62.22 ±0.92 / 63.52 ms │          61.89 / 62.96 ±0.78 / 64.27 ms │     no change │
│ QQuery 88 │        63.13 / 65.16 ±2.44 / 69.41 ms │          63.10 / 66.57 ±4.72 / 75.94 ms │     no change │
│ QQuery 89 │        35.49 / 35.97 ±0.31 / 36.37 ms │          36.10 / 36.83 ±0.80 / 38.30 ms │     no change │
│ QQuery 90 │        16.81 / 16.95 ±0.15 / 17.23 ms │          16.95 / 17.19 ±0.24 / 17.65 ms │     no change │
│ QQuery 91 │        45.00 / 45.56 ±0.45 / 46.29 ms │          46.10 / 46.80 ±0.52 / 47.52 ms │     no change │
│ QQuery 92 │        28.79 / 29.42 ±0.56 / 30.28 ms │          29.51 / 29.82 ±0.32 / 30.40 ms │     no change │
│ QQuery 93 │        49.88 / 51.60 ±2.35 / 56.23 ms │          49.60 / 50.25 ±0.63 / 51.43 ms │     no change │
│ QQuery 94 │        38.09 / 38.16 ±0.11 / 38.36 ms │          38.64 / 40.55 ±1.16 / 41.80 ms │  1.06x slower │
│ QQuery 95 │        79.59 / 80.41 ±0.53 / 81.03 ms │          80.50 / 81.35 ±0.95 / 82.92 ms │     no change │
│ QQuery 96 │        23.72 / 23.92 ±0.21 / 24.28 ms │          24.20 / 24.39 ±0.15 / 24.65 ms │     no change │
│ QQuery 97 │        46.20 / 48.43 ±2.61 / 52.73 ms │          47.22 / 47.43 ±0.15 / 47.69 ms │     no change │
│ QQuery 98 │        42.89 / 43.55 ±0.52 / 44.47 ms │          43.38 / 44.23 ±1.10 / 46.30 ms │     no change │
│ QQuery 99 │        69.85 / 70.36 ±0.40 / 71.01 ms │          70.45 / 70.81 ±0.30 / 71.16 ms │     no change │
└───────────┴───────────────────────────────────────┴─────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                      ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                      │ 9739.37ms │
│ Total Time (perf_parquet-skip-filter-for-full-match)   │ 9916.17ms │
│ Average Time (HEAD)                                    │   98.38ms │
│ Average Time (perf_parquet-skip-filter-for-full-match) │  100.16ms │
│ Queries Faster                                         │         1 │
│ Queries Slower                                         │         4 │
│ Queries with No Change                                 │        94 │
│ Queries with Failure                                   │         0 │
└────────────────────────────────────────────────────────┴───────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 50.0s
Peak memory 2.2 GiB
Avg memory 1.5 GiB
CPU user 213.0s
CPU sys 5.8s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 50.0s
Peak memory 2.1 GiB
Avg memory 1.5 GiB
CPU user 215.4s
CPU sys 5.9s
Peak spill 0 B

File an issue against this benchmark runner

@codecov-commenter

codecov-commenter commented Aug 6, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 92.39437% with 27 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.30%. Comparing base (9b3b518) to head (35883b5).

Files with missing lines Patch % Lines
datafusion/datasource-parquet/src/push_decoder.rs 83.57% 16 Missing and 7 partials ⚠️
datafusion/datasource-parquet/src/row_filter.rs 95.38% 1 Missing and 2 partials ⚠️
datafusion/datasource-parquet/src/opener/mod.rs 98.82% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@           Coverage Diff            @@
##             main   #23696    +/-   ##
========================================
  Coverage   81.29%   81.30%            
========================================
  Files        1110     1110            
  Lines      385336   385564   +228     
  Branches   385336   385564   +228     
========================================
+ Hits       313261   313468   +207     
- Misses      53594    53601     +7     
- Partials    18481    18495    +14     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@zhuqi-lucas
zhuqi-lucas marked this pull request as ready for review August 7, 2026 07:00
…atched=1

The existing slt coverage only ever showed row_filter_skipped_fully_matched=0
(none of those cases enable pushdown_filters, so no RowFilter exists to skip).
Add a static-predicate case (v >= 4 with pushdown on) that drops RG0 by stats,
keeps a RowFilter on the straddling RG1, and skips it across the fully-matched
run RGs 2..=4 -- surfacing the optimization from SQL with =1.
@zhuqi-lucas
zhuqi-lucas requested review from adriangb and alamb August 11, 2026 10:49
Comment on lines +597 to +600
/// Layout: 4 RGs of 3 values each. Predicate `v >= 3` makes RG 0 a
/// straddler (some rows fail) but RGs 1..=3 fully matched (every value
/// >= 3 by stats). RG 0 keeps the row filter, then the toggle flips to
/// "no filter" when we enter the fully-matched run.

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.

Can we test v >= 3 AND v <= 10 or make a new test for v <= 10? The point is to test going from fully-matched - > non-fully-matched

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Thanks @adriangb for the review, good suggestion! Updated the test to v >= 3 AND v <= 10 in 801b099 — RG 3 now straddles the upper bound (11, 12 fail), so it covers the full toggle lifecycle (filter ON → OFF across the fully-matched run → back ON) and asserts 11/12 are filtered out by the reinstalled RowFilter.

zhuqi-lucas and others added 2 commits August 11, 2026 21:11
Change the predicate to `v >= 3 AND v <= 10` so RG 3 becomes a straddler
again (11, 12 fail the upper bound), exercising the full toggle lifecycle
(filter ON -> OFF across the fully-matched run -> back ON) and asserting
11/12 are filtered out by the reinstalled filter.
…_parquet.slt

Merging main brought in EXPLAIN ANALYZE cases in push_down_filter_parquet.slt
whose expected parquet-scan metrics predate this PR's new
`row_filter_skipped_fully_matched` counter. Regenerate the expectations to
include it (=0 in these cases; no fully-matched RG run).

@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.

Thanks @zhuqi-lucas -- this looks neat -- I left some suggestions

if at_boundary {
match decoder_ref.peek_next_row_group() {
Ok(Some(actual)) => {
while let Some(front) = self.rg_plan.front() {

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.

maybe this would be a good method on rg_plan -- like rg_plan.advance_to_index(actual)` or something 🤔

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done — extracted into advance_rg_plan_to() (e0fbd24).

let rebuilt = match decoder.into_builder() {
Ok(b) => b.with_row_groups(new_indices).build(),
Ok(mut builder) => {
builder = builder.with_row_groups(new_indices);

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.

same thing here -- can we somehow encapsulate this logic into a method or function to keep the lengh of the state machine down?

@zhuqi-lucas zhuqi-lucas Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Pulled the advance/prune helpers out (e0fbd24).

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Went ahead and extracted it too in 19572d4 — the rebuild+toggle block is now rebuild_decoder_at_boundary, returning Ok(true) to finish the stream, Ok(false) to continue, or Err to propagate, so the Step 2 loop no longer has any inline early-returns.

.expect("decoder present")
.is_at_row_group_boundary();
let decoder_ref = self.decoder.as_ref().expect("decoder present");
let at_boundary = decoder_ref.is_at_row_group_boundary();

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.

Can this be handled at a higher layer or encapsulated somehow? Like in a method? The state machine is already complicated enough and so moving this plan manipulation into methods will help hopefully

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done — moved into sync_rg_plan_to_decoder_frontier + prune_boundary_row_groups (e0fbd24).

// Sync `rg_plan` with the row group the decoder will actually
// emit next. arrow-rs's `try_next_reader` silently advances
// past row groups whose row selection is empty (e.g. when
// page-index pruning has already eliminated every page of

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 comment could be shortened significantly -- the point is that try_next_reader can silently advance, so we have to advance the plan accordingly. The details about ColumnIndex and rg_pla.front() seems overly focused on the details

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Trimmed to the point (e0fbd24).

/// Prebuilt candidates: expression already column-reassigned, projection
/// mask already resolved. Shared across the file's row groups. `Arc` so
/// cloning into stream state is cheap.
pub(crate) prebuilt: Arc<Vec<PrebuiltRowFilterCandidate>>,

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.

Another thought I had was make this a strucgture of

    pub(crate) prebuilt: PrebuiltRowFilterCandidateList,

with

struct PrebuiltRowFilterCandidateList {
  inner : Arc<Vec<PrebuiltRowFilterCandidate>>,
}

Again as a way to try and encapsualte the complexity of this optimization more

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done — added PrebuiltRowFilterCandidateList (e0fbd24).

pub(crate) row_filter_skipped_fully_matched: Count,
}

/// Side-channel state that lets [`PushDecoderStreamState`] **rebuild** the

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.

why is it a "side channel"? It seems like it is more like a "cache"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Renamed to a cache (e0fbd24).

/// Side-channel state that lets [`PushDecoderStreamState`] **rebuild** the
/// parquet [`RowFilter`] mid-scan.
///
/// The decoder owns the filter once installed, but `Box<dyn ArrowPredicate>`

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.

"The decoder owns the filter once installed, but Box<dyn ArrowPredicate>
/// has no clone path, so a filter that was replaced at a previous boundary
/// cannot be reinstalled later."

seems like an implementation detail -- keeping the pre-built filters seems like the key point

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Trimmed to the key point (e0fbd24).

#[derive(Debug, Clone)]
pub(crate) struct RgPlanEntry {
pub(crate) rg_index: usize,
/// `true` when the static pruning predicate proved every row of this

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 the first sentence here would be eough -- the rest is details of the implementation that I don't think adds mich here. The point is that we can skip row filtering when we know it won't filter anything

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Shortened (e0fbd24).

…im comments

Per @alamb's review of the fully-matched RowFilter-skip push decoder:
- wrap the prebuilt candidate Arc<Vec> in a PrebuiltRowFilterCandidateList newtype
- reframe the RowFilterContext doc as a cache (not a side channel)
- extract the row-group-boundary plan manipulation into
  sync_rg_plan_to_decoder_frontier / advance_rg_plan_to /
  prune_boundary_row_groups to shorten the state machine loop
- trim over-detailed comments to their essential point
@zhuqi-lucas

zhuqi-lucas commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

Thanks @alamb for the review and the good suggestions! Addressed all comments now.

…ndary

Follow-up to review: pull the decoder rebuild + per-RG RowFilter toggle out of
the Step 2 loop into rebuild_decoder_at_boundary, which returns Ok(true) when
the plan is now empty (stream finishes), Ok(false) to continue, or Err to
propagate a build failure — replacing the two inline early-returns.

@adriangb adriangb 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.

Looks very cool overall!

Comment on lines -1438 to +1437
let (decoder, rg_plan) = {
let (decoder, rg_plan, filter_installed, row_filter_context) = {

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 seems like a good candidate to factor out into a function returning a named struct w/ fields

@zhuqi-lucas zhuqi-lucas Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good idea — will factor the initial decoder / rg_plan / filter setup into a helper returning a named struct (e.g. InitialDecoderState) as a follow-up, keeping this PR focused on the correctness fixes. Filed #24286 to track it.

Comment on lines +594 to +609
/// Strip row groups whose post-pruning `RowSelection` selects zero rows.
///
/// arrow-rs's push decoder silently advances past such row groups inside
/// `try_next_reader`, but the rest of DataFusion (per-RG metadata maps,
/// the runtime dynamic-pruner, the per-RG `RowFilter` toggle) assumes a
/// 1:1 correspondence between the prepared plan and the readers the
/// decoder hands back. Removing these empty entries here keeps that
/// invariant and lets downstream code consult per-RG state — like
/// [`PreparedAccessPlan::fully_matched`] — without going out of sync.
///
/// The flat `RowSelection` is split per row group with
/// [`RowSelection::split_off`] (mirroring arrow-rs's own logic) and the
/// surviving segments are concatenated back into the result selection.
/// When `row_selection` is `None` (no page-index pruning, no
/// user-supplied selection) no row group can be empty and the inputs are
/// returned unchanged.

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 seems like a good general improvement that already applies to main, should we factor it out as an independent PR if so?

@zhuqi-lucas zhuqi-lucas Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Correction to my earlier reply here — I got this wrong: strip_empty_row_groups is added by this PR (commit df4c62e), not #22450 (which merged back in June), and it is not on main. It is currently coupled to fully_matched — it keeps row_group_indexes, fully_matched, and the RowSelection aligned while stripping empty RGs. You are right that the empty-RG stripping itself is generic, so I filed #24287 to extract that generic part into its own follow-up PR once this lands.

Comment on lines +1513 to +1514
builder = builder.with_row_filter(
parquet::arrow::arrow_reader::RowFilter::new(vec![]),

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.

should this branch set filter_installed = true or prepared.file_metrics.row_filter_skipped_fully_matched.add(1)?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good catch — fixed in b31b0b4: the first-RG-fully-matched path now calls row_filter_skipped_fully_matched.add(1), matching the mid-scan toggle. filter_installed stays false (no real filter is installed).

}

/// Pop `rg_plan` entries until its front is `target` (or it empties).
fn advance_rg_plan_to(&mut self, target: usize) {

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.

If target isn't present in rg_plan (an invariant violation, the decoder's frontier names an RG our plan doesn't know), this loop silently drains. Can we add a check that target is found and if it's not throw an internal_err!() instead of possibly returning bogus results?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Agreed — fixed in b31b0b4. advance_rg_plan_to now returns an internal error if target is not in rg_plan (decoder/plan divergence) instead of silently draining the plan.

Comment on lines +3513 to +3514
#[tokio::test]
async fn test_input_file_name_projection() {

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 test seems to have moved with no changes - location diff noise?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Just a location move from the rebase (the input_file_name handling was restored during a rebase, shifting this helper) — no functional change. Will rebase to clear the diff noise before merge.

…r divergence

Per @adriangb's review:
- opener: when the first RG is already fully-matched, count the
  row_filter_skipped_fully_matched suppression at open time (previously only
  counted for mid-scan toggles), keeping the metric consistent.
- push_decoder: advance_rg_plan_to now returns an internal error if the
  decoder frontier names an RG absent from rg_plan, instead of silently
  draining the plan (which would truncate the scan).
@zhuqi-lucas

zhuqi-lucas commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

Thanks @adriangb for the review and the good suggestions! Addressed in latest PR.

@adriangb

Copy link
Copy Markdown
Contributor

Looks good to me! I'd like to do some more benchmark runs, I do see regressions in the previous runs. I'd also like to know if there are existing benchmarks we expect to improve mechanistically and check that they do indeed improve; otherwise we should add benchmarks first.

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 core Core DataFusion crate datasource Changes to the datasource crate sqllogictest SQL Logic Tests (.slt)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Follow-up #22450] Per-RG fully_matched RowFilter skip · needs arrow-rs#10158 (peek_next_row_group)

6 participants