Skip to content

Push LIMIT / OFFSET into the last RowFilter predicate and skip unused row groups#9766

Open
haohuaijin wants to merge 12 commits intoapache:mainfrom
haohuaijin:fix-pushdown-limit-early-stop
Open

Push LIMIT / OFFSET into the last RowFilter predicate and skip unused row groups#9766
haohuaijin wants to merge 12 commits intoapache:mainfrom
haohuaijin:fix-pushdown-limit-early-stop

Conversation

@haohuaijin
Copy link
Copy Markdown
Contributor

@haohuaijin haohuaijin commented Apr 19, 2026

Which issue does this PR close?

Rationale for this change

What changes are included in this PR?

Push LIMIT + OFFSET into the last RowFilter predicate and skip row groups once the limit is exhausted.

  1. Within a row group. New ReadPlanBuilder::with_predicate_limited takes an optional cap; once cumulative matches reach it, the batch filter is truncated and the reader loop breaks. The tail is padded as "not selected" so RowSelection still spans the full row group. with_predicate becomes a thin wrapper passing None.

  2. Across row groups. RowGroupReaderBuilder::transition short-circuits Start → Finished when limit == Some(0), skipping filter-plan setup and predicate-column fetches.

  3. Wiring. FilterInfo::is_last marks the final predicate; the call site passes Some(limit + offset) only for it (offset is included because with_offset runs after the predicate).

Are these changes tested?

  • Unit tests for truncate_filter_after_n_trues and tail-padding in with_predicate_limited.
  • End-to-end decoder tests covering: short-circuit within a row group, later row groups not fetched, correct offset + limit window, multi-predicate chains short-circuiting only on the last predicate, and preservation with a prior RowSelection. Predicate-invocation counters verify fewer rows are evaluated.
  • New benchmark_filters_with_limit group in arrow_reader_row_filter.rs with LIMIT 10.

Are there any user-facing changes?

  • New public ReadPlanBuilder::with_predicate_limited; with_predicate unchanged. No breaking changes.
  • RowFilter + with_limit/with_offset reads now decode fewer predicate pages. Output is identical.

@github-actions github-actions Bot added the parquet Changes to the parquet crate label Apr 19, 2026
Comment thread parquet/benches/arrow_reader_row_filter.rs
@haohuaijin haohuaijin changed the title perf: add limit to last predicate Push LIMIT / OFFSET into the last RowFilter predicate and skip unused row groups Apr 19, 2026
Comment thread parquet/benches/arrow_reader_row_filter.rs
@haohuaijin
Copy link
Copy Markdown
Contributor Author

haohuaijin commented Apr 19, 2026

benchmark result
image

for this benchmark in main branch, i copy the benchmark file to main branch. the benchmark script is below

git checkout main
cargo bench --bench arrow_reader_row_filter --features="arrow async" -- arrow_reader_row_filter_limit --save-baseline main
git checkout fix-pushdown-limit-early-stop
cargo bench --bench arrow_reader_row_filter --features="arrow async" -- arrow_reader_row_filter_limit --save-baseline 9766
critcmp main 9766

@Dandandan
Copy link
Copy Markdown
Contributor

run benchmarks arrow_reader_row_filter_limit

@Dandandan
Copy link
Copy Markdown
Contributor

run benchmark arrow_reader_row_filter

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4275539973-1503-r9mkx 6.12.55+ #1 SMP Sun Feb 1 08:59:41 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 fix-pushdown-limit-early-stop (011e068) to 51b02f1 (merge-base) diff
BENCH_NAME=arrow_reader_row_filter
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader_row_filter
BENCH_FILTER=
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4275532723-1502-t5b65 6.12.55+ #1 SMP Sun Feb 1 08:59:41 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 fix-pushdown-limit-early-stop (011e068) to 51b02f1 (merge-base) diff
BENCH_NAME=arrow_reader_row_filter_limit
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader_row_filter_limit
BENCH_FILTER=
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

Benchmark for this request failed.

Last 20 lines of output:

Click to expand
    record_batch
    regexp_kernels
    row_format
    row_group_index_reader
    row_selection_cursor
    row_selector
    serde
    sort_kernel
    string_dictionary_builder
    string_run_builder
    string_run_iterator
    substring_kernels
    take_kernels
    union_array
    variant_builder
    variant_kernels
    variant_validation
    view_types
    writer_overhead
    zip_kernels

File an issue against this benchmark runner

@Dandandan
Copy link
Copy Markdown
Contributor

run benchmark arrow_reader_clickbench

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4275550349-1504-n7vkl 6.12.55+ #1 SMP Sun Feb 1 08:59:41 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 fix-pushdown-limit-early-stop (011e068) to 51b02f1 (merge-base) diff
BENCH_NAME=arrow_reader_clickbench
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader_clickbench
BENCH_FILTER=
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion 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

