Skip to content

parquet: skip heap allocation on terminal page skip in DeltaBitPackDecoder#9787

Closed
sahuagin wants to merge 4 commits intoapache:mainfrom
sahuagin:pr/terminal-skip
Closed

parquet: skip heap allocation on terminal page skip in DeltaBitPackDecoder#9787
sahuagin wants to merge 4 commits intoapache:mainfrom
sahuagin:pr/terminal-skip

Conversation

@sahuagin
Copy link
Copy Markdown
Contributor

@sahuagin sahuagin commented Apr 21, 2026

Adds a terminal-skip fast path to DeltaBitPackDecoder::skip(). When
to_skip >= values_left the caller is discarding all remaining values on the
page and last_value will not be read again. In this case:

  • Use BitReader::skip(n, bit_width) to advance the stream without decoding.
  • Return early without allocating a scratch buffer or updating last_value.

The terminal path is extracted into a #[cold] helper to prevent the added
code from increasing the icache footprint of the non-terminal hot path.

The existing decode path is preserved unchanged for non-terminal skips where
last_value accuracy is required for subsequent get() calls.

Benchmarks (arrow_reader bench vs upstream HEAD, -- skip --baseline upstream):

Int32 skip single value:            -8.9%
Int32 skip increasing value:        -1.3%
Int32 skip stepped increasing:      -7.6%
Int32 skip mandatory, no NULLs:     -1.5%
Int32 skip optional, no NULLs:      -2.1%

No regressions on non-terminal paths. Benchmarks were run on a non-isolated
machine (no CPU frequency pinning); small variances of ±5% should be attributed
to measurement noise.

Origin: The common "skip rest of page" pattern during row-group filtering
hits this path frequently. Removing the unconditional scratch allocation for a
case where the decoded values are immediately discarded is the right call.

Verification: Existing skip tests pass. One new focused test added:
decode partial values first, then terminal-skip the remainder — the real-world
row-filtering pattern that was not previously covered.

Generated-by: Claude (claude-sonnet-4-6)

…PackDecoder

When to_skip >= values_left the caller is discarding all remaining values on
the page and last_value will not be read again. In this case use
BitReader::skip(n, bit_width) to advance the stream without decoding, and
return early without allocating a scratch buffer or updating last_value.

The existing decode path is preserved unchanged for non-terminal skips where
last_value accuracy is required for subsequent get() calls.

Split from apache#9769 as requested by reviewer.
@sahuagin sahuagin marked this pull request as draft April 21, 2026 19:09
Copy link
Copy Markdown
Contributor

@etseidl etseidl left a comment

Choose a reason for hiding this comment

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

Thanks @sahuagin, this looks like a sensible optimization to make.

Comment thread parquet/src/encodings/decoding.rs Outdated
// Terminal skip: caller is discarding all remaining values on this page.
// last_value will never be read again, so we can use O(1) arithmetic
// skips (BitReader::skip) instead of decoding through get_batch.
let terminal = to_skip >= self.values_left + skip;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think this line and the following block can move before the preceding block...then this test can just be to_skip >= self.values_left.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I can take a look a bit later this evening.

Comment thread parquet/src/encodings/decoding.rs Outdated
let terminal = to_skip >= self.values_left + skip;

