Skip to content

Conversation

@alamb
Copy link
Contributor

@alamb alamb commented Jan 9, 2026

Which issue does this PR close?

Rationale for this change

Creating Arrays via ArrayData / make_array has overhead (at least 2 Vec allocations) compared to simply creating the arrays directly

What changes are included in this PR?

Update the parquet reader to create PrimitiveArrays directly

Are these changes tested?

By CI

Are there any user-facing changes?

@github-actions github-actions bot added the parquet Changes to the parquet crate label Jan 9, 2026
.consume_bitmap_buffer()
.map(|b| NullBuffer::new(BooleanBuffer::new(b, 0, len)));

let array_data = unsafe { array_data.build_unchecked() };
Copy link
Contributor Author

@alamb alamb Jan 9, 2026

Choose a reason for hiding this comment

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

the point is to avoid this ArrayData (and its Vecs) as we know here what types of arrays will be built

@alamb
Copy link
Contributor Author

alamb commented Jan 9, 2026

run benchmark arrow_reader arrow_reader_clickbench

@alamb-ghbot
Copy link

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

@alamb alamb marked this pull request as draft January 9, 2026 20:57
@alamb alamb force-pushed the alamb/less_primitive_allocations branch from 9091d97 to 4d06746 Compare January 9, 2026 21:31
@alamb alamb changed the title [Parquet] perf: Create PrimitiveArrays directly rather than via ArrayData [Parquet] perf: Create PrimitiveArrays directly rather than via ArrayData Jan 9, 2026
@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                                      alamb_less_primitive_allocations       main
-----                                                                                                      --------------------------------       ----
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.00   1258.5±3.91µs        ? ?/sec    1.01   1270.2±5.87µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.00   1276.0±9.32µs        ? ?/sec    1.01  1293.1±10.94µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.00   1268.7±4.45µs        ? ?/sec    1.01  1279.9±15.89µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.06    515.1±5.35µs        ? ?/sec    1.00    488.2±3.41µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.02    672.6±8.53µs        ? ?/sec    1.00    660.3±4.00µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.06    518.3±3.75µs        ? ?/sec    1.00   490.1±11.70µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.00    525.4±5.20µs        ? ?/sec    1.09    570.6±8.15µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.00   727.3±13.56µs        ? ?/sec    1.01   735.4±10.37µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.00    537.5±5.94µs        ? ?/sec    1.08    581.1±9.25µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.12    279.9±5.84µs        ? ?/sec    1.00    250.9±4.27µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.15    263.0±3.54µs        ? ?/sec    1.00    228.5±4.16µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.09    278.6±3.70µs        ? ?/sec    1.00    255.1±5.35µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.02    297.7±1.89µs        ? ?/sec    1.00    292.8±5.43µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.00    284.1±1.25µs        ? ?/sec    1.08    305.8±2.25µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.11    290.1±3.34µs        ? ?/sec    1.00    262.3±5.63µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.02    306.7±3.30µs        ? ?/sec    1.00    301.0±3.57µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.03   1116.1±8.02µs        ? ?/sec    1.00  1081.3±28.43µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.05    970.3±6.28µs        ? ?/sec    1.00    924.2±7.82µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.03  1125.3±18.95µs        ? ?/sec    1.00  1090.3±13.50µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.10    443.8±5.83µs        ? ?/sec    1.00    403.0±5.72µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.06    632.5±4.54µs        ? ?/sec    1.00    595.8±9.30µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.10    451.2±5.23µs        ? ?/sec    1.00    410.8±4.79µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.00    160.1±0.77µs        ? ?/sec    1.27    202.9±3.12µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.00    286.9±4.98µs        ? ?/sec    1.11    317.6±2.82µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.00    165.8±3.38µs        ? ?/sec    1.25    207.5±2.64µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.00     76.7±0.81µs        ? ?/sec    1.54    118.2±0.48µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.00    242.7±1.05µs        ? ?/sec    1.13    274.7±1.88µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.00     82.7±3.20µs        ? ?/sec    1.48    122.3±0.43µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.01   739.2±19.26µs        ? ?/sec    1.00    735.3±6.05µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.00    587.2±7.09µs        ? ?/sec    1.01   592.0±13.76µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.00    743.2±6.94µs        ? ?/sec    1.00   744.7±27.95µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.18     67.4±6.15µs        ? ?/sec    1.00     57.2±3.16µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.00    254.3±5.72µs        ? ?/sec    1.01    256.1±2.32µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.03     70.6±6.61µs        ? ?/sec    1.00     68.8±6.91µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.00     94.2±3.82µs        ? ?/sec    1.00     94.3±1.40µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.06    218.6±1.80µs        ? ?/sec    1.00    206.8±0.92µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.00     99.1±1.48µs        ? ?/sec    1.00     99.1±1.50µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.02      9.2±0.27µs        ? ?/sec    1.00      9.0±0.12µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.07    175.3±0.89µs        ? ?/sec    1.00    164.1±0.76µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.02     14.3±0.30µs        ? ?/sec    1.00     14.1±0.34µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.00    183.5±1.44µs        ? ?/sec    1.00    184.0±2.35µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.02    339.3±6.59µs        ? ?/sec    1.00   332.1±17.36µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.00    189.2±2.68µs        ? ?/sec    1.00    189.8±3.56µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.00     14.2±0.42µs        ? ?/sec    1.00     14.2±0.44µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.04    256.7±1.10µs        ? ?/sec    1.00    245.8±3.54µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.00     19.6±0.36µs        ? ?/sec    1.01     19.8±0.71µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.00    364.4±3.13µs        ? ?/sec    1.00    364.3±3.15µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.00    386.8±1.55µs        ? ?/sec    1.01    391.9±7.89µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.01    371.7±5.72µs        ? ?/sec    1.00    369.6±6.88µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.00     24.0±0.46µs        ? ?/sec    1.04     25.0±0.37µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.00    218.8±2.97µs        ? ?/sec    1.00    219.5±2.32µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.07     32.1±0.46µs        ? ?/sec    1.00     30.0±0.36µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00    109.6±1.18µs        ? ?/sec    1.01    110.5±2.20µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.00    128.8±4.60µs        ? ?/sec    1.01    129.7±0.87µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.00    112.4±0.35µs        ? ?/sec    1.01    113.7±0.80µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    159.2±0.98µs        ? ?/sec    1.01    160.8±1.20µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.00    219.8±2.76µs        ? ?/sec    1.01    221.9±0.98µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.00    165.0±1.14µs        ? ?/sec    1.00    165.6±0.96µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     77.1±0.88µs        ? ?/sec    1.01     78.2±0.32µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    176.3±2.03µs        ? ?/sec    1.01    177.3±1.68µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00     80.4±0.81µs        ? ?/sec    1.02     82.2±1.42µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00    134.3±1.50µs        ? ?/sec    1.01    136.0±1.99µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    207.4±1.37µs        ? ?/sec    1.02    211.1±1.24µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    140.1±2.13µs        ? ?/sec    1.01    141.1±0.39µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.00     71.2±0.45µs        ? ?/sec    1.03     73.3±0.57µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.00    173.1±2.22µs        ? ?/sec    1.01    175.5±2.29µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.00     77.3±1.17µs        ? ?/sec    1.01     78.3±0.45µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.01    110.5±3.58µs        ? ?/sec    1.00    109.5±0.58µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.00    130.2±0.72µs        ? ?/sec    1.03    134.7±1.21µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.02    112.6±2.21µs        ? ?/sec    1.00    110.9±0.96µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.01    163.7±3.41µs        ? ?/sec    1.00    162.8±1.10µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.00    231.1±2.32µs        ? ?/sec    1.01    233.1±3.85µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.00    168.4±2.80µs        ? ?/sec    1.00    167.7±1.89µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00    201.6±1.24µs        ? ?/sec    1.00    201.9±1.14µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    245.1±2.74µs        ? ?/sec    1.01    248.2±1.29µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00    208.0±3.20µs        ? ?/sec    1.00    207.3±1.38µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00    150.3±0.73µs        ? ?/sec    1.00    150.9±1.82µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.01    223.5±5.05µs        ? ?/sec    1.00    221.3±2.56µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.01   158.1±10.63µs        ? ?/sec    1.00    156.8±3.93µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.00    105.5±0.92µs        ? ?/sec    1.01    106.9±1.28µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.00    195.2±4.82µs        ? ?/sec    1.02    198.6±1.87µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.01    112.5±0.73µs        ? ?/sec    1.00    111.6±1.77µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.00     78.1±0.83µs        ? ?/sec    1.01     78.8±0.87µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.00    102.1±0.50µs        ? ?/sec    1.01    103.0±0.53µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.00     81.1±0.84µs        ? ?/sec    1.00     81.3±0.87µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.00    108.7±0.40µs        ? ?/sec    1.01    109.6±1.93µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.00    172.3±7.21µs        ? ?/sec    1.01    174.8±3.27µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.00    113.4±1.64µs        ? ?/sec    1.01    114.7±2.61µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.02     42.7±0.78µs        ? ?/sec    1.00     41.9±0.16µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.00    138.5±1.59µs        ? ?/sec    1.01    139.7±0.77µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.00     46.7±0.11µs        ? ?/sec    1.00     46.7±0.65µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.00    100.2±1.17µs        ? ?/sec    1.02    101.8±0.69µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.00    172.2±3.02µs        ? ?/sec    1.00    173.0±0.70µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.00    104.7±0.44µs        ? ?/sec    1.02    106.7±1.26µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.00     36.9±0.26µs        ? ?/sec    1.03     38.2±0.86µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.00    136.0±7.29µs        ? ?/sec    1.01    137.1±1.74µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.00     41.3±0.30µs        ? ?/sec    1.03     42.5±0.20µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.00     84.1±1.54µs        ? ?/sec    1.02     85.7±5.28µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.00    101.4±3.98µs        ? ?/sec    1.00    101.9±2.21µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.00     86.8±0.45µs        ? ?/sec    1.00     87.2±0.78µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.00    109.4±1.22µs        ? ?/sec    1.00    109.5±0.68µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.00    164.7±1.24µs        ? ?/sec    1.01    165.5±1.70µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.00    113.5±1.41µs        ? ?/sec    1.01    114.2±1.27µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     25.1±0.41µs        ? ?/sec    1.04     26.1±0.46µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.00    119.9±1.20µs        ? ?/sec    1.02    122.3±3.05µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.00     29.0±0.28µs        ? ?/sec    1.06     30.8±0.62µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.00     83.6±1.40µs        ? ?/sec    1.01     84.6±2.48µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.00    154.0±2.01µs        ? ?/sec    1.01    155.2±2.25µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.00     88.9±2.97µs        ? ?/sec    1.00     89.0±0.51µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.00     17.1±0.39µs        ? ?/sec    1.05     18.0±0.60µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.00    117.2±2.35µs        ? ?/sec    1.02    119.4±0.82µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.00     22.8±0.38µs        ? ?/sec    1.06     24.1±0.42µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.02     83.1±0.26µs        ? ?/sec    1.00     81.6±0.97µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.00    103.0±2.50µs        ? ?/sec    1.00    102.9±0.70µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.01     84.3±1.99µs        ? ?/sec    1.00     83.8±0.69µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.01    111.4±3.24µs        ? ?/sec    1.00    110.2±0.60µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.00    167.0±1.30µs        ? ?/sec    1.05    176.1±6.12µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.00    113.0±0.74µs        ? ?/sec    1.02    115.2±1.43µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.00    147.6±1.08µs        ? ?/sec    1.01    148.4±0.99µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.00    190.8±2.20µs        ? ?/sec    1.00    191.4±2.49µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.00    152.1±0.64µs        ? ?/sec    1.01    153.3±1.95µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.00     98.3±2.02µs        ? ?/sec    1.01     99.2±1.42µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.00    162.3±2.29µs        ? ?/sec    1.01    164.3±0.73µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.00    103.3±2.33µs        ? ?/sec    1.00    103.5±1.46µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.06     44.6±2.28µs        ? ?/sec    1.00     42.1±0.79µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.00    135.0±3.06µs        ? ?/sec    1.00    135.6±0.60µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.00     48.7±2.37µs        ? ?/sec    1.02     49.5±0.86µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.00     82.8±0.63µs        ? ?/sec    1.01     84.0±2.32µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.00    102.5±1.21µs        ? ?/sec    1.00    102.9±0.62µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.01     85.1±0.90µs        ? ?/sec    1.00     84.1±0.33µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.01    110.6±0.33µs        ? ?/sec    1.00    109.7±1.48µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.00    170.0±4.01µs        ? ?/sec    1.00    170.7±1.44µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.01    115.3±0.50µs        ? ?/sec    1.00    114.0±1.53µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.00     34.9±1.56µs        ? ?/sec    1.03     36.1±0.31µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.00    130.6±1.09µs        ? ?/sec    1.02    133.0±1.63µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.00     37.4±0.62µs        ? ?/sec    1.08     40.5±0.65µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.00     92.6±0.57µs        ? ?/sec    1.02     94.3±1.50µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.00    163.6±2.54µs        ? ?/sec    1.01    165.6±1.54µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.00     97.2±2.41µs        ? ?/sec    1.02     98.8±0.32µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.00     28.9±0.19µs        ? ?/sec    1.05     30.2±0.19µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.00    127.4±1.01µs        ? ?/sec    1.02    130.1±0.70µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.00     33.6±0.34µs        ? ?/sec    1.04     34.8±0.63µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.00      7.3±0.10ms        ? ?/sec    1.02      7.4±0.06ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.00     12.9±0.33ms        ? ?/sec    1.02     13.2±0.18ms        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.05    512.4±2.72µs        ? ?/sec    1.00    486.0±5.76µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.04    672.2±4.16µs        ? ?/sec    1.00    648.3±4.21µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.09    518.1±7.95µs        ? ?/sec    1.00    475.1±5.27µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.00    673.8±8.64µs        ? ?/sec    1.07   721.9±18.65µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.00    774.8±9.53µs        ? ?/sec    1.04    803.6±7.48µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.00    680.8±6.01µs        ? ?/sec    1.07    725.5±3.64µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.00    334.5±7.44µs        ? ?/sec    1.04   346.2±15.06µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.06    406.1±3.69µs        ? ?/sec    1.00    383.3±3.58µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.00    339.1±9.50µs        ? ?/sec    1.03   350.3±13.17µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.09    273.8±8.42µs        ? ?/sec    1.00    250.8±5.82µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.14    262.9±6.28µs        ? ?/sec    1.00    229.7±1.59µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.08    276.0±3.59µs        ? ?/sec    1.00    255.9±5.47µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.04    460.6±8.93µs        ? ?/sec    1.00    444.3±2.11µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.09    362.0±2.65µs        ? ?/sec    1.00    331.1±1.87µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.04    469.3±6.11µs        ? ?/sec    1.00    451.0±6.35µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.01     93.7±3.15µs        ? ?/sec    1.00     92.6±0.45µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.00    110.5±1.36µs        ? ?/sec    1.01    111.4±1.19µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.01     96.5±3.21µs        ? ?/sec    1.00     95.5±0.62µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.00    127.3±1.08µs        ? ?/sec    1.00    127.0±0.85µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.00    182.7±2.42µs        ? ?/sec    1.01    185.4±1.87µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.00    131.9±1.49µs        ? ?/sec    1.00    131.9±1.09µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     42.6±0.38µs        ? ?/sec    1.03     43.9±0.48µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.00    138.3±0.68µs        ? ?/sec    1.01    140.2±4.25µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.00     46.8±0.35µs        ? ?/sec    1.03     48.0±0.24µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.00    100.2±1.30µs        ? ?/sec    1.01    101.6±1.01µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.00    171.5±1.55µs        ? ?/sec    1.01    173.5±3.95µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.00    104.6±0.36µs        ? ?/sec    1.02    106.6±1.00µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.00     36.6±0.31µs        ? ?/sec    1.04     38.0±0.24µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.00    135.4±4.24µs        ? ?/sec    1.01    136.7±1.99µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.00     41.4±0.39µs        ? ?/sec    1.03     42.4±0.34µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.00     84.1±1.57µs        ? ?/sec    1.01     84.7±1.46µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.00    101.3±4.07µs        ? ?/sec    1.01    102.2±2.47µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.00     86.5±1.23µs        ? ?/sec    1.01     87.7±1.19µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.00    110.4±0.54µs        ? ?/sec    1.00    110.6±0.61µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.00    164.9±4.13µs        ? ?/sec    1.01    166.4±1.97µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.00    114.4±0.84µs        ? ?/sec    1.00    114.5±0.84µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     25.5±0.56µs        ? ?/sec    1.04     26.5±0.37µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.00    120.2±1.37µs        ? ?/sec    1.01    121.6±1.11µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.00     29.6±0.44µs        ? ?/sec    1.05     31.0±0.43µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.00     83.5±0.66µs        ? ?/sec    1.02     84.8±1.99µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.00    154.0±1.90µs        ? ?/sec    1.01    155.3±1.53µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.00     88.3±1.18µs        ? ?/sec    1.01     89.0±1.02µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.00     19.9±0.62µs        ? ?/sec    1.06     21.1±1.12µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.00    117.2±0.80µs        ? ?/sec    1.02    120.0±1.06µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.00     25.4±1.08µs        ? ?/sec    1.01     25.8±1.02µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.01     81.9±1.29µs        ? ?/sec    1.00     81.2±3.50µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.00    102.3±2.01µs        ? ?/sec    1.00    102.6±0.61µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.00     84.4±1.31µs        ? ?/sec    1.00     84.5±5.77µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.00    110.6±0.95µs        ? ?/sec    1.00    110.3±1.11µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.00    166.0±1.95µs        ? ?/sec    1.06    175.9±1.72µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.00    112.4±0.53µs        ? ?/sec    1.02    114.9±0.78µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.00    147.7±0.57µs        ? ?/sec    1.01    148.8±0.84µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.00    190.2±1.23µs        ? ?/sec    1.01    192.3±2.20µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.00    152.3±1.01µs        ? ?/sec    1.01    153.4±0.95µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.00     97.7±2.61µs        ? ?/sec    1.01     98.5±2.38µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.00    162.6±2.93µs        ? ?/sec    1.01    164.3±1.34µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.00    102.2±1.37µs        ? ?/sec    1.01    103.2±0.81µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.09     45.3±2.60µs        ? ?/sec    1.00     41.4±0.89µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.00    134.9±6.01µs        ? ?/sec    1.01    135.8±2.28µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.00     48.9±1.51µs        ? ?/sec    1.02     50.0±0.90µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.00     88.6±0.83µs        ? ?/sec    1.02     90.0±1.27µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.00    106.1±5.24µs        ? ?/sec    1.00    105.9±2.36µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.00     91.3±0.40µs        ? ?/sec    1.00     91.1±2.20µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.00    118.8±3.07µs        ? ?/sec    1.00    118.3±1.25µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.00    174.3±2.94µs        ? ?/sec    1.00    174.8±2.17µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.00    123.0±1.44µs        ? ?/sec    1.00    122.5±0.36µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     34.8±0.49µs        ? ?/sec    1.03     35.8±0.20µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.00    131.0±2.33µs        ? ?/sec    1.00    131.4±1.25µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.00     38.6±0.16µs        ? ?/sec    1.03     39.9±0.30µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.00     93.1±0.44µs        ? ?/sec    1.00     93.2±0.60µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.00    164.6±4.32µs        ? ?/sec    1.01    166.1±2.69µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.00     97.4±0.80µs        ? ?/sec    1.01     98.8±0.53µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.00     28.9±0.34µs        ? ?/sec    1.04     30.1±0.19µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.00    127.6±2.70µs        ? ?/sec    1.01    129.2±2.33µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.00     33.6±0.32µs        ? ?/sec    1.03     34.5±0.11µs        ? ?/sec

