Skip to content

feat: preserve bitmap-backed RowSelection through ParquetAccessPlan - #24186

Open
haohuaijin wants to merge 4 commits into
apache:mainfrom
haohuaijin:preserve-bitmap-row-selection
Open

feat: preserve bitmap-backed RowSelection through ParquetAccessPlan#24186
haohuaijin wants to merge 4 commits into
apache:mainfrom
haohuaijin:preserve-bitmap-row-selection

Conversation

@haohuaijin

@haohuaijin haohuaijin commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Rationale for this change

Parquet 59 added a bitmap (BooleanBuffer) backing for RowSelection alongside the RLE selector form. However, ParquetAccessPlan always materialized selectors, so a caller-provided bitmap selection (via the ParquetRowSelection extension or an external ParquetAccessPlan) was converted to RLE before reaching the parquet reader. For highly fragmented selections the bitmap form is significantly cheaper to build, slice, and intersect, so it should survive the trip through the access plan.

What changes are included in this PR?

  • ParquetAccessPlan::try_new_from_overall_row_selection splits a mask-backed selection per row group with RowSelection::split_off, which slices the BooleanBuffer (O(bitmap) overall) instead of materializing selectors. The selector path is unchanged.
  • ParquetAccessPlan::into_overall_row_selection produces a bitmap-backed overall selection when any row group selection is bitmap-backed, promoting selector-backed groups (e.g. groups that page index pruning intersected back to selectors). When no group is bitmap-backed, the existing selector path is preserved.
  • ParquetAccessPlan::scan_selection promotes the incoming selection to a bitmap when the existing selection is bitmap-backed, since RowSelection::intersection only stays mask-backed when both sides are masks; the intersection is then a bitwise AND instead of a selector merge.
  • reverse_row_selection (reverse scans for TopK) slices the bitmap per scanned row group and re-concatenates in reverse, keeping the mask backing; a debug_assert guards the "selection covers exactly the scanned row groups" contract.
  • Row-count validation now uses row_count() + skipped_row_count(), which avoids materializing selectors from a mask just to count rows.

Are these changes tested?

Yes:

  • Unit tests for the mask path of try_new_from_overall_row_selection (round trip + invalid row count), mixed-backing promotion in into_overall_row_selection, mask preservation in scan_selection, and bitmap preservation through PreparedAccessPlan::reverse (including a fully scanned row group).
  • End-to-end tests in external_access_plan.rs: a bitmap ParquetRowSelection spanning row groups, and a bitmap selection combined with a predicate that prunes a row group via statistics.
  • Existing selector-based tests are unchanged and passing (datafusion-datasource-parquet unit tests and the parquet_integration suite).

Are there any user-facing changes?

No API changes. Behavior change: when any per-row-group selection is bitmap-backed, the overall RowSelection handed to the parquet reader is now bitmap-backed instead of selector-backed (semantically identical selection).

Parquet 59 added a bitmap (BooleanBuffer) backing for RowSelection in
addition to the RLE selector form. Previously ParquetAccessPlan always
materialized selectors, so a caller-provided bitmap selection was
converted to RLE before reaching the parquet reader, which is wasteful
for fragmented selections.

This change keeps bitmap-backed selections bitmap-backed end to end:

* `try_new_from_overall_row_selection` splits a mask-backed selection
  per row group with `split_off`, which slices the BooleanBuffer
  instead of materializing selectors.
* `into_overall_row_selection` builds a bitmap-backed overall selection
  when any row group selection is bitmap-backed, promoting
  selector-backed groups (e.g. ones page index pruning intersected).
* `scan_selection` promotes the incoming selection to a bitmap when
  intersecting with an existing bitmap-backed selection, so the
  intersection is a bitwise AND and stays mask-backed.
* `reverse_row_selection` slices and re-concatenates the bitmap for
  reverse scans, with a debug_assert guarding the row-count contract.
@github-actions github-actions Bot added core Core DataFusion crate datasource Changes to the datasource crate labels Aug 8, 2026
@codecov-commenter

codecov-commenter commented Aug 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 81.07%. Comparing base (0ef844e) to head (605d2fb).
⚠️ Report is 20 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #24186      +/-   ##
==========================================
+ Coverage   81.02%   81.07%   +0.04%     
==========================================
  Files        1105     1106       +1     
  Lines      380671   382067    +1396     
  Branches   380671   382067    +1396     
==========================================
+ Hits       308436   309756    +1320     
- Misses      54002    54038      +36     
- Partials    18233    18273      +40     

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

@haohuaijin
haohuaijin marked this pull request as ready for review August 9, 2026 06:30
@alamb

alamb commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

run benchmark clickbench_partitioned clickbench_pushdown

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5245033720-1523-k4zl6 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 preserve-bitmap-row-selection (605d2fb) to 0ef844e (merge-base) diff

Run configuration
run benchmark 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-c5245033720-1524-4f8tm 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 preserve-bitmap-row-selection (605d2fb) to 0ef844e (merge-base) diff

Run configuration
run benchmark clickbench_pushdown

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 preserve-bitmap-row-selection (605d2fb) to 0ef844e (merge-base) diff

Run configuration
run benchmark clickbench_pushdown
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 preserve-bitmap-row-selection
--------------------
Benchmark clickbench_pushdown.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ preserve-bitmap-row-selection ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0  │    1.26 ms │                       1.24 ms │    no change │
│ QQuery 1  │   12.95 ms │                      13.08 ms │    no change │
│ QQuery 2  │   37.59 ms │                      36.90 ms │    no change │
│ QQuery 3  │   30.57 ms │                      30.57 ms │    no change │
│ QQuery 4  │  227.16 ms │                     224.59 ms │    no change │
│ QQuery 5  │  277.01 ms │                     272.76 ms │    no change │
│ QQuery 6  │    1.31 ms │                       1.28 ms │    no change │
│ QQuery 7  │   16.53 ms │                      16.64 ms │    no change │
│ QQuery 8  │  327.48 ms │                     327.06 ms │    no change │
│ QQuery 9  │  461.41 ms │                     462.66 ms │    no change │
│ QQuery 10 │   95.08 ms │                      93.06 ms │    no change │
│ QQuery 11 │  107.18 ms │                     105.02 ms │    no change │
│ QQuery 12 │  297.11 ms │                     294.92 ms │    no change │
│ QQuery 13 │  408.09 ms │                     403.38 ms │    no change │
│ QQuery 14 │  312.92 ms │                     314.25 ms │    no change │
│ QQuery 15 │  274.87 ms │                     276.15 ms │    no change │
│ QQuery 16 │  616.99 ms │                     612.24 ms │    no change │
│ QQuery 17 │  618.40 ms │                     619.13 ms │    no change │
│ QQuery 18 │ 1255.55 ms │                    1260.80 ms │    no change │
│ QQuery 19 │   29.05 ms │                      29.46 ms │    no change │
│ QQuery 20 │  524.96 ms │                     516.54 ms │    no change │
│ QQuery 21 │  562.60 ms │                     567.92 ms │    no change │
│ QQuery 22 │  914.87 ms │                     911.27 ms │    no change │
│ QQuery 23 │  112.58 ms │                     115.25 ms │    no change │
│ QQuery 24 │   36.50 ms │                      36.32 ms │    no change │
│ QQuery 25 │  141.94 ms │                     140.39 ms │    no change │
│ QQuery 26 │   48.82 ms │                      49.24 ms │    no change │
│ QQuery 27 │  566.01 ms │                     559.24 ms │    no change │
│ QQuery 28 │ 2919.00 ms │                    2954.20 ms │    no change │
│ QQuery 29 │   41.76 ms │                      41.37 ms │    no change │
│ QQuery 30 │  314.28 ms │                     309.96 ms │    no change │
│ QQuery 31 │  288.84 ms │                     289.10 ms │    no change │
│ QQuery 32 │  943.86 ms │                     959.66 ms │    no change │
│ QQuery 33 │ 1420.42 ms │                    1486.15 ms │    no change │
│ QQuery 34 │ 1475.46 ms │                    1477.52 ms │    no change │
│ QQuery 35 │  284.07 ms │                     286.77 ms │    no change │
│ QQuery 36 │   67.80 ms │                      67.77 ms │    no change │
│ QQuery 37 │   38.45 ms │                      37.19 ms │    no change │
│ QQuery 38 │   33.68 ms │                      35.49 ms │ 1.05x slower │
│ QQuery 39 │  129.34 ms │                     130.69 ms │    no change │
│ QQuery 40 │   17.71 ms │                      17.99 ms │    no change │
│ QQuery 41 │   17.09 ms │                      16.78 ms │    no change │
│ QQuery 42 │   14.93 ms │                      14.77 ms │    no change │
└───────────┴────────────┴───────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                            ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                            │ 16323.49ms │
│ Total Time (preserve-bitmap-row-selection)   │ 16416.79ms │
│ Average Time (HEAD)                          │   379.62ms │
│ Average Time (preserve-bitmap-row-selection) │   381.79ms │
│ Queries Faster                               │          0 │
│ Queries Slower                               │          1 │
│ Queries with No Change                       │         42 │
│ Queries with Failure                         │          0 │
└──────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and preserve-bitmap-row-selection
--------------------
Benchmark clickbench_pushdown.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃         preserve-bitmap-row-selection ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.26 / 4.05 ±5.44 / 14.94 ms │          1.24 / 4.04 ±5.48 / 15.00 ms │     no change │
│ QQuery 1  │        12.95 / 13.03 ±0.05 / 13.10 ms │        13.08 / 13.20 ±0.12 / 13.37 ms │     no change │
│ QQuery 2  │        37.59 / 37.87 ±0.22 / 38.18 ms │        36.90 / 37.25 ±0.29 / 37.60 ms │     no change │
│ QQuery 3  │        30.57 / 31.32 ±0.82 / 32.90 ms │        30.57 / 30.88 ±0.24 / 31.20 ms │     no change │
│ QQuery 4  │     227.16 / 229.99 ±2.39 / 233.18 ms │     224.59 / 228.24 ±2.76 / 231.55 ms │     no change │
│ QQuery 5  │     277.01 / 279.19 ±2.57 / 283.88 ms │     272.76 / 275.06 ±1.45 / 276.58 ms │     no change │
│ QQuery 6  │           1.31 / 1.46 ±0.20 / 1.85 ms │           1.28 / 1.43 ±0.23 / 1.88 ms │     no change │
│ QQuery 7  │        16.53 / 16.65 ±0.09 / 16.78 ms │        16.64 / 16.84 ±0.16 / 17.07 ms │     no change │
│ QQuery 8  │     327.48 / 331.54 ±3.46 / 337.12 ms │     327.06 / 328.73 ±1.62 / 331.37 ms │     no change │
│ QQuery 9  │     461.41 / 467.74 ±5.32 / 475.43 ms │     462.66 / 469.10 ±3.64 / 472.91 ms │     no change │
│ QQuery 10 │       95.08 / 98.90 ±5.63 / 110.02 ms │        93.06 / 94.14 ±0.70 / 95.26 ms │     no change │
│ QQuery 11 │     107.18 / 108.48 ±1.81 / 112.07 ms │     105.02 / 105.89 ±0.47 / 106.35 ms │     no change │
│ QQuery 12 │     297.11 / 304.68 ±5.15 / 311.38 ms │     294.92 / 303.47 ±5.52 / 308.38 ms │     no change │
│ QQuery 13 │     408.09 / 422.14 ±8.62 / 433.59 ms │    403.38 / 423.61 ±15.98 / 444.53 ms │     no change │
│ QQuery 14 │     312.92 / 317.32 ±3.88 / 324.17 ms │     314.25 / 319.57 ±4.39 / 327.52 ms │     no change │
│ QQuery 15 │     274.87 / 280.30 ±5.26 / 289.29 ms │    276.15 / 284.37 ±11.77 / 307.68 ms │     no change │
│ QQuery 16 │     616.99 / 625.34 ±9.75 / 640.22 ms │    612.24 / 628.23 ±11.07 / 641.27 ms │     no change │
│ QQuery 17 │    618.40 / 636.28 ±20.12 / 675.45 ms │     619.13 / 629.68 ±6.26 / 636.75 ms │     no change │
│ QQuery 18 │ 1255.55 / 1287.77 ±20.55 / 1320.13 ms │ 1260.80 / 1289.53 ±26.54 / 1336.29 ms │     no change │
│ QQuery 19 │       29.05 / 35.73 ±12.99 / 61.71 ms │        29.46 / 29.59 ±0.13 / 29.83 ms │ +1.21x faster │
│ QQuery 20 │     524.96 / 533.81 ±9.35 / 551.91 ms │     516.54 / 525.57 ±6.65 / 533.79 ms │     no change │
│ QQuery 21 │     562.60 / 567.88 ±5.00 / 577.21 ms │     567.92 / 573.97 ±6.88 / 585.45 ms │     no change │
│ QQuery 22 │     914.87 / 920.64 ±5.98 / 931.88 ms │     911.27 / 921.44 ±9.26 / 938.42 ms │     no change │
│ QQuery 23 │     112.58 / 119.27 ±6.29 / 129.90 ms │     115.25 / 123.13 ±7.84 / 134.24 ms │     no change │
│ QQuery 24 │        36.50 / 41.02 ±5.11 / 49.83 ms │        36.32 / 38.54 ±2.88 / 44.22 ms │ +1.06x faster │
│ QQuery 25 │     141.94 / 148.62 ±7.60 / 161.84 ms │     140.39 / 144.65 ±5.30 / 155.05 ms │     no change │
│ QQuery 26 │        48.82 / 50.80 ±3.42 / 57.61 ms │        49.24 / 51.92 ±4.00 / 59.79 ms │     no change │
│ QQuery 27 │    566.01 / 584.06 ±17.30 / 614.47 ms │    559.24 / 586.02 ±15.25 / 602.43 ms │     no change │
│ QQuery 28 │ 2919.00 / 2948.94 ±18.43 / 2976.12 ms │ 2954.20 / 2987.82 ±22.93 / 3010.72 ms │     no change │
│ QQuery 29 │       41.76 / 53.89 ±10.06 / 69.30 ms │       41.37 / 51.71 ±13.47 / 77.28 ms │     no change │
│ QQuery 30 │     314.28 / 319.74 ±4.65 / 327.28 ms │     309.96 / 318.30 ±6.75 / 328.60 ms │     no change │
│ QQuery 31 │     288.84 / 297.59 ±8.75 / 312.82 ms │    289.10 / 299.57 ±10.28 / 318.27 ms │     no change │
│ QQuery 32 │   943.86 / 970.88 ±28.13 / 1021.61 ms │   959.66 / 991.90 ±31.09 / 1051.23 ms │     no change │
│ QQuery 33 │ 1420.42 / 1502.68 ±54.34 / 1580.52 ms │ 1486.15 / 1530.49 ±59.84 / 1648.77 ms │     no change │
│ QQuery 34 │ 1475.46 / 1492.01 ±17.04 / 1516.61 ms │ 1477.52 / 1514.83 ±19.45 / 1533.96 ms │     no change │
│ QQuery 35 │    284.07 / 319.31 ±37.75 / 373.70 ms │    286.77 / 297.48 ±11.47 / 319.31 ms │ +1.07x faster │
│ QQuery 36 │        67.80 / 69.54 ±1.43 / 71.96 ms │        67.77 / 72.63 ±3.83 / 78.14 ms │     no change │
│ QQuery 37 │        38.45 / 43.35 ±3.25 / 48.68 ms │        37.19 / 38.72 ±1.92 / 42.37 ms │ +1.12x faster │
│ QQuery 38 │        33.68 / 34.94 ±1.26 / 37.18 ms │        35.49 / 39.33 ±3.93 / 46.39 ms │  1.13x slower │
│ QQuery 39 │     129.34 / 145.46 ±9.64 / 159.38 ms │     130.69 / 140.52 ±5.37 / 147.03 ms │     no change │
│ QQuery 40 │        17.71 / 20.37 ±3.80 / 27.84 ms │        17.99 / 22.37 ±4.56 / 29.79 ms │  1.10x slower │
│ QQuery 41 │        17.09 / 19.70 ±3.44 / 26.43 ms │        16.78 / 19.12 ±2.94 / 24.46 ms │     no change │
│ QQuery 42 │        14.93 / 17.35 ±4.43 / 26.21 ms │        14.77 / 15.19 ±0.48 / 16.01 ms │ +1.14x faster │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                            ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                            │ 16751.64ms │
│ Total Time (preserve-bitmap-row-selection)   │ 16818.10ms │
│ Average Time (HEAD)                          │   389.57ms │
│ Average Time (preserve-bitmap-row-selection) │   391.12ms │
│ Queries Faster                               │          5 │
│ Queries Slower                               │          2 │
│ Queries with No Change                       │         36 │
│ Queries with Failure                         │          0 │
└──────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_pushdown — base (merge-base)

Metric Value
Wall time 85.0s
Peak memory 11.7 GiB
Avg memory 4.7 GiB
CPU user 854.5s
CPU sys 58.3s
Peak spill 0 B

clickbench_pushdown — branch

Metric Value
Wall time 85.0s
Peak memory 11.2 GiB
Avg memory 4.8 GiB
CPU user 854.4s
CPU sys 61.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)

Comparing preserve-bitmap-row-selection (605d2fb) to 0ef844e (merge-base) diff

Run configuration
run benchmark clickbench_partitioned
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 preserve-bitmap-row-selection
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ preserve-bitmap-row-selection ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │    1.22 ms │                       1.25 ms │     no change │
│ QQuery 1  │   12.76 ms │                      12.65 ms │     no change │
│ QQuery 2  │   37.81 ms │                      37.05 ms │     no change │
│ QQuery 3  │   31.30 ms │                      30.80 ms │     no change │
│ QQuery 4  │  235.94 ms │                     222.79 ms │ +1.06x faster │
│ QQuery 5  │  275.23 ms │                     270.96 ms │     no change │
│ QQuery 6  │    1.31 ms │                       1.37 ms │     no change │
│ QQuery 7  │   14.82 ms │                      14.63 ms │     no change │
│ QQuery 8  │  325.99 ms │                     375.48 ms │  1.15x slower │
│ QQuery 9  │  452.98 ms │                     461.51 ms │     no change │
│ QQuery 10 │   71.78 ms │                      73.01 ms │     no change │
│ QQuery 11 │   82.78 ms │                      83.63 ms │     no change │
│ QQuery 12 │  272.90 ms │                     274.02 ms │     no change │
│ QQuery 13 │  369.59 ms │                     364.72 ms │     no change │
│ QQuery 14 │  283.66 ms │                     282.81 ms │     no change │
│ QQuery 15 │  269.18 ms │                     268.54 ms │     no change │
│ QQuery 16 │  612.34 ms │                     609.13 ms │     no change │
│ QQuery 17 │  627.41 ms │                     614.18 ms │     no change │
│ QQuery 18 │ 1256.48 ms │                    1244.33 ms │     no change │
│ QQuery 19 │   27.92 ms │                      27.81 ms │     no change │
│ QQuery 20 │  521.24 ms │                     516.92 ms │     no change │
│ QQuery 21 │  513.38 ms │                     513.95 ms │     no change │
│ QQuery 22 │  999.04 ms │                     993.84 ms │     no change │
│ QQuery 23 │ 3219.40 ms │                    3058.43 ms │ +1.05x faster │
│ QQuery 24 │   41.47 ms │                      44.09 ms │  1.06x slower │
│ QQuery 25 │  111.98 ms │                     119.31 ms │  1.07x slower │
│ QQuery 26 │   41.85 ms │                      45.61 ms │  1.09x slower │
│ QQuery 27 │  512.95 ms │                     551.12 ms │  1.07x slower │
│ QQuery 28 │ 2885.64 ms │                    2954.38 ms │     no change │
│ QQuery 29 │   41.29 ms │                      41.50 ms │     no change │
│ QQuery 30 │  302.00 ms │                     307.36 ms │     no change │
│ QQuery 31 │  284.89 ms │                     284.39 ms │     no change │
│ QQuery 32 │  994.44 ms │                    1003.87 ms │     no change │
│ QQuery 33 │ 1418.42 ms │                    1446.93 ms │     no change │
│ QQuery 34 │ 1419.25 ms │                    1466.80 ms │     no change │
│ QQuery 35 │  348.07 ms │                     276.05 ms │ +1.26x faster │
│ QQuery 36 │   79.67 ms │                      67.20 ms │ +1.19x faster │
│ QQuery 37 │   40.08 ms │                      36.53 ms │ +1.10x faster │
│ QQuery 38 │   43.80 ms │                      42.61 ms │     no change │
│ QQuery 39 │  163.09 ms │                     145.40 ms │ +1.12x faster │
│ QQuery 40 │   15.49 ms │                      14.64 ms │ +1.06x faster │
│ QQuery 41 │   15.11 ms │                      13.67 ms │ +1.11x faster │
│ QQuery 42 │   14.64 ms │                      13.31 ms │ +1.10x faster │
└───────────┴────────────┴───────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                            ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                            │ 19290.60ms │
│ Total Time (preserve-bitmap-row-selection)   │ 19228.61ms │
│ Average Time (HEAD)                          │   448.62ms │
│ Average Time (preserve-bitmap-row-selection) │   447.18ms │
│ Queries Faster                               │          9 │
│ Queries Slower                               │          5 │
│ Queries with No Change                       │         29 │
│ Queries with Failure                         │          0 │
└──────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and preserve-bitmap-row-selection
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃          preserve-bitmap-row-selection ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.22 / 3.91 ±5.31 / 14.53 ms │           1.25 / 3.97 ±5.36 / 14.68 ms │     no change │
│ QQuery 1  │        12.76 / 12.90 ±0.12 / 13.11 ms │         12.65 / 12.76 ±0.08 / 12.89 ms │     no change │
│ QQuery 2  │        37.81 / 38.10 ±0.28 / 38.54 ms │         37.05 / 37.33 ±0.24 / 37.65 ms │     no change │
│ QQuery 3  │        31.30 / 32.00 ±0.65 / 32.95 ms │         30.80 / 31.05 ±0.16 / 31.23 ms │     no change │
│ QQuery 4  │    235.94 / 261.62 ±13.43 / 274.55 ms │     222.79 / 234.46 ±10.33 / 250.75 ms │ +1.12x faster │
│ QQuery 5  │    275.23 / 291.58 ±15.16 / 312.43 ms │     270.96 / 281.59 ±11.53 / 302.04 ms │     no change │
│ QQuery 6  │           1.31 / 1.45 ±0.19 / 1.83 ms │            1.37 / 1.51 ±0.19 / 1.89 ms │     no change │
│ QQuery 7  │        14.82 / 15.32 ±0.44 / 15.92 ms │         14.63 / 14.86 ±0.14 / 15.07 ms │     no change │
│ QQuery 8  │    325.99 / 337.71 ±12.33 / 360.37 ms │      375.48 / 384.52 ±7.69 / 397.59 ms │  1.14x slower │
│ QQuery 9  │     452.98 / 460.34 ±5.44 / 466.96 ms │     461.51 / 477.37 ±11.47 / 490.18 ms │     no change │
│ QQuery 10 │        71.78 / 72.49 ±0.55 / 73.43 ms │         73.01 / 76.51 ±5.02 / 86.48 ms │  1.06x slower │
│ QQuery 11 │        82.78 / 83.35 ±0.37 / 83.77 ms │         83.63 / 85.74 ±1.79 / 88.18 ms │     no change │
│ QQuery 12 │     272.90 / 278.86 ±4.59 / 286.30 ms │     274.02 / 299.66 ±20.87 / 337.64 ms │  1.07x slower │
│ QQuery 13 │     369.59 / 383.57 ±9.53 / 399.23 ms │     364.72 / 379.40 ±12.31 / 399.33 ms │     no change │
│ QQuery 14 │     283.66 / 290.16 ±6.11 / 300.00 ms │      282.81 / 288.67 ±5.44 / 295.64 ms │     no change │
│ QQuery 15 │     269.18 / 274.47 ±3.90 / 278.90 ms │      268.54 / 276.82 ±7.40 / 288.61 ms │     no change │
│ QQuery 16 │    612.34 / 637.09 ±31.06 / 695.65 ms │     609.13 / 655.80 ±42.53 / 718.68 ms │     no change │
│ QQuery 17 │    627.41 / 660.87 ±35.94 / 720.76 ms │     614.18 / 631.09 ±16.05 / 661.10 ms │     no change │
│ QQuery 18 │ 1256.48 / 1285.90 ±31.73 / 1346.88 ms │  1244.33 / 1283.65 ±31.51 / 1333.69 ms │     no change │
│ QQuery 19 │       27.92 / 34.97 ±13.28 / 61.53 ms │         27.81 / 28.06 ±0.17 / 28.31 ms │ +1.25x faster │
│ QQuery 20 │     521.24 / 529.89 ±6.42 / 539.07 ms │     516.92 / 529.26 ±12.46 / 553.27 ms │     no change │
│ QQuery 21 │     513.38 / 516.72 ±2.09 / 519.79 ms │     513.95 / 537.90 ±16.10 / 564.51 ms │     no change │
│ QQuery 22 │  999.04 / 1029.08 ±24.29 / 1060.35 ms │   993.84 / 1005.97 ±11.64 / 1026.15 ms │     no change │
│ QQuery 23 │ 3219.40 / 3325.00 ±83.52 / 3431.05 ms │ 3058.43 / 3158.92 ±104.01 / 3355.86 ms │     no change │
│ QQuery 24 │        41.47 / 42.43 ±0.75 / 43.55 ms │        44.09 / 50.18 ±11.19 / 72.54 ms │  1.18x slower │
│ QQuery 25 │     111.98 / 118.48 ±8.15 / 134.23 ms │      119.31 / 125.18 ±9.16 / 143.42 ms │  1.06x slower │
│ QQuery 26 │        41.85 / 42.85 ±0.68 / 43.62 ms │         45.61 / 46.58 ±1.15 / 48.73 ms │  1.09x slower │
│ QQuery 27 │     512.95 / 524.84 ±6.88 / 533.96 ms │      551.12 / 560.98 ±9.29 / 572.52 ms │  1.07x slower │
│ QQuery 28 │ 2885.64 / 2934.41 ±55.56 / 3006.91 ms │  2954.38 / 3008.60 ±34.40 / 3047.48 ms │     no change │
│ QQuery 29 │        41.29 / 41.37 ±0.10 / 41.56 ms │         41.50 / 47.42 ±7.46 / 60.45 ms │  1.15x slower │
│ QQuery 30 │    302.00 / 316.41 ±10.56 / 330.56 ms │     307.36 / 325.84 ±11.88 / 341.72 ms │     no change │
│ QQuery 31 │     284.89 / 292.62 ±6.21 / 300.49 ms │     284.39 / 322.26 ±33.63 / 385.41 ms │  1.10x slower │
│ QQuery 32 │  994.44 / 1048.33 ±45.48 / 1110.63 ms │  1003.87 / 1062.22 ±33.16 / 1092.63 ms │     no change │
│ QQuery 33 │ 1418.42 / 1478.44 ±44.65 / 1534.76 ms │  1446.93 / 1497.55 ±38.26 / 1537.89 ms │     no change │
│ QQuery 34 │ 1419.25 / 1494.80 ±60.65 / 1585.25 ms │  1466.80 / 1581.77 ±77.81 / 1711.63 ms │  1.06x slower │
│ QQuery 35 │    348.07 / 411.19 ±86.70 / 582.33 ms │     276.05 / 300.21 ±26.90 / 352.35 ms │ +1.37x faster │
│ QQuery 36 │       79.67 / 87.12 ±8.66 / 103.56 ms │         67.20 / 75.32 ±8.26 / 88.77 ms │ +1.16x faster │
│ QQuery 37 │        40.08 / 44.53 ±5.56 / 54.96 ms │         36.53 / 43.86 ±6.87 / 56.06 ms │     no change │
│ QQuery 38 │        43.80 / 45.28 ±1.42 / 46.99 ms │         42.61 / 43.76 ±0.84 / 44.70 ms │     no change │
│ QQuery 39 │     163.09 / 173.90 ±6.70 / 182.11 ms │      145.40 / 157.49 ±8.92 / 167.85 ms │ +1.10x faster │
│ QQuery 40 │        15.49 / 16.29 ±0.50 / 17.05 ms │         14.64 / 14.88 ±0.23 / 15.28 ms │ +1.09x faster │
│ QQuery 41 │        15.11 / 15.47 ±0.33 / 16.09 ms │         13.67 / 13.99 ±0.27 / 14.47 ms │ +1.11x faster │
│ QQuery 42 │        14.64 / 14.72 ±0.06 / 14.82 ms │         13.31 / 13.45 ±0.12 / 13.65 ms │ +1.09x faster │
└───────────┴───────────────────────────────────────┴────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                            ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                            │ 20000.82ms │
│ Total Time (preserve-bitmap-row-selection)   │ 20008.42ms │
│ Average Time (HEAD)                          │   465.14ms │
│ Average Time (preserve-bitmap-row-selection) │   465.31ms │
│ Queries Faster                               │          8 │
│ Queries Slower                               │         10 │
│ Queries with No Change                       │         25 │
│ Queries with Failure                         │          0 │
└──────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 105.0s
Peak memory 12.1 GiB
Avg memory 4.7 GiB
CPU user 1018.6s
CPU sys 75.2s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 105.0s
Peak memory 10.1 GiB
Avg memory 4.4 GiB
CPU user 1017.0s
CPU sys 77.1s
Peak spill 0 B