if terminal {
while skip < to_skip {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Since we're skipping the entire page, I think we can skip all of this logic and simply set self.values_left to 0. The bit reader is populated with a single page worth of data, so it's safe to not run through the state machine here.

This suggestion messes with one of the unit tests, but the test can be modified to not skip the entire page and still trigger the expected error.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I have some concerns changing the tests to match my code: I'll call them out specifically in my changes to make sure they are the ones that you were thinking of.

@etseidl
Copy link
Copy Markdown
Contributor

etseidl commented Apr 21, 2026

run benchmark arrow_reader

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4291586328-1714-rzm8s 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing pr/terminal-skip (0ee64e0) to de11d9c (merge-base) diff
BENCH_NAME=arrow_reader
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader
BENCH_FILTER=
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark completed (GKE) | trigger

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

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

group                                                                                                      main                                   pr_terminal-skip
-----                                                                                                      ----                                   ----------------
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.00   847.7±15.58µs        ? ?/sec    1.00   848.0±15.41µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.00    953.2±7.56µs        ? ?/sec    1.00    955.3±8.05µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.00   851.6±15.49µs        ? ?/sec    1.00   853.1±15.67µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.05    289.4±0.63µs        ? ?/sec    1.00    275.4±0.15µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.00    387.3±0.60µs        ? ?/sec    1.01    389.6±1.07µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.01    280.3±0.15µs        ? ?/sec    1.00    278.8±0.69µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.00    411.7±6.61µs        ? ?/sec    1.00    413.7±5.57µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.00    459.8±3.82µs        ? ?/sec    1.01    466.6±4.42µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.00    416.5±6.32µs        ? ?/sec    1.00    416.5±6.48µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.00     79.4±0.06µs        ? ?/sec    1.00     79.5±0.04µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.00    107.8±0.08µs        ? ?/sec    1.01    108.9±0.10µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.00     83.3±0.05µs        ? ?/sec    1.00     83.3±0.04µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.00    145.9±0.63µs        ? ?/sec    1.01    146.9±0.59µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.00    141.3±0.39µs        ? ?/sec    1.00    140.9±0.09µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.00    143.4±0.60µs        ? ?/sec    1.02    145.9±0.50µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.01    151.9±0.64µs        ? ?/sec    1.00    150.9±0.43µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.00   1085.7±7.54µs        ? ?/sec    1.01   1097.0±8.17µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.00    679.9±0.72µs        ? ?/sec    1.00    681.4±0.94µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.00    975.0±0.75µs        ? ?/sec    1.01    983.3±1.37µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.00    193.1±0.40µs        ? ?/sec    1.03    198.4±0.49µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.00    306.4±0.47µs        ? ?/sec    1.01    308.7±0.75µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.00    197.4±0.32µs        ? ?/sec    1.03    203.2±0.37µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.00    135.9±0.32µs        ? ?/sec    1.01    136.7±4.67µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.01    189.5±1.28µs        ? ?/sec    1.00    187.6±0.10µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.00    139.0±0.24µs        ? ?/sec    1.00    138.5±0.31µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.03     62.5±0.71µs        ? ?/sec    1.00     60.5±0.07µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.01    151.7±0.11µs        ? ?/sec    1.00    149.7±0.10µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.02     65.8±1.51µs        ? ?/sec    1.00     64.3±0.12µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.00    808.6±0.69µs        ? ?/sec    1.00    808.7±1.34µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.00    522.9±0.38µs        ? ?/sec    1.00    521.4±1.46µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.00    814.0±0.82µs        ? ?/sec    1.00    813.9±1.89µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.01     31.8±0.05µs        ? ?/sec    1.00     31.5±0.06µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.01    145.8±0.20µs        ? ?/sec    1.00    143.7±0.25µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.00     35.5±0.06µs        ? ?/sec    1.02     36.4±0.07µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.00     81.6±0.25µs        ? ?/sec    1.01     82.3±0.23µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.00    134.4±0.10µs        ? ?/sec    1.00    134.4±0.12µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.00     84.3±0.16µs        ? ?/sec    1.01     85.1±0.19µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.00      6.7±0.04µs        ? ?/sec    1.01      6.7±0.02µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.01     97.0±0.08µs        ? ?/sec    1.00     96.1±0.11µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.00     10.3±0.02µs        ? ?/sec    1.00     10.3±0.03µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.00    159.2±0.32µs        ? ?/sec    1.03    163.3±4.85µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.00    206.9±0.19µs        ? ?/sec    1.00    206.9±0.47µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.00    162.2±0.29µs        ? ?/sec    1.01    163.4±0.27µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.01      9.7±0.02µs        ? ?/sec    1.00      9.6±0.05µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.01    132.4±0.38µs        ? ?/sec    1.00    131.2±0.14µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.00     13.3±0.03µs        ? ?/sec    1.00     13.3±0.03µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.00    321.5±1.00µs        ? ?/sec    1.00    320.6±0.50µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.00    281.4±0.48µs        ? ?/sec    1.00    281.4±0.40µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.00    324.7±0.84µs        ? ?/sec    1.00    325.3±0.50µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.00     15.9±0.04µs        ? ?/sec    1.02     16.2±0.10µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.01    130.8±0.13µs        ? ?/sec    1.00    129.4±0.13µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.00     19.6±0.03µs        ? ?/sec    1.03     20.2±0.03µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed increasing value                                    1.00     86.5±0.65µs        ? ?/sec    1.00     86.3±0.48µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed single value                                        1.01     78.2±0.28µs        ? ?/sec    1.00     77.7±0.42µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip increasing value                               1.00     57.2±0.39µs        ? ?/sec    1.00     56.9±0.34µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip single value                                   1.00     49.2±0.21µs        ? ?/sec    1.00     49.1±0.23µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip stepped increasing value                       1.00     73.3±0.10µs        ? ?/sec    1.00     73.4±0.17µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.01     88.6±0.28µs        ? ?/sec    1.00     88.1±0.38µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.00     89.3±0.15µs        ? ?/sec    1.00     89.2±0.18µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.00     90.7±0.16µs        ? ?/sec    1.00     90.4±0.43µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed stepped increasing value                            1.00    106.1±0.13µs        ? ?/sec    1.00    106.0±0.38µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.01    124.8±0.18µs        ? ?/sec    1.00    123.7±0.51µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.00    146.8±0.28µs        ? ?/sec    1.00    147.0±0.31µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.01    128.3±0.42µs        ? ?/sec    1.00    127.6±0.67µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     53.8±0.07µs        ? ?/sec    1.01     54.2±0.13µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    111.0±1.34µs        ? ?/sec    1.00    111.5±0.16µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00     57.4±0.10µs        ? ?/sec    1.01     57.9±0.08µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00     84.1±0.09µs        ? ?/sec    1.01     84.7±0.18µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    127.7±0.14µs        ? ?/sec    1.01    129.1±0.27µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00     87.7±0.07µs        ? ?/sec    1.01     88.7±0.21µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.00     47.1±0.05µs        ? ?/sec    1.00     47.1±0.05µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.00    107.8±0.15µs        ? ?/sec    1.00    107.9±0.16µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.00     50.8±0.14µs        ? ?/sec    1.00     50.7±0.07µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed increasing value                                    1.00     77.5±0.13µs        ? ?/sec    1.00     77.6±0.30µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed single value                                        1.00     74.4±0.18µs        ? ?/sec    1.00     74.1±0.12µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip increasing value                               1.00     50.1±0.09µs        ? ?/sec    1.00     49.9±0.10µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip single value                                   1.00     45.3±0.09µs        ? ?/sec    1.00     45.1±0.09µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip stepped increasing value                       1.01     67.7±0.08µs        ? ?/sec    1.00     66.7±0.08µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00     79.2±0.15µs        ? ?/sec    1.00     79.5±0.10µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.00     90.1±0.08µs        ? ?/sec    1.00     90.3±0.10µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.00     81.2±0.10µs        ? ?/sec    1.01     82.0±0.10µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed stepped increasing value                            1.00    100.5±0.17µs        ? ?/sec    1.02    102.1±0.16µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    113.9±0.14µs        ? ?/sec    1.02    116.7±0.49µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.00    151.6±0.13µs        ? ?/sec    1.01    152.8±0.22µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.00    117.9±0.17µs        ? ?/sec    1.02    119.8±0.73µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     82.9±0.17µs        ? ?/sec    1.00     83.1±0.09µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    136.1±0.18µs        ? ?/sec    1.00    136.3±0.28µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00     87.1±0.11µs        ? ?/sec    1.00     87.3±0.14µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00     86.4±0.07µs        ? ?/sec    1.00     86.3±0.09µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    139.4±0.10µs        ? ?/sec    1.00    139.4±0.18µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00     90.4±0.08µs        ? ?/sec    1.00     90.1±0.08µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.00     54.6±0.05µs        ? ?/sec    1.00     54.4±0.06µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.00    121.1±0.28µs        ? ?/sec    1.00    121.4±0.18µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.00     58.5±0.13µs        ? ?/sec    1.00     58.4±0.09µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed increasing value                                               1.00     52.6±0.35µs        ? ?/sec    1.00     52.6±0.49µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed single value                                                   1.00     44.2±0.42µs        ? ?/sec    1.00     44.1±0.35µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip increasing value                                          1.00     39.7±0.29µs        ? ?/sec    1.01     39.9±0.28µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip single value                                              1.00     31.7±0.30µs        ? ?/sec    1.00     31.8±0.25µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip stepped increasing value                                  1.00     56.3±0.08µs        ? ?/sec    1.00     56.1±0.13µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.01     71.4±0.14µs        ? ?/sec    1.00     70.5±0.43µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.01     72.6±0.14µs        ? ?/sec    1.00     71.8±0.30µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.01     73.3±0.18µs        ? ?/sec    1.00     72.3±0.48µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed stepped increasing value                                       1.01     73.2±0.12µs        ? ?/sec    1.00     72.7±0.14µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.02     91.4±0.21µs        ? ?/sec    1.00     89.2±0.75µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.01    114.1±0.19µs        ? ?/sec    1.00    112.7±0.44µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.02     95.1±0.21µs        ? ?/sec    1.00     93.1±0.71µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     20.9±0.02µs        ? ?/sec    1.01     21.1±0.02µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.00     77.0±0.10µs        ? ?/sec    1.01     78.1±0.09µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.00     24.6±0.03µs        ? ?/sec    1.01     24.7±0.03µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.00     50.8±0.02µs        ? ?/sec    1.01     51.3±0.03µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.00     94.7±0.15µs        ? ?/sec    1.01     95.9±0.15µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.00     54.9±0.04µs        ? ?/sec    1.01     55.3±0.08µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.00     13.8±0.03µs        ? ?/sec    1.01     13.9±0.04µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.00     74.5±0.10µs        ? ?/sec    1.00     74.6±0.24µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.00     17.4±0.02µs        ? ?/sec    1.02     17.9±0.03µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed increasing value                                               1.03     49.9±0.57µs        ? ?/sec    1.00     48.7±0.39µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed single value                                                   1.00     41.3±0.24µs        ? ?/sec    1.00     41.4±0.12µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip increasing value                                          1.00     38.2±0.39µs        ? ?/sec    1.00     38.3±0.32µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip single value                                              1.00     30.2±0.14µs        ? ?/sec    1.00     30.3±0.09µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip stepped increasing value                                  1.00     54.4±0.08µs        ? ?/sec    1.00     54.3±0.05µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.00     69.6±0.14µs        ? ?/sec    1.00     69.2±0.20µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.00     71.2±0.13µs        ? ?/sec    1.00     71.4±0.14µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.00     71.8±0.14µs        ? ?/sec    1.00     71.6±0.19µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed stepped increasing value                                       1.00     69.3±0.10µs        ? ?/sec    1.00     69.3±0.09µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.01     87.8±0.15µs        ? ?/sec    1.00     87.0±0.33µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.01    111.2±0.19µs        ? ?/sec    1.00    110.5±0.28µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.01     91.8±0.17µs        ? ?/sec    1.00     90.8±0.32µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     17.4±0.04µs        ? ?/sec    1.00     17.3±0.02µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.00     74.7±0.10µs        ? ?/sec    1.00     74.7±0.10µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.00     21.0±0.02µs        ? ?/sec    1.00     21.0±0.05µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.00     47.3±0.03µs        ? ?/sec    1.01     47.8±0.02µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.00     91.9±0.13µs        ? ?/sec    1.00     92.2±0.12µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.00     51.3±0.04µs        ? ?/sec    1.00     51.4±0.06µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.00      9.9±0.01µs        ? ?/sec    1.00      9.9±0.02µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.00     71.8±0.09µs        ? ?/sec    1.01     72.2±0.10µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.00     13.6±0.04µs        ? ?/sec    1.01     13.8±0.03µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed increasing value                                               1.00     40.2±0.15µs        ? ?/sec    1.00     40.4±0.15µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed single value                                                   1.00     37.1±0.20µs        ? ?/sec    1.01     37.5±0.20µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip increasing value                                          1.00     30.9±0.11µs        ? ?/sec    1.01     31.0±0.10µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip single value                                              1.00     26.3±0.10µs        ? ?/sec    1.01     26.4±0.12µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip stepped increasing value                                  1.02     48.5±0.05µs        ? ?/sec    1.00     47.7±0.06µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.00     60.0±0.10µs        ? ?/sec    1.01     60.7±0.08µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.00     71.1±0.06µs        ? ?/sec    1.00     71.4±0.17µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.00     62.2±0.07µs        ? ?/sec    1.01     62.9±0.17µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed stepped increasing value                                       1.02     63.3±0.09µs        ? ?/sec    1.00     61.8±0.12µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.00     77.1±0.13µs        ? ?/sec    1.02     78.7±0.25µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.00    114.7±0.08µs        ? ?/sec    1.01    115.8±0.30µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.00     81.0±0.12µs        ? ?/sec    1.02     82.7±0.23µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.01     46.5±0.04µs        ? ?/sec    1.00     46.2±0.05µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.00     98.9±0.09µs        ? ?/sec    1.00     99.0±0.10µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.00     50.6±0.04µs        ? ?/sec    1.00     50.6±0.05µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.00     49.5±0.02µs        ? ?/sec    1.00     49.3±0.05µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.00    102.1±0.07µs        ? ?/sec    1.00    102.1±0.06µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.00     53.2±0.04µs        ? ?/sec    1.00     53.2±0.17µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.00     16.5±0.04µs        ? ?/sec    1.03     17.0±0.04µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.00     84.3±0.05µs        ? ?/sec    1.00     84.7±0.17µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.00     19.9±0.02µs        ? ?/sec    1.01     20.1±0.06µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed increasing value                                                1.00     52.2±0.37µs        ? ?/sec    1.00     52.2±0.52µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed single value                                                    1.00     43.6±0.46µs        ? ?/sec    1.00     43.7±0.36µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip increasing value                                           1.00     39.4±0.30µs        ? ?/sec    1.01     39.9±0.25µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip single value                                               1.00     31.6±0.27µs        ? ?/sec    1.00     31.6±0.23µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip stepped increasing value                                   1.00     56.1±0.07µs        ? ?/sec    1.00     56.0±0.10µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.01     71.1±0.07µs        ? ?/sec    1.00     70.2±0.37µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.01     72.2±0.10µs        ? ?/sec    1.00     71.5±0.20µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.01     73.3±0.07µs        ? ?/sec    1.00     72.2±0.36µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed stepped increasing value                                        1.01     72.9±0.13µs        ? ?/sec    1.00     72.3±0.12µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.03     91.4±0.07µs        ? ?/sec    1.00     88.7±0.70µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.01    113.7±0.15µs        ? ?/sec    1.00    112.6±0.33µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.03     95.1±0.11µs        ? ?/sec    1.00     92.4±0.70µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.00     20.7±0.06µs        ? ?/sec    1.00     20.8±0.04µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.00     76.8±0.12µs        ? ?/sec    1.00     77.1±0.14µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.00     24.5±0.04µs        ? ?/sec    1.00     24.6±0.04µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.00     50.8±0.04µs        ? ?/sec    1.01     51.3±0.04µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.00     94.7±0.12µs        ? ?/sec    1.00     94.8±0.55µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.00     54.6±0.05µs        ? ?/sec    1.01     55.3±0.07µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.00     13.5±0.03µs        ? ?/sec    1.00     13.5±0.04µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.00     74.5±0.14µs        ? ?/sec    1.00     74.5±0.09µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.00     17.3±0.04µs        ? ?/sec    1.02     17.6±0.03µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.00      3.9±0.01ms        ? ?/sec    1.00      3.9±0.01ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.00      7.0±0.03ms        ? ?/sec    1.00      7.0±0.04ms        ? ?/sec
arrow_array_reader/StringArray/const delta byte array encoded, mandatory, no NULLs                         1.00    503.4±1.15µs        ? ?/sec    1.05    527.2±6.24µs        ? ?/sec
arrow_array_reader/StringArray/const delta length byte array encoded, mandatory, no NULLs                  1.00    211.0±0.78µs        ? ?/sec    1.01    213.3±0.69µs        ? ?/sec
arrow_array_reader/StringArray/const prefix delta byte array encoded, mandatory, no NULLs                  1.00   740.9±39.51µs        ? ?/sec    1.05   775.9±33.49µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.00    277.1±0.31µs        ? ?/sec    1.00    278.4±0.39µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.00    380.6±0.63µs        ? ?/sec    1.02    387.9±0.76µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.00    274.6±0.16µs        ? ?/sec    1.01    278.3±0.21µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.00    457.7±5.86µs        ? ?/sec    1.03    470.1±7.07µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.00    492.3±4.67µs        ? ?/sec    1.00    493.5±2.51µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.00    462.3±5.00µs        ? ?/sec    1.03    477.5±7.66µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.00    255.8±0.98µs        ? ?/sec    1.00    256.5±0.78µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.00    283.0±1.52µs        ? ?/sec    1.01    284.6±1.52µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.00    260.9±0.83µs        ? ?/sec    1.00    261.0±0.85µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.00     79.5±0.06µs        ? ?/sec    1.00     79.6±0.03µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.00    107.9±0.11µs        ? ?/sec    1.01    109.0±0.08µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.00     83.4±0.07µs        ? ?/sec    1.00     83.5±0.04µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.00    214.4±0.33µs        ? ?/sec    1.02    218.6±0.29µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.00    183.8±3.24µs        ? ?/sec    1.00    183.4±0.25µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.00    225.4±0.28µs        ? ?/sec    1.01    227.3±0.27µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed increasing value                                              1.00     52.3±0.38µs        ? ?/sec    1.00     52.4±0.46µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed single value                                                  1.00     43.8±0.43µs        ? ?/sec    1.00     43.9±0.38µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip increasing value                                         1.00     39.6±0.33µs        ? ?/sec    1.00     39.5±0.33µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip single value                                             1.00     31.6±0.29µs        ? ?/sec    1.00     31.7±0.25µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip stepped increasing value                                 1.00     56.2±0.07µs        ? ?/sec    1.00     56.3±0.06µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.03     75.5±0.06µs        ? ?/sec    1.00     73.2±0.15µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.01     75.3±0.08µs        ? ?/sec    1.00     74.9±0.12µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.03     77.6±0.06µs        ? ?/sec    1.00     75.4±0.14µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed stepped increasing value                                      1.00     73.0±0.14µs        ? ?/sec    1.00     72.9±0.16µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.05     97.2±0.15µs        ? ?/sec    1.00     92.5±0.30µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.01    116.9±0.19µs        ? ?/sec    1.00    116.2±0.23µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.05    100.8±0.12µs        ? ?/sec    1.00     96.2±0.29µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     21.0±0.03µs        ? ?/sec    1.00     21.0±0.03µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.00     77.3±0.10µs        ? ?/sec    1.00     77.6±0.17µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.00     24.7±0.02µs        ? ?/sec    1.00     24.7±0.06µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.00     51.1±0.03µs        ? ?/sec    1.00     51.3±0.04µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.00     94.9±0.15µs        ? ?/sec    1.00     94.9±0.13µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.00     54.8±0.02µs        ? ?/sec    1.01     55.3±0.04µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.00     13.8±0.03µs        ? ?/sec    1.01     13.9±0.03µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.00     74.2±0.10µs        ? ?/sec    1.00     74.1±0.11µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.00     17.5±0.03µs        ? ?/sec    1.02     17.8±0.03µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed increasing value                                              1.00     49.1±0.32µs        ? ?/sec    1.03     50.3±0.37µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed single value                                                  1.00     40.8±0.45µs        ? ?/sec    1.02     41.6±0.18µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip increasing value                                         1.00     38.0±0.31µs        ? ?/sec    1.01     38.5±0.25µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip single value                                             1.00     29.9±0.29µs        ? ?/sec    1.02     30.4±0.13µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip stepped increasing value                                 1.00     54.6±0.08µs        ? ?/sec    1.00     54.4±0.06µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.01     69.8±0.21µs        ? ?/sec    1.00     69.4±0.35µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.00     70.9±0.12µs        ? ?/sec    1.00     70.9±0.19µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.00     71.7±0.24µs        ? ?/sec    1.00     71.5±0.37µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed stepped increasing value                                      1.01     69.9±0.13µs        ? ?/sec    1.00     69.4±0.09µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.01     87.8±0.33µs        ? ?/sec    1.00     86.9±0.68µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.00    110.8±0.22µs        ? ?/sec    1.00    110.6±0.29µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.01     91.6±0.33µs        ? ?/sec    1.00     90.8±0.74µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     17.4±0.02µs        ? ?/sec    1.00     17.5±0.02µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.01     74.8±0.21µs        ? ?/sec    1.00     74.2±0.10µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.00     21.0±0.03µs        ? ?/sec    1.01     21.2±0.03µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.00     47.5±0.03µs        ? ?/sec    1.01     47.9±0.02µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.00     91.7±0.15µs        ? ?/sec    1.00     91.7±0.14µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.00     51.2±0.06µs        ? ?/sec    1.01     51.9±0.04µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.00      9.9±0.02µs        ? ?/sec    1.01     10.1±0.03µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.00     71.3±0.10µs        ? ?/sec    1.01     71.7±0.08µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.00     13.5±0.01µs        ? ?/sec    1.03     13.9±0.04µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed increasing value                                              1.00     40.6±0.16µs        ? ?/sec    1.01     40.9±0.15µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed single value                                                  1.00     37.4±0.19µs        ? ?/sec    1.01     37.8±0.20µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip increasing value                                         1.00     30.9±0.11µs        ? ?/sec    1.01     31.3±0.09µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip single value                                             1.00     26.4±0.10µs        ? ?/sec    1.00     26.5±0.12µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip stepped increasing value                                 1.02     48.6±0.06µs        ? ?/sec    1.00     47.8±0.06µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.00     60.4±0.08µs        ? ?/sec    1.01     60.9±0.08µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.00     71.1±0.06µs        ? ?/sec    1.00     71.2±0.06µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.00     62.2±0.09µs        ? ?/sec    1.02     63.4±0.08µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed stepped increasing value                                      1.02     63.5±0.09µs        ? ?/sec    1.00     62.0±0.11µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.00     77.3±0.13µs        ? ?/sec    1.02     78.7±0.14µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.00    114.9±0.12µs        ? ?/sec    1.01    115.7±0.13µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.00     81.2±0.12µs        ? ?/sec    1.02     82.8±0.14µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.01     46.2±0.02µs        ? ?/sec    1.00     45.7±0.05µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.00     98.9±0.05µs        ? ?/sec    1.01     99.6±0.07µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.01     50.5±0.03µs        ? ?/sec    1.00     50.0±0.04µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.00     49.4±0.03µs        ? ?/sec    1.00     49.3±0.16µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.00    101.8±0.09µs        ? ?/sec    1.01    102.9±0.10µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.00     53.1±0.03µs        ? ?/sec    1.01     53.6±0.11µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.00     16.5±0.02µs        ? ?/sec    1.03     17.0±0.03µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.00     84.9±0.05µs        ? ?/sec    1.00     84.5±0.06µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.00     20.1±0.02µs        ? ?/sec    1.02     20.5±0.03µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed increasing value                                               1.03     53.4±0.34µs        ? ?/sec    1.00     51.8±0.49µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed single value                                                   1.03     44.6±0.16µs        ? ?/sec    1.00     43.4±0.48µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip increasing value                                          1.02     40.1±0.25µs        ? ?/sec    1.00     39.4±0.34µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip single value                                              1.01     31.8±0.13µs        ? ?/sec    1.00     31.5±0.33µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip stepped increasing value                                  1.00     56.0±0.09µs        ? ?/sec    1.00     56.1±0.11µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.03     74.5±0.05µs        ? ?/sec    1.00     72.1±0.34µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.01     74.1±0.22µs        ? ?/sec    1.00     73.3±0.17µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.03     76.8±0.19µs        ? ?/sec    1.00     74.4±0.34µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed stepped increasing value                                       1.00     72.6±0.15µs        ? ?/sec    1.00     72.6±0.14µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.05     95.8±0.11µs        ? ?/sec    1.00     91.0±0.67µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.02    116.5±0.18µs        ? ?/sec    1.00    114.0±0.33µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.05     99.7±0.09µs        ? ?/sec    1.00     94.8±0.64µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     20.7±0.04µs        ? ?/sec    1.00     20.8±0.03µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.00     76.6±0.11µs        ? ?/sec    1.01     77.6±0.11µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.01     24.5±0.02µs        ? ?/sec    1.00     24.4±0.02µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.00     50.8±0.04µs        ? ?/sec    1.01     51.2±0.03µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.01     95.4±0.18µs        ? ?/sec    1.00     94.9±0.15µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.00     54.3±0.05µs        ? ?/sec    1.01     54.8±0.07µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.02     13.8±0.03µs        ? ?/sec    1.00     13.5±0.03µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.03     76.0±0.09µs        ? ?/sec    1.00     73.6±0.11µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.00     17.2±0.02µs        ? ?/sec    1.00     17.3±0.03µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, half NULLs            1.00     71.5±0.11µs        ? ?/sec    1.01     71.9±0.08µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, no NULLs              1.00     13.9±0.04µs        ? ?/sec    1.00     13.9±0.03µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, half NULLs             1.00    132.4±0.19µs        ? ?/sec    1.00    132.7±0.13µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, no NULLs               1.00     65.6±0.07µs        ? ?/sec    1.00     65.9±0.07µs        ? ?/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 2815.6s
Peak memory 4.3 GiB
Avg memory 4.2 GiB
CPU user 2812.9s
CPU sys 1.0s
Peak spill 0 B

branch

Metric Value
Wall time 2835.6s
Peak memory 4.3 GiB
Avg memory 4.2 GiB
CPU user 2833.2s
CPU sys 0.5s
Peak spill 0 B

File an issue against this benchmark runner

@etseidl
Copy link
Copy Markdown
Contributor

etseidl commented Apr 22, 2026

run benchmark arrow_reader

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4293079981-1729-xdjgh 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing pr/terminal-skip (1a8cdf3) to de11d9c (merge-base) diff
BENCH_NAME=arrow_reader
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader
BENCH_FILTER=
Results will be posted here when complete


File an issue against this benchmark runner

@sahuagin
Copy link
Copy Markdown
Contributor Author

Note on benchmark variance: These results were collected on a non-isolated machine without CPU frequency pinning. Small variances of ±5% on non-bw=0 paths (particularly mandatory/optional, no NULLs) are consistent with measurement noise rather than real regressions — the changes to those code paths are additive only. The #[cold] annotation on the terminal path (PR #9787) was added specifically to prevent icache pressure on the non-terminal hot path. Happy to share raw criterion output or rerun on a more controlled setup if helpful.

@sahuagin sahuagin marked this pull request as ready for review April 22, 2026 03:09
@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark completed (GKE) | trigger

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

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

group                                                                                                      main                                   pr_terminal-skip
-----                                                                                                      ----                                   ----------------
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.00    833.6±8.33µs        ? ?/sec    1.00    832.5±9.45µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.00    945.9±4.77µs        ? ?/sec    1.00    945.2±4.34µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.00    838.8±7.75µs        ? ?/sec    1.00    836.7±9.45µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.00    284.4±0.23µs        ? ?/sec    1.00    284.5±0.22µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.00    389.3±0.48µs        ? ?/sec    1.00    390.1±0.64µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.00    287.0±0.30µs        ? ?/sec    1.00    288.0±0.25µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.01    411.0±6.58µs        ? ?/sec    1.00    406.5±6.03µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.00    467.5±3.54µs        ? ?/sec    1.00    466.9±3.65µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.00    412.0±6.10µs        ? ?/sec    1.00    413.6±3.67µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.00     79.7±0.06µs        ? ?/sec    1.00     79.7±0.07µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.00    107.6±0.11µs        ? ?/sec    1.01    108.6±0.40µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.00     83.4±0.09µs        ? ?/sec    1.00     83.3±0.10µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.00    146.9±0.91µs        ? ?/sec    1.00    146.5±0.77µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.01    143.8±1.00µs        ? ?/sec    1.00    141.7±0.68µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.00    145.0±0.24µs        ? ?/sec    1.00    144.3±0.39µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.00    152.0±0.39µs        ? ?/sec    1.02    155.2±0.80µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.00    971.7±0.79µs        ? ?/sec    1.00    970.8±0.45µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.00    680.9±0.62µs        ? ?/sec    1.00    681.0±0.77µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.06  1040.4±47.09µs        ? ?/sec    1.00    978.0±2.78µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.00    193.8±0.36µs        ? ?/sec    1.00    193.7±0.28µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.00    306.0±0.39µs        ? ?/sec    1.01    308.3±0.47µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.01    200.1±0.55µs        ? ?/sec    1.00    198.0±0.24µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.00    135.9±0.35µs        ? ?/sec    1.00    136.4±0.16µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.01    189.6±0.13µs        ? ?/sec    1.00    187.2±0.22µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.00    140.2±1.89µs        ? ?/sec    1.00    140.4±1.99µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.00     61.3±0.06µs        ? ?/sec    1.00     61.4±0.07µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.02    151.3±0.16µs        ? ?/sec    1.00    148.9±0.13µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.01     64.9±0.07µs        ? ?/sec    1.00     64.1±0.05µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.00    807.6±0.86µs        ? ?/sec    1.00    806.1±0.54µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.00    523.8±0.37µs        ? ?/sec    1.00    522.9±0.33µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.01    820.3±0.78µs        ? ?/sec    1.00    811.6±0.51µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.00     30.9±0.07µs        ? ?/sec    1.01     31.2±0.06µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.00    147.2±0.18µs        ? ?/sec    1.00    146.8±0.23µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.00     35.2±0.05µs        ? ?/sec    1.01     35.6±0.07µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.00     81.4±0.16µs        ? ?/sec    1.06     86.0±0.16µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.01    134.8±0.16µs        ? ?/sec    1.00    133.3±0.12µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.00     84.6±0.14µs        ? ?/sec    1.00     84.5±0.16µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.00      6.6±0.01µs        ? ?/sec    1.01      6.7±0.03µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.01     96.7±0.08µs        ? ?/sec    1.00     95.7±0.10µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.05     10.8±0.04µs        ? ?/sec    1.00     10.3±0.04µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.00    159.8±0.33µs        ? ?/sec    1.12   179.2±14.28µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.00    207.4±0.21µs        ? ?/sec    1.00    207.9±0.17µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.00    162.8±0.28µs        ? ?/sec    1.00    162.4±0.54µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.00      9.5±0.03µs        ? ?/sec    1.00      9.6±0.01µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.00    131.9±0.18µs        ? ?/sec    1.01    132.6±0.13µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.01     13.4±0.01µs        ? ?/sec    1.00     13.3±0.04µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.04   334.6±15.49µs        ? ?/sec    1.00    320.6±0.41µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.00    281.0±0.22µs        ? ?/sec    1.01    283.3±0.32µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.00    322.8±0.42µs        ? ?/sec    1.09    350.4±8.53µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.00     15.8±0.03µs        ? ?/sec    1.04     16.4±0.02µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.00    130.9±0.10µs        ? ?/sec    1.01    132.4±0.15µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.00     19.7±0.06µs        ? ?/sec    1.00     19.7±0.05µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed increasing value                                    1.02     86.6±0.58µs        ? ?/sec    1.00     84.9±0.27µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed single value                                        1.03     78.1±0.21µs        ? ?/sec    1.00     75.5±0.26µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip increasing value                               1.02     57.0±0.41µs        ? ?/sec    1.00     55.9±0.17µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip single value                                   1.04     49.1±0.16µs        ? ?/sec    1.00     47.2±0.16µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip stepped increasing value                       1.01     73.1±0.09µs        ? ?/sec    1.00     72.2±0.20µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.02     88.5±0.16µs        ? ?/sec    1.00     86.6±0.04µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.01     89.3±0.14µs        ? ?/sec    1.00     88.4±0.10µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.02     90.5±0.17µs        ? ?/sec    1.00     88.8±0.04µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed stepped increasing value                            1.02    106.1±0.15µs        ? ?/sec    1.00    103.8±0.15µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.02    124.6±0.46µs        ? ?/sec    1.00    122.5±0.21µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.01    147.1±0.27µs        ? ?/sec    1.00    146.1±0.21µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.02    128.5±0.27µs        ? ?/sec    1.00    126.4±0.11µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     53.8±0.05µs        ? ?/sec    1.00     53.9±0.04µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    110.2±0.11µs        ? ?/sec    1.00    110.3±0.10µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00     57.3±0.05µs        ? ?/sec    1.01     57.5±0.04µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00     83.9±0.04µs        ? ?/sec    1.00     83.9±0.06µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    127.6±0.16µs        ? ?/sec    1.00    128.1±0.14µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00     87.5±0.05µs        ? ?/sec    1.00     87.6±0.07µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.02     47.7±0.47µs        ? ?/sec    1.00     46.9±0.04µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.00    107.5±0.12µs        ? ?/sec    1.00    107.7±0.12µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.00     50.5±0.08µs        ? ?/sec    1.00     50.6±0.03µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed increasing value                                    1.02     77.5±0.17µs        ? ?/sec    1.00     76.2±0.15µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed single value                                        1.02     74.1±0.20µs        ? ?/sec    1.00     72.5±0.20µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip increasing value                               1.02     50.0±0.13µs        ? ?/sec    1.00     49.2±0.12µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip single value                                   1.03     45.2±0.09µs        ? ?/sec    1.00     43.8±0.07µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip stepped increasing value                       1.03     67.7±0.08µs        ? ?/sec    1.00     65.8±0.10µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.02     78.9±0.08µs        ? ?/sec    1.00     77.8±0.21µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.02     90.8±0.09µs        ? ?/sec    1.00     89.1±0.06µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.02     81.2±0.09µs        ? ?/sec    1.00     80.0±0.06µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed stepped increasing value                            1.02    100.8±0.95µs        ? ?/sec    1.00     98.4±0.37µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.02    114.1±0.12µs        ? ?/sec    1.00    112.3±0.12µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.00    151.8±0.13µs        ? ?/sec    1.00    151.5±1.05µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.01    117.8±0.11µs        ? ?/sec    1.00    116.4±0.11µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     82.7±0.12µs        ? ?/sec    1.00     82.9±0.08µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    135.6±0.13µs        ? ?/sec    1.00    135.8±0.08µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00     86.7±0.12µs        ? ?/sec    1.01     87.3±0.08µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00     86.4±0.08µs        ? ?/sec    1.00     86.6±0.05µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    139.1±0.22µs        ? ?/sec    1.00    139.0±0.17µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00     90.0±0.06µs        ? ?/sec    1.00     90.4±0.06µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.00     54.1±0.07µs        ? ?/sec    1.00     54.3±0.08µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.00    120.5±0.09µs        ? ?/sec    1.00    121.0±0.14µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.00     58.0±0.06µs        ? ?/sec    1.00     58.3±0.10µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed increasing value                                               1.06     52.5±0.35µs        ? ?/sec    1.00     49.7±0.22µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed single value                                                   1.06     44.1±0.51µs        ? ?/sec    1.00     41.7±0.13µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip increasing value                                          1.04     39.8±0.20µs        ? ?/sec    1.00     38.1±0.14µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip single value                                              1.06     31.7±0.28µs        ? ?/sec    1.00     29.8±0.07µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip stepped increasing value                                  1.02     56.3±0.07µs        ? ?/sec    1.00     55.0±0.09µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.03     71.5±0.14µs        ? ?/sec    1.00     69.7±0.10µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.02     72.7±0.12µs        ? ?/sec    1.00     71.4±0.07µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.02     73.4±0.14µs        ? ?/sec    1.00     71.7±0.13µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed stepped increasing value                                       1.03     73.1±0.15µs        ? ?/sec    1.00     70.9±0.17µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.03     91.6±0.24µs        ? ?/sec    1.00     89.3±0.12µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.02    114.3±0.22µs        ? ?/sec    1.00    112.2±0.15µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.02     95.2±0.21µs        ? ?/sec    1.00     93.1±0.13µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.01     21.1±0.03µs        ? ?/sec    1.00     20.9±0.03µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.00     77.3±0.13µs        ? ?/sec    1.00     77.0±0.11µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.00     24.6±0.02µs        ? ?/sec    1.00     24.6±0.04µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.00     50.9±0.04µs        ? ?/sec    1.00     51.0±0.03µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.00     95.3±0.16µs        ? ?/sec    1.00     94.9±0.15µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.00     54.9±0.04µs        ? ?/sec    1.00     54.7±0.05µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.03     14.2±0.02µs        ? ?/sec    1.00     13.8±0.02µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.00     74.6±0.12µs        ? ?/sec    1.00     74.4±0.10µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.00     17.5±0.03µs        ? ?/sec    1.01     17.6±0.03µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed increasing value                                               1.08     50.1±0.51µs        ? ?/sec    1.00     46.4±0.21µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed single value                                                   1.06     41.3±0.24µs        ? ?/sec    1.00     39.1±0.31µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip increasing value                                          1.05     38.3±0.39µs        ? ?/sec    1.00     36.4±0.20µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip single value                                              1.06     30.3±0.13µs        ? ?/sec    1.00     28.5±0.18µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip stepped increasing value                                  1.03     54.3±0.08µs        ? ?/sec    1.00     52.6±0.10µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.03     69.8±0.30µs        ? ?/sec    1.00     68.0±0.08µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.01     71.3±0.12µs        ? ?/sec    1.00     70.7±0.10µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.02     71.9±0.16µs        ? ?/sec    1.00     70.4±0.09µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed stepped increasing value                                       1.03     69.3±0.14µs        ? ?/sec    1.00     67.0±0.19µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.02     87.8±0.19µs        ? ?/sec    1.00     85.8±0.10µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.02    111.7±0.40µs        ? ?/sec    1.00    109.5±0.19µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.02     91.7±0.19µs        ? ?/sec    1.00     89.7±0.10µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     17.4±0.02µs        ? ?/sec    1.00     17.4±0.08µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.00     74.5±0.10µs        ? ?/sec    1.00     74.8±0.30µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.00     20.9±0.02µs        ? ?/sec    1.00     20.9±0.07µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.00     47.4±0.02µs        ? ?/sec    1.00     47.1±0.10µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.00     91.8±0.14µs        ? ?/sec    1.00     91.8±0.18µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.00     51.3±0.04µs        ? ?/sec    1.00     51.1±0.15µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.00      9.9±0.03µs        ? ?/sec    1.01     10.0±0.05µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.00     71.7±0.11µs        ? ?/sec    1.01     72.2±0.10µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.00     13.6±0.05µs        ? ?/sec    1.01     13.8±0.04µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed increasing value                                               1.01     40.3±0.15µs        ? ?/sec    1.00     39.9±0.09µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed single value                                                   1.03     37.5±0.20µs        ? ?/sec    1.00     36.6±0.16µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip increasing value                                          1.01     30.9±0.12µs        ? ?/sec    1.00     30.5±0.05µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip single value                                              1.04     26.2±0.15µs        ? ?/sec    1.00     25.3±0.09µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip stepped increasing value                                  1.03     48.5±0.07µs        ? ?/sec    1.00     47.0±0.06µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.02     60.3±0.10µs        ? ?/sec    1.00     59.1±0.09µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.01     71.3±0.18µs        ? ?/sec    1.00     70.5±0.10µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.03     62.8±0.11µs        ? ?/sec    1.00     61.1±0.16µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed stepped increasing value                                       1.04     63.2±0.11µs        ? ?/sec    1.00     60.8±0.12µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.02     77.4±0.18µs        ? ?/sec    1.00     76.2±0.29µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.01    114.9±0.10µs        ? ?/sec    1.00    114.0±0.12µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.01     81.2±0.16µs        ? ?/sec    1.00     80.1±0.24µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     45.5±0.05µs        ? ?/sec    1.01     45.7±0.04µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.00     99.0±0.10µs        ? ?/sec    1.00     98.9±0.08µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.00     49.5±0.07µs        ? ?/sec    1.01     50.0±0.04µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.00     49.7±0.04µs        ? ?/sec    1.00     50.0±0.03µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.01    102.4±0.10µs        ? ?/sec    1.00    101.9±0.09µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.00     53.2±0.12µs        ? ?/sec    1.00     53.4±0.09µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.03     17.0±0.03µs        ? ?/sec    1.00     16.5±0.04µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.01     84.4±0.07µs        ? ?/sec    1.00     83.8±0.16µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.00     20.0±0.04µs        ? ?/sec    1.01     20.1±0.07µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed increasing value                                                1.05     52.5±0.38µs        ? ?/sec    1.00     49.8±0.14µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed single value                                                    1.06     43.7±0.50µs        ? ?/sec    1.00     41.3±0.15µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip increasing value                                           1.04     39.5±0.30µs        ? ?/sec    1.00     38.1±0.10µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip single value                                               1.06     31.6±0.25µs        ? ?/sec    1.00     29.7±0.11µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip stepped increasing value                                   1.03     56.2±0.09µs        ? ?/sec    1.00     54.6±0.13µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.03     71.3±0.07µs        ? ?/sec    1.00     69.5±0.08µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.01     72.3±0.10µs        ? ?/sec    1.00     71.3±0.09µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.02     73.4±0.07µs        ? ?/sec    1.00     71.8±0.08µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed stepped increasing value                                        1.03     73.1±0.15µs        ? ?/sec    1.00     70.8±0.17µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.02     91.4±0.09µs        ? ?/sec    1.00     89.5±0.12µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.02    114.0±0.16µs        ? ?/sec    1.00    112.1±0.12µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.02     95.2±0.11µs        ? ?/sec    1.00     93.2±0.11µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.00     20.7±0.03µs        ? ?/sec    1.01     20.8±0.05µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.00     77.0±0.12µs        ? ?/sec    1.00     77.0±0.14µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.01     24.5±0.03µs        ? ?/sec    1.00     24.4±0.05µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.00     50.9±0.05µs        ? ?/sec    1.00     50.7±0.16µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.00     94.7±0.18µs        ? ?/sec    1.00     94.8±0.36µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.01     54.7±0.04µs        ? ?/sec    1.00     54.4±0.14µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.00     13.6±0.03µs        ? ?/sec    1.00     13.6±0.03µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.01     74.6±0.16µs        ? ?/sec    1.00     73.8±0.10µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.00     17.3±0.02µs        ? ?/sec    1.01     17.5±0.03µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.00      3.9±0.01ms        ? ?/sec    1.00      3.9±0.01ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.00      7.1±0.05ms        ? ?/sec    1.00      7.1±0.03ms        ? ?/sec
arrow_array_reader/StringArray/const delta byte array encoded, mandatory, no NULLs                         1.00    515.2±1.62µs        ? ?/sec    1.01    518.8±1.26µs        ? ?/sec
arrow_array_reader/StringArray/const delta length byte array encoded, mandatory, no NULLs                  1.05    220.7±4.78µs        ? ?/sec    1.00    211.1±1.00µs        ? ?/sec
arrow_array_reader/StringArray/const prefix delta byte array encoded, mandatory, no NULLs                  1.02   789.5±34.66µs        ? ?/sec    1.00   770.8±26.89µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.00    277.0±0.41µs        ? ?/sec    1.02    283.7±0.21µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.00    387.2±1.31µs        ? ?/sec    1.01    391.4±0.91µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.00    281.1±0.17µs        ? ?/sec    1.02    287.7±0.32µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.04    465.9±6.74µs        ? ?/sec    1.00    445.9±6.53µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.00    493.7±4.42µs        ? ?/sec    1.00    491.8±4.41µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.04    469.2±6.74µs        ? ?/sec    1.00    450.8±6.60µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.00    254.8±0.74µs        ? ?/sec    1.00    255.7±0.95µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.00    283.0±1.72µs        ? ?/sec    1.00    282.5±1.34µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.00    258.8±0.74µs        ? ?/sec    1.00    259.6±1.00µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.00     79.9±0.11µs        ? ?/sec    1.00     79.8±0.04µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.00    108.0±0.07µs        ? ?/sec    1.00    107.7±0.12µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.00     83.5±0.11µs        ? ?/sec    1.00     83.3±0.05µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.01    218.3±0.92µs        ? ?/sec    1.00    215.6±0.23µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.00    181.4±1.27µs        ? ?/sec    1.03    187.1±6.97µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.00    225.0±0.31µs        ? ?/sec    1.00    225.8±0.48µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed increasing value                                              1.05     52.4±0.37µs        ? ?/sec    1.00     49.9±0.23µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed single value                                                  1.06     43.8±0.47µs        ? ?/sec    1.00     41.4±0.13µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip increasing value                                         1.04     39.6±0.28µs        ? ?/sec    1.00     37.9±0.10µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip single value                                             1.06     31.6±0.26µs        ? ?/sec    1.00     29.7±0.07µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip stepped increasing value                                 1.03     56.3±0.07µs        ? ?/sec    1.00     54.7±0.08µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.01     75.5±0.07µs        ? ?/sec    1.00     74.7±0.15µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.02     75.5±0.12µs        ? ?/sec    1.00     74.2±0.13µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.02     78.2±0.09µs        ? ?/sec    1.00     76.7±0.10µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed stepped increasing value                                      1.03     73.0±0.14µs        ? ?/sec    1.00     70.8±0.13µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.01     97.3±0.20µs        ? ?/sec    1.00     96.5±0.22µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.01    117.0±0.25µs        ? ?/sec    1.00    115.9±0.22µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.01    100.9±0.15µs        ? ?/sec    1.00     99.9±0.17µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.01     21.0±0.02µs        ? ?/sec    1.00     20.8±0.03µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.01     77.5±0.13µs        ? ?/sec    1.00     76.9±0.10µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.01     24.7±0.03µs        ? ?/sec    1.00     24.4±0.04µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.01     51.1±0.03µs        ? ?/sec    1.00     50.7±0.04µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.00     95.0±0.18µs        ? ?/sec    1.00     94.7±0.14µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.00     54.8±0.04µs        ? ?/sec    1.00     54.5±0.04µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.00     13.7±0.04µs        ? ?/sec    1.01     13.9±0.03µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.00     74.4±0.14µs        ? ?/sec    1.01     74.8±0.51µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.00     17.5±0.03µs        ? ?/sec    1.02     17.8±0.05µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed increasing value                                              1.02     49.2±0.32µs        ? ?/sec    1.00     48.5±0.39µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed single value                                                  1.04     40.8±0.50µs        ? ?/sec    1.00     39.1±0.23µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip increasing value                                         1.02     38.0±0.26µs        ? ?/sec    1.00     37.1±0.21µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip single value                                             1.05     29.9±0.27µs        ? ?/sec    1.00     28.5±0.10µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip stepped increasing value                                 1.03     54.6±0.07µs        ? ?/sec    1.00     52.8±0.08µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.02     69.8±0.22µs        ? ?/sec    1.00     68.2±0.05µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.01     71.0±0.13µs        ? ?/sec    1.00     69.9±0.08µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.02     71.9±0.21µs        ? ?/sec    1.00     70.3±0.05µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed stepped increasing value                                      1.03     69.7±0.18µs        ? ?/sec    1.00     67.5±0.13µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.02     87.8±0.38µs        ? ?/sec    1.00     86.0±0.07µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.01    111.1±0.24µs        ? ?/sec    1.00    110.0±0.19µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.02     91.8±0.35µs        ? ?/sec    1.00     89.8±0.09µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.01     17.5±0.02µs        ? ?/sec    1.00     17.4±0.03µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.01     74.8±0.11µs        ? ?/sec    1.00     74.2±0.09µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.01     21.1±0.02µs        ? ?/sec    1.00     20.9±0.05µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.01     47.7±0.04µs        ? ?/sec    1.00     47.3±0.04µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.00     91.6±0.16µs        ? ?/sec    1.00     91.2±0.14µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.00     51.1±0.02µs        ? ?/sec    1.00     51.0±0.03µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.00     10.2±0.03µs        ? ?/sec    1.00     10.2±0.01µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.01     72.1±0.10µs        ? ?/sec    1.00     71.5±0.11µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.00     13.7±0.04µs        ? ?/sec    1.02     14.0±0.05µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed increasing value                                              1.01     41.0±0.14µs        ? ?/sec    1.00     40.5±0.14µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed single value                                                  1.03     38.0±0.19µs        ? ?/sec    1.00     36.9±0.16µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip increasing value                                         1.02     31.0±0.13µs        ? ?/sec    1.00     30.6±0.09µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip single value                                             1.03     26.6±0.14µs        ? ?/sec    1.00     25.7±0.12µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip stepped increasing value                                 1.03     48.6±0.06µs        ? ?/sec    1.00     47.0±0.15µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.02     60.1±0.10µs        ? ?/sec    1.00     59.2±0.06µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.00     70.9±0.08µs        ? ?/sec    1.00     70.7±0.12µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.01     62.2±0.09µs        ? ?/sec    1.00     61.3±0.04µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed stepped increasing value                                      1.04     63.5±0.10µs        ? ?/sec    1.00     61.1±0.22µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.02     77.3±0.13µs        ? ?/sec    1.00     76.1±0.13µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.00    114.9±0.12µs        ? ?/sec    1.00    114.6±0.14µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.01     81.3±0.11µs        ? ?/sec    1.00     80.4±0.13µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     45.9±0.16µs        ? ?/sec    1.00     45.9±0.05µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.00     99.3±0.12µs        ? ?/sec    1.00     98.9±0.08µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.01     50.2±0.13µs        ? ?/sec    1.00     49.9±0.05µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.00     49.5±0.09µs        ? ?/sec    1.01     50.0±0.08µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.00    102.4±0.17µs        ? ?/sec    1.00    102.2±0.07µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.00     53.2±0.09µs        ? ?/sec    1.01     53.6±0.04µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.01     16.6±0.03µs        ? ?/sec    1.00     16.5±0.04µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.00     84.3±0.06µs        ? ?/sec    1.01     84.8±0.12µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.00     20.2±0.04µs        ? ?/sec    1.00     20.1±0.07µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed increasing value                                               1.03     53.5±0.33µs        ? ?/sec    1.00     51.7±0.33µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed single value                                                   1.05     44.5±0.18µs        ? ?/sec    1.00     42.3±0.35µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip increasing value                                          1.02     40.1±0.29µs        ? ?/sec    1.00     39.2±0.20µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip single value                                              1.05     31.9±0.14µs        ? ?/sec    1.00     30.4±0.15µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip stepped increasing value                                  1.03     56.0±0.09µs        ? ?/sec    1.00     54.5±0.10µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.02     74.5±0.06µs        ? ?/sec    1.00     73.3±0.12µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.00     74.0±0.10µs        ? ?/sec    1.00     73.6±0.12µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.01     76.7±0.08µs        ? ?/sec    1.00     75.8±0.17µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed stepped increasing value                                       1.03     72.6±0.16µs        ? ?/sec    1.00     70.5±0.13µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.02     95.8±0.12µs        ? ?/sec    1.00     94.4±0.09µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.01    116.4±0.23µs        ? ?/sec    1.00    114.9±0.18µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.01     99.8±0.11µs        ? ?/sec    1.00     98.3±0.13µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     20.7±0.03µs        ? ?/sec    1.00     20.6±0.03µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.00     76.9±0.10µs        ? ?/sec    1.01     78.0±0.16µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.02     24.7±0.04µs        ? ?/sec    1.00     24.3±0.07µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.01     50.9±0.04µs        ? ?/sec    1.00     50.7±0.07µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.01     96.0±0.33µs        ? ?/sec    1.00     95.0±0.17µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.00     54.4±0.15µs        ? ?/sec    1.00     54.2±0.07µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.01     13.7±0.02µs        ? ?/sec    1.00     13.7±0.08µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.03     76.2±0.18µs        ? ?/sec    1.00     73.8±0.23µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.00     17.4±0.02µs        ? ?/sec    1.00     17.4±0.08µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, half NULLs            1.00     72.0±0.09µs        ? ?/sec    1.00     72.0±0.13µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, no NULLs              1.01     13.8±0.02µs        ? ?/sec    1.00     13.7±0.04µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, half NULLs             1.00    132.7±0.18µs        ? ?/sec    1.00    132.6±0.12µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, no NULLs               1.00     65.5±0.05µs        ? ?/sec    1.00     65.4±0.05µs        ? ?/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 2835.6s
Peak memory 4.3 GiB
Avg memory 4.2 GiB
CPU user 2830.3s
CPU sys 1.0s
Peak spill 0 B

branch

Metric Value
Wall time 2825.6s
Peak memory 4.3 GiB
Avg memory 4.2 GiB
CPU user 2824.7s
CPU sys 0.4s
Peak spill 0 B

File an issue against this benchmark runner

Two changes from etseidl review on apache#9787:

1. Move the terminal-skip check before first_value consumption. The
   predicate simplifies to `to_skip >= self.values_left` (no need to
   account for a just-consumed first_value), and in the terminal case
   we never needed to read first_value anyway since it's being discarded.

2. Since we're discarding the entire page, there is no need to walk
   the miniblock state machine at all. The bit reader holds only one
   page worth of data and any subsequent decoder work goes through
   set_data() for a fresh page, so we can simply zero self.values_left
   and return. This removes the #[cold] helper entirely — the terminal
   path is now three lines inline.

The invalid-bit-width test now needs skip(31) instead of skip(32) so
the non-terminal path exercises check_bit_width and triggers the
expected error.

Net: -26 / +15 lines; #[cold] helper and its icache-pressure workaround
no longer needed.
@etseidl
Copy link
Copy Markdown
Contributor

etseidl commented Apr 22, 2026

I finally remembered why the optimization in this PR is not showing up in the benchmarks...skip_records in GenericColumnReader will already skip partial or whole pages that are contained within the range to be skipped.

                // If page has less rows than the remaining records to
                // be skipped, skip entire page
                let rows = metadata.num_rows.or_else(|| {
                    // If no repetition levels, num_levels == num_rows
                    self.rep_level_decoder
                        .is_none()
                        .then_some(metadata.num_levels)?
                });

                if let Some(rows) = rows {
                    if rows <= remaining_records {
                        self.page_reader.skip_next_page()?;
                        remaining_records -= rows;
                        continue;
                    }
                }

I think we need a column with repetition levels for this optimization to make an impact.

Take that back...farther down there's

            if self.num_buffered_values == self.num_decoded_values {
                // Exhausted buffered page - no need to advance other decoders
                continue;
            }

which will catch exhausted pages with repetition.

TL;DR I think we can close this PR.

@sahuagin
Copy link
Copy Markdown
Contributor Author

Here are the updated benchmark results on the simplified terminal-skip branch against the upstream baseline. Summary first, details below.

Summary

The targeted paths — bw=0 miniblocks and terminal page skips — show consistent improvements on the 8/16/32-bit integer types. Results on 64-bit types are mixed, likely dominated by measurement variance (see note at the end).

Wins on the bw=0 / terminal-skip paths (8/16/32-bit)

binary packed skip single value (all-same → bw=0 hot path):

Type Change
Int8Array −11.3%
UInt8Array −8.2%
Int16Array −6.9%
UInt16Array −9.9%
Int32Array −9.8%
UInt32Array −7.1%

binary packed skip stepped increasing value:

Type Change
Int8Array −8.7%
UInt8Array −5.7%
Int16Array −6.9%
UInt16Array −6.8%
Int32Array −5.5%
UInt32Array −4.8%
INT32/Decimal128Array −4.7%

binary packed skip, mandatory, no NULLs also improves on Int8 (−2.1%), Int16 (−5.2%), UInt16 (−3.1%).

Noise on unchanged paths

The optional, half NULLs and optional, no NULLs variants don't exercise the paths touched by this change (they go through the non-terminal decode path, unchanged). They show ±3–8% variance in both directions across types — UInt32Array regresses 4–8%, Int8Array improves 2–4%, Int16Array is essentially flat. Consistent with measurement noise on the non-isolated machine I flagged in the prior run.

Note on 64-bit variance

Int64Array/UInt64Array results on this run were noisier than the smaller types, including +6.3% / +2.1% on single value and +5.1% / +7.2% on increasing value. I ran the #9786 (bw=0 only) branch against the same baseline on the same hardware and saw the expected −18% to −21% wins on 64-bit for exactly those benchmarks, with similar wall-clock measurement conditions. That's good evidence the 64-bit numbers on this branch are measurement noise rather than a real regression — the underlying code paths that the bw=0 branch exercises are also exercised here, and the bw=0 branch's numbers are clean.

Happy to rerun on more controlled hardware if that'd be useful.

Measurement conditions

Same disclaimer as the prior run: non-isolated machine, no CPU frequency pinning, browser tabs and assorted background processes. For the paths I targeted the signal is large enough to read through the noise; for paths I didn't touch I'd ignore the numbers on principle.

@etseidl
Copy link
Copy Markdown
Contributor

etseidl commented Apr 22, 2026

As a test, I replaced the contents of skip_terminal with a panic. The benchmarks ran to completion, so clearly skip_terminal is not being called. Also, neither the benchmarks run here nor those I've run locally show any measurable improvement using the terminal skip introduced in this PR.

Thanks for the effort, but I don't think there is any win to be had here.

@sahuagin
Copy link
Copy Markdown
Contributor Author

Thanks @etseidl — the panic test is conclusive.

I traced skip_recordsskip_valuesDecoder::skip and confirmed the only path to a terminal skip at the decoder level is via a nested schema whose page metadata lacks num_rows. GenericColumnReader::skip_records (parquet/src/column/reader.rs:311-317) handles full-page skips via page_reader.skip_next_page(), which bypasses the decoder entirely, so the terminal condition to_skip >= self.values_left is never produced by standard callers.

scan_filtered in #9788 doesn't rescue this either — it has its own miniblock loop and doesn't call Decoder::skip.

The structural refactor from the earlier round of review (moving the fast-path before first_value.take() and just setting values_left = 0) is in place and correct; the optimization itself is simply unreachable from current callers. Rather than construct a synthetic benchmark for the narrow nested-missing-metadata corner, I'll withdraw this PR and leave the branch pr/terminal-skip available if a caller materializes in the future. #9786 and #9788 cover the work that is reachable today.

Closing.

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 performance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

parquet: avoid decode and heap allocation on terminal skip in DeltaBitPackDecoder

4 participants