@apache apache deleted a comment from alamb-ghbot Jan 10, 2026
@apache apache deleted a comment from alamb-ghbot Jan 10, 2026
@alamb
Copy link
Contributor Author

alamb commented Jan 10, 2026

run benchmark arrow_reader

@alamb-ghbot
Copy link

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

@alamb
Copy link
Contributor Author

alamb commented Jan 10, 2026

It seems like this may be worth a few percent in performance. I have restarted the benchmarks to see if I can reproduce the numbers

arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.00     19.9±0.62µs        ? ?/sec    1.06     21.1±1.12µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.00    117.2±0.80µs        ? ?/sec    1.02    120.0±1.06µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.00     25.4±1.08µs        ? ?/sec    1.01     25.8±1.02µs        ? ?/sec
...
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.00     28.9±0.34µs        ? ?/sec    1.04     30.1±0.19µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.00    127.6±2.70µs        ? ?/sec    1.01    129.2±2.33µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.00     33.6±0.32µs        ? ?/sec    1.03     34.5±0.11µs        ? ?/sec

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                                      alamb_less_primitive_allocations       main
-----                                                                                                      --------------------------------       ----
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.00   1178.3±6.17µs        ? ?/sec    1.09   1286.9±9.23µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.00  1257.8±23.44µs        ? ?/sec    1.05   1323.8±6.15µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.00  1193.6±18.34µs        ? ?/sec    1.09  1297.7±16.83µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.00    489.4±5.98µs        ? ?/sec    1.05   511.7±14.12µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.00    663.1±7.21µs        ? ?/sec    1.05    694.7±4.88µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.00    494.3±6.43µs        ? ?/sec    1.04    514.3±4.65µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.01    544.1±4.88µs        ? ?/sec    1.00    539.8±5.41µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.00    730.8±5.41µs        ? ?/sec    1.04    763.4±8.57µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.01    561.6±7.94µs        ? ?/sec    1.00    555.1±9.05µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.20    282.5±4.57µs        ? ?/sec    1.00    235.5±3.45µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.08    261.4±2.60µs        ? ?/sec    1.00    241.8±7.33µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.18    277.3±4.40µs        ? ?/sec    1.00    234.1±4.06µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.22    351.5±1.77µs        ? ?/sec    1.00    288.3±2.22µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.15    326.0±1.43µs        ? ?/sec    1.00    283.9±6.81µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.11    316.6±8.83µs        ? ?/sec    1.00    285.3±5.03µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.21    361.0±5.22µs        ? ?/sec    1.00    297.8±6.52µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.06  1090.3±19.41µs        ? ?/sec    1.00  1029.8±21.99µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.09   940.0±10.09µs        ? ?/sec    1.00   866.1±19.08µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.06  1100.1±17.68µs        ? ?/sec    1.00   1036.8±6.15µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.04    415.3±7.83µs        ? ?/sec    1.00   399.9±10.50µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.12    605.6±7.52µs        ? ?/sec    1.00   541.4±16.74µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.05   425.7±10.45µs        ? ?/sec    1.00   407.2±12.73µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.03    202.7±4.59µs        ? ?/sec    1.00    196.1±5.13µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.00    320.3±6.59µs        ? ?/sec    1.05    335.2±1.86µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.04    208.3±3.58µs        ? ?/sec    1.00    199.9±3.90µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.00    118.4±1.45µs        ? ?/sec    1.00    118.1±1.98µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.00    274.6±1.23µs        ? ?/sec    1.08    297.3±3.97µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.00    122.9±2.38µs        ? ?/sec    1.00    122.7±2.32µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.08    742.0±4.94µs        ? ?/sec    1.00    689.4±6.55µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.15    591.8±3.82µs        ? ?/sec    1.00    513.3±1.95µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.08    750.3±4.35µs        ? ?/sec    1.00    694.1±8.41µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.21     74.5±4.45µs        ? ?/sec    1.00     61.5±5.38µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.24    255.9±6.83µs        ? ?/sec    1.00    206.9±2.63µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.17     82.5±6.49µs        ? ?/sec    1.00     70.2±6.95µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.09     94.3±0.90µs        ? ?/sec    1.00     86.3±0.92µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.00   215.1±35.70µs        ? ?/sec    1.08   231.8±23.46µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.09     99.4±1.10µs        ? ?/sec    1.00     91.6±0.97µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.00      9.4±0.23µs        ? ?/sec    1.00      9.4±0.24µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.00    164.8±3.95µs        ? ?/sec    1.14    187.9±1.26µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.00     14.0±0.29µs        ? ?/sec    1.05     14.7±0.72µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.08    185.1±3.09µs        ? ?/sec    1.00    171.1±2.96µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.00    328.8±2.94µs        ? ?/sec    1.02   335.8±11.94µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.08    189.6±2.71µs        ? ?/sec    1.00    176.1±2.31µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.06     14.6±0.63µs        ? ?/sec    1.00     13.8±0.40µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.00    244.4±2.52µs        ? ?/sec    1.05    257.2±2.90µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.00     19.5±0.35µs        ? ?/sec    1.01     19.7±0.41µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.07    366.1±1.87µs        ? ?/sec    1.00    341.9±3.09µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.18    387.4±3.67µs        ? ?/sec    1.00    328.1±2.38µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.07    372.7±7.30µs        ? ?/sec    1.00    348.2±6.06µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.14     26.4±0.38µs        ? ?/sec    1.00     23.2±1.12µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.26    217.4±3.05µs        ? ?/sec    1.00    173.0±1.00µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.02     32.3±0.42µs        ? ?/sec    1.00     31.9±0.52µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00    110.4±1.44µs        ? ?/sec    1.01    111.4±0.95µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.00    130.2±2.04µs        ? ?/sec    1.00    130.8±3.47µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.00    113.5±0.74µs        ? ?/sec    1.01    114.6±0.59µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    160.7±1.83µs        ? ?/sec    1.01    161.9±1.36µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.00   223.2±10.79µs        ? ?/sec    1.00   223.2±11.17µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.00    165.2±1.03µs        ? ?/sec    1.01    167.4±1.04µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     73.4±0.35µs        ? ?/sec    1.05     76.7±0.62µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    176.1±1.97µs        ? ?/sec    1.00    176.6±1.57µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00     79.2±1.47µs        ? ?/sec    1.05     83.3±0.32µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00    142.3±0.62µs        ? ?/sec    1.01    144.0±0.54µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    215.5±2.84µs        ? ?/sec    1.00    215.5±6.56µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    149.4±2.41µs        ? ?/sec    1.00    149.3±1.30µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.00     72.5±0.69µs        ? ?/sec    1.01     73.0±0.62µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.00    175.7±1.58µs        ? ?/sec    1.00    175.9±4.05µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.00     78.2±0.49µs        ? ?/sec    1.02     79.8±0.32µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00    107.8±2.97µs        ? ?/sec    1.03    111.0±5.85µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.00    131.4±1.58µs        ? ?/sec    1.01    132.3±2.29µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.00    111.7±0.56µs        ? ?/sec    1.00    112.2±1.10µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    161.4±1.70µs        ? ?/sec    1.01    163.7±2.72µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.00    225.6±2.39µs        ? ?/sec    1.04    234.7±3.32µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.00    166.3±1.02µs        ? ?/sec    1.01    168.3±0.82µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00    201.4±0.67µs        ? ?/sec    1.00    201.1±2.17µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    244.9±1.46µs        ? ?/sec    1.02    250.6±5.77µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00    207.6±0.97µs        ? ?/sec    1.00    207.1±1.15µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00    141.3±3.65µs        ? ?/sec    1.01    142.0±2.04µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    210.7±1.58µs        ? ?/sec    1.04    218.4±2.53µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    144.8±0.82µs        ? ?/sec    1.02    148.2±2.11µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.09    110.1±1.39µs        ? ?/sec    1.00    101.0±0.77µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.00    190.3±1.08µs        ? ?/sec    1.04    197.0±1.08µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.02    113.1±1.27µs        ? ?/sec    1.00    111.0±1.20µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.00     77.1±0.48µs        ? ?/sec    1.04     80.0±2.80µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.00    102.0±0.71µs        ? ?/sec    1.01    103.0±1.24µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.00     80.3±0.80µs        ? ?/sec    1.03     83.0±2.23µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.00    105.7±0.72µs        ? ?/sec    1.04    109.7±0.96µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.00    172.0±1.44µs        ? ?/sec    1.01    173.2±1.90µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.00    109.9±0.34µs        ? ?/sec    1.04    114.2±0.39µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     42.6±0.19µs        ? ?/sec    1.03     43.7±0.16µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.01    139.9±1.61µs        ? ?/sec    1.00    139.0±2.00µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.00     46.8±0.35µs        ? ?/sec    1.02     47.9±0.21µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.00    109.0±1.39µs        ? ?/sec    1.02    111.0±1.16µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.00    177.1±1.60µs        ? ?/sec    1.00    176.5±4.55µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.00    113.2±0.39µs        ? ?/sec    1.02    115.6±2.70µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.00     36.9±0.13µs        ? ?/sec    1.03     38.0±0.51µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.00    136.0±2.01µs        ? ?/sec    1.00    136.1±1.27µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.00     40.9±0.29µs        ? ?/sec    1.04     42.3±0.14µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.00     84.1±1.45µs        ? ?/sec    1.01     85.2±0.66µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.00    101.3±0.49µs        ? ?/sec    1.01    102.3±4.01µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.00     86.3±0.33µs        ? ?/sec    1.02     87.9±0.92µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.00    108.3±2.26µs        ? ?/sec    1.02    110.0±2.02µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.00    165.4±3.74µs        ? ?/sec    1.00    166.0±6.75µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.00    112.5±1.69µs        ? ?/sec    1.02    114.3±1.05µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     23.5±0.39µs        ? ?/sec    1.06     24.9±0.96µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.00    119.8±0.74µs        ? ?/sec    1.00    120.1±1.86µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.00     27.5±0.23µs        ? ?/sec    1.06     29.1±0.43µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.00     90.2±0.43µs        ? ?/sec    1.02     92.1±0.88µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.00    158.1±2.34µs        ? ?/sec    1.00    157.7±1.35µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.00     95.5±1.12µs        ? ?/sec    1.02     97.4±3.13µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.00     15.2±0.49µs        ? ?/sec    1.08     16.4±0.39µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.00    117.3±1.56µs        ? ?/sec    1.00    117.3±1.03µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.00     21.0±0.38µs        ? ?/sec    1.08     22.8±0.84µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.00     81.7±0.76µs        ? ?/sec    1.00     81.9±1.68µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.00     99.4±0.26µs        ? ?/sec    1.05   104.6±11.44µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.00     83.2±1.64µs        ? ?/sec    1.02     84.4±0.85µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.00    108.0±1.45µs        ? ?/sec    1.02    109.8±1.32µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.00    161.9±3.86µs        ? ?/sec    1.08    175.3±3.05µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.00    109.6±0.62µs        ? ?/sec    1.05    114.8±3.45µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.00    146.0±0.52µs        ? ?/sec    1.01    146.7±0.95µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.00    186.7±1.32µs        ? ?/sec    1.03    193.1±1.83µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.00    150.7±0.62µs        ? ?/sec    1.00    151.1±0.68µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.00     87.3±0.88µs        ? ?/sec    1.02     89.4±1.88µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.00    153.5±0.80µs        ? ?/sec    1.04    159.4±2.37µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.00     91.7±0.71µs        ? ?/sec    1.01     92.6±1.11µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.00     40.5±0.98µs        ? ?/sec    1.05     42.4±1.81µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.00    129.4±0.83µs        ? ?/sec    1.05    135.6±2.52µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.00     43.6±0.76µs        ? ?/sec    1.17     50.9±3.17µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.00     83.1±0.41µs        ? ?/sec    1.01     84.3±0.47µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.00    103.4±3.38µs        ? ?/sec    1.00    103.8±1.03µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.00     85.6±1.41µs        ? ?/sec    1.01     86.6±0.49µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.00    110.6±1.89µs        ? ?/sec    1.01    112.2±1.23µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.00    170.3±1.48µs        ? ?/sec    1.01    172.0±4.92µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.00    114.2±0.71µs        ? ?/sec    1.02    116.6±0.70µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.00     35.0±0.47µs        ? ?/sec    1.04     36.3±0.23µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.00    131.9±1.61µs        ? ?/sec    1.00    131.6±3.05µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.00     39.2±0.14µs        ? ?/sec    1.03     40.2±0.42µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.00    101.6±0.33µs        ? ?/sec    1.02    103.2±0.86µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.01   172.3±17.12µs        ? ?/sec    1.00    169.9±3.23µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.00    106.2±0.58µs        ? ?/sec    1.02    108.3±3.41µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.00     28.7±0.12µs        ? ?/sec    1.05     30.3±0.39µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.00    128.6±1.28µs        ? ?/sec    1.00    128.6±1.55µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.00     33.2±0.28µs        ? ?/sec    1.04     34.5±0.18µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.03      7.5±0.06ms        ? ?/sec    1.00      7.3±0.09ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.00     12.8±0.28ms        ? ?/sec    1.00     12.9±0.17ms        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.00    490.6±5.75µs        ? ?/sec    1.04    510.4±5.71µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.00   661.8±13.15µs        ? ?/sec    1.05    692.2±3.73µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.00    497.6±7.73µs        ? ?/sec    1.04    517.0±8.61µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.00    650.8±7.15µs        ? ?/sec    1.12   729.4±16.76µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.00    769.2±6.13µs        ? ?/sec    1.07    824.6±7.86µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.00    661.0±4.92µs        ? ?/sec    1.11   733.9±11.36µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.01    339.8±3.33µs        ? ?/sec    1.00    337.4±3.55µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.02    408.6±5.09µs        ? ?/sec    1.00    402.3±8.95µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.01    346.5±3.22µs        ? ?/sec    1.00    341.9±3.80µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.18    270.7±3.59µs        ? ?/sec    1.00    229.3±4.21µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.11    268.3±4.95µs        ? ?/sec    1.00    241.1±3.17µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.19    282.5±3.58µs        ? ?/sec    1.00    237.6±5.28µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.12   501.9±10.74µs        ? ?/sec    1.00   449.9±12.92µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.08    385.2±1.70µs        ? ?/sec    1.00    357.7±5.88µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.12    509.5±6.15µs        ? ?/sec    1.00    454.2±3.16µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.00     93.1±0.95µs        ? ?/sec    1.02     94.7±1.07µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.00    111.0±1.44µs        ? ?/sec    1.00    111.5±1.41µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.00     95.6±1.11µs        ? ?/sec    1.02     97.1±0.74µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.00    126.7±1.19µs        ? ?/sec    1.04   132.3±13.82µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.00    185.0±3.01µs        ? ?/sec    1.00    185.0±3.06µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.00    131.0±0.59µs        ? ?/sec    1.02    133.8±1.06µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     42.5±0.64µs        ? ?/sec    1.03     43.8±0.43µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.00    138.7±1.72µs        ? ?/sec    1.00    138.9±1.28µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.00     46.7±0.39µs        ? ?/sec    1.03     48.0±0.37µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.00    109.6±0.36µs        ? ?/sec    1.02    111.4±2.07µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.01    178.6±9.77µs        ? ?/sec    1.00    177.3±4.38µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.00    114.4±0.89µs        ? ?/sec    1.01    115.6±1.10µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.00     36.7±0.13µs        ? ?/sec    1.03     37.9±0.17µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.00    136.5±4.44µs        ? ?/sec    1.00    136.7±2.03µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.00     41.1±0.34µs        ? ?/sec    1.03     42.3±0.20µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.00     84.4±1.08µs        ? ?/sec    1.01     85.0±1.48µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.00    101.6±0.61µs        ? ?/sec    1.00    101.6±1.42µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.00     86.3±0.44µs        ? ?/sec    1.02     88.0±2.06µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.00    107.3±0.85µs        ? ?/sec    1.03    110.2±1.24µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.00    165.4±0.88µs        ? ?/sec    1.00    165.0±1.46µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.00    111.8±0.64µs        ? ?/sec    1.02    114.4±1.10µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     22.1±0.43µs        ? ?/sec    1.12     24.9±0.33µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.00    119.2±1.39µs        ? ?/sec    1.01    120.2±3.21µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.00     26.3±0.34µs        ? ?/sec    1.10     29.0±0.32µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.00     91.2±0.98µs        ? ?/sec    1.02     93.0±3.45µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.00    158.0±0.90µs        ? ?/sec    1.00    158.2±1.45µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.00     95.8±0.91µs        ? ?/sec    1.02     97.3±1.53µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.00     18.4±0.73µs        ? ?/sec    1.10     20.1±1.13µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.01    118.1±1.35µs        ? ?/sec    1.00    117.5±2.06µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.00     22.4±0.75µs        ? ?/sec    1.11     24.9±0.99µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.00     80.7±0.34µs        ? ?/sec    1.04     83.7±1.49µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.00    100.6±2.66µs        ? ?/sec    1.03    103.6±1.74µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.00     83.4±1.33µs        ? ?/sec    1.03     86.3±0.94µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.00    107.9±0.66µs        ? ?/sec    1.04    112.1±7.73µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.00    162.4±0.78µs        ? ?/sec    1.09    177.8±2.62µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.00    110.7±2.16µs        ? ?/sec    1.02    113.2±1.08µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.00    146.8±0.86µs        ? ?/sec    1.02    149.5±1.04µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.00    186.0±3.51µs        ? ?/sec    1.04    194.1±2.09µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.00    151.5±1.09µs        ? ?/sec    1.02    154.0±0.94µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.00     88.4±2.42µs        ? ?/sec    1.00     88.5±1.66µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.00    154.4±2.14µs        ? ?/sec    1.09    168.1±4.57µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.00     92.7±0.95µs        ? ?/sec    1.02     94.5±5.10µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.00     39.7±0.98µs        ? ?/sec    1.11     44.2±2.67µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.00    130.1±1.10µs        ? ?/sec    1.06    137.9±1.07µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.00     44.1±0.94µs        ? ?/sec    1.09     48.3±2.24µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.00     89.1±1.79µs        ? ?/sec    1.01     90.2±1.65µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.00    107.0±3.36µs        ? ?/sec    1.00    106.6±0.67µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.00     90.9±0.37µs        ? ?/sec    1.02     92.9±0.74µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.00    118.2±0.59µs        ? ?/sec    1.02    120.8±0.69µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.00    176.2±3.42µs        ? ?/sec    1.00    175.9±1.24µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.00    122.7±1.62µs        ? ?/sec    1.02    124.9±0.45µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     34.7±0.16µs        ? ?/sec    1.04     36.0±0.33µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.00    130.5±0.77µs        ? ?/sec    1.00    130.9±0.55µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.00     38.7±0.25µs        ? ?/sec    1.04     40.1±0.46µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.00    102.1±0.53µs        ? ?/sec    1.01    103.6±2.17µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.00    169.1±1.14µs        ? ?/sec    1.00    169.6±1.91µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.00    106.2±0.65µs        ? ?/sec    1.02    108.2±2.59µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.00     28.8±0.08µs        ? ?/sec    1.05     30.2±0.19µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.00    128.3±0.57µs        ? ?/sec    1.01    129.4±6.33µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.00     33.8±0.21µs        ? ?/sec    1.02     34.5±0.21µs        ? ?/sec

@alamb
Copy link
Contributor Author

alamb commented Jan 10, 2026

There is a lot of noise in the benchmark, but I think this PR shows a few percent improvement for primitive arrays

Copy link
Contributor

@scovich scovich left a comment

Choose a reason for hiding this comment

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

LGTM

@alamb alamb marked this pull request as ready for review January 11, 2026 12:22
@alamb
Copy link
Contributor Author

alamb commented Jan 11, 2026

Thanks for the review @scovich -- I will plan to merge this PR on Monday unless there are any other comments

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

Labels

parquet Changes to the parquet crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants