Skip to content

Conversation

@lyang24
Copy link
Contributor

@lyang24 lyang24 commented Jan 3, 2026

Which issue does this PR close?

Rationale for this change

reduce allocation cost mentioned in #9059 from experiment: Pre-allocation overhead may offset the savings from avoiding incremental growth

What changes are included in this PR?

pre allocate view vectors with size.

Are these changes tested?

I did a small benchmark with
clickbench query 10 and a smaller set (1%) of clickbench data

download data create query 10

CREATE EXTERNAL TABLE hits
STORED AS PARQUET
LOCATION '/Users/lanqing/Downloads/hits_0.parquet';

SELECT "MobilePhoneModel", COUNT(DISTINCT "UserID") AS u FROM hits WHERE "MobilePhoneModel" <> '' GROUP BY "MobilePhoneModel" ORDER BY u DESC LIMIT 10;
SELECT "MobilePhoneModel", COUNT(DISTINCT "UserID") AS u FROM hits WHERE "MobilePhoneModel" <> '' GROUP BY "MobilePhoneModel" ORDER BY u DESC LIMIT 10;
SELECT "MobilePhoneModel", COUNT(DISTINCT "UserID") AS u FROM hits WHERE "MobilePhoneModel" <> '' GROUP BY "MobilePhoneModel" ORDER BY u DESC LIMIT 10;
SELECT "MobilePhoneModel", COUNT(DISTINCT "UserID") AS u FROM hits WHERE "MobilePhoneModel" <> '' GROUP BY "MobilePhoneModel" ORDER BY u DESC LIMIT 10;
SELECT "MobilePhoneModel", COUNT(DISTINCT "UserID") AS u FROM hits WHERE "MobilePhoneModel" <> '' GROUP BY "MobilePhoneModel" ORDER BY u DESC LIMIT 10;
SELECT "MobilePhoneModel", COUNT(DISTINCT "UserID") AS u FROM hits WHERE "MobilePhoneModel" <> '' GROUP BY "MobilePhoneModel" ORDER BY u DESC LIMIT 10;
SELECT "MobilePhoneModel", COUNT(DISTINCT "UserID") AS u FROM hits WHERE "MobilePhoneModel" <> '' GROUP BY "MobilePhoneModel" ORDER BY u DESC LIMIT 10;
SELECT "MobilePhoneModel", COUNT(DISTINCT "UserID") AS u FROM hits WHERE "MobilePhoneModel" <> '' GROUP BY "MobilePhoneModel" ORDER BY u DESC LIMIT 10;
SELECT "MobilePhoneModel", COUNT(DISTINCT "UserID") AS u FROM hits WHERE "MobilePhoneModel" <> '' GROUP BY "MobilePhoneModel" ORDER BY u DESC LIMIT 10;
SELECT "MobilePhoneModel", COUNT(DISTINCT "UserID") AS u FROM hits WHERE "MobilePhoneModel" <> '' GROUP BY "MobilePhoneModel" ORDER BY u DESC LIMIT 10;

run benchmark to get baseline.
patching datafusion with local arrow

 [patch.crates-io]
  arrow-array = { path = "../arrow-rs-patched/arrow-array" }
  arrow-buffer = { path = "../arrow-rs-patched/arrow-buffer" }
  arrow-data = { path = "../arrow-rs-patched/arrow-data" }
  arrow-schema = { path = "../arrow-rs-patched/arrow-schema" }
  parquet = { path = "../arrow-rs-patched/parquet" }

run benchmark

  cargo build --profile profiling --bin datafusion-cli

  # Run benchmark
  hyperfine --warmup 2 --runs 10 --export-json patched.json \
    "./target/profiling/datafusion-cli --file clickbench_q10.sql"

results i think there are no regression at least - was hoping someone with large internet pipe to bench this on full hits table
baseline.json
patched.json

Performance Results (hits_0.parquet - 117MB)

  Baseline (no patch):     47.12 ms ± 0.60 ms
  Patched (with_capacity): 46.47 ms ± 2.24 ms

update: with full hits table (no regression)
baseline_full.json
patched_full.json

due to the date size the query file only contain 1 copy of the query 10 query.

baseline

lanqing@Lanqings-MacBook-Pro-2 arrow-datafusion % hyperfine --warmup 2 --runs 10 --export-json baseline_full.json \
  "./target/profiling/datafusion-cli --file clickbench_q10_full.sql"
Benchmark 1: ./target/profiling/datafusion-cli --file clickbench_q10_full.sql
  Time (mean ± σ):     131.0 ms ±   2.9 ms    [User: 877.7 ms, System: 180.5 ms]
  Range (min … max):   127.9 ms … 137.0 ms    10 runs

patched

Benchmark 1: ./target/profiling/datafusion-cli --file clickbench_q10_full.sql
  Time (mean ± σ):     132.0 ms ±   2.5 ms    [User: 878.2 ms, System: 178.7 ms]
  Range (min … max):   129.4 ms … 136.2 ms    10 runs

Are there any user-facing changes?

no

@github-actions github-actions bot added the parquet Changes to the parquet crate label Jan 3, 2026
@lyang24 lyang24 force-pushed the pre_allocate_view_vec branch from 132b247 to e2b2b8f Compare January 3, 2026 10:01
@lyang24 lyang24 marked this pull request as draft January 3, 2026 14:05
@lyang24
Copy link
Contributor Author

lyang24 commented Jan 3, 2026

from experiment: Pre-allocation overhead may offset the savings from avoiding incremental growth

turning this into a draft

@alamb
Copy link
Contributor

alamb commented Jan 5, 2026

Thank you @lyang24 -- I will look at this more carefully shortly

@alamb
Copy link
Contributor

alamb commented Jan 9, 2026

I suspect we will not be able to detect the difference in an end to end test given how small of an overhead the allocation is compared to running the rest of the query

@alamb
Copy link
Contributor

alamb commented Jan 9, 2026

from experiment: Pre-allocation overhead may offset the savings from avoiding incremental growth

@lyang24 -- I am not sure that the num_rows you are passing in is actually the total number of rows which would be output. Looking at the internals of the reader, it almost looks like the record_reader doesn't currently get told how many records it may get -- however, the higher level APIs certainly know the max size (it is the batch_size)

Maybe we could pass in the batch size to the reader...

Edit: one way we could find out would be to put a println to print out the number of rows that was reserved 🤔

@alamb
Copy link
Contributor

alamb commented Jan 9, 2026

Update:

I made a small test program (below) and printed out the capacities

diff --git a/parquet/src/arrow/buffer/view_buffer.rs b/parquet/src/arrow/buffer/view_buffer.rs
index 0343047da6..d87b494b46 100644
--- a/parquet/src/arrow/buffer/view_buffer.rs
+++ b/parquet/src/arrow/buffer/view_buffer.rs
@@ -35,6 +35,7 @@ pub struct ViewBuffer {
 impl ViewBuffer {
     /// Create a new ViewBuffer with capacity for the specified number of views
     pub fn with_capacity(capacity: usize) -> Self {
+        println!("Creating ViewBuffer with capacity {}", capacity);
         Self {
             views: Vec::with_capacity(capacity),
             buffers: Vec::new(),

Here is what they are:

Creating ViewBuffer with capacity 4165
Creating ViewBuffer with capacity 10986
Creating ViewBuffer with capacity 9772
Creating ViewBuffer with capacity 35
Creating ViewBuffer with capacity 36
Creating ViewBuffer with capacity 26
Creating ViewBuffer with capacity 1
....
Creating ViewBuffer with capacity 32
Creating ViewBuffer with capacity 16
Creating ViewBuffer with capacity 218
Creating ViewBuffer with capacity 154
Creating ViewBuffer with capacity 154
Creating ViewBuffer with capacity 27

I think those are the number of rows in the dictionary (not the view themselves)

I also then printed out the actual capacites

diff --git a/parquet/src/arrow/array_reader/byte_view_array.rs b/parquet/src/arrow/array_reader/byte_view_array.rs
index 8e690c574d..3ea6f08a29 100644
--- a/parquet/src/arrow/array_reader/byte_view_array.rs
+++ b/parquet/src/arrow/array_reader/byte_view_array.rs
@@ -259,6 +259,8 @@ impl ByteViewArrayDecoder {
         len: usize,
         dict: Option<&ViewBuffer>,
     ) -> Result<usize> {
+        println!("ByteViewArrayDecoder::read called with len {}, current views capacity: {}", len, out.views.capacity());
+
         match self {
             ByteViewArrayDecoder::Plain(d) => d.read(out, len),
             ByteViewArrayDecoder::Dictionary(d) => {

You can actually see most of the reads have an empty buffer

ewArrayDecoder::read called with len 8192, current views capacity: 0
ByteViewArrayDecoder::read called with len 8192, current views capacity: 0
ByteViewArrayDecoder::read called with len 8192, current views capacity: 0
ByteViewArrayDecoder::read called with len 8192, current views capacity: 0
ByteViewArrayDecoder::read called with len 8192, current views capacity: 0
ByteViewArrayDecoder::read called with len 8192, current views capacity: 0
ByteViewArrayDecoder::read called with len 8192, current views capacity: 0
Read batch with 8192 rows and 105 columns
ByteViewArrayDecoder::read called with len 5120, current views capacity: 0
ByteViewArrayDecoder::read called with len 3072, current views capacity: 5120
ByteViewArrayDecoder::read called with len 6144, current views capacity: 0
ByteViewArrayDecoder::read called with len 2048, current views capacity: 6144

I tracked it down in a debugger and the default buffer is being created here:

https://github.com/apache/arrow-rs/blob/02fa779a9cb122c5218293be3afb980832701683/parquet/src/arrow/record_reader/mod.rs#L76-L75

Whole Test Progarm

use std::fs::File;
use std::io::{BufReader, Read};
use std::sync::Arc;
use arrow::datatypes::{DataType, Field, FieldRef, Schema};
use parquet::arrow::arrow_reader::{ArrowReaderOptions, ParquetRecordBatchReaderBuilder};
use bytes::Bytes;
use parquet::file::metadata::ParquetMetaDataReader;

fn main() {
    let file_name = "/Users/andrewlamb/Downloads/hits/hits_0.parquet";
    println!("Opening file: {file_name}", );
    let mut file = File::open(file_name).unwrap();
    let mut bytes = Vec::new();
    file.read_to_end(&mut bytes).unwrap();
    let bytes = Bytes::from(bytes);

    let schema = string_to_view_types(ParquetRecordBatchReaderBuilder::try_new(bytes.clone()).unwrap().schema());

    //println!("Schema: {:?}", schema);

    let options = ArrowReaderOptions::new()
        .with_schema(schema);
    let reader = ParquetRecordBatchReaderBuilder::try_new_with_options(bytes, options).unwrap()
        .with_batch_size(8192)
        .build().unwrap();

    for batch in reader {
        let batch = batch.unwrap();
        println!("Read batch with {} rows and {} columns", batch.num_rows(), batch.num_columns());
    }

    println!("Done");


}


// Hack because the clickbench files were written with the wrong logical type for strings
fn string_to_view_types(schema: &Arc<Schema>) -> Arc<Schema> {
    let fields: Vec<FieldRef> = schema
        .fields()
        .iter()
        .map(|field| {
            let existing_type = field.data_type();
            if existing_type == &DataType::Utf8 || existing_type == &DataType::Binary {
                Arc::new(Field::new(
                    field.name(),
                    DataType::Utf8View,
                    field.is_nullable(),
                ))
            } else {
                Arc::clone(field)
            }
        })
        .collect();
    Arc::new(Schema::new(fields))
}

@alamb
Copy link
Contributor

alamb commented Jan 9, 2026

So, TLDR is my analyis is that we aren't properly sizing the allocations. The good news is we can fix this. The bad news is it may be tricky. I will update the original ticket too

@lyang24
Copy link
Contributor Author

lyang24 commented Jan 11, 2026

So, TLDR is my analyis is that we aren't properly sizing the allocations. The good news is we can fix this. The bad news is it may be tricky. I will update the original ticket too

Thanks for the deep dive, i think passing down a capacity hint from ArrayReaderBuilder is the right way to go. I made a impl attempt - and results looks promising.
clickbench query 10 no predicate pushdown

Run Original Arrow-rs (ms) Patched Arrow-rs (ms)
1 (cold) 174 181
2 115 109
3 113 107
4 114 103
5 115 111
6 118 110
Avg (warm) 115 108

with predicate pushdown the sql runs so fast (7ms) the difference become hard to tell
SET datafusion.execution.parquet.pushdown_filters = true;

@lyang24 lyang24 force-pushed the pre_allocate_view_vec branch from 224798a to 72f35ad Compare January 11, 2026 07:17
@lyang24 lyang24 changed the title Minor: pre allocate view vec parquet: preallocate capacity for ArrayReaderBuilder Jan 11, 2026
@lyang24 lyang24 force-pushed the pre_allocate_view_vec branch from 72f35ad to a4f04e7 Compare January 11, 2026 07:29
@lyang24 lyang24 changed the title parquet: preallocate capacity for ArrayReaderBuilder [parquet] perf: preallocate capacity for ArrayReaderBuilder Jan 11, 2026
@lyang24 lyang24 changed the title [parquet] perf: preallocate capacity for ArrayReaderBuilder [Parquet] perf: preallocate capacity for ArrayReaderBuilder Jan 11, 2026
@alamb
Copy link
Contributor

alamb commented Jan 11, 2026

Nice -- checking it out

@alamb
Copy link
Contributor

alamb commented Jan 11, 2026

run benchmark arrow_reader arrow_reader_row_filter arrow_reader_clickbench

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing pre_allocate_view_vec (a4f04e7) to 843bee2 diff
BENCH_NAME=arrow_reader
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental --bench arrow_reader
BENCH_FILTER=
BENCH_BRANCH_NAME=pre_allocate_view_vec
Results will be posted here when complete

Copy link
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 @lyang24 -- this looks very nice. I kicked off some automated benchmarks and hopefully we can see the benefits reflected there (though the benchmarks are sometimes pretty noisy)

If this does work out, I would like to spend a bit more time trying to get this mechanism to work by removing Default from ValuesBuffer to ensure we got all the cases and that any future array readers work the same

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                                      main                                   pre_allocate_view_vec
-----                                                                                                      ----                                   ---------------------
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.00   1212.4±5.70µs        ? ?/sec    1.05  1269.4±26.62µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.00   1245.0±9.07µs        ? ?/sec    1.03   1283.0±9.24µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.00   1219.0±6.42µs        ? ?/sec    1.05   1274.3±9.67µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.06    516.1±5.19µs        ? ?/sec    1.00    485.8±5.31µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.05   678.5±29.39µs        ? ?/sec    1.00    649.2±8.81µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.05   518.3±38.16µs        ? ?/sec    1.00   493.8±15.22µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.00   543.0±11.34µs        ? ?/sec    1.03   558.4±11.03µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.01    721.6±4.50µs        ? ?/sec    1.00    715.7±3.51µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.00    555.1±7.88µs        ? ?/sec    1.02    566.2±3.63µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.43    283.9±5.35µs        ? ?/sec    1.00    198.5±1.16µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.41    271.3±5.18µs        ? ?/sec    1.00    192.4±1.73µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.43    289.2±3.59µs        ? ?/sec    1.00    202.8±1.54µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.07   293.5±17.90µs        ? ?/sec    1.00    275.0±1.96µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.05    283.3±3.78µs        ? ?/sec    1.00    270.4±5.16µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.24    288.6±6.93µs        ? ?/sec    1.00    232.8±3.73µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.07    302.6±5.83µs        ? ?/sec    1.00    283.6±4.65µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.02  1085.8±15.34µs        ? ?/sec    1.00   1067.4±6.77µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.01    947.4±7.50µs        ? ?/sec    1.00    936.8±8.25µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.01   1081.8±6.63µs        ? ?/sec    1.00  1075.6±17.88µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.02    403.1±6.69µs        ? ?/sec    1.00    394.3±9.57µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.01   591.1±10.10µs        ? ?/sec    1.00   583.8±13.65µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.03   409.2±11.21µs        ? ?/sec    1.00    399.0±9.89µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.00    160.8±1.25µs        ? ?/sec    1.00    160.2±0.99µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.00    275.6±3.47µs        ? ?/sec    1.04    286.7±2.81µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.02   169.7±21.23µs        ? ?/sec    1.00    165.8±0.99µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.00     76.1±1.03µs        ? ?/sec    1.02     77.6±6.10µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.00    232.2±1.57µs        ? ?/sec    1.05    244.0±1.49µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.00     81.1±1.29µs        ? ?/sec    1.02     82.3±0.81µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.00   746.2±88.38µs        ? ?/sec    1.00    744.9±8.47µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.02    594.6±8.24µs        ? ?/sec    1.00    582.7±9.00µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.00   742.2±17.93µs        ? ?/sec    1.01    750.3±4.99µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.00     58.8±4.84µs        ? ?/sec    1.23     72.4±3.38µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.00    255.1±2.11µs        ? ?/sec    1.00    254.2±1.99µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.00     68.4±4.73µs        ? ?/sec    1.14     78.0±2.84µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.01     94.7±5.73µs        ? ?/sec    1.00     93.8±0.32µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.00    208.2±1.91µs        ? ?/sec    1.04    217.1±4.91µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.01     99.2±1.41µs        ? ?/sec    1.00     98.6±0.73µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.00      9.0±0.14µs        ? ?/sec    1.04      9.4±0.40µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.00    164.5±1.65µs        ? ?/sec    1.06    174.1±1.39µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.01     14.4±0.23µs        ? ?/sec    1.00     14.2±0.27µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.00    184.8±1.35µs        ? ?/sec    1.00    184.5±1.81µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.00    329.5±2.90µs        ? ?/sec    1.02    337.4±7.36µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.00    189.8±2.09µs        ? ?/sec    1.00    189.9±2.43µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.00     14.0±0.33µs        ? ?/sec    1.12     15.6±0.51µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.00    245.5±3.53µs        ? ?/sec    1.04    254.1±5.91µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.00     19.9±0.50µs        ? ?/sec    1.01     20.0±0.44µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.00    366.5±6.38µs        ? ?/sec    1.00    367.0±2.68µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.00    388.2±3.29µs        ? ?/sec    1.00    387.6±2.33µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.00    371.1±3.09µs        ? ?/sec    1.01   375.7±16.29µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.00     26.8±0.36µs        ? ?/sec    1.01     27.1±0.70µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.01    219.1±1.57µs        ? ?/sec    1.00    217.0±1.17µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.00     33.6±0.32µs        ? ?/sec    1.00     33.7±0.73µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00    110.3±0.37µs        ? ?/sec    1.00    110.1±0.38µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.03    130.3±4.92µs        ? ?/sec    1.00    126.7±2.40µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.01    113.6±0.98µs        ? ?/sec    1.00    112.7±1.05µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.03   164.1±14.03µs        ? ?/sec    1.00    159.3±1.51µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.03    222.2±3.38µs        ? ?/sec    1.00    215.6±3.32µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.02    168.2±4.98µs        ? ?/sec    1.00    165.3±1.71µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.06     77.2±0.90µs        ? ?/sec    1.00     73.0±0.65µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.03    174.9±2.97µs        ? ?/sec    1.00    169.7±3.45µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.09     84.5±3.00µs        ? ?/sec    1.00     77.8±0.64µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00    136.1±3.51µs        ? ?/sec    1.06    144.8±6.56µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.03   217.6±30.82µs        ? ?/sec    1.00   211.6±19.40µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    143.1±4.82µs        ? ?/sec    1.04    148.2±1.71µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.06     74.1±0.44µs        ? ?/sec    1.00     69.9±0.16µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.04    172.8±1.32µs        ? ?/sec    1.00    166.5±1.46µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.06     77.6±0.40µs        ? ?/sec    1.00     73.1±0.26µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.03    109.6±1.42µs        ? ?/sec    1.00    105.9±0.42µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.04    133.2±2.17µs        ? ?/sec    1.00    128.6±3.72µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.05    113.5±3.73µs        ? ?/sec    1.00    108.2±0.46µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.04    163.0±4.66µs        ? ?/sec    1.00    156.8±1.82µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.04    229.5±1.98µs        ? ?/sec    1.00    220.9±1.22µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.04    168.3±0.86µs        ? ?/sec    1.00    162.0±2.30µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.03    203.9±3.06µs        ? ?/sec    1.00    198.2±1.90µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.05    246.8±3.32µs        ? ?/sec    1.00    235.8±3.82µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.03    209.7±2.62µs        ? ?/sec    1.00    203.5±0.47µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.08    153.9±1.82µs        ? ?/sec    1.00    142.8±1.34µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.06    224.7±1.62µs        ? ?/sec    1.00    212.4±1.01µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.08    159.3±2.13µs        ? ?/sec    1.00    147.0±0.59µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.23    103.2±1.30µs        ? ?/sec    1.00     83.8±0.29µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.07    194.3±0.93µs        ? ?/sec    1.00    181.8±2.33µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.23    114.5±0.56µs        ? ?/sec    1.00     93.1±1.05µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.00     78.4±0.65µs        ? ?/sec    1.00     78.7±1.05µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.04    104.4±0.67µs        ? ?/sec    1.00    100.9±0.52µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.00     81.0±0.30µs        ? ?/sec    1.00     81.1±1.85µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.01    108.9±0.83µs        ? ?/sec    1.00    108.0±0.50µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.04    176.4±1.20µs        ? ?/sec    1.00    169.8±1.91µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.01    114.2±2.57µs        ? ?/sec    1.00    112.5±2.36µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.07     43.9±0.35µs        ? ?/sec    1.00     41.1±0.32µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.05    140.7±7.27µs        ? ?/sec    1.00    134.5±1.42µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.06     48.1±0.40µs        ? ?/sec    1.00     45.2±0.11µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.00    102.4±1.37µs        ? ?/sec    1.09    111.4±4.11µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.00    174.5±0.66µs        ? ?/sec    1.00    174.4±1.89µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.00    107.5±1.48µs        ? ?/sec    1.08    115.9±0.79µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.07     37.8±0.15µs        ? ?/sec    1.00     35.3±0.40µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.04    137.0±0.89µs        ? ?/sec    1.00    132.1±2.89µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.07     42.4±0.27µs        ? ?/sec    1.00     39.5±0.19µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.01     84.9±0.37µs        ? ?/sec    1.00     84.2±0.50µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.03    103.8±2.24µs        ? ?/sec    1.00    101.1±1.19µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.01     88.0±0.73µs        ? ?/sec    1.00     86.9±1.03µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.02    111.4±2.69µs        ? ?/sec    1.00    109.3±2.16µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.03    168.9±2.35µs        ? ?/sec    1.00   164.4±12.63µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.02    116.0±2.24µs        ? ?/sec    1.00    113.3±1.11µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.19     26.5±0.38µs        ? ?/sec    1.00     22.2±0.08µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.07   124.8±11.81µs        ? ?/sec    1.00    117.2±3.11µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.17     30.9±0.31µs        ? ?/sec    1.00     26.3±0.09µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.00     85.3±1.09µs        ? ?/sec    1.10     93.8±0.38µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.00    156.8±3.00µs        ? ?/sec    1.00    157.2±2.56µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.00     90.0±0.44µs        ? ?/sec    1.08     97.5±1.89µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.00     18.2±0.78µs        ? ?/sec    1.04     18.9±2.04µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.05    119.8±0.48µs        ? ?/sec    1.00    114.2±1.72µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.02     24.4±0.46µs        ? ?/sec    1.00     24.0±1.99µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.04     81.5±0.41µs        ? ?/sec    1.00     78.3±1.13µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.03    103.2±4.49µs        ? ?/sec    1.00     99.9±1.54µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.03     84.5±0.74µs        ? ?/sec    1.00     81.9±0.86µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.04    108.0±0.70µs        ? ?/sec    1.00    104.0±0.85µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.06    174.7±0.95µs        ? ?/sec    1.00    164.8±1.86µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.07    115.9±1.40µs        ? ?/sec    1.00    108.3±0.37µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.05    151.5±1.08µs        ? ?/sec    1.00    143.8±1.06µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.06    193.4±1.03µs        ? ?/sec    1.00    182.0±1.16µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.06    157.2±1.24µs        ? ?/sec    1.00    148.5±1.05µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.13    100.9±1.60µs        ? ?/sec    1.00     89.5±1.00µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.09    172.9±2.43µs        ? ?/sec    1.00    158.5±1.16µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.13    105.8±1.57µs        ? ?/sec    1.00     93.8±0.68µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.18     46.3±2.63µs        ? ?/sec    1.00     39.1±4.31µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.09    136.6±6.25µs        ? ?/sec    1.00    124.9±1.14µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.35     56.5±3.13µs        ? ?/sec    1.00     41.9±4.03µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.00     82.5±0.89µs        ? ?/sec    1.01     82.9±1.45µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.03    104.1±0.68µs        ? ?/sec    1.00    101.4±0.60µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.00     85.8±0.93µs        ? ?/sec    1.00     85.5±1.53µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.00    110.8±0.69µs        ? ?/sec    1.03    113.7±2.94µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.03    173.6±3.56µs        ? ?/sec    1.00    168.1±0.71µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.00    115.8±0.33µs        ? ?/sec    1.02    117.9±1.08µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.11     36.2±0.12µs        ? ?/sec    1.00     32.6±0.31µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.05    133.5±1.05µs        ? ?/sec    1.00    126.7±2.01µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.06     38.7±0.43µs        ? ?/sec    1.00     36.5±0.16µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.00     94.7±0.63µs        ? ?/sec    1.09    103.5±0.86µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.01    167.4±0.94µs        ? ?/sec    1.00    166.6±4.95µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.00     99.8±0.66µs        ? ?/sec    1.08    107.6±1.39µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.11     30.0±0.30µs        ? ?/sec    1.00     27.2±0.09µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.05    130.5±3.18µs        ? ?/sec    1.00    124.2±1.38µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.09     34.7±0.27µs        ? ?/sec    1.00     31.7±0.39µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.00      7.4±0.04ms        ? ?/sec    1.02      7.5±0.03ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.00     12.9±0.21ms        ? ?/sec    1.01     13.0±0.11ms        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.04    515.0±8.50µs        ? ?/sec    1.00    493.8±4.34µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.04   676.0±12.30µs        ? ?/sec    1.00    648.5±8.64µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.03    510.8±6.02µs        ? ?/sec    1.00    493.9±6.27µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.00   692.6±25.06µs        ? ?/sec    1.03    712.3±3.23µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.01    797.9±5.75µs        ? ?/sec    1.00   790.0±12.93µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.00    694.3±5.08µs        ? ?/sec    1.04    720.6±3.30µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.01   340.8±12.05µs        ? ?/sec    1.00    336.1±3.16µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.09    421.8±1.99µs        ? ?/sec    1.00   387.5±10.26µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.01    344.9±3.72µs        ? ?/sec    1.00    341.8±5.57µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.39    276.2±3.61µs        ? ?/sec    1.00    198.9±3.70µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.37    264.1±7.83µs        ? ?/sec    1.00    193.4±2.22µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.37    279.0±4.04µs        ? ?/sec    1.00    203.5±2.35µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.01   454.1±11.39µs        ? ?/sec    1.00    450.5±6.65µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.16   375.1±43.51µs        ? ?/sec    1.00    322.6±7.97µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.01    463.8±8.70µs        ? ?/sec    1.00    457.0±3.62µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.00     94.4±1.12µs        ? ?/sec    1.05     99.2±0.75µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.00    112.4±0.37µs        ? ?/sec    1.01    113.2±0.47µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.00     96.7±1.52µs        ? ?/sec    1.06    102.1±0.47µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.00    129.2±4.20µs        ? ?/sec    1.04    134.3±0.92µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.01    187.8±0.97µs        ? ?/sec    1.00    185.9±2.13µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.00    133.4±0.62µs        ? ?/sec    1.04    139.4±4.83µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.04     41.8±0.13µs        ? ?/sec    1.00     40.4±0.50µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.04    140.0±1.77µs        ? ?/sec    1.00    134.5±2.05µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.05     46.6±1.03µs        ? ?/sec    1.00     44.5±0.12µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.00    102.2±0.92µs        ? ?/sec    1.10    112.5±3.07µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.00    174.1±2.96µs        ? ?/sec    1.00    174.4±1.27µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.00    107.5±0.90µs        ? ?/sec    1.08    116.0±2.20µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.08     37.9±0.20µs        ? ?/sec    1.00     35.2±0.34µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.05    139.0±2.64µs        ? ?/sec    1.00    132.1±3.16µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.08     42.7±0.16µs        ? ?/sec    1.00     39.4±0.16µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.01     85.1±1.51µs        ? ?/sec    1.00     83.9±0.93µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.03    103.7±1.37µs        ? ?/sec    1.00    100.4±0.90µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.01     87.6±1.27µs        ? ?/sec    1.00     86.8±2.30µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.02    112.5±1.64µs        ? ?/sec    1.00    109.8±1.15µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.04    169.5±3.20µs        ? ?/sec    1.00    163.5±1.89µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.03    117.6±0.85µs        ? ?/sec    1.00    113.8±0.32µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.16     26.9±0.41µs        ? ?/sec    1.00     23.2±0.20µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.07   124.4±10.00µs        ? ?/sec    1.00    116.6±1.32µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.13     31.0±0.48µs        ? ?/sec    1.00     27.4±1.08µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.00     86.9±5.28µs        ? ?/sec    1.07     92.7±0.55µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.00    157.2±1.45µs        ? ?/sec    1.00    157.1±2.71µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.00     90.3±0.64µs        ? ?/sec    1.08     97.6±1.95µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.15     21.2±1.02µs        ? ?/sec    1.00     18.5±1.46µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.05    120.0±0.49µs        ? ?/sec    1.00    114.4±1.23µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.12     26.2±1.32µs        ? ?/sec    1.00     23.5±1.81µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.04     81.4±0.37µs        ? ?/sec    1.00     78.4±0.49µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.03    103.2±0.36µs        ? ?/sec    1.00    100.1±2.44µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.04     84.3±0.98µs        ? ?/sec    1.00     80.7±0.66µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.06    109.8±1.39µs        ? ?/sec    1.00    103.4±2.15µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.07    177.0±2.60µs        ? ?/sec    1.00    166.0±0.76µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.07    116.0±1.93µs        ? ?/sec    1.00    108.2±1.01µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.05    151.3±0.65µs        ? ?/sec    1.00    143.7±0.77µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.06    193.6±3.98µs        ? ?/sec    1.00    182.9±1.23µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.05    156.4±0.99µs        ? ?/sec    1.00    149.3±4.42µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.11    100.7±0.65µs        ? ?/sec    1.00     90.4±5.87µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.09    172.8±0.73µs        ? ?/sec    1.00    158.7±3.31µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.13    105.8±1.31µs        ? ?/sec    1.00     93.9±0.41µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.25     46.2±2.73µs        ? ?/sec    1.00     36.9±4.04µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.10    138.0±2.69µs        ? ?/sec    1.00    125.3±0.64µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.22     55.1±2.76µs        ? ?/sec    1.00     45.0±5.42µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.01     89.9±2.44µs        ? ?/sec    1.00     89.1±0.36µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.03    107.9±1.15µs        ? ?/sec    1.00    104.8±1.33µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.00     92.7±1.03µs        ? ?/sec    1.00     92.4±4.00µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.01    120.5±1.30µs        ? ?/sec    1.00    119.2±0.52µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.04    178.6±3.14µs        ? ?/sec    1.00    172.0±2.36µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.02    125.9±3.14µs        ? ?/sec    1.00    123.5±0.50µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.10     36.1±1.02µs        ? ?/sec    1.00     32.7±0.80µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.04    132.5±2.05µs        ? ?/sec    1.00    127.8±7.29µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.07     40.2±0.23µs        ? ?/sec    1.00     37.5±0.40µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.00     95.2±1.38µs        ? ?/sec    1.09    103.7±0.64µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.00    166.8±2.11µs        ? ?/sec    1.00    166.5±2.13µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.00     99.8±1.54µs        ? ?/sec    1.08    107.7±1.71µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.10     30.1±0.81µs        ? ?/sec    1.00     27.5±0.22µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.04    129.3±0.58µs        ? ?/sec    1.00    124.4±2.40µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.09     34.6±0.28µs        ? ?/sec    1.00     31.7±0.29µs        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing pre_allocate_view_vec (a4f04e7) to 843bee2 diff
BENCH_NAME=arrow_reader_row_filter
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental --bench arrow_reader_row_filter
BENCH_FILTER=
BENCH_BRANCH_NAME=pre_allocate_view_vec
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                main                                   pre_allocate_view_vec
-----                                                                                ----                                   ---------------------
arrow_reader_row_filter/float64 <= 99.0/all_columns/async                            1.01  1726.4±19.78µs        ? ?/sec    1.00  1716.4±18.20µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/all_columns/sync                             1.00  1831.4±17.36µs        ? ?/sec    1.00  1824.9±33.65µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/async                  1.00  1577.5±16.35µs        ? ?/sec    1.00  1573.4±45.85µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/sync                   1.01  1556.2±12.69µs        ? ?/sec    1.00  1546.0±29.59µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/async              1.00  1523.2±11.33µs        ? ?/sec    1.01  1537.9±27.63µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/sync               1.01  1689.9±25.60µs        ? ?/sec    1.00  1672.6±19.86µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/async    1.01  1354.8±12.67µs        ? ?/sec    1.00  1347.2±25.51µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/sync     1.01  1362.5±14.02µs        ? ?/sec    1.00  1354.0±62.31µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/async                             1.00  1722.4±18.68µs        ? ?/sec    1.00  1716.5±15.64µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/sync                              1.00  1831.3±15.52µs        ? ?/sec    1.00  1824.5±17.57µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/async                   1.00   1572.1±8.85µs        ? ?/sec    1.00  1573.3±16.10µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/sync                    1.00  1550.2±14.56µs        ? ?/sec    1.01  1559.8±17.50µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/async                              1.00   901.0±10.68µs        ? ?/sec    1.01   906.0±23.36µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/sync                               1.00    848.7±6.85µs        ? ?/sec    1.01   853.3±14.06µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/async                    1.00   830.5±11.90µs        ? ?/sec    1.00   828.8±12.01µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/sync                     1.00   840.0±11.66µs        ? ?/sec    1.00    841.5±6.46µs        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/async                                 1.00      3.9±0.05ms        ? ?/sec    1.03      4.0±0.14ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/sync                                  1.07      4.0±0.04ms        ? ?/sec    1.00      3.7±0.04ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/async                       1.25      3.8±0.04ms        ? ?/sec    1.00      3.0±0.03ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/sync                        1.28      3.5±0.08ms        ? ?/sec    1.00      2.7±0.02ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/async                                  1.02  1961.4±25.62µs        ? ?/sec    1.00  1916.4±13.28µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/sync                                   1.05      2.0±0.01ms        ? ?/sec    1.00  1957.9±11.19µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/async                        1.05  1786.2±43.21µs        ? ?/sec    1.00  1700.6±13.08µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/sync                         1.06  1797.7±20.80µs        ? ?/sec    1.00   1702.5±9.55µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/async                                 1.01  1256.6±13.69µs        ? ?/sec    1.00  1243.2±15.49µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/sync                                  1.04  1287.4±14.41µs        ? ?/sec    1.00  1243.1±15.56µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/async                       1.03  1143.1±13.50µs        ? ?/sec    1.00  1114.1±21.21µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/sync                        1.02  1152.9±14.83µs        ? ?/sec    1.00  1129.2±14.51µs        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/async                             1.04      3.3±0.08ms        ? ?/sec    1.00      3.1±0.04ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/sync                              1.02      3.5±0.03ms        ? ?/sec    1.00      3.4±0.02ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/async                   1.06      2.8±0.03ms        ? ?/sec    1.00      2.7±0.03ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/sync                    1.07      2.6±0.03ms        ? ?/sec    1.00      2.4±0.01ms        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing pre_allocate_view_vec (a4f04e7) to 843bee2 diff
BENCH_NAME=arrow_reader_clickbench
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental --bench arrow_reader_clickbench
BENCH_FILTER=
BENCH_BRANCH_NAME=pre_allocate_view_vec
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                main                                   pre_allocate_view_vec
-----                                ----                                   ---------------------
arrow_reader_clickbench/async/Q1     1.00      2.3±0.09ms        ? ?/sec    1.00      2.3±0.02ms        ? ?/sec
arrow_reader_clickbench/async/Q10    1.11     13.2±0.30ms        ? ?/sec    1.00     11.9±0.22ms        ? ?/sec
arrow_reader_clickbench/async/Q11    1.08     14.7±0.18ms        ? ?/sec    1.00     13.7±0.23ms        ? ?/sec
arrow_reader_clickbench/async/Q12    1.02     25.8±0.30ms        ? ?/sec    1.00     25.3±0.28ms        ? ?/sec
arrow_reader_clickbench/async/Q13    1.01     31.2±0.60ms        ? ?/sec    1.00     30.9±0.43ms        ? ?/sec
arrow_reader_clickbench/async/Q14    1.02     28.5±0.76ms        ? ?/sec    1.00     28.1±0.26ms        ? ?/sec
arrow_reader_clickbench/async/Q19    1.00      5.3±0.08ms        ? ?/sec    1.02      5.4±0.11ms        ? ?/sec
arrow_reader_clickbench/async/Q20    1.04    114.8±1.83ms        ? ?/sec    1.00    110.7±0.63ms        ? ?/sec
arrow_reader_clickbench/async/Q21    1.04    132.4±0.78ms        ? ?/sec    1.00    127.7±1.36ms        ? ?/sec
arrow_reader_clickbench/async/Q22    1.13    288.5±5.20ms        ? ?/sec    1.00    255.5±6.48ms        ? ?/sec
arrow_reader_clickbench/async/Q23    1.01    407.9±2.34ms        ? ?/sec    1.00    404.5±7.67ms        ? ?/sec
arrow_reader_clickbench/async/Q24    1.00     34.1±0.58ms        ? ?/sec    1.01     34.4±0.39ms        ? ?/sec
arrow_reader_clickbench/async/Q27    1.04    100.7±1.22ms        ? ?/sec    1.00     97.2±0.73ms        ? ?/sec
arrow_reader_clickbench/async/Q28    1.02     99.1±0.52ms        ? ?/sec    1.00     96.8±0.41ms        ? ?/sec
arrow_reader_clickbench/async/Q30    1.01     31.0±0.42ms        ? ?/sec    1.00     30.8±0.33ms        ? ?/sec
arrow_reader_clickbench/async/Q36    1.03    110.3±1.94ms        ? ?/sec    1.00    106.9±0.84ms        ? ?/sec
arrow_reader_clickbench/async/Q37    1.03     85.9±0.87ms        ? ?/sec    1.00     83.8±0.55ms        ? ?/sec
arrow_reader_clickbench/async/Q38    1.01     31.7±0.28ms        ? ?/sec    1.00     31.5±0.30ms        ? ?/sec
arrow_reader_clickbench/async/Q39    1.02     44.9±0.57ms        ? ?/sec    1.00     43.9±0.59ms        ? ?/sec
arrow_reader_clickbench/async/Q40    1.00     25.5±0.30ms        ? ?/sec    1.05     26.9±0.76ms        ? ?/sec
arrow_reader_clickbench/async/Q41    1.00     20.6±0.35ms        ? ?/sec    1.03     21.3±0.53ms        ? ?/sec
arrow_reader_clickbench/async/Q42    1.00      9.9±0.31ms        ? ?/sec    1.02     10.1±0.13ms        ? ?/sec
arrow_reader_clickbench/sync/Q1      1.01      2.1±0.01ms        ? ?/sec    1.00      2.1±0.01ms        ? ?/sec
arrow_reader_clickbench/sync/Q10     1.08     10.2±0.35ms        ? ?/sec    1.00      9.4±0.15ms        ? ?/sec
arrow_reader_clickbench/sync/Q11     1.09     11.9±0.14ms        ? ?/sec    1.00     11.0±0.18ms        ? ?/sec
arrow_reader_clickbench/sync/Q12     1.00     35.4±1.31ms        ? ?/sec    1.04     36.8±0.66ms        ? ?/sec
arrow_reader_clickbench/sync/Q13     1.04     46.2±1.77ms        ? ?/sec    1.00     44.5±0.54ms        ? ?/sec
arrow_reader_clickbench/sync/Q14     1.00     41.4±0.46ms        ? ?/sec    1.00     41.2±0.66ms        ? ?/sec
arrow_reader_clickbench/sync/Q19     1.00      4.3±0.06ms        ? ?/sec    1.02      4.4±0.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q20     1.03    177.7±0.95ms        ? ?/sec    1.00    173.1±1.59ms        ? ?/sec
arrow_reader_clickbench/sync/Q21     1.02    235.8±1.70ms        ? ?/sec    1.00    230.6±1.01ms        ? ?/sec
arrow_reader_clickbench/sync/Q22     1.03    478.9±4.51ms        ? ?/sec    1.00    466.6±4.05ms        ? ?/sec
arrow_reader_clickbench/sync/Q23     1.03   428.3±13.69ms        ? ?/sec    1.00   417.3±16.65ms        ? ?/sec
arrow_reader_clickbench/sync/Q24     1.03     44.6±0.36ms        ? ?/sec    1.00     43.2±0.67ms        ? ?/sec
arrow_reader_clickbench/sync/Q27     1.03    153.9±1.11ms        ? ?/sec    1.00    148.7±1.68ms        ? ?/sec
arrow_reader_clickbench/sync/Q28     1.03    148.8±1.02ms        ? ?/sec    1.00    144.7±1.72ms        ? ?/sec
arrow_reader_clickbench/sync/Q30     1.00     30.8±0.30ms        ? ?/sec    1.01     31.0±0.34ms        ? ?/sec
arrow_reader_clickbench/sync/Q36     1.02    141.7±1.00ms        ? ?/sec    1.00    138.7±1.21ms        ? ?/sec
arrow_reader_clickbench/sync/Q37     1.04     78.7±1.29ms        ? ?/sec    1.00     75.8±0.88ms        ? ?/sec
arrow_reader_clickbench/sync/Q38     1.00     24.4±0.43ms        ? ?/sec    1.01     24.6±0.51ms        ? ?/sec
arrow_reader_clickbench/sync/Q39     1.02     31.8±0.64ms        ? ?/sec    1.00     31.2±0.54ms        ? ?/sec
arrow_reader_clickbench/sync/Q40     1.00     23.5±0.36ms        ? ?/sec    1.03     24.4±0.44ms        ? ?/sec
arrow_reader_clickbench/sync/Q41     1.00     19.0±0.65ms        ? ?/sec    1.03     19.5±0.33ms        ? ?/sec
arrow_reader_clickbench/sync/Q42     1.00      9.2±0.24ms        ? ?/sec    1.01      9.3±0.09ms        ? ?/sec

@alamb
Copy link
Contributor

alamb commented Jan 12, 2026

run benchmark arrow_reader arrow_reader_row_filter arrow_reader_clickbench

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing pre_allocate_view_vec (a4f04e7) to 843bee2 diff
BENCH_NAME=arrow_reader
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental --bench arrow_reader
BENCH_FILTER=
BENCH_BRANCH_NAME=pre_allocate_view_vec
Results will be posted here when complete

@alamb
Copy link
Contributor

alamb commented Jan 12, 2026

Rerunning the benchmarks to see if we can see a consistent pattern

@lyang24 lyang24 force-pushed the pre_allocate_view_vec branch 3 times, most recently from 9cffc3c to bb9eb2e Compare January 12, 2026 02:13
@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                                      main                                   pre_allocate_view_vec
-----                                                                                                      ----                                   ---------------------
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.00   1207.1±3.27µs        ? ?/sec    1.05  1269.8±10.99µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.00   1247.6±7.27µs        ? ?/sec    1.03   1279.5±9.68µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.00   1217.5±5.21µs        ? ?/sec    1.05  1275.9±11.24µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.02    476.5±6.57µs        ? ?/sec    1.00    465.0±7.69µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.04    663.9±7.07µs        ? ?/sec    1.00    638.6±4.72µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.04    492.3±3.48µs        ? ?/sec    1.00    472.0±4.91µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.00    508.2±4.56µs        ? ?/sec    1.10    560.0±6.14µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.00    727.6±7.90µs        ? ?/sec    1.00    726.4±9.70µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.00    520.8±5.22µs        ? ?/sec    1.09    569.0±5.75µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.05    228.4±4.23µs        ? ?/sec    1.00    218.3±1.29µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.18    241.2±1.46µs        ? ?/sec    1.00   203.7±17.08µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.06    235.3±5.09µs        ? ?/sec    1.00    223.0±1.64µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.03    295.0±9.27µs        ? ?/sec    1.00    287.4±5.35µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.05    285.1±3.15µs        ? ?/sec    1.00    272.5±3.19µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.23    294.0±5.66µs        ? ?/sec    1.00    238.5±9.79µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.03    301.8±5.77µs        ? ?/sec    1.00    293.1±2.43µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.00   1117.8±4.53µs        ? ?/sec    1.00   1116.7±6.96µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.00   975.3±12.33µs        ? ?/sec    1.00   974.0±11.37µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.00   1126.6±4.89µs        ? ?/sec    1.00  1125.6±13.37µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.01    452.2±6.10µs        ? ?/sec    1.00    446.3±7.01µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.00    635.9±3.30µs        ? ?/sec    1.00    636.3±2.91µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.03   464.5±32.89µs        ? ?/sec    1.00    453.0±9.59µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.00    160.6±1.08µs        ? ?/sec    1.26    202.8±2.71µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.00    275.2±1.19µs        ? ?/sec    1.19    328.9±5.45µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.00    166.1±2.37µs        ? ?/sec    1.25    207.1±1.89µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.00     75.9±0.46µs        ? ?/sec    1.56    118.1±0.43µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.00    232.7±2.34µs        ? ?/sec    1.23    285.9±3.00µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.00     80.8±0.46µs        ? ?/sec    1.53    123.7±0.34µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.00    736.8±7.21µs        ? ?/sec    1.00    737.5±6.54µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.01   593.7±12.71µs        ? ?/sec    1.00    586.7±2.52µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.01   746.6±12.19µs        ? ?/sec    1.00    742.9±2.58µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.00     63.6±6.65µs        ? ?/sec    1.06     67.3±5.25µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.01    254.7±4.24µs        ? ?/sec    1.00    251.0±3.58µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.00     70.3±4.54µs        ? ?/sec    1.01     71.2±5.08µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.00     94.4±0.95µs        ? ?/sec    1.01     95.2±7.27µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.00    209.9±1.54µs        ? ?/sec    1.04    218.1±8.70µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.01     99.4±0.40µs        ? ?/sec    1.00     98.7±0.49µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.00      9.1±0.19µs        ? ?/sec    1.01      9.1±0.22µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.00    166.4±1.37µs        ? ?/sec    1.05    174.4±2.05µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.04     14.4±0.52µs        ? ?/sec    1.00     13.8±0.13µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.00    184.8±5.99µs        ? ?/sec    1.00    184.3±3.74µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.00    329.6±1.64µs        ? ?/sec    1.02    336.9±2.40µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.01    190.6±7.80µs        ? ?/sec    1.00    189.0±0.91µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.00     13.3±0.43µs        ? ?/sec    1.02     13.5±0.37µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.00    246.9±4.16µs        ? ?/sec    1.03    253.2±4.93µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.00     19.6±0.39µs        ? ?/sec    1.00     19.7±0.47µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.00    365.6±5.74µs        ? ?/sec    1.00    366.5±2.76µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.01    390.8±4.81µs        ? ?/sec    1.00    385.9±6.45µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.00    372.6±2.48µs        ? ?/sec    1.00    372.5±5.58µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.00     25.3±1.55µs        ? ?/sec    1.10     28.0±1.88µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.02    220.2±1.50µs        ? ?/sec    1.00    215.5±1.09µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.00     31.9±0.57µs        ? ?/sec    1.04     33.2±0.57µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.01    110.5±0.38µs        ? ?/sec    1.00    110.0±4.46µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.02    130.3±0.97µs        ? ?/sec    1.00    127.2±2.20µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.01    114.4±2.22µs        ? ?/sec    1.00    113.8±1.86µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.02    161.8±2.79µs        ? ?/sec    1.00    158.7±1.09µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.03    221.7±1.54µs        ? ?/sec    1.00    215.1±3.16µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.02    167.0±0.50µs        ? ?/sec    1.00    163.0±1.08µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.04     76.9±0.68µs        ? ?/sec    1.00     74.3±0.23µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.01    178.8±2.67µs        ? ?/sec    1.00   177.3±22.36µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.05     82.1±0.76µs        ? ?/sec    1.00     78.1±0.61µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.11    146.0±2.80µs        ? ?/sec    1.00    132.1±1.25µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.06    216.0±3.86µs        ? ?/sec    1.00    204.2±0.84µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.09    149.6±1.87µs        ? ?/sec    1.00    137.4±1.89µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.09     75.6±0.39µs        ? ?/sec    1.00     69.1±0.53µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.05    176.2±0.79µs        ? ?/sec    1.00    168.6±0.66µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.05     79.0±0.54µs        ? ?/sec    1.00     74.9±1.18µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.03    109.9±0.90µs        ? ?/sec    1.00    106.2±0.58µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.03    130.4±3.64µs        ? ?/sec    1.00    126.5±1.92µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.02    111.2±1.14µs        ? ?/sec    1.00    109.2±1.15µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.04    163.1±1.10µs        ? ?/sec    1.00    157.4±2.51µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.06    231.3±2.72µs        ? ?/sec    1.00    218.4±2.35µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.04    168.5±1.42µs        ? ?/sec    1.00    162.4±1.65µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.02    201.8±0.70µs        ? ?/sec    1.00    197.6±0.83µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.04    244.9±1.26µs        ? ?/sec    1.00    234.8±1.38µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.02    208.5±1.34µs        ? ?/sec    1.00    203.5±1.43µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00    143.7±2.65µs        ? ?/sec    1.03    147.4±0.69µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.03    221.5±0.78µs        ? ?/sec    1.00    214.2±1.47µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    150.1±1.89µs        ? ?/sec    1.02    153.2±1.61µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.21    103.0±0.72µs        ? ?/sec    1.00     85.0±0.58µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.10   196.8±12.84µs        ? ?/sec    1.00    178.4±2.20µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.28    116.2±1.99µs        ? ?/sec    1.00     90.8±1.60µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.00     78.0±0.47µs        ? ?/sec    1.00     78.1±1.14µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.02    103.5±2.41µs        ? ?/sec    1.00    101.9±3.18µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.00     80.6±0.45µs        ? ?/sec    1.00     80.7±0.97µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.02    108.9±0.99µs        ? ?/sec    1.00    106.9±1.80µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.02    175.1±1.89µs        ? ?/sec    1.00    170.8±4.01µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.02    113.4±2.06µs        ? ?/sec    1.00    111.1±1.12µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.06     43.8±0.47µs        ? ?/sec    1.00     41.4±0.27µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.05    142.7±0.59µs        ? ?/sec    1.00    136.0±1.80µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.05     47.8±0.12µs        ? ?/sec    1.00     45.5±0.33µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.11    111.0±1.85µs        ? ?/sec    1.00     99.7±0.30µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.05    178.8±2.61µs        ? ?/sec    1.00    170.4±2.92µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.11    115.3±1.93µs        ? ?/sec    1.00    104.0±0.94µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.08     38.2±0.18µs        ? ?/sec    1.00     35.2±0.12µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.03    138.4±0.65µs        ? ?/sec    1.00    134.3±4.28µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.07     42.3±0.47µs        ? ?/sec    1.00     39.5±0.20µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.00     85.0±0.68µs        ? ?/sec    1.01     85.6±1.14µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.02    103.4±1.97µs        ? ?/sec    1.00    101.1±1.71µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.02     87.8±0.95µs        ? ?/sec    1.00     86.0±0.63µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.03    110.7±1.09µs        ? ?/sec    1.00    107.3±1.55µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.03    169.3±5.62µs        ? ?/sec    1.00    163.7±1.02µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.03    115.1±0.91µs        ? ?/sec    1.00    112.1±3.03µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.18     26.3±0.37µs        ? ?/sec    1.00     22.3±0.15µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.04    123.8±1.40µs        ? ?/sec    1.00    119.0±1.49µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.16     30.6±0.65µs        ? ?/sec    1.00     26.5±0.13µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.14     93.5±0.33µs        ? ?/sec    1.00     81.9±0.85µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.06    162.4±2.73µs        ? ?/sec    1.00    153.4±3.67µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.14     98.6±1.16µs        ? ?/sec    1.00     86.3±0.73µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.00     18.3±0.84µs        ? ?/sec    1.02     18.6±1.60µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.04    121.3±0.59µs        ? ?/sec    1.00    116.3±2.94µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.00     24.3±0.40µs        ? ?/sec    1.00     24.4±2.96µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.02     81.0±1.28µs        ? ?/sec    1.00     79.3±0.66µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.02    101.8±1.03µs        ? ?/sec    1.00     99.5±1.29µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.03     83.9±2.27µs        ? ?/sec    1.00     81.8±0.22µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.04    109.2±1.20µs        ? ?/sec    1.00    104.7±1.57µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.06    174.4±3.01µs        ? ?/sec    1.00    164.0±0.79µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.05    115.5±1.32µs        ? ?/sec    1.00    110.0±0.44µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.04    149.0±0.68µs        ? ?/sec    1.00    143.7±0.43µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.06    191.6±1.69µs        ? ?/sec    1.00    180.1±1.52µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.04    155.0±0.97µs        ? ?/sec    1.00    148.8±1.75µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.00     90.9±0.62µs        ? ?/sec    1.04     94.7±0.46µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.00    159.3±3.43µs        ? ?/sec    1.00    159.4±1.07µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.00     95.1±0.83µs        ? ?/sec    1.04     99.2±2.04µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.16     45.9±3.37µs        ? ?/sec    1.00     39.4±4.78µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.08    133.6±1.69µs        ? ?/sec    1.00    124.1±1.55µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.16     52.3±2.68µs        ? ?/sec    1.00     45.0±4.17µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.01     83.3±2.38µs        ? ?/sec    1.00     82.5±0.32µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.02    104.2±1.06µs        ? ?/sec    1.00    102.2±1.71µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.01     85.5±0.41µs        ? ?/sec    1.00     85.0±0.32µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.00    111.6±0.56µs        ? ?/sec    1.01    113.0±1.19µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.02    174.2±3.48µs        ? ?/sec    1.00    170.1±2.71µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.00    116.2±0.71µs        ? ?/sec    1.01    117.3±1.75µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.12     36.5±2.23µs        ? ?/sec    1.00     32.6±0.16µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.04    133.2±0.57µs        ? ?/sec    1.00    128.4±0.61µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.10     40.0±0.41µs        ? ?/sec    1.00     36.4±0.13µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.13    103.4±1.69µs        ? ?/sec    1.00     91.5±0.64µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.06    171.8±0.87µs        ? ?/sec    1.00    162.3±2.14µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.12    107.8±1.94µs        ? ?/sec    1.00     96.1±0.91µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.11     30.0±0.56µs        ? ?/sec    1.00     27.1±0.27µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.04    130.9±0.82µs        ? ?/sec    1.00    126.0±1.80µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.09     34.4±0.66µs        ? ?/sec    1.00     31.7±0.18µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.00      7.4±0.07ms        ? ?/sec    1.00      7.4±0.03ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.00     12.9±0.15ms        ? ?/sec    1.02     13.1±0.33ms        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.07   499.7±13.70µs        ? ?/sec    1.00    468.4±3.99µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.01   652.3±15.48µs        ? ?/sec    1.00    647.2±8.32µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.03    486.1±5.53µs        ? ?/sec    1.00    473.2±7.20µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.00    678.0±8.80µs        ? ?/sec    1.05    714.2±4.51µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.00    795.7±7.40µs        ? ?/sec    1.00   793.1±10.85µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.00    686.8±5.78µs        ? ?/sec    1.05    722.0±9.01µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.01    334.7±1.51µs        ? ?/sec    1.00    331.2±3.67µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.00    410.5±6.27µs        ? ?/sec    1.01    413.1±6.17µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.00    340.3±2.43µs        ? ?/sec    1.01    343.8±3.66µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.09    240.3±3.01µs        ? ?/sec    1.00    219.9±8.90µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.19    242.0±4.08µs        ? ?/sec    1.00    203.0±1.11µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.05    234.9±3.75µs        ? ?/sec    1.00    223.8±3.34µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.09    478.9±3.77µs        ? ?/sec    1.00    440.0±2.31µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.21    382.0±3.93µs        ? ?/sec    1.00    315.9±1.28µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.10    490.9±8.62µs        ? ?/sec    1.00    446.5±2.86µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.00     93.3±1.22µs        ? ?/sec    1.00     93.4±1.65µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.02    111.7±0.45µs        ? ?/sec    1.00    109.7±0.75µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.00     96.0±1.80µs        ? ?/sec    1.00     95.6±0.30µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.02    128.8±3.06µs        ? ?/sec    1.00    126.2±1.18µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.03    186.4±1.19µs        ? ?/sec    1.00    181.2±1.69µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.01    132.7±0.83µs        ? ?/sec    1.00    131.4±5.20µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.08     43.6±0.17µs        ? ?/sec    1.00     40.4±0.13µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.04    141.1±0.84µs        ? ?/sec    1.00    136.2±0.67µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.07     47.8±0.77µs        ? ?/sec    1.00     44.6±0.35µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.12    110.7±1.11µs        ? ?/sec    1.00     99.1±0.74µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.06    179.6±3.33µs        ? ?/sec    1.00    170.1±1.04µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.11    115.3±1.39µs        ? ?/sec    1.00    103.8±1.65µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.07     37.8±0.14µs        ? ?/sec    1.00     35.2±0.33µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.03    139.1±1.09µs        ? ?/sec    1.00    134.5±3.32µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.07     42.4±0.37µs        ? ?/sec    1.00     39.5±0.39µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.01     84.6±0.38µs        ? ?/sec    1.00     83.4±2.25µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.03    102.9±0.93µs        ? ?/sec    1.00    100.1±0.36µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.02     87.3±0.26µs        ? ?/sec    1.00     85.7±0.89µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.02    111.7±0.84µs        ? ?/sec    1.00    109.7±9.25µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.03    168.4±2.65µs        ? ?/sec    1.00    163.1±2.66µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.02    115.1±0.49µs        ? ?/sec    1.00    112.4±2.40µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.22     26.2±0.31µs        ? ?/sec    1.00     21.5±0.27µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.04    124.3±2.97µs        ? ?/sec    1.00    119.4±1.23µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.18     30.5±0.27µs        ? ?/sec    1.00     25.9±0.09µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.15     94.1±0.89µs        ? ?/sec    1.00     81.9±1.41µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.06    162.0±2.15µs        ? ?/sec    1.00    153.0±2.96µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.14     98.5±1.41µs        ? ?/sec    1.00     86.7±2.82µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.12     21.7±1.35µs        ? ?/sec    1.00     19.4±1.63µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.05    121.3±1.32µs        ? ?/sec    1.00    115.6±0.84µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.08     25.7±1.21µs        ? ?/sec    1.00     23.8±2.13µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.02     81.3±0.52µs        ? ?/sec    1.00     79.3±0.38µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.03    102.6±1.25µs        ? ?/sec    1.00     99.6±0.53µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.02     84.3±2.09µs        ? ?/sec    1.00     82.6±3.77µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.05    110.0±1.19µs        ? ?/sec    1.00    104.6±0.39µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.05    174.3±3.41µs        ? ?/sec    1.00    166.0±1.51µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.05    115.7±1.80µs        ? ?/sec    1.00    110.2±1.04µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.03    148.3±0.86µs        ? ?/sec    1.00    143.6±1.15µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.06    191.6±2.67µs        ? ?/sec    1.00    181.5±5.64µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.04    154.0±1.15µs        ? ?/sec    1.00    148.4±1.06µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.00     90.6±2.51µs        ? ?/sec    1.05     94.7±0.72µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.00    158.9±5.65µs        ? ?/sec    1.00    159.4±0.92µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.00     95.3±0.68µs        ? ?/sec    1.04     99.2±0.54µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.14     46.7±3.12µs        ? ?/sec    1.00     40.9±4.81µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.08    134.6±1.07µs        ? ?/sec    1.00    124.2±5.16µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.11     51.4±2.69µs        ? ?/sec    1.00     46.5±5.39µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.01     89.5±0.68µs        ? ?/sec    1.00     88.9±2.81µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.02    107.2±1.51µs        ? ?/sec    1.00    105.4±1.03µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.01     92.1±0.79µs        ? ?/sec    1.00     91.1±0.26µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.02    119.7±0.38µs        ? ?/sec    1.00    117.5±1.30µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.03    177.8±0.85µs        ? ?/sec    1.00    172.4±0.62µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.02    124.3±1.05µs        ? ?/sec    1.00    122.3±2.79µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.10     35.8±0.21µs        ? ?/sec    1.00     32.7±0.75µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.04    134.0±4.40µs        ? ?/sec    1.00    128.5±1.88µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.07     40.0±0.50µs        ? ?/sec    1.00     37.4±0.18µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.12    102.9±0.57µs        ? ?/sec    1.00     91.8±1.13µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.06    172.0±1.12µs        ? ?/sec    1.00    162.4±0.85µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.12    107.9±1.07µs        ? ?/sec    1.00     96.3±0.68µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.10     30.0±0.29µs        ? ?/sec    1.00     27.4±0.34µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.04    131.3±4.21µs        ? ?/sec    1.00    126.6±6.72µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.08     34.4±0.41µs        ? ?/sec    1.00     31.7±0.36µs        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing pre_allocate_view_vec (bb9eb2e) to 843bee2 diff
BENCH_NAME=arrow_reader_row_filter
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental --bench arrow_reader_row_filter
BENCH_FILTER=
BENCH_BRANCH_NAME=pre_allocate_view_vec
Results will be posted here when complete

use half::f16;
use num_bigint::BigInt;
use num_traits::FromPrimitive;
use parquet::arrow::arrow_reader::DEFAULT_BATCH_SIZE;
Copy link
Contributor Author

Choose a reason for hiding this comment

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

note: I made the bench using 1024 default batch size

@lyang24 lyang24 force-pushed the pre_allocate_view_vec branch from bb9eb2e to f916120 Compare January 12, 2026 02:27
@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                main                                   pre_allocate_view_vec
-----                                                                                ----                                   ---------------------
arrow_reader_row_filter/float64 <= 99.0/all_columns/async                            1.02  1726.6±10.64µs        ? ?/sec    1.00  1699.9±11.00µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/all_columns/sync                             1.02  1870.9±21.21µs        ? ?/sec    1.00  1829.5±15.68µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/async                  1.02  1587.8±10.44µs        ? ?/sec    1.00  1554.3±10.38µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/sync                   1.02  1574.4±12.36µs        ? ?/sec    1.00  1545.6±18.56µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/async              1.00  1538.3±13.64µs        ? ?/sec    1.00  1533.0±22.76µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/sync               1.01  1690.5±15.12µs        ? ?/sec    1.00  1674.7±23.27µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/async    1.00  1348.0±11.78µs        ? ?/sec    1.00  1346.2±29.71µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/sync     1.00   1349.6±7.73µs        ? ?/sec    1.01  1357.8±34.67µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/async                             1.01  1717.6±13.94µs        ? ?/sec    1.00  1708.0±12.12µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/sync                              1.01  1839.8±11.02µs        ? ?/sec    1.00  1813.1±17.40µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/async                   1.01  1585.4±64.94µs        ? ?/sec    1.00  1570.8±37.97µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/sync                    1.01   1565.0±6.95µs        ? ?/sec    1.00  1543.2±16.51µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/async                              1.00    925.9±7.62µs        ? ?/sec    1.00   928.2±10.25µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/sync                               1.00    872.5±9.85µs        ? ?/sec    1.01    878.2±9.62µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/async                    1.00   847.9±10.99µs        ? ?/sec    1.01   855.7±13.81µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/sync                     1.00    858.4±7.49µs        ? ?/sec    1.01    863.6±4.96µs        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/async                                 1.00      2.8±0.04ms        ? ?/sec    1.42      3.9±0.04ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/sync                                  1.00      3.6±0.05ms        ? ?/sec    1.02      3.7±0.04ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/async                       1.00      2.6±0.02ms        ? ?/sec    1.31      3.5±0.08ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/sync                        1.00      2.4±0.02ms        ? ?/sec    1.35      3.2±0.03ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/async                                  1.04      2.0±0.02ms        ? ?/sec    1.00  1951.6±24.01µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/sync                                   1.03      2.1±0.02ms        ? ?/sec    1.00      2.0±0.03ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/async                        1.04  1832.8±20.22µs        ? ?/sec    1.00  1759.7±24.78µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/sync                         1.06  1854.7±51.17µs        ? ?/sec    1.00  1753.1±11.62µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/async                                 1.02  1270.8±14.38µs        ? ?/sec    1.00  1244.3±12.19µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/sync                                  1.02  1268.7±11.52µs        ? ?/sec    1.00  1246.4±16.70µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/async                       1.01  1148.9±38.53µs        ? ?/sec    1.00  1134.7±12.38µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/sync                        1.00  1147.8±16.02µs        ? ?/sec    1.00  1142.2±20.13µs        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/async                             1.03      3.3±0.03ms        ? ?/sec    1.00      3.2±0.04ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/sync                              1.01      3.6±0.04ms        ? ?/sec    1.00      3.6±0.09ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/async                   1.02      2.8±0.03ms        ? ?/sec    1.00      2.7±0.06ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/sync                    1.02      2.5±0.02ms        ? ?/sec    1.00      2.5±0.03ms        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing pre_allocate_view_vec (f916120) to 843bee2 diff
BENCH_NAME=arrow_reader_clickbench
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental --bench arrow_reader_clickbench
BENCH_FILTER=
BENCH_BRANCH_NAME=pre_allocate_view_vec
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                main                                   pre_allocate_view_vec
-----                                ----                                   ---------------------
arrow_reader_clickbench/async/Q1     1.00      2.3±0.02ms        ? ?/sec    1.02      2.4±0.03ms        ? ?/sec
arrow_reader_clickbench/async/Q10    1.03     12.7±0.30ms        ? ?/sec    1.00     12.3±0.34ms        ? ?/sec
arrow_reader_clickbench/async/Q11    1.02     14.4±0.25ms        ? ?/sec    1.00     14.1±0.38ms        ? ?/sec
arrow_reader_clickbench/async/Q12    1.00     25.6±0.24ms        ? ?/sec    1.03     26.2±0.52ms        ? ?/sec
arrow_reader_clickbench/async/Q13    1.00     30.6±0.36ms        ? ?/sec    1.03     31.4±0.48ms        ? ?/sec
arrow_reader_clickbench/async/Q14    1.00     28.2±0.25ms        ? ?/sec    1.03     29.0±1.00ms        ? ?/sec
arrow_reader_clickbench/async/Q19    1.00      5.4±0.12ms        ? ?/sec    1.03      5.6±0.09ms        ? ?/sec
arrow_reader_clickbench/async/Q20    1.18    130.2±1.59ms        ? ?/sec    1.00    110.7±0.82ms        ? ?/sec
arrow_reader_clickbench/async/Q21    1.29    165.5±0.99ms        ? ?/sec    1.00    128.6±0.93ms        ? ?/sec
arrow_reader_clickbench/async/Q22    1.24   318.7±11.80ms        ? ?/sec    1.00    257.3±6.26ms        ? ?/sec
arrow_reader_clickbench/async/Q23    1.00    408.5±2.86ms        ? ?/sec    1.00    410.2±4.39ms        ? ?/sec
arrow_reader_clickbench/async/Q24    1.00     34.0±0.36ms        ? ?/sec    1.04     35.5±0.24ms        ? ?/sec
arrow_reader_clickbench/async/Q27    1.03    101.5±0.88ms        ? ?/sec    1.00     98.4±0.77ms        ? ?/sec
arrow_reader_clickbench/async/Q28    1.02     99.0±0.96ms        ? ?/sec    1.00     97.5±0.38ms        ? ?/sec
arrow_reader_clickbench/async/Q30    1.00     30.6±0.66ms        ? ?/sec    1.04     31.9±0.25ms        ? ?/sec
arrow_reader_clickbench/async/Q36    1.02    109.8±1.06ms        ? ?/sec    1.00    108.0±0.85ms        ? ?/sec
arrow_reader_clickbench/async/Q37    1.02     85.9±1.66ms        ? ?/sec    1.00     83.9±0.56ms        ? ?/sec
arrow_reader_clickbench/async/Q38    1.00     31.6±0.27ms        ? ?/sec    1.00     31.6±0.55ms        ? ?/sec
arrow_reader_clickbench/async/Q39    1.01     44.7±0.25ms        ? ?/sec    1.00     44.3±0.53ms        ? ?/sec
arrow_reader_clickbench/async/Q40    1.00     25.7±0.39ms        ? ?/sec    1.06     27.3±1.55ms        ? ?/sec
arrow_reader_clickbench/async/Q41    1.00     20.5±0.29ms        ? ?/sec    1.04     21.3±0.25ms        ? ?/sec
arrow_reader_clickbench/async/Q42    1.00     10.0±0.08ms        ? ?/sec    1.01     10.1±0.15ms        ? ?/sec
arrow_reader_clickbench/sync/Q1      1.00      2.1±0.04ms        ? ?/sec    1.00      2.1±0.05ms        ? ?/sec
arrow_reader_clickbench/sync/Q10     1.02      9.7±0.05ms        ? ?/sec    1.00      9.5±0.10ms        ? ?/sec
arrow_reader_clickbench/sync/Q11     1.03     11.3±0.08ms        ? ?/sec    1.00     10.9±0.12ms        ? ?/sec
arrow_reader_clickbench/sync/Q12     1.00     35.9±1.60ms        ? ?/sec    1.03     36.9±0.33ms        ? ?/sec
arrow_reader_clickbench/sync/Q13     1.00     37.4±0.45ms        ? ?/sec    1.21     45.1±0.73ms        ? ?/sec
arrow_reader_clickbench/sync/Q14     1.00     41.2±0.48ms        ? ?/sec    1.03     42.7±0.94ms        ? ?/sec
arrow_reader_clickbench/sync/Q19     1.01      4.4±0.07ms        ? ?/sec    1.00      4.4±0.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q20     1.03    178.3±2.26ms        ? ?/sec    1.00    173.9±1.36ms        ? ?/sec
arrow_reader_clickbench/sync/Q21     1.02    235.4±1.89ms        ? ?/sec    1.00    231.1±1.92ms        ? ?/sec
arrow_reader_clickbench/sync/Q22     1.03    476.7±3.72ms        ? ?/sec    1.00    464.5±4.13ms        ? ?/sec
arrow_reader_clickbench/sync/Q23     1.08   444.8±13.12ms        ? ?/sec    1.00    410.7±2.86ms        ? ?/sec
arrow_reader_clickbench/sync/Q24     1.00     43.5±0.54ms        ? ?/sec    1.00     43.4±0.52ms        ? ?/sec
arrow_reader_clickbench/sync/Q27     1.03    155.3±1.90ms        ? ?/sec    1.00    150.8±1.57ms        ? ?/sec
arrow_reader_clickbench/sync/Q28     1.02    149.5±0.93ms        ? ?/sec    1.00    147.3±1.47ms        ? ?/sec
arrow_reader_clickbench/sync/Q30     1.00     30.8±0.45ms        ? ?/sec    1.02     31.4±0.55ms        ? ?/sec
arrow_reader_clickbench/sync/Q36     1.02    142.9±1.36ms        ? ?/sec    1.00    140.2±1.25ms        ? ?/sec
arrow_reader_clickbench/sync/Q37     1.02     77.8±0.66ms        ? ?/sec    1.00     76.3±0.52ms        ? ?/sec
arrow_reader_clickbench/sync/Q38     1.00     24.3±0.25ms        ? ?/sec    1.02     24.7±0.32ms        ? ?/sec
arrow_reader_clickbench/sync/Q39     1.00     31.7±0.59ms        ? ?/sec    1.00     31.7±0.28ms        ? ?/sec
arrow_reader_clickbench/sync/Q40     1.00     23.9±0.23ms        ? ?/sec    1.01     24.0±0.25ms        ? ?/sec
arrow_reader_clickbench/sync/Q41     1.00     19.2±0.16ms        ? ?/sec    1.01     19.4±0.27ms        ? ?/sec
arrow_reader_clickbench/sync/Q42     1.00      9.2±0.06ms        ? ?/sec    1.02      9.3±0.10ms        ? ?/sec

…er.Ensure internal buffers to be pre-allocated.

Api change - making batch size required for ArrayReader and buffers.
@lyang24 lyang24 force-pushed the pre_allocate_view_vec branch from f916120 to 49b3244 Compare January 12, 2026 07:57
@lyang24
Copy link
Contributor Author

lyang24 commented Jan 12, 2026

its looks like its doing well with large scan (full table scan) querys

arrow_reader_clickbench/async/Q20    1.18    130.2±1.59ms        ? ?/sec    1.00    110.7±0.82ms        ? ?/sec
arrow_reader_clickbench/async/Q21    1.29    165.5±0.99ms        ? ?/sec    1.00    128.6±0.93ms        ? ?/sec
arrow_reader_clickbench/async/Q22    1.24   318.7±11.80ms        ? ?/sec    1.00    257.3±6.26ms        ? ?/sec

some regressions with high selectivity

arrow_reader_row_filter/int64 > 90/exclude_filter_column/async                       1.00      2.6±0.02ms        ? ?/sec    1.31      3.5±0.08ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/sync                        1.00      2.4±0.02ms        ? ?/sec    1.35      3.2±0.03ms        ? ?/sec

regression with - i am guessing preallocate large blocks messes up cpu cache?

arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.00     75.9±0.46µs        ? ?/sec    1.56    118.1±0.43µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.00    232.7±2.34µs        ? ?/sec    1.23    285.9±3.00µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.00     80.8±0.46µs        ? ?/sec    1.53    123.7±0.34µs        ? ?/sec

maybe we need to do this conditionally - do not preallocate for Plain numeric (Float16, Int32, Float64) types or even better skip preallocate on high selectivity filters

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.

[Parquet] Reduce reallocations when reading StringView in parquet

3 participants