File an issue against this benchmark runner

@alamb

alamb commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

🤔 the clickbench results look good -- let's see if I can reproduce them

@alamb

alamb commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

run benchmark clickbench_partitioned

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5246026975-1531-qdjzj 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 preserve-bitmap-row-selection (605d2fb) to 0ef844e (merge-base) diff

Run configuration
run benchmark clickbench_partitioned

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

Comparing preserve-bitmap-row-selection (605d2fb) to 0ef844e (merge-base) diff

Run configuration
run benchmark clickbench_partitioned
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 preserve-bitmap-row-selection
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ preserve-bitmap-row-selection ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0  │    1.22 ms │                       1.22 ms │    no change │
│ QQuery 1  │   12.65 ms │                      12.53 ms │    no change │
│ QQuery 2  │   36.71 ms │                      36.79 ms │    no change │
│ QQuery 3  │   30.73 ms │                      30.38 ms │    no change │
│ QQuery 4  │  224.99 ms │                     225.78 ms │    no change │
│ QQuery 5  │  272.60 ms │                     273.18 ms │    no change │
│ QQuery 6  │    1.27 ms │                       1.28 ms │    no change │
│ QQuery 7  │   13.98 ms │                      14.10 ms │    no change │
│ QQuery 8  │  321.60 ms │                     323.50 ms │    no change │
│ QQuery 9  │  452.17 ms │                     439.03 ms │    no change │
│ QQuery 10 │   70.62 ms │                      70.86 ms │    no change │
│ QQuery 11 │   82.82 ms │                      82.02 ms │    no change │
│ QQuery 12 │  267.59 ms │                     266.66 ms │    no change │
│ QQuery 13 │  370.44 ms │                     364.28 ms │    no change │
│ QQuery 14 │  282.93 ms │                     282.68 ms │    no change │
│ QQuery 15 │  271.26 ms │                     274.78 ms │    no change │
│ QQuery 16 │  620.89 ms │                     613.85 ms │    no change │
│ QQuery 17 │  622.40 ms │                     620.96 ms │    no change │
│ QQuery 18 │ 1278.98 ms │                    1233.58 ms │    no change │
│ QQuery 19 │   27.76 ms │                      27.89 ms │    no change │
│ QQuery 20 │  513.90 ms │                     514.63 ms │    no change │
│ QQuery 21 │  521.06 ms │                     516.56 ms │    no change │
│ QQuery 22 │  983.17 ms │                     989.66 ms │    no change │
│ QQuery 23 │ 3114.33 ms │                    3087.79 ms │    no change │
│ QQuery 24 │   41.10 ms │                      41.28 ms │    no change │
│ QQuery 25 │  112.12 ms │                     110.69 ms │    no change │
│ QQuery 26 │   41.82 ms │                      41.56 ms │    no change │
│ QQuery 27 │  515.28 ms │                     508.87 ms │    no change │
│ QQuery 28 │ 2863.75 ms │                    2898.69 ms │    no change │
│ QQuery 29 │   41.06 ms │                      40.93 ms │    no change │
│ QQuery 30 │  304.49 ms │                     303.89 ms │    no change │
│ QQuery 31 │  288.00 ms │                     281.50 ms │    no change │
│ QQuery 32 │  924.56 ms │                     921.95 ms │    no change │
│ QQuery 33 │ 1425.05 ms │                    1432.10 ms │    no change │
│ QQuery 34 │ 1454.23 ms │                    1477.41 ms │    no change │
│ QQuery 35 │  279.29 ms │                     281.42 ms │    no change │
│ QQuery 36 │   67.88 ms │                      67.06 ms │    no change │
│ QQuery 37 │   35.63 ms │                      36.55 ms │    no change │
│ QQuery 38 │   40.68 ms │                      40.52 ms │    no change │
│ QQuery 39 │  139.13 ms │                     142.89 ms │    no change │
│ QQuery 40 │   13.97 ms │                      15.29 ms │ 1.09x slower │
│ QQuery 41 │   13.63 ms │                      14.16 ms │    no change │
│ QQuery 42 │   12.97 ms │                      13.66 ms │ 1.05x slower │
└───────────┴────────────┴───────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                            ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                            │ 19010.72ms │
│ Total Time (preserve-bitmap-row-selection)   │ 18974.40ms │
│ Average Time (HEAD)                          │   442.11ms │
│ Average Time (preserve-bitmap-row-selection) │   441.27ms │
│ Queries Faster                               │          0 │
│ Queries Slower                               │          2 │
│ Queries with No Change                       │         41 │
│ Queries with Failure                         │          0 │
└──────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and preserve-bitmap-row-selection
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃         preserve-bitmap-row-selection ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.22 / 4.00 ±5.46 / 14.93 ms │          1.22 / 3.93 ±5.35 / 14.64 ms │     no change │
│ QQuery 1  │        12.65 / 12.87 ±0.16 / 13.13 ms │        12.53 / 12.87 ±0.23 / 13.19 ms │     no change │
│ QQuery 2  │        36.71 / 37.13 ±0.45 / 37.82 ms │        36.79 / 36.99 ±0.20 / 37.36 ms │     no change │
│ QQuery 3  │        30.73 / 31.37 ±0.73 / 32.79 ms │        30.38 / 30.76 ±0.28 / 31.20 ms │     no change │
│ QQuery 4  │     224.99 / 228.64 ±2.40 / 231.76 ms │     225.78 / 227.21 ±0.95 / 228.20 ms │     no change │
│ QQuery 5  │     272.60 / 275.27 ±1.70 / 277.39 ms │     273.18 / 275.94 ±2.51 / 279.97 ms │     no change │
│ QQuery 6  │           1.27 / 1.40 ±0.22 / 1.83 ms │           1.28 / 1.41 ±0.21 / 1.83 ms │     no change │
│ QQuery 7  │        13.98 / 14.18 ±0.14 / 14.33 ms │        14.10 / 14.40 ±0.26 / 14.80 ms │     no change │
│ QQuery 8  │     321.60 / 328.42 ±3.52 / 331.83 ms │     323.50 / 326.37 ±1.98 / 329.15 ms │     no change │
│ QQuery 9  │     452.17 / 458.80 ±3.50 / 462.44 ms │    439.03 / 455.33 ±11.74 / 475.15 ms │     no change │
│ QQuery 10 │        70.62 / 71.53 ±0.88 / 73.07 ms │        70.86 / 72.34 ±1.93 / 76.15 ms │     no change │
│ QQuery 11 │        82.82 / 83.45 ±0.70 / 84.38 ms │        82.02 / 82.63 ±0.55 / 83.33 ms │     no change │
│ QQuery 12 │     267.59 / 271.27 ±3.13 / 275.08 ms │     266.66 / 271.55 ±4.03 / 278.09 ms │     no change │
│ QQuery 13 │     370.44 / 380.01 ±8.07 / 394.02 ms │    364.28 / 375.64 ±10.65 / 395.79 ms │     no change │
│ QQuery 14 │     282.93 / 286.69 ±3.28 / 292.68 ms │     282.68 / 287.21 ±6.00 / 299.08 ms │     no change │
│ QQuery 15 │     271.26 / 280.42 ±8.86 / 295.62 ms │    274.78 / 286.59 ±16.50 / 318.88 ms │     no change │
│ QQuery 16 │     620.89 / 630.22 ±6.76 / 640.05 ms │     613.85 / 624.53 ±7.74 / 635.28 ms │     no change │
│ QQuery 17 │     622.40 / 631.39 ±6.79 / 639.86 ms │     620.96 / 623.79 ±2.85 / 627.31 ms │     no change │
│ QQuery 18 │  1278.98 / 1294.16 ±9.92 / 1304.79 ms │ 1233.58 / 1270.61 ±22.35 / 1300.16 ms │     no change │
│ QQuery 19 │        27.76 / 30.23 ±4.30 / 38.83 ms │       27.89 / 39.26 ±19.18 / 77.30 ms │  1.30x slower │
│ QQuery 20 │     513.90 / 521.14 ±5.47 / 529.54 ms │    514.63 / 522.90 ±10.51 / 543.65 ms │     no change │
│ QQuery 21 │     521.06 / 525.85 ±5.52 / 536.37 ms │     516.56 / 523.84 ±5.90 / 533.60 ms │     no change │
│ QQuery 22 │    983.17 / 994.45 ±8.79 / 1006.94 ms │    989.66 / 999.78 ±8.06 / 1012.61 ms │     no change │
│ QQuery 23 │ 3114.33 / 3151.43 ±32.82 / 3209.67 ms │ 3087.79 / 3137.22 ±41.41 / 3208.31 ms │     no change │
│ QQuery 24 │        41.10 / 41.79 ±1.33 / 44.45 ms │       41.28 / 47.74 ±12.01 / 71.76 ms │  1.14x slower │
│ QQuery 25 │     112.12 / 113.50 ±1.03 / 114.89 ms │     110.69 / 111.65 ±0.79 / 112.88 ms │     no change │
│ QQuery 26 │        41.82 / 42.54 ±0.55 / 43.20 ms │        41.56 / 41.99 ±0.50 / 42.87 ms │     no change │
│ QQuery 27 │     515.28 / 520.12 ±3.67 / 526.05 ms │    508.87 / 526.80 ±14.77 / 552.30 ms │     no change │
│ QQuery 28 │ 2863.75 / 2894.87 ±21.58 / 2921.56 ms │ 2898.69 / 2935.90 ±24.91 / 2961.48 ms │     no change │
│ QQuery 29 │       41.06 / 54.47 ±19.84 / 92.69 ms │        40.93 / 41.40 ±0.48 / 42.31 ms │ +1.32x faster │
│ QQuery 30 │     304.49 / 312.77 ±9.73 / 330.59 ms │    303.89 / 326.19 ±37.78 / 401.53 ms │     no change │
│ QQuery 31 │    288.00 / 302.87 ±17.79 / 336.24 ms │     281.50 / 293.84 ±8.88 / 305.88 ms │     no change │
│ QQuery 32 │   924.56 / 970.80 ±25.81 / 1002.44 ms │   921.95 / 948.96 ±30.62 / 1008.03 ms │     no change │
│ QQuery 33 │ 1425.05 / 1473.99 ±30.59 / 1517.40 ms │ 1432.10 / 1471.89 ±26.44 / 1513.49 ms │     no change │
│ QQuery 34 │ 1454.23 / 1485.93 ±29.38 / 1524.02 ms │ 1477.41 / 1490.20 ±14.81 / 1518.64 ms │     no change │
│ QQuery 35 │    279.29 / 298.38 ±34.34 / 367.02 ms │    281.42 / 321.97 ±53.30 / 425.43 ms │  1.08x slower │
│ QQuery 36 │       67.88 / 76.79 ±11.91 / 99.93 ms │        67.06 / 69.97 ±2.78 / 74.52 ms │ +1.10x faster │
│ QQuery 37 │        35.63 / 36.15 ±0.39 / 36.73 ms │        36.55 / 41.22 ±5.43 / 51.22 ms │  1.14x slower │
│ QQuery 38 │        40.68 / 45.86 ±3.18 / 49.27 ms │        40.52 / 48.89 ±9.89 / 67.36 ms │  1.07x slower │
│ QQuery 39 │     139.13 / 150.88 ±6.63 / 159.29 ms │     142.89 / 151.84 ±7.28 / 161.25 ms │     no change │
│ QQuery 40 │        13.97 / 15.44 ±2.37 / 20.16 ms │        15.29 / 16.28 ±1.34 / 18.86 ms │  1.05x slower │
│ QQuery 41 │        13.63 / 16.42 ±4.31 / 24.99 ms │        14.16 / 14.26 ±0.06 / 14.35 ms │ +1.15x faster │
│ QQuery 42 │        12.97 / 13.24 ±0.18 / 13.48 ms │        13.66 / 15.74 ±3.75 / 23.23 ms │  1.19x slower │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                            ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                            │ 19411.13ms │
│ Total Time (preserve-bitmap-row-selection)   │ 19419.83ms │
│ Average Time (HEAD)                          │   451.42ms │
│ Average Time (preserve-bitmap-row-selection) │   451.62ms │
│ Queries Faster                               │          3 │
│ Queries Slower                               │          7 │
│ Queries with No Change                       │         33 │
│ Queries with Failure                         │          0 │
└──────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 100.0s
Peak memory 11.7 GiB
Avg memory 4.4 GiB
CPU user 995.1s
CPU sys 69.6s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 100.0s
Peak memory 11.8 GiB
Avg memory 4.6 GiB
CPU user 991.8s
CPU sys 69.8s
Peak spill 0 B

File an issue against this benchmark runner

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

Labels

core Core DataFusion crate datasource Changes to the datasource crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Preserve bitmap-backed RowSelection in ParquetAccessPlan

4 participants