Skip to content

[Parquet] perf: preallocate capacity for ArrayReaderBuilder#9093

Open
lyang24 wants to merge 4 commits intoapache:mainfrom
lyang24:pre_allocate_view_vec
Open

[Parquet] perf: preallocate capacity for ArrayReaderBuilder#9093
lyang24 wants to merge 4 commits intoapache:mainfrom
lyang24:pre_allocate_view_vec

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?

  • add with_capacity method to ValuesBuffer trait, and remove defaults to enforce the capacity hint is required for ArrayReaderBuilder.

  • The capacity hint will be passed down to GenericRecordReader to preallocate the buffer.

Are there any user-facing changes?

yes ArrayReaders needs an extra capacity variable to indicate the preferred batch size and we will provision buffer with this capacity.

@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

@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 (49b3244) 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.02  1737.5±17.40µs        ? ?/sec    1.00  1702.0±26.54µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/all_columns/sync                             1.01  1849.8±30.29µs        ? ?/sec    1.00  1823.0±37.47µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/async                  1.01  1582.0±49.28µs        ? ?/sec    1.00  1567.7±12.55µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/sync                   1.01  1569.3±26.70µs        ? ?/sec    1.00  1546.2±20.59µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/async              1.00  1524.6±13.39µs        ? ?/sec    1.00  1523.0±27.28µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/sync               1.00  1688.2±14.55µs        ? ?/sec    1.00  1691.1±17.44µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/async    1.02  1361.8±33.80µs        ? ?/sec    1.00  1330.2±16.68µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/sync     1.02  1364.0±19.49µs        ? ?/sec    1.00  1337.9±13.56µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/async                             1.00  1717.9±14.07µs        ? ?/sec    1.00  1712.8±32.79µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/sync                              1.02  1843.3±23.05µs        ? ?/sec    1.00  1811.6±34.96µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/async                   1.02  1584.3±14.23µs        ? ?/sec    1.00   1559.0±7.75µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/sync                    1.02  1564.6±20.15µs        ? ?/sec    1.00   1531.6±8.54µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/async                              1.01   927.4±10.66µs        ? ?/sec    1.00    915.8±9.00µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/sync                               1.01    867.0±8.98µs        ? ?/sec    1.00    855.4±7.33µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/async                    1.02   856.7±13.73µs        ? ?/sec    1.00   840.3±14.42µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/sync                     1.01   859.0±11.75µs        ? ?/sec    1.00   850.4±11.14µs        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/async                                 1.00      2.8±0.03ms        ? ?/sec    1.39      3.9±0.11ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/sync                                  1.01      3.7±0.06ms        ? ?/sec    1.00      3.7±0.05ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/async                       1.00      2.7±0.05ms        ? ?/sec    1.29      3.5±0.05ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/sync                        1.00      2.4±0.06ms        ? ?/sec    1.35      3.2±0.03ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/async                                  1.06      2.0±0.03ms        ? ?/sec    1.00  1910.2±32.18µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/sync                                   1.06      2.1±0.02ms        ? ?/sec    1.00  1991.4±26.82µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/async                        1.07  1845.9±22.74µs        ? ?/sec    1.00  1727.8±17.42µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/sync                         1.07  1854.8±60.45µs        ? ?/sec    1.00  1732.5±14.46µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/async                                 1.02  1251.6±13.91µs        ? ?/sec    1.00  1224.0±10.55µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/sync                                  1.02  1278.2±18.78µs        ? ?/sec    1.00  1251.1±22.10µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/async                       1.03  1147.0±15.04µs        ? ?/sec    1.00  1115.2±15.71µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/sync                        1.02  1150.0±12.72µs        ? ?/sec    1.00   1124.9±8.19µs        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/async                             1.05      3.4±0.10ms        ? ?/sec    1.00      3.3±0.09ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/sync                              1.05      3.8±0.04ms        ? ?/sec    1.00      3.6±0.08ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/async                   1.04      2.8±0.09ms        ? ?/sec    1.00      2.7±0.03ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/sync                    1.05      2.6±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 (49b3244) 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.04ms        ? ?/sec    1.02      2.4±0.04ms        ? ?/sec
arrow_reader_clickbench/async/Q10    1.05     13.4±0.39ms        ? ?/sec    1.00     12.7±0.37ms        ? ?/sec
arrow_reader_clickbench/async/Q11    1.06     15.4±0.40ms        ? ?/sec    1.00     14.5±0.27ms        ? ?/sec
arrow_reader_clickbench/async/Q12    1.00     26.0±0.39ms        ? ?/sec    1.01     26.3±0.30ms        ? ?/sec
arrow_reader_clickbench/async/Q13    1.00     31.1±0.33ms        ? ?/sec    1.02     31.6±0.38ms        ? ?/sec
arrow_reader_clickbench/async/Q14    1.00     28.7±0.33ms        ? ?/sec    1.01     28.9±0.55ms        ? ?/sec
arrow_reader_clickbench/async/Q19    1.00      5.5±0.12ms        ? ?/sec    1.02      5.6±0.17ms        ? ?/sec
arrow_reader_clickbench/async/Q20    1.16    132.4±2.18ms        ? ?/sec    1.00    114.4±1.28ms        ? ?/sec
arrow_reader_clickbench/async/Q21    1.28    168.3±2.45ms        ? ?/sec    1.00    131.8±1.29ms        ? ?/sec
arrow_reader_clickbench/async/Q22    1.13   302.6±39.26ms        ? ?/sec    1.00    266.8±6.49ms        ? ?/sec
arrow_reader_clickbench/async/Q23    1.00    410.7±3.57ms        ? ?/sec    1.01    414.0±4.52ms        ? ?/sec
arrow_reader_clickbench/async/Q24    1.00     34.3±0.45ms        ? ?/sec    1.03     35.2±0.43ms        ? ?/sec
arrow_reader_clickbench/async/Q27    1.00    100.9±1.05ms        ? ?/sec    1.00    100.5±0.63ms        ? ?/sec
arrow_reader_clickbench/async/Q28    1.00     99.1±0.59ms        ? ?/sec    1.00     99.4±1.33ms        ? ?/sec
arrow_reader_clickbench/async/Q30    1.00     31.5±0.53ms        ? ?/sec    1.03     32.5±0.58ms        ? ?/sec
arrow_reader_clickbench/async/Q36    1.00    110.0±1.13ms        ? ?/sec    1.00    110.6±1.04ms        ? ?/sec
arrow_reader_clickbench/async/Q37    1.01     87.1±2.63ms        ? ?/sec    1.00     86.3±1.22ms        ? ?/sec
arrow_reader_clickbench/async/Q38    1.00     31.7±0.22ms        ? ?/sec    1.01     31.9±0.23ms        ? ?/sec
arrow_reader_clickbench/async/Q39    1.00     45.3±1.04ms        ? ?/sec    1.00     45.5±0.54ms        ? ?/sec
arrow_reader_clickbench/async/Q40    1.00     26.8±0.55ms        ? ?/sec    1.03     27.6±0.49ms        ? ?/sec
arrow_reader_clickbench/async/Q41    1.00     21.4±0.28ms        ? ?/sec    1.02     21.8±0.35ms        ? ?/sec
arrow_reader_clickbench/async/Q42    1.00     10.2±0.09ms        ? ?/sec    1.02     10.4±0.12ms        ? ?/sec
arrow_reader_clickbench/sync/Q1      1.00      2.1±0.02ms        ? ?/sec    1.00      2.1±0.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q10     1.03      9.8±0.08ms        ? ?/sec    1.00      9.6±0.26ms        ? ?/sec
arrow_reader_clickbench/sync/Q11     1.04     11.6±0.29ms        ? ?/sec    1.00     11.1±0.32ms        ? ?/sec
arrow_reader_clickbench/sync/Q12     1.00     36.8±1.68ms        ? ?/sec    1.04     38.4±0.72ms        ? ?/sec
arrow_reader_clickbench/sync/Q13     1.00     38.8±0.81ms        ? ?/sec    1.20     46.5±0.61ms        ? ?/sec
arrow_reader_clickbench/sync/Q14     1.00     42.4±0.57ms        ? ?/sec    1.03     43.8±0.51ms        ? ?/sec
arrow_reader_clickbench/sync/Q19     1.00      4.4±0.05ms        ? ?/sec    1.00      4.4±0.03ms        ? ?/sec
arrow_reader_clickbench/sync/Q20     1.00    180.7±1.58ms        ? ?/sec    1.00    180.8±1.36ms        ? ?/sec
arrow_reader_clickbench/sync/Q21     1.00    238.4±2.97ms        ? ?/sec    1.01    240.3±2.27ms        ? ?/sec
arrow_reader_clickbench/sync/Q22     1.00    487.0±4.31ms        ? ?/sec    1.00    486.7±3.97ms        ? ?/sec
arrow_reader_clickbench/sync/Q23     1.07   451.0±13.84ms        ? ?/sec    1.00    423.1±4.28ms        ? ?/sec
arrow_reader_clickbench/sync/Q24     1.00     44.6±0.52ms        ? ?/sec    1.00     44.6±0.58ms        ? ?/sec
arrow_reader_clickbench/sync/Q27     1.00    157.3±1.44ms        ? ?/sec    1.00    156.9±1.73ms        ? ?/sec
arrow_reader_clickbench/sync/Q28     1.00    151.7±1.36ms        ? ?/sec    1.01    152.5±2.35ms        ? ?/sec
arrow_reader_clickbench/sync/Q30     1.00     31.4±0.42ms        ? ?/sec    1.03     32.3±0.69ms        ? ?/sec
arrow_reader_clickbench/sync/Q36     1.00    145.7±2.14ms        ? ?/sec    1.00    146.4±1.36ms        ? ?/sec
arrow_reader_clickbench/sync/Q37     1.00     80.0±1.52ms        ? ?/sec    1.00     79.9±0.84ms        ? ?/sec
arrow_reader_clickbench/sync/Q38     1.00     24.6±0.27ms        ? ?/sec    1.02     25.0±0.25ms        ? ?/sec
arrow_reader_clickbench/sync/Q39     1.00     32.7±0.37ms        ? ?/sec    1.01     33.1±0.50ms        ? ?/sec
arrow_reader_clickbench/sync/Q40     1.00     24.9±0.49ms        ? ?/sec    1.00     25.0±0.41ms        ? ?/sec
arrow_reader_clickbench/sync/Q41     1.00     19.9±0.37ms        ? ?/sec    1.00     19.9±0.28ms        ? ?/sec
arrow_reader_clickbench/sync/Q42     1.00      9.4±0.24ms        ? ?/sec    1.00      9.4±0.07ms        ? ?/sec

@lyang24
Copy link
Contributor Author

lyang24 commented Jan 22, 2026

run benchmark arrow_reader arrow_reader_row_filter arrow_reader_clickbench

@alamb-ghbot
Copy link

🤖 Hi @lyang24, thanks for the request (#9093 (comment)). scrape_comments.py only responds to whitelisted users. Allowed users: Dandandan, Omega359, adriangb, alamb, comphead, gabotechs, geoffreyclaude, klion26, rluvaton, xudong963, zhuqi-lucas.

@alamb
Copy link
Contributor

alamb commented Jan 22, 2026

run benchmark arrow_reader arrow_reader_row_filter arrow_reader_clickbench

@alamb
Copy link
Contributor

alamb commented Jan 22, 2026

@lyang24 -- I think this PR is a promising direction. I do plan to review it carefully but there are several other PRs in the queue before this one.

@lyang24 lyang24 force-pushed the pre_allocate_view_vec branch from 4c8aa57 to 48ed3bb Compare January 22, 2026 21:08
@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 (48ed3bb) to 3c6ca57 diff
BENCH_NAME=arrow_reader
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader
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_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.04   1224.5±4.22µs        ? ?/sec    1.00   1176.6±9.88µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.05  1288.5±29.19µs        ? ?/sec    1.00   1232.3±6.92µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.04   1232.0±4.38µs        ? ?/sec    1.00   1183.1±8.03µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.04    490.3±7.87µs        ? ?/sec    1.00    469.8±5.98µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.03    648.7±4.21µs        ? ?/sec    1.00   630.1±13.70µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.02    482.1±6.95µs        ? ?/sec    1.00   472.5±14.49µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.02   558.4±14.68µs        ? ?/sec    1.00    548.6±6.58µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.04   729.6±10.24µs        ? ?/sec    1.00    701.5±4.04µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.02    563.5±7.97µs        ? ?/sec    1.00    553.4±4.25µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.38    151.3±2.50µs        ? ?/sec    1.00    109.9±1.46µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.48    205.0±1.10µs        ? ?/sec    1.00    138.4±0.93µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.36    156.2±2.44µs        ? ?/sec    1.00    114.9±5.83µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.04    209.8±6.32µs        ? ?/sec    1.00    201.0±5.77µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.09    195.0±1.79µs        ? ?/sec    1.00    178.8±2.25µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.35    245.8±6.49µs        ? ?/sec    1.00    181.9±2.37µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.06    217.2±5.25µs        ? ?/sec    1.00    205.6±5.09µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.00  1036.0±17.89µs        ? ?/sec    1.04  1081.5±24.11µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.00    898.4±3.63µs        ? ?/sec    1.02   917.3±18.45µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.00   1039.7±7.89µs        ? ?/sec    1.05  1087.7±18.22µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.04    422.1±8.15µs        ? ?/sec    1.00    405.8±3.49µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.00    582.6±7.69µs        ? ?/sec    1.01   586.1±10.84µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.03    426.8±7.36µs        ? ?/sec    1.00    413.4±4.46µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.00    152.7±0.70µs        ? ?/sec    1.05    160.4±0.91µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.06    319.9±5.48µs        ? ?/sec    1.00   302.9±25.05µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.00    158.4±3.28µs        ? ?/sec    1.05    165.9±3.35µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.01     77.2±1.64µs        ? ?/sec    1.00     76.6±0.79µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.09    280.4±2.59µs        ? ?/sec    1.00    258.1±5.43µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.00     80.5±0.62µs        ? ?/sec    1.01     81.0±1.35µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.00   693.2±11.82µs        ? ?/sec    1.07   745.0±11.98µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.00   540.5±27.72µs        ? ?/sec    1.08    582.3±9.23µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.00   699.8±11.26µs        ? ?/sec    1.07   748.6±11.67µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.00     62.0±4.75µs        ? ?/sec    1.22     75.7±2.04µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.00    227.7±1.97µs        ? ?/sec    1.07    244.5±2.24µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.00     69.0±5.27µs        ? ?/sec    1.20     82.7±5.00µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.00     86.2±0.43µs        ? ?/sec    1.11     95.9±8.70µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.07    248.0±2.88µs        ? ?/sec    1.00    231.8±3.76µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.00     90.8±3.52µs        ? ?/sec    1.09     99.4±1.17µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.00      9.2±0.17µs        ? ?/sec    1.03      9.5±0.29µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.12    210.0±2.30µs        ? ?/sec    1.00    188.0±1.11µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.00     13.7±0.25µs        ? ?/sec    1.03     14.2±0.21µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.00    170.1±3.38µs        ? ?/sec    1.09    185.5±3.98µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.06    390.2±1.39µs        ? ?/sec    1.00    367.4±3.59µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.00   179.1±17.42µs        ? ?/sec    1.06    190.7±4.74µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.00     14.2±0.45µs        ? ?/sec    1.00     14.3±0.18µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.11    313.7±2.15µs        ? ?/sec    1.00    282.8±1.86µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.01     19.8±0.76µs        ? ?/sec    1.00     19.6±0.17µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.00    339.9±2.74µs        ? ?/sec    1.09    369.0±9.00µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.00    357.4±2.21µs        ? ?/sec    1.09    388.2±2.45µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.00    345.8±2.02µs        ? ?/sec    1.09    375.9±7.45µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.00     26.7±0.50µs        ? ?/sec    1.03     27.4±0.38µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.00    202.1±3.27µs        ? ?/sec    1.07    216.5±9.54µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.00     32.4±0.43µs        ? ?/sec    1.04     33.7±0.59µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.01    109.7±1.96µs        ? ?/sec    1.00    108.5±1.03µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.01    117.4±1.39µs        ? ?/sec    1.00    116.0±2.09µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.00    111.9±1.23µs        ? ?/sec    1.01    112.9±3.52µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.03    161.2±3.39µs        ? ?/sec    1.00    156.6±0.81µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.03    198.9±2.23µs        ? ?/sec    1.00    192.8±2.61µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.02    166.2±2.27µs        ? ?/sec    1.00    162.5±5.27µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     74.0±0.86µs        ? ?/sec    1.00     74.1±2.36µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.04    154.5±4.84µs        ? ?/sec    1.00    148.0±0.70µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.02     78.7±0.21µs        ? ?/sec    1.00     77.4±0.59µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.02    143.7±1.48µs        ? ?/sec    1.00    140.7±2.96µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.03    192.0±2.31µs        ? ?/sec    1.00    186.7±3.01µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    148.1±0.75µs        ? ?/sec    1.00   148.8±10.41µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.02     71.3±0.74µs        ? ?/sec    1.00     69.8±1.22µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.04    152.4±1.14µs        ? ?/sec    1.00    146.7±1.91µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.06     77.6±1.87µs        ? ?/sec    1.00     73.3±1.52µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.03    108.9±2.34µs        ? ?/sec    1.00    105.5±0.60µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.02    129.9±0.83µs        ? ?/sec    1.00    127.2±2.58µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.01    110.0±1.64µs        ? ?/sec    1.00    109.2±3.76µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.02    159.3±2.17µs        ? ?/sec    1.00    156.1±3.57µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.05    229.8±2.66µs        ? ?/sec    1.00    218.3±3.89µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.02    164.2±1.23µs        ? ?/sec    1.00    160.6±1.56µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.02    200.8±0.93µs        ? ?/sec    1.00    196.2±0.81µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.05    248.4±1.39µs        ? ?/sec    1.00    237.0±7.89µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.02    206.1±0.93µs        ? ?/sec    1.00    202.2±0.67µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.03    141.9±0.89µs        ? ?/sec    1.00    137.7±4.66µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.02    216.9±2.09µs        ? ?/sec    1.00    213.3±5.10µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.02    146.5±2.00µs        ? ?/sec    1.00    143.6±2.51µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.13     94.6±1.08µs        ? ?/sec    1.00     83.6±2.45µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.08    192.6±3.03µs        ? ?/sec    1.00    178.1±2.18µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.18    105.0±1.04µs        ? ?/sec    1.00     89.1±0.68µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.01     77.4±0.94µs        ? ?/sec    1.00     76.5±1.34µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.02     91.3±1.08µs        ? ?/sec    1.00     89.2±1.42µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.00     78.9±1.48µs        ? ?/sec    1.00     78.7±0.51µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.01    105.8±1.08µs        ? ?/sec    1.00    105.2±1.97µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.03    151.1±0.66µs        ? ?/sec    1.00    146.9±1.38µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.01    110.4±1.56µs        ? ?/sec    1.00    109.7±1.00µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.06     42.5±0.28µs        ? ?/sec    1.00     39.9±0.16µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.05    117.8±0.79µs        ? ?/sec    1.00    112.7±0.82µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.06     46.9±0.44µs        ? ?/sec    1.00     44.3±0.34µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.04    111.3±2.58µs        ? ?/sec    1.00    106.7±0.62µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.04    157.3±2.33µs        ? ?/sec    1.00    151.1±0.92µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.02    115.0±0.56µs        ? ?/sec    1.00    112.2±4.83µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.07     36.5±0.24µs        ? ?/sec    1.00     34.1±0.26µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.04    114.9±1.98µs        ? ?/sec    1.00    110.2±2.41µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.07     40.9±0.19µs        ? ?/sec    1.00     38.4±0.17µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.00     82.7±3.30µs        ? ?/sec    1.00     82.6±1.15µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.02     89.3±0.73µs        ? ?/sec    1.00     87.8±5.30µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.01     84.6±0.57µs        ? ?/sec    1.00     84.0±0.37µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.02    106.1±1.48µs        ? ?/sec    1.00    104.3±1.67µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.04    142.2±1.03µs        ? ?/sec    1.00    136.9±0.64µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.02    110.8±1.39µs        ? ?/sec    1.00    108.7±1.82µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.15     23.1±0.25µs        ? ?/sec    1.00     20.1±0.25µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.07     99.0±2.23µs        ? ?/sec    1.00     92.3±1.20µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.12     27.4±0.28µs        ? ?/sec    1.00     24.5±0.35µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.05     92.1±2.14µs        ? ?/sec    1.00     87.8±2.47µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.04    137.1±0.93µs        ? ?/sec    1.00    131.5±3.74µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.03     95.0±0.35µs        ? ?/sec    1.00     92.5±0.53µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.02     15.3±0.58µs        ? ?/sec    1.00     15.0±1.20µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.07     96.4±1.36µs        ? ?/sec    1.00     89.9±1.96µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.12     21.1±0.41µs        ? ?/sec    1.00     18.8±0.34µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.02     79.6±2.55µs        ? ?/sec    1.00     77.9±0.67µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.04    101.7±2.88µs        ? ?/sec    1.00     98.0±1.02µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.02     81.7±1.44µs        ? ?/sec    1.00     80.5±1.42µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.04    105.2±1.25µs        ? ?/sec    1.00    101.3±0.94µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.05    168.5±1.76µs        ? ?/sec    1.00    160.4±1.52µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.04    109.8±2.25µs        ? ?/sec    1.00    105.5±0.84µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.04    146.1±1.66µs        ? ?/sec    1.00    140.6±1.09µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.08    191.3±5.87µs        ? ?/sec    1.00    177.8±2.68µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.04    150.8±1.12µs        ? ?/sec    1.00    145.1±0.71µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.06     88.3±1.51µs        ? ?/sec    1.00     83.2±0.61µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.04   160.8±10.00µs        ? ?/sec    1.00    154.0±3.10µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.06     93.3±1.48µs        ? ?/sec    1.00     88.3±1.52µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.30     38.4±0.67µs        ? ?/sec    1.00     29.4±1.54µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.10    133.6±2.35µs        ? ?/sec    1.00    121.8±5.92µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.26     43.5±0.65µs        ? ?/sec    1.00     34.4±1.57µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.00     80.6±1.43µs        ? ?/sec    1.01     81.7±1.27µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.00     90.8±0.72µs        ? ?/sec    1.00     90.5±1.96µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.00     82.7±0.59µs        ? ?/sec    1.02     84.2±0.40µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.00    107.8±2.51µs        ? ?/sec    1.00    107.4±0.84µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.02    147.8±0.55µs        ? ?/sec    1.00    145.1±3.57µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.00    112.2±1.22µs        ? ?/sec    1.00    112.2±1.05µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.07     34.7±0.43µs        ? ?/sec    1.00     32.3±0.89µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.05    110.0±0.74µs        ? ?/sec    1.00    105.2±1.69µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.08     39.2±0.57µs        ? ?/sec    1.00     36.4±0.39µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.04    103.3±2.57µs        ? ?/sec    1.00     99.6±1.30µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.04    149.7±4.27µs        ? ?/sec    1.00    144.0±1.58µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.03    108.3±3.67µs        ? ?/sec    1.00    104.8±0.99µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.10     28.6±0.20µs        ? ?/sec    1.00     26.1±0.45µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.05    107.5±1.51µs        ? ?/sec    1.00    102.4±0.72µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.06     33.3±0.21µs        ? ?/sec    1.00     31.3±2.61µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.00      6.1±0.07ms        ? ?/sec    1.01      6.2±0.06ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.00     12.1±0.16ms        ? ?/sec    1.03     12.5±0.31ms        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.05    489.6±5.19µs        ? ?/sec    1.00    468.1±4.85µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.07   671.1±47.26µs        ? ?/sec    1.00    629.9±3.14µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.04    492.9±4.33µs        ? ?/sec    1.00    473.8±8.60µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.07   690.3±10.70µs        ? ?/sec    1.00    646.7±9.37µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.06    805.4±6.94µs        ? ?/sec    1.00   760.9±13.55µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.05    700.2±6.54µs        ? ?/sec    1.00   664.7±20.38µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.07    331.2±3.88µs        ? ?/sec    1.00    309.3±3.22µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.03    380.4±4.60µs        ? ?/sec    1.00   370.5±24.05µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.06    333.8±5.80µs        ? ?/sec    1.00    315.5±2.74µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.38    150.7±2.76µs        ? ?/sec    1.00    109.6±2.13µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.38    194.8±3.44µs        ? ?/sec    1.00    141.0±0.66µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.25    142.9±2.92µs        ? ?/sec    1.00    114.6±1.30µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.00    370.3±7.12µs        ? ?/sec    1.04    384.3±8.64µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.16    319.3±2.54µs        ? ?/sec    1.00    275.1±3.23µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.00    381.2±5.01µs        ? ?/sec    1.03    392.2±9.41µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.00     91.8±1.11µs        ? ?/sec    1.00     91.8±0.62µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.02     99.4±0.62µs        ? ?/sec    1.00     97.3±0.64µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.00     94.4±1.41µs        ? ?/sec    1.00     94.5±0.99µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.01    125.2±2.56µs        ? ?/sec    1.00    124.2±1.65µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.03    162.8±4.71µs        ? ?/sec    1.00    158.0±1.00µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.03   132.4±13.96µs        ? ?/sec    1.00    128.8±1.14µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.02     40.9±0.66µs        ? ?/sec    1.00     39.9±0.23µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.04    117.6±1.45µs        ? ?/sec    1.00    112.8±0.96µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.03     45.3±0.28µs        ? ?/sec    1.00     44.0±0.46µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.02    111.1±2.76µs        ? ?/sec    1.00    108.5±9.74µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.04    156.3±1.57µs        ? ?/sec    1.00    150.7±1.87µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.03    115.1±1.01µs        ? ?/sec    1.00    111.6±1.06µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.08     36.8±0.43µs        ? ?/sec    1.00     34.0±0.50µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.04    115.6±2.87µs        ? ?/sec    1.00    111.0±6.08µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.08     41.7±1.80µs        ? ?/sec    1.00     38.5±0.29µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.00     82.1±0.37µs        ? ?/sec    1.00     81.7±0.89µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.03     90.0±3.95µs        ? ?/sec    1.00     87.2±1.85µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.00     84.5±0.66µs        ? ?/sec    1.00     84.3±1.63µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.02    106.0±0.42µs        ? ?/sec    1.00    104.3±1.07µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.05    143.3±2.67µs        ? ?/sec    1.00    137.0±1.13µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.01    110.8±1.51µs        ? ?/sec    1.00    109.5±4.17µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.28     24.1±0.47µs        ? ?/sec    1.00     18.9±1.49µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.06     98.9±2.35µs        ? ?/sec    1.00     92.9±2.73µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.23     28.2±0.28µs        ? ?/sec    1.00     23.0±0.15µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.05     92.0±0.78µs        ? ?/sec    1.00     87.4±1.32µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.06    137.4±0.60µs        ? ?/sec    1.00    130.2±0.63µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.05     96.5±1.42µs        ? ?/sec    1.00     92.2±1.13µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.22     18.0±0.84µs        ? ?/sec    1.00     14.8±0.30µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.08     96.3±0.72µs        ? ?/sec    1.00     89.5±0.64µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.18     22.9±0.89µs        ? ?/sec    1.00     19.3±0.29µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.00     79.0±1.43µs        ? ?/sec    1.00     79.4±5.02µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.03    101.9±2.88µs        ? ?/sec    1.00     98.8±3.66µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.02     82.0±3.26µs        ? ?/sec    1.00     80.8±1.63µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.04    106.3±0.76µs        ? ?/sec    1.00    101.8±0.75µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.04    167.6±6.12µs        ? ?/sec    1.00    161.0±1.94µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.04    109.8±1.45µs        ? ?/sec    1.00    106.0±0.55µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.04    146.2±0.81µs        ? ?/sec    1.00    140.7±0.62µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.08    192.0±7.60µs        ? ?/sec    1.00    177.6±2.13µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.04    151.4±1.21µs        ? ?/sec    1.00    145.3±0.69µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.06     88.6±2.24µs        ? ?/sec    1.00     83.7±0.69µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.04    160.7±5.61µs        ? ?/sec    1.00    154.1±1.21µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.06     93.3±0.87µs        ? ?/sec    1.00     88.2±1.97µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.31     38.8±0.75µs        ? ?/sec    1.00     29.7±1.78µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.11    133.4±1.23µs        ? ?/sec    1.00    120.7±2.59µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.27     43.9±0.73µs        ? ?/sec    1.00     34.7±1.89µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.02     89.4±0.61µs        ? ?/sec    1.00     88.1±0.85µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.02     95.7±1.13µs        ? ?/sec    1.00     94.2±5.70µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.02     92.3±2.44µs        ? ?/sec    1.00     90.4±0.66µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.02    117.6±0.79µs        ? ?/sec    1.00    115.7±0.52µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.04    155.2±6.35µs        ? ?/sec    1.00    149.7±0.94µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.00    122.4±2.53µs        ? ?/sec    1.00    122.5±9.18µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.08     34.6±0.17µs        ? ?/sec    1.00     32.0±0.41µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.04    109.9±0.50µs        ? ?/sec    1.00    105.8±1.59µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.07     39.0±1.66µs        ? ?/sec    1.00     36.3±0.73µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.04    102.7±0.52µs        ? ?/sec    1.00     99.2±1.31µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.04    149.2±1.54µs        ? ?/sec    1.00    143.1±0.83µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.03    107.2±0.53µs        ? ?/sec    1.00    103.8±1.61µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.10     28.7±0.23µs        ? ?/sec    1.00     26.0±0.32µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.05    107.5±0.90µs        ? ?/sec    1.00    102.5±2.74µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.10     33.6±0.44µs        ? ?/sec    1.00     30.4±0.37µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, half NULLs            1.06     96.5±0.72µs        ? ?/sec    1.00     91.5±3.35µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, no NULLs              1.21     22.9±0.96µs        ? ?/sec    1.00     18.9±0.43µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, half NULLs             1.05    223.6±3.20µs        ? ?/sec    1.00    213.9±3.12µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, no NULLs               1.12    125.6±2.51µs        ? ?/sec    1.00    112.1±1.15µ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 (48ed3bb) to 3c6ca57 diff
BENCH_NAME=arrow_reader_row_filter
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader_row_filter
BENCH_FILTER=
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.00  1680.9±18.50µs        ? ?/sec    1.01  1692.9±21.83µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/all_columns/sync                             1.00  1812.5±29.23µs        ? ?/sec    1.01  1821.7±20.71µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/async                  1.00   1552.3±9.76µs        ? ?/sec    1.00  1547.6±11.29µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/sync                   1.00  1521.3±18.27µs        ? ?/sec    1.00   1520.4±9.15µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/async              1.00  1475.1±22.35µs        ? ?/sec    1.00  1470.7±11.38µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/sync               1.00  1621.0±15.92µs        ? ?/sec    1.02  1654.3±25.13µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/async    1.00  1284.6±10.26µs        ? ?/sec    1.03  1326.3±10.53µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/sync     1.00  1288.4±16.19µs        ? ?/sec    1.02  1317.1±11.30µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/async                             1.00  1671.7±10.91µs        ? ?/sec    1.00  1673.5±27.31µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/sync                              1.00  1791.6±16.92µs        ? ?/sec    1.01  1807.5±27.65µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/async                   1.00  1527.7±23.47µs        ? ?/sec    1.01  1540.5±11.29µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/sync                    1.00   1508.2±8.89µs        ? ?/sec    1.01  1517.8±14.06µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/async                              1.00    873.2±7.00µs        ? ?/sec    1.00    872.0±5.11µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/sync                               1.04   832.3±17.83µs        ? ?/sec    1.00    803.9±7.59µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/async                    1.02   816.2±11.40µs        ? ?/sec    1.00   796.8±12.20µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/sync                     1.02   825.3±13.29µs        ? ?/sec    1.00    809.0±8.44µs        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/async                                 1.00      2.6±0.03ms        ? ?/sec    1.03      2.6±0.05ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/sync                                  1.07      2.3±0.02ms        ? ?/sec    1.00      2.2±0.03ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/async                       1.02      2.5±0.04ms        ? ?/sec    1.00      2.4±0.05ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/sync                        1.08      2.1±0.02ms        ? ?/sec    1.00  1983.7±13.95µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/async                                  1.06  1783.5±41.52µs        ? ?/sec    1.00   1686.5±9.89µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/sync                                   1.06  1829.0±22.15µs        ? ?/sec    1.00  1726.0±10.60µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/async                        1.05  1586.3±12.01µs        ? ?/sec    1.00   1509.4±9.62µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/sync                         1.05  1589.5±10.83µs        ? ?/sec    1.00   1510.8±7.41µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/async                                 1.03  1199.1±12.88µs        ? ?/sec    1.00  1159.6±10.86µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/sync                                  1.02  1200.9±17.06µs        ? ?/sec    1.00   1182.9±9.34µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/async                       1.02  1086.4±24.84µs        ? ?/sec    1.00   1061.7±6.15µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/sync                        1.00   1083.0±8.54µs        ? ?/sec    1.00  1086.0±69.55µs        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/async                             1.00      3.0±0.03ms        ? ?/sec    1.00      3.0±0.03ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/sync                              1.04      3.1±0.06ms        ? ?/sec    1.00      3.0±0.06ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/async                   1.01      2.5±0.02ms        ? ?/sec    1.00      2.5±0.03ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/sync                    1.04      2.3±0.03ms        ? ?/sec    1.00      2.2±0.02ms        ? ?/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 (48ed3bb) to 3c6ca57 diff
BENCH_NAME=arrow_reader_clickbench
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader_clickbench
BENCH_FILTER=
BENCH_BRANCH_NAME=pre_allocate_view_vec
Results will be posted here when complete

@lyang24
Copy link
Contributor Author

lyang24 commented Jan 22, 2026

I dived deeper into float16. its not preallocating by design with_capacity is a no-op should act the same as the original default method. Will do some digging later on why regression happen.

impl ValuesBuffer for FixedLenByteArrayBuffer {
    fn with_capacity(_capacity: usize) -> Self {
        // byte_length is not known at trait level, so we return a default buffer
        // The decoder will pre-allocate when it knows both capacity and byte_length
        Self {
            buffer: Vec::new(),
            byte_length: None,
        }
    }

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                main                                   pre_allocate_view_vec
-----                                ----                                   ---------------------
arrow_reader_clickbench/async/Q1     1.01      2.4±0.04ms        ? ?/sec    1.00      2.3±0.04ms        ? ?/sec
arrow_reader_clickbench/async/Q10    1.01     12.3±0.29ms        ? ?/sec    1.00     12.2±0.47ms        ? ?/sec
arrow_reader_clickbench/async/Q11    1.00     14.0±0.28ms        ? ?/sec    1.00     14.1±0.57ms        ? ?/sec
arrow_reader_clickbench/async/Q12    1.01     24.9±0.36ms        ? ?/sec    1.00     24.8±0.30ms        ? ?/sec
arrow_reader_clickbench/async/Q13    1.00     30.2±0.44ms        ? ?/sec    1.00     30.3±0.37ms        ? ?/sec
arrow_reader_clickbench/async/Q14    1.00     27.2±0.32ms        ? ?/sec    1.02     27.7±0.25ms        ? ?/sec
arrow_reader_clickbench/async/Q19    1.00      5.5±0.12ms        ? ?/sec    1.03      5.7±0.12ms        ? ?/sec
arrow_reader_clickbench/async/Q20    1.00   122.4±12.73ms        ? ?/sec    1.05    128.6±1.35ms        ? ?/sec
arrow_reader_clickbench/async/Q21    1.02    165.7±1.26ms        ? ?/sec    1.00    162.4±1.30ms        ? ?/sec
arrow_reader_clickbench/async/Q22    1.03   323.0±31.63ms        ? ?/sec    1.00   312.7±15.22ms        ? ?/sec
arrow_reader_clickbench/async/Q23    1.02    415.5±3.67ms        ? ?/sec    1.00    405.4±4.63ms        ? ?/sec
arrow_reader_clickbench/async/Q24    1.03     34.5±0.53ms        ? ?/sec    1.00     33.5±0.26ms        ? ?/sec
arrow_reader_clickbench/async/Q27    1.03    100.6±0.56ms        ? ?/sec    1.00     97.8±0.83ms        ? ?/sec
arrow_reader_clickbench/async/Q28    1.04    100.2±3.51ms        ? ?/sec    1.00     96.7±0.70ms        ? ?/sec
arrow_reader_clickbench/async/Q30    1.03     30.6±0.46ms        ? ?/sec    1.00     29.7±0.25ms        ? ?/sec
arrow_reader_clickbench/async/Q36    1.03    109.7±0.67ms        ? ?/sec    1.00    106.1±0.81ms        ? ?/sec
arrow_reader_clickbench/async/Q37    1.03     85.2±0.58ms        ? ?/sec    1.00     82.6±0.99ms        ? ?/sec
arrow_reader_clickbench/async/Q38    1.01     33.5±0.29ms        ? ?/sec    1.00     33.0±0.52ms        ? ?/sec
arrow_reader_clickbench/async/Q39    1.06     47.6±1.61ms        ? ?/sec    1.00     45.0±0.42ms        ? ?/sec
arrow_reader_clickbench/async/Q40    1.15     32.4±0.76ms        ? ?/sec    1.00     28.1±0.28ms        ? ?/sec
arrow_reader_clickbench/async/Q41    1.14     26.1±0.55ms        ? ?/sec    1.00     23.0±0.34ms        ? ?/sec
arrow_reader_clickbench/async/Q42    1.10     11.9±0.21ms        ? ?/sec    1.00     10.8±0.12ms        ? ?/sec
arrow_reader_clickbench/sync/Q1      1.00      2.0±0.02ms        ? ?/sec    1.00      2.0±0.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q10     1.02      8.8±0.15ms        ? ?/sec    1.00      8.6±0.09ms        ? ?/sec
arrow_reader_clickbench/sync/Q11     1.02     10.3±0.11ms        ? ?/sec    1.00     10.2±0.35ms        ? ?/sec
arrow_reader_clickbench/sync/Q12     1.09     33.0±2.47ms        ? ?/sec    1.00     30.3±0.38ms        ? ?/sec
arrow_reader_clickbench/sync/Q13     1.32     46.2±0.69ms        ? ?/sec    1.00     35.2±0.26ms        ? ?/sec
arrow_reader_clickbench/sync/Q14     1.24     40.7±0.62ms        ? ?/sec    1.00     32.7±0.31ms        ? ?/sec
arrow_reader_clickbench/sync/Q19     1.01      4.2±0.06ms        ? ?/sec    1.00      4.2±0.13ms        ? ?/sec
arrow_reader_clickbench/sync/Q20     1.04    178.8±1.30ms        ? ?/sec    1.00    172.0±1.17ms        ? ?/sec
arrow_reader_clickbench/sync/Q21     1.01    229.7±4.66ms        ? ?/sec    1.00    226.4±2.04ms        ? ?/sec
arrow_reader_clickbench/sync/Q22     1.02    478.2±3.52ms        ? ?/sec    1.00    469.3±3.58ms        ? ?/sec
arrow_reader_clickbench/sync/Q23     1.03   444.9±19.09ms        ? ?/sec    1.00   433.4±17.94ms        ? ?/sec
arrow_reader_clickbench/sync/Q24     1.10     43.4±0.35ms        ? ?/sec    1.00     39.3±0.37ms        ? ?/sec
arrow_reader_clickbench/sync/Q27     1.04    155.5±1.61ms        ? ?/sec    1.00    149.6±1.26ms        ? ?/sec
arrow_reader_clickbench/sync/Q28     1.03    149.7±0.85ms        ? ?/sec    1.00    145.8±2.12ms        ? ?/sec
arrow_reader_clickbench/sync/Q30     1.05     30.3±0.39ms        ? ?/sec    1.00     28.8±0.33ms        ? ?/sec
arrow_reader_clickbench/sync/Q36     1.05    156.0±1.08ms        ? ?/sec    1.00    149.0±0.87ms        ? ?/sec
arrow_reader_clickbench/sync/Q37     1.04     88.4±1.37ms        ? ?/sec    1.00     84.6±1.19ms        ? ?/sec
arrow_reader_clickbench/sync/Q38     1.02     29.6±0.37ms        ? ?/sec    1.00     29.0±0.45ms        ? ?/sec
arrow_reader_clickbench/sync/Q39     1.06     34.4±0.66ms        ? ?/sec    1.00     32.6±0.28ms        ? ?/sec
arrow_reader_clickbench/sync/Q40     1.02     26.9±0.58ms        ? ?/sec    1.00     26.3±0.29ms        ? ?/sec
arrow_reader_clickbench/sync/Q41     1.03     29.5±0.35ms        ? ?/sec    1.00     28.5±0.34ms        ? ?/sec
arrow_reader_clickbench/sync/Q42     1.04     12.5±0.31ms        ? ?/sec    1.00     12.0±0.09ms        ? ?/sec

@alamb
Copy link
Contributor

alamb commented Mar 18, 2026

I have sort of lost track of what is happening in this PR. Should we try and get it in ? Or have we concluded the changes aren't worth it?

@lyang24
Copy link
Contributor Author

lyang24 commented Mar 19, 2026

I have sort of lost track of what is happening in this PR. Should we try and get it in ? Or have we concluded the changes aren't worth it?

a bit tied up with work. I will run a comprehensive benchmark on this over the weekend.

@alamb
Copy link
Contributor

alamb commented Mar 19, 2026

Marking as draft as I think this PR is no longer waiting on feedback and I am trying to make it easier to find PRs in need of review. Please mark it as ready for review when it is ready for another look

@alamb alamb marked this pull request as draft March 19, 2026 14:52
lyang24 added 3 commits March 21, 2026 14:26
…er.Ensure internal buffers to be pre-allocated.

Api change - making batch size required for ArrayReader and buffers.
@lyang24
Copy link
Contributor Author

lyang24 commented Mar 21, 2026

implemented @Dandandan 's suggestions over the issue and subset of bench on mac

Category Benchmark Branch (µs) Master (µs) Change
StringArray plain, mandatory, no NULLs 631 614 +2.8%
StringArray plain, optional, no NULLs 617 636 -3.0%
StringArray plain, optional, half NULLs 466 485 -3.9%
StringArray dict, mandatory, no NULLs 412 415 -0.7%
StringArray dict, optional, no NULLs 427 410 +4.1%
StringArray dict, optional, half NULLs 381 376 +1.3%
StringArray const prefix delta byte array, mandatory 897 890 +0.8%
StringArray const delta byte array, mandatory 657 655 +0.3%
StringArray const delta length byte array, mandatory 493 472 +4.4%
BinaryArray plain, mandatory, no NULLs 557 584 -4.6%
BinaryArray plain, optional, no NULLs 636 570 +11.6%
BinaryArray plain, optional, half NULLs 423 468 -9.6%
BinaryArray dict, mandatory, no NULLs 413 407 +1.5%
BinaryArray dict, optional, no NULLs 409 408 +0.2%
BinaryArray dict, optional, half NULLs 351 359 -2.2%
BinaryViewArray plain, mandatory, short string 114 119 -4.2%
BinaryViewArray plain, mandatory, no NULLs 123 127 -3.1%
BinaryViewArray plain, optional, no NULLs 126 129 -2.3%
BinaryViewArray plain, optional, half NULLs 119 129 -7.8%
BinaryViewArray dict, mandatory, no NULLs 54 62 -12.9%
BinaryViewArray dict, optional, no NULLs 56 63 -11.1%
BinaryViewArray dict, optional, half NULLs 89 90 -1.1%
StringDictionary dict, mandatory, no NULLs 196 203 -3.4%
StringDictionary dict, optional, no NULLs 199 204 -2.5%
StringDictionary dict, optional, half NULLs 221 230 -3.9%
StringViewArray plain, mandatory, no NULLs 150 155 -3.2%
StringViewArray plain, optional, no NULLs 155 159 -2.5%
StringViewArray plain, optional, half NULLs 131 140 -6.4%
StringViewArray dict, mandatory, no NULLs 54 61 -11.5%
StringViewArray dict, optional, no NULLs 56 62 -9.7%
StringViewArray dict, optional, half NULLs 88 100 -12.0%

- Optimize OffsetBuffer dict decode by inlining extend + offset push
- Use raw ptr writes in ByteViewArray dictionary decoder for better perf
- Remove unused append_raw_view_unchecked from ViewBuffer

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@lyang24 lyang24 force-pushed the pre_allocate_view_vec branch from 48ed3bb to d126a19 Compare March 21, 2026 23:08
@lyang24
Copy link
Contributor Author

lyang24 commented Mar 22, 2026

the optimization is “reserve the values buffer up front,” but the fixed-length path can’t actually use that reservation at the point where the generic code applies it. so fixed-length arrays gets the overhead of this change but no benefits.

@lyang24
Copy link
Contributor Author

lyang24 commented Mar 22, 2026

ran a full scale array reader benchmark on ubuntu i think its a net gain overall, and regression on FixedLenByteArray are confirmed.
bench_comparison.txt

@lyang24 lyang24 requested a review from Dandandan March 22, 2026 07:42
@lyang24 lyang24 marked this pull request as ready for review March 22, 2026 07:43
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

4 participants