Skip to content

Improve parquet BinaryView / StringView decoder performance (up to -35%)#9236

Merged
Dandandan merged 19 commits intoapache:mainfrom
Dandandan:byteviewdecoder_perf
Jan 22, 2026
Merged

Improve parquet BinaryView / StringView decoder performance (up to -35%)#9236
Dandandan merged 19 commits intoapache:mainfrom
Dandandan:byteviewdecoder_perf

Conversation

@Dandandan
Copy link
Contributor

@Dandandan Dandandan commented Jan 21, 2026

Which issue does this PR close?

Rationale for this change

Details
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string
                        time:   [156.56 µs 157.01 µs 157.62 µs]
                        change: [−21.179% −20.894% −20.554%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  4 (4.00%) high mild
  4 (4.00%) high severe
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs
                        time:   [156.50 µs 157.01 µs 157.66 µs]
                        change: [−15.373% −15.053% −14.686%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
  7 (7.00%) high mild
  5 (5.00%) high severe
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs
                        time:   [158.75 µs 159.24 µs 159.91 µs]
                        change: [−13.075% −12.639% −12.020%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 11 outliers among 100 measurements (11.00%)
  1 (1.00%) low severe
  1 (1.00%) low mild
  6 (6.00%) high mild
  3 (3.00%) high severe
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs
                        time:   [173.96 µs 174.41 µs 174.98 µs]
                        change: [−6.1050% −4.6949% −3.7175%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 5 outliers among 100 measurements (5.00%)
  1 (1.00%) low mild
  1 (1.00%) high mild
  3 (3.00%) high severe
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs
                        time:   [131.51 µs 132.05 µs 132.53 µs]
                        change: [−34.514% −34.147% −33.799%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 9 outliers among 100 measurements (9.00%)
  5 (5.00%) low severe
  2 (2.00%) high mild
  2 (2.00%) high severe
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs
                        time:   [132.70 µs 133.26 µs 133.93 µs]
                        change: [−35.744% −35.217% −34.703%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 10 outliers among 100 measurements (10.00%)
  3 (3.00%) low severe
  2 (2.00%) low mild
  3 (3.00%) high mild
  2 (2.00%) high severe
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs
                        time:   [161.38 µs 161.92 µs 162.58 µs]
                        change: [−14.789% −14.261% −13.798%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  2 (2.00%) low severe
  5 (5.00%) high mild
  1 (1.00%) high severe

arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs
                        time:   [195.33 µs 195.74 µs 196.23 µs]
                        change: [−13.418% −12.964% −12.546%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  4 (4.00%) high mild
  4 (4.00%) high severe
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs
                        time:   [197.35 µs 197.68 µs 198.21 µs]
                        change: [−12.855% −12.629% −12.405%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 13 outliers among 100 measurements (13.00%)
  1 (1.00%) low severe
  1 (1.00%) low mild
  4 (4.00%) high mild
  7 (7.00%) high severe
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs
                        time:   [188.24 µs 189.34 µs 191.28 µs]
                        change: [−4.5332% −4.0745% −3.5268%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) low mild
  3 (3.00%) high mild
  3 (3.00%) high severe
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs
                        time:   [130.84 µs 131.16 µs 131.45 µs]
                        change: [−34.823% −34.633% −34.430%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 16 outliers among 100 measurements (16.00%)
  4 (4.00%) low severe
  4 (4.00%) low mild
  4 (4.00%) high mild
  4 (4.00%) high severe
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs
                        time:   [134.17 µs 134.40 µs 134.64 µs]
                        change: [−34.154% −33.632% −33.190%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 5 outliers among 100 measurements (5.00%)
  1 (1.00%) low mild
  3 (3.00%) high mild
  1 (1.00%) high severe
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs
                        time:   [157.09 µs 157.53 µs 158.08 µs]
                        change: [−20.048% −18.563% −17.486%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 9 outliers among 100 measurements (9.00%)
  1 (1.00%) low mild
  4 (4.00%) high mild
  4 (4.00%) high severe

What changes are included in this PR?

Are these changes tested?

Are there any user-facing changes?

@github-actions github-actions bot added the parquet Changes to the parquet crate label Jan 21, 2026
@Dandandan
Copy link
Contributor Author

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 byteviewdecoder_perf (45e9ed3) to ebace17 diff
BENCH_NAME=arrow_reader
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental --bench arrow_reader
BENCH_FILTER=
BENCH_BRANCH_NAME=byteviewdecoder_perf
Results will be posted here when complete

@Dandandan Dandandan marked this pull request as draft January 21, 2026 11:28
@Dandandan
Copy link
Contributor Author

run benchmark arrow_reader arrow_reader_clickbench

while self.offset < self.buf.len() && read != to_read {
if self.offset + 4 > self.buf.len() {
let mut utf8_validation_begin = offset;
for _ in 0..to_read {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Somehow using extend here makes things slower (even though I can see in the profile it now uses the trusted len path instead of Vec:push

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                                      byteviewdecoder_perf                   main
-----                                                                                                      --------------------                   ----
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.00  1184.1±14.03µs        ? ?/sec    1.04   1225.9±9.34µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.00   1235.1±5.50µs        ? ?/sec    1.03  1269.8±17.33µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.00   1190.5±4.98µs        ? ?/sec    1.04   1237.0±8.53µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.00    490.8±6.40µs        ? ?/sec    1.00    493.1±4.30µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.00    653.8±6.53µs        ? ?/sec    1.00   654.1±14.29µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.00    486.5±3.67µs        ? ?/sec    1.00    484.9±5.71µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.01   565.4±12.12µs        ? ?/sec    1.00    560.5±5.67µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.00    719.0±8.25µs        ? ?/sec    1.00   722.4±11.68µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.00    552.9±9.80µs        ? ?/sec    1.04    573.7±7.44µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    229.4±3.37µs        ? ?/sec    1.10    251.4±2.15µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.00    229.1±3.81µs        ? ?/sec    1.15    262.3±3.02µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.00    233.7±3.26µs        ? ?/sec    1.09    255.5±2.84µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.00    263.2±2.03µs        ? ?/sec    1.28    338.1±5.56µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.00    237.1±3.05µs        ? ?/sec    1.38    326.8±8.02µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.00   260.8±17.11µs        ? ?/sec    1.22    319.1±4.48µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.00    272.3±4.50µs        ? ?/sec    1.27    345.5±8.18µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.00  1028.1±14.49µs        ? ?/sec    1.05   1076.2±4.97µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.03   936.2±14.29µs        ? ?/sec    1.00    906.2±7.84µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.00   1032.5±3.89µs        ? ?/sec    1.07  1100.4±62.43µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.00    406.2±6.51µs        ? ?/sec    1.04    424.4±6.66µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.11    607.2±3.24µs        ? ?/sec    1.00    546.5±4.21µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.00    413.5±3.82µs        ? ?/sec    1.06    439.3±4.57µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.00    155.2±6.53µs        ? ?/sec    1.03    160.6±1.15µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.00    297.2±1.64µs        ? ?/sec    1.02    303.2±4.25µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.00    159.1±1.80µs        ? ?/sec    1.04    166.1±4.08µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.02     78.1±1.27µs        ? ?/sec    1.00     76.7±0.62µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.00    258.5±1.62µs        ? ?/sec    1.01    260.0±2.16µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.01     83.5±1.05µs        ? ?/sec    1.00     82.7±0.72µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.00    686.0±3.04µs        ? ?/sec    1.08    742.2±4.24µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.08    579.3±3.20µs        ? ?/sec    1.00    538.9±6.76µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.00    695.0±6.39µs        ? ?/sec    1.08   749.4±11.75µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.00     68.0±8.03µs        ? ?/sec    1.04     70.8±5.47µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.37    275.3±4.47µs        ? ?/sec    1.00    201.2±2.08µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.00     71.8±6.13µs        ? ?/sec    1.01     72.4±4.93µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.00     85.9±0.82µs        ? ?/sec    1.10     94.4±1.92µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.00    229.0±2.22µs        ? ?/sec    1.01    231.3±1.29µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.00     90.7±0.59µs        ? ?/sec    1.09     99.2±0.49µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.00      9.0±0.19µs        ? ?/sec    1.00      9.0±0.12µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.01    190.9±2.50µs        ? ?/sec    1.00    189.3±3.17µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.00     14.5±0.37µs        ? ?/sec    1.00     14.4±0.33µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.00    169.1±1.60µs        ? ?/sec    1.09    184.1±1.25µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.01    371.9±4.24µs        ? ?/sec    1.00    367.5±2.98µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.00    175.4±1.54µs        ? ?/sec    1.08    189.8±0.70µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.05     14.5±0.43µs        ? ?/sec    1.00     13.8±0.30µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.04    295.6±1.32µs        ? ?/sec    1.00    283.2±6.16µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.01     20.1±0.40µs        ? ?/sec    1.00     19.9±0.78µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.00    342.1±4.21µs        ? ?/sec    1.08    367.8±6.20µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.14    392.9±1.73µs        ? ?/sec    1.00    343.8±5.22µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.00    347.0±1.40µs        ? ?/sec    1.08    375.0±3.03µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.01     28.3±0.71µs        ? ?/sec    1.00     28.0±0.41µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.38    238.5±3.27µs        ? ?/sec    1.00    172.9±1.22µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.00     33.6±0.60µs        ? ?/sec    1.01     34.1±0.90µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00    110.6±0.47µs        ? ?/sec    1.00    110.6±1.18µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.02    120.2±2.33µs        ? ?/sec    1.00    118.0±1.19µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.01    114.7±4.25µs        ? ?/sec    1.00    114.0±1.84µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    160.4±0.94µs        ? ?/sec    1.01    161.8±1.44µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.00    200.8±1.04µs        ? ?/sec    1.00    200.6±2.86µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.00    166.0±2.67µs        ? ?/sec    1.01    167.4±1.49µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     74.6±0.48µs        ? ?/sec    1.02     75.8±0.56µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.02    155.7±1.00µs        ? ?/sec    1.00    153.1±2.33µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00     80.1±0.54µs        ? ?/sec    1.01     80.8±0.51µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00    134.6±1.47µs        ? ?/sec    1.01    135.7±6.37µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    189.9±2.48µs        ? ?/sec    1.00    190.4±1.62µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    140.6±1.89µs        ? ?/sec    1.02    143.1±3.58µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.03     72.4±0.60µs        ? ?/sec    1.00     70.6±0.97µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.02    155.4±2.28µs        ? ?/sec    1.00    152.1±0.85µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.01     78.9±0.77µs        ? ?/sec    1.00     77.9±0.92µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00    107.3±0.61µs        ? ?/sec    1.00    106.8±0.81µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.02    133.8±0.76µs        ? ?/sec    1.00    131.1±1.43µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.01    112.2±0.88µs        ? ?/sec    1.00    110.9±3.11µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.01    161.2±0.83µs        ? ?/sec    1.00    160.1±3.83µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.01    234.2±4.01µs        ? ?/sec    1.00    231.0±4.26µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.01    166.5±1.35µs        ? ?/sec    1.00    165.5±1.71µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.01    203.7±0.76µs        ? ?/sec    1.00    200.9±1.39µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    249.7±1.23µs        ? ?/sec    1.00    248.8±6.35µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.02    210.3±0.96µs        ? ?/sec    1.00    206.8±1.04µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00    150.5±1.06µs        ? ?/sec    1.02    153.0±1.88µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    222.3±2.76µs        ? ?/sec    1.00    222.8±1.91µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    156.5±0.62µs        ? ?/sec    1.02    159.9±1.12µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.03    108.8±1.18µs        ? ?/sec    1.00    105.2±1.45µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.02    197.9±3.16µs        ? ?/sec    1.00    194.5±1.89µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.01    112.4±1.45µs        ? ?/sec    1.00    111.1±0.53µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.00     78.6±0.37µs        ? ?/sec    1.00     78.4±0.88µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.00     92.2±0.49µs        ? ?/sec    1.00     91.8±0.38µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.00     81.1±0.84µs        ? ?/sec    1.00     80.8±1.01µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.00    108.6±1.21µs        ? ?/sec    1.00    108.3±1.13µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.00    153.0±0.98µs        ? ?/sec    1.00    153.1±3.72µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.00    113.1±1.34µs        ? ?/sec    1.00    112.8±0.53µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     41.1±0.40µs        ? ?/sec    1.04     42.8±0.19µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.00    117.6±0.52µs        ? ?/sec    1.00    118.0±0.78µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.00     45.4±0.21µs        ? ?/sec    1.03     46.9±0.32µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.00    101.3±1.45µs        ? ?/sec    1.01    102.4±1.21µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.00    152.1±0.79µs        ? ?/sec    1.01    154.1±2.65µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.00    106.3±1.19µs        ? ?/sec    1.01    107.7±1.41µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.00     36.7±0.22µs        ? ?/sec    1.02     37.2±0.30µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.00    115.6±1.81µs        ? ?/sec    1.00    115.8±0.73µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.00     41.3±0.44µs        ? ?/sec    1.01     41.6±0.44µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.00     84.2±0.70µs        ? ?/sec    1.01     85.4±1.23µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.00     90.8±1.11µs        ? ?/sec    1.00     90.7±0.72µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.00     86.6±0.75µs        ? ?/sec    1.02     88.0±1.52µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.00    108.6±1.25µs        ? ?/sec    1.01    109.7±1.12µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.00    143.5±1.71µs        ? ?/sec    1.00    143.6±0.74µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.00    112.9±1.10µs        ? ?/sec    1.01    114.6±2.46µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.01     23.3±0.31µs        ? ?/sec    1.00     23.2±0.28µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.00     98.9±0.95µs        ? ?/sec    1.00     98.5±0.46µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.01     27.9±0.38µs        ? ?/sec    1.00     27.7±0.29µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.00     82.8±1.88µs        ? ?/sec    1.00     83.1±1.25µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.00    132.4±0.70µs        ? ?/sec    1.01    134.2±0.62µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.00     87.2±1.06µs        ? ?/sec    1.00     87.3±0.66µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.00     15.2±0.37µs        ? ?/sec    1.02     15.6±0.88µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.00     96.8±0.50µs        ? ?/sec    1.00     96.3±0.57µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.01     21.3±0.49µs        ? ?/sec    1.00     21.1±0.40µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.00     80.2±0.57µs        ? ?/sec    1.00     80.2±1.97µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.00    102.8±1.51µs        ? ?/sec    1.00    102.3±1.15µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.00     82.6±0.57µs        ? ?/sec    1.01     83.1±3.15µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.01    107.8±1.64µs        ? ?/sec    1.00    106.3±1.20µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.04    176.0±1.75µs        ? ?/sec    1.00    168.8±5.19µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.01    111.9±0.82µs        ? ?/sec    1.00    110.5±2.94µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.00    147.1±0.85µs        ? ?/sec    1.00    147.2±0.60µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.00    193.2±2.12µs        ? ?/sec    1.00    193.7±1.68µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.00    151.5±0.58µs        ? ?/sec    1.00    152.2±0.77µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.00     97.4±2.25µs        ? ?/sec    1.01     98.7±1.94µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.00    164.4±1.65µs        ? ?/sec    1.01    165.6±2.49µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.00    102.5±2.54µs        ? ?/sec    1.01    103.8±0.65µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.11     44.5±1.99µs        ? ?/sec    1.00     40.2±1.26µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.03   141.7±19.73µs        ? ?/sec    1.00    137.5±2.09µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.10     52.9±1.94µs        ? ?/sec    1.00     48.2±2.59µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.01     83.7±1.89µs        ? ?/sec    1.00     83.1±1.40µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.01     92.8±0.39µs        ? ?/sec    1.00     92.2±1.32µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.01     86.6±2.22µs        ? ?/sec    1.00     85.5±0.50µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.01    111.5±1.47µs        ? ?/sec    1.00    110.7±0.98µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.01    150.8±2.42µs        ? ?/sec    1.00    149.6±2.81µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.01    116.6±3.57µs        ? ?/sec    1.00    115.1±0.47µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.00     33.0±0.19µs        ? ?/sec    1.06     34.9±0.40µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.00    110.5±1.37µs        ? ?/sec    1.00    110.7±2.79µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.00     37.3±0.18µs        ? ?/sec    1.05     39.3±0.24µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.00     92.7±2.50µs        ? ?/sec    1.01     94.1±0.90µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.00    143.9±0.78µs        ? ?/sec    1.01    145.6±2.73µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.00     97.5±1.09µs        ? ?/sec    1.03    100.1±1.72µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.00     28.8±0.18µs        ? ?/sec    1.00     28.8±0.12µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.00    107.7±1.46µs        ? ?/sec    1.00    107.3±0.62µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.00     33.3±0.15µs        ? ?/sec    1.01     33.4±0.64µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.00      6.0±0.11ms        ? ?/sec    1.02      6.2±0.07ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.00     12.0±0.19ms        ? ?/sec    1.00     12.0±0.32ms        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.03    493.6±5.38µs        ? ?/sec    1.00    477.9±4.86µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.00    653.5±7.86µs        ? ?/sec    1.00    652.0±4.07µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.02   491.3±18.03µs        ? ?/sec    1.00    483.5±8.06µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.00   651.5±10.22µs        ? ?/sec    1.06    690.6±8.33µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.00    772.1±7.34µs        ? ?/sec    1.02    787.3±9.01µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.00    660.4±6.68µs        ? ?/sec    1.05    696.0±6.21µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.00    326.8±1.34µs        ? ?/sec    1.00    328.4±6.30µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.08    414.3±6.73µs        ? ?/sec    1.00    385.2±3.49µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.00    335.6±9.04µs        ? ?/sec    1.00    335.3±3.16µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    229.2±4.27µs        ? ?/sec    1.10    252.5±6.76µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.00    232.5±3.17µs        ? ?/sec    1.14    264.4±4.94µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.00    236.9±3.45µs        ? ?/sec    1.09    259.2±4.56µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.02    487.6±8.58µs        ? ?/sec    1.00    478.0±4.88µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.00    370.7±8.68µs        ? ?/sec    1.03    382.2±5.69µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.03   498.3±12.99µs        ? ?/sec    1.00    484.3±3.81µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.01     94.8±1.62µs        ? ?/sec    1.00     94.1±0.82µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.00    100.8±1.54µs        ? ?/sec    1.00    100.5±1.05µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.00     97.1±1.23µs        ? ?/sec    1.00     97.0±2.35µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.00    128.8±0.52µs        ? ?/sec    1.00    128.8±2.60µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.01    164.5±1.87µs        ? ?/sec    1.00    163.6±0.83µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.00    133.7±2.63µs        ? ?/sec    1.00    133.1±2.98µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     42.3±0.16µs        ? ?/sec    1.01     42.9±0.26µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.00    118.3±1.54µs        ? ?/sec    1.00    118.1±1.02µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.00     46.6±0.81µs        ? ?/sec    1.01     47.2±0.87µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.00    100.7±0.41µs        ? ?/sec    1.01    101.6±0.59µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.00    152.7±2.89µs        ? ?/sec    1.01    153.9±2.27µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.00    105.5±0.53µs        ? ?/sec    1.02    107.3±1.75µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.00     37.0±0.95µs        ? ?/sec    1.00     37.0±0.33µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.00    115.1±0.51µs        ? ?/sec    1.00    115.3±0.80µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.00     41.5±1.01µs        ? ?/sec    1.00     41.5±0.20µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.00     84.1±0.71µs        ? ?/sec    1.00     84.2±0.46µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.01     91.2±3.20µs        ? ?/sec    1.00     90.3±0.70µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.00     86.7±1.20µs        ? ?/sec    1.00     87.0±1.36µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.00    108.8±1.32µs        ? ?/sec    1.01    109.5±1.23µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.00    143.7±2.23µs        ? ?/sec    1.00    143.7±0.69µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.00    112.9±1.03µs        ? ?/sec    1.00    113.2±1.17µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     21.9±0.36µs        ? ?/sec    1.07     23.6±0.28µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.00     98.8±0.91µs        ? ?/sec    1.00     99.2±0.66µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.00     26.4±0.30µs        ? ?/sec    1.06     27.9±0.20µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.00     82.6±0.79µs        ? ?/sec    1.00     82.8±0.64µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.00    133.1±2.29µs        ? ?/sec    1.01    134.6±1.73µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.00     87.3±0.93µs        ? ?/sec    1.01     88.3±0.43µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.06     19.3±1.28µs        ? ?/sec    1.00     18.2±0.41µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.01     97.2±5.25µs        ? ?/sec    1.00     96.1±1.17µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.00     24.1±0.91µs        ? ?/sec    1.01     24.3±0.91µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.02     81.8±0.60µs        ? ?/sec    1.00     80.2±0.69µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.03    105.7±1.03µs        ? ?/sec    1.00    102.7±1.07µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.01     83.2±2.26µs        ? ?/sec    1.00     82.7±0.55µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.00    107.7±1.24µs        ? ?/sec    1.00    107.5±1.86µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.06    176.2±1.14µs        ? ?/sec    1.00    167.0±1.06µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.01    111.6±0.50µs        ? ?/sec    1.00    110.2±1.42µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.00    146.5±0.88µs        ? ?/sec    1.00    146.0±0.81µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.00    191.6±2.63µs        ? ?/sec    1.01    193.7±3.59µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.00    151.2±0.54µs        ? ?/sec    1.00    150.9±0.86µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.00     97.3±0.70µs        ? ?/sec    1.01     98.1±1.54µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.00    164.0±1.43µs        ? ?/sec    1.00    164.3±0.92µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.00    102.4±1.88µs        ? ?/sec    1.01    103.8±0.84µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.07     46.9±2.48µs        ? ?/sec    1.00     44.0±2.56µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.02    140.3±1.24µs        ? ?/sec    1.00    137.8±1.42µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.08     53.3±1.35µs        ? ?/sec    1.00     49.3±2.39µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.00     89.5±0.59µs        ? ?/sec    1.04     93.0±7.64µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.00     96.0±1.25µs        ? ?/sec    1.00     96.4±0.52µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.00     92.1±0.85µs        ? ?/sec    1.02     94.1±0.54µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.00    120.1±3.49µs        ? ?/sec    1.00    120.5±3.14µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.00    155.4±0.81µs        ? ?/sec    1.00    155.3±1.29µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.00    124.0±1.52µs        ? ?/sec    1.01    124.7±1.19µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.01     34.8±0.14µs        ? ?/sec    1.00     34.6±0.16µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.01    110.7±1.98µs        ? ?/sec    1.00    109.6±0.41µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.00     38.8±0.24µs        ? ?/sec    1.00     38.9±0.51µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.00     93.5±0.72µs        ? ?/sec    1.01     94.0±0.65µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.00    144.4±2.06µs        ? ?/sec    1.01    146.0±1.48µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.00     97.9±0.76µs        ? ?/sec    1.02    100.1±2.34µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.01     29.0±1.19µs        ? ?/sec    1.00     28.8±0.23µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.00    107.7±1.14µs        ? ?/sec    1.00    107.7±1.03µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.00     33.2±0.16µs        ? ?/sec    1.01     33.5±0.22µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, half NULLs            1.01     98.4±2.45µs        ? ?/sec    1.00     97.6±2.40µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, no NULLs              1.00     23.5±0.81µs        ? ?/sec    1.01     23.7±0.79µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, half NULLs             1.00    218.7±1.43µs        ? ?/sec    1.02    223.8±1.15µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, no NULLs               1.00    119.0±2.11µs        ? ?/sec    1.06    126.0±2.08µs        ? ?/sec

@alamb-ghbot
Copy link

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

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                byteviewdecoder_perf                   main
-----                                --------------------                   ----
arrow_reader_clickbench/async/Q1     1.00      2.4±0.04ms        ? ?/sec    1.00      2.4±0.03ms        ? ?/sec
arrow_reader_clickbench/async/Q10    1.00     14.4±0.57ms        ? ?/sec    1.08     15.6±0.52ms        ? ?/sec
arrow_reader_clickbench/async/Q11    1.00     15.0±0.50ms        ? ?/sec    1.11     16.7±0.68ms        ? ?/sec
arrow_reader_clickbench/async/Q12    1.00     26.2±0.31ms        ? ?/sec    1.02     26.9±0.32ms        ? ?/sec
arrow_reader_clickbench/async/Q13    1.02     32.1±0.44ms        ? ?/sec    1.00     31.3±0.89ms        ? ?/sec
arrow_reader_clickbench/async/Q14    1.00     28.1±0.51ms        ? ?/sec    1.01     28.3±0.40ms        ? ?/sec
arrow_reader_clickbench/async/Q19    1.19      6.4±0.31ms        ? ?/sec    1.00      5.4±0.13ms        ? ?/sec
arrow_reader_clickbench/async/Q20    1.16    150.8±2.11ms        ? ?/sec    1.00    130.3±1.53ms        ? ?/sec
arrow_reader_clickbench/async/Q21    1.06    176.5±2.67ms        ? ?/sec    1.00    166.7±2.01ms        ? ?/sec
arrow_reader_clickbench/async/Q22    1.00   306.6±39.09ms        ? ?/sec    1.02   313.2±29.34ms        ? ?/sec
arrow_reader_clickbench/async/Q23    1.00    408.4±3.71ms        ? ?/sec    1.00    409.8±5.96ms        ? ?/sec
arrow_reader_clickbench/async/Q24    1.00     34.3±0.86ms        ? ?/sec    1.09     37.3±0.99ms        ? ?/sec
arrow_reader_clickbench/async/Q27    1.00    100.1±0.68ms        ? ?/sec    1.02    101.7±1.20ms        ? ?/sec
arrow_reader_clickbench/async/Q28    1.00     99.1±0.92ms        ? ?/sec    1.02    101.0±1.64ms        ? ?/sec
arrow_reader_clickbench/async/Q30    1.00     31.3±0.89ms        ? ?/sec    1.03     32.4±0.72ms        ? ?/sec
arrow_reader_clickbench/async/Q36    1.01    110.9±1.67ms        ? ?/sec    1.00    109.4±1.17ms        ? ?/sec
arrow_reader_clickbench/async/Q37    1.00     84.9±1.18ms        ? ?/sec    1.01     85.4±0.97ms        ? ?/sec
arrow_reader_clickbench/async/Q38    1.01     33.7±0.40ms        ? ?/sec    1.00     33.4±0.45ms        ? ?/sec
arrow_reader_clickbench/async/Q39    1.04     48.0±0.83ms        ? ?/sec    1.00     46.2±0.51ms        ? ?/sec
arrow_reader_clickbench/async/Q40    1.03     29.0±0.76ms        ? ?/sec    1.00     28.2±0.62ms        ? ?/sec
arrow_reader_clickbench/async/Q41    1.00     23.0±0.33ms        ? ?/sec    1.00     22.9±0.47ms        ? ?/sec
arrow_reader_clickbench/async/Q42    1.04     11.3±0.17ms        ? ?/sec    1.00     10.9±0.23ms        ? ?/sec
arrow_reader_clickbench/sync/Q1      1.00      2.0±0.02ms        ? ?/sec    1.01      2.1±0.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q10     1.00      9.8±0.25ms        ? ?/sec    1.07     10.5±0.37ms        ? ?/sec
arrow_reader_clickbench/sync/Q11     1.00     11.7±0.14ms        ? ?/sec    1.04     12.1±0.29ms        ? ?/sec
arrow_reader_clickbench/sync/Q12     1.00     34.2±0.93ms        ? ?/sec    1.00     34.2±1.90ms        ? ?/sec
arrow_reader_clickbench/sync/Q13     1.00     45.1±0.62ms        ? ?/sec    1.10     49.7±0.73ms        ? ?/sec
arrow_reader_clickbench/sync/Q14     1.01     36.9±0.89ms        ? ?/sec    1.00     36.7±0.49ms        ? ?/sec
arrow_reader_clickbench/sync/Q19     1.01      4.3±0.09ms        ? ?/sec    1.00      4.3±0.04ms        ? ?/sec
arrow_reader_clickbench/sync/Q20     1.00    179.4±1.87ms        ? ?/sec    1.01    180.7±2.55ms        ? ?/sec
arrow_reader_clickbench/sync/Q21     1.00    239.9±3.32ms        ? ?/sec    1.01    242.5±3.00ms        ? ?/sec
arrow_reader_clickbench/sync/Q22     1.00    486.7±5.94ms        ? ?/sec    1.00    487.8±6.31ms        ? ?/sec
arrow_reader_clickbench/sync/Q23     1.00   446.5±19.82ms        ? ?/sec    1.02   453.6±19.99ms        ? ?/sec
arrow_reader_clickbench/sync/Q24     1.00     45.5±0.80ms        ? ?/sec    1.01     46.0±0.86ms        ? ?/sec
arrow_reader_clickbench/sync/Q27     1.00    156.8±1.54ms        ? ?/sec    1.01    158.8±1.83ms        ? ?/sec
arrow_reader_clickbench/sync/Q28     1.00    150.9±1.33ms        ? ?/sec    1.01    151.8±2.46ms        ? ?/sec
arrow_reader_clickbench/sync/Q30     1.00     31.0±0.81ms        ? ?/sec    1.04     32.3±0.43ms        ? ?/sec
arrow_reader_clickbench/sync/Q36     1.01    158.7±2.18ms        ? ?/sec    1.00    157.9±2.23ms        ? ?/sec
arrow_reader_clickbench/sync/Q37     1.02     91.3±2.20ms        ? ?/sec    1.00     89.9±0.79ms        ? ?/sec
arrow_reader_clickbench/sync/Q38     1.04     30.3±0.25ms        ? ?/sec    1.00     29.3±0.76ms        ? ?/sec
arrow_reader_clickbench/sync/Q39     1.00     36.5±0.70ms        ? ?/sec    1.00     36.5±0.83ms        ? ?/sec
arrow_reader_clickbench/sync/Q40     1.00     28.0±0.54ms        ? ?/sec    1.01     28.3±0.78ms        ? ?/sec
arrow_reader_clickbench/sync/Q41     1.00     29.6±0.54ms        ? ?/sec    1.04     30.8±0.93ms        ? ?/sec
arrow_reader_clickbench/sync/Q42     1.02     12.9±0.21ms        ? ?/sec    1.00     12.6±0.21ms        ? ?/sec

@alamb-ghbot
Copy link

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

@Dandandan Dandandan changed the title Improve parquet byteview decoder performance Improve parquet byteview decoder performance (up to -20%) Jan 21, 2026
@Dandandan Dandandan changed the title Improve parquet byteview decoder performance (up to -20%) Improve parquet BinaryView / StringView decoder performance (up to -20%) Jan 21, 2026
@Dandandan Dandandan marked this pull request as ready for review January 21, 2026 13:15
@Dandandan
Copy link
Contributor Author

run benchmark arrow_reader

let read = self.decoder.read(len, |keys| {
output
.views
.extend(keys.iter().map(|k| match dict.views.get(*k as usize) {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is the largest optimization.

}

if self.validate_utf8 {
if VALIDATE_UTF8 {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I think this is the main improvement for the plain decoder

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                                      byteviewdecoder_perf                   main
-----                                                                                                      --------------------                   ----
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.04  1274.4±13.39µs        ? ?/sec    1.00  1223.0±11.14µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.02  1286.5±15.53µs        ? ?/sec    1.00   1265.6±7.38µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.04  1282.1±12.19µs        ? ?/sec    1.00   1230.5±5.74µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.00    474.7±5.84µs        ? ?/sec    1.04    495.8±5.87µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.00    647.4±7.52µs        ? ?/sec    1.01    652.6±4.54µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.00   483.4±11.90µs        ? ?/sec    1.00   483.5±12.97µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.02   571.8±19.54µs        ? ?/sec    1.00   558.9±12.87µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.01   727.4±10.37µs        ? ?/sec    1.00    718.6±7.77µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.02    580.9±5.87µs        ? ?/sec    1.00    570.3±5.69µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    222.7±1.98µs        ? ?/sec    1.13    252.7±3.87µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.03   270.5±10.22µs        ? ?/sec    1.00    261.4±2.36µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.00    231.3±4.82µs        ? ?/sec    1.13   260.6±19.37µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.00    288.1±4.97µs        ? ?/sec    1.18    339.5±5.72µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.00    283.3±1.69µs        ? ?/sec    1.15    325.8±4.02µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.00    303.7±2.09µs        ? ?/sec    1.05    318.4±1.65µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.00    295.9±7.52µs        ? ?/sec    1.17    347.5±3.71µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.04  1124.7±25.62µs        ? ?/sec    1.00  1080.5±15.55µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.04   921.5±13.84µs        ? ?/sec    1.00    889.7±7.78µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.04   1128.7±5.86µs        ? ?/sec    1.00   1085.8±5.11µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.13    456.5±7.61µs        ? ?/sec    1.00    402.8±3.94µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.07    581.6±2.66µs        ? ?/sec    1.00   543.7±12.40µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.12    461.3±7.13µs        ? ?/sec    1.00    412.2±5.41µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.25    202.6±2.00µs        ? ?/sec    1.00    161.5±1.31µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.13    341.5±3.72µs        ? ?/sec    1.00    302.4±3.45µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.25    208.0±3.56µs        ? ?/sec    1.00    167.0±0.64µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.55    118.8±1.59µs        ? ?/sec    1.00     76.6±0.54µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.16    298.8±1.62µs        ? ?/sec    1.00    258.6±1.11µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.48    123.0±1.77µs        ? ?/sec    1.00     82.8±1.40µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.00    737.5±7.01µs        ? ?/sec    1.00   738.1±10.05µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.01    538.3±7.62µs        ? ?/sec    1.00    533.8±6.20µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.00   745.6±11.44µs        ? ?/sec    1.00    743.0±3.33µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.03     66.1±6.41µs        ? ?/sec    1.00     63.9±5.40µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.02    206.9±2.71µs        ? ?/sec    1.00    202.8±1.84µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.16     74.6±5.93µs        ? ?/sec    1.00     64.4±5.26µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.00     94.6±1.81µs        ? ?/sec    1.00     94.2±0.60µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.00    233.2±1.32µs        ? ?/sec    1.00    232.4±2.05µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.01    100.4±3.27µs        ? ?/sec    1.00     99.5±1.20µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.00      9.3±0.23µs        ? ?/sec    1.00      9.4±0.28µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.00    189.1±1.45µs        ? ?/sec    1.00    189.7±2.59µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.00     14.5±0.45µs        ? ?/sec    1.00     14.6±0.54µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.00    183.9±1.54µs        ? ?/sec    1.00    184.1±1.88µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.00    367.2±3.25µs        ? ?/sec    1.00    366.3±7.19µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.00    189.2±1.23µs        ? ?/sec    1.00    189.9±5.26µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.00     13.3±0.23µs        ? ?/sec    1.10     14.6±0.53µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.01   285.2±15.56µs        ? ?/sec    1.00    282.2±1.79µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.00     18.6±0.28µs        ? ?/sec    1.08     20.0±0.62µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.01    368.8±2.11µs        ? ?/sec    1.00    365.9±4.99µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.00    341.4±1.61µs        ? ?/sec    1.00    341.3±4.63µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.01    374.6±3.10µs        ? ?/sec    1.00    372.2±2.53µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.03     28.6±1.23µs        ? ?/sec    1.00     27.7±0.73µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.00    166.3±0.90µs        ? ?/sec    1.03    171.5±1.39µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.02     34.9±1.64µs        ? ?/sec    1.00     34.1±0.59µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00    110.3±0.39µs        ? ?/sec    1.00    110.7±0.65µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.00    118.1±1.34µs        ? ?/sec    1.01    118.9±1.31µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.00    113.7±1.39µs        ? ?/sec    1.00    113.7±0.38µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    160.4±0.66µs        ? ?/sec    1.01    161.7±1.48µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.00    198.4±1.53µs        ? ?/sec    1.01    200.6±1.42µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.00    166.0±2.05µs        ? ?/sec    1.00    166.3±1.11µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     75.4±0.51µs        ? ?/sec    1.01     75.8±0.52µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    153.1±1.25µs        ? ?/sec    1.02    156.4±1.11µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00     81.4±1.28µs        ? ?/sec    1.00     81.2±0.38µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.03    139.2±1.76µs        ? ?/sec    1.00    134.8±1.69µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    189.5±2.91µs        ? ?/sec    1.00    190.4±2.38µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.02    144.0±1.36µs        ? ?/sec    1.00    141.3±1.28µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.05     73.1±1.54µs        ? ?/sec    1.00     69.7±0.21µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.00    151.4±0.65µs        ? ?/sec    1.01    153.6±1.28µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.00     76.6±0.33µs        ? ?/sec    1.02     77.9±0.62µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.01    109.2±1.60µs        ? ?/sec    1.00    108.2±0.91µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.02    133.2±0.71µs        ? ?/sec    1.00    130.7±0.52µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.01    112.0±1.48µs        ? ?/sec    1.00    110.5±2.77µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.01    161.5±0.60µs        ? ?/sec    1.00    160.3±2.35µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.00    231.7±1.24µs        ? ?/sec    1.00    231.6±1.05µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.01    166.6±1.20µs        ? ?/sec    1.00    165.7±2.38µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.01    200.4±1.17µs        ? ?/sec    1.00    199.4±1.22µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    246.5±1.33µs        ? ?/sec    1.01    248.8±5.77µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00    205.9±1.11µs        ? ?/sec    1.00    206.2±2.28µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.04    156.7±1.17µs        ? ?/sec    1.00    151.1±0.95µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    221.1±1.16µs        ? ?/sec    1.01    222.6±1.26µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.01    159.6±0.97µs        ? ?/sec    1.00    157.4±0.60µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.07    103.2±1.55µs        ? ?/sec    1.00     96.6±1.13µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.02    200.3±2.61µs        ? ?/sec    1.00    195.8±4.51µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.03    109.1±0.96µs        ? ?/sec    1.00    106.0±1.20µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.00     78.4±1.16µs        ? ?/sec    1.00     78.3±0.89µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.00     92.3±1.24µs        ? ?/sec    1.00     91.9±0.69µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.01     81.2±1.19µs        ? ?/sec    1.00     80.8±0.63µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.00    108.2±1.17µs        ? ?/sec    1.00    108.8±2.69µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.00    152.9±2.13µs        ? ?/sec    1.00    152.6±1.76µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.00    112.8±1.57µs        ? ?/sec    1.00    112.9±0.67µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     42.6±0.15µs        ? ?/sec    1.01     42.9±0.40µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.00    118.0±1.25µs        ? ?/sec    1.00    118.0±0.92µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.00     46.8±0.27µs        ? ?/sec    1.00     46.8±0.17µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.04    106.6±1.32µs        ? ?/sec    1.00    102.1±1.73µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.00    154.5±1.87µs        ? ?/sec    1.00    154.0±2.41µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.02    109.7±0.63µs        ? ?/sec    1.00    107.2±0.72µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.00     36.6±0.20µs        ? ?/sec    1.02     37.2±0.53µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.00    115.6±0.59µs        ? ?/sec    1.01    116.5±1.18µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.00     41.7±0.13µs        ? ?/sec    1.00     41.8±0.22µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.00     84.4±3.27µs        ? ?/sec    1.00     84.1±0.94µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.00     90.7±1.33µs        ? ?/sec    1.00     90.6±1.54µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.01     87.0±2.06µs        ? ?/sec    1.00     86.6±0.84µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.00    108.5±1.93µs        ? ?/sec    1.00    108.6±0.67µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.00    143.6±0.94µs        ? ?/sec    1.00    143.7±2.26µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.00    112.6±0.70µs        ? ?/sec    1.00    112.9±1.34µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.01     23.4±0.35µs        ? ?/sec    1.00     23.3±0.35µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.00     99.1±0.80µs        ? ?/sec    1.00     98.8±1.61µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.00     27.6±0.37µs        ? ?/sec    1.00     27.6±0.47µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.07     88.4±3.83µs        ? ?/sec    1.00     82.6±0.46µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.00    134.3±2.00µs        ? ?/sec    1.00    134.2±1.78µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.03     90.8±3.16µs        ? ?/sec    1.00     87.8±1.42µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.00     15.1±0.35µs        ? ?/sec    1.01     15.3±0.33µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.01     97.6±3.96µs        ? ?/sec    1.00     96.8±1.01µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.00     21.3±0.41µs        ? ?/sec    1.01     21.4±0.44µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.00     79.8±0.97µs        ? ?/sec    1.00     80.0±2.38µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.00    101.3±1.03µs        ? ?/sec    1.01    102.4±0.89µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.00     82.5±1.08µs        ? ?/sec    1.00     82.5±1.18µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.02    107.6±1.73µs        ? ?/sec    1.00    106.0±0.68µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.00    166.9±3.14µs        ? ?/sec    1.01    167.9±4.56µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.01    110.6±3.06µs        ? ?/sec    1.00    109.9±0.62µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.00    145.3±0.66µs        ? ?/sec    1.01    146.8±0.72µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.00    190.9±1.43µs        ? ?/sec    1.01    192.9±1.70µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.00    150.3±1.35µs        ? ?/sec    1.01    152.1±1.21µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.02    100.3±2.22µs        ? ?/sec    1.00     98.3±0.83µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.00    164.8±2.50µs        ? ?/sec    1.01    165.9±2.73µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.02    105.4±0.67µs        ? ?/sec    1.00    103.7±0.81µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.01     42.1±1.59µs        ? ?/sec    1.00     41.7±2.56µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.00    136.2±2.44µs        ? ?/sec    1.01    137.1±1.50µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.00     48.8±2.45µs        ? ?/sec    1.00     48.6±3.42µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.00     82.9±0.80µs        ? ?/sec    1.00     82.9±0.65µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.00     92.3±0.54µs        ? ?/sec    1.00     92.0±0.66µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.00     85.6±0.80µs        ? ?/sec    1.00     85.5±0.73µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.00    110.8±2.56µs        ? ?/sec    1.00    110.5±0.23µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.00    149.6±1.91µs        ? ?/sec    1.00    149.6±2.86µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.00    115.5±2.65µs        ? ?/sec    1.00    115.5±2.59µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.00     34.8±0.38µs        ? ?/sec    1.00     34.9±0.34µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.01    110.8±2.84µs        ? ?/sec    1.00    110.2±0.25µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.00     39.3±0.33µs        ? ?/sec    1.00     39.3±0.23µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.05     98.5±0.34µs        ? ?/sec    1.00     94.1±0.53µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.00    146.3±0.60µs        ? ?/sec    1.00    145.8±1.78µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.03    102.3±1.08µs        ? ?/sec    1.00     99.8±0.80µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.00     29.1±0.17µs        ? ?/sec    1.00     28.9±0.25µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.00    107.4±1.00µs        ? ?/sec    1.00    107.9±1.94µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.00     33.7±0.99µs        ? ?/sec    1.00     33.5±0.36µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.01      6.2±0.06ms        ? ?/sec    1.00      6.1±0.15ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.04     12.3±0.26ms        ? ?/sec    1.00     11.9±0.22ms        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.03    495.5±8.02µs        ? ?/sec    1.00    479.8±7.03µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.00    646.9±4.85µs        ? ?/sec    1.01    653.4±5.46µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.00   487.1±16.24µs        ? ?/sec    1.00   485.7±10.21µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.05   725.9±27.54µs        ? ?/sec    1.00   692.7±12.64µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.02    805.5±8.55µs        ? ?/sec    1.00   792.6±15.33µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.03    728.7±5.95µs        ? ?/sec    1.00   708.5±18.87µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.01    333.7±2.35µs        ? ?/sec    1.00    328.8±2.96µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.10    423.6±4.35µs        ? ?/sec    1.00    383.8±3.99µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.02    340.5±5.40µs        ? ?/sec    1.00    334.2±1.58µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    219.7±2.92µs        ? ?/sec    1.15    252.9±3.24µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.00    245.3±6.84µs        ? ?/sec    1.07    262.0±1.26µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.00    206.8±3.58µs        ? ?/sec    1.25    258.5±3.26µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.00    415.2±2.30µs        ? ?/sec    1.15    477.1±7.42µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.00    365.0±1.59µs        ? ?/sec    1.05    381.8±7.18µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.00    426.9±2.86µs        ? ?/sec    1.14    486.9±3.79µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.00     94.0±1.36µs        ? ?/sec    1.00     94.0±1.28µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.00    100.5±1.08µs        ? ?/sec    1.00    100.8±1.15µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.00     96.6±0.76µs        ? ?/sec    1.01     97.2±0.64µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.00    128.2±0.54µs        ? ?/sec    1.00    128.1±0.57µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.00    164.0±1.00µs        ? ?/sec    1.00    164.6±4.31µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.00    133.0±1.15µs        ? ?/sec    1.00    133.4±4.03µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     42.5±0.16µs        ? ?/sec    1.01     43.1±0.32µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.00    118.3±0.71µs        ? ?/sec    1.00    118.6±1.20µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.00     46.6±0.18µs        ? ?/sec    1.02     47.3±0.34µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.05    106.4±1.25µs        ? ?/sec    1.00    101.5±0.38µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.00    153.8±1.77µs        ? ?/sec    1.00    154.3±3.43µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.02    110.4±0.55µs        ? ?/sec    1.00    107.8±2.09µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.00     36.9±0.16µs        ? ?/sec    1.01     37.1±0.39µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.00    115.5±0.70µs        ? ?/sec    1.00    115.7±0.87µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.01     41.9±0.39µs        ? ?/sec    1.00     41.6±0.19µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.00     83.9±0.85µs        ? ?/sec    1.01     84.4±0.67µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.00     90.9±2.14µs        ? ?/sec    1.00     90.4±2.42µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.00     86.6±1.74µs        ? ?/sec    1.00     86.8±1.25µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.00    109.0±2.20µs        ? ?/sec    1.00    108.9±1.18µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.00    144.3±1.64µs        ? ?/sec    1.00    144.1±1.03µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.00    113.1±1.36µs        ? ?/sec    1.00    113.1±1.96µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     23.4±0.35µs        ? ?/sec    1.02     23.9±0.40µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.00     99.4±1.35µs        ? ?/sec    1.00     99.7±2.34µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.00     27.8±0.44µs        ? ?/sec    1.01     28.1±0.33µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.06     87.7±1.85µs        ? ?/sec    1.00     83.1±0.58µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.01    135.8±3.01µs        ? ?/sec    1.00    134.8±3.74µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.02     90.8±2.96µs        ? ?/sec    1.00     88.7±0.53µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.00     18.0±0.58µs        ? ?/sec    1.00     18.0±0.54µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.00     96.2±0.74µs        ? ?/sec    1.01     96.8±1.51µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.00     23.0±0.52µs        ? ?/sec    1.04     23.8±1.03µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.00     80.0±0.81µs        ? ?/sec    1.00     80.2±1.75µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.00    101.7±1.21µs        ? ?/sec    1.01    102.8±2.07µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.00     82.5±0.65µs        ? ?/sec    1.00     82.5±0.54µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.00    105.6±3.25µs        ? ?/sec    1.02    107.4±1.65µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.01    169.0±2.03µs        ? ?/sec    1.00    166.9±1.69µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.00    109.0±1.38µs        ? ?/sec    1.01    110.0±2.59µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.00    146.1±1.22µs        ? ?/sec    1.00    146.7±0.62µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.00    192.5±2.95µs        ? ?/sec    1.01   194.1±13.91µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.00    150.8±0.97µs        ? ?/sec    1.00    150.9±0.59µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.03    100.6±2.35µs        ? ?/sec    1.00     97.7±1.53µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.00    164.7±1.24µs        ? ?/sec    1.00    165.2±6.86µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.00    103.7±0.69µs        ? ?/sec    1.00    103.8±1.57µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.10     47.1±2.77µs        ? ?/sec    1.00     42.7±1.99µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.00    133.9±1.44µs        ? ?/sec    1.02    136.9±4.26µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.11     53.8±2.36µs        ? ?/sec    1.00     48.7±2.32µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.00     89.9±1.86µs        ? ?/sec    1.02     91.5±1.10µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.00     96.2±0.38µs        ? ?/sec    1.00     96.5±0.69µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.00     92.2±0.78µs        ? ?/sec    1.02     94.3±4.00µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.00    119.7±2.95µs        ? ?/sec    1.00    119.9±1.90µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.00    155.7±1.82µs        ? ?/sec    1.00    155.2±4.20µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.00    123.9±0.69µs        ? ?/sec    1.00    124.1±0.79µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     34.7±0.36µs        ? ?/sec    1.00     34.8±0.65µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.01    110.7±0.64µs        ? ?/sec    1.00    110.1±1.32µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.00     38.9±0.90µs        ? ?/sec    1.00     39.0±0.43µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.04     98.2±1.37µs        ? ?/sec    1.00     94.4±3.92µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.00    146.4±1.02µs        ? ?/sec    1.00    146.0±0.99µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.02    101.1±1.80µs        ? ?/sec    1.00     99.4±0.54µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.00     28.9±0.17µs        ? ?/sec    1.00     29.0±0.27µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.01    108.7±5.20µs        ? ?/sec    1.00    107.7±1.08µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.00     33.3±0.44µs        ? ?/sec    1.01     33.6±0.21µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, half NULLs            1.01     98.9±0.66µs        ? ?/sec    1.00     97.9±1.69µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, no NULLs              1.00     22.9±0.69µs        ? ?/sec    1.04     23.9±1.19µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, half NULLs             1.00    218.2±2.81µs        ? ?/sec    1.03    224.3±2.13µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, no NULLs               1.00    117.7±1.19µs        ? ?/sec    1.06    125.1±2.43µs        ? ?/sec

@alamb-ghbot
Copy link

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

@alamb
Copy link
Contributor

alamb commented Jan 21, 2026

arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.00    245.3±6.84µs        ? ?/sec    1.07    262.0±1.26µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.00    206.8±3.58µs        ? ?/sec    1.25    258.5±3.26µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.00    415.2±2.30µs        ? ?/sec    1.15    477.1±7.42µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.00    365.0±1.59µs        ? ?/sec    1.05    381.8±7.18µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.00    426.9±2.86µs        ? ?/sec    1.14    486.9±3.79µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.00     94.0±1.36µs        ? ?/sec    1.00     94.0±1.28µs        ? ?/sec

Those are some pretty nice improvements

@Dandandan
Copy link
Contributor Author

Also

arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    222.7±1.98µs        ? ?/sec    1.13    252.7±3.87µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.03   270.5±10.22µs        ? ?/sec    1.00    261.4±2.36µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.00    231.3±4.82µs        ? ?/sec    1.13   260.6±19.37µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.00    288.1±4.97µs        ? ?/sec    1.18    339.5±5.72µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.00    283.3±1.69µs        ? ?/sec    1.15    325.8±4.02µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.00    303.7±2.09µs        ? ?/sec    1.05    318.4±1.65µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.00    295.9±7.52µs        ? ?/sec    1.17    347.5±3.71µs        ? ?/sec

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                byteviewdecoder_perf                   main
-----                                --------------------                   ----
arrow_reader_clickbench/async/Q1     1.00      2.3±0.03ms        ? ?/sec    1.00      2.3±0.04ms        ? ?/sec
arrow_reader_clickbench/async/Q10    1.00     12.7±0.54ms        ? ?/sec    1.11     14.1±0.74ms        ? ?/sec
arrow_reader_clickbench/async/Q11    1.00     13.7±0.46ms        ? ?/sec    1.12     15.4±0.64ms        ? ?/sec
arrow_reader_clickbench/async/Q12    1.00     25.0±0.60ms        ? ?/sec    1.02     25.5±0.58ms        ? ?/sec
arrow_reader_clickbench/async/Q13    1.00     29.9±0.31ms        ? ?/sec    1.03     30.8±0.46ms        ? ?/sec
arrow_reader_clickbench/async/Q14    1.00     27.3±0.35ms        ? ?/sec    1.03     28.2±0.61ms        ? ?/sec
arrow_reader_clickbench/async/Q19    1.07      5.7±0.23ms        ? ?/sec    1.00      5.4±0.16ms        ? ?/sec
arrow_reader_clickbench/async/Q20    1.00   124.7±16.34ms        ? ?/sec    1.18    147.3±1.91ms        ? ?/sec
arrow_reader_clickbench/async/Q21    1.00    167.7±2.79ms        ? ?/sec    1.00    167.2±1.62ms        ? ?/sec
arrow_reader_clickbench/async/Q22    1.00   325.5±24.95ms        ? ?/sec    1.00   325.6±10.20ms        ? ?/sec
arrow_reader_clickbench/async/Q23    1.00    404.9±3.08ms        ? ?/sec    1.01    407.8±4.94ms        ? ?/sec
arrow_reader_clickbench/async/Q24    1.00     33.5±0.52ms        ? ?/sec    1.02     34.2±0.81ms        ? ?/sec
arrow_reader_clickbench/async/Q27    1.00     99.2±0.98ms        ? ?/sec    1.01    100.1±0.75ms        ? ?/sec
arrow_reader_clickbench/async/Q28    1.00     97.4±0.43ms        ? ?/sec    1.01     98.6±0.70ms        ? ?/sec
arrow_reader_clickbench/async/Q30    1.00     29.8±1.01ms        ? ?/sec    1.04     30.9±0.56ms        ? ?/sec
arrow_reader_clickbench/async/Q36    1.00    107.4±1.22ms        ? ?/sec    1.00    107.3±1.17ms        ? ?/sec
arrow_reader_clickbench/async/Q37    1.00     83.1±0.49ms        ? ?/sec    1.02     84.5±0.79ms        ? ?/sec
arrow_reader_clickbench/async/Q38    1.00     32.5±0.32ms        ? ?/sec    1.00     32.5±0.56ms        ? ?/sec
arrow_reader_clickbench/async/Q39    1.00     45.6±0.63ms        ? ?/sec    1.00     45.8±0.60ms        ? ?/sec
arrow_reader_clickbench/async/Q40    1.00     27.0±0.34ms        ? ?/sec    1.05     28.2±1.06ms        ? ?/sec
arrow_reader_clickbench/async/Q41    1.00     21.8±0.48ms        ? ?/sec    1.04     22.7±0.74ms        ? ?/sec
arrow_reader_clickbench/async/Q42    1.00     10.7±0.26ms        ? ?/sec    1.04     11.1±0.23ms        ? ?/sec
arrow_reader_clickbench/sync/Q1      1.00      2.0±0.05ms        ? ?/sec    1.01      2.1±0.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q10     1.00      8.7±0.06ms        ? ?/sec    1.16     10.1±0.30ms        ? ?/sec
arrow_reader_clickbench/sync/Q11     1.00     10.4±0.26ms        ? ?/sec    1.13     11.7±0.10ms        ? ?/sec
arrow_reader_clickbench/sync/Q12     1.00     31.6±0.48ms        ? ?/sec    1.04     32.8±0.37ms        ? ?/sec
arrow_reader_clickbench/sync/Q13     1.12     42.7±0.79ms        ? ?/sec    1.00     38.1±0.49ms        ? ?/sec
arrow_reader_clickbench/sync/Q14     1.00     33.9±0.37ms        ? ?/sec    1.27     43.0±1.16ms        ? ?/sec
arrow_reader_clickbench/sync/Q19     1.00      4.1±0.03ms        ? ?/sec    1.02      4.2±0.05ms        ? ?/sec
arrow_reader_clickbench/sync/Q20     1.00    176.2±0.81ms        ? ?/sec    1.00    175.7±1.92ms        ? ?/sec
arrow_reader_clickbench/sync/Q21     1.04    235.1±2.39ms        ? ?/sec    1.00    226.2±4.79ms        ? ?/sec
arrow_reader_clickbench/sync/Q22     1.01    481.6±5.16ms        ? ?/sec    1.00    474.9±4.53ms        ? ?/sec
arrow_reader_clickbench/sync/Q23     1.02   450.5±18.67ms        ? ?/sec    1.00   442.8±15.08ms        ? ?/sec
arrow_reader_clickbench/sync/Q24     1.00     44.9±0.71ms        ? ?/sec    1.01     45.4±0.78ms        ? ?/sec
arrow_reader_clickbench/sync/Q27     1.01    155.0±1.14ms        ? ?/sec    1.00    153.5±1.47ms        ? ?/sec
arrow_reader_clickbench/sync/Q28     1.00    148.6±1.91ms        ? ?/sec    1.00    148.4±1.16ms        ? ?/sec
arrow_reader_clickbench/sync/Q30     1.00     29.8±0.48ms        ? ?/sec    1.05     31.2±0.60ms        ? ?/sec
arrow_reader_clickbench/sync/Q36     1.00    152.9±1.95ms        ? ?/sec    1.00    152.6±1.90ms        ? ?/sec
arrow_reader_clickbench/sync/Q37     1.00     87.5±1.08ms        ? ?/sec    1.01     88.5±0.95ms        ? ?/sec
arrow_reader_clickbench/sync/Q38     1.00     28.7±0.24ms        ? ?/sec    1.02     29.2±0.58ms        ? ?/sec
arrow_reader_clickbench/sync/Q39     1.00     34.6±0.69ms        ? ?/sec    1.02     35.2±1.05ms        ? ?/sec
arrow_reader_clickbench/sync/Q40     1.00     26.9±0.73ms        ? ?/sec    1.01     27.1±0.60ms        ? ?/sec
arrow_reader_clickbench/sync/Q41     1.02     29.4±0.69ms        ? ?/sec    1.00     28.8±0.54ms        ? ?/sec
arrow_reader_clickbench/sync/Q42     1.03     12.7±0.25ms        ? ?/sec    1.00     12.3±0.21ms        ? ?/sec

@alamb-ghbot
Copy link

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

Copy link
Contributor

@alamb alamb left a comment

Choose a reason for hiding this comment

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

I reviewed this carefully and the changes make sense to me -- thank you @Dandandan

let len = u32::from_le_bytes(len_bytes);

let start_offset = self.offset + 4;
let len = u32::from_le_bytes(unsafe { *(buf.as_ptr().add(offset) as *const [u8; 4]) });
Copy link
Contributor

Choose a reason for hiding this comment

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

The idea here is to save a bounds check for the length, right?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah... although I probably need to recheck whether it makes a difference.

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                                      byteviewdecoder_perf                   main
-----                                                                                                      --------------------                   ----
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.05  1281.8±23.06µs        ? ?/sec    1.00  1225.2±14.66µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.02  1291.1±10.43µs        ? ?/sec    1.00   1264.3±5.33µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.05  1293.5±28.65µs        ? ?/sec    1.00   1229.0±6.16µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.00    497.5±3.92µs        ? ?/sec    1.00    497.6±3.65µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.01    659.7±3.19µs        ? ?/sec    1.00   652.8±17.43µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.04    502.2±7.34µs        ? ?/sec    1.00    482.5±6.67µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.00    552.0±4.02µs        ? ?/sec    1.00    551.9±8.07µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.00    718.3±4.05µs        ? ?/sec    1.01   723.4±12.07µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.01   566.8±11.16µs        ? ?/sec    1.00    560.4±6.63µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    202.5±4.16µs        ? ?/sec    1.29    260.3±2.39µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.00    252.6±1.68µs        ? ?/sec    1.07    271.1±1.26µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.00    204.6±1.87µs        ? ?/sec    1.30    266.6±2.93µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.00    290.0±2.99µs        ? ?/sec    1.18    342.9±9.83µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.00    281.4±2.60µs        ? ?/sec    1.17    328.5±3.94µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.00    309.5±5.21µs        ? ?/sec    1.03    318.7±3.34µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.00    297.9±1.76µs        ? ?/sec    1.17    349.0±2.23µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.00   1090.9±7.29µs        ? ?/sec    1.00  1085.6±18.18µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.09   984.2±23.96µs        ? ?/sec    1.00    902.2±4.05µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.00   1099.2±6.46µs        ? ?/sec    1.00  1097.4±43.85µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.14    473.4±7.45µs        ? ?/sec    1.00    414.8±3.79µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.22    670.2±5.39µs        ? ?/sec    1.00    549.3±5.11µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.14    479.5±8.62µs        ? ?/sec    1.00    418.8±2.31µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.22    195.4±3.59µs        ? ?/sec    1.00    160.2±1.10µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.12    339.0±1.52µs        ? ?/sec    1.00    301.9±3.48µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.21    200.4±2.14µs        ? ?/sec    1.00    165.6±0.80µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.54    118.5±1.14µs        ? ?/sec    1.00     77.1±2.30µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.15    299.9±2.14µs        ? ?/sec    1.00    259.7±1.27µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.49    123.4±3.72µs        ? ?/sec    1.00     82.9±1.65µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.00    683.9±2.76µs        ? ?/sec    1.08   737.1±16.19µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.09    582.0±2.19µs        ? ?/sec    1.00    532.3±2.04µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.00    690.0±2.73µs        ? ?/sec    1.08    742.0±3.46µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.00     63.7±2.03µs        ? ?/sec    1.02     65.2±2.22µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.35    274.9±2.01µs        ? ?/sec    1.00   203.6±13.18µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.00     72.4±2.96µs        ? ?/sec    1.01     73.2±2.78µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.00     86.5±0.48µs        ? ?/sec    1.09     94.0±3.37µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.00    229.3±1.30µs        ? ?/sec    1.01    231.8±3.29µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.00     91.6±0.45µs        ? ?/sec    1.08     99.2±1.38µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.01      9.5±0.16µs        ? ?/sec    1.00      9.4±0.24µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.01    190.5±1.07µs        ? ?/sec    1.00    189.1±1.45µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.00     14.4±0.19µs        ? ?/sec    1.01     14.5±0.28µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.00    170.4±1.52µs        ? ?/sec    1.08    184.3±4.63µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.01    373.1±1.90µs        ? ?/sec    1.00    368.6±6.09µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.00    175.7±0.95µs        ? ?/sec    1.08    189.8±2.66µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.07     13.7±0.29µs        ? ?/sec    1.00     12.8±0.28µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.04    295.4±1.41µs        ? ?/sec    1.00    282.8±3.96µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.00     19.9±0.27µs        ? ?/sec    1.00     19.9±0.54µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.00    340.1±2.27µs        ? ?/sec    1.07    364.9±1.66µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.15    394.4±2.13µs        ? ?/sec    1.00    342.4±6.16µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.00    348.0±4.40µs        ? ?/sec    1.07    372.6±4.10µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.04     26.6±0.38µs        ? ?/sec    1.00     25.5±0.65µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.39    238.2±1.27µs        ? ?/sec    1.00    171.9±0.63µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.01     33.2±0.45µs        ? ?/sec    1.00     32.8±0.51µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00    110.7±0.26µs        ? ?/sec    1.00    110.5±0.98µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.00    119.0±1.51µs        ? ?/sec    1.01    119.7±1.37µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.00    113.9±0.42µs        ? ?/sec    1.00    114.3±1.44µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    162.5±1.57µs        ? ?/sec    1.00   162.1±10.73µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.01    202.3±4.38µs        ? ?/sec    1.00    200.6±1.54µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.01    167.6±3.11µs        ? ?/sec    1.00    166.6±3.84µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     75.8±0.47µs        ? ?/sec    1.02     77.0±0.71µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    156.5±1.49µs        ? ?/sec    1.00    156.6±1.16µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00     81.1±0.65µs        ? ?/sec    1.00     81.3±1.02µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.01    135.2±0.85µs        ? ?/sec    1.00    134.1±1.54µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.01    190.9±0.93µs        ? ?/sec    1.00    189.9±0.95µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.01    141.9±2.46µs        ? ?/sec    1.00    141.1±2.72µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.03     72.4±2.70µs        ? ?/sec    1.00     70.0±0.67µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.02    156.9±7.99µs        ? ?/sec    1.00    153.2±2.48µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.03     79.1±0.52µs        ? ?/sec    1.00     76.7±0.47µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.02    108.7±0.78µs        ? ?/sec    1.00    107.0±0.67µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.02    134.3±0.54µs        ? ?/sec    1.00    131.3±2.09µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.02    111.8±0.61µs        ? ?/sec    1.00    110.1±1.12µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.01    162.4±8.87µs        ? ?/sec    1.00    160.8±1.87µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.00    232.6±0.98µs        ? ?/sec    1.00    233.3±1.78µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.00    166.5±1.39µs        ? ?/sec    1.01    167.5±2.06µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00    200.3±0.97µs        ? ?/sec    1.01    202.3±0.56µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    251.9±7.04µs        ? ?/sec    1.00    250.9±6.46µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00    206.7±1.40µs        ? ?/sec    1.01    208.6±0.99µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00    151.5±0.94µs        ? ?/sec    1.00    151.4±0.86µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    222.7±3.11µs        ? ?/sec    1.04   231.2±10.51µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    157.0±1.01µs        ? ?/sec    1.02    159.5±1.21µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.05    109.2±1.87µs        ? ?/sec    1.00    103.9±1.97µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.00    198.9±1.02µs        ? ?/sec    1.01    200.6±7.61µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.05    118.4±1.27µs        ? ?/sec    1.00    112.9±1.83µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.01     79.4±0.72µs        ? ?/sec    1.00     78.4±0.78µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.01     92.4±1.58µs        ? ?/sec    1.00     91.8±0.49µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.01     81.8±1.46µs        ? ?/sec    1.00     80.9±1.06µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.00    108.5±1.41µs        ? ?/sec    1.00    108.4±2.04µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.00    152.9±3.35µs        ? ?/sec    1.00    152.6±1.96µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.00    113.1±0.91µs        ? ?/sec    1.00    112.8±0.29µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.01     41.0±0.19µs        ? ?/sec    1.00     40.7±0.52µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.00    117.6±1.32µs        ? ?/sec    1.00    117.9±2.48µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.01     45.6±0.50µs        ? ?/sec    1.00     45.3±0.18µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.01    102.1±1.01µs        ? ?/sec    1.00    101.4±0.84µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.00    152.8±2.48µs        ? ?/sec    1.00    153.2±1.90µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.00    107.5±1.86µs        ? ?/sec    1.00    107.2±0.52µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.00     36.6±0.38µs        ? ?/sec    1.00     36.6±0.25µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.00    115.3±1.40µs        ? ?/sec    1.01    116.1±3.42µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.00     41.2±0.15µs        ? ?/sec    1.02     42.2±0.39µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.00     84.3±1.40µs        ? ?/sec    1.00     84.1±0.67µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.00     90.6±0.36µs        ? ?/sec    1.00     90.6±1.68µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.00     86.6±0.30µs        ? ?/sec    1.00     86.7±0.55µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.00    108.4±0.81µs        ? ?/sec    1.00    108.1±0.52µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.00    143.5±2.23µs        ? ?/sec    1.00    143.7±2.43µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.00    112.5±1.07µs        ? ?/sec    1.00    112.7±0.92µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.02     23.7±0.30µs        ? ?/sec    1.00     23.2±0.40µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.00     99.0±0.83µs        ? ?/sec    1.00     99.0±0.76µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.01     27.9±0.55µs        ? ?/sec    1.00     27.6±0.33µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.01     84.0±3.75µs        ? ?/sec    1.00     82.8±1.98µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.00    133.4±2.42µs        ? ?/sec    1.00    133.7±0.58µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.00     88.1±1.92µs        ? ?/sec    1.00     87.7±2.24µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.00     15.2±0.40µs        ? ?/sec    1.00     15.2±0.26µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.00     96.8±1.15µs        ? ?/sec    1.00     96.9±2.46µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.00     21.2±0.31µs        ? ?/sec    1.00     21.3±0.35µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.01     81.5±2.39µs        ? ?/sec    1.00     80.4±0.45µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.00    101.3±0.78µs        ? ?/sec    1.01    102.0±1.51µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.00     82.5±0.94µs        ? ?/sec    1.02     83.9±1.50µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.00    107.4±1.88µs        ? ?/sec    1.00    107.6±0.55µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.04    175.7±6.78µs        ? ?/sec    1.00    168.2±3.30µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.01    112.9±6.53µs        ? ?/sec    1.00    111.6±3.60µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.00    146.4±0.61µs        ? ?/sec    1.00    146.8±0.44µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.00    191.3±1.70µs        ? ?/sec    1.01    193.3±2.00µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.00    151.7±1.02µs        ? ?/sec    1.00    151.7±0.62µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.00     97.7±1.88µs        ? ?/sec    1.00     97.9±0.64µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.00    164.7±2.77µs        ? ?/sec    1.01    166.2±5.91µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.00    101.8±0.65µs        ? ?/sec    1.02    103.9±0.67µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.00     45.1±1.75µs        ? ?/sec    1.01     45.4±2.09µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.00    136.1±1.90µs        ? ?/sec    1.01    136.8±0.88µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.02     51.2±2.00µs        ? ?/sec    1.00     50.2±2.64µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.00     83.3±0.54µs        ? ?/sec    1.00     83.2±1.88µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.00     92.6±1.90µs        ? ?/sec    1.00     92.2±0.94µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.00     85.9±0.39µs        ? ?/sec    1.00     85.7±1.27µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.00    111.1±0.75µs        ? ?/sec    1.00    111.1±1.83µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.01    150.0±1.81µs        ? ?/sec    1.00    149.3±0.86µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.00    115.5±0.58µs        ? ?/sec    1.00    115.5±3.16µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.00     33.0±0.17µs        ? ?/sec    1.06     35.0±0.51µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.00    110.6±0.73µs        ? ?/sec    1.00    110.5±0.66µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.00     37.6±0.42µs        ? ?/sec    1.05     39.3±0.25µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.00     93.6±1.08µs        ? ?/sec    1.01     94.2±1.60µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.00    145.0±2.84µs        ? ?/sec    1.00    145.6±1.66µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.00     98.2±1.48µs        ? ?/sec    1.02     99.8±2.22µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.00     28.9±0.21µs        ? ?/sec    1.00     28.9±0.09µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.00    107.6±0.61µs        ? ?/sec    1.00    107.5±0.86µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.00     33.7±0.80µs        ? ?/sec    1.02     34.3±0.44µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.00      6.1±0.17ms        ? ?/sec    1.00      6.1±0.13ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.04     12.3±0.27ms        ? ?/sec    1.00     11.8±0.36ms        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.05    503.8±4.83µs        ? ?/sec    1.00    479.0±4.36µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.02   663.7±16.20µs        ? ?/sec    1.00    651.9±4.49µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.07   517.1±25.55µs        ? ?/sec    1.00    481.6±4.44µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.00   676.0±18.63µs        ? ?/sec    1.02    686.4±4.31µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.00   783.4±15.47µs        ? ?/sec    1.00    782.7±4.87µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.00    682.9±7.76µs        ? ?/sec    1.02    698.9±9.95µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.03   337.3±20.08µs        ? ?/sec    1.00    328.4±1.66µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.11    425.0±4.57µs        ? ?/sec    1.00    383.5±2.06µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.02   341.0±12.73µs        ? ?/sec    1.00    334.4±2.46µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    197.2±3.65µs        ? ?/sec    1.31    258.8±3.21µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.00    249.6±1.59µs        ? ?/sec    1.05    262.5±2.43µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.00    199.8±2.31µs        ? ?/sec    1.29    256.9±2.98µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.00    416.8±2.33µs        ? ?/sec    1.15   477.9±10.72µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.00    368.8±7.73µs        ? ?/sec    1.05    385.6±2.59µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.00    428.5±6.30µs        ? ?/sec    1.14    487.2±4.07µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.00     94.5±0.57µs        ? ?/sec    1.00     94.3±2.10µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.00    100.9±3.09µs        ? ?/sec    1.01    101.7±0.83µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.00     96.9±0.96µs        ? ?/sec    1.00     97.3±2.80µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.00    128.5±1.61µs        ? ?/sec    1.00    128.7±3.19µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.00    163.8±0.70µs        ? ?/sec    1.00    164.2±2.94µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.00    132.6±0.89µs        ? ?/sec    1.00    132.7±1.12µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     42.3±0.37µs        ? ?/sec    1.01     42.9±0.14µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.00    118.4±1.02µs        ? ?/sec    1.00    118.2±1.00µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.00     46.7±0.39µs        ? ?/sec    1.01     47.1±0.22µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.00    102.0±1.50µs        ? ?/sec    1.00    101.8±2.31µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.00    153.1±2.13µs        ? ?/sec    1.00    153.6±0.94µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.00    107.5±4.92µs        ? ?/sec    1.00    107.7±0.85µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.00     36.8±0.49µs        ? ?/sec    1.01     37.0±0.32µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.00    115.3±1.64µs        ? ?/sec    1.00    115.7±1.32µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.00     41.6±0.18µs        ? ?/sec    1.00     41.8±0.28µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.00     84.6±1.02µs        ? ?/sec    1.00     84.3±2.21µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.01     90.9±1.61µs        ? ?/sec    1.00     90.3±0.52µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.01     87.1±1.25µs        ? ?/sec    1.00     86.6±0.88µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.00    108.8±0.68µs        ? ?/sec    1.00    108.8±1.47µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.00    144.0±1.09µs        ? ?/sec    1.00    143.5±0.71µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.00    113.2±1.70µs        ? ?/sec    1.00    113.3±1.42µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     21.8±0.23µs        ? ?/sec    1.09     23.8±0.42µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.01     99.8±0.60µs        ? ?/sec    1.00     98.8±1.64µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.00     26.7±0.39µs        ? ?/sec    1.06     28.2±0.49µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.00     83.5±0.82µs        ? ?/sec    1.00     83.1±1.11µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.00    133.3±1.33µs        ? ?/sec    1.01    134.4±0.61µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.00     87.6±2.05µs        ? ?/sec    1.01     88.8±0.59µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.00     19.0±1.24µs        ? ?/sec    1.01     19.2±0.99µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.00     96.8±3.74µs        ? ?/sec    1.00     96.4±0.72µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.00     24.3±1.22µs        ? ?/sec    1.03     25.0±1.01µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.00     80.1±2.42µs        ? ?/sec    1.00     79.9±1.62µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.03    104.8±2.03µs        ? ?/sec    1.00    101.9±0.77µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.00     82.2±1.49µs        ? ?/sec    1.00     82.0±0.41µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.00    107.1±1.09µs        ? ?/sec    1.00    106.8±0.56µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.05    175.3±4.09µs        ? ?/sec    1.00    167.7±3.18µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.03    112.3±3.89µs        ? ?/sec    1.00    109.4±0.95µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.00    146.5±0.57µs        ? ?/sec    1.00    146.6±0.44µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.00    192.4±2.63µs        ? ?/sec    1.00    191.8±0.88µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.01    152.3±1.44µs        ? ?/sec    1.00    151.4±1.48µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.00     97.6±1.38µs        ? ?/sec    1.00     97.9±2.90µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.00    164.5±2.16µs        ? ?/sec    1.00    164.8±0.88µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.00    102.1±1.26µs        ? ?/sec    1.02    103.8±0.75µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.07     45.5±2.68µs        ? ?/sec    1.00     42.5±2.39µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.00    136.1±2.67µs        ? ?/sec    1.01    136.8±1.73µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.08     53.7±2.29µs        ? ?/sec    1.00     49.6±2.26µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.00     89.8±0.93µs        ? ?/sec    1.02     91.4±1.04µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.00     95.9±1.56µs        ? ?/sec    1.01     96.5±0.48µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.00     92.3±0.44µs        ? ?/sec    1.02     94.1±0.56µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.00    119.6±0.45µs        ? ?/sec    1.00    119.7±0.57µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.01    155.4±2.37µs        ? ?/sec    1.00    154.6±1.80µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.00    124.2±1.52µs        ? ?/sec    1.00    124.1±1.30µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.01     34.9±0.12µs        ? ?/sec    1.00     34.5±0.10µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.00    110.2±0.44µs        ? ?/sec    1.00    109.8±0.50µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.01     39.1±0.43µs        ? ?/sec    1.00     38.8±0.44µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.00     94.3±2.63µs        ? ?/sec    1.00     93.8±0.90µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.00    144.8±0.86µs        ? ?/sec    1.01    145.8±1.89µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.00     98.3±0.46µs        ? ?/sec    1.01     99.4±1.24µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.00     29.0±0.59µs        ? ?/sec    1.00     28.9±0.28µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.00    107.5±0.42µs        ? ?/sec    1.00    107.7±0.43µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.00     33.5±0.13µs        ? ?/sec    1.01     33.9±0.17µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, half NULLs            1.00     97.1±0.45µs        ? ?/sec    1.01     97.7±0.57µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, no NULLs              1.00     23.6±0.67µs        ? ?/sec    1.02     24.1±1.24µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, half NULLs             1.00    217.6±1.25µs        ? ?/sec    1.03    223.7±1.97µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, no NULLs               1.00    120.7±4.76µs        ? ?/sec    1.04    125.2±2.04µs        ? ?/sec

@Dandandan Dandandan changed the title Improve parquet BinaryView / StringView decoder performance (up to -20%) Improve parquet BinaryView / StringView decoder performance (up to -35%) Jan 22, 2026
@Dandandan Dandandan requested a review from alamb January 22, 2026 08:11
@Dandandan
Copy link
Contributor Author

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 byteviewdecoder_perf (5ba4ec2) to ebace17 diff
BENCH_NAME=arrow_reader
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental --bench arrow_reader
BENCH_FILTER=
BENCH_BRANCH_NAME=byteviewdecoder_perf
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                                      byteviewdecoder_perf                   main
-----                                                                                                      --------------------                   ----
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.00  1178.4±10.33µs        ? ?/sec    1.01  1189.3±36.04µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.01  1261.2±24.73µs        ? ?/sec    1.00  1247.8±10.50µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.00  1188.1±15.97µs        ? ?/sec    1.00  1192.2±17.11µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.00    488.6±6.21µs        ? ?/sec    1.00   487.3±28.64µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.01   653.0±11.44µs        ? ?/sec    1.00    649.5±5.68µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.00    482.2±4.06µs        ? ?/sec    1.02    492.4±5.47µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.00   548.2±17.00µs        ? ?/sec    1.01   555.7±18.44µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.01    732.8±6.10µs        ? ?/sec    1.00    726.7±9.16µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.00    565.6±7.09µs        ? ?/sec    1.00    564.9±9.92µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    154.3±7.35µs        ? ?/sec    1.71    263.9±4.24µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.00    178.6±1.77µs        ? ?/sec    1.25    222.5±1.90µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.00    156.5±2.64µs        ? ?/sec    1.66    259.7±2.42µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.00    209.5±2.59µs        ? ?/sec    1.60    335.6±5.44µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.00    192.8±0.80µs        ? ?/sec    1.69    326.1±3.88µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.00    212.2±3.99µs        ? ?/sec    1.32    279.6±3.76µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.00    218.1±5.61µs        ? ?/sec    1.58    344.8±8.87µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.00  1094.2±16.77µs        ? ?/sec    1.02  1119.2±10.30µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.02   942.5±26.19µs        ? ?/sec    1.00    922.4±8.48µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.00   1098.3±9.60µs        ? ?/sec    1.03  1128.4±12.54µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.04    465.3±5.10µs        ? ?/sec    1.00    448.8±3.46µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.07   627.9±12.49µs        ? ?/sec    1.00   587.3±15.02µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.03    473.0±6.96µs        ? ?/sec    1.00    460.7±5.71µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.00    194.7±2.55µs        ? ?/sec    1.04    202.6±2.63µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.04    358.2±7.62µs        ? ?/sec    1.00    344.3±4.04µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.00    199.9±2.36µs        ? ?/sec    1.05    210.6±5.12µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.00    118.6±1.14µs        ? ?/sec    1.01    119.3±2.43µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.06   320.8±12.35µs        ? ?/sec    1.00    301.6±4.44µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.00    124.5±2.52µs        ? ?/sec    1.00    125.1±2.16µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.00    690.7±6.08µs        ? ?/sec    1.08   744.2±11.30µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.00    543.7±6.74µs        ? ?/sec    1.00    543.1±4.33µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.00    696.3±3.24µs        ? ?/sec    1.09   758.7±21.47µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.00     60.6±4.28µs        ? ?/sec    1.17     70.7±2.75µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.13    231.6±5.45µs        ? ?/sec    1.00    205.8±3.69µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.00     74.6±3.74µs        ? ?/sec    1.00     74.6±3.24µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.00     86.5±0.68µs        ? ?/sec    1.10     94.7±4.32µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.09   253.0±14.27µs        ? ?/sec    1.00    233.0±5.15µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.00     91.8±1.96µs        ? ?/sec    1.08     99.3±0.60µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.00      9.2±0.20µs        ? ?/sec    1.01      9.3±0.44µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.11    211.5±8.08µs        ? ?/sec    1.00    190.5±1.75µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.00     14.4±0.23µs        ? ?/sec    1.00     14.4±0.16µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.00    170.5±1.99µs        ? ?/sec    1.09    186.2±9.38µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.07    392.1±3.91µs        ? ?/sec    1.00    366.4±6.44µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.00    175.9±1.96µs        ? ?/sec    1.08    189.5±1.77µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.13     14.6±0.55µs        ? ?/sec    1.00     12.9±0.22µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.12    315.0±4.92µs        ? ?/sec    1.00    281.3±2.00µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.00     20.1±0.53µs        ? ?/sec    1.04     20.8±0.26µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.00   345.0±10.22µs        ? ?/sec    1.07    367.9±2.07µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.05    357.6±3.32µs        ? ?/sec    1.00    341.6±3.20µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.00    350.4±3.27µs        ? ?/sec    1.07   375.8±10.88µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.00     28.9±0.61µs        ? ?/sec    1.08     31.2±0.84µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.17    202.7±1.78µs        ? ?/sec    1.00    173.0±5.01µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.00     37.1±0.91µs        ? ?/sec    1.05     38.7±1.20µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00    110.0±0.67µs        ? ?/sec    1.02    112.4±4.54µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.01    131.2±4.02µs        ? ?/sec    1.00    129.5±1.62µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.00    113.2±0.77µs        ? ?/sec    1.01    114.8±2.11µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    160.1±1.30µs        ? ?/sec    1.01    161.5±2.17µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.00    223.7±3.79µs        ? ?/sec    1.00    223.2±2.71µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.00    165.0±1.17µs        ? ?/sec    1.01    166.5±1.17µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     75.0±0.41µs        ? ?/sec    1.01     75.9±1.55µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    179.4±2.53µs        ? ?/sec    1.00    178.7±3.07µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00     79.7±0.64µs        ? ?/sec    1.01     80.7±1.02µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00    134.4±1.73µs        ? ?/sec    1.02    136.5±1.72µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    213.6±7.88µs        ? ?/sec    1.00    212.7±1.60µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    139.3±1.26µs        ? ?/sec    1.02    142.3±1.18µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.02     72.0±0.54µs        ? ?/sec    1.00     70.7±1.57µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.00    178.1±1.77µs        ? ?/sec    1.00    177.7±5.38µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.02     78.5±1.32µs        ? ?/sec    1.00     77.3±1.15µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.01    108.4±5.04µs        ? ?/sec    1.00    107.3±1.45µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.04    122.2±0.64µs        ? ?/sec    1.00    117.7±0.93µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.01    111.3±0.50µs        ? ?/sec    1.00    109.8±2.04µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    162.4±2.91µs        ? ?/sec    1.00    161.7±1.55µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.01    211.0±4.69µs        ? ?/sec    1.00    207.9±1.47µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.00    167.2±1.88µs        ? ?/sec    1.00    166.7±1.83µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00    200.5±2.29µs        ? ?/sec    1.00    199.9±1.50µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    228.3±4.60µs        ? ?/sec    1.00    228.1±3.33µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00    206.7±1.17µs        ? ?/sec    1.00    206.0±1.75µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00    151.0±1.38µs        ? ?/sec    1.00    150.3±1.31µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    198.6±1.93µs        ? ?/sec    1.00    198.5±9.92µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    155.0±1.11µs        ? ?/sec    1.01    156.3±0.73µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.00    104.4±1.31µs        ? ?/sec    1.01    105.6±1.79µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.01    173.3±1.45µs        ? ?/sec    1.00    170.7±2.33µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.03    116.0±2.65µs        ? ?/sec    1.00    112.3±1.86µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.00     78.7±0.69µs        ? ?/sec    1.01     79.3±0.43µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.00    104.4±0.56µs        ? ?/sec    1.00    104.4±2.28µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.00     81.4±1.51µs        ? ?/sec    1.01     82.2±2.17µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.00    108.5±0.68µs        ? ?/sec    1.01    109.6±1.17µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.00    177.4±3.42µs        ? ?/sec    1.00    178.3±2.00µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.00    113.0±0.75µs        ? ?/sec    1.01    114.0±0.93µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.01     42.8±0.32µs        ? ?/sec    1.00     42.5±0.52µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.00    142.9±6.23µs        ? ?/sec    1.01    143.8±2.45µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.00     47.0±0.28µs        ? ?/sec    1.00     46.9±0.54µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.00    101.4±0.92µs        ? ?/sec    1.00    101.2±1.36µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.00    175.2±1.97µs        ? ?/sec    1.01    176.8±3.58µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.00    105.4±1.08µs        ? ?/sec    1.01    106.3±1.22µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.00     37.0±0.50µs        ? ?/sec    1.00     36.8±0.31µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.00    140.7±4.26µs        ? ?/sec    1.00    141.3±3.03µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.00     41.6±0.60µs        ? ?/sec    1.00     41.7±0.50µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.01     84.7±1.46µs        ? ?/sec    1.00     83.9±0.63µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.00    102.7±1.24µs        ? ?/sec    1.00    102.5±1.31µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.00     87.0±1.64µs        ? ?/sec    1.00     86.9±1.22µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.01    109.9±3.58µs        ? ?/sec    1.00    108.4±0.77µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.01    168.5±3.84µs        ? ?/sec    1.00    167.2±1.84µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.01    114.3±2.70µs        ? ?/sec    1.00    112.6±1.61µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.02     23.5±0.40µs        ? ?/sec    1.00     23.1±0.27µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.00    123.7±1.95µs        ? ?/sec    1.00    123.4±0.93µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.00     27.9±0.49µs        ? ?/sec    1.00     28.0±0.61µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.00     82.3±1.62µs        ? ?/sec    1.00     82.6±0.59µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.00    157.3±3.60µs        ? ?/sec    1.00    156.9±2.51µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.01     87.0±1.06µs        ? ?/sec    1.00     86.5±0.49µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.00     15.4±0.37µs        ? ?/sec    1.00     15.5±0.32µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.00    121.5±1.66µs        ? ?/sec    1.00    121.8±2.49µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.00     21.3±0.42µs        ? ?/sec    1.00     21.3±0.45µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.00     79.8±0.32µs        ? ?/sec    1.00     79.7±2.11µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.00     90.1±0.86µs        ? ?/sec    1.00     89.9±0.76µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.01     82.4±0.68µs        ? ?/sec    1.00     82.0±0.59µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.00    106.0±0.67µs        ? ?/sec    1.01    107.1±0.81µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.00    144.9±2.72µs        ? ?/sec    1.00    144.4±2.43µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.00    108.4±0.86µs        ? ?/sec    1.02    110.2±1.09µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.00    146.0±0.65µs        ? ?/sec    1.00    146.6±0.76µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.01    168.4±1.55µs        ? ?/sec    1.00    167.3±1.12µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.00    151.1±1.10µs        ? ?/sec    1.00    151.6±0.78µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.00     97.1±0.81µs        ? ?/sec    1.01     97.8±0.95µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.00    139.9±0.90µs        ? ?/sec    1.00    140.5±1.59µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.00    101.4±0.88µs        ? ?/sec    1.02    103.3±2.82µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.15     44.3±2.05µs        ? ?/sec    1.00     38.7±0.55µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.00    110.3±0.56µs        ? ?/sec    1.01    111.1±4.04µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.17     50.0±1.78µs        ? ?/sec    1.00     42.8±0.78µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.00     82.8±0.46µs        ? ?/sec    1.01     83.5±2.28µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.00    104.7±0.91µs        ? ?/sec    1.01    105.6±4.44µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.01     86.6±0.53µs        ? ?/sec    1.00     86.1±0.86µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.00    110.7±2.15µs        ? ?/sec    1.00    110.8±0.33µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.01    174.5±2.83µs        ? ?/sec    1.00    173.3±0.82µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.00    115.3±1.25µs        ? ?/sec    1.00    115.6±0.70µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.00     33.2±0.11µs        ? ?/sec    1.04     34.6±0.24µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.01    135.9±0.96µs        ? ?/sec    1.00    135.1±1.77µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.00     37.8±0.83µs        ? ?/sec    1.03     39.0±0.23µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.00     92.6±2.61µs        ? ?/sec    1.01     93.3±1.45µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.00    167.7±1.74µs        ? ?/sec    1.00    168.3±1.68µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.00     96.7±0.35µs        ? ?/sec    1.02     98.3±1.08µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.00     28.9±0.13µs        ? ?/sec    1.00     28.9±1.07µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.00    132.1±3.07µs        ? ?/sec    1.00    132.4±1.79µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.00     33.5±0.44µs        ? ?/sec    1.00     33.7±0.45µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.01      6.3±0.10ms        ? ?/sec    1.00      6.3±0.06ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.00     13.2±0.46ms        ? ?/sec    1.00     13.2±0.24ms        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.00   487.4±10.40µs        ? ?/sec    1.02    495.6±7.17µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.00   651.3±11.24µs        ? ?/sec    1.00   649.0±23.28µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.00    477.1±4.50µs        ? ?/sec    1.02    486.7±4.34µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.00   649.9±13.48µs        ? ?/sec    1.04   673.4±11.85µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.01    774.2±7.79µs        ? ?/sec    1.00    766.8±5.96µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.00    653.0±8.82µs        ? ?/sec    1.05    683.6±7.48µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.00    329.3±4.46µs        ? ?/sec    1.01    331.9±9.19µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.00    419.1±7.90µs        ? ?/sec    1.00    418.2±3.72µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.00    335.7±7.57µs        ? ?/sec    1.00   335.1±12.08µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    152.6±2.45µs        ? ?/sec    1.66    253.4±4.23µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.00    166.3±2.00µs        ? ?/sec    1.34    222.9±5.46µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.00    138.7±1.62µs        ? ?/sec    1.87    259.4±3.99µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.00    363.5±4.07µs        ? ?/sec    1.33    484.7±6.57µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.00    285.1±1.93µs        ? ?/sec    1.21   344.8±10.00µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.00    371.9±5.14µs        ? ?/sec    1.33   493.8±12.89µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.01     94.7±6.27µs        ? ?/sec    1.00     94.0±1.12µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.00    112.7±0.45µs        ? ?/sec    1.00    113.2±2.77µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.00     96.4±1.05µs        ? ?/sec    1.01     97.1±1.24µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.00    127.4±0.52µs        ? ?/sec    1.01    128.1±0.71µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.00    188.2±1.72µs        ? ?/sec    1.00    188.9±4.59µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.00    132.4±3.65µs        ? ?/sec    1.00    132.7±1.93µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.04     42.6±0.33µs        ? ?/sec    1.00     41.1±0.42µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.01    144.0±2.68µs        ? ?/sec    1.00    143.2±1.68µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.03     46.7±0.30µs        ? ?/sec    1.00     45.5±0.31µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.01    101.5±2.95µs        ? ?/sec    1.00    100.8±0.35µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.00    175.7±0.94µs        ? ?/sec    1.01    176.8±3.37µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.00    105.2±0.53µs        ? ?/sec    1.01    106.6±0.63µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.00     36.8±0.22µs        ? ?/sec    1.01     37.1±0.31µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.00    141.2±2.39µs        ? ?/sec    1.00    141.5±2.30µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.00     41.6±0.17µs        ? ?/sec    1.00     41.8±0.43µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.00     84.4±0.77µs        ? ?/sec    1.00     84.2±0.64µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.01    103.6±6.34µs        ? ?/sec    1.00    102.8±0.97µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.00     86.5±0.67µs        ? ?/sec    1.00     86.7±1.26µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.00    108.3±1.36µs        ? ?/sec    1.01    109.1±1.97µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.01   169.4±11.39µs        ? ?/sec    1.00    168.0±1.74µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.00    112.4±1.18µs        ? ?/sec    1.01    113.3±0.81µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     23.9±0.29µs        ? ?/sec    1.00     24.0±0.35µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.00    123.4±2.38µs        ? ?/sec    1.00    123.0±0.66µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.00     27.9±0.42µs        ? ?/sec    1.03     28.7±0.89µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.00     81.9±0.45µs        ? ?/sec    1.02     83.8±1.07µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.00    156.3±1.28µs        ? ?/sec    1.01    158.0±1.11µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.00     87.0±1.38µs        ? ?/sec    1.01     88.3±2.06µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.00     18.6±1.11µs        ? ?/sec    1.09     20.3±0.92µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.00    121.1±1.31µs        ? ?/sec    1.01    121.8±5.00µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.00     22.9±0.45µs        ? ?/sec    1.09     24.9±0.38µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.00     80.0±1.62µs        ? ?/sec    1.00     79.8±1.90µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.00     90.4±1.56µs        ? ?/sec    1.00     90.5±3.80µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.01     82.6±0.38µs        ? ?/sec    1.00     82.1±0.72µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.00    107.1±0.66µs        ? ?/sec    1.01    107.8±1.42µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.01    151.7±0.87µs        ? ?/sec    1.00    150.9±9.09µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.00    109.1±2.23µs        ? ?/sec    1.02    111.6±0.87µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.00    146.5±1.01µs        ? ?/sec    1.00    146.4±1.11µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.01    169.9±4.97µs        ? ?/sec    1.00    168.5±1.09µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.00    151.7±1.37µs        ? ?/sec    1.00    151.4±0.94µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.00     97.4±1.36µs        ? ?/sec    1.01     98.4±1.84µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.00    141.0±1.79µs        ? ?/sec    1.01    142.1±4.41µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.00    101.8±1.54µs        ? ?/sec    1.03    105.3±9.23µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.06     41.8±1.62µs        ? ?/sec    1.00     39.3±0.68µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.01    112.2±2.77µs        ? ?/sec    1.00    111.4±3.94µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.13     51.0±2.25µs        ? ?/sec    1.00     45.0±0.68µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.00     89.3±1.53µs        ? ?/sec    1.00     89.7±2.62µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.00    107.9±0.95µs        ? ?/sec    1.00    107.4±1.29µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.00     91.8±1.58µs        ? ?/sec    1.00     91.8±1.24µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.02    121.0±3.32µs        ? ?/sec    1.00    119.1±1.49µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.01    180.8±2.73µs        ? ?/sec    1.00   179.8±13.52µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.02    125.8±3.60µs        ? ?/sec    1.00    123.6±2.01µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.01     35.0±1.28µs        ? ?/sec    1.00     34.7±0.41µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.00    135.5±1.86µs        ? ?/sec    1.00    134.9±1.12µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.00     39.0±0.20µs        ? ?/sec    1.00     38.9±0.16µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.00     93.4±1.34µs        ? ?/sec    1.00     93.6±0.56µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.00    169.2±3.65µs        ? ?/sec    1.00    168.5±2.00µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.00     97.3±0.63µs        ? ?/sec    1.02     99.0±1.30µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.00     28.9±0.15µs        ? ?/sec    1.00     28.9±0.25µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.00    132.1±0.92µs        ? ?/sec    1.01    132.9±1.72µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.00     33.3±0.25µs        ? ?/sec    1.01     33.8±0.31µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, half NULLs            1.01    121.9±0.93µs        ? ?/sec    1.00    121.3±2.01µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, no NULLs              1.00     22.9±0.59µs        ? ?/sec    1.04     23.8±0.48µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, half NULLs             1.00    248.0±2.98µs        ? ?/sec    1.00    249.2±5.39µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, no NULLs               1.00    125.4±2.80µs        ? ?/sec    1.00    125.8±3.32µs        ? ?/sec

@alamb-ghbot
Copy link

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

@Dandandan
Copy link
Contributor Author

arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    154.3±7.35µs        ? ?/sec    1.71    263.9±4.24µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.00    178.6±1.77µs        ? ?/sec    1.25    222.5±1.90µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.00    156.5±2.64µs        ? ?/sec    1.66    259.7±2.42µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.00    209.5±2.59µs        ? ?/sec    1.60    335.6±5.44µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.00    192.8±0.80µs        ? ?/sec    1.69    326.1±3.88µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.00    212.2±3.99µs        ? ?/sec    1.32    279.6±3.76µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.00    218.1±5.61µs        ? ?/sec    1.58    344.8±8.87µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    152.6±2.45µs        ? ?/sec    1.66    253.4±4.23µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.00    166.3±2.00µs        ? ?/sec    1.34    222.9±5.46µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.00    138.7±1.62µs        ? ?/sec    1.87    259.4±3.99µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.00    363.5±4.07µs        ? ?/sec    1.33    484.7±6.57µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.00    285.1±1.93µs        ? ?/sec    1.21   344.8±10.00µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.00    371.9±5.14µs        ? ?/sec    1.33   493.8±12.89µs        ? ?/sec

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                byteviewdecoder_perf                   main
-----                                --------------------                   ----
arrow_reader_clickbench/async/Q1     1.00      2.4±0.04ms        ? ?/sec    1.01      2.4±0.03ms        ? ?/sec
arrow_reader_clickbench/async/Q10    1.00     14.7±0.47ms        ? ?/sec    1.09     16.0±0.16ms        ? ?/sec
arrow_reader_clickbench/async/Q11    1.00     16.6±0.23ms        ? ?/sec    1.08     17.9±0.27ms        ? ?/sec
arrow_reader_clickbench/async/Q12    1.00     25.9±0.36ms        ? ?/sec    1.06     27.5±0.27ms        ? ?/sec
arrow_reader_clickbench/async/Q13    1.00     31.5±0.47ms        ? ?/sec    1.06     33.3±0.36ms        ? ?/sec
arrow_reader_clickbench/async/Q14    1.00     28.4±0.39ms        ? ?/sec    1.07     30.3±0.45ms        ? ?/sec
arrow_reader_clickbench/async/Q19    1.00      6.4±0.08ms        ? ?/sec    1.00      6.4±0.11ms        ? ?/sec
arrow_reader_clickbench/async/Q20    1.01    151.2±3.11ms        ? ?/sec    1.00    149.6±2.15ms        ? ?/sec
arrow_reader_clickbench/async/Q21    1.00    179.5±3.17ms        ? ?/sec    1.00    179.7±2.70ms        ? ?/sec
arrow_reader_clickbench/async/Q22    1.01   332.3±13.67ms        ? ?/sec    1.00   327.8±21.00ms        ? ?/sec
arrow_reader_clickbench/async/Q23    1.01    417.3±3.94ms        ? ?/sec    1.00    415.0±4.14ms        ? ?/sec
arrow_reader_clickbench/async/Q24    1.00     35.1±0.60ms        ? ?/sec    1.06     37.2±0.47ms        ? ?/sec
arrow_reader_clickbench/async/Q27    1.00    102.0±1.30ms        ? ?/sec    1.00    102.1±1.52ms        ? ?/sec
arrow_reader_clickbench/async/Q28    1.00    100.5±1.30ms        ? ?/sec    1.00    100.6±0.90ms        ? ?/sec
arrow_reader_clickbench/async/Q30    1.00     31.3±0.29ms        ? ?/sec    1.06     33.2±0.38ms        ? ?/sec
arrow_reader_clickbench/async/Q36    1.01    111.1±0.91ms        ? ?/sec    1.00    110.5±1.31ms        ? ?/sec
arrow_reader_clickbench/async/Q37    1.00     86.4±1.16ms        ? ?/sec    1.00     86.8±0.91ms        ? ?/sec
arrow_reader_clickbench/async/Q38    1.00     34.6±0.74ms        ? ?/sec    1.00     34.5±0.36ms        ? ?/sec
arrow_reader_clickbench/async/Q39    1.00     48.7±0.61ms        ? ?/sec    1.00     48.5±0.85ms        ? ?/sec
arrow_reader_clickbench/async/Q40    1.01     30.5±0.77ms        ? ?/sec    1.00     30.3±0.65ms        ? ?/sec
arrow_reader_clickbench/async/Q41    1.00     24.6±0.70ms        ? ?/sec    1.00     24.6±0.47ms        ? ?/sec
arrow_reader_clickbench/async/Q42    1.00     11.6±0.09ms        ? ?/sec    1.01     11.7±0.24ms        ? ?/sec
arrow_reader_clickbench/sync/Q1      1.00      2.0±0.02ms        ? ?/sec    1.01      2.1±0.03ms        ? ?/sec
arrow_reader_clickbench/sync/Q10     1.00      9.4±0.28ms        ? ?/sec    1.16     10.9±0.28ms        ? ?/sec
arrow_reader_clickbench/sync/Q11     1.00     11.1±0.38ms        ? ?/sec    1.13     12.6±0.34ms        ? ?/sec
arrow_reader_clickbench/sync/Q12     1.00     32.6±0.45ms        ? ?/sec    1.14     37.2±2.25ms        ? ?/sec
arrow_reader_clickbench/sync/Q13     1.00     44.8±0.32ms        ? ?/sec    1.14     51.0±2.03ms        ? ?/sec
arrow_reader_clickbench/sync/Q14     1.00     35.1±0.34ms        ? ?/sec    1.09     38.3±0.38ms        ? ?/sec
arrow_reader_clickbench/sync/Q19     1.00      4.5±0.05ms        ? ?/sec    1.02      4.6±0.12ms        ? ?/sec
arrow_reader_clickbench/sync/Q20     1.00    184.6±2.22ms        ? ?/sec    1.00    184.7±1.80ms        ? ?/sec
arrow_reader_clickbench/sync/Q21     1.00    245.3±2.90ms        ? ?/sec    1.00    245.8±2.25ms        ? ?/sec
arrow_reader_clickbench/sync/Q22     1.00    505.2±4.99ms        ? ?/sec    1.00    506.9±3.86ms        ? ?/sec
arrow_reader_clickbench/sync/Q23     1.00   461.6±20.32ms        ? ?/sec    1.01   466.0±14.04ms        ? ?/sec
arrow_reader_clickbench/sync/Q24     1.00     45.9±0.66ms        ? ?/sec    1.06     48.4±0.73ms        ? ?/sec
arrow_reader_clickbench/sync/Q27     1.00    160.4±1.21ms        ? ?/sec    1.02    163.3±2.52ms        ? ?/sec
arrow_reader_clickbench/sync/Q28     1.00    155.0±2.06ms        ? ?/sec    1.00    155.0±1.74ms        ? ?/sec
arrow_reader_clickbench/sync/Q30     1.00     32.2±0.41ms        ? ?/sec    1.03     33.1±0.55ms        ? ?/sec
arrow_reader_clickbench/sync/Q36     1.00    162.8±1.57ms        ? ?/sec    1.01    164.1±1.90ms        ? ?/sec
arrow_reader_clickbench/sync/Q37     1.00     90.3±0.76ms        ? ?/sec    1.02     92.4±1.37ms        ? ?/sec
arrow_reader_clickbench/sync/Q38     1.00     30.0±0.73ms        ? ?/sec    1.00     30.0±0.28ms        ? ?/sec
arrow_reader_clickbench/sync/Q39     1.00     37.2±0.52ms        ? ?/sec    1.00     37.3±0.94ms        ? ?/sec
arrow_reader_clickbench/sync/Q40     1.00     29.2±0.63ms        ? ?/sec    1.00     29.4±0.45ms        ? ?/sec
arrow_reader_clickbench/sync/Q41     1.00     31.4±0.76ms        ? ?/sec    1.00     31.4±0.30ms        ? ?/sec
arrow_reader_clickbench/sync/Q42     1.01     13.1±0.09ms        ? ?/sec    1.00     13.0±0.13ms        ? ?/sec

@alamb
Copy link
Contributor

alamb commented Jan 22, 2026

This is so good

Copy link
Contributor

@alamb alamb left a comment

Choose a reason for hiding this comment

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

Looks good other than a very subtle bug related to utf8 validation.

alamb added a commit that referenced this pull request Jan 22, 2026
# Which issue does this PR close?

- Related to #9236


# Rationale for this change

While reviewing #9236 from
@Dandandan I found (with codex's help) that the UTF8 validation for long
strings was slightly different.

This test shows the problem (it passes on main but fails on the current
PR)

# What changes are included in this PR?

Add new test

# Are these changes tested?

yes only tests 
# Are there any user-facing changes?

No
@Dandandan Dandandan merged commit 3c6ca57 into apache:main Jan 22, 2026
16 checks passed
@Dandandan
Copy link
Contributor Author

🥳

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.

Improve parquet BinaryView / StringView decoder performance

3 participants