group                                                                                              fix-pushdown-limit-early-stop          main
-----                                                                                              -----------------------------          ----
arrow_reader_row_filter/float64 <= 99.0/all_columns/async                                          5.16      5.3±0.02ms        ? ?/sec    1.00   1027.8±4.87µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/all_columns/sync                                           5.13      5.2±0.02ms        ? ?/sec    1.00   1010.4±4.67µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/async                                5.18      4.6±0.02ms        ? ?/sec    1.00    889.5±3.56µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/sync                                 5.07      4.5±0.02ms        ? ?/sec    1.00    885.7±3.46µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/async                            5.27      4.2±0.01ms        ? ?/sec    1.00    789.9±1.59µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/sync                             5.20      4.5±0.02ms        ? ?/sec    1.00    861.3±2.35µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/async                  5.26      3.7±0.01ms        ? ?/sec    1.00    703.0±2.01µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/sync                   5.19      3.7±0.01ms        ? ?/sec    1.00    708.8±2.44µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/async                                           5.17      5.3±0.02ms        ? ?/sec    1.00   1028.5±5.75µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/sync                                            5.14      5.2±0.02ms        ? ?/sec    1.00   1013.1±3.99µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/async                                 5.18      4.6±0.02ms        ? ?/sec    1.00    890.0±4.02µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/sync                                  5.07      4.5±0.02ms        ? ?/sec    1.00    888.2±3.53µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/async                                            1.96    886.1±1.77µs        ? ?/sec    1.00    452.6±1.32µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/sync                                             5.12      2.2±0.01ms        ? ?/sec    1.00    425.1±1.18µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/async                                  1.95    806.2±1.81µs        ? ?/sec    1.00    412.5±2.82µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/sync                                   5.15      2.2±0.01ms        ? ?/sec    1.00    418.1±1.31µs        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/async                                               5.10      7.6±0.02ms        ? ?/sec    1.00   1486.6±5.22µs        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/sync                                                5.12      6.7±0.02ms        ? ?/sec    1.00   1308.8±4.77µs        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/async                                     5.08      7.1±0.02ms        ? ?/sec    1.00   1392.4±5.59µs        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/sync                                      5.13      6.2±0.02ms        ? ?/sec    1.00   1210.4±3.15µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/async                                                5.23      5.0±0.02ms        ? ?/sec    1.00    956.5±3.70µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/sync                                                 5.16      5.4±0.02ms        ? ?/sec    1.00   1037.7±3.15µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/async                                      5.23      4.6±0.02ms        ? ?/sec    1.00    878.2±3.77µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/sync                                       5.18      4.6±0.02ms        ? ?/sec    1.00    885.2±2.77µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/async                                               5.40      3.5±0.01ms        ? ?/sec    1.00    645.4±1.56µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/sync                                                5.21      3.6±0.02ms        ? ?/sec    1.00    696.6±1.97µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/async                                     5.33      3.2±0.01ms        ? ?/sec    1.00    592.6±1.94µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/sync                                      5.24      3.2±0.01ms        ? ?/sec    1.00    602.1±1.94µs        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/async                                           5.06      8.5±0.03ms        ? ?/sec    1.00   1686.2±6.25µs        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/sync                                            5.12      9.3±0.03ms        ? ?/sec    1.00   1809.4±5.98µs        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/async                                 5.09      7.1±0.03ms        ? ?/sec    1.00   1401.3±5.32µs        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/sync                                  5.02      6.3±0.03ms        ? ?/sec    1.00   1251.0±5.30µs        ? ?/sec
arrow_reader_row_filter_limit/float64 <= 99.0/all_columns/limit10/async                            1.00    339.1±1.36µs        ? ?/sec  
arrow_reader_row_filter_limit/float64 <= 99.0/exclude_filter_column/limit10/async                  1.00    333.5±1.34µs        ? ?/sec  
arrow_reader_row_filter_limit/float64 > 99.0 AND ts >= 9000/all_columns/limit10/async              1.00    377.8±1.37µs        ? ?/sec  
arrow_reader_row_filter_limit/float64 > 99.0 AND ts >= 9000/exclude_filter_column/limit10/async    1.00    361.3±1.40µs        ? ?/sec  
arrow_reader_row_filter_limit/float64 > 99.0/all_columns/limit10/async                             1.00    340.1±1.38µs        ? ?/sec  
arrow_reader_row_filter_limit/float64 > 99.0/exclude_filter_column/limit10/async                   1.00    333.8±1.28µs        ? ?/sec  
arrow_reader_row_filter_limit/int64 > 90/all_columns/limit10/async                                 1.00    334.8±1.34µs        ? ?/sec  
arrow_reader_row_filter_limit/int64 > 90/exclude_filter_column/limit10/async                       1.00    328.3±0.99µs        ? ?/sec  
arrow_reader_row_filter_limit/ts < 9000/all_columns/limit10/async                                  1.00    332.1±1.69µs        ? ?/sec  
arrow_reader_row_filter_limit/ts < 9000/exclude_filter_column/limit10/async                        1.00    326.5±1.23µs        ? ?/sec  
arrow_reader_row_filter_limit/ts >= 9000/all_columns/limit10/async                                 1.00    347.7±1.07µs        ? ?/sec  
arrow_reader_row_filter_limit/ts >= 9000/exclude_filter_column/limit10/async                       1.00    339.6±1.15µs        ? ?/sec  
arrow_reader_row_filter_limit/utf8View <> ''/all_columns/limit10/async                             1.00    356.7±1.44µs        ? ?/sec  
arrow_reader_row_filter_limit/utf8View <> ''/exclude_filter_column/limit10/async                   1.00    346.6±1.17µs        ? ?/sec  

Resource Usage

base (merge-base)

Metric Value
Wall time 375.5s
Peak memory 2.4 GiB
Avg memory 2.3 GiB
CPU user 374.5s
CPU sys 0.8s
Peak spill 0 B

branch

Metric Value
Wall time 470.8s
Peak memory 2.3 GiB
Avg memory 2.3 GiB
CPU user 470.5s
CPU sys 0.3s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion 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

group                                             fix-pushdown-limit-early-stop          main
-----                                             -----------------------------          ----
arrow_reader_clickbench/async/Q1                  1.02   1090.0±4.55µs        ? ?/sec    1.00   1066.9±7.46µs        ? ?/sec
arrow_reader_clickbench/async/Q10                 1.00      6.7±0.24ms        ? ?/sec    1.01      6.7±0.25ms        ? ?/sec
arrow_reader_clickbench/async/Q11                 1.00      7.7±0.27ms        ? ?/sec    1.00      7.7±0.26ms        ? ?/sec
arrow_reader_clickbench/async/Q12                 1.00     14.2±0.27ms        ? ?/sec    1.03     14.6±0.33ms        ? ?/sec
arrow_reader_clickbench/async/Q13                 1.00     16.9±0.34ms        ? ?/sec    1.03     17.5±0.32ms        ? ?/sec
arrow_reader_clickbench/async/Q14                 1.00     15.7±0.32ms        ? ?/sec    1.03     16.2±0.33ms        ? ?/sec
arrow_reader_clickbench/async/Q19                 1.01      3.1±0.07ms        ? ?/sec    1.00      3.0±0.08ms        ? ?/sec
arrow_reader_clickbench/async/Q20                 1.09     80.1±2.09ms        ? ?/sec    1.00     73.4±0.57ms        ? ?/sec
arrow_reader_clickbench/async/Q21                 1.12     91.4±3.54ms        ? ?/sec    1.00     81.8±0.77ms        ? ?/sec
arrow_reader_clickbench/async/Q22                 1.08    125.2±4.51ms        ? ?/sec    1.00    115.5±2.17ms        ? ?/sec
arrow_reader_clickbench/async/Q23                 1.00    238.2±2.51ms        ? ?/sec    1.04    248.2±2.59ms        ? ?/sec
arrow_reader_clickbench/async/Q24                 1.00     19.0±0.41ms        ? ?/sec    1.03     19.5±0.46ms        ? ?/sec
arrow_reader_clickbench/async/Q27                 1.00     56.3±0.52ms        ? ?/sec    1.03     58.2±0.64ms        ? ?/sec
arrow_reader_clickbench/async/Q28                 1.00     56.6±0.51ms        ? ?/sec    1.04     58.8±0.66ms        ? ?/sec
arrow_reader_clickbench/async/Q30                 1.00     18.1±0.15ms        ? ?/sec    1.02     18.5±0.22ms        ? ?/sec
arrow_reader_clickbench/async/Q36                 1.00     14.4±0.39ms        ? ?/sec    1.05     15.1±0.45ms        ? ?/sec
arrow_reader_clickbench/async/Q37                 1.00      5.3±0.07ms        ? ?/sec    1.02      5.4±0.07ms        ? ?/sec
arrow_reader_clickbench/async/Q38                 1.00     12.7±0.32ms        ? ?/sec    1.05     13.4±0.35ms        ? ?/sec
arrow_reader_clickbench/async/Q39                 1.00     22.8±0.34ms        ? ?/sec    1.06     24.1±0.54ms        ? ?/sec
arrow_reader_clickbench/async/Q40                 1.00      5.6±0.10ms        ? ?/sec    1.03      5.7±0.11ms        ? ?/sec
arrow_reader_clickbench/async/Q41                 1.00      4.8±0.06ms        ? ?/sec    1.03      4.9±0.08ms        ? ?/sec
arrow_reader_clickbench/async/Q42                 1.00      3.4±0.03ms        ? ?/sec    1.01      3.5±0.05ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q1     1.02   1062.0±7.26µs        ? ?/sec    1.00   1043.4±4.72µs        ? ?/sec
arrow_reader_clickbench/async_object_store/Q10    1.01      6.5±0.24ms        ? ?/sec    1.00      6.4±0.23ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q11    1.00      7.4±0.28ms        ? ?/sec    1.00      7.4±0.27ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q12    1.00     14.2±0.27ms        ? ?/sec    1.03     14.6±0.30ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q13    1.00     16.7±0.38ms        ? ?/sec    1.03     17.3±0.42ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q14    1.00     15.4±0.34ms        ? ?/sec    1.03     15.8±0.39ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q19    1.01      3.0±0.06ms        ? ?/sec    1.00      2.9±0.06ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q20    1.00     70.4±0.53ms        ? ?/sec    1.03     72.5±0.85ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q21    1.00     79.1±0.53ms        ? ?/sec    1.02     81.0±0.59ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q22    1.00     96.0±0.74ms        ? ?/sec    1.04     99.7±1.05ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q23    1.00    225.9±1.98ms        ? ?/sec    1.05    236.6±2.61ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q24    1.00     18.6±0.41ms        ? ?/sec    1.04     19.4±0.48ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q27    1.00     55.9±0.54ms        ? ?/sec    1.02     57.2±0.72ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q28    1.00     56.1±0.54ms        ? ?/sec    1.03     58.0±0.76ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q30    1.00     17.7±0.18ms        ? ?/sec    1.03     18.1±0.27ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q36    1.00     13.9±0.46ms        ? ?/sec    1.06     14.7±0.44ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q37    1.00      5.2±0.08ms        ? ?/sec    1.02      5.3±0.07ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q38    1.00     12.3±0.40ms        ? ?/sec    1.04     12.8±0.39ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q39    1.00     22.1±0.31ms        ? ?/sec    1.06     23.3±0.50ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q40    1.00      5.2±0.11ms        ? ?/sec    1.04      5.5±0.13ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q41    1.00      4.6±0.06ms        ? ?/sec    1.04      4.7±0.09ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q42    1.00      3.3±0.02ms        ? ?/sec    1.02      3.3±0.04ms        ? ?/sec
arrow_reader_clickbench/sync/Q1                   1.01    881.1±2.93µs        ? ?/sec    1.00    875.2±1.63µs        ? ?/sec
arrow_reader_clickbench/sync/Q10                  1.00      5.1±0.06ms        ? ?/sec    1.00      5.1±0.08ms        ? ?/sec
arrow_reader_clickbench/sync/Q11                  1.01      6.1±0.07ms        ? ?/sec    1.00      6.0±0.08ms        ? ?/sec
arrow_reader_clickbench/sync/Q12                  1.00     21.1±0.20ms        ? ?/sec    1.03     21.7±0.36ms        ? ?/sec
arrow_reader_clickbench/sync/Q13                  1.00     23.8±0.31ms        ? ?/sec    1.03     24.5±0.40ms        ? ?/sec
arrow_reader_clickbench/sync/Q14                  1.00     22.4±0.25ms        ? ?/sec    1.02     22.9±0.34ms        ? ?/sec
arrow_reader_clickbench/sync/Q19                  1.00      2.7±0.06ms        ? ?/sec    1.00      2.7±0.08ms        ? ?/sec
arrow_reader_clickbench/sync/Q20                  1.00    117.5±0.74ms        ? ?/sec    1.06    124.2±1.04ms        ? ?/sec
arrow_reader_clickbench/sync/Q21                  1.00     91.0±0.53ms        ? ?/sec    1.08     98.5±0.91ms        ? ?/sec
arrow_reader_clickbench/sync/Q22                  1.00    137.6±1.17ms        ? ?/sec    1.05    145.0±1.96ms        ? ?/sec
arrow_reader_clickbench/sync/Q23                  1.00    284.6±7.46ms        ? ?/sec    1.01    286.5±3.99ms        ? ?/sec
arrow_reader_clickbench/sync/Q24                  1.00     26.0±0.40ms        ? ?/sec    1.02     26.5±0.49ms        ? ?/sec
arrow_reader_clickbench/sync/Q27                  1.00    104.7±0.63ms        ? ?/sec    1.03    108.2±0.90ms        ? ?/sec
arrow_reader_clickbench/sync/Q28                  1.00    101.7±0.65ms        ? ?/sec    1.04    106.3±1.03ms        ? ?/sec
arrow_reader_clickbench/sync/Q30                  1.00     18.2±0.20ms        ? ?/sec    1.02     18.5±0.25ms        ? ?/sec
arrow_reader_clickbench/sync/Q36                  1.00     21.8±0.27ms        ? ?/sec    1.01     22.1±0.34ms        ? ?/sec
arrow_reader_clickbench/sync/Q37                  1.00      6.6±0.06ms        ? ?/sec    1.01      6.7±0.08ms        ? ?/sec
arrow_reader_clickbench/sync/Q38                  1.00     11.2±0.15ms        ? ?/sec    1.01     11.4±0.19ms        ? ?/sec
arrow_reader_clickbench/sync/Q39                  1.00     20.0±0.25ms        ? ?/sec    1.02     20.3±0.37ms        ? ?/sec
arrow_reader_clickbench/sync/Q40                  1.00      4.9±0.09ms        ? ?/sec    1.03      5.1±0.12ms        ? ?/sec
arrow_reader_clickbench/sync/Q41                  1.00      5.4±0.07ms        ? ?/sec    1.02      5.5±0.08ms        ? ?/sec
arrow_reader_clickbench/sync/Q42                  1.00      4.2±0.05ms        ? ?/sec    1.00      4.2±0.06ms        ? ?/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 785.9s
Peak memory 3.1 GiB
Avg memory 2.9 GiB
CPU user 708.8s
CPU sys 75.9s
Peak spill 0 B

branch

Metric Value
Wall time 776.2s
Peak memory 3.2 GiB
Avg memory 3.1 GiB
CPU user 712.1s
CPU sys 64.1s
Peak spill 0 B

File an issue against this benchmark runner

@haohuaijin
Copy link
Copy Markdown
Contributor Author

Hi @Dandandan thank you for trigger benchmark, i submit another pr to add the new benchmark for limit #9767 to make it easy to compare(after merge to main)

alamb pushed a commit that referenced this pull request Apr 19, 2026
# Which issue does this PR close?

<!--
We generally require a GitHub issue to be filed for all bug fixes and
enhancements and this helps us generate change logs for our releases.
You can link an issue to this PR using the GitHub syntax.
-->

- part of #9766 

# Rationale for this change

<!--
Why are you proposing this change? If this is already explained clearly
in the issue then this section is not needed.
Explaining clearly why changes are proposed helps reviewers understand
your changes and offer better suggestions for fixes.
-->

# What changes are included in this PR?

<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

# Are these changes tested?

<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

# Are there any user-facing changes?

<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.

If there are any breaking changes to public APIs, please call them out.
-->
@alamb
Copy link
Copy Markdown
Contributor

alamb commented Apr 19, 2026

Hi @Dandandan thank you for trigger benchmark, i submit another pr to add the new benchmark for limit #9767 to make it easy to compare(after merge to main)

I just merged and updated this PR and will retrigger

@alamb
Copy link
Copy Markdown
Contributor

alamb commented Apr 19, 2026

run benchmark arrow_reader_clickbench

@alamb
Copy link
Copy Markdown
Contributor

alamb commented Apr 19, 2026

run benchmark arrow_reader_row_filter

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4276000145-1538-6xzz7 6.12.55+ #1 SMP Sun Feb 1 08:59:41 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 fix-pushdown-limit-early-stop (15e7f5f) to 9d3a4d9 (merge-base) diff
BENCH_NAME=arrow_reader_clickbench
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader_clickbench
BENCH_FILTER=
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4276000327-1539-92zch 6.12.55+ #1 SMP Sun Feb 1 08:59:41 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 fix-pushdown-limit-early-stop (15e7f5f) to 9d3a4d9 (merge-base) diff
BENCH_NAME=arrow_reader_row_filter
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader_row_filter
BENCH_FILTER=
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion 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

group                                                                                              fix-pushdown-limit-early-stop          main
-----                                                                                              -----------------------------          ----
arrow_reader_row_filter/float64 <= 99.0/all_columns/async                                          1.00      5.3±0.02ms        ? ?/sec    1.02      5.4±0.01ms        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/all_columns/sync                                           1.00      5.2±0.02ms        ? ?/sec    1.01      5.3±0.03ms        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/async                                1.00      4.6±0.01ms        ? ?/sec    1.01      4.6±0.02ms        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/sync                                 1.00      4.5±0.02ms        ? ?/sec    1.01      4.5±0.02ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/async                            1.00      4.2±0.01ms        ? ?/sec    1.00      4.2±0.01ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/sync                             1.00      4.6±0.02ms        ? ?/sec    1.01      4.6±0.03ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/async                  1.00      3.7±0.02ms        ? ?/sec    1.01      3.8±0.02ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/sync                   1.00      3.7±0.01ms        ? ?/sec    1.00      3.7±0.01ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/async                                           1.00      5.3±0.02ms        ? ?/sec    1.01      5.4±0.02ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/sync                                            1.00      5.2±0.01ms        ? ?/sec    1.01      5.3±0.03ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/async                                 1.00      4.6±0.01ms        ? ?/sec    1.02      4.6±0.02ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/sync                                  1.00      4.5±0.01ms        ? ?/sec    1.01      4.5±0.02ms        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/async                                            1.01    887.2±1.68µs        ? ?/sec    1.00    880.6±2.13µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/sync                                             1.00      2.2±0.01ms        ? ?/sec    1.01      2.2±0.01ms        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/async                                  1.00    807.2±1.16µs        ? ?/sec    1.00    808.0±2.26µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/sync                                   1.00      2.1±0.01ms        ? ?/sec    1.02      2.2±0.02ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/async                                               1.00      7.5±0.02ms        ? ?/sec    1.02      7.7±0.03ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/sync                                                1.00      6.7±0.02ms        ? ?/sec    1.02      6.8±0.03ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/async                                     1.00      7.1±0.02ms        ? ?/sec    1.01      7.2±0.02ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/sync                                      1.00      6.2±0.02ms        ? ?/sec    1.02      6.4±0.03ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/async                                                1.00      5.0±0.02ms        ? ?/sec    1.00      5.0±0.02ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/sync                                                 1.00      5.4±0.02ms        ? ?/sec    1.00      5.4±0.02ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/async                                      1.02      4.7±0.02ms        ? ?/sec    1.00      4.6±0.02ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/sync                                       1.01      4.6±0.02ms        ? ?/sec    1.00      4.6±0.02ms        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/async                                               1.01      3.5±0.01ms        ? ?/sec    1.00      3.5±0.01ms        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/sync                                                1.01      3.7±0.01ms        ? ?/sec    1.00      3.7±0.01ms        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/async                                     1.01      3.2±0.01ms        ? ?/sec    1.00      3.2±0.01ms        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/sync                                      1.00      3.2±0.01ms        ? ?/sec    1.01      3.2±0.01ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/async                                           1.00      8.6±0.02ms        ? ?/sec    1.00      8.6±0.03ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/sync                                            1.00      9.3±0.03ms        ? ?/sec    1.01      9.3±0.04ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/async                                 1.00      7.1±0.02ms        ? ?/sec    1.02      7.2±0.03ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/sync                                  1.00      6.3±0.02ms        ? ?/sec    1.01      6.4±0.04ms        ? ?/sec
arrow_reader_row_filter_limit/float64 <= 99.0/all_columns/limit10/async                            1.00    325.4±0.79µs        ? ?/sec    4.33   1408.0±6.25µs        ? ?/sec
arrow_reader_row_filter_limit/float64 <= 99.0/exclude_filter_column/limit10/async                  1.00    320.3±1.14µs        ? ?/sec    4.01   1284.1±8.16µs        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0 AND ts >= 9000/all_columns/limit10/async              1.00    365.6±1.05µs        ? ?/sec    6.33      2.3±0.01ms        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0 AND ts >= 9000/exclude_filter_column/limit10/async    1.00    348.1±0.96µs        ? ?/sec    5.96      2.1±0.01ms        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0/all_columns/limit10/async                             1.00    328.1±0.99µs        ? ?/sec    4.25   1394.4±4.71µs        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0/exclude_filter_column/limit10/async                   1.00    321.6±1.48µs        ? ?/sec    3.96   1273.3±8.21µs        ? ?/sec
arrow_reader_row_filter_limit/int64 > 90/all_columns/limit10/async                                 1.00    326.5±1.67µs        ? ?/sec    3.74   1221.6±2.92µs        ? ?/sec
arrow_reader_row_filter_limit/int64 > 90/exclude_filter_column/limit10/async                       1.00    318.5±0.86µs        ? ?/sec    3.57   1137.1±2.06µs        ? ?/sec
arrow_reader_row_filter_limit/ts < 9000/all_columns/limit10/async                                  1.00    325.7±0.75µs        ? ?/sec    3.74   1219.5±4.41µs        ? ?/sec
arrow_reader_row_filter_limit/ts < 9000/exclude_filter_column/limit10/async                        1.00    316.8±1.16µs        ? ?/sec    3.63   1148.8±3.83µs        ? ?/sec
arrow_reader_row_filter_limit/ts >= 9000/all_columns/limit10/async                                 1.00    336.6±1.04µs        ? ?/sec    3.63   1221.3±4.07µs        ? ?/sec
arrow_reader_row_filter_limit/ts >= 9000/exclude_filter_column/limit10/async                       1.00    333.7±0.65µs        ? ?/sec    3.43   1144.7±1.96µs        ? ?/sec
arrow_reader_row_filter_limit/utf8View <> ''/all_columns/limit10/async                             1.00    352.0±2.63µs        ? ?/sec    11.08     3.9±0.02ms        ? ?/sec
arrow_reader_row_filter_limit/utf8View <> ''/exclude_filter_column/limit10/async                   1.00    337.8±0.95µs        ? ?/sec    10.50     3.5±0.01ms        ? ?/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 472.7s
Peak memory 2.7 GiB
Avg memory 2.7 GiB
CPU user 471.8s
CPU sys 0.8s
Peak spill 0 B

branch

Metric Value
Wall time 476.1s
Peak memory 2.7 GiB
Avg memory 2.7 GiB
CPU user 475.8s
CPU sys 0.2s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion 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

group                                             fix-pushdown-limit-early-stop          main
-----                                             -----------------------------          ----
arrow_reader_clickbench/async/Q1                  1.01   1085.8±4.98µs        ? ?/sec    1.00   1079.1±4.53µs        ? ?/sec
arrow_reader_clickbench/async/Q10                 1.00      6.8±0.18ms        ? ?/sec    1.00      6.8±0.31ms        ? ?/sec
arrow_reader_clickbench/async/Q11                 1.00      7.4±0.04ms        ? ?/sec    1.01      7.4±0.05ms        ? ?/sec
arrow_reader_clickbench/async/Q12                 1.00     14.4±0.40ms        ? ?/sec    1.00     14.3±0.26ms        ? ?/sec
arrow_reader_clickbench/async/Q13                 1.00     16.8±0.46ms        ? ?/sec    1.01     16.9±0.32ms        ? ?/sec
arrow_reader_clickbench/async/Q14                 1.00     15.5±0.19ms        ? ?/sec    1.03     15.9±0.20ms        ? ?/sec
arrow_reader_clickbench/async/Q19                 1.00      3.0±0.05ms        ? ?/sec    1.06      3.1±0.09ms        ? ?/sec
arrow_reader_clickbench/async/Q20                 1.24     92.0±1.38ms        ? ?/sec    1.00     74.2±0.80ms        ? ?/sec
arrow_reader_clickbench/async/Q21                 1.30    106.1±1.88ms        ? ?/sec    1.00     81.8±0.50ms        ? ?/sec
arrow_reader_clickbench/async/Q22                 1.16    135.0±5.47ms        ? ?/sec    1.00    116.1±2.65ms        ? ?/sec
arrow_reader_clickbench/async/Q23                 1.00    239.7±3.02ms        ? ?/sec    1.06    253.0±3.29ms        ? ?/sec
arrow_reader_clickbench/async/Q24                 1.00     18.6±0.08ms        ? ?/sec    1.03     19.2±0.16ms        ? ?/sec
arrow_reader_clickbench/async/Q27                 1.00     57.3±0.61ms        ? ?/sec    1.03     58.9±0.72ms        ? ?/sec
arrow_reader_clickbench/async/Q28                 1.00     57.7±0.36ms        ? ?/sec    1.01     58.5±0.81ms        ? ?/sec
arrow_reader_clickbench/async/Q30                 1.00     18.0±0.13ms        ? ?/sec    1.02     18.4±0.13ms        ? ?/sec
arrow_reader_clickbench/async/Q36                 1.00     14.6±0.15ms        ? ?/sec    1.07     15.6±0.65ms        ? ?/sec
arrow_reader_clickbench/async/Q37                 1.00      5.3±0.09ms        ? ?/sec    1.04      5.5±0.08ms        ? ?/sec
arrow_reader_clickbench/async/Q38                 1.00     12.9±0.15ms        ? ?/sec    1.04     13.4±0.24ms        ? ?/sec
arrow_reader_clickbench/async/Q39                 1.00     23.5±0.52ms        ? ?/sec    1.07     25.0±0.88ms        ? ?/sec
arrow_reader_clickbench/async/Q40                 1.00      5.4±0.06ms        ? ?/sec    1.08      5.8±0.17ms        ? ?/sec
arrow_reader_clickbench/async/Q41                 1.00      4.8±0.08ms        ? ?/sec    1.01      4.9±0.06ms        ? ?/sec
arrow_reader_clickbench/async/Q42                 1.00      3.4±0.03ms        ? ?/sec    1.02      3.5±0.04ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q1     1.00   1052.2±2.98µs        ? ?/sec    1.00   1049.4±4.08µs        ? ?/sec
arrow_reader_clickbench/async_object_store/Q10    1.00      6.3±0.02ms        ? ?/sec    1.01      6.3±0.03ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q11    1.01      7.6±0.32ms        ? ?/sec    1.00      7.5±0.35ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q12    1.02     14.5±0.18ms        ? ?/sec    1.00     14.2±0.32ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q13    1.00     16.8±0.39ms        ? ?/sec    1.00     16.8±0.17ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q14    1.00     15.3±0.13ms        ? ?/sec    1.04     15.9±0.46ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q19    1.00      2.9±0.05ms        ? ?/sec    1.04      3.0±0.05ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q20    1.00     70.3±0.25ms        ? ?/sec    1.03     72.1±0.67ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q21    1.00     79.5±0.61ms        ? ?/sec    1.03     81.9±1.20ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q22    1.00     96.2±0.73ms        ? ?/sec    1.07    102.8±4.63ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q23    1.00    215.8±3.82ms        ? ?/sec    1.03    221.8±5.27ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q24    1.00     18.5±0.37ms        ? ?/sec    1.02     18.8±0.14ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q27    1.00     55.5±0.42ms        ? ?/sec    1.03     57.4±1.09ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q28    1.00     56.7±0.76ms        ? ?/sec    1.03     58.4±1.01ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q30    1.00     17.9±0.13ms        ? ?/sec    1.02     18.3±0.19ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q36    1.00     13.9±0.13ms        ? ?/sec    1.03     14.3±0.20ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q37    1.00      5.2±0.09ms        ? ?/sec    1.02      5.3±0.06ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q38    1.00     12.3±0.14ms        ? ?/sec    1.02     12.6±0.19ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q39    1.00     22.3±0.41ms        ? ?/sec    1.05     23.4±0.70ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q40    1.00      5.1±0.03ms        ? ?/sec    1.04      5.3±0.06ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q41    1.00      4.6±0.10ms        ? ?/sec    1.04      4.8±0.14ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q42    1.00      3.3±0.03ms        ? ?/sec    1.02      3.4±0.04ms        ? ?/sec
arrow_reader_clickbench/sync/Q1                   1.00    874.9±2.17µs        ? ?/sec    1.00    874.0±1.85µs        ? ?/sec
arrow_reader_clickbench/sync/Q10                  1.01      5.1±0.07ms        ? ?/sec    1.00      5.0±0.03ms        ? ?/sec
arrow_reader_clickbench/sync/Q11                  1.01      6.1±0.05ms        ? ?/sec    1.00      6.0±0.09ms        ? ?/sec
arrow_reader_clickbench/sync/Q12                  1.00     21.2±0.20ms        ? ?/sec    1.02     21.6±0.21ms        ? ?/sec
arrow_reader_clickbench/sync/Q13                  1.00     23.5±0.05ms        ? ?/sec    1.04     24.5±0.43ms        ? ?/sec
arrow_reader_clickbench/sync/Q14                  1.00     22.4±0.26ms        ? ?/sec    1.03     23.1±0.37ms        ? ?/sec
arrow_reader_clickbench/sync/Q19                  1.00      2.6±0.03ms        ? ?/sec    1.02      2.6±0.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q20                  1.00    119.0±1.36ms        ? ?/sec    1.07    126.8±2.08ms        ? ?/sec
arrow_reader_clickbench/sync/Q21                  1.00     91.7±0.66ms        ? ?/sec    1.11    101.6±1.78ms        ? ?/sec
arrow_reader_clickbench/sync/Q22                  1.00    138.9±1.85ms        ? ?/sec    1.03    143.6±2.18ms        ? ?/sec
arrow_reader_clickbench/sync/Q23                  1.00   287.7±10.18ms        ? ?/sec    1.01    291.7±5.75ms        ? ?/sec
arrow_reader_clickbench/sync/Q24                  1.00     26.2±0.48ms        ? ?/sec    1.03     27.0±0.36ms        ? ?/sec
arrow_reader_clickbench/sync/Q27                  1.00    105.6±1.08ms        ? ?/sec    1.03    109.3±1.26ms        ? ?/sec
arrow_reader_clickbench/sync/Q28                  1.00    101.8±0.34ms        ? ?/sec    1.04    106.0±0.61ms        ? ?/sec
arrow_reader_clickbench/sync/Q30                  1.00     17.8±0.11ms        ? ?/sec    1.05     18.6±0.36ms        ? ?/sec
arrow_reader_clickbench/sync/Q36                  1.00     21.7±0.06ms        ? ?/sec    1.02     22.2±0.34ms        ? ?/sec
arrow_reader_clickbench/sync/Q37                  1.00      6.7±0.08ms        ? ?/sec    1.01      6.8±0.06ms        ? ?/sec
arrow_reader_clickbench/sync/Q38                  1.01     11.4±0.21ms        ? ?/sec    1.00     11.3±0.21ms        ? ?/sec
arrow_reader_clickbench/sync/Q39                  1.00     20.1±0.12ms        ? ?/sec    1.00     20.2±0.12ms        ? ?/sec
arrow_reader_clickbench/sync/Q40                  1.00      5.0±0.08ms        ? ?/sec    1.03      5.2±0.17ms        ? ?/sec
arrow_reader_clickbench/sync/Q41                  1.00      5.5±0.06ms        ? ?/sec    1.02      5.6±0.11ms        ? ?/sec
arrow_reader_clickbench/sync/Q42                  1.00      4.2±0.04ms        ? ?/sec    1.00      4.2±0.02ms        ? ?/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 786.3s
Peak memory 3.1 GiB
Avg memory 2.9 GiB
CPU user 708.1s
CPU sys 77.8s
Peak spill 0 B

branch

Metric Value
Wall time 779.0s
Peak memory 3.2 GiB
Avg memory 3.1 GiB
CPU user 708.0s
CPU sys 71.1s
Peak spill 0 B

File an issue against this benchmark runner

@haohuaijin
Copy link
Copy Markdown
Contributor Author

🤖 Arrow criterion benchmark completed (GKE) | trigger

Details

group                                                                                              fix-pushdown-limit-early-stop          main
-----                                                                                              -----------------------------          ----
arrow_reader_row_filter/float64 <= 99.0/all_columns/async                                          1.00      5.3±0.02ms        ? ?/sec    1.02      5.4±0.01ms        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/all_columns/sync                                           1.00      5.2±0.02ms        ? ?/sec    1.01      5.3±0.03ms        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/async                                1.00      4.6±0.01ms        ? ?/sec    1.01      4.6±0.02ms        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/sync                                 1.00      4.5±0.02ms        ? ?/sec    1.01      4.5±0.02ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/async                            1.00      4.2±0.01ms        ? ?/sec    1.00      4.2±0.01ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/sync                             1.00      4.6±0.02ms        ? ?/sec    1.01      4.6±0.03ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/async                  1.00      3.7±0.02ms        ? ?/sec    1.01      3.8±0.02ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/sync                   1.00      3.7±0.01ms        ? ?/sec    1.00      3.7±0.01ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/async                                           1.00      5.3±0.02ms        ? ?/sec    1.01      5.4±0.02ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/sync                                            1.00      5.2±0.01ms        ? ?/sec    1.01      5.3±0.03ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/async                                 1.00      4.6±0.01ms        ? ?/sec    1.02      4.6±0.02ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/sync                                  1.00      4.5±0.01ms        ? ?/sec    1.01      4.5±0.02ms        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/async                                            1.01    887.2±1.68µs        ? ?/sec    1.00    880.6±2.13µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/sync                                             1.00      2.2±0.01ms        ? ?/sec    1.01      2.2±0.01ms        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/async                                  1.00    807.2±1.16µs        ? ?/sec    1.00    808.0±2.26µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/sync                                   1.00      2.1±0.01ms        ? ?/sec    1.02      2.2±0.02ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/async                                               1.00      7.5±0.02ms        ? ?/sec    1.02      7.7±0.03ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/sync                                                1.00      6.7±0.02ms        ? ?/sec    1.02      6.8±0.03ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/async                                     1.00      7.1±0.02ms        ? ?/sec    1.01      7.2±0.02ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/sync                                      1.00      6.2±0.02ms        ? ?/sec    1.02      6.4±0.03ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/async                                                1.00      5.0±0.02ms        ? ?/sec    1.00      5.0±0.02ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/sync                                                 1.00      5.4±0.02ms        ? ?/sec    1.00      5.4±0.02ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/async                                      1.02      4.7±0.02ms        ? ?/sec    1.00      4.6±0.02ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/sync                                       1.01      4.6±0.02ms        ? ?/sec    1.00      4.6±0.02ms        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/async                                               1.01      3.5±0.01ms        ? ?/sec    1.00      3.5±0.01ms        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/sync                                                1.01      3.7±0.01ms        ? ?/sec    1.00      3.7±0.01ms        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/async                                     1.01      3.2±0.01ms        ? ?/sec    1.00      3.2±0.01ms        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/sync                                      1.00      3.2±0.01ms        ? ?/sec    1.01      3.2±0.01ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/async                                           1.00      8.6±0.02ms        ? ?/sec    1.00      8.6±0.03ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/sync                                            1.00      9.3±0.03ms        ? ?/sec    1.01      9.3±0.04ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/async                                 1.00      7.1±0.02ms        ? ?/sec    1.02      7.2±0.03ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/sync                                  1.00      6.3±0.02ms        ? ?/sec    1.01      6.4±0.04ms        ? ?/sec
arrow_reader_row_filter_limit/float64 <= 99.0/all_columns/limit10/async                            1.00    325.4±0.79µs        ? ?/sec    4.33   1408.0±6.25µs        ? ?/sec
arrow_reader_row_filter_limit/float64 <= 99.0/exclude_filter_column/limit10/async                  1.00    320.3±1.14µs        ? ?/sec    4.01   1284.1±8.16µs        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0 AND ts >= 9000/all_columns/limit10/async              1.00    365.6±1.05µs        ? ?/sec    6.33      2.3±0.01ms        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0 AND ts >= 9000/exclude_filter_column/limit10/async    1.00    348.1±0.96µs        ? ?/sec    5.96      2.1±0.01ms        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0/all_columns/limit10/async                             1.00    328.1±0.99µs        ? ?/sec    4.25   1394.4±4.71µs        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0/exclude_filter_column/limit10/async                   1.00    321.6±1.48µs        ? ?/sec    3.96   1273.3±8.21µs        ? ?/sec
arrow_reader_row_filter_limit/int64 > 90/all_columns/limit10/async                                 1.00    326.5±1.67µs        ? ?/sec    3.74   1221.6±2.92µs        ? ?/sec
arrow_reader_row_filter_limit/int64 > 90/exclude_filter_column/limit10/async                       1.00    318.5±0.86µs        ? ?/sec    3.57   1137.1±2.06µs        ? ?/sec
arrow_reader_row_filter_limit/ts < 9000/all_columns/limit10/async                                  1.00    325.7±0.75µs        ? ?/sec    3.74   1219.5±4.41µs        ? ?/sec
arrow_reader_row_filter_limit/ts < 9000/exclude_filter_column/limit10/async                        1.00    316.8±1.16µs        ? ?/sec    3.63   1148.8±3.83µs        ? ?/sec
arrow_reader_row_filter_limit/ts >= 9000/all_columns/limit10/async                                 1.00    336.6±1.04µs        ? ?/sec    3.63   1221.3±4.07µs        ? ?/sec
arrow_reader_row_filter_limit/ts >= 9000/exclude_filter_column/limit10/async                       1.00    333.7±0.65µs        ? ?/sec    3.43   1144.7±1.96µs        ? ?/sec
arrow_reader_row_filter_limit/utf8View <> ''/all_columns/limit10/async                             1.00    352.0±2.63µs        ? ?/sec    11.08     3.9±0.02ms        ? ?/sec
arrow_reader_row_filter_limit/utf8View <> ''/exclude_filter_column/limit10/async                   1.00    337.8±0.95µs        ? ?/sec    10.50     3.5±0.01ms        ? ?/sec

Resource Usage
base (merge-base)

Metric Value
Wall time 472.7s
Peak memory 2.7 GiB
Avg memory 2.7 GiB
CPU user 471.8s
CPU sys 0.8s
Peak spill 0 B
branch

Metric Value
Wall time 476.1s
Peak memory 2.7 GiB
Avg memory 2.7 GiB
CPU user 475.8s
CPU sys 0.2s
Peak spill 0 B
File an issue against this benchmark runner

Hi @Dandandan @alamb the benchmark result look good, do you have time take a look for this pr?

@alamb
Copy link
Copy Markdown
Contributor

alamb commented Apr 23, 2026

run benchmark arrow_reader_row_filter

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4307917664-1790-gxvkz 6.12.55+ #1 SMP Sun Feb 1 08:59:41 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 fix-pushdown-limit-early-stop (dbcf49d) to b93240a (merge-base) diff
BENCH_NAME=arrow_reader_row_filter
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader_row_filter
BENCH_FILTER=
Results will be posted here when complete


File an issue against this benchmark runner

Copy link
Copy Markdown
Contributor

@alamb alamb left a comment

Choose a reason for hiding this comment

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

Thank you @haohuaijin -- I think this looks really nice. I had one API design suggestion and a minor nitpick but otherwise 💯

Thank you

/// should have been passed to subsequent predicates.
///
/// If `limit` is `None` this behaves exactly like [`Self::with_predicate`].
pub fn with_predicate_limited(
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 @haohuaijin -- this actually makes a lot of sense to me 👍

I do think the API is somewhat unfortunate now (the fact we have to add a new function shows it isn't ideal.)

Would you be willing to make the API a little more future proof with something like the following?

struct PredicateOptions {
        array_reader: Box<dyn ArrayReader>,
        predicate: &mut dyn ArrowPredicate,
        limit: Option<usize>,
        total_rows: usize,
}
pub fn with_predicate_options(mut self, options: PredicateOptions) -> Result<Self> { 
...
}

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.

refactor in 8c3b313

let reader = ParquetRecordBatchReader::new(array_reader, self.clone().build());
let mut filters = vec![];
let mut processed_rows: usize = 0;
let mut cumulative_matches: usize = 0;
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 would have found a name like matched_rows easier to understand given the processed_rows other variable

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 in 8c3b313

match limit {
Some(limit) if cumulative_matches + filter.true_count() >= limit => {
let needed = limit - cumulative_matches;
let truncated = truncate_filter_after_n_trues(&filter, needed);
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.

you could avoid this clone by passing in filter rather than &filter

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 in 8c3b313

///
/// `filter` must not contain nulls (callers apply [`prep_null_mask_filter`]
/// first). If `filter` has at most `n` `true` values, a clone is returned.
fn truncate_filter_after_n_trues(filter: &BooleanArray, n: usize) -> BooleanArray {
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 might nice (as a follow on PR) to make as a method on BooleanArray -- something like BooleanArray::take_n_true 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.

create a issue to track #9803

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion 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

group                                                                                              fix-pushdown-limit-early-stop          main
-----                                                                                              -----------------------------          ----
arrow_reader_row_filter/float64 <= 99.0/all_columns/async                                          1.00      5.4±0.03ms        ? ?/sec    1.00      5.4±0.02ms        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/all_columns/sync                                           1.00      5.4±0.03ms        ? ?/sec    1.00      5.3±0.04ms        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/async                                1.00      4.7±0.03ms        ? ?/sec    1.01      4.7±0.03ms        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/sync                                 1.00      4.6±0.03ms        ? ?/sec    1.00      4.6±0.03ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/async                            1.00      4.3±0.03ms        ? ?/sec    1.00      4.3±0.03ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/sync                             1.00      4.6±0.04ms        ? ?/sec    1.01      4.7±0.05ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/async                  1.00      3.8±0.03ms        ? ?/sec    1.02      3.8±0.03ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/sync                   1.00      3.7±0.03ms        ? ?/sec    1.01      3.8±0.03ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/async                                           1.00      5.4±0.03ms        ? ?/sec    1.00      5.4±0.02ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/sync                                            1.00      5.4±0.04ms        ? ?/sec    1.00      5.4±0.05ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/async                                 1.00      4.7±0.03ms        ? ?/sec    1.01      4.7±0.02ms        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/sync                                  1.00      4.6±0.02ms        ? ?/sec    1.00      4.6±0.03ms        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/async                                            1.01    892.4±3.27µs        ? ?/sec    1.00    881.1±2.79µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/sync                                             1.00      2.2±0.01ms        ? ?/sec    1.01      2.2±0.01ms        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/async                                  1.01    813.0±2.53µs        ? ?/sec    1.00    808.6±2.52µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/sync                                   1.00      2.2±0.01ms        ? ?/sec    1.01      2.2±0.02ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/async                                               1.00      7.7±0.05ms        ? ?/sec    1.00      7.7±0.03ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/sync                                                1.00      6.9±0.04ms        ? ?/sec    1.00      6.8±0.03ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/async                                     1.00      7.1±0.03ms        ? ?/sec    1.01      7.2±0.03ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/sync                                      1.00      6.3±0.02ms        ? ?/sec    1.00      6.3±0.03ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/async                                                1.00      5.1±0.03ms        ? ?/sec    1.01      5.1±0.03ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/sync                                                 1.00      5.4±0.03ms        ? ?/sec    1.01      5.5±0.03ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/async                                      1.00      4.6±0.02ms        ? ?/sec    1.01      4.7±0.03ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/sync                                       1.00      4.7±0.03ms        ? ?/sec    1.00      4.7±0.03ms        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/async                                               1.00      3.5±0.02ms        ? ?/sec    1.00      3.5±0.02ms        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/sync                                                1.00      3.7±0.02ms        ? ?/sec    1.00      3.7±0.02ms        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/async                                     1.00      3.2±0.02ms        ? ?/sec    1.01      3.2±0.02ms        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/sync                                      1.00      3.2±0.03ms        ? ?/sec    1.01      3.2±0.02ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/async                                           1.00      8.6±0.03ms        ? ?/sec    1.00      8.6±0.03ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/sync                                            1.00      9.4±0.04ms        ? ?/sec    1.00      9.4±0.04ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/async                                 1.00      7.1±0.02ms        ? ?/sec    1.01      7.2±0.02ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/sync                                  1.00      6.4±0.03ms        ? ?/sec    1.01      6.4±0.03ms        ? ?/sec
arrow_reader_row_filter_limit/float64 <= 99.0/all_columns/limit10/async                            1.00    345.1±1.56µs        ? ?/sec    4.17  1440.1±15.02µs        ? ?/sec
arrow_reader_row_filter_limit/float64 <= 99.0/exclude_filter_column/limit10/async                  1.00    338.7±1.41µs        ? ?/sec    3.86  1307.4±15.57µs        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0 AND ts >= 9000/all_columns/limit10/async              1.00    384.4±1.41µs        ? ?/sec    6.11      2.3±0.02ms        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0 AND ts >= 9000/exclude_filter_column/limit10/async    1.00    368.1±1.93µs        ? ?/sec    5.71      2.1±0.02ms        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0/all_columns/limit10/async                             1.00    345.6±1.38µs        ? ?/sec    4.16  1436.4±11.43µs        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0/exclude_filter_column/limit10/async                   1.00    339.0±1.53µs        ? ?/sec    3.83  1299.4±13.84µs        ? ?/sec
arrow_reader_row_filter_limit/int64 > 90/all_columns/limit10/async                                 1.00    339.7±1.44µs        ? ?/sec    3.61   1227.4±4.45µs        ? ?/sec
arrow_reader_row_filter_limit/int64 > 90/exclude_filter_column/limit10/async                       1.00    333.4±1.41µs        ? ?/sec    3.40   1132.0±3.08µs        ? ?/sec
arrow_reader_row_filter_limit/ts < 9000/all_columns/limit10/async                                  1.00    336.9±1.26µs        ? ?/sec    3.64   1227.5±6.13µs        ? ?/sec
arrow_reader_row_filter_limit/ts < 9000/exclude_filter_column/limit10/async                        1.00    332.6±1.37µs        ? ?/sec    3.43   1141.2±4.45µs        ? ?/sec
arrow_reader_row_filter_limit/ts >= 9000/all_columns/limit10/async                                 1.00    354.3±1.01µs        ? ?/sec    3.46   1225.8±4.63µs        ? ?/sec
arrow_reader_row_filter_limit/ts >= 9000/exclude_filter_column/limit10/async                       1.00    345.2±1.39µs        ? ?/sec    3.30   1140.8±3.69µs        ? ?/sec
arrow_reader_row_filter_limit/utf8View <> ''/all_columns/limit10/async                             1.00    363.6±1.40µs        ? ?/sec    10.90     4.0±0.01ms        ? ?/sec
arrow_reader_row_filter_limit/utf8View <> ''/exclude_filter_column/limit10/async                   1.00    355.7±1.89µs        ? ?/sec    10.08     3.6±0.01ms        ? ?/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 480.1s
Peak memory 4.3 GiB
Avg memory 4.3 GiB
CPU user 474.8s
CPU sys 0.8s
Peak spill 0 B

branch

Metric Value
Wall time 475.1s
Peak memory 4.2 GiB
Avg memory 4.2 GiB
CPU user 470.3s
CPU sys 0.2s
Peak spill 0 B

File an issue against this benchmark runner

@alamb
Copy link
Copy Markdown
Contributor

alamb commented Apr 23, 2026

arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/sync                                  1.00      6.4±0.03ms        ? ?/sec    1.01      6.4±0.03ms        ? ?/sec
arrow_reader_row_filter_limit/float64 <= 99.0/all_columns/limit10/async                            1.00    345.1±1.56µs        ? ?/sec    4.17  1440.1±15.02µs        ? ?/sec
arrow_reader_row_filter_limit/float64 <= 99.0/exclude_filter_column/limit10/async                  1.00    338.7±1.41µs        ? ?/sec    3.86  1307.4±15.57µs        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0 AND ts >= 9000/all_columns/limit10/async              1.00    384.4±1.41µs        ? ?/sec    6.11      2.3±0.02ms        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0 AND ts >= 9000/exclude_filter_column/limit10/async    1.00    368.1±1.93µs        ? ?/sec    5.71      2.1±0.02ms        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0/all_columns/limit10/async                             1.00    345.6±1.38µs        ? ?/sec    4.16  1436.4±11.43µs        ? ?/sec
arrow_reader_row_filter_limit/float64 > 99.0/exclude_filter_column/limit10/async                   1.00    339.0±1.53µs        ? ?/sec    3.83  1299.4±13.84µs        ? ?/sec
arrow_reader_row_filter_limit/int64 > 90/all_columns/limit10/async                                 1.00    339.7±1.44µs        ? ?/sec    3.61   1227.4±4.45µs        ? ?/sec
arrow_reader_row_filter_limit/int64 > 90/exclude_filter_column/limit10/async                       1.00    333.4±1.41µs        ? ?/sec    3.40   1132.0±3.08µs        ? ?/sec
arrow_reader_row_filter_limit/ts < 9000/all_columns/limit10/async                                  1.00    336.9±1.26µs        ? ?/sec    3.64   1227.5±6.13µs        ? ?/sec
arrow_reader_row_filter_limit/ts < 9000/exclude_filter_column/limit10/async                        1.00    332.6±1.37µs        ? ?/sec    3.43   1141.2±4.45µs        ? ?/sec
arrow_reader_row_filter_limit/ts >= 9000/all_columns/limit10/async                                 1.00    354.3±1.01µs        ? ?/sec    3.46   1225.8±4.63µs        ? ?/sec
arrow_reader_row_filter_limit/ts >= 9000/exclude_filter_column/limit10/async                       1.00    345.2±1.39µs        ? ?/sec    3.30   1140.8±3.69µs        ? ?/sec
arrow_reader_row_filter_limit/utf8View <> ''/all_columns/limit10/async                             1.00    363.6±1.40µs        ? ?/sec    10.90     4.0±0.01ms        ? ?/sec
arrow_reader_row_filter_limit/utf8View <> ''/exclude_filter_column/limit10/async                   1.00    355.7±1.89µs        ? ?/sec    10.08     3.6±0.01ms        ? ?/sec

Those are some sweet results @haohuaijin 😎

@haohuaijin
Copy link
Copy Markdown
Contributor Author

thanks very much for your reviews and great suggestions @alamb , i apply your suggestion in 8c3b313

Copy link
Copy Markdown
Contributor

@alamb alamb left a comment

Choose a reason for hiding this comment

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

Thanks @haohuaijin - looks great to me

///
/// Only valid for the *last* predicate in a filter chain: intermediate
/// predicates' match counts do not map 1:1 to output rows.
pub fn with_limit(mut self, limit: usize, total_rows: usize) -> Self {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

this is nice API that makes it clear limit and total rows is required

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

Labels

parquet Changes to the parquet crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

short-circuit last predicate in RowFilter when with_limit(N) is set

4 participants