Skip to content

Conversation

@fvaleye
Copy link
Contributor

@fvaleye fvaleye commented Jan 18, 2026

Which issue does this PR close?

N/A, it's a minor performance fix.

Rationale for this change

While reviewing Parquet performance, I observed a duplicate try_clone(). I wasn't able to tell why it was required. After benchmarking and running tests, it seems there is no reason for the duplication.
ChunkReader::get_read() for File calls try_clone() twice: once to seek, then again for the BufReader, discarding the first clone. This might be wasteful, as each try_clone() duplicates the file descriptor via a system call. So, one less dup() syscall per get_read() call.

What changes are included in this PR?

Reuse the already-seeked file clone instead of creating a new one.

Are these changes tested?

Covered by existing tests.
Local benchmarks using divan show ~36% improvement for get_read() calls on my laptop.

Are there any user-facing changes?

No.

Removes redundant try_clone() call.
Improved get_read() by ~36% on local benchmark.
@github-actions github-actions bot added the parquet Changes to the parquet crate label Jan 18, 2026
@Dandandan
Copy link
Contributor

run benchmark arrow_reader arrow_reader_row_filter arrow_reader_clickbench

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing perf/parquet-reader-double-try-clone (820b3fa) to ac640da diff
BENCH_NAME=arrow_reader
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental --bench arrow_reader
BENCH_FILTER=
BENCH_BRANCH_NAME=perf_parquet-reader-double-try-clone
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                                      main                                   perf_parquet-reader-double-try-clone
-----                                                                                                      ----                                   ------------------------------------
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.00  1248.0±10.83µs        ? ?/sec    1.01  1259.3±77.76µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.00  1306.9±16.30µs        ? ?/sec    1.00  1307.8±11.32µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.00  1256.0±16.62µs        ? ?/sec    1.00   1252.2±4.81µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.00    485.1±5.15µs        ? ?/sec    1.02   493.5±11.65µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.02   703.7±74.56µs        ? ?/sec    1.00    687.9±2.67µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.01    495.2±4.18µs        ? ?/sec    1.00    487.9±4.89µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.00    543.8±9.07µs        ? ?/sec    1.01    548.0±3.76µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.01   749.6±16.20µs        ? ?/sec    1.00    743.5±6.28µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.00    549.6±4.93µs        ? ?/sec    1.02    561.9±6.27µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.05    238.3±4.67µs        ? ?/sec    1.00    227.3±6.01µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.01    243.2±4.13µs        ? ?/sec    1.00    241.6±6.72µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.00    235.9±3.44µs        ? ?/sec    1.00   236.6±13.27µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.00    352.3±1.75µs        ? ?/sec    1.00    350.6±1.81µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.00    350.4±4.77µs        ? ?/sec    1.00    352.1±3.41µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.01    317.9±3.53µs        ? ?/sec    1.00    314.4±3.94µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.01    362.0±5.54µs        ? ?/sec    1.00    360.1±2.29µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.00   1019.2±2.98µs        ? ?/sec    1.00   1018.0±7.41µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.00    861.3±8.95µs        ? ?/sec    1.01    866.4±9.60µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.00   1026.2±5.13µs        ? ?/sec    1.00  1024.8±14.54µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.01    403.5±8.83µs        ? ?/sec    1.00    399.0±7.83µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.00    553.5±3.31µs        ? ?/sec    1.01    558.4±3.28µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.00    407.4±4.05µs        ? ?/sec    1.00    406.0±4.23µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.00    153.3±1.33µs        ? ?/sec    1.00    153.3±1.76µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.00    293.6±1.61µs        ? ?/sec    1.01    296.2±2.85µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.00    158.9±1.11µs        ? ?/sec    1.00    158.1±0.92µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.01     76.8±0.44µs        ? ?/sec    1.00     75.8±0.39µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.00    255.2±3.21µs        ? ?/sec    1.01   258.0±19.43µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.02     82.7±1.13µs        ? ?/sec    1.00     80.9±0.34µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.01    689.0±3.64µs        ? ?/sec    1.00    683.6±2.51µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.00    527.5±4.12µs        ? ?/sec    1.01    530.7±2.79µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.00    696.3±7.28µs        ? ?/sec    1.00   695.8±36.27µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.00     61.4±5.43µs        ? ?/sec    1.27     77.7±3.47µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.00    217.5±1.67µs        ? ?/sec    1.02    221.9±1.83µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.00     68.9±5.44µs        ? ?/sec    1.22     84.3±4.90µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.00     86.2±0.41µs        ? ?/sec    1.00     86.0±0.80µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.00    226.4±2.68µs        ? ?/sec    1.00    226.3±1.39µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.00     91.3±0.53µs        ? ?/sec    1.00     91.0±0.32µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.00      9.2±0.22µs        ? ?/sec    1.04      9.6±0.34µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.00    187.6±1.90µs        ? ?/sec    1.00    187.8±1.42µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.00     14.2±0.23µs        ? ?/sec    1.02     14.4±0.28µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.00    169.9±0.52µs        ? ?/sec    1.00    170.2±1.28µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.00    334.2±3.57µs        ? ?/sec    1.00    333.4±3.98µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.00    176.0±1.85µs        ? ?/sec    1.00    176.7±3.77µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.00     14.3±0.35µs        ? ?/sec    1.02     14.6±0.43µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.00    256.4±3.66µs        ? ?/sec    1.00    255.4±0.87µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.00     19.8±0.71µs        ? ?/sec    1.00     19.9±0.41µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.00    340.4±7.83µs        ? ?/sec    1.00    339.5±1.62µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.00    341.6±6.57µs        ? ?/sec    1.01    343.5±5.74µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.00    346.0±1.57µs        ? ?/sec    1.00    346.4±3.43µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.00     26.0±0.41µs        ? ?/sec    1.06     27.7±0.43µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.00    181.6±3.53µs        ? ?/sec    1.03    187.1±2.78µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.00     32.4±0.43µs        ? ?/sec    1.00     32.5±0.40µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00    109.5±2.81µs        ? ?/sec    1.00    109.2±1.04µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.00    128.2±0.71µs        ? ?/sec    1.00    128.2±0.43µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.00    112.1±1.48µs        ? ?/sec    1.01    113.1±0.39µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    159.2±1.94µs        ? ?/sec    1.01    160.8±2.55µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.00    218.6±1.08µs        ? ?/sec    1.02    222.7±7.68µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.00    164.3±2.98µs        ? ?/sec    1.00    164.6±1.87µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     75.6±0.28µs        ? ?/sec    1.00     75.4±0.39µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    176.5±0.68µs        ? ?/sec    1.00    177.1±2.82µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00     81.2±0.43µs        ? ?/sec    1.01     81.7±0.24µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.01    135.0±2.79µs        ? ?/sec    1.00    133.7±0.77µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    209.0±4.34µs        ? ?/sec    1.00    209.5±1.91µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    139.5±3.35µs        ? ?/sec    1.01    140.6±0.64µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.02     72.4±0.76µs        ? ?/sec    1.00     70.8±0.39µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.00    174.1±4.13µs        ? ?/sec    1.01    176.0±1.98µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.00     76.1±0.57µs        ? ?/sec    1.03     78.1±0.92µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.01    109.2±0.89µs        ? ?/sec    1.00    108.5±1.24µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.00    130.5±1.11µs        ? ?/sec    1.00    130.9±0.63µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.00    110.0±0.80µs        ? ?/sec    1.00    110.0±0.80µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.01    161.8±0.77µs        ? ?/sec    1.00    160.6±0.98µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.00    233.6±2.35µs        ? ?/sec    1.00    232.9±1.26µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.01    168.0±1.76µs        ? ?/sec    1.00    166.1±1.13µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00    200.3±0.50µs        ? ?/sec    1.01    202.9±0.58µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.01    250.2±5.12µs        ? ?/sec    1.00    248.4±0.84µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00    206.8±1.84µs        ? ?/sec    1.01    209.2±1.07µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.01    151.3±0.57µs        ? ?/sec    1.00    150.1±0.62µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.01    222.5±7.76µs        ? ?/sec    1.00    221.0±0.77µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    156.1±2.32µs        ? ?/sec    1.00    155.5±0.99µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.04    105.2±0.96µs        ? ?/sec    1.00    101.3±2.31µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.01    196.4±1.38µs        ? ?/sec    1.00    194.6±3.58µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.01    113.1±1.83µs        ? ?/sec    1.00    111.8±1.85µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.00     77.6±3.68µs        ? ?/sec    1.00     77.3±1.42µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.00    101.8±1.42µs        ? ?/sec    1.00    101.7±1.06µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.01     80.1±0.38µs        ? ?/sec    1.00     79.5±0.62µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.00    106.8±0.84µs        ? ?/sec    1.00    106.9±1.46µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.00    171.9±0.98µs        ? ?/sec    1.00    171.7±0.92µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.00    110.8±0.33µs        ? ?/sec    1.00    111.0±2.16µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     41.0±0.42µs        ? ?/sec    1.00     40.9±0.29µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.00    139.2±1.88µs        ? ?/sec    1.01    139.9±5.72µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.00     45.3±0.25µs        ? ?/sec    1.00     45.3±0.51µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.00    101.4±0.60µs        ? ?/sec    1.00    101.1±0.43µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.01    172.8±1.42µs        ? ?/sec    1.00    171.8±1.48µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.00    105.8±0.86µs        ? ?/sec    1.00    105.7±0.96µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.01     36.7±0.23µs        ? ?/sec    1.00     36.4±0.16µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.01    137.9±5.99µs        ? ?/sec    1.00    136.3±1.90µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.00     41.2±0.59µs        ? ?/sec    1.00     41.2±0.16µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.00     82.8±0.23µs        ? ?/sec    1.00     83.0±0.43µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.00    100.5±1.87µs        ? ?/sec    1.00    100.8±1.78µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.00     85.3±0.75µs        ? ?/sec    1.01     85.8±0.76µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.00    107.2±0.75µs        ? ?/sec    1.00    107.0±0.75µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.00    163.5±2.56µs        ? ?/sec    1.00    163.1±4.12µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.00    111.2±0.42µs        ? ?/sec    1.00    111.5±2.51µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.01     23.6±0.49µs        ? ?/sec    1.00     23.4±0.29µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.01    121.0±3.64µs        ? ?/sec    1.00    119.5±1.13µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.03     28.1±0.27µs        ? ?/sec    1.00     27.4±0.25µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.01     82.7±0.60µs        ? ?/sec    1.00     82.1±0.35µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.01    153.2±1.24µs        ? ?/sec    1.00    151.6±1.23µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.01     87.0±1.57µs        ? ?/sec    1.00     86.5±0.43µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.00     15.1±0.40µs        ? ?/sec    1.01     15.3±0.59µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.01    118.2±0.89µs        ? ?/sec    1.00    117.5±0.85µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.02     21.6±0.41µs        ? ?/sec    1.00     21.1±0.43µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.01     80.1±2.29µs        ? ?/sec    1.00     79.5±0.35µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.00    101.6±0.89µs        ? ?/sec    1.00    101.4±6.18µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.00     82.3±0.76µs        ? ?/sec    1.00     82.3±0.67µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.02    107.2±1.18µs        ? ?/sec    1.00    105.6±1.63µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.02   167.9±10.44µs        ? ?/sec    1.00    164.1±1.35µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.01    110.2±0.58µs        ? ?/sec    1.00    109.3±0.57µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.00    146.0±0.55µs        ? ?/sec    1.00    145.4±0.50µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.01    190.6±1.01µs        ? ?/sec    1.00    189.6±1.30µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.00    150.8±0.41µs        ? ?/sec    1.00    150.7±1.01µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.00     96.5±0.85µs        ? ?/sec    1.00     96.2±0.77µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.01    161.7±0.82µs        ? ?/sec    1.00    160.7±1.21µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.00    100.9±0.79µs        ? ?/sec    1.00    100.9±1.14µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.02     42.5±2.85µs        ? ?/sec    1.00     41.6±2.73µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.00    132.0±1.68µs        ? ?/sec    1.00    132.1±2.71µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.04     46.3±2.94µs        ? ?/sec    1.00     44.7±1.91µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.01     82.0±0.79µs        ? ?/sec    1.00     81.5±0.55µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.01    103.2±5.30µs        ? ?/sec    1.00    102.3±2.98µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.00     84.0±0.57µs        ? ?/sec    1.00     84.1±0.52µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.00    109.4±3.08µs        ? ?/sec    1.00    109.7±6.16µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.00    169.8±1.26µs        ? ?/sec    1.00    169.5±5.46µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.00    113.3±0.70µs        ? ?/sec    1.00    113.4±0.94µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.00     34.7±0.31µs        ? ?/sec    1.00     34.8±0.27µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.00    130.9±1.99µs        ? ?/sec    1.00    131.3±1.90µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.00     39.0±0.45µs        ? ?/sec    1.00     38.9±0.19µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.00     93.2±2.11µs        ? ?/sec    1.00     93.6±2.10µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.00    164.5±2.61µs        ? ?/sec    1.00    164.1±2.06µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.00     98.3±2.96µs        ? ?/sec    1.00     98.5±1.85µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.00     28.6±0.13µs        ? ?/sec    1.01     28.9±0.76µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.00    128.7±0.69µs        ? ?/sec    1.00    128.7±0.75µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.00     33.2±0.23µs        ? ?/sec    1.00     33.4±0.23µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.00      7.1±0.04ms        ? ?/sec    1.01      7.2±0.07ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.00     12.5±0.15ms        ? ?/sec    1.04     13.0±0.33ms        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.02    497.4±9.81µs        ? ?/sec    1.00   489.8±14.09µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.00    685.9±4.69µs        ? ?/sec    1.00    686.9±6.90µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.00    487.2±5.10µs        ? ?/sec    1.01    490.9±4.34µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.00   638.3±10.09µs        ? ?/sec    1.01    644.3±7.84µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.00    792.9±8.35µs        ? ?/sec    1.00    794.2±5.41µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.00    646.1±4.54µs        ? ?/sec    1.01   652.5±10.13µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.01    313.7±2.82µs        ? ?/sec    1.00    312.0±4.02µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.00    392.3±8.61µs        ? ?/sec    1.00    392.8±2.84µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.00    317.6±1.75µs        ? ?/sec    1.00    318.2±4.03µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.01    228.0±4.40µs        ? ?/sec    1.00    226.8±3.45µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.00    240.9±1.71µs        ? ?/sec    1.04    250.2±3.83µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.00    232.9±3.86µs        ? ?/sec    1.06    245.8±2.93µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.01    477.7±3.89µs        ? ?/sec    1.00    475.1±2.05µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.00    370.2±3.31µs        ? ?/sec    1.00    371.1±2.33µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.00    486.4±4.83µs        ? ?/sec    1.00   486.9±14.32µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.00     92.7±0.39µs        ? ?/sec    1.04     96.0±9.39µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.01    110.7±0.62µs        ? ?/sec    1.00    109.8±0.53µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.00     95.1±0.64µs        ? ?/sec    1.00     95.2±0.68µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.00    126.7±0.66µs        ? ?/sec    1.00    126.5±1.52µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.01    184.7±2.56µs        ? ?/sec    1.00    183.1±3.60µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.00    131.2±1.17µs        ? ?/sec    1.00    130.8±1.07µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     42.5±0.15µs        ? ?/sec    1.00     42.7±0.25µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.00    138.9±1.94µs        ? ?/sec    1.00    138.6±2.02µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.00     46.7±0.39µs        ? ?/sec    1.00     46.9±0.39µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.00    100.5±0.73µs        ? ?/sec    1.00    100.7±0.51µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.00    171.9±2.33µs        ? ?/sec    1.00    171.1±0.75µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.01    105.9±1.05µs        ? ?/sec    1.00    105.3±0.48µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.00     36.6±0.17µs        ? ?/sec    1.00     36.6±0.19µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.01    138.0±5.01µs        ? ?/sec    1.00    136.5±4.07µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.00     41.1±0.09µs        ? ?/sec    1.00     41.2±0.21µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.00     83.0±0.74µs        ? ?/sec    1.00     83.0±0.83µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.01    100.5±0.90µs        ? ?/sec    1.00    100.0±1.54µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.00     85.4±0.58µs        ? ?/sec    1.00     85.7±1.21µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.00    107.5±1.52µs        ? ?/sec    1.00    107.9±1.37µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.00    163.9±1.53µs        ? ?/sec    1.00    164.1±5.62µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.00    111.4±1.24µs        ? ?/sec    1.00    111.5±0.48µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     23.5±0.20µs        ? ?/sec    1.02     23.9±0.31µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.00    120.8±0.89µs        ? ?/sec    1.02   123.0±14.56µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.07     27.9±0.58µs        ? ?/sec    1.00     26.2±0.22µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.00     82.4±1.09µs        ? ?/sec    1.00     82.6±0.47µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.01    153.5±3.27µs        ? ?/sec    1.00    152.6±2.49µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.00     87.1±1.07µs        ? ?/sec    1.00     87.4±2.17µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.00     18.4±1.02µs        ? ?/sec    1.02     18.7±0.85µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.01    118.4±0.67µs        ? ?/sec    1.00    117.3±0.84µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.03     23.9±1.59µs        ? ?/sec    1.00     23.2±0.55µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.00     79.4±0.25µs        ? ?/sec    1.00     79.4±0.41µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.00    101.9±1.23µs        ? ?/sec    1.03    105.1±0.44µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.00     82.2±1.29µs        ? ?/sec    1.00     81.9±0.47µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.00    106.3±2.59µs        ? ?/sec    1.01    107.0±1.52µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.01    167.2±1.77µs        ? ?/sec    1.00    165.2±1.12µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.00    109.1±0.72µs        ? ?/sec    1.01    110.0±0.80µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.01    147.0±0.66µs        ? ?/sec    1.00    146.0±0.62µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.01    190.2±1.21µs        ? ?/sec    1.00    188.6±1.48µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.01    151.9±0.73µs        ? ?/sec    1.00    150.5±0.83µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.00     97.0±0.78µs        ? ?/sec    1.00     97.1±1.32µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.02   164.4±10.90µs        ? ?/sec    1.00    160.6±1.02µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.02    102.3±1.21µs        ? ?/sec    1.00    100.7±0.67µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.10     45.4±2.50µs        ? ?/sec    1.00     41.4±2.93µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.01    133.7±1.69µs        ? ?/sec    1.00    132.0±1.23µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.10     51.2±2.95µs        ? ?/sec    1.00     46.5±1.87µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.00     88.3±1.07µs        ? ?/sec    1.00     88.2±1.00µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.00    105.2±0.44µs        ? ?/sec    1.00    105.5±1.60µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.01     91.1±3.63µs        ? ?/sec    1.00     90.7±0.40µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.00    118.4±0.87µs        ? ?/sec    1.00    118.0±0.87µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.00    174.8±3.13µs        ? ?/sec    1.00    174.1±0.95µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.00    122.2±0.55µs        ? ?/sec    1.00    122.0±0.37µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     34.5±0.21µs        ? ?/sec    1.01     34.9±0.26µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.00    131.1±1.78µs        ? ?/sec    1.00    131.0±0.52µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.00     38.9±0.33µs        ? ?/sec    1.00     39.0±0.74µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.00     93.2±1.61µs        ? ?/sec    1.00     93.1±1.83µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.00    164.3±2.13µs        ? ?/sec    1.00    163.7±4.32µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.00     97.6±1.71µs        ? ?/sec    1.00     97.6±0.33µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.00     28.7±0.61µs        ? ?/sec    1.00     28.7±0.12µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.00    128.9±0.65µs        ? ?/sec    1.00    128.6±2.40µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.02     34.0±0.28µs        ? ?/sec    1.00     33.2±0.29µs        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing perf/parquet-reader-double-try-clone (820b3fa) to ac640da diff
BENCH_NAME=arrow_reader_row_filter
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental --bench arrow_reader_row_filter
BENCH_FILTER=
BENCH_BRANCH_NAME=perf_parquet-reader-double-try-clone
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                main                                   perf_parquet-reader-double-try-clone
-----                                                                                ----                                   ------------------------------------
arrow_reader_row_filter/float64 <= 99.0/all_columns/async                            1.00  1691.8±11.00µs        ? ?/sec    1.00  1684.5±16.55µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/all_columns/sync                             1.00  1788.7±21.12µs        ? ?/sec    1.02  1821.3±173.67µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/async                  1.00  1540.8±21.06µs        ? ?/sec    1.00  1534.6±16.78µs        ? ?/sec
arrow_reader_row_filter/float64 <= 99.0/exclude_filter_column/sync                   1.00  1500.3±10.53µs        ? ?/sec    1.01  1508.3±16.36µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/async              1.01  1495.1±18.27µs        ? ?/sec    1.00  1479.9±16.55µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/all_columns/sync               1.00  1630.0±20.63µs        ? ?/sec    1.01  1648.3±40.05µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/async    1.00  1305.9±21.03µs        ? ?/sec    1.01  1317.7±12.09µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0 AND ts >= 9000/exclude_filter_column/sync     1.00  1323.7±52.50µs        ? ?/sec    1.00  1318.6±18.15µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/async                             1.00  1686.4±10.91µs        ? ?/sec    1.00  1683.0±23.29µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/all_columns/sync                              1.00  1785.1±15.37µs        ? ?/sec    1.01  1800.4±42.10µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/async                   1.00  1534.5±12.57µs        ? ?/sec    1.00  1538.1±16.89µs        ? ?/sec
arrow_reader_row_filter/float64 > 99.0/exclude_filter_column/sync                    1.00  1511.9±14.99µs        ? ?/sec    1.00  1504.4±11.99µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/async                              1.00   901.7±12.46µs        ? ?/sec    1.00   902.2±18.64µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/all_columns/sync                               1.02   853.1±16.24µs        ? ?/sec    1.00    838.9±6.98µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/async                    1.03   840.8±26.65µs        ? ?/sec    1.00    817.5±9.79µs        ? ?/sec
arrow_reader_row_filter/int64 == 9999/exclude_filter_column/sync                     1.02   846.9±11.91µs        ? ?/sec    1.00   831.9±13.28µs        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/async                                 1.00      2.7±0.03ms        ? ?/sec    1.00      2.7±0.03ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/all_columns/sync                                  1.01      2.5±0.02ms        ? ?/sec    1.00      2.5±0.03ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/async                       1.02      2.7±0.07ms        ? ?/sec    1.00      2.6±0.05ms        ? ?/sec
arrow_reader_row_filter/int64 > 90/exclude_filter_column/sync                        1.01      2.3±0.06ms        ? ?/sec    1.00      2.3±0.03ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/async                                  1.00  1953.5±21.13µs        ? ?/sec    1.00  1961.6±19.51µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/all_columns/sync                                   1.00  1998.8±13.78µs        ? ?/sec    1.02      2.0±0.02ms        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/async                        1.00  1755.0±35.27µs        ? ?/sec    1.00  1750.8±12.20µs        ? ?/sec
arrow_reader_row_filter/ts < 9000/exclude_filter_column/sync                         1.00  1753.6±12.40µs        ? ?/sec    1.01  1763.5±21.45µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/async                                 1.00  1229.9±10.91µs        ? ?/sec    1.03  1261.5±20.29µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/all_columns/sync                                  1.00  1244.5±38.43µs        ? ?/sec    1.01   1259.1±8.85µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/async                       1.00   1117.1±8.38µs        ? ?/sec    1.01   1123.5±8.43µs        ? ?/sec
arrow_reader_row_filter/ts >= 9000/exclude_filter_column/sync                        1.01  1141.4±64.04µs        ? ?/sec    1.00  1127.2±19.29µs        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/async                             1.00      3.2±0.03ms        ? ?/sec    1.01      3.2±0.05ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/all_columns/sync                              1.00      3.5±0.12ms        ? ?/sec    1.02      3.6±0.04ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/async                   1.00      2.8±0.02ms        ? ?/sec    1.02      2.8±0.02ms        ? ?/sec
arrow_reader_row_filter/utf8View <> ''/exclude_filter_column/sync                    1.00      2.5±0.03ms        ? ?/sec    1.01      2.6±0.10ms        ? ?/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 perf/parquet-reader-double-try-clone (820b3fa) to ac640da 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=perf_parquet-reader-double-try-clone
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                main                                   perf_parquet-reader-double-try-clone
-----                                ----                                   ------------------------------------
arrow_reader_clickbench/async/Q1     1.02      2.4±0.06ms        ? ?/sec    1.00      2.4±0.04ms        ? ?/sec
arrow_reader_clickbench/async/Q10    1.00     12.8±0.63ms        ? ?/sec    1.17     15.0±0.58ms        ? ?/sec
arrow_reader_clickbench/async/Q11    1.00     14.4±0.49ms        ? ?/sec    1.19     17.1±0.50ms        ? ?/sec
arrow_reader_clickbench/async/Q12    1.00     24.6±0.43ms        ? ?/sec    1.10     27.2±0.35ms        ? ?/sec
arrow_reader_clickbench/async/Q13    1.00     29.9±0.36ms        ? ?/sec    1.10     33.0±0.67ms        ? ?/sec
arrow_reader_clickbench/async/Q14    1.00     27.1±0.40ms        ? ?/sec    1.08     29.4±0.57ms        ? ?/sec
arrow_reader_clickbench/async/Q19    1.00      5.3±0.08ms        ? ?/sec    1.12      5.9±0.17ms        ? ?/sec
arrow_reader_clickbench/async/Q20    1.00    127.0±3.00ms        ? ?/sec    1.25    158.6±2.48ms        ? ?/sec
arrow_reader_clickbench/async/Q21    1.00    161.8±1.86ms        ? ?/sec    1.03    166.8±3.53ms        ? ?/sec
arrow_reader_clickbench/async/Q22    1.00   308.4±17.13ms        ? ?/sec    1.05   323.5±27.67ms        ? ?/sec
arrow_reader_clickbench/async/Q23    1.00    394.5±2.51ms        ? ?/sec    1.04    410.5±3.45ms        ? ?/sec
arrow_reader_clickbench/async/Q24    1.00     33.5±0.35ms        ? ?/sec    1.08     36.3±0.61ms        ? ?/sec
arrow_reader_clickbench/async/Q27    1.00     96.6±1.53ms        ? ?/sec    1.04    100.1±0.84ms        ? ?/sec
arrow_reader_clickbench/async/Q28    1.00     95.5±1.10ms        ? ?/sec    1.04     99.0±1.37ms        ? ?/sec
arrow_reader_clickbench/async/Q30    1.00     29.4±0.88ms        ? ?/sec    1.10     32.2±0.35ms        ? ?/sec
arrow_reader_clickbench/async/Q36    1.00    104.8±0.97ms        ? ?/sec    1.04    109.0±1.25ms        ? ?/sec
arrow_reader_clickbench/async/Q37    1.00     81.8±1.56ms        ? ?/sec    1.03     84.6±1.21ms        ? ?/sec
arrow_reader_clickbench/async/Q38    1.00     31.4±0.45ms        ? ?/sec    1.09     34.1±0.37ms        ? ?/sec
arrow_reader_clickbench/async/Q39    1.00     43.9±0.33ms        ? ?/sec    1.09     47.7±0.64ms        ? ?/sec
arrow_reader_clickbench/async/Q40    1.00     26.8±0.42ms        ? ?/sec    1.12     30.1±0.60ms        ? ?/sec
arrow_reader_clickbench/async/Q41    1.00     21.7±0.31ms        ? ?/sec    1.13     24.5±0.47ms        ? ?/sec
arrow_reader_clickbench/async/Q42    1.00     10.6±0.07ms        ? ?/sec    1.09     11.5±0.18ms        ? ?/sec
arrow_reader_clickbench/sync/Q1      1.01      2.1±0.01ms        ? ?/sec    1.00      2.0±0.01ms        ? ?/sec
arrow_reader_clickbench/sync/Q10     1.01     10.2±0.15ms        ? ?/sec    1.00     10.1±0.06ms        ? ?/sec
arrow_reader_clickbench/sync/Q11     1.02     11.7±0.20ms        ? ?/sec    1.00     11.5±0.22ms        ? ?/sec
arrow_reader_clickbench/sync/Q12     1.02     34.3±1.93ms        ? ?/sec    1.00     33.5±0.83ms        ? ?/sec
arrow_reader_clickbench/sync/Q13     1.03     50.5±1.49ms        ? ?/sec    1.00     49.0±2.04ms        ? ?/sec
arrow_reader_clickbench/sync/Q14     1.00     36.5±0.89ms        ? ?/sec    1.23     44.8±0.88ms        ? ?/sec
arrow_reader_clickbench/sync/Q19     1.00      4.4±0.06ms        ? ?/sec    1.01      4.4±0.08ms        ? ?/sec
arrow_reader_clickbench/sync/Q20     1.00    178.0±1.58ms        ? ?/sec    1.01    179.6±1.36ms        ? ?/sec
arrow_reader_clickbench/sync/Q21     1.01    239.1±1.82ms        ? ?/sec    1.00    237.8±2.63ms        ? ?/sec
arrow_reader_clickbench/sync/Q22     1.00    485.2±3.21ms        ? ?/sec    1.00    487.1±4.04ms        ? ?/sec
arrow_reader_clickbench/sync/Q23     1.00   448.2±20.21ms        ? ?/sec    1.01   452.3±14.15ms        ? ?/sec
arrow_reader_clickbench/sync/Q24     1.00     45.5±0.74ms        ? ?/sec    1.03     46.9±0.71ms        ? ?/sec
arrow_reader_clickbench/sync/Q27     1.00    156.3±1.56ms        ? ?/sec    1.00    155.8±1.60ms        ? ?/sec
arrow_reader_clickbench/sync/Q28     1.00    149.7±1.23ms        ? ?/sec    1.00    149.2±1.54ms        ? ?/sec
arrow_reader_clickbench/sync/Q30     1.00     32.5±0.80ms        ? ?/sec    1.00     32.4±0.69ms        ? ?/sec
arrow_reader_clickbench/sync/Q36     1.00    157.4±2.30ms        ? ?/sec    1.00    156.8±1.33ms        ? ?/sec
arrow_reader_clickbench/sync/Q37     1.01     89.3±1.98ms        ? ?/sec    1.00     88.9±0.95ms        ? ?/sec
arrow_reader_clickbench/sync/Q38     1.00     29.8±0.58ms        ? ?/sec    1.00     29.7±0.19ms        ? ?/sec
arrow_reader_clickbench/sync/Q39     1.00     35.3±0.62ms        ? ?/sec    1.01     35.6±0.52ms        ? ?/sec
arrow_reader_clickbench/sync/Q40     1.00     28.1±0.59ms        ? ?/sec    1.01     28.3±0.51ms        ? ?/sec
arrow_reader_clickbench/sync/Q41     1.00     30.4±0.46ms        ? ?/sec    1.01     30.7±0.74ms        ? ?/sec
arrow_reader_clickbench/sync/Q42     1.00     12.8±0.38ms        ? ?/sec    1.00     12.8±0.18ms        ? ?/sec

@Dandandan Dandandan merged commit ba3446b into apache:main Jan 18, 2026
16 checks passed
@alamb
Copy link
Contributor

alamb commented Jan 19, 2026

Love it -- thank you @fvaleye and @Dandandan

@alamb
Copy link
Contributor

alamb commented Jan 19, 2026

BTW I think @AdamGS fixed another unecessary read when reading from object store in the soon to be relesed

I am still waiting on one more vote to get the release approved so I can pubish it

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

Labels

parquet Changes to the parquet